@raydium-io/raydium-sdk-v2 0.1.80-alpha → 0.1.81-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.
Files changed (99) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/{api-32ee53bc.d.ts → api-7264fa6b.d.ts} +13 -13
  5. package/lib/common/accountInfo.d.ts +1 -1
  6. package/lib/common/bignumber.d.ts +1 -1
  7. package/lib/common/constant.d.ts +1 -1
  8. package/lib/common/fractionUtil.d.ts +1 -1
  9. package/lib/common/index.d.ts +1 -1
  10. package/lib/common/transfer.d.ts +1 -1
  11. package/lib/common/txTool/txTool.d.ts +1 -1
  12. package/lib/common/txTool/txUtils.d.ts +1 -1
  13. package/lib/common/utility.d.ts +1 -1
  14. package/lib/index.d.ts +3 -3
  15. package/lib/index.js +1 -1
  16. package/lib/index.js.map +1 -1
  17. package/lib/index.mjs +1 -1
  18. package/lib/index.mjs.map +1 -1
  19. package/lib/module/amount.d.ts +1 -1
  20. package/lib/module/fraction.d.ts +1 -1
  21. package/lib/module/index.d.ts +1 -1
  22. package/lib/module/percent.d.ts +1 -1
  23. package/lib/module/price.d.ts +1 -1
  24. package/lib/raydium/account/account.d.ts +3 -3
  25. package/lib/raydium/account/account.js +1 -1
  26. package/lib/raydium/account/account.js.map +1 -1
  27. package/lib/raydium/account/account.mjs +1 -1
  28. package/lib/raydium/account/account.mjs.map +1 -1
  29. package/lib/raydium/account/index.d.ts +1 -1
  30. package/lib/raydium/account/instruction.d.ts +1 -1
  31. package/lib/raydium/account/layout.d.ts +2 -2
  32. package/lib/raydium/account/types.d.ts +1 -1
  33. package/lib/raydium/account/util.d.ts +1 -1
  34. package/lib/raydium/clmm/clmm.d.ts +3 -3
  35. package/lib/raydium/clmm/index.d.ts +3 -3
  36. package/lib/raydium/clmm/instrument.d.ts +2 -2
  37. package/lib/raydium/clmm/layout.d.ts +15 -15
  38. package/lib/raydium/clmm/type.d.ts +2 -2
  39. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  40. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  41. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  42. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  43. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  44. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  45. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  46. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  47. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  48. package/lib/raydium/cpmm/index.d.ts +1 -1
  49. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  50. package/lib/raydium/cpmm/layout.d.ts +3 -3
  51. package/lib/raydium/cpmm/type.d.ts +1 -1
  52. package/lib/raydium/farm/config.d.ts +1 -1
  53. package/lib/raydium/farm/farm.d.ts +3 -3
  54. package/lib/raydium/farm/index.d.ts +1 -1
  55. package/lib/raydium/farm/instruction.d.ts +1 -1
  56. package/lib/raydium/farm/layout.d.ts +1 -1
  57. package/lib/raydium/farm/type.d.ts +1 -1
  58. package/lib/raydium/farm/util.d.ts +1 -1
  59. package/lib/raydium/ido/ido.d.ts +3 -3
  60. package/lib/raydium/ido/index.d.ts +3 -3
  61. package/lib/raydium/ido/instruction.d.ts +1 -1
  62. package/lib/raydium/ido/type.d.ts +1 -1
  63. package/lib/raydium/index.d.ts +3 -3
  64. package/lib/raydium/index.js +1 -1
  65. package/lib/raydium/index.js.map +1 -1
  66. package/lib/raydium/index.mjs +1 -1
  67. package/lib/raydium/index.mjs.map +1 -1
  68. package/lib/raydium/liquidity/index.d.ts +1 -1
  69. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  70. package/lib/raydium/liquidity/layout.d.ts +2 -2
  71. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  72. package/lib/raydium/liquidity/type.d.ts +1 -1
  73. package/lib/raydium/liquidity/utils.d.ts +1 -1
  74. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  75. package/lib/raydium/marketV2/index.d.ts +3 -3
  76. package/lib/raydium/moduleBase.d.ts +3 -3
  77. package/lib/raydium/raydium.d.ts +3 -3
  78. package/lib/raydium/raydium.js +1 -1
  79. package/lib/raydium/raydium.js.map +1 -1
  80. package/lib/raydium/raydium.mjs +1 -1
  81. package/lib/raydium/raydium.mjs.map +1 -1
  82. package/lib/raydium/serum/layout.d.ts +2 -2
  83. package/lib/raydium/token/constant.d.ts +1 -1
  84. package/lib/raydium/token/index.d.ts +1 -1
  85. package/lib/raydium/token/layout.d.ts +2 -2
  86. package/lib/raydium/token/token.d.ts +3 -3
  87. package/lib/raydium/token/type.d.ts +1 -1
  88. package/lib/raydium/token/utils.d.ts +1 -1
  89. package/lib/raydium/tradeV2/index.d.ts +2 -2
  90. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  91. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  92. package/lib/raydium/tradeV2/type.d.ts +2 -2
  93. package/lib/raydium/type.d.ts +1 -1
  94. package/lib/raydium/utils1216/index.d.ts +3 -3
  95. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  96. package/lib/{raydium-7a07027a.d.ts → raydium-dc89bd2c.d.ts} +8 -5
  97. package/lib/{type-af770c47.d.ts → type-c36f6551.d.ts} +1 -1
  98. package/package.json +2 -2
  99. package/src/raydium/account/account.ts +21 -7
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var cl=Object.defineProperty,ll=Object.defineProperties;var ml=Object.getOwnPropertyDescriptors;var fi=Object.getOwnPropertySymbols;var wa=Object.prototype.hasOwnProperty,Pa=Object.prototype.propertyIsEnumerable;var Aa=(o,e,t)=>e in o?cl(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,L=(o,e)=>{for(var t in e||(e={}))wa.call(e,t)&&Aa(o,t,e[t]);if(fi)for(var t of fi(e))Pa.call(e,t)&&Aa(o,t,e[t]);return o},D=(o,e)=>ll(o,ml(e));var ve=(o,e)=>{var t={};for(var n in o)wa.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&fi)for(var n of fi(o))e.indexOf(n)<0&&Pa.call(o,n)&&(t[n]=o[n]);return t};import du from"axios";import{PublicKey as Ta}from"@solana/web3.js";import{get as Ir,set as ka}from"lodash";var dl=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(dl||{}),Br=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}},xr={},ha={};function me(o){let e=Ir(xr,o);if(!e){let t=Ir(ha,o);e=new Br({name:o,logLevel:t}),ka(xr,o,e)}return e}function oy(o,e){ka(ha,o,e);let t=Ir(xr,o);t&&(t.level=e)}import{MINT_SIZE as pl,TOKEN_PROGRAM_ID as fl,getTransferFeeConfig as yl,unpackMint as bl}from"@solana/spl-token";var Sr=me("Raydium_accountInfo_util");async function Lt(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:s=100}=L({batchRequest:!1},t),r=Kr(e,s),a=new Array(r.length).fill([]);if(n){let c=r.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Kr(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Sr.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"&&Sr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ta(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>o.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&Sr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function ze(o,e,t){let n=await Lt(o,e.map(i=>i.pubkey),t);return e.map((i,s)=>D(L({},i),{accountInfo:n[s]}))}var gl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(gl||{}),dy=1;async function Qn({connection:o,mints:e,config:t}){var s,r,a;if(e.length===0)return{};let n=await ze(o,e.map(c=>({pubkey:ht(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<pl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=bl(c.pubkey,c.accountInfo,(s=c.accountInfo)==null?void 0:s.owner);i[c.pubkey.toString()]=D(L({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||fl,feeConfig:(a=yl(u))!=null?a:void 0})}return i[Ta.default.toBase58()]=i[H.toBase58()],i}import De from"bn.js";var Yn=9e15,dn=1e9,Cr="0123456789abcdef",bi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",gi="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Rr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Yn,maxE:Yn,crypto:!1},Sa,jt,re=!0,wi="[DecimalError] ",mn=wi+"Invalid argument: ",Ka=wi+"Precision limit exceeded",Ca=wi+"crypto unavailable",Ra="[object Decimal]",it=Math.floor,Qe=Math.pow,Al=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,wl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Pl=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,La=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Mt=1e7,ne=7,kl=9007199254740991,hl=bi.length-1,Lr=gi.length-1,v={toStringTag:Ra};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),J(o)};v.ceil=function(){return J(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(mn+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};v.comparedTo=v.cmp=function(o){var e,t,n,i,s=this,r=s.d,a=(o=new s.constructor(o)).d,c=s.s,u=o.s;if(!r||!a)return!c||!u?NaN:c!==u?c:r===a?0:!r^c<0?1:-1;if(!r[0]||!a[0])return r[0]?c:a[0]?-u:0;if(c!==u)return c;if(s.e!==o.e)return s.e>o.e^c<0?1:-1;for(n=r.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(r[e]!==a[e])return r[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Tl(n,Va(n,t)),n.precision=o,n.rounding=e,J(jt==2||jt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,i,s,r,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,s=l.s*Qe(l.s*l,1/3),!s||Math.abs(s)==1/0?(t=et(l.d),o=l.e,(s=(o-t.length+1)%3)&&(t+=s==1||s==-2?"0":"00"),s=Qe(t,1/3),o=it((o+1)/3)-(o%3==(o<0?-1:2)),s==1/0?t="5e"+o:(t=s.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(s.toString()),r=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Te(u.plus(l).times(a),u.plus(c),r+2,1),et(a.d).slice(0,r)===(t=et(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!i&&t=="4999"){if(!i&&(J(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}r+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,J(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-it(this.e/ne))*ne,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return Te(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return J(Te(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return J(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,i,s=this,r=s.constructor,a=new r(1);if(!s.isFinite())return new r(s.s?1/0:NaN);if(s.isZero())return a;t=r.precision,n=r.rounding,r.precision=t+Math.max(s.e,s.sd())+4,r.rounding=1,i=s.d.length,i<32?(o=Math.ceil(i/3),e=(1/ki(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),s=jn(r,1,s.times(e),new r(1),!0);for(var c,u=o,l=new r(8);u--;)c=s.times(s),s=a.minus(c.times(l.minus(c.times(l))));return J(s,r.precision=t,r.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,i=this,s=i.constructor;if(!i.isFinite()||i.isZero())return new s(i);if(e=s.precision,t=s.rounding,s.precision=e+Math.max(i.e,i.sd())+4,s.rounding=1,n=i.d.length,n<3)i=jn(s,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/ki(5,o)),i=jn(s,2,i,i,!0);for(var r,a=new s(5),c=new s(16),u=new s(20);o--;)r=i.times(i),i=i.times(a.plus(r.times(c.times(r).plus(u))))}return s.precision=e,s.rounding=t,J(i,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Te(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,s=t.rounding;return n!==-1?n===0?e.isNeg()?Ot(t,i,s):new t(0):new t(NaN):e.isZero()?Ot(t,i+4,s).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=Ot(t,i+4,s).times(.5),t.precision=i,t.rounding=s,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,i=this,s=i.constructor;return i.isFinite()?i.e>=0?new s(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=s.precision,e=s.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?J(new s(i),o,e,!0):(s.precision=t=n-i.e,i=Te(i.plus(1),new s(1).minus(i),t+o,1),s.precision=o+4,s.rounding=1,i=i.ln(),s.precision=o,s.rounding=e,i.times(.5))):new s(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,i=this,s=i.constructor;return i.isZero()?new s(i):(e=i.abs().cmp(1),t=s.precision,n=s.rounding,e!==-1?e===0?(o=Ot(s,t+4,n).times(.5),o.s=i.s,o):new s(NaN):(s.precision=t+6,s.rounding=1,i=i.div(new s(1).minus(i.times(i)).sqrt().plus(1)).atan(),s.precision=t,s.rounding=n,i.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,i,s,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Lr)return r=Ot(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=Lr)return r=Ot(l,m+4,d).times(.5),r.s=u.s,r}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),r=new l(u),i=u;o!==-1;)if(i=i.times(c),s=r.minus(i.div(n+=2)),i=i.times(c),r=s.plus(i.div(n+=2)),r.d[e]!==void 0)for(o=e;r.d[o]===s.d[o]&&o--;);return t&&(r=r.times(2<<t-1)),re=!0,J(r,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&it(this.e/ne)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,i,s,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)s=!0;else{for(i=t[0];i%10===0;)i/=10;s=i!==1}if(re=!1,a=m+p,r=ln(u,a),n=e?Ai(l,a+10):ln(o,a),c=Te(r,n,a,1),po(c.d,i=m,d))do if(a+=10,r=ln(u,a),n=e?Ai(l,a+10):ln(o,a),c=Te(r,n,a,1),!s){+et(c.d).slice(i+1,i+15)+1==1e14&&(c=J(c,m+1,0));break}while(po(c.d,i+=10,d));return re=!0,J(c,m,d)};v.minus=v.sub=function(o){var e,t,n,i,s,r,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return re?J(o,a,c):o}if(t=it(o.e/ne),l=it(p.e/ne),u=u.slice(),s=l-t,s){for(m=s<0,m?(e=u,s=-s,r=d.length):(e=d,t=l,r=u.length),n=Math.max(Math.ceil(a/ne),r)+2,s>n&&(s=n,e.length=1),e.reverse(),n=s;n--;)e.push(0);e.reverse()}else{for(n=u.length,r=d.length,m=n<r,m&&(r=n),n=0;n<r;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}s=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),r=u.length,n=d.length-r;n>0;--n)u[r++]=0;for(n=d.length;n>s;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Mt-1;--u[i],u[n]+=Mt}u[n]-=d[n]}for(;u[--r]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=Pi(u,t),re?J(o,a,c):o):new y(c===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=Te(t,o.abs(),0,3,1),e.s*=o.s):e=Te(t,o,0,n.modulo,1),e=e.times(o),re=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return Or(this)};v.naturalLogarithm=v.ln=function(){return ln(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,J(o)};v.plus=v.add=function(o){var e,t,n,i,s,r,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),re?J(o,a,c):o;if(s=it(m.e/ne),n=it(o.e/ne),u=u.slice(),i=s-n,i){for(i<0?(t=u,i=-i,r=l.length):(t=l,n=s,r=u.length),s=Math.ceil(a/ne),r=s>r?s+1:r+1,i>r&&(i=r,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(r=u.length,i=l.length,r-i<0&&(i=r,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Mt|0,u[i]%=Mt;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return o.d=u,o.e=Pi(u,n),re?J(o,a,c):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(mn+o);return t.d?(e=Oa(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return J(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Bl(n,Va(n,t)),n.precision=o,n.rounding=e,J(jt>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,i,s,r=this,a=r.d,c=r.e,u=r.s,l=r.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?r:1/0);for(re=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=et(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=it((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(s=n,n=s.plus(Te(r,s,t+2,1)).times(.5),et(s.d).slice(0,t)===(e=et(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(J(s,c+1,0),s.times(s).eq(r))){n=s;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),o=!n.times(n).eq(r));break}return re=!0,J(n,c,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Te(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,J(jt==2||jt==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,i,s,r,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=it(l.e/ne)+it(o.e/ne),c=d.length,u=p.length,c<u&&(s=d,d=p,p=s,r=c,c=u,u=r),s=[],r=c+u,n=r;n--;)s.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=s[i]+p[n]*d[i-n-1]+e,s[i--]=a%Mt|0,e=a/Mt|0;s[i]=(s[i]+e)%Mt|0}for(;!s[--r];)s.pop();return e?++t:s.shift(),o.d=s,o.e=Pi(s,t),re?J(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return Nr(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(gt(o,0,dn),e===void 0?e=n.rounding:gt(e,0,8),J(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Gt(n,!0):(gt(o,0,dn),e===void 0?e=i.rounding:gt(e,0,8),n=J(new i(n),o+1,e),t=Gt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,i=this,s=i.constructor;return o===void 0?t=Gt(i):(gt(o,0,dn),e===void 0?e=s.rounding:gt(e,0,8),n=J(new s(i),o+i.e+1,e),t=Gt(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,i,s,r,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),s=e.e=Oa(y)-p.e-1,r=s%ne,e.d[0]=Qe(10,r<0?ne+r:r),o==null)o=s>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(mn+a);o=a.gt(e)?s>0?e:u:a}for(re=!1,a=new f(et(y)),l=f.precision,f.precision=s=y.length*ne*2;m=Te(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Te(o.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Te(u,n,s,1).minus(p).abs().cmp(Te(c,t,s,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,re=!0,d};v.toHexadecimal=v.toHex=function(o,e){return Nr(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:gt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(re=!1,t=Te(t,o,0,e,1).times(o),re=!0,J(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return Nr(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,i,s,r,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(Qe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,s=c.rounding,o.eq(1))return J(a,n,s);if(e=it(o.e/ne),e>=o.d.length-1&&(t=u<0?-u:u)<=kl)return i=Ma(c,a,t,n),o.s<0?new c(1).div(i):J(i,n,s);if(r=a.s,r<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(r=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=r,a}return t=Qe(+a,u),e=t==0||!isFinite(t)?it(u*(Math.log("0."+et(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?r/0:0):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Or(o.times(ln(a,n+t)),n),i.d&&(i=J(i,n+5,1),po(i.d,n,s)&&(e=n+10,i=J(Or(o.times(ln(a,e+t)),e),e+5,1),+et(i.d).slice(n+1,n+15)+1==1e14&&(i=J(i,n+1,0)))),i.s=r,re=!0,c.rounding=s,J(i,n,s))};v.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Gt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(gt(o,1,dn),e===void 0?e=i.rounding:gt(e,0,8),n=J(new i(n),o,e),t=Gt(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(gt(o,1,dn),e===void 0?e=n.rounding:gt(e,0,8)),J(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Gt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return J(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Gt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function et(o){var e,t,n,i=o.length-1,s="",r=o[0];if(i>0){for(s+=r,e=1;e<i;e++)n=o[e]+"",t=ne-n.length,t&&(s+=cn(t)),s+=n;r=o[e],n=r+"",t=ne-n.length,t&&(s+=cn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return s+r}function gt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(mn+o)}function po(o,e,t,n){var i,s,r,a;for(s=o[0];s>=10;s/=10)--e;return--e<0?(e+=ne,i=0):(i=Math.ceil((e+1)/ne),e%=ne),s=Qe(10,ne-e),a=o[i]%s|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),r=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):r=(t<4&&a+1==s||t>3&&a+1==s/2)&&(o[i+1]/s/100|0)==Qe(10,e-2)-1||(a==s/2||a==0)&&(o[i+1]/s/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),r=(n||t<4)&&a==9999||!n&&t>3&&a==4999):r=((n||t<4)&&a+1==s||!n&&t>3&&a+1==s/2)&&(o[i+1]/s/1e3|0)==Qe(10,e-3)-1,r}function yi(o,e,t){for(var n,i=[0],s,r=0,a=o.length;r<a;){for(s=i.length;s--;)i[s]*=e;for(i[0]+=Cr.indexOf(o.charAt(r++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function Tl(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/ki(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=jn(o,1,e.times(i),new o(1));for(var s=t;s--;){var r=e.times(e);e=r.times(r).minus(r).times(8).plus(1)}return o.precision-=t,e}var Te=function(){function o(n,i,s){var r,a=0,c=n.length;for(n=n.slice();c--;)r=n[c]*i+a,n[c]=r%s|0,a=r/s|0;return a&&n.unshift(a),n}function e(n,i,s,r){var a,c;if(s!=r)c=s>r?1:-1;else for(a=c=0;a<s;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,s,r){for(var a=0;s--;)n[s]-=a,a=n[s]<i[s]?1:0,n[s]=a*r+n[s]-i[s];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,s,r,a,c){var u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x,R,F,O=n.constructor,X=n.s==i.s?1:-1,U=n.d,q=i.d;if(!U||!U[0]||!q||!q[0])return new O(!n.s||!i.s||(U?q&&U[0]==q[0]:!q)?NaN:U&&U[0]==0||!q?X*0:X/0);for(c?(p=1,l=n.e-i.e):(c=Mt,p=ne,l=it(n.e/p)-it(i.e/p)),R=q.length,C=U.length,g=new O(X),P=g.d=[],m=0;q[m]==(U[m]||0);m++);if(q[m]>(U[m]||0)&&l--,s==null?(T=s=O.precision,r=O.rounding):a?T=s+(n.e-i.e)+1:T=s,T<0)P.push(1),y=!0;else{if(T=T/p+2|0,m=0,R==1){for(d=0,q=q[0],T++;(m<C||d)&&T--;m++)S=d*c+(U[m]||0),P[m]=S/q|0,d=S%q|0;y=d||m<C}else{for(d=c/(q[0]+1)|0,d>1&&(q=o(q,d,c),U=o(U,d,c),R=q.length,C=U.length),B=R,A=U.slice(0,R),h=A.length;h<R;)A[h++]=0;F=q.slice(),F.unshift(0),x=q[0],q[1]>=c/2&&++x;do d=0,u=e(q,A,R,h),u<0?(I=A[0],R!=h&&(I=I*c+(A[1]||0)),d=I/x|0,d>1?(d>=c&&(d=c-1),f=o(q,d,c),b=f.length,h=A.length,u=e(f,A,b,h),u==1&&(d--,t(f,R<b?F:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<h&&f.unshift(0),t(A,f,h,c),u==-1&&(h=A.length,u=e(q,A,R,h),u<1&&(d++,t(A,R<h?F:q,h,c))),h=A.length):u===0&&(d++,A=[0]),P[m++]=d,u&&A[0]?A[h++]=U[B]||0:(A=[U[B]],h=1);while((B++<C||A[0]!==void 0)&&T--);y=A[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Sa=y;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?s+g.e+1:s,r,y)}return g}}();function J(o,e,t,n){var i,s,r,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(s=e-i,s<0)s+=ne,r=e,l=m[d=0],c=l/Qe(10,i-r-1)%10|0;else if(d=Math.ceil((s+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,s%=ne,r=s-ne+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;s%=ne,r=s-ne+i,c=r<0?0:l/Qe(10,i-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%Qe(10,i-r-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(s>0?r>0?l/Qe(10,i-r):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=Qe(10,(ne-e%ne)%ne),o.e=-e||0):m[0]=o.e=0,o;if(s==0?(m.length=d,a=1,d--):(m.length=d+1,a=Qe(10,ne-s),m[d]=r>0?(l/Qe(10,i-r)%Qe(10,r)|0)*a:0),u)for(;;)if(d==0){for(s=1,r=m[0];r>=10;r/=10)s++;for(r=m[0]+=a,a=1;r>=10;r/=10)a++;s!=a&&(o.e++,m[0]==Mt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Mt)break;m[d--]=0,a=1}for(s=m.length;m[--s]===0;)m.pop()}return re&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Gt(o,e,t){if(!o.isFinite())return _a(o);var n,i=o.e,s=et(o.d),r=s.length;return e?(t&&(n=t-r)>0?s=s.charAt(0)+"."+s.slice(1)+cn(n):r>1&&(s=s.charAt(0)+"."+s.slice(1)),s=s+(o.e<0?"e":"e+")+o.e):i<0?(s="0."+cn(-i-1)+s,t&&(n=t-r)>0&&(s+=cn(n))):i>=r?(s+=cn(i+1-r),t&&(n=t-i-1)>0&&(s=s+"."+cn(n))):((n=i+1)<r&&(s=s.slice(0,n)+"."+s.slice(n)),t&&(n=t-r)>0&&(i+1===r&&(s+="."),s+=cn(n))),s}function Pi(o,e){var t=o[0];for(e*=ne;t>=10;t/=10)e++;return e}function Ai(o,e,t){if(e>hl)throw re=!0,t&&(o.precision=t),Error(Ka);return J(new o(bi),e,1,!0)}function Ot(o,e,t){if(e>Lr)throw Error(Ka);return J(new o(gi),e,t,!0)}function Oa(o){var e=o.length-1,t=e*ne+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function cn(o){for(var e="";o--;)e+="0";return e}function Ma(o,e,t,n){var i,s=new o(1),r=Math.ceil(n/ne+4);for(re=!1;;){if(t%2&&(s=s.times(e),Ba(s.d,r)&&(i=!0)),t=it(t/2),t===0){t=s.d.length-1,i&&s.d[t]===0&&++s.d[t];break}e=e.times(e),Ba(e.d,r)}return re=!0,s}function Ia(o){return o.d[o.d.length-1]&1}function Na(o,e,t){for(var n,i=new o(e[0]),s=0;++s<e.length;)if(n=new o(e[s]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Or(o,e){var t,n,i,s,r,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(re=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Qe(2,m))/Math.LN10*2+5|0,c+=n,t=s=r=new d(1),d.precision=c;;){if(s=J(s.times(o),c,1),t=t.times(++l),a=r.plus(Te(s,t,c,1)),et(a.d).slice(0,c)===et(r.d).slice(0,c)){for(i=m;i--;)r=J(r.times(r),c,1);if(e==null)if(u<3&&po(r.d,c-n,p,u))d.precision=c+=10,t=s=a=new d(1),l=0,u++;else return J(r,d.precision=y,p,re=!0);else return d.precision=y,r}r=a}}function ln(o,e){var t,n,i,s,r,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,P=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(re=!1,l=A):l=e,g.precision=l+=y,t=et(b),n=t.charAt(0),Math.abs(s=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=et(f.d),n=t.charAt(0),p++;s=f.e,n>1?(f=new g("0."+t),s++):f=new g(n+"."+t.slice(1))}else return u=Ai(g,l+2,A).times(s+""),f=ln(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?J(f,A,P,re=!0):f;for(m=f,c=r=f=Te(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),i=3;;){if(r=J(r.times(d),l,1),u=c.plus(Te(r,new g(i),l,1)),et(u.d).slice(0,l)===et(c.d).slice(0,l))if(c=c.times(2),s!==0&&(c=c.plus(Ai(g,l+2,A).times(s+""))),c=Te(c,new g(p),l,1),e==null)if(po(c.d,l-y,P,a))g.precision=l+=y,u=r=f=Te(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),i=a=1;else return J(c,g.precision=A,P,re=!0);else return g.precision=A,c;c=u,i+=2}}function _a(o){return String(o.s*o.s/0)}function Mr(o,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ne;n<i;)o.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),re&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Il(o,e){var t,n,i,s,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),La.test(e))return Mr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(wl.test(e))t=16,e=e.toLowerCase();else if(Al.test(e))t=2;else if(Pl.test(e))t=8;else throw Error(mn+e);for(s=e.search(/p/i),s>0?(c=+e.slice(s+1),e=e.substring(2,s)):e=e.slice(2),s=e.indexOf("."),r=s>=0,n=o.constructor,r&&(e=e.replace(".",""),a=e.length,s=a-s,i=Ma(n,new n(t),s,s*2)),u=yi(e,t,Mt),l=u.length-1,s=l;u[s]===0;--s)u.pop();return s<0?new n(o.s*0):(o.e=Pi(u,l),o.d=u,re=!1,r&&(o=Te(o,i,a*4)),c&&(o=o.times(Math.abs(c)<54?Qe(2,c):fo.pow(2,c))),re=!0,o)}function Bl(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:jn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/ki(5,t)),e=jn(o,2,e,e);for(var i,s=new o(5),r=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(s.plus(i.times(r.times(i).minus(a))));return e}function jn(o,e,t,n,i){var s,r,a,c,u=1,l=o.precision,m=Math.ceil(l/ne);for(re=!1,c=t.times(t),a=new o(n);;){if(r=Te(a.times(c),new o(e++*e++),l,1),a=i?n.plus(r):n.minus(r),n=Te(r.times(c),new o(e++*e++),l,1),r=a.plus(n),r.d[m]!==void 0){for(s=m;r.d[s]===a.d[s]&&s--;);if(s==-1)break}s=a,a=n,n=r,r=s,u++}return re=!0,r.d.length=m+1,r}function ki(o,e){for(var t=o;--e;)t*=o;return t}function Va(o,e){var t,n=e.s<0,i=Ot(o,o.precision,1),s=i.times(.5);if(e=e.abs(),e.lte(s))return jt=n?4:1,e;if(t=e.divToInt(i),t.isZero())jt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(s))return jt=Ia(t)?n?2:3:n?4:1,e;jt=Ia(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Nr(o,e,t,n){var i,s,r,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(gt(t,1,dn),n===void 0?n=p.rounding:gt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=_a(o);else{for(l=Gt(o),r=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,r>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-r,d.d=yi(Gt(d),10,i),d.e=d.d.length),m=yi(l,10,i),s=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(r<0?s--:(o=new p(o),o.d=m,o.e=s,o=Te(o,d,t,n,0,i),m=o.d,s=o.e,u=Sa),r=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(r!==void 0||u)&&(n===0||n===(o.s<0?3:2)):r>a||r===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++s,m.unshift(1));for(c=m.length;!m[c-1];--c);for(r=0,l="";r<c;r++)l+=Cr.charAt(m[r]);if(y){if(c>1)if(e==16||e==8){for(r=e==16?4:3,--c;c%r;c++)l+="0";for(m=yi(l,i,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=Cr.charAt(m[r])}else l=l.charAt(0)+"."+l.slice(1);l=l+(s<0?"p":"p+")+s}else if(s<0){for(;++s;)l="0"+l;l="0."+l}else if(++s>c)for(s-=c;s--;)l+="0";else s<c&&(l=l.slice(0,s)+"."+l.slice(s))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Ba(o,e){if(o.length>e)return o.length=e,!0}function xl(o){return new this(o).abs()}function Sl(o){return new this(o).acos()}function Kl(o){return new this(o).acosh()}function Cl(o,e){return new this(o).plus(e)}function Rl(o){return new this(o).asin()}function Ll(o){return new this(o).asinh()}function Ol(o){return new this(o).atan()}function Ml(o){return new this(o).atanh()}function Nl(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,s=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Ot(this,s,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Ot(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Ot(this,s,1).times(.5),t.s=o.s):e.s<0?(this.precision=s,this.rounding=1,t=this.atan(Te(o,e,s,1)),e=Ot(this,s,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Te(o,e,s,1)),t}function _l(o){return new this(o).cbrt()}function Vl(o){return J(o=new this(o),o.e+1,2)}function vl(o,e,t){return new this(o).clamp(e,t)}function El(o){if(!o||typeof o!="object")throw Error(wi+"Object expected");var e,t,n,i=o.defaults===!0,s=["precision",1,dn,"rounding",0,8,"toExpNeg",-Yn,0,"toExpPos",0,Yn,"maxE",0,Yn,"minE",-Yn,0,"modulo",0,9];for(e=0;e<s.length;e+=3)if(t=s[e],i&&(this[t]=Rr[t]),(n=o[t])!==void 0)if(it(n)===n&&n>=s[e+1]&&n<=s[e+2])this[t]=n;else throw Error(mn+t+": "+n);if(t="crypto",i&&(this[t]=Rr[t]),(n=o[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(Ca);else this[t]=!1;else throw Error(mn+t+": "+n);return this}function Fl(o){return new this(o).cos()}function Dl(o){return new this(o).cosh()}function va(o){var e,t,n;function i(s){var r,a,c,u=this;if(!(u instanceof i))return new i(s);if(u.constructor=i,xa(s)){u.s=s.s,re?!s.d||s.e>i.maxE?(u.e=NaN,u.d=null):s.e<i.minE?(u.e=0,u.d=[0]):(u.e=s.e,u.d=s.d.slice()):(u.e=s.e,u.d=s.d?s.d.slice():s.d);return}if(c=typeof s,c==="number"){if(s===0){u.s=1/s<0?-1:1,u.e=0,u.d=[0];return}if(s<0?(s=-s,u.s=-1):u.s=1,s===~~s&&s<1e7){for(r=0,a=s;a>=10;a/=10)r++;re?r>i.maxE?(u.e=NaN,u.d=null):r<i.minE?(u.e=0,u.d=[0]):(u.e=r,u.d=[s]):(u.e=r,u.d=[s]);return}else if(s*0!==0){s||(u.s=NaN),u.e=NaN,u.d=null;return}return Mr(u,s.toString())}else if(c!=="string")throw Error(mn+s);return(a=s.charCodeAt(0))===45?(s=s.slice(1),u.s=-1):(a===43&&(s=s.slice(1)),u.s=1),La.test(s)?Mr(u,s):Il(u,s)}if(i.prototype=v,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=El,i.clone=va,i.isDecimal=xa,i.abs=xl,i.acos=Sl,i.acosh=Kl,i.add=Cl,i.asin=Rl,i.asinh=Ll,i.atan=Ol,i.atanh=Ml,i.atan2=Nl,i.cbrt=_l,i.ceil=Vl,i.clamp=vl,i.cos=Fl,i.cosh=Dl,i.div=Wl,i.exp=ql,i.floor=Ul,i.hypot=Gl,i.ln=Xl,i.log=zl,i.log10=Yl,i.log2=Ql,i.max=jl,i.min=Hl,i.mod=Zl,i.mul=$l,i.pow=Jl,i.random=em,i.round=tm,i.sign=nm,i.sin=om,i.sinh=im,i.sqrt=rm,i.sub=sm,i.sum=am,i.tan=um,i.tanh=cm,i.trunc=lm,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function Wl(o,e){return new this(o).div(e)}function ql(o){return new this(o).exp()}function Ul(o){return J(o=new this(o),o.e+1,3)}function Gl(){var o,e,t=new this(0);for(re=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function xa(o){return o instanceof fo||o&&o.toStringTag===Ra||!1}function Xl(o){return new this(o).ln()}function zl(o,e){return new this(o).log(e)}function Ql(o){return new this(o).log(2)}function Yl(o){return new this(o).log(10)}function jl(){return Na(this,arguments,"lt")}function Hl(){return Na(this,arguments,"gt")}function Zl(o,e){return new this(o).mod(e)}function $l(o,e){return new this(o).mul(e)}function Jl(o,e){return new this(o).pow(e)}function em(o){var e,t,n,i,s=0,r=new this(1),a=[];if(o===void 0?o=this.precision:gt(o,1,dn),n=Math.ceil(o/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));s<n;)i=e[s],i>=429e7?e[s]=crypto.getRandomValues(new Uint32Array(1))[0]:a[s++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);s<n;)i=e[s]+(e[s+1]<<8)+(e[s+2]<<16)+((e[s+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,s):(a.push(i%1e7),s+=4);s=n/4}else throw Error(Ca);else for(;s<n;)a[s++]=Math.random()*1e7|0;for(n=a[--s],o%=ne,n&&o&&(i=Qe(10,ne-o),a[s]=(n/i|0)*i);a[s]===0;s--)a.pop();if(s<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ne&&(t-=ne-n)}return r.e=t,r.d=a,r}function tm(o){return J(o=new this(o),o.e+1,this.rounding)}function nm(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function om(o){return new this(o).sin()}function im(o){return new this(o).sinh()}function rm(o){return new this(o).sqrt()}function sm(o,e){return new this(o).sub(e)}function am(){var o=0,e=arguments,t=new this(e[o]);for(re=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return re=!0,J(t,this.precision,this.rounding)}function um(o){return new this(o).tan()}function cm(o){return new this(o).tanh()}function lm(o){return J(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var fo=v.constructor=va(Rr);bi=new fo(bi);gi=new fo(gi);var M=fo;import gm from"big.js";import pn from"bn.js";import mm from"toformat";var dm=mm,yo=dm;import Ti from"big.js";import pm from"bn.js";import fm from"decimal.js-light";import bo from"bn.js";var _r=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(_r||{}),Ea=9007199254740991;function Z(o){let e=me("Raydium_parseBigNumberish");if(o instanceof bo)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new bo(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ea||o<=-Ea)&&e.logWithError(`BigNumberish number overflow: ${o}`),new bo(String(o))):typeof o=="bigint"?new bo(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new bo(0))}var hi=me("module/fraction"),Vr=yo(Ti),go=yo(fm),ym={[0]:go.ROUND_DOWN,[1]:go.ROUND_HALF_UP,[2]:go.ROUND_UP},bm={[0]:Ti.roundDown,[1]:Ti.roundHalfUp,[2]:Ti.roundUp},se=class{constructor(e,t=new pm(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new se(this.denominator,this.numerator)}add(e){let t=e instanceof se?e:new se(Z(e));return this.denominator.eq(t.denominator)?new se(this.numerator.add(t.numerator),this.denominator):new se(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof se?e:new se(Z(e));return this.denominator.eq(t.denominator)?new se(this.numerator.sub(t.numerator),this.denominator):new se(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof se?e:new se(Z(e));return new se(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof se?e:new se(Z(e));return new se(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||hi.logWithError(`${e} is not an integer.`),e<=0&&hi.logWithError(`${e} is not positive.`),go.set({precision:e+1,rounding:ym[n]});let i=new go(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||hi.logWithError(`${e} is not an integer.`),e<0&&hi.logWithError(`${e} is negative.`),Vr.DP=e,Vr.RM=bm[n]||1,new Vr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Am=me("Raydium_amount"),Ii=yo(gm);function Fa(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):Am.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends se{constructor(t,n,i=!0,s){let r=new pn(0),a=xn.pow(new pn(t.decimals));if(i)r=Z(n);else{let c=new pn(0),u=new pn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fa(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=me(s||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Ii.DP=this.token.decimals,new Ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},Bn=class extends se{constructor(t,n,i=!0,s){let r=new pn(0),a=xn.pow(new pn(t.decimals));if(i)r=Z(n);else{let c=new pn(0),u=new pn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fa(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=me(s||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new Bn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new Bn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Ii.DP=this.currency.decimals,new Ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as wm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Da}from"@solana/spl-token";var Xt={chainId:101,address:wm.default.toBase58(),programId:Da.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ye={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Da.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Wr}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as Wa,SYSVAR_RENT_PUBKEY as Pm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as km}from"@solana/spl-token";function w({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var vr=[w({pubkey:km,isWritable:!1}),w({pubkey:Wa.programId,isWritable:!1}),w({pubkey:Pm,isWritable:!1})];function Er({publicKey:o,transformSol:e}){let t=Fr(o.toString());if(t instanceof Se)return e&&t.equals(je)?H:t;if(e&&t.toString()===je.toBase58())return H;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Fr(o){try{return new Se(o)}catch{return o}}var Bi=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),fn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rt=new Se("SysvarRent111111111111111111111111111111111"),Dr=new Se("SysvarC1ock11111111111111111111111111111111"),Ht=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),xi=new Se("Sysvar1nstructions1111111111111111111111111"),Si=Wa.programId,Xy=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),zy=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Qy=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Yy=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),jy=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Hy=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Zy=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),$y=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Jy=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),eb=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),tb=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Se("So11111111111111111111111111111111111111112"),je=Se.default;function ht(o){return Er({publicKey:o,transformSol:!0})}var qr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:s=!1,isToken2022:r=!1}){if(e===je.toBase58()||e instanceof Wr&&je.equals(e)){this.decimals=Ye.decimals,this.symbol=Ye.symbol,this.name=Ye.name,this.mint=new Wr(Ye.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=s?Wr.default:Er({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=qr;we.WSOL=new qr(D(L({},Ye),{mint:Ye.address}));var Ur=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Ao=Ur;Ao.SOL=new Ur(Xt);function lb(o,e){return o instanceof we&&e instanceof we?o.equals(e):o instanceof we||e instanceof we?!1:o===e}import hm from"bn.js";var qa=new se(new hm(100)),Le=class extends se{toSignificant(e=5,t,n){return this.mul(qa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(qa).toFixed(e,t,n)}};var Tm=me("Raydium_price"),$e=class extends se{constructor(t){let{baseToken:n,quoteToken:i,numerator:s,denominator:r}=t;super(s,r);this.baseToken=n,this.quoteToken=i,this.scalar=new se(Gr(n.decimals),Gr(i.decimals))}get raw(){return new se(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&&Tm.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,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};function Ee(o){if(o instanceof Le)return new se(o.numerator,o.denominator);if(o instanceof $e)return o.adjusted;if(o instanceof be)try{return Ee(o.toExact())}catch{return new se(Fe)}if(o instanceof se)return o;let e=String(o),t=Sn(e);return new se(t.numerator,t.denominator)}function Lb(o){var n;if(o instanceof Le)return{fr:new se(o.numerator,o.denominator)};if(o instanceof $e)return{fr:o.adjusted};if(o instanceof be)return{fr:Ee(o.toExact()),decimals:o.token.decimals};if(o instanceof se)return{fr:o};let e=String(o),t=Sn(e);return{fr:new se(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Ob(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Fe)}function Im(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.gt(Fe)}function Mb(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.lte(Fe)}function Nb(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.gte(Fe)}function Bm(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.eq(Fe)}function _b(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);try{return t.div(n)}catch{return t}}function Vb(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.sub(n)}function vb(o){return o==null?!1:!Bm(o,0)}function Eb(o,e){return Im(e,o)?e:o}function Xr(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.mul(n)}function Fb(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.add(n)}import{PublicKey as xm}from"@solana/web3.js";import Sm from"bn.js";async function Ua(o){new Promise(e=>setTimeout(e,o))}function Xb(){return new Date().getTime()}function zr(o){return typeof o=="object"&&o!==null&&![we,be,xm,se,Sm,$e,Le].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?Fr(o):Array.isArray(o)?o.map(e=>Ie(e)):zr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}var Fe=new De(0),za=new De(1),ig=new De(2),rg=new De(3),sg=new De(5),xn=new De(10),ag=new De(100),ug=new De(1e3),cg=new De(1e4);function Gr(o){return xn.pow(Z(o))}function Sn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof De)return{numerator:o.toString(),denominator:"1"};if(o instanceof se)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],s="1"+"0".repeat(i.length),r=t+(n==="0"?"":n)+i||"0";return{denominator:s,numerator:r,sign:t,int:n,dec:i}}function Ki(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Km(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Cm(o,e=0){return o instanceof De?o:new De(Km(Qa(o).mul(xn.pow(new De(String(e))))))}function Qa(o){if(o instanceof Le)return new se(o.numerator,o.denominator);if(o instanceof $e)return o.adjusted;if(o instanceof be)try{return Qa(o.toExact())}catch{return new se(Fe)}if(o instanceof se)return o;let e=String(o),t=Sn(e);return new se(t.numerator,t.denominator)}function lg(o,e){let{numerator:t,denominator:n}=Sn(o);return new Le(new De(t),new De(n).mul(e!=null&&e.alreadyDecimaled?new De(100):new De(1)))}function mg(o){let{token:e,numberPrice:t,decimalDone:n}=o,i=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:s,denominator:r}=Sn(t),a=n?new De(s).mul(xn.pow(new De(e.decimals))):s,c=new De(r).mul(xn.pow(new De(i.decimals)));return new $e({baseToken:i,denominator:c.toString(),quoteToken:new we(D(L({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Ga(o){let e=new Ao({decimals:6,symbol:"usd",name:"usd"}),t=Cm(Xr(o,10**e.decimals));return new Bn(e,t)}function dg(o,e){return Ga(!e||!o?0:Xr(o,e))}function Rm(o){if(o==null)return;let{numerator:e,denominator:t}=Sn(o.toString());return new se(e,t)}function Lm(o){return o instanceof M}function Xa(o){return Lm(o)?Rm(o):Array.isArray(o)?o.map(e=>Xa(e)):zr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Xa(t)])):o}var Ya=o=>typeof o=="number",ja=o=>o?new Date(o):new Date,Om=o=>ja(o).getTime();function Ha(o,e,t){let n=Ya(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Za(o,e,t){let n=Ya(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function fg(o,e){let n=Om(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return ja(n)}function Kr(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function bg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function gg(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function Ag(o){return[...new Set(o)]}var Nt=class{constructor(e){this._owner=e}get publicKey(){return Nt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Nt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Nt.isKeyPair(this._owner)}get isPublicKey(){return Nt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Nt.isKeyPair(e)}};import{PublicKey as vm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Em}from"@solana/spl-token";import{ComputeBudgetProgram as $a,Keypair as Ja,PublicKey as eu,Transaction as Ri,TransactionMessage as Mm,VersionedTransaction as Qr}from"@solana/web3.js";var Kn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Kn||{}),E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee"};import{TOKEN_PROGRAM_ID as Nm}from"@solana/spl-token";var Zt=me("Raydium_txUtil"),tu=1644;function Li(o){let e=[],t=[];return o.microLamports&&(e.push($a.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push($a.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Hn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function Oi(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,s=>{if(clearTimeout(i),!s.err){t("");return}n(s.err.toString())},"confirmed")})}function Mi(o,e){o.length<1&&Zt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Zt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ri;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<tu}catch{return!1}}async function nu(o,e,t,n=!0){let i=new eu("RaydiumSimuLateTransaction11111111111111111"),s=[],r=new Ri;r.feePayer=i;for(let u of e)Mi([...r.instructions,u],[i])||(s.push(r),r=new Ri,r.feePayer=i),r.add(u);r.instructions.length>0&&s.push(r);let a=[];try{if(a=await _m(o,s,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Zt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Zt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Zt.debug("filteredLog:",c),l.length||Zt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ou(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Zt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function $t(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Zt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(o,e){let[t,n]=eu.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function _m(o,e,t){let n=[];if(t){let i=await o.getLatestBlockhash(),s=[];for(let u of e){u.recentBlockhash=i.blockhash,u.lastValidBlockHeight=i.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");s.push(p)}let r=s.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(r.length/c);u++)a.push(r.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await o.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Zt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function wo({instructions:o,payer:e,signers:t}){return Mi(o,[e,...t])}function Po({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ja.generate().publicKey.toString()}){let s=new Mm({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Qr(s).serialize()).toString("base64").length<tu}catch{return!1}}var Ci={time:0,data:void 0};async function Lg(o){if(!Ci.data||(Date.now()-Ci.time)/1e3>30){let e=await o.getEpochInfo();return Ci={time:Date.now(),data:e},e}else return Ci.data}var iu=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),Vm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Qr&&(e=iu(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Cn(o){let e=[];return o.forEach(t=>{t instanceof Ri&&(t.recentBlockhash||(t.recentBlockhash=Nm.toBase58()),t.feePayer||(t.feePayer=Ja.generate().publicKey)),e.push(Vm(t))}),console.log("simulate tx string:",e),e}function Og(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Qr&&(e=iu(e)),e.toString("base64")}function le(o,e,t){return ae([o.toBuffer(),(t!=null?t:Em).toBuffer(),e.toBuffer()],new vm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ue}from"@solana/web3.js";var Yr=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ru=new ue("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),jr=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Zn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Fm=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Hr=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ni=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ko=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Dm=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),su=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),yn=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),$n=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ho=new ue("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Wm=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),au=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),qm=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Um=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Gm=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Xm=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),To=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Zr=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),zm=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Qm=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Ym=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),jm=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Io=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Hm=new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),Bo=new ue("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Zm=new ue("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),xo={IDO_PROGRAM_ID_V1:qm,IDO_PROGRAM_ID_V2:Um,IDO_PROGRAM_ID_V3:Gm,IDO_PROGRAM_ID_V4:Xm},Fg={AMM_V4:ko,AMM_STABLE:Dm,CLMM_PROGRAM_ID:yn,CLMM_LOCK_PROGRAM_ID:$n,CLMM_LOCK_AUTH_ID:ho,FARM_PROGRAM_ID_V3:Yr,FARM_PROGRAM_ID_V5:jr,FARM_PROGRAM_ID_V6:Zn,OPEN_BOOK_PROGRAM:Hr,SERUM_PROGRAM_ID_V3:Ni,UTIL1216:Fm,Router:Wm,CREATE_CPMM_POOL_PROGRAM:To,CREATE_CPMM_POOL_AUTH:Zr,CREATE_CPMM_POOL_FEE_ACC:zm,LOCK_CPMM_PROGRAM:Io,LOCK_CPMM_AUTH:Bo},Dg={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"),CLMM_LOCK_PROGRAM_ID:new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ue("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Qm,CREATE_CPMM_POOL_AUTH:Ym,CREATE_CPMM_POOL_FEE_ACC:jm,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Hm,LCOK_CPMM_AUTH:Zm};import Ue from"bn.js";var zt=1e4;function Ug(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,s=new Ue(i.maximumFee.toString()),r=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===zt){let a=new Ue(i.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:r}}else{let a=_t(o.mul(new Ue(zt)),new Ue(zt-i.transferFeeBasisPoints)),c=new Ue(i.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=_t(u.mul(new Ue(i.transferFeeBasisPoints)),new Ue(zt)),m=l.gt(s)?s:l;return{amount:u,fee:m,expirationTime:r}}else{let a=_t(o.mul(new Ue(i.transferFeeBasisPoints)),new Ue(zt)),c=a.gt(s)?s:a;return{amount:o,fee:c,expirationTime:r}}}function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=D(L({},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}}),s=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,r=new Ue(s.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(s.transferFeeBasisPoints===zt){let c=new Ue(s.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=_t(o.mul(new Ue(zt)),new Ue(zt-s.transferFeeBasisPoints)),u=new Ue(s.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=_t(l.mul(new Ue(s.transferFeeBasisPoints)),new Ue(zt)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=_t(o.mul(new Ue(s.transferFeeBasisPoints)),new Ue(zt)),u=c.gt(r)?r:c;return{amount:o,fee:u,expirationTime:a}}}function Vt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function _t(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ue(0))?t.add(new Ue(1)):t}import{PublicKey as uu,AddressLookupTableAccount as _i}from"@solana/web3.js";async function $r({connection:o,address:e}){let t=await Lt(o,[...new Set(e.map(i=>i.toString()))].map(i=>new uu(i))),n={};for(let i=0;i<e.length;i++){let s=t[i],r=e[i];if(!s)continue;let a=new _i({key:r,state:_i.deserialize(s.data)});n[r.toString()]=a,Vi[r.toString()]=a}return n}var Vi={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new _i({key:new uu("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:_i.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as So,sendAndConfirmTransaction as Jr,Transaction as Ko,TransactionMessage as Co,VersionedTransaction as Ro}from"@solana/web3.js";import $m from"axios";var vi=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await $m.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}=Li(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:i=[],endInstructionTypes:s=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...s),this.lookupTableAddress.push(...r.filter(a=>a!==So.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(L({},t||{})):this.build(t)}build(e){var n;let t=new Ko;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.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 i=>{var u;let{recentBlockHash:s,skipPreflight:r=!0,sendAndConfirm:a}=i||{},c=s!=null?s:await Hn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Cn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Jr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:r}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),s=t.filter(l=>l.transaction.instructions.length>0),r=[i,...s.map(l=>l.transaction)],a=[this.signers,...s.map(l=>l.signers)],c=[...this.instructionTypes,...s.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:y,skipPreflight:f=!0}=l||{},b=y!=null?y:await Hn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],A=0;for(let h of r){if(++A,A<=p)continue;let I=await Jr(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});P.push(I)}return{txIds:P,signedTxs:r}}return{txIds:await await Promise.all(r.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:f})))),signedTxs:r}}if(this.signAllTransactions){let P=r.map((h,I)=>(h.recentBlockhash=b,a[I].length&&h.sign(...a[I]),h));Cn(P);let A=await this.signAllTransactions(P);if(m){let h=0,I=[],T=async()=>{if(!A[h])return;let S=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:f});I.push({txId:S,status:"sent",signedTx:A[h]}),d==null||d([...I]),h++,this.connection.onSignature(S,B=>{let C=I.findIndex(x=>x.txId===S);C>-1&&(I[C].status=B.err?"error":"success"),d==null||d([...I]),B.err||T()},"processed"),this.connection.getSignatureStatus(S)};return await T(),{txIds:I.map(S=>S.txId),signedTxs:A}}else{let h=[];for(let I=0;I<A.length;I+=1){let T=await this.connection.sendRawTransaction(A[I].serialize(),{skipPreflight:f});h.push(T)}return{txIds:h,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:s}=y,r=ve(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=L(L({},this.cluster==="devnet"?{}:Vi),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new So(b));let l=await $r({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?So.default.toBase58():s!=null?s:await Hn(this.connection,this.blockhashCommitment),d=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Ro(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:P}=b||{};if(Cn([p]),(A=this.owner)!=null&&A.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await Oi(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),s=t.filter(l=>l.builder.instructions.length>0),r=[i,...s.map(l=>l.transaction)],a=[this.signers,...s.map(l=>l.signers)],c=[...this.instructionTypes,...s.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),Cn(r),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of r){let P=await this.connection.sendTransaction(g,{skipPreflight:y});await Oi(this.connection,P),b.push(P)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(m){let g=0,P=[],A=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});P.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++,this.connection.onSignature(h,I=>{let T=P.findIndex(S=>S.txId===h);T>-1&&(P[T].status=I.err?"error":"success"),d==null||d([...P]),I.err||A()},"processed"),this.connection.getSignatureStatus(h)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let A=await this.connection.sendTransaction(b[P],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=ve(u,["computeBudgetConfig"]),i=t?Li(t):{instructions:[],instructionTypes:[]},s=this.signers.reduce((m,d)=>D(L({},m),{[d.publicKey.toBase58()]:d}),{}),r=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...i.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 So(b));if(c.length<12&&wo({instructions:p,payer:this.feePayer,signers:f})||wo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");wo({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:f})?r.push(new Ko().add(...i.instructions,...c)):r.push(new Ko().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>s[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>s[p]).filter(p=>p!==void 0);wo({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?r.push(new Ko().add(...i.instructions,...c)):r.push(new Ko().add(...c)),a.push(d)}return r.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var P;let{sequentially:d,onTxUpdate:p,skipTxCount:y=0,recentBlockHash:f,skipPreflight:b=!0}=m||{},g=f!=null?f:await Hn(this.connection,this.blockhashCommitment);if(r.forEach(async(A,h)=>{A.recentBlockhash=g,a[h].length&&A.sign(...a[h])}),Cn(r),(P=this.owner)!=null&&P.isKeyPair){if(d){let A=0,h=[];for(let I of r){if(++A,A<=y){h.push("tx skipped");continue}let T=await Jr(this.connection,I,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});h.push(T)}return{txIds:h,signedTxs:r}}return{txIds:await Promise.all(r.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:b}))),signedTxs:r}}if(this.signAllTransactions){let A=await this.signAllTransactions(r.slice(y,r.length)),h=[...r.slice(0,y),...A];if(d){let I=0,T=[],S=async()=>{if(!h[I])return;I<y&&(T.push({txId:"",status:"success",signedTx:h[I]}),p==null||p([...T]),I++,S());let B=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:b});T.push({txId:B,status:"sent",signedTx:h[I]}),p==null||p([...T]),I++,this.connection.onSignature(B,C=>{let x=T.findIndex(R=>R.txId===B);x>-1&&(T[x].status=C.err?"error":"success"),p==null||p([...T]),C.err||S()},"processed"),this.connection.getSignatureStatus(B)};return await S(),{txIds:T.map(B=>B.txId),signedTxs:h}}else{let I=[];for(let T=0;T<h.length;T+=1){let S=await this.connection.sendRawTransaction(h[T].serialize(),{skipPreflight:b});I.push(S)}return{txIds:I,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:i=[]}=b,s=ve(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),r=L(L({},this.cluster==="devnet"?{}:Vi),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let P of a)r[P]===void 0&&c.push(new So(P));let u=await $r({connection:this.connection,address:c});for(let[P,A]of Object.entries(u))r[P]=A;let l=t?Li(t):{instructions:[],instructionTypes:[]},m=await Hn(this.connection,this.blockhashCommitment),d=this.signers.reduce((P,A)=>D(L({},P),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(P=>{let A=[...f,P],h=t?[...l.instructions,...A]:A;if(f.length<12&&Po({instructions:h,payer:this.feePayer,lookupTableAddressAccount:r})||Po({instructions:A,payer:this.feePayer,lookupTableAddressAccount:r}))f.push(P);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])r[T]!==void 0&&(I[T]=r[T]);if(t&&Po({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:r,recentBlockhash:m})){let T=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(r));p.push(new Ro(T))}else{let T=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(r));p.push(new Ro(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=[P]}}),f.length>0){let A=[...new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(h=>d[h]).filter(h=>h!==void 0);if(t&&Po({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:r,recentBlockhash:m})){let h=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(r));p.push(new Ro(h))}else{let h=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(r));p.push(new Ro(h))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(P=>{P.some(A=>A.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async P=>{var B;let{sequentially:A,onTxUpdate:h,skipTxCount:I=0,recentBlockHash:T,skipPreflight:S=!0}=P||{};if(p.map(async(C,x)=>{y[x].length&&C.sign(y[x]),T&&(C.message.recentBlockhash=T)}),Cn(p),(B=this.owner)!=null&&B.isKeyPair){if(A){let C=0,x=[];for(let R of p){if(++C,C<=I){console.log("skip tx: ",C),x.push("tx skipped");continue}let F=await this.connection.sendTransaction(R,{skipPreflight:S});await Oi(this.connection,F),x.push(F)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:S}))),signedTxs:p}}if(this.signAllTransactions){let C=await this.signAllTransactions(p.slice(I,p.length)),x=[...p.slice(0,I),...C];if(A){let R=0,F=[],O=async()=>{if(!x[R])return;if(R<I){F.push({txId:"",status:"success",signedTx:x[R]}),h==null||h([...F]),R++,O();return}let X=await this.connection.sendTransaction(x[R],{skipPreflight:S});F.push({txId:X,status:"sent",signedTx:x[R]}),h==null||h([...F]),R++,this.connection.onSignature(X,U=>{let q=F.findIndex(Re=>Re.txId===X);q>-1&&(F[q].status=U.err?"error":"success"),h==null||h([...F]),U.err||O()},"processed"),this.connection.getSignatureStatus(X)};return O(),{txIds:[],signedTxs:x}}else{let R=[];for(let F=0;F<x.length;F+=1){let O=await this.connection.sendTransaction(x[F],{skipPreflight:S});R.push(O)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var cu=(t=>(t.ALL="all",t.Strict="strict",t))(cu||{}),lu=(r=>(r.All="all",r.Standard="standard",r.Concentrated="concentrated",r.AllFarm="allFarm",r.StandardFarm="standardFarm",r.ConcentratedFarm="concentratedFarm",r))(lu||{});var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},BA=L({},We);var mu="ray_tab_hash",es="ray_req_hash",Jm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(mu);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(mu,o)),o},Ei=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=ve(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let s=JSON.parse(localStorage.getItem(es)||"[]").slice(0,o-1);e&&s.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),s.unshift(D(L({},t),{time:Date.now(),session:Jm()}));try{localStorage.setItem(es,JSON.stringify(s))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(s[0].data=a+(a.length>100?"...":"");!r;){s.pop();let c=JSON.stringify(t.data).substring(0,100);s[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(es,JSON.stringify(s)),r=!0}catch{r=!1}}return new Promise(c=>c())}return Ei(D(L({},t),{logCount:o,removeLastLog:!0}))}};var Jn=me("Raydium_Api"),ts=new Map;async function zA(o,e,t=1e3){let n;for(;n==null;)try{Jn.debug(`Request ${o} through endlessRetry`),n=await e()}catch(i){Jn.error(`Request ${o} failed, retry after ${t} ms`,i),await Ua(t)}return n}var Fi=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:s}){this.cluster=e,this.urlConfigs=s||{},this.logCount=i||1e3,this.api=du.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return Jn.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(Jn.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:c,status:u}=r,{method:l,baseURL:m,url:d}=a;return n&&Ei({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Jn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},r=>{let{config:a,response:c={}}=r,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Ei({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),Jn.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||We.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await du.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,s)=>i+s,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:s=0,pageSize:r=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${s}&pageSize=${r}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(r=>ts.has(r)?(n.push(ts.get(r)),!1):!0),s=[];return i.length&&(s=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),s.forEach(a=>{ts.set(a.id,a)})),n.concat(s)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:s="default",order:r="desc",page:a=1}=e,[c,u]=[t&&ht(t).toBase58(),n&&n!=="undefined"?ht(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${s}&sortType=${r}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||We.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||We.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||We.JITO})).data}};import{merge as ey}from"lodash";var Di="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",pu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as zi,SystemProgram as cp}from"@solana/web3.js";import{AccountLayout as no,createAssociatedTokenAccountInstruction as ys,TOKEN_PROGRAM_ID as wn,TOKEN_2022_PROGRAM_ID as lp}from"@solana/spl-token";var ns=(...o)=>o.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=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new vi({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ns(e))}logInfo(...e){this.logger.info(ns(e))}logAndCreateError(...e){let t=ns(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as op,SystemProgram as ip}from"@solana/web3.js";import rp from"bn.js";import{createCloseAccountInstruction as sp,createInitializeAccountInstruction as ap,createTransferInstruction as up,TOKEN_PROGRAM_ID as to}from"@solana/spl-token";import{Keypair as Jd,PublicKey as Cu}from"@solana/web3.js";import ep from"bn.js";import{TOKEN_PROGRAM_ID as tp}from"@solana/spl-token";function ed(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function os(o,...e){if(!ed(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function is(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function fu(o,e){os(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var qi=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),vt=(o,e)=>o<<32-e|o>>>e;var sw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function td(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function rs(o){return typeof o=="string"&&(o=td(o)),os(o),o}var Wi=class{clone(){return this._cloneInto()}},aw={}.toString;function yu(o){let e=n=>o().update(rs(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function nd(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),s=BigInt(4294967295),r=Number(t>>i&s),a=Number(t&s),c=n?4:0,u=n?0:4;o.setUint32(e+c,r,n),o.setUint32(e+u,a,n)}var bu=(o,e,t)=>o&e^~o&t,gu=(o,e,t)=>o&e^o&t^e&t,Ui=class extends Wi{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=qi(this.buffer)}update(e){is(this);let{view:t,buffer:n,blockLen:i}=this;e=rs(e);let s=e.length;for(let r=0;r<s;){let a=Math.min(i-this.pos,s-r);if(a===i){let c=qi(e);for(;i<=s-r;r+=i)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){is(this),fu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:s}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>i-r&&(this.process(n,0),r=0);for(let m=r;m<i;m++)t[m]=0;nd(n,i-8,BigInt(this.length*8),s),this.process(n,0);let a=qi(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:s,destroyed:r,pos:a}=this;return e.length=i,e.pos=a,e.finished=s,e.destroyed=r,i%t&&e.buffer.set(n),e}};var od=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]),bn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),gn=new Uint32Array(64),ss=class extends Ui{constructor(){super(64,32,8,!1),this.A=bn[0]|0,this.B=bn[1]|0,this.C=bn[2]|0,this.D=bn[3]|0,this.E=bn[4]|0,this.F=bn[5]|0,this.G=bn[6]|0,this.H=bn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:s,F:r,G:a,H:c}=this;return[e,t,n,i,s,r,a,c]}set(e,t,n,i,s,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=s|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)gn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=gn[m-15],p=gn[m-2],y=vt(d,7)^vt(d,18)^d>>>3,f=vt(p,17)^vt(p,19)^p>>>10;gn[m]=f+gn[m-7]+y+gn[m-16]|0}let{A:n,B:i,C:s,D:r,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=vt(a,6)^vt(a,11)^vt(a,25),p=l+d+bu(a,c,u)+od[m]+gn[m]|0,f=(vt(n,2)^vt(n,13)^vt(n,22))+gu(n,i,s)|0;l=u,u=c,c=a,a=r+p|0,r=s,s=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,s=s+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,s,r,a,c,u,l)}roundClean(){gn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Au=yu(()=>new ss);import{PublicKey as jd}from"@solana/web3.js";import Bu,{isBN as xu}from"bn.js";import{bits as id,BitStructure as rd,blob as sd,Blob as ad,cstr as ud,f32 as cd,f32be as ld,f64 as md,f64be as dd,greedy as pd,Layout as fd,ns64 as yd,ns64be as bd,nu64 as gd,nu64be as Ad,offset as wd,s16 as Pd,s16be as kd,s24 as hd,s24be as Td,s32 as Id,s32be as Bd,s40 as xd,s40be as Sd,s48 as Kd,s48be as Cd,s8 as Rd,seq as Ld,struct as bw,Structure as Od,u16 as Md,u16be as Nd,u24 as _d,u24be as Vd,u32 as vd,u32be as Ed,u40 as Fd,u40be as Dd,u48 as Wd,u48be as qd,u8 as Ud,UInt as Gd,union as Xd,Union as zd,unionLayoutDiscriminator as Qd,utf8 as Yd}from"@solana/buffer-layout";var Lo=fd,wu=Od,Pu=zd,gw=rd,as=Gd,ku=ad,Aw=pd,Gi=Ud,Jt=Md,ww=_d,Oo=vd,Pw=Fd,kw=Wd,hu=gd,hw=Nd,Tw=Vd,Iw=Ed,Bw=Dd,xw=qd,Sw=Ad,Kw=Rd,Cw=Pd,Rw=hd,tt=Id,Lw=xd,Ow=Kd,Mw=yd,Nw=kd,_w=Td,Vw=Bd,vw=Sd,Ew=Cd,Fw=bd,Dw=cd,Ww=ld,qw=md,Uw=dd;var Tu=Ld,Iu=Xd,Gw=Qd,Ae=sd,Xw=ud,zw=Yd,us=id,cs=wd;var Rn=class extends Lo{constructor(t,n,i){super(t,i);this.blob=Ae(t),this.signed=n}decode(t,n=0){let i=new Bu(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new Bu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Xi=class extends Lo{constructor(t){super(8,t);this._lower=us(Oo(),!1),this._upper=us(Oo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),s=this._upper.decode(t,n+this._lower.span);return L(L({},i),s)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function W(o){return new as(1,o)}function nt(o){return new as(4,o)}function k(o){return new Rn(8,!1,o)}function ee(o){return new Rn(16,!1,o)}function Su(o){return new Rn(1,!0,o)}function eo(o){return new Rn(8,!0,o)}function Ku(o){return new Rn(16,!0,o)}var en=class extends Lo{constructor(t,n,i,s){super(t.span,s);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new en(Ae(32),e=>new jd(e),e=>e.toBuffer(),o)}var ls=class extends Lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Gi()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Zw(o,e){return new ls(o,e)}function Ge(o){return new en(Gi(),Hd,Zd,o)}function Hd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function Zd(o){return o?1:0}function $w(o,e){let t=Oo("length"),n=V([t,Y(o,cs(t,-t.span),"values")]);return new en(n,({values:i})=>i,i=>({values:i}),e)}function Jw(o,e,t){let n=V([k("tag"),e.replicate("data")]);function i({tag:s,data:r}){if(!s.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+s.toString("hex"));return r}return new en(n,i,s=>({tag:o,data:s}),t)}function $d(o){let e=Oo("length"),t=V([e,Ae(cs(e,-e.span),"data")]);return new en(t,({data:n})=>n,n=>({data:n}),o)}function eP(o){return new en($d(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function tP(o,e){let t=Iu(Gi(),e);return o.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function nP(o,e,t){let n=V([Y(o,e,"values")]);return new en(n,({values:i})=>i,i=>({values:i}),t)}var ms=class extends wu{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ms(o,e,t)}var ds=class extends Pu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function oP(o,e,t){return new ds(o,e,t)}var ps=class extends ku{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function iP(o){return new ps(o)}function Y(o,e,t){let n,i=typeof e=="number"?e:xu(e)?e.toNumber():new Proxy(e,{get(s,r){if(!n){let a=Reflect.get(s,"count");n=xu(a)?a.toNumber():a,Reflect.set(s,"count",n)}return Reflect.get(s,r)},set(s,r,a){return r==="count"&&(n=a),Reflect.set(s,r,a)}});return Tu(o,i,t)}var An=V([K("mint"),K("owner"),k("amount"),nt("delegateOption"),K("delegate"),W("state"),nt("isNativeOption"),k("isNative"),k("delegatedAmount"),nt("closeAuthorityOption"),K("closeAuthority")]);var AP=me("Raydium_Util");function Ru({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:s,account:r}of t.value){let a=An.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:s,mint:c,amount:u,isAssociated:le(o,c,r.owner).publicKey.equals(s),isNative:!1,programId:r.owner}),i.push({pubkey:s,accountInfo:a,programId:r.owner})}return e&&n.push({mint:Cu.default,amount:new ep(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Oe({fromPublicKey:o,programId:e=tp,assignSeed:t}){let n=t?btoa(t).slice(0,32):Jd.generate().publicKey.toBase58().slice(0,32);return{publicKey:np(o,n,e),seed:n}}function np(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Au(n);return new Cu(i)}function fs(o){let{mint:e,tokenAccount:t,owner:n,programId:i=to}=o;return ap(t,e,n,i)}function tn(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:s=to}=o;return sp(e,t,i,n,s)}async function nn(o){let{connection:e,amount:t,commitment:n,payer:i,owner:s,skipCloseAccount:r}=o,a=await e.getMinimumBalanceForRentExemption(An.span,n),c=Z(t).add(new rp(a)),u=Oe({fromPublicKey:i,programId:to});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ip.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:An.span,programId:to}),fs({mint:new op(Ye.address),tokenAccount:u.publicKey,owner:s,programId:to})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:r?[]:[E.CloseAccount],endInstructions:r?[]:[tn({tokenAccount:u.publicKey,payer:i,owner:s})]}}function Lu({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:s=to}){return up(o,e,t,BigInt(String(n)),i,s)}var Mo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return le(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=L(L({},{}),t),[s,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:wn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:lp},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ru({owner:this.scope.ownerPubKey,solAccountResp:s,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),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:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=wn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let s=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of s){let{publicKey:c}=a;if(c&&(!i||i&&r.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:s,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new zi(t.tokenProgram||wn),m=this.getAssociatedTokenAccount(n,new zi(l)),d=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!s||P.pubkey.equals(m))).sort((P,A)=>P.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(s){let P=ys(r,m,r,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(P),p.instructionTypes.push(E.CreateATA);else if(!(A.owner.equals(l)&&no.decode(A.data).mint.equals(n)&&no.decode(A.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(P),p.instructionTypes.push(E.CreateATA);if(n.equals(H)&&i.amount){let A=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),i.amount&&(p.instructions.push(Lu({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:wn})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(tn({owner:r,payer:i.payer||r,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let P=Oe({fromPublicKey:r,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(no.span),h=cp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:P.seed,newAccountPubkey:P.publicKey,lamports:A+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:no.span,programId:l});return p.instructions.push(h,fs({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(tn({owner:r,payer:i.payer||r,tokenAccount:P.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:P.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=wn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let s=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,r=this.scope.ownerPubKey,a={};if(!s){let u=this.getAssociatedTokenAccount(t,n),l=await ys(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],s=u}return i&&H.toBase58()===t.toBase58()&&(a.endInstructions=[tn({owner:r,payer:r,tokenAccount:s,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:s,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:s,programId:r=wn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(s,r);if(new zi(H).equals(s)){let p=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return L({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=ys(this.scope.ownerPubKey,d,this.scope.ownerPubKey,s,r);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(wn)&&no.decode(f.data).mint.equals(s)&&no.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${s.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=wn,amount:s,useSOLBalance:r,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new zi(H))&&r){let l=await this.handleTokenAccount({side:"in",amount:s||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=ve(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=ve(m,["tokenAccount"]);c=d,u.addInstruction(p)}return L({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as Lp}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Op}from"@solana/spl-token";import{PublicKey as Eu}from"@solana/web3.js";var bs=V([W("instruction")]),gs=V([W("instruction")]),mp=V([k("rewardState"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardLastUpdateTime"),k("totalReward"),k("totalRewardEmissioned"),k("rewardClaimed"),k("rewardPerSecond"),ee("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),k("rewardType"),Y(k(),15,"padding")]),dp=V([k("state"),k("nonce"),K("lpVault"),K("rewardVault"),K(),K(),k(),k(),k("totalReward"),ee("perShareReward"),k("lastSlot"),k("perSlotReward")]),pp=V([k("state"),k("nonce"),K("lpVault"),K("rewardVaultA"),k("totalRewardA"),ee("perShareRewardA"),k("perSlotRewardA"),W("option"),K("rewardVaultB"),Ae(7),k("totalRewardB"),ee("perShareRewardB"),k("perSlotRewardB"),k("lastSlot"),K()]),fp=V([k(),k("state"),k("nonce"),k("validRewardTokenNum"),ee("rewardMultiplier"),k("rewardPeriodMax"),k("rewardPeriodMin"),k("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Y(mp,5,"rewardInfos"),K("creator"),K(),Y(k(),32,"padding")]),Ou=new Proxy(dp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),Mu=new Proxy(pp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),No=new Proxy(fp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:6,rewardInfos:i.rewardInfos.map(s=>{var r;return D(L({},s),{rewardType:((r=Object.entries(Pn).find(a=>String(a[1])===s.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),yp=V([k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),As=V([W("instruction"),k("nonce"),Y(yp,5,"rewardTimeInfo")]),ws=V([W("instruction"),k("rewardReopenTime"),k("rewardEndTime"),k("rewardPerSecond")]),Ps=V([W("instruction"),k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),HP=V([k("state"),K("id"),K("owner"),k("deposited"),Y(k(),1,"rewardDebts")]),_o=V([k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),1,"rewardDebts"),k(""),k("voteLockedBalance"),Y(k(),15)]),ZP=V([k("state"),K("id"),K("owner"),k("deposited"),Y(k(),2,"rewardDebts")]),Nu=V([k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),2,"rewardDebts"),Y(k(),17)]),_u=V([k(),k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),5,"rewardDebts"),Y(k(),16)]),lt=V([W("instruction"),k("amount")]),bp=V([K("mint"),K("grantAuthority"),k("baselineVoteWeightScaledFactor"),k("maxExtraLockupVoteWeightScaledFactor"),k("lockupSaturationSecs"),Su("digitShift"),Y(W(),7,"reserved1"),Y(k(),7,"reserved2")]),Vu=V([Ae(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Y(W(),32,"reserved1"),Y(bp,4,"votingMints"),eo("timeOffset"),W("bump"),Y(W(),7,"reserved2"),Y(k(),11,"reserved3")]),gp=V([eo("startTime"),eo("endTime"),W("kind"),Y(W(),15,"reserved")]),Ap=V([Y(gp,1,"lockup"),k("amountDeposited_native"),k("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),W("votingMintConfigIdx"),Y(W(),29,"reserved")]),vu=V([Ae(8),K("voterAuthority"),K("registrar"),Y(Ap,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),Y(W(),94,"reserved")]);var rk=me("Raydium_farm_config"),Fu=new Eu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Du=new Eu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Wu={3:Ou,5:Mu,6:No},qu={3:_o,5:Nu,6:_u},ks=o=>[3,4,5,6].indexOf(o)!==-1,hs=o=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,s={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(r=s[e])==null?void 0:r.call(s)},Pn={"Standard SPL":0,"Option tokens":1},xt={[Yr.toString()]:3,[ru.toString()]:4,[jr.toString()]:5,[Zn.toString()]:6};import{PublicKey as oe,SystemProgram as Ln,SYSVAR_CLOCK_PUBKEY as io,SYSVAR_RENT_PUBKEY as kp,TransactionInstruction as He}from"@solana/web3.js";import Qi from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hp,createAssociatedTokenAccountInstruction as Tp,TOKEN_PROGRAM_ID as wt}from"@solana/spl-token";function Ts(o,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Is(o,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function Bs(o,e){return ae([e.toBuffer()],o)}function xs(o,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ss(o,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Ks(o,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import At from"bn.js";var Vo=me("Raydium.farm.util");function vo({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function st({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Uu=({programId:o,poolId:e})=>ae([e.toBuffer()],o);function Gu(o){return{isSet:new At(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Pn[o.rewardType])}}function Cs(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function oo(o){let e=qu[o];return e||Vo.logWithError("invalid version",o),e}function wp(o){let e=Wu[o];return e||Vo.logWithError("invalid version",o),e}function Pp(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new At(t)))return o;let i=new At(t).sub(o.lastSlot);o.lastSlot=new At(t);for(let s of o.rewardInfos){if(e.amount.eq(new At(0)))continue;let r=s.perSlotReward.mul(i);s.perShareReward=s.perShareReward.add(r.mul(new At(10).pow(new At(o.version===3?9:15))).div(e.amount)),s.totalReward=s.totalReward.add(r)}}else if(o.version===6)for(let i of o.rewardInfos){if(i.rewardState.eq(new At(0)))continue;let s=At.min(new At(n),i.rewardEndTime);if(i.rewardOpenTime.gte(s))continue;let a=s.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),c=i.totalReward.sub(i.totalRewardEmissioned);c.lt(a)?(a=c,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(c.div(i.rewardPerSecond))):i.rewardLastUpdateTime=s,!e.amount.eq(new At(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return o}async function hk({connection:o,farmPools:e,owner:t,config:n,chainTime:i}){let s=!1,r=!1,a=new At(10),c=[];for(let d of e){let p=Ie(d);p.version===6?r=!0:s=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:st({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await ze(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=L({},u[g]),y==="state"){let P=wp(p);(!b||!b.data||b.data.length!==P.span)&&Vo.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==An.span)&&Vo.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=An.decode(b.data);else if(y==="ledger"){let P=oo(p);b&&b.data&&(b.data.length!==P.span&&Vo.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=P.decode(b.data))}}let m=r||s?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Pp(u[d].state,u[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new At(9)):a.pow(new At(15)),b=p.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=D(L({},u[d].wrapped),{pendingRewards:b})}return u}function Tk(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Ha(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Za(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Rs(o,e,t,n){let i=await o.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let r=Vu.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(r===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:r,isInit:!1};let u=vu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===r);return u===-1?{index:r,isInit:!1}:{index:u,isInit:!0}}var Ip=me("Raydium_farm_instruction"),Eo={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 Fo(o){let{version:e,id:t,ledger:n,programId:i,owner:s}=o,r={3:9,5:10}[e];r||Ip.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(bs.span);bs.encode({instruction:r},a);let c=[w({pubkey:t}),w({pubkey:n}),w({pubkey:s,isWritable:!1}),w({pubkey:Ln.programId,isWritable:!1}),w({pubkey:kp,isWritable:!1})];return{instruction:new He({programId:i,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function Xu(o){var n;let e=Buffer.alloc(As.span);As.encode({instruction:0,nonce:new Qi(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...vr,w({pubkey:o.farmId}),w({pubkey:o.farmAuthority,isWritable:!1}),w({pubkey:o.lpVault}),w({pubkey:o.lpMint,isWritable:!1}),w({pubkey:o.lockVault}),w({pubkey:o.lockMint,isWritable:!1}),w({pubkey:(n=o.lockUserAccount)!=null?n:je}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(w({pubkey:i.rewardMint,isWritable:!1}),w({pubkey:i.rewardVault}),w({pubkey:i.userRewardToken}));return{instruction:new He({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function zu(o){let e=Buffer.alloc(gs.span);gs.encode({instruction:5},e);let t=[w({pubkey:wt,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.authority,isWritable:!1}),w({pubkey:o.lpVault,isWritable:!1}),w({pubkey:o.rewardVault}),w({pubkey:o.userRewardToken}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new He({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function Bp(o,e,t,n,i,s,r,a,c,u,l,m,d){let p=V([W("depositEntryIndex"),k("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Eo.voterStakeRegistryDeposit,...f]);return new He({keys:y,programId:o,data:b})}function xp(o,e,t,n){let i=V([]),s=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}],r=Buffer.alloc(i.span);i.encode({},r);let a=Buffer.from([...Eo.voterStakeRegistryUpdateVoterWeightRecord,...r]);return new He({keys:s,programId:o,data:a})}function Sp(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y){let f=V([W("depositEntryIndex"),k("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let P=Buffer.from([...Eo.voterStakeRegistryWithdraw,...g]);return new He({keys:b,programId:o,data:P})}function Kp(o,e,t,n,i,s){let r=V([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({ins:23},c),new He({keys:a,programId:o,data:c})}function Cp(o,e,t,n,i,s,r,a){let c=V([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:r,voterWeightRecordBump:a},l);let m=Buffer.from([...Eo.voterStakeRegistryCreateVoter,...l]);return new He({keys:u,programId:o,data:m})}function Rp(o,e,t,n,i,s,r,a,c,u,l,m){let d=V([W("depositEntryIndex"),W("kind"),W("option"),k("startTs"),nt("periods"),Ge("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:hp,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Eo.voterStakeRegistryCreateDepositEntry,...y]);return new He({keys:p,programId:o,data:f})}async function Fk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:s,owner:r,poolId:a,tokenProgram:c}){let u=Ts(n,i,s).publicKey,l=st({programId:e,poolId:a,owner:r,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=_o.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Qi(0)))throw Error("user do not has new stake amount");let y=Is(e,a).publicKey,f=Bs(e,a).publicKey,{publicKey:b,nonce:g}=xs(n,u,r),P=le(b,y,c).publicKey,{publicKey:A,nonce:h}=Ss(n,u,r),I=Ks(t,i,s,r).publicKey,T=[],S=le(r,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Tp(r,S,r,y)),await o.getAccountInfo(b)===null){let F=Kp(t,i,r,s,r,I);T.push(F,Cp(n,u,b,A,r,r,g,h))}let{index:x,isInit:R}=await Rs(o,u,b,y);return R||T.push(Rp(n,u,b,P,r,r,y,x,0,void 0,0,!1)),T.push(Bp(n,u,b,P,S,r,l,a,y,f,e,x,p),xp(n,u,b,A)),T}async function Dk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:s,owner:r,poolId:a,tokenProgram:c}){let u=Ts(n,i,s).publicKey,l=st({programId:e,poolId:a,owner:r,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=_o.decode(m.data);if(d.voteLockedBalance.eq(new Qi(0)))throw Error("user has vote locked balance = 0");let p=Is(e,a).publicKey,y=Bs(e,a).publicKey,{publicKey:f}=xs(n,u,r),b=le(f,p,c).publicKey,{publicKey:g}=Ss(n,u,r),P=Ks(t,i,s,r).publicKey,A=[],{index:h,isInit:I}=await Rs(o,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Sp(n,u,f,r,P,g,b,le(r,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),A}function Ls({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let s=Buffer.alloc(ws.span);ws.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},s);let r=[w({pubkey:wt,isWritable:!1}),w({pubkey:n.id}),w({pubkey:n.lpVault,isWritable:!1}),w({pubkey:e}),w({pubkey:t}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new He({programId:n.programId,keys:r,data:s})}function Os({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let s=Buffer.alloc(Ps.span);Ps.encode({instruction:4,isSet:new Qi(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(Pn[i.rewardType])},s);let r=[...vr,w({pubkey:t.id}),w({pubkey:t.authority,isWritable:!1}),w({pubkey:i.mint,isWritable:!1}),w({pubkey:n}),w({pubkey:e}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new He({programId:t.programId,keys:r,data:s})}function Wk(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:s,owner:r,instruction:a,amount:c,deposit:u}=o,[l,m]=[new oe(e.programId),new oe(e.id)],d=st({programId:l,poolId:m,owner:r,version:n}),p=Buffer.alloc(lt.span);lt.encode({instruction:a,amount:c},p);let y=n===6?[w({pubkey:wt,isWritable:!1}),...u?[w({pubkey:Ln.programId,isWritable:!1})]:[],w({pubkey:m}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:d}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:i})]:[w({pubkey:m}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:d}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:i}),w({pubkey:new oe(t.lpVault)}),w({pubkey:s[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(w({pubkey:s[f]})),y.push(w({pubkey:new oe(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(w({pubkey:new oe(t.rewardInfos[f].vault)})),y.push(w({pubkey:s[f]}));return new He({programId:l,keys:y,data:p})}function Do(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r}=o,[a,c]=[new oe(e.programId),new oe(e.id)],u=st({programId:a,poolId:c,owner:s,version:6}),l=Buffer.alloc(lt.span);lt.encode({instruction:2,amount:Z(r)},l);let m=[w({pubkey:wt,isWritable:!1}),w({pubkey:c}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:u}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(w({pubkey:i[d]}));return new He({programId:a,keys:m,data:l})}function Wo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:s,version:5}),m=Buffer.alloc(lt.span);lt.encode({instruction:12,amount:Z(r)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:i[p]})),d.push(w({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Qu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=V([W("instruction"),k("amount")]),m=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:a[0]}),w({pubkey:s,isSigner:!0,isWritable:!1}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1}),w({pubkey:i[1]}),w({pubkey:new oe(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new He({keys:m,programId:c,data:d})}function qo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:s,version:3}),m=Buffer.alloc(lt.span);lt.encode({instruction:11,amount:Z(r)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Yu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:s,version:3}),m=Buffer.alloc(lt.span);lt.encode({instruction:10,amount:Z(r)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function ju(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:s,version:5}),m=Buffer.alloc(lt.span);lt.encode({instruction:11,amount:Z(r)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:i[p]})),d.push(w({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Hu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:s,amount:r}=o,[a,c]=[new oe(e.programId),new oe(e.id)],u=st({programId:a,poolId:c,owner:s,version:6}),l=Buffer.alloc(lt.span);lt.encode({instruction:1,amount:Z(r)},l);let m=[w({pubkey:wt,isWritable:!1}),w({pubkey:Ln.programId,isWritable:!1}),w({pubkey:c}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:u}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(w({pubkey:i[d]}));return new He({programId:a,keys:m,data:l})}var Uo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(je)){let n=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Cs(D(L({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Zn,txVersion:s}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Fu,lockVault:Du},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Oe({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(No.span);c.addInstruction({instructions:[Lp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:No.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Uu({programId:new Pe(a.programId),poolId:l.publicKey}),y=vo({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(Pn[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Gu(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=I.mint.equals(je)?new Pe(Ye.address):I.mint;b.push({rewardMint:B,rewardVault:vo({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});P&&c.addInstruction(P),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:h}=Xu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[h]}).versionBuild({txVersion:s,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let s=xt[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:r.id,rewardInfos:e.rewardInfos,lpVault:r.lpVault,programId:r.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(je)?new Pe(Ye.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=r.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:je,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ls({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let s=xt[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:r.id,rewardInfos:e.rewardInfos,lpVault:r.lpVault,programId:r.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(je)?new Pe(Ye.address):m.mint,p=a.rewardInfos.findIndex(A=>new Pe(A.mint.address).equals(d)),y=r.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:je,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=Ls({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[P],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:s}=e,r=xt[n.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=s!=null?s:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(je)?new Pe(Ye.address):i.mint,m=vo({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Os({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:s}=e,r=xt[n.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=s!=null?s:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(je)?new Pe(Ye.address):l.mint,d=vo({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Os({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:D(L({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:s,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=xt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),ks(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=st({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let O of this.scope.account.tokenAccounts)if(a){let X=le(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&X.equals(O.publicKey)&&(A[O.mint.toString()]=O.publicKey)}else A[O.mint.toString()]=O.publicKey;let h=b.lpMint,I=A[h.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let O of m){let X=r&&O.mint.address===H.toString(),U=A[O.mint.address];if(!U){let{account:q,instructionParams:Re}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Pe(O.mint.address),notUseTokenAccount:X,createInfo:{payer:s||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!X,associatedOnly:X?!1:a,checkCreateATAOwner:c});U=q,Re&&P.addInstruction(Re)}A[O.mint.address]=U,T.push(U)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=oo(p).decode(B.data)),n.programId!==Zn.toString()&&!S){let{instruction:O,instructionType:X}=Fo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[O],instructionTypes:[X]})}let C=hs({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Pe(O))},R=p===6?Hu(x):p===5?ju(x):Yu(x),F={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return P.addInstruction({instructions:[R],instructionTypes:[F[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:s,useSOLBalance:r,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=xt[n.programId];ks(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=le(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(!s&&p!==4){let C=st({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)oo(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:R,instructionType:F}=Fo({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[R],instructionTypes:[F]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else s&&s.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=y.lpMint.address,P=r&&g===H.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:c,checkCreateATAOwner:u});A=C,x&&f.addInstruction(x)}b[g.toString()]=A;let h=[];for(let C of d){let x=r&&C.mint.address===H.toString(),R=b[C.mint.address];if(!R){let{account:F,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});R=F,O&&f.addInstruction(O)}b[C.mint.address]=R,h.push(R)}let I=hs({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});I&&this.logAndCreateError(I);let T={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?Do(T):p===5?Wo(T):p===4?Qu(T):qo(T),B={3:E.FarmV3Withdraw,4:E.FarmV4Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),s=xt[e.programId];s!==6&&this.logAndCreateError("invalid farm version",s);let r=e.rewardInfos.findIndex(y=>y.mint.address===je.toString()?new Pe(Ye.address):t),a=i.rewardInfos[r];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:je,u=this.createTxBuilder(),l;if(t.equals(je)){let y=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Cs(D(L({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Op(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=zu({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:s=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(s){let f=le(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)=>D(L({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=xt[f],h=b.address,I=n&&h===H.toString(),T=m[h];if(!T){let{account:F,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:I,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:s,checkCreateATAOwner:r});T=F,O&&l.addInstruction(O)}m[h.toString()]=T;let S=[];for(let F of g){let O=n&&F.mint.address===H.toString(),X=m[F.mint.address];if(!X){let{account:U,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new Pe(F.mint.address),notUseTokenAccount:O,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:s,checkCreateATAOwner:r});X=U,q&&l.addInstruction(q)}m[F.mint.address]=X,S.push(X)}let B=p[P],C={amount:Fe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(F=>new Pe(F))},x=A===6?Do(C):A===5?Wo(C):qo(C),R={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[R[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as qe}from"@solana/web3.js";import{AccountLayout as Bf,NATIVE_MINT as sr,TOKEN_PROGRAM_ID as hn}from"@solana/spl-token";import{Keypair as Ji,PublicKey as G,SystemProgram as vn,TransactionInstruction as pt}from"@solana/web3.js";import gc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ws,TOKEN_2022_PROGRAM_ID as Yt,TOKEN_PROGRAM_ID as xe}from"@solana/spl-token";import Gp from"bn.js";import St from"bn.js";var ye=new St(0),Tt=new St(1),on=new St(-1),It=new St(1).shln(64),Yi=new St(1).shln(128),Ms=It.sub(Tt),Go=64,Zu=Yi.subn(1),at=-443636,mt=-at,Kt=new St("4295048016"),Ct=new St("79226673521066979257578248091"),ji=new St("4295048017"),Hi=new St("79226673521066979257578248090"),$u=16,Ju="59543866431248",ec="184467440737095516",tc="15793534762490258745",Zi=new St(10).pow(new St(6)),Mp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Mp||{}),Ah={[500]:10,[3e3]:60,[1e4]:200},wh={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},nc={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:[]},Ph=new St("18446744073700000000");import ce from"bn.js";function oc(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function hh(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Th(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function $i(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ns(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function _s(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Xo(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function ic(o,e){return Xo(o,e)?null:Ns(o,e)}function rc(o,e){return Xo(o,e)?null:_s(o,e)}var Np=Buffer.from("amm_config","utf8"),_p=Buffer.from("pool","utf8"),Vp=Buffer.from("pool_vault","utf8"),vp=Buffer.from("pool_reward_vault","utf8"),sc=Buffer.from("position","utf8"),Ep=Buffer.from("tick_array","utf8"),Fp=Buffer.from("operation","utf8"),Dp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Wp=Buffer.from("observation","utf8");function Sh(o,e){return ae([Np,oc(e)],o)}function ac(o,e,t,n){return ae([_p,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Vs(o,e,t){return ae([Vp,e.toBuffer(),t.toBuffer()],o)}function uc(o,e,t){return ae([vp,e.toBuffer(),t.toBuffer()],o)}function de(o,e,t){return ae([Ep,e.toBuffer(),$i(t)],o)}function Et(o,e,t,n){return ae([sc,e.toBuffer(),$i(t),$i(n)],o)}function dt(o,e){return ae([sc,e.toBuffer()],o)}function On(o){return ae([Buffer.from("metadata","utf8"),Ht.toBuffer(),o.toBuffer()],Ht)}function zo(o){return ae([Fp],o)}function ot(o,e){return ae([Dp,e.toBuffer()],o)}function cc(o,e){return ae([Wp,e.toBuffer()],o)}var lc=Buffer.from("locked_position","utf8");function vs(o,e){return ae([lc,e.toBuffer()],o)}function Qo(o,e){return ae([lc,e.toBuffer()],o)}import{PublicKey as Ft}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as mc}from"@solana/spl-token";import Be from"bn.js";import Qt from"bn.js";var Yo=class{static getfeeGrowthInside(e,t,n){let i=new Qt(0),s=new Qt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,s=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),s=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let r=new Qt(0),a=new Qt(0);e.tickCurrent<n.tick?(r=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64A,i),r),u=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64B,s),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:s,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64A),t.liquidity,It),c=t.tokenFeesOwedA.add(a),u=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,It),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:s,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64A),t.liquidity,It),c=t.tokenFeesOwedA.add(a),u=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,It),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let s=[],r=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ie.wrappingSubU128(c,u.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,It),d=u.rewardAmountOwed.add(m);s.push(d)}return s}static GetPositionRewards(e,t,n,i){let s=[],r=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ie.wrappingSubU128(c,u.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,It),d=u.rewardAmountOwed.add(m);s.push(d)}return s}static getRewardGrowthInside(e,t,n,i){let s=[];for(let r=0;r<i.length;r++){let a=new Qt(0);t.liquidityGross.eqn(0)?a=i[r].rewardGrowthGlobalX64:e<t.tick?a=i[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new Qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=i[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),s.push(ie.wrappingSubU128(ie.wrappingSubU128(i[r].rewardGrowthGlobalX64,a),c))}return s}static getRewardGrowthInsideV2(e,t,n,i){let s=[];for(let r=0;r<i.length;r++){let a=new Qt(0);t.liquidityGross.eqn(0)?a=i[r].rewardGrowthGlobalX64:e<t.tick?a=i[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new Qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=i[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),s.push(ie.wrappingSubU128(ie.wrappingSubU128(i[r].rewardGrowthGlobalX64,a),c))}return s}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:s,epochInfo:r}){var b,g,P,A;let a=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=s?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,s),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[y,f]=[ge(new Qt(new M(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,r,!0),ge(new Qt(new M(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Vt(d.expirationTime,p.expirationTime)}}};var qp=15,fe=class{static async getTickArrays(e,t,n,i,s,r,a){let c=[],u=j.getTickArrayStartIndexByTick(i,s),l=j.getInitializedTickArrayInRange(r,a,s,u,Math.floor(qp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await Lt(e,c)).map(p=>p!==null?jo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=D(L({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,s,r){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,s,r);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,s,r),this.checkIsValidStartIndex(u,s))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,r);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,s){let r=Math.floor(e/fe.tickCount(t)),a=n?j.searchLowBitFromStart(i,s,r-1,1,t):j.searchHightBitFromStart(i,s,r+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let s;if(i){let a=Ze-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){s=c;break}a=a-1}}else{let a=0;for(;a<Ze;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){s=c;break}a=a+1}}let{publicKey:r}=de(e,t,n.startTickIndex);return{nextTick:s,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,s,r){let a=j.getTickArrayStartIndexByTick(i,s),c=Math.floor((i-a)/s),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(r)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Ze;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>mt)return!1;let n=j.getTickArrayStartIndexByTick(at,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ze*e}};var Es=14,rn=class{static maxTickInTickarrayBitmap(e){return e*Ze*Mn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let s=n*i;return e<0?{minValue:-s,maxValue:-s+n}:{minValue:s,maxValue:s+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let s=this.maxTickInTickarrayBitmap(n),r=i?t-fe.tickCount(n):t+fe.tickCount(n);if(r<-s||r>=s)return{isInit:!1,tickIndex:t};let a=n*Ze,c=r/a+512;r<0&&r%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=ic(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-s}}else{let l=e.shrn(u),m=rc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}},Ho=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=rn.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=rn.maxTickInTickarrayBitmap(e),n=-t;if(mt<=t)throw Error(`extensionTickBoundary check error: ${mt}, ${t}`);if(n<=at)throw Error(`extensionTickBoundary check error: ${n}, ${at}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),s=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(i).testn(s),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let s=fe.tickCount(t),r=n?e-s:e+s,{tickarrayBitmap:a}=this.getBitmap(r,t,i);return this.nextInitializedTickArrayInBitmap(a,r,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:s,maxValue:r}=rn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=j.mergeTickArrayBitmap(e).shln(Mn-1-a),u=Xo(512,c)?null:Ns(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Xo(512,c)?null:_s(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%rn.maxTickInTickarrayBitmap(t),i=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(i=Mn-i),i}};var Me=class{static getOutputAmountAndRemainAccounts(e,t,n,i,s,r=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Nn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,s,r);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(on),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,s){let r=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,r);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,r);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Nn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(on),u,s);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Me.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Ho.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:s,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(s){let{publicKey:a}=de(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),i=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:s}=rn.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:s};t=s;let{isInit:r,tickIndex:a}=Ho.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<at||t>mt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:s}){var a,c,u;let r=[];for(let l=0;l<s.length;l++){let m=s[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=D(L({},m),{perSecond:ie.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ft(d)});if(p.tokenMint.equals(Ft.default))continue;if(n<=p.openTime.toNumber()||i.eq(ye)){r.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ie.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),P=ie.mulDivFloor(f,p.emissionsPerSecondX64,It),A=p.rewardTotalEmissioned.add(P);r.push(D(L({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let s of t){let r=j.getTickArrayStartIndexByTick(s,e);if(r>=n||r<i)return!0}return!1}static tickRange(e){let t=rn.maxTickInTickarrayBitmap(e),n=-t;return t>mt&&(t=fe.getArrayStartIndex(mt,e)+fe.tickCount(e)),n<at&&(n=fe.getArrayStartIndex(at,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*Mn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await ze(e,t.map(r=>({pubkey:r})),{batchRequest:n}),s={};for(let r of i)r.accountInfo!==null&&(s[r.pubkey.toString()]=pc.decode(r.accountInfo.data));return s}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},s=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);s.push({pubkey:d}),i[d.toString()]=c.id}}let r=await ze(e,s,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=jo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=D(L({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:s=!0}){var a;let r=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(r.find(l=>l.equals(u.state.programId))||r.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of r)u.push(dt(p,d).publicKey);let l=await Lt(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Zo.decode(d.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>D(L({},B),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(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(s){let d=Object.values(m),p=await Lt(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=jo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[P].toString()],I=y[m[A].toString()],T=h.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await Yo.GetPositionFees(f,g,T,S),x=await Yo.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=B.gte(new Be(0))?B:new Be(0),g.tokenFeeAmountB=C.gte(new Be(0))?C:new Be(0);for(let R=0;R<x.length;R++)g.rewardInfos[R].pendingReward=x[R].gte(new Be(0))?x[R]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:s,slippage:r,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var F;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Kt.add(new Be(1)):Ct.sub(new Be(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(s,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:P}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((F=p.fee)!=null?F:ye),u,c),A=ge(f,d,i,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?h:new M(1).div(h),T=f.mul(new Be(Math.floor((1-r)*1e10))).div(new Be(1e10)),S=ge(T,d,i,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(I).sub(B).abs(),x=B,R=new Le(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Vt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:R,fee:P,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:s,epochInfo:r,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(D(L({},u),{mint:u.address,isToken2022:u.programId===mc.toBase58()})),new we(D(L({},l),{mint:l.address,isToken2022:l.programId===mc.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:A,priceImpact:h,fee:I,remainingAccounts:T,executionPriceX64:S}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ft(u.address),amountIn:n,slippage:s,epochInfo:r,catchLiquidityInsufficient:a}),B=D(L({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=D(L({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=D(L({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),R=new $e({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),F=new $e({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),O=new be(m,I);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:R,executionPrice:F,priceImpact:h,fee:O,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:s,slippage:r,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Ct.sub(new Be(1)):Kt.add(new Be(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(s,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],i,!1),P=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?P:new M(1).div(P),h=d.mul(new Be(Math.floor((1+r)*1e10))).div(new Be(1e10)),I=ge(h,u[b],i,!0),T=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(A).sub(T).abs(),B=T,C=new Le(new M(S).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Vt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let s=e[t],r=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(r,s.priceMin),l=Math.min(a,s.priceMax)-c,m=a-r,d=s.priceMax-s.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:s.feeApr*p,rewardsApr:[((y=s.rewardApr[0])!=null?y:0)*p,((f=s.rewardApr[1])!=null?f:0)*p,((b=s.rewardApr[2])!=null?b:0)*p],apr:s.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:s,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[ht(e.mintA.address).toString()],d=i[ht(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(r),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:I}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,s,!1,!1,0),T=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(A.toString()).div(new M(10).pow(y)).mul(d.value)),S=new M(h.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(I.toString()).div(new M(10).pow(y)).mul(d.value)),B=new M(1).div(T.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),R=3600*24*365,F=e.rewardDefaultInfos.map(O=>{var q,Re;let X=O.mint.decimals,U=i[O.mint.address];return c<((q=O.startTime)!=null?q:0)||c>((Re=O.endTime)!=null?Re:0)||!O.perSecond||!U||X===void 0?0:new M(U.value).mul(new M(O.perSecond).mul(R)).div(new M(10).pow(X)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:F,apr:x+F.reduce((O,X)=>O+X,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:s,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(i),p=a?1-r:1+r,y=ge(s,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new M(y.amount.sub((P=y.fee)!=null?P:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let A=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?A:h}else b=t?new Be(0):pe.getLiquidityFromTokenAmountB(m,d,f);return Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:r,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:s,slippage:r,add:a}){var b,g,P,A;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(i),l=a?1+r:1-r,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,s,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),ge(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:s,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Vt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Ft(c.id));(await Lt(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=_n.decode(c.data))});let r=t.map(c=>ot(new Ft(c.programId),new Ft(c.id)).publicKey),a=await Me.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>D(L({},c),{[u.id]:D(L({},n[u.id]),{id:new Ft(u.id),version:6,programId:new Ft(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:D(L({},u.config),{id:new Ft(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapInfo:a[ot(new Ft(u.programId),new Ft(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function dT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:s,add:r,epochInfo:a,amountHasFee:c}){var A,h,I,T;let[u,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=te.priceToSqrtPriceX64(new M(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(A=o.mintA.extensions)==null?void 0:A.feeConfig,a,!c),ge(d,(h=o.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],P=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:P,slippage:s,add:r,epochInfo:a,amountAddFee:!c})}var Fs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function dc(o){return D(L({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Fs,week:Fs,month:Fs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:D(L({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ie=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),s=i.div(n);return i.mod(n).eq(ye)||(s=s.add(Tt)),s}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(Tt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ce(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Yi).sub(t).mod(Yi)}};function Je(o,e){return Ds(o.mul(e),64,256)}function Up(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ds(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ie.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ie.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(ye))return e;let s=t.shln(Go);if(i){let r=s,a=s.add(n.mul(e));return a.gte(r)?ie.mulDivCeil(r,e,a):ie.mulDivRoundingUp(r,Tt,r.div(e).add(n))}else{let r=n.mul(e);if(!s.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=s.sub(r);return ie.mulDivCeil(s,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let s=n.shln(Go);if(i)return e.add(s.div(t));{let r=ie.mulDivRoundingUp(s,Tt,t);if(!e.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(r)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<at||e>mt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ce("18445821805675395072"):new ce("18446744073709551616");return(t&2)!=0&&(n=Je(n,new ce("18444899583751176192"))),(t&4)!=0&&(n=Je(n,new ce("18443055278223355904"))),(t&8)!=0&&(n=Je(n,new ce("18439367220385607680"))),(t&16)!=0&&(n=Je(n,new ce("18431993317065453568"))),(t&32)!=0&&(n=Je(n,new ce("18417254355718170624"))),(t&64)!=0&&(n=Je(n,new ce("18387811781193609216"))),(t&128)!=0&&(n=Je(n,new ce("18329067761203558400"))),(t&256)!=0&&(n=Je(n,new ce("18212142134806163456"))),(t&512)!=0&&(n=Je(n,new ce("17980523815641700352"))),(t&1024)!=0&&(n=Je(n,new ce("17526086738831433728"))),(t&2048)!=0&&(n=Je(n,new ce("16651378430235570176"))),(t&4096)!=0&&(n=Je(n,new ce("15030750278694412288"))),(t&8192)!=0&&(n=Je(n,new ce("12247334978884435968"))),(t&16384)!=0&&(n=Je(n,new ce("8131365268886854656"))),(t&32768)!=0&&(n=Je(n,new ce("3584323654725218816"))),(t&65536)!=0&&(n=Je(n,new ce("696457651848324352"))),(t&131072)!=0&&(n=Je(n,new ce("26294789957507116"))),(t&262144)!=0&&(n=Je(n,new ce("37481735321082"))),e>0&&(n=Zu.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Ct)||e.lt(Kt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ce(t-64),i=Up(n,32,128),s=new ce("8000000000000000","hex"),r=0,a=new ce(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;s.gt(new ce(0))&&r<$u;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(s.mul(y)),s=s.shrn(1),r+=1}let u=a.shrn(32),m=i.add(u).mul(new ce(Ju)),d=Ds(m.sub(new ce(ec)),64,128).toNumber(),p=Ds(m.add(new ce(tc)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Vn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let r=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,i))/t;return r<0?r=Math.floor(r):r=Math.ceil(r),r*t}static roundPriceWithTickspacing(e,t,n,i){let s=Vn.getTickWithPriceAndTickspacing(e,t,n,i),r=te.getSqrtPriceX64FromTick(s);return te.sqrtPriceX64ToPrice(r,n,i)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let s=n.ushln(Go),r=t.sub(e);return i?ie.mulDivRoundingUp(ie.mulDivCeil(s,r,t),Tt,e):ie.mulDivFloor(s,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return i?ie.mulDivCeil(n,t.sub(e),It):ie.mulDivFloor(n,t.sub(e),It)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let s=n.mul(e).mul(t),r=t.sub(e),a=s.div(r);return i?ie.mulDivRoundingUp(a,Tt,Ms):a.shrn(Go)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ie.mulDivFloor(n,Ms,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,s){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let r=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,s);return r.lt(a)?r:a}else return pe.getLiquidityFromTokenAmountB(t,n,s)}static getAmountsFromLiquidity(e,t,n,i,s){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,s),amountB:new ce(0)};if(e.lt(n)){let r=pe.getTokenAmountAFromLiquidity(e,n,i,s),a=pe.getTokenAmountBFromLiquidity(t,e,i,s);return{amountA:r,amountB:a}}else return{amountA:new ce(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,s)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,s,r,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,r),l=s?1+a:1-a,m=new ce(new M(c.toString()).mul(l).toFixed(0)),d=new ce(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:s,add:r,epochInfo:a,amountAddFee:c}){var P,A,h,I;let u=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=r?1+s:1-s,p=pe.getAmountsFromLiquidity(u,l,m,i,r),[y,f]=[ge(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),ge(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[ge(new ce(new M(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new ce(new M(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Vt(y.expirationTime,f.expirationTime)}}},Nn=class{static swapCompute(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=r?Kt.add(Tt):Ct.sub(Tt)),r){if(y.lt(Kt))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(Ct))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ce(0)},P=p,A=n[p],h=0,I=!r&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,r,I),B=S||null,C=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let R=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:s},P,r);if(!R.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")}P=R.nextStartIndex;let{publicKey:F}=de(e,t,P);C=F,A=n[P];try{B=j.firstInitializedTick(A,r)}catch{throw Error("not found next tick info")}}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),p!==P&&C&&(g.accounts.push(C),p=P),T.tickNext<at?T.tickNext=at:T.tickNext>mt&&(T.tickNext=mt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(r&&T.sqrtPriceNextX64.lt(y)||!r&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Nn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let R=B.liquidityNet;r&&(R=R.mul(on)),g.liquidity=pe.addDelta(g.liquidity,R)}I=T.tickNext!=g.tick&&!r&&A.startTickIndex===T.tickNext,g.tick=r?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let R=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=R!=g.tick&&!r&&A.startTickIndex===R,g.tick=R}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,r,i,s);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,s){let r={sqrtPriceX64Next:new ce(0),amountIn:new ce(0),amountOut:new ce(0),feeAmount:new ce(0)},a=e.gte(t),c=i.gte(ye);if(c){let l=ie.mulDivFloor(i,Zi.sub(new ce(s.toString())),Zi);r.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(r.amountIn)?r.sqrtPriceX64Next=t:r.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else r.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(on).gte(r.amountOut)?r.sqrtPriceX64Next=t:r.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,i.mul(on),a);let u=t.eq(r.sqrtPriceX64Next);return a?(u&&c||(r.amountIn=pe.getTokenAmountAFromLiquidity(r.sqrtPriceX64Next,e,n,!0)),u&&!c||(r.amountOut=pe.getTokenAmountBFromLiquidity(r.sqrtPriceX64Next,e,n,!1))):(r.amountIn=u&&c?r.amountIn:pe.getTokenAmountBFromLiquidity(e,r.sqrtPriceX64Next,n,!0),r.amountOut=u&&!c?r.amountOut:pe.getTokenAmountAFromLiquidity(e,r.sqrtPriceX64Next,n,!1)),!c&&r.amountOut.gt(i.mul(on))&&(r.amountOut=i.mul(on)),c&&!r.sqrtPriceX64Next.eq(t)?r.feeAmount=i.sub(r.amountIn):r.feeAmount=ie.mulDivCeil(r.amountIn,new ce(s),Zi.sub(new ce(s))),[r.sqrtPriceX64Next,r.amountIn,r.amountOut,r.feeAmount]}};var Ze=60,Mn=512,j=class{static getTickArrayAddressByTick(e,t,n,i){let s=j.getTickArrayStartIndexByTick(n,i),{publicKey:r}=de(e,t,s);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Ze)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ze,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Ze,s=Math.floor(t/i)+512,r=Math.abs(s);return{isInitialized:e.testn(r),startIndex:(r-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ze:e+t*Ze}static mergeTickArrayBitmap(e){let t=new Gp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,s){let r=Math.floor(i/(n*Ze));return[...j.searchLowBitFromStart(e,t,r-1,s,n),...j.searchHightBitFromStart(e,t,r,s,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,Mn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,s){let r=[],a=j.getAllInitializedTickArrayStartIndex(n,i,s);for(let c of a){let{publicKey:u}=de(e,t,c);r.push({tickArrayStartIndex:c,tickArrayAddress:u})}return r}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,s){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=fe.tickCount(s);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,s){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=fe.tickCount(s);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<at||e>mt}static nextInitTick(e,t,n,i,s){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(s||(a=a+1);a<Ze;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ze-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ze;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),s=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:s,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(s),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),s=Vn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=te.getSqrtPriceX64FromTick(s),a=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:s,price:a}:{tick:s,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),s=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:s,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(s),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),s=Vn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=te.getSqrtPriceX64FromTick(s),a=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:s,price:a}:{tick:s,price:new M(1).div(a)}}};var fc=V([Ae(8),W("bump"),Jt("index"),K(""),nt("protocolFeeRate"),nt("tradeFeeRate"),Jt("tickSpacing"),Y(k(),8,"")]),Xp=V([nt("blockTimestamp"),eo("tickCumulative"),Y(k(),4)]),yc=V([Ae(8),Ge("initialized"),k("recentEpoch"),Jt("observationIndex"),K("poolId"),Y(Xp,100,"observations"),Y(k(),4)]),zp=V([W("rewardState"),k("openTime"),k("endTime"),k("lastUpdateTime"),ee("emissionsPerSecondX64"),k("rewardTotalEmissioned"),k("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),ee("rewardGrowthGlobalX64")]),_n=V([Ae(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Jt("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),tt("tickCurrent"),nt(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),k("protocolFeesTokenA"),k("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),W("status"),Y(W(),7,""),Y(zp,3,"rewardInfos"),Y(k(),16,"tickArrayBitmap"),k("totalFeesTokenA"),k("totalFeesClaimedTokenA"),k("totalFeesTokenB"),k("totalFeesClaimedTokenB"),k("fundFeesTokenA"),k("fundFeesTokenB"),k("startTime"),Y(k(),15*4-3,"padding")]),Qp=V([ee("growthInsideLastX64"),k("rewardAmountOwed")]),Zo=V([Ae(8),W("bump"),K("nftMint"),K("poolId"),tt("tickLower"),tt("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),Y(Qp,3,"rewardInfos"),Y(k(),8,"")]),VT=V([Ae(8),W("bump"),K("poolId"),tt("tickLowerIndex"),tt("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),Y(ee(),3,"rewardGrowthInside"),Y(k(),8,"")]),Yp=V([tt("tick"),Ku("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Y(ee(),3,"rewardGrowthsOutsideX64"),Y(nt(),13,"")]),jo=V([Ae(8),K("poolId"),tt("startTickIndex"),Y(Yp,Ze,"ticks"),W("initializedTickCount"),Y(W(),115,"")]),bc=V([Ae(329),Y(K(),100,"whitelistMints")]),pc=V([Ae(8),K("poolId"),Y(Y(k(),8),Es,"positiveTickArrayBitmap"),Y(Y(k(),8),Es,"negativeTickArrayBitmap")]),vT=V([k(),W("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Y(k(),8)]),ET=V([Ae(8),W("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),k("recentEpoch"),Y(k(),8)]);yc.span;var Ac=me("Raydium_Clmm"),Dt={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]},wc=[188,37,179,131,82,150,84,73],Pc=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y){let f=V([ee("sqrtPriceX64"),k("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let P=Buffer.from([...Dt.createPool,...g]);return new pt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:s,ammConfigId:r,initialPriceX64:a,startTime:c}=e,[u,l]=[new G(i.address),new G(s.address)],{publicKey:m}=ac(t,r,u,l),{publicKey:d}=cc(t,m),{publicKey:p}=Vs(t,m,u),{publicKey:y}=Vs(t,m,l),f=[this.createPoolInstruction(t,m,n,r,d,u,p,new G(i.programId||xe),l,y,new G(s.programId||xe),ot(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x){let R=V([tt("tickLowerIndex"),tt("tickUpperIndex"),tt("tickArrayLowerStartIndex"),tt("tickArrayUpperStartIndex"),ee("liquidity"),k("amountMaxA"),k("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),F=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...F],X=Buffer.alloc(R.span);R.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},X);let U=Buffer.from([...Dt.openPosition,...X]);return new pt({keys:O,programId:e,data:U})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:s,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new G(e.programId),new G(e.id)],y;if(l)y=new G((await l(1))[0]);else{let B=Ji.generate();m.push(B),y=B.publicKey}let f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(s,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:P}=de(d,p,b),{publicKey:A}=le(n.wallet,y,xe),{publicKey:h}=On(y),{publicKey:I}=dt(d,y),{publicKey:T}=Et(d,p,i,s),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,s,f,b,r,a,c,u);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:s,base:r,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new G(e.programId),new G(e.id)],y;if(l)y=new G((await l(1))[0]);else{let B=Ji.generate();m.push(B),y=B.publicKey}let f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(s,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:P}=de(d,p,b),{publicKey:A}=le(n.wallet,y,xe),{publicKey:h}=On(y),{publicKey:I}=dt(d,y),{publicKey:T}=Et(d,p,i,s),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,s,f,b,u,r,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x){let R=V([tt("tickLowerIndex"),tt("tickUpperIndex"),tt("tickArrayLowerStartIndex"),tt("tickArrayUpperStartIndex"),ee("liquidity"),k("amountMaxA"),k("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),F=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...F],X=Buffer.alloc(R.span);R.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new gc(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},X);let U=Buffer.from([...Dt.openPosition,...X]);return new pt({keys:O,programId:e,data:U})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:s,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new G((await l(1))[0]);else{let B=Ji.generate();d.push(B),m=B.publicKey}let[p,y]=[new G(e.programId),new G(e.id)],f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(s,e.config.tickSpacing),{publicKey:g}=de(p,y,f),{publicKey:P}=de(p,y,b),{publicKey:A}=le(n.wallet,m,xe),{publicKey:h}=On(m),{publicKey:I}=dt(p,m),{publicKey:T}=Et(p,y,i,s),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(t.mintA.address),new G(t.mintB.address),i,s,f,b,r,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,s){let r=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);r.encode({},c);let u=Buffer.from([...Dt.closePosition,...c]);return new pt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let s=new G(e.programId),{publicKey:r}=le(n.wallet,i.nftMint,xe),{publicKey:a}=dt(s,i.nftMint),c=[];return c.push(this.closePositionInstruction(s,n.wallet,i.nftMint,r,a)),{address:{positionNftAccount:r,personalPosition:a},signers:[],instructions:c,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P){let A=V([ee("liquidity"),k("amountMaxA"),k("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Dt.increaseLiquidity,...T]);return new pt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:s,amountMaxA:r,amountMaxB:a}){let[c,u]=[new G(e.programId),new G(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=dt(c,n.nftMint),{publicKey:b}=Et(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),s,r,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:s,baseAmount:r,otherAmountMax:a}){let[c,u]=[new G(e.programId),new G(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=dt(c,n.nftMint),{publicKey:b}=Et(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),s,r,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P){let A=V([ee("liquidity"),k("amountMaxA"),k("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(A.span);A.encode({liquidity:new gc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Dt.increaseLiquidity,...T]);return new pt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P,A){let h=V([ee("liquidity"),k("amountMinA"),k("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:P},S);let B=Buffer.from([...Dt.decreaseLiquidity,...S]);return new pt({keys:T,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:s,amountMinA:r,amountMinB:a,programId:c}){let[u,l]=[new G(e.programId),new G(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=le(i.wallet,n.nftMint,c),{publicKey:b}=dt(u,n.nftMint),{publicKey:g}=Et(u,l,n.tickLower,n.tickUpper),P=[];for(let I=0;I<e.rewardDefaultInfos.length;I++)P.push({poolRewardVault:new G(t.rewardInfos[I].vault),ownerRewardVault:i.rewardAccounts[I],rewardMint:new G(e.rewardDefaultInfos[I].mint.address)});let A=[],h=this.decreaseLiquidityInstruction(u,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),P,s,r,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0);return A.push(h),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g){let P=V([k("amount"),k("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Ge("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Dt.swap,...I]);return new pt({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:s,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new G(e.programId),new G(e.id)],[d,p]=[new G(t.vault.A),new G(t.vault.B)],[y,f]=[new G(e.mintA.address),new G(e.mintB.address)],b=e.mintA.address===s.toString(),g=[this.swapInstruction(l,i.wallet,m,new G(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,r,a,c,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:s,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new G(e.programId),new G(e.id)],[d,p]=[new G(t.vault.A),new G(t.vault.B)],[y,f]=[new G(e.mintA.address),new G(e.mintB.address)],b=e.mintA.address===s.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new G(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,r,a,c,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,s,r,a,c,u,l,m,d){let p=V([k("openTime"),k("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Dt.initReward,...f]);return new pt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[s,r]=[new G(e.programId),new G(e.id)],a=uc(s,r,i.mint).publicKey,c=zo(s).publicKey,u=[this.initRewardInstruction(s,n.wallet,r,c,new G(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,s,r,a,c,u,l,m,d){let p=V([W("rewardIndex"),ee("emissionsPerSecondX64"),k("openTime"),k("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Dt.setRewardEmissions,...f]);return new pt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[s,r]=[new G(e.programId),new G(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new G(t.rewardInfos[d].vault),u=new G(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=zo(s).publicKey,m=[this.setRewardInstruction(s,n.wallet,r,l,new G(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,s,r,a){let c=V([W("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Dt.collectReward,...l]);return new pt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[s,r]=[new G(e.programId),new G(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new G(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(s,n.wallet,r,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:s,nftMint:r,getEphemeralSigners:a}){let c=[],u;if(a)u=new G((await a(1))[0]);else{let b=Ji.generate();c.push(b),u=b.publicKey}let{publicKey:l}=le(s,r,xe),{publicKey:m}=dt(n,r),d=Qo(e,u).publicKey,p=le(s,u,xe).publicKey,y=On(u).publicKey,f=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:s,lockOwner:s,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:u,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:u,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:c,instructionTypes:[E.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:s,positionNftAccount:r,positionId:a,lockPositionId:c,lockNftMint:u,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1}],y=V([Ge("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...wc,...f]);return new pt({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:s}){let{publicKey:r}=le(i,s,xe),{publicKey:a}=dt(n,s),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:vs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1}];return new pt({keys:c,programId:e,data:Buffer.from(wc)})}static harvestLockPositionInstruction(e){let[t,n]=[new G(e.poolKeys.programId),new G(e.poolKeys.id)],i=j.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),s=j.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=de(t,n,i),{publicKey:a}=de(t,n,s),{publicKey:c}=le(e.owner,e.ownerPosition.nftMint,xe),{publicKey:u}=dt(t,e.ownerPosition.nftMint),{publicKey:l}=Et(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new G(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new G(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:vs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new G(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new G(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new pt({keys:p,programId:e.programId,data:Buffer.from(Pc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:s,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:P,mintB:A,rewardAccounts:h,exTickArrayBitmap:I}){let T=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[],...h.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},...T];return new pt({keys:S,programId:e,data:Buffer.from(Pc)})}};var eI=V([nt("mintAuthorityOption"),K("mintAuthority"),k("supply"),W("decimals"),W("isInitialized"),nt("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as jp}from"@solana/web3.js";import{MintLayout as kc,TOKEN_PROGRAM_ID as Hp}from"@solana/spl-token";var lI=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new jp(e));return!t||t.data.length!==kc.span?void 0:kc.decode(t.data)},mI=({mint:o,decimals:e,programId:t=Hp,logoURI:n="",priority:i=3})=>{let s=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:s,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:s,tags:[],priority:i}},er=o=>new we({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),$o=i=>{var s=i,{amount:o,isRaw:e,name:t}=s,n=ve(s,["amount","isRaw","name"]);return new be(new we({mint:ht(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function dI(o){return o.address===Xt.address?Ye:o}function pI(o){return o.address===Ye.address?Xt:o}var ut=i=>{var s=i,{address:o,programId:e,decimals:t}=s,n=ve(s,["address","programId","decimals"]);return L({chainId:101,address:ht(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},kn=o=>o?D(L({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:D(L({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:D(L({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import hc from"bn.js";var qs=new hc(25),tr=new hc(1e4),Zp={4:3,5:3};import{PublicKey as he,SystemProgram as Rc,SYSVAR_RENT_PUBKEY as df,TransactionInstruction as sn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pf,TOKEN_PROGRAM_ID as ao}from"@solana/spl-token";var Us=V([W("instruction"),k("amountIn"),k("minAmountOut")]),Gs=V([W("instruction"),k("maxAmountIn"),k("amountOut")]),II=V([W("instruction"),W("nonce")]),Xs=V([W("instruction"),W("nonce"),k("startTime")]),Jo=V([k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalValue"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),k("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),k("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"),k("lpReserve"),Y(k(),3,"padding")]),$p=V([k("accountType"),k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalsValue"),k("abortTradeFactor"),k("priceTickMultiplier"),k("priceTick"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),k("swapQuote2BaseFee"),k("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Y(k(),64,"padding")]),zs=V([W("instruction"),k("baseAmountIn"),k("quoteAmountIn"),k("fixedSide"),k("otherAmountMin")]),Qs=V([W("instruction"),k("lpAmount"),k("baseAmountMin"),k("quoteAmountMin")]),BI={4:Jo,5:$p},Tc=V([k("fee")]);import{PublicKey as Jp}from"@solana/web3.js";var so=new Jp("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Fn=5e4,ef=V([k("x"),k("y"),k("price")]),tf=V([k("accountType"),k("status"),k("multiplier"),k("validDataCount"),Y(ef,Fn,"DataElement")]);function nf(o,e){return[0,Fn-2]}function of(o){return[0,Fn-2]}function rf(o){return[0,Fn-2]}function sf(o,e,t){let[n,i]=nf(e,t),s=n,r=i,a=0,c=e*o.multiplier/t;for(;s<=r;){if(a=Math.floor((r+s)/2),a===0||a>=Fn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)r=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];s=a+1}}return[a,a,!1]}function Ys(o,e,t){let[n,i,s]=sf(o,e,t);if(!s)return 0;if(n===i){let r=o.DataElement[n].x;return e*o.multiplier/r}else{let r=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[i].x,u=o.DataElement[i].y,l=t*(c*a-r*u),m=r*l,d=(c-r)*(e*a-r*t)*u,p=m+d;return e*o.multiplier*l/p}}function En(o,e,t){return e*o.multiplier/t}function Ic(o,e,t){return e*t/o.multiplier}function af(o,e){let[t,n]=of(e),i=t,s=n,r=0,a=e;for(;i<s;){if(r=Math.floor((s+i)/2),r<=0||r>Fn-2)return[r,r,!1];let c=o.DataElement[r].x,u=o.DataElement[r-1].x,l=o.DataElement[r+1].x;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<u)s=r-1;else{if(a>u&&a<c)return[r-1,r,!0];if(a>c&&a<l)return[r,r+1,!0];i=r+1}}return[r,r,!1]}function uf(o,e){let[t,n]=rf(e),i=t,s=n,r=0,a=e;for(;i<=s;){if(r=Math.floor((s+i)/2),r<=0||r>=Fn-2)return[r,r,!1];let c=o.DataElement[r].y,u=o.DataElement[r-1].y,l=o.DataElement[r+1].y;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<l)i=r+1;else{if(a<u&&a>c)return[r-1,r,!0];if(a<c&&a>l)return[r,r+1,!0];s=r-1}}return[r,r,!1]}function Bc(o,e,t,n){let i=n?e+t:e-t,[s,r,a]=af(o,i);if(!a)return[0,0,!1,a];if(s===r)return[o.DataElement[r].price,o.DataElement[r].y,!1,a];{let c=o.DataElement[s].x,u=o.DataElement[r].x,l=o.DataElement[s].price,m=o.DataElement[r].price,d=o.DataElement[s].y,p=o.DataElement[r].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(i-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-i)*o.multiplier/l),[y,f,!1,a]}}}function cf(o,e,t,n){let i=n?e-t:e+t,[s,r,a]=uf(o,i);if(!a)return[0,0,!1,a];if(s===r)return[o.DataElement[r].price,o.DataElement[r].x,!1,a];{let c=o.DataElement[s].x,u=o.DataElement[r].x,l=o.DataElement[s].price,m=o.DataElement[r].price,d=o.DataElement[s].y,p=o.DataElement[r].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function lf(o,e){let t=Bc(o,e,0,!1);return t[3]?t[0]:0}function xc(o,e,t,n){let i=Ys(o,e,t),s=En(o,e,i),r=En(o,t,i),a=En(o,n,i),c=!0,[u,l,m,d]=Bc(o,s,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=r-l;return Ic(o,p,i)}}function Sc(o,e,t,n){let i=Ys(o,e,t),s=En(o,e,i),r=En(o,t,i),a=En(o,n,i),c=!1,[u,l,m,d]=cf(o,r,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=s-l;return Ic(o,p,i)}}function mf(o){let e=tf.decode(o);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 Kc(o,e,t,n){let i=lf(o,En(o,e,Ys(o,e,t)))/o.multiplier;return n?i:1/i}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(so);e&&(this._layoutData=mf(e==null?void 0:e.data))}}};var Cc=me("Raydium_liquidity_instruction");function Lc(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:s,fixedSide:r,otherAmountMin:a}=o,c=Buffer.alloc(zs.span);zs.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(s),otherAmountMin:Z(a),fixedSide:r==="base"?Fe:za},c);let u=[w({pubkey:ao,isWritable:!1}),w({pubkey:new he(e.id)}),w({pubkey:new he(t.authority),isWritable:!1}),w({pubkey:new he(t.openOrders),isWritable:!1}),w({pubkey:new he(t.targetOrders)}),w({pubkey:new he(e.lpMint.address)}),w({pubkey:new he(t.vault.A)}),w({pubkey:new he(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(w({pubkey:so})),u.push(w({pubkey:new he(e.marketId),isWritable:!1}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:new he(t.marketEventQueue),isWritable:!1})),new sn({programId:new he(e.programId),keys:u,data:c})}function js(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:s,quoteAmountMin:r}=o,a=Ie(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(Qs.span);Qs.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(s),quoteAmountMin:Z(r)},u);let l=[w({pubkey:ao,isWritable:!1}),w({pubkey:a.id}),w({pubkey:a.authority,isWritable:!1}),w({pubkey:a.openOrders}),w({pubkey:a.targetOrders}),w({pubkey:a.mintLp.address}),w({pubkey:a.vault.A}),w({pubkey:a.vault.B})];return c===5?l.push(w({pubkey:so})):(l.push(w({pubkey:a.id})),l.push(w({pubkey:a.id}))),l.push(w({pubkey:a.marketProgramId,isWritable:!1}),w({pubkey:a.marketId}),w({pubkey:a.marketBaseVault}),w({pubkey:a.marketQuoteVault}),w({pubkey:a.marketAuthority,isWritable:!1}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:a.marketEventQueue}),w({pubkey:a.marketBids}),w({pubkey:a.marketAsks})),new sn({programId:a.programId,keys:l,data:u})}return new sn({programId:a.programId,keys:[]})}function Hs({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:s,pcMint:r,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:h,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let B=V([W("instruction"),W("nonce"),k("openTime"),k("pcAmount"),k("coinAmount")]),C=[{pubkey:ao,isSigner:!1,isWritable:!1},{pubkey:pf,isSigner:!1,isWritable:!1},{pubkey:Rc.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:P,openTime:A,coinAmount:h,pcAmount:I},x),{instruction:new sn({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function WI(o){let e=V([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new he(o.id),isWritable:!1}),w({pubkey:new he(o.authority),isWritable:!1}),w({pubkey:new he(o.openOrders),isWritable:!1}),w({pubkey:new he(o.vault.A),isWritable:!1}),w({pubkey:new he(o.vault.B),isWritable:!1}),w({pubkey:new he(o.mintLp.address),isWritable:!1}),w({pubkey:new he(o.marketId),isWritable:!1}),w({pubkey:new he(o.marketEventQueue),isWritable:!1})];return new sn({programId:new he(o.programId),keys:n,data:t})}function ff({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let s=Ie(o),r=Buffer.alloc(Us.span);Us.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},r);let a=[w({pubkey:ao,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders})];return i===4&&a.push(w({pubkey:s.targetOrders})),a.push(w({pubkey:s.vault.A}),w({pubkey:s.vault.B})),i===5&&a.push(w({pubkey:so})),a.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1})),new sn({programId:s.programId,keys:a,data:r})}function yf({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let s=Ie(o),r=Buffer.alloc(Gs.span);Gs.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},r);let a=[w({pubkey:ao,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders}),w({pubkey:s.targetOrders}),w({pubkey:s.vault.A}),w({pubkey:s.vault.B})];return i===5&&a.push(w({pubkey:so})),a.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new sn({programId:s.programId,keys:a,data:r})}function nr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:s,fixedSide:r}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return ff(D(L({},a),{amountIn:i,minAmountOut:s}),t);if(r==="out")return yf(D(L({},a),{maxAmountIn:i,amountOut:s}),t);Cc.logWithError("invalid params","params",o)}throw Cc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function qI({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Xs.span);Xs.encode({instruction:0,nonce:5,startTime:Z(t)},n);let i=Ie(o),s=[w({pubkey:ao,isWritable:!1}),w({pubkey:Rc.programId,isWritable:!1}),w({pubkey:df,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.openOrders}),w({pubkey:i.mintLp.address}),w({pubkey:i.mintA.address,isWritable:!1}),w({pubkey:i.mintB.address,isWritable:!1}),w({pubkey:i.vault.A,isWritable:!1}),w({pubkey:i.vault.B,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.targetOrders}),w({pubkey:e.lpTokenAccount}),w({pubkey:i.id,isWritable:!1}),w({pubkey:i.marketProgramId,isWritable:!1}),w({pubkey:i.marketId,isWritable:!1}),w({pubkey:e.payer,isSigner:!0})];return new sn({programId:i.programId,keys:s,data:n})}function Oc({poolKeys:o}){let e=V([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new he(o.id),isWritable:!1}),w({pubkey:new he(o.authority),isWritable:!1}),w({pubkey:new he(o.openOrders),isWritable:!1}),w({pubkey:new he(o.vault.A),isWritable:!1}),w({pubkey:new he(o.vault.B),isWritable:!1}),w({pubkey:new he(o.mintLp.address),isWritable:!1}),w({pubkey:new he(o.marketId),isWritable:!1}),w({pubkey:new he(o.marketEventQueue),isWritable:!1})];return{instruction:new sn({programId:new he(o.programId),keys:n,data:t})}}import{PublicKey as Af}from"@solana/web3.js";import ei from"bn.js";import{TOKEN_PROGRAM_ID as wf}from"@solana/spl-token";import{PublicKey as bf}from"@solana/web3.js";var gf=me("Raydium_liquidity_serum");function Mc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let s=t.concat(Buffer.from([n]),Buffer.alloc(7));i=bf.createProgramAddressSync(s,o)}catch(s){if(s instanceof TypeError)throw s;n++;continue}return{publicKey:i,nonce:n}}throw gf.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function or({programId:o}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Dn({name:o,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Pf({programId:o,marketId:e}){let{publicKey:t}=ae([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Js({programId:o}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function ea({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:s,quoteDecimals:r,programId:a,marketProgramId:c}){let u=Dn({name:"amm_associated_seed",programId:a,marketId:t}),l=Dn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Js({programId:a}),p=Dn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Dn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Dn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Pf({programId:a,marketId:t}),g=Dn({name:"target_associated_seed",programId:a,marketId:t}),P=Dn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Mc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:s,quoteDecimals:r,lpDecimals:s,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Af.default,configId:or({programId:a})}}var Zs;async function iB({connection:o,poolKeysList:e,config:t}){Zs||(Zs=new ro({connection:o}),await Zs.initStableModelLayout());let n=e.map(r=>Oc({poolKeys:r}));return(await nu(o,n.map(r=>r.instruction),"GetPoolData")).map(r=>{let a=ou(r,"GetPoolData"),c=new ei($t(a,"status")),u=Number($t(a,"coin_decimals")),l=Number($t(a,"pc_decimals")),m=Number($t(a,"lp_decimals")),d=new ei($t(a,"pool_coin_amount")),p=new ei($t(a,"pool_pc_amount")),y=new ei($t(a,"pool_lp_supply")),f="0";try{f=$t(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new ei(f)}})}var $s={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},ir=o=>{let e={},t=wf.toBase58();return Object.keys(o).map(n=>{let i=o[n],[s,r]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:ut({address:s,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:ut({address:r,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new M(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new M(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:$s,week:$s,month:$s,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:or({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:ut({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Ce from"bn.js";import{PublicKey as ti}from"@solana/web3.js";import ni from"bn.js";import{TOKEN_PROGRAM_ID as vc}from"@solana/spl-token";import{SystemProgram as Wn,SYSVAR_RENT_PUBKEY as hf,Transaction as Nc,TransactionInstruction as Tf}from"@solana/web3.js";import{createInitializeAccountInstruction as _c,TOKEN_PROGRAM_ID as Vc}from"@solana/spl-token";function kf(o="accountFlags"){let e=new Xi(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ta=V([Ae(5),kf("accountFlags"),K("ownAddress"),k("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),K("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),Ae(7)]);function If({programId:o,marketInfo:e}){let t=V([W("version"),nt("instruction"),k("baseLotSize"),k("quoteLotSize"),Jt("feeRateBps"),k("vaultSignerNonce"),k("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:hf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),i=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},i),new Tf({keys:n,programId:o,data:i})}async function rr({connection:o,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new Nc,i=await o.getMinimumBalanceForRentExemption(165);n.add(Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Vc}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Vc}),_c(t.baseVault.publicKey,t.baseMint,t.vaultOwner),_c(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ta.span),space:ta.span,programId:t.programId}));let s=new Nc;return s.add(Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await o.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),If({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:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:s,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var uo=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:s,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,f=Oe({fromPublicKey:p,programId:s,assignSeed:y&&`${y}-market`}),b=Oe({fromPublicKey:p,programId:s,assignSeed:y&&`${y}-request`}),g=Oe({fromPublicKey:p,programId:s,assignSeed:y&&`${y}-event`}),P=Oe({fromPublicKey:p,programId:s,assignSeed:y&&`${y}-bids`}),A=Oe({fromPublicKey:p,programId:s,assignSeed:y&&`${y}-asks`}),h=Oe({fromPublicKey:p,programId:vc,assignSeed:y&&`${y}-baseVault`}),I=Oe({fromPublicKey:p,programId:vc,assignSeed:y&&`${y}-quoteVault`}),T=0,S=new ni(100);function B(){let U=new ni(0);for(;;)try{return{vaultOwner:ti.createProgramAddressSync([f.publicKey.toBuffer(),U.toArrayLike(Buffer,"le",8)],s),vaultSignerNonce:U}}catch{if(U.iaddn(1),U.gt(new ni(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=B(),R=new ni(Math.round(10**e.decimals*n)),F=new ni(Math.round(n*10**t.decimals*i));if(R.eq(Fe))throw Error("lot size is too small");if(F.eq(Fe))throw Error("tick size or lot size is too small");let O=await rr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:s,id:f,baseMint:e.mint,quoteMint:t.mint,baseVault:h,quoteVault:I,vaultOwner:C,requestQueue:b,eventQueue:g,bids:P,asks:A,feeRateBps:T,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:R,quoteLotSize:F,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),X=this.createTxBuilder();X.addInstruction({instructions:O[0].transaction.instructions,signers:O[0].signer});for await(let U of O.slice(1,O.length))X.addInstruction({instructions:U.transaction.instructions,signers:U.signer,instructionTypes:U.instructionTypes});return m===0?X.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:P.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:I.publicKey,baseMint:new ti(e.mint),quoteMin:new ti(t.mint)}}):X.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:P.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:I.publicKey,baseMint:new ti(e.mint),quoteMin:new ti(t.mint)}})}};var oi=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:i,baseIn:s}){let r=new Ce(new M(n).mul(10**t[s?"mintA":"mintB"].decimals).toFixed(0)),a=er(t[s?"mintB":"mintA"]),[c,u]=[new Ce(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ce(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ce(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",s?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",s?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=s?"base":"quote";this.logDebug("input side:",m);let d=Fe;r.isZero()||(d=m==="base"?Ki(r.mul(u),c):Ki(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ki(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new Le(new Ce(1)).add(i),f=new Le(new Ce(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,P=new be(a,d),A=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",A.toFixed()),{anotherAmount:P,maxAnotherAmount:A,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:s,amountInB:r,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",s,"amountInB:",r),(s.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:s.toFixed(),amountInB:r.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[s.token,r.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),P=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!P&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let A=await d.getCreatedTokenAccount({mint:new qe(n.lpMint.address)}),h=[f,b],I=[g,P],T=[s.raw,r.raw],S=s.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),I.reverse(),T.reverse(),B=c==="a"?"quote":"base"):S==="base"&&(B=c==="a"?"base":"quote");let[C,x]=h,[R,F]=I,[O,X]=T,U=i!=null?i:await this.getAmmPoolKeys(n.id),q=this.createTxBuilder(),bt=await d.handleTokenAccount({side:"in",amount:O,mint:C.mint,tokenAccount:R,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Re}=bt,qt=ve(bt,["tokenAccount"]);q.addInstruction(qt);let Bt=await d.handleTokenAccount({side:"in",amount:X,mint:x.mint,tokenAccount:F,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Ve}=Bt,ft=ve(Bt,["tokenAccount"]);q.addInstruction(ft);let In=await d.handleTokenAccount({side:"out",amount:0,mint:new qe(n.lpMint.address),tokenAccount:A,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:yt}=In,kt=ve(In,["tokenAccount"]);return q.addInstruction(kt),q.addInstruction({instructions:[Lc({poolInfo:n,poolKeys:U,userKeys:{baseTokenAccount:Re,quoteTokenAccount:Ve,lpTokenAccount:yt,owner:this.scope.ownerPubKey},baseAmountIn:O,quoteAmountIn:X,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),q.addCustomComputeBudget(m),l===0&&await q.buildV0(),q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:s,baseAmountMin:r,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new qe(n.mintA.address),new qe(n.mintB.address),new qe(n.lpMint.address)];this.logDebug("lpAmount:",s),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),s.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",s.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),P=await f.getCreatedTokenAccount({mint:p}),A=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:I}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:T}=x,S=ve(x,["tokenAccount"]);A.addInstruction(S);let R=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:P,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:B}=R,C=ve(R,["tokenAccount"]);return A.addInstruction(C),A.addInstruction({instructions:[js({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:s,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),A.addCustomComputeBudget(l),u===0?await A.buildV0():A.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:s,farmInfo:r,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=hn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||le(this.scope.ownerPubKey,q.accountInfo.mint,hn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let P=g[t.lpMint.address];if(P===void 0)throw Error("find lp account error in trade accounts");let A=i.add(a!=null?a:new Ce(0)),h=t.mintA.address===we.WSOL.mint.toString(),I=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=B,r!==void 0&&!(a!=null&&a.isZero())){let q=xt[r.programId],Re=st({programId:new qe(r.programId),poolId:new qe(r.id),owner:this.scope.ownerPubKey,version:q}),qt,Ve=await this.scope.connection.getAccountInfo(Re);if(Ve&&(qt=oo(q).decode(Ve.data)),q!==6&&!qt){let{instruction:Ut,instructionType:zn}=Fo({id:new qe(r.id),programId:new qe(r.programId),version:q,ledger:Re,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Ut],instructionTypes:[zn]})}let ft=[];for(let Ut of r.rewardInfos){let zn=Ut.mint.address===we.WSOL.mint.toString();if(g[Ut.mint.address])ft.push(g[Ut.mint.address]);else{let{account:pi,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({mint:new qe(Ut.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!zn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});pi||this.logAndCreateError("farm reward account not found:",Ut.mint.address),Xe&&b.addInstruction(Xe),ft.push(pi)}}let yt=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],kt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:yt,lpAccount:P,rewardAccounts:ft},bt=xt[r.programId],Bt=bt===6?Do(kt):bt===5?Wo(kt):qo(kt),In={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[Bt],instructionTypes:[In[bt]]})}let x=await this.getAmmPoolKeys(t.id),R=js({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:P,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:A,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[F,O]=t.mintA.address===n.mintA.address?[T,B]:[B,T],X=await this.scope.clmm.getClmmPoolKeys(n.id),U=await ke.openPositionFromBaseInstructions(D(L({poolInfo:n,poolKeys:X,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:F,tokenAccountB:O},withMetadata:"create"},s),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...U.instructions],signers:U.signers,instructionTypes:[...U.instructionTypes],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:s,baseAmount:r,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var F;let b=u.feePayer||((F=this.scope.owner)==null?void 0:F.publicKey),g=u.useSOLBalance&&i.mint.equals(sr),P=u.useSOLBalance&&s.mint.equals(sr),A=this.createTxBuilder(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:r}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let B=ea({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:s.mint,baseDecimals:i.decimals,quoteDecimals:s.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:R}=Hs(D(L({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:le(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:r,pcAmount:a}));return A.addInstruction({instructions:[x],instructionTypes:[R]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ko,marketProgram:n=Hr,feeDestinationId:i=au,tokenProgram:s,baseMintInfo:r,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:y=!1,checkCreateATAOwner:f=!1,lotSize:b=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:A}){var ga;let h=this.scope.ownerPubKey,I=m.feePayer||((ga=this.scope.owner)==null?void 0:ga.publicKey),T=m.useSOLBalance&&r.mint.equals(sr),S=m.useSOLBalance&&a.mint.equals(sr),B=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-market`}),x=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-request`}),R=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-event`}),F=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-bids`}),O=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-asks`}),X=Oe({fromPublicKey:h,programId:hn,assignSeed:B&&`${B}-baseVault`}),U=Oe({fromPublicKey:h,programId:hn,assignSeed:B&&`${B}-quoteVault`}),q=0,Re=new Ce(100);function qt(){let un=new Ce(0);for(;;)try{return{vaultOwner:qe.createProgramAddressSync([C.publicKey.toBuffer(),un.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:un}}catch{if(un.iaddn(1),un.gt(new Ce(25555)))throw Error("find vault owner error")}}let{vaultOwner:Ve,vaultSignerNonce:ft}=qt(),yt=new Ce(Math.round(10**r.decimals*b)),kt=new Ce(Math.round(b*10**a.decimals*g));if(yt.eq(Fe))throw Error("lot size is too small");if(kt.eq(Fe))throw Error("tick size or lot size is too small");let bt=await rr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Ve,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:X,quoteVault:U,requestQueue:x,eventQueue:R,bids:F,asks:O,feeRateBps:q,quoteDustThreshold:Re,vaultSignerNonce:ft,baseLotSize:yt,quoteLotSize:kt,lowestFeeMarket:d}}),Bt=this.createTxBuilder();Bt.addInstruction({instructions:bt[0].transaction.instructions,signers:bt[0].signer});for await(let un of bt.slice(1,bt.length))Bt.addInstruction({instructions:un.transaction.instructions,signers:un.signer,instructionTypes:un.instructionTypes});let{account:In,instructionParams:Ut}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:I,amount:c}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:y,checkCreateATAOwner:f});Bt.addInstruction(Ut||{});let{account:zn,instructionParams:pi}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:I,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:y,checkCreateATAOwner:f});if(Bt.addInstruction(pi||{}),In===void 0)throw Error("you don't has base token account");if(zn===void 0)throw Error("you don't has quote token account");let Xe=ea({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Tr={programId:t,ammId:Xe.id,ammAuthority:Xe.authority,ammOpenOrders:Xe.openOrders,lpMint:Xe.lpMint,coinMint:Xe.baseMint,pcMint:Xe.quoteMint,coinVault:Xe.baseVault,pcVault:Xe.quoteVault,withdrawQueue:Xe.withdrawQueue,ammTargetOrders:Xe.targetOrders,poolTempLp:Xe.lpVault,marketProgramId:Xe.marketProgramId,marketId:Xe.marketId,ammConfigId:Xe.configId,feeDestinationId:i},{instruction:sl,instructionType:al}=Hs(D(L({},Tr),{userWallet:this.scope.ownerPubKey,userCoinVault:In,userPcVault:zn,userLpVault:le(this.scope.ownerPubKey,Xe.lpMint,s).publicKey,nonce:Xe.nonce,openTime:l,coinAmount:c,pcAmount:u}));return Bt.addInstruction({instructions:[sl],instructionTypes:[al]}),P===0?Bt.sizeCheckBuildV0({computeBudgetConfig:A,address:L({requestQueue:x.publicKey,eventQueue:R.publicKey,bids:F.publicKey,asks:O.publicKey,baseVault:X.publicKey,quoteVault:U.publicKey,baseMint:new qe(r.mint),quoteMin:new qe(a.mint)},Tr)}):Bt.sizeCheckBuild({computeBudgetConfig:A,address:L({requestQueue:x.publicKey,eventQueue:R.publicKey,bids:F.publicKey,asks:O.publicKey,baseVault:X.publicKey,quoteVault:U.publicKey,baseMint:new qe(r.mint),quoteMin:new qe(a.mint)},Tr)})}async getCreatePoolFee({programId:t}){let n=or({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Tc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:s,slippage:r}){let[a,c]=[i.toString(),s.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,P=t.version===4,A;if(P)A=new M(f.toString()).div(10**g).div(new M(y.toString()).div(10**b));else{let O=Kc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new M(1e6).div(O*1e6):A=new M(O*1e6).div(1e6)}let h=n,I=new Ce(0),T=new Ce(0);if(!h.isZero())if(P){T=_t(h.mul(qs),tr);let O=h.sub(T),X=y.add(O);I=f.mul(O).div(X)}else{T=h.mul(new Ce(2)).div(new Ce(1e4));let O=h.sub(T);p==="quote"?I=new Ce(xc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber())):I=new Ce(Sc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber()))}let S=new Ce(new M(I.toString()).mul(1-r).toFixed(0)),B=I,C=S,x=new M(I.toString()).div(new M(h.sub(T).toString()).toFixed(0));!h.isZero()&&!I.isZero()&&(x=new M(I.toString()).div(10**g).div(new M(h.sub(T).toString()).div(10**b)));let R=A.sub(x).div(A).mul(100);return{amountOut:B,minAmountOut:C,currentPrice:A,executionPrice:x,priceImpact:R,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:s,slippage:r}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),s.toString()!==t.mintA.address&&s.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${r*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new M(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ce(0),P=n;if(!P.isZero()){P.gt(f)&&(P=f.sub(new Ce(1)));let C=f.sub(P);g=y.mul(P).div(C).mul(tr).div(tr.sub(qs))}let A=new Ce(new M(g.toString()).mul(1+r).toFixed(0)),h=g,I=A;this.logDebug("amountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!P.isZero()&&(T=new M(P.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),B=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:h,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:s,inputMint:r,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),P=y&&b.address===H.toBase58(),{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:P,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),m.addInstruction({instructions:[nr({version:B,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:i,amountOut:s,fixedSide:a})],instructionTypes:[B===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await ze(this.scope.connection,t.map(l=>({pubkey:new qe(l)})),n),s={},r=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Jo.decode(m.accountInfo.data);s[String(t[l])]=D(L({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await ze(this.scope.connection,r.map(l=>({pubkey:new qe(l)})),n);for(let l=0;l<r.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);a[String(r[l])]=new Ce(Bf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(s)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=D(L({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=ir({[t]:n}),s=i[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:s,poolKeys:r[0]}}};import{PublicKey as Q}from"@solana/web3.js";import Pt from"bn.js";import{AccountLayout as Ec,TOKEN_PROGRAM_ID as ii}from"@solana/spl-token";var ri=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||Q.default,mint1:i,mint2:s,ammConfig:r,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new Pt(new Q(i.address).toBuffer()).gt(new Pt(new Q(s.address).toBuffer()))?[s,i,new M(1).div(a)]:[i,s,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),P=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:r.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(P),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:D(L({},P.address),{programId:t.toString(),id:P.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:P.address.mintAVault.toString(),B:P.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:L({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:P.address.poolId.toString(),mintA:y,mintB:f,feeRate:r.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},nc),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:s,base:r,baseAmount:a,otherAmountMax:c,associatedOnly:u=!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,P=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[h,I]=r==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!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 x=t||await this.getClmmPoolKeys(e.id),R=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:D(L({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:s,base:r,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L({},R.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:s,tickLower:r,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,P=n.useSOLBalance&&e.mintA.address===H.toBase58(),A=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});h&&(b=h),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:s,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:s,amountMaxB:r,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});P&&(y=P),p.addInstruction(A||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(I||{}),!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=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:s,amountMaxB:r});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:s,otherAmountMax:r,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:s,otherAmountMax:r});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:s,amountMinA:r,amountMinB:a,liquidity:c,associatedOnly:u=!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=s.useSOLBalance&&t.mintA.address===H.toString(),f=s.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=P,A&&p.addInstruction(A);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=h,I&&p.addInstruction(I);let T=[];for(let x of t.rewardDefaultInfos){let R=s.useSOLBalance&&x.mint.address===H.toString(),F;if(x.mint.address===t.mintA.address)F=b;else if(x.mint.address===t.mintB.address)F=g;else{let{account:O,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});F=O,X&&p.addInstruction(X)}T.push(F)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:r,amountMinB:a});p.addInstruction({instructions:B.instructions,instructionTypes:[E.ClmmDecreasePosition]});let C=L({},B.address);if(s.closePosition){let x=await ke.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=L(L({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=$n,authProgramId:n=ho,poolProgramId:i=yn,ownerPosition:s,payer:r,computeBudgetConfig:a,txVersion:c}=e,u=this.createTxBuilder(),l=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:s.nftMint});return u.addInstruction(l),u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=$n,authProgramId:n=ho,clmmProgram:i=yn,poolKeys:s,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=s||await this.getClmmPoolKeys(r.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(r.positionId);y||this.logger.logWithError("position not found",r.positionId);let f=Zo.decode(y.data),b=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),P,A,{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P=h,I&&p.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});A=T,S&&p.addInstruction(S);let B={},C=[];for(let Ve of d.rewardInfos){let ft=a.useSOLBalance&&Ve.mint.address===H.toString(),yt=B[Ve.mint.address];if(!yt){let{account:kt,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Ve.mint.programId),mint:new Q(Ve.mint.address),notUseTokenAccount:ft,owner:this.scope.ownerPubKey,skipCloseAccount:!ft,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ft?!1:c});yt=kt,bt&&p.addInstruction(bt)}B[Ve.mint.address]=yt,C.push(yt)}let x=Qo(t,r.lockNftMint).publicKey,R=le(this.scope.ownerPubKey,r.lockNftMint,ii).publicKey,F=j.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),O=j.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:X}=de(new Q(d.programId),r.poolId,F),{publicKey:U}=de(new Q(d.programId),r.poolId,O),{publicKey:q}=Et(new Q(d.programId),r.poolId,f.tickLower,f.tickUpper),Re=[];for(let Ve=0;Ve<d.rewardInfos.length;Ve++)Re.push({poolRewardVault:new Q(d.rewardInfos[Ve].vault),ownerRewardVault:C[Ve],rewardMint:new Q(d.rewardInfos[Ve].mint.address)});let qt=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:R,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:q,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:X,tickArrayUpper:U,userVaultA:P,userVaultB:A,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Re,exTickArrayBitmap:ot(i,r.poolId).publicKey});return p.addInstruction({instructions:[qt],instructionTypes:[E.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let s=this.createTxBuilder(),r=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:r,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return s.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:r,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:s});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(r),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:s=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:s,checkCreateATAOwner:r});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});l=L(L({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:r,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:s});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(r),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:s=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:s,checkCreateATAOwner:r});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});u.addInstruction(b),l=L(L({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:s=!1}){let r=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());r||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(r.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:s});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:s=!1}){let r=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:s});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&r.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});r.addInstruction(y),a=L(L({},a),y.address)}return r.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:s,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),P;!r||r.equals(new M(0))?P=f?Kt.add(new Pt(1)):Ct.sub(new Pt(1)):P=te.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},inputMint:new Q(n),amountIn:i,amountOutMin:s,sqrtPriceLimitX64:P,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:s,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),P;!r||r.equals(new M(0))?P=n.toString()===e.mintB.address?Kt.add(new Pt(1)):Ct.sub(new Pt(1)):P=te.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?s:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:s}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},outputMint:new Q(n),amountOut:i,amountInMax:s,sqrtPriceLimitX64:P,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:s=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)s?le(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(T=>!T.liquidity.isZero()||T.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===H.toString(),b=i.useSOLBalance&&y.mintB.address===H.toString(),g=l[y.mintA.address];if(!g){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new Q(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:s,checkCreateATAOwner:r});g=T,S&&m.addInstruction(S)}let P=l[y.mintB.address];if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new Q(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:s,checkCreateATAOwner:r});P=T,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=P;let A=[];for(let T of y.rewardDefaultInfos){let S=i.useSOLBalance&&T.mint.address===H.toString(),B=l[T.mint.address];if(!B){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(T.mint.programId),mint:new Q(T.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:s});B=C,x&&m.addInstruction(x)}l[T.mint.address]=B,A.push(B)}let h=await this.getClmmPoolKeys(y.id),I=[];for(let T=0;T<h.rewardInfos.length;T++)I.push({poolRewardVault:new Q(h.rewardInfos[T].vault),ownerRewardVault:A[T],rewardMint:new Q(h.rewardInfos[T].mint.address)});for(let T of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[T.nftMint.toBase58()];if(S){let B=le(this.scope.ownerPubKey,S.lockNftMint,ii).publicKey,C=j.getTickArrayStartIndexByTick(T.tickLower,h.config.tickSpacing),x=j.getTickArrayStartIndexByTick(T.tickUpper,h.config.tickSpacing),{publicKey:R}=de(new Q(h.programId),S.poolId,C),{publicKey:F}=de(new Q(h.programId),S.poolId,x),{publicKey:O}=Et(new Q(h.programId),S.poolId,T.tickLower,T.tickUpper),X=Qo($n,S.lockNftMint).publicKey,U=ke.harvestLockPositionInstructionV2({programId:$n,auth:ho,lockPositionId:X,clmmProgram:yn,lockOwner:this.scope.ownerPubKey,lockNftMint:S.lockNftMint,lockNftAccount:B,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:O,vaultA:new Q(h.vault.A),vaultB:new Q(h.vault.B),tickArrayLower:R,tickArrayUpper:F,userVaultA:g,userVaultB:P,mintA:new Q(h.mintA.address),mintB:new Q(h.mintB.address),rewardAccounts:I,exTickArrayBitmap:ot(yn,S.poolId).publicKey});m.addInstruction({instructions:[U],instructionTypes:[E.ClmmHarvestLockPosition],lookupTableAddress:h.lookupTableAccount?[h.lookupTableAccount]:[]})}else{let B=ke.decreaseLiquidityInstructions({poolInfo:y,poolKeys:h,ownerPosition:T,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:P,rewardAccounts:A},liquidity:new Pt(0),amountMinA:new Pt(0),amountMinB:new Pt(0)});m.addInstruction(B)}}}return c===0?m.sizeCheckBuildV0({computeBudgetConfig:u}):m.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(zo(e).publicKey);return t?bc.decode(t.data).whitelistMints.filter(i=>!i.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new Pt(1))).map(r=>dt(new Q(e),r.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),s=[];return i.forEach(r=>{if(!r)return;let a=Zo.decode(r.data);s.push(a)}),s}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await ze(this.scope.connection,e.map(s=>({pubkey:new Q(s)})),t),i={};for(let s=0;s<e.length;s++){let r=n[s];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[s]));let a=_n.decode(r.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[s])]=D(L({},a),{currentPrice:c,programId:r.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await ze(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),s={};i.forEach(c=>{!c.accountInfo||(s[c.pubkey.toBase58()]=fc.decode(c.accountInfo.data))});let r=await Me.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:ut({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||ii.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?kn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:ut({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||ii.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?kn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:D(L({},s[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Me.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await Qn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:s,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await ze(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=dc(s[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Ec.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Ec.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=D(L({},s[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:s[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:ut({address:m.tokenMint.toBase58(),programId:ii.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:s[e],tickData:r}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Wf,NATIVE_MINT as br,TOKEN_PROGRAM_ID as Wt}from"@solana/spl-token";import oa from"bn.js";import lr from"decimal.js-light";import si from"bn.js";function ar(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function xf(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=ar(o,e);return n.gt(co)&&(t=t.add(new si(1)),e=o.div(t),n=ar(o,t),n.gt(co)&&(e=e.add(new si(1)))),[t,e]}var co=new si(0),ur=class{static swapWithoutFees(e,t,n){let i=t.mul(n),s=t.add(e),[r,a]=xf(i,s),c=a.sub(t),u=n.sub(r);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,s){let r=e.mul(n).div(t),a=e.mul(i).div(t);if(s===0)return{tokenAmount0:r,tokenAmount1:a};if(s===1)return ar(e.mul(n),t).gt(co)&&r.gt(co)&&(r=r.add(new si(1))),ar(e.mul(i),t).gt(co)&&a.gt(co)&&(a=a.add(new si(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import Wc from"bn.js";var na=new Wc(1e6);function Sf(o,e,t){return o.mul(e).add(t).sub(new Wc(1)).div(t)}function Dc(o,e,t){return o.mul(e).div(t)}var cr=class{static tradingFee(e,t){return Sf(e,t,na)}static protocolFee(e,t){return Dc(e,t,na)}static fundFee(e,t){return Dc(e,t,na)}};var Fc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Fc||{}),mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let s=cr.tradingFee(e,i),r=e.sub(s),{sourceAmountSwapped:a,destinationAmountSwapped:c}=ur.swapWithoutFees(r,t,n),u=a.add(s);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:s}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:s,outputMint:r,outputAmount:a}){let[c,u,l,m,d]=t.address===r.toString()?[i,s,e.decimals,t.decimals,e.address]:[s,i,t.decimals,e.decimals,t.address],p=new lr(u.toString()).div(10**m).div(new lr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new oa(1)):a,f=u.sub(y),b=_t(c.mul(y),f),g=_t(b.mul(new oa(1e6)),new oa(1e6).sub(n)),P=g.sub(b),A=new lr(y.toString()).div(10**m).div(new lr(g.toString()).div(10**l)),h=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:P,priceImpact:h}}};import Ne from"bn.js";import{PublicKey as ai,TransactionInstruction as qn,Keypair as vf,SystemProgram as Ef}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Gc,TOKEN_2022_PROGRAM_ID as ra,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";var Kf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Cf=Buffer.from("amm_config","utf8"),Rf=Buffer.from("pool","utf8"),Lf=Buffer.from("pool_lp_mint","utf8"),Of=Buffer.from("pool_vault","utf8"),Mf=Buffer.from("observation","utf8");function lo(o){return ae([Kf],o)}function rS(o,e){return ae([Cf,_f(e)],o)}function ia(o,e,t,n){return ae([Rf,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Nf(o,e){return ae([Lf,e.toBuffer()],o)}function qc(o,e,t){return ae([Of,e.toBuffer(),t.toBuffer()],o)}function dr(o,e){return ae([Mf,e.toBuffer()],o)}function _f(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Uc({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let s=lo(e).publicKey,r=o||ia(e,t,n,i).publicKey,a=Nf(e,r).publicKey,c=qc(e,r,n).publicKey,u=qc(e,r,i).publicKey,l=dr(e,r).publicKey;return{poolId:r,configId:t,authority:s,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Vf=Buffer.from("locked_liquidity","utf8");function pr(o,e){return ae([Vf,e.toBuffer()],o)}var Ff=me("Raydium_cpmm"),Un={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function Xc(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y,f,b,g,P,A){let h=V([k("amountMaxA"),k("amountMaxB"),k("openTime")]),I=ia(o,t,s,r).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(I),isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Gc,isSigner:!1,isWritable:!1},{pubkey:Si,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:P,openTime:A},S),new qn({keys:T,programId:o,data:Buffer.from([...Un.initialize,...S])})}function zc(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y){let f=V([k("lpAmount"),k("amountMaxA"),k("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ff.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new qn({keys:b,programId:o,data:Buffer.from([...Un.deposit,...g])})}function Qc(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y){let f=V([k("lpAmount"),k("amountMinA"),k("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new qn({keys:b,programId:o,data:Buffer.from([...Un.withdraw,...g])})}function fr(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y,f){let b=V([k("amountIn"),k("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new qn({keys:g,programId:o,data:Buffer.from([...Un.swapBaseInput,...P])})}function Yc(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y,f){let b=V([k("amountInMax"),k("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new qn({keys:g,programId:o,data:Buffer.from([...Un.swapBaseOutput,...P])})}async function jc(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,s=[],[r,a]=[new ai(t.id),new ai(t.lpMint.address)],c;if(i)c=new ai((await i(1))[0]);else{let b=vf.generate();s.push(b),c=b.publicKey}let{publicKey:u}=le(e.feePayer,c,Tn),{publicKey:l}=On(c),{publicKey:m}=pr(o.lockProgram,c),{publicKey:d}=le(e.feePayer,a,Tn),{publicKey:p}=le(o.lockAuthProgram,a,Tn),y=Df({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:r,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new ai(n.vault.A),poolVaultB:new ai(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:s,instructionTypes:[E.CpmmLockLp],lookupTableAddress:[]}}function Df({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:s,nftAccount:r,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Ef.programId,isSigner:!1,isWritable:!1},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:Gc,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1}],P=V([k("lpAmount"),Ge("withMetadata")]),A=Buffer.alloc(P.span);P.encode({lpAmount:f,withMetadata:b},A);let h=Buffer.from([...Un.lockCpLiquidity,...A]);return new qn({keys:g,programId:o,data:h})}function Hc({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:s,mintLp:r,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:To,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Zr,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1}],P=V([k("lpFeeAmount")]),A=Buffer.alloc(P.span);P.encode({lpFeeAmount:y},A);let h=Buffer.from([...Un.collectCpFee,...A]);return new qn({keys:g,programId:o,data:h})}var Zc=V([Ae(8),W("bump"),Ge("disableCreatePool"),Jt("index"),k("tradeFeeRate"),k("protocolFeeRate"),k("fundFeeRate"),k("createPoolFee"),K("protocolOwner"),K("fundOwner"),Y(k(),16)]),yr=V([Ae(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),k("lpAmount"),k("protocolFeesMintA"),k("protocolFeesMintB"),k("fundFeesMintA"),k("fundFeesMintB"),k("openTime"),Y(k(),32)]);var ui=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 ze(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),i={},s=new Set,r=[];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=yr.decode(d.accountInfo.data);i[String(e[m])]=D(L({},p),{programId:d.accountInfo.owner}),s.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...s],d=await ze(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]]=Zc.decode(y.data)}}let c={},u=await ze(this.scope.connection,r.map(m=>({pubkey:new z(m)})));for(let m=0;m<r.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+r[m]);c[String(r[m])]=new Ne(Wf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=D(L({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(y.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let s=e[i],[r,a]=[s.mintA.toBase58(),s.mintB.toBase58()];return D(L({},n),{[i]:D(L({},s),{id:new z(i),configInfo:s.configInfo,version:7,authority:lo(s.programId).publicKey,mintA:ut({address:r,decimals:s.mintDecimalA,programId:s.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[r])!=null&&c.feeConfig?kn((u=t[r])==null?void 0:u.feeConfig):void 0}}),mintB:ut({address:a,decimals:s.mintDecimalB,programId:s.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?kn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Qn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=ut({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?kn(n[t.mintA.toBase58()].feeConfig):void 0}}),s=ut({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?kn(n[t.mintB.toBase58()].feeConfig):void 0}}),r=ut({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Wt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:s,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**s.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:s,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:lo(t.programId).publicKey.toBase58(),mintLp:r,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:s,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=ve(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var X,U,q;let y=s.feePayer||((X=this.scope.owner)==null?void 0:X.publicKey),f=new Ne(new z(m.mintA.address).toBuffer()).lte(new Ne(new z(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[P,A]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=s.useSOLBalance&&b.address===br.toBase58(),I=s.useSOLBalance&&g.address===br.toBase58(),[T,S]=[new z(b.address),new z(g.address)],B=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:P}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:r,checkCreateATAOwner:a});B.addInstruction(x||{});let{account:R,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:y,amount:A}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:r,checkCreateATAOwner:a});if(B.addInstruction(F||{}),C===void 0||R===void 0)throw Error("you don't has some token account");let O=Uc({poolId:e,programId:t,configId:new z(u.id),mintA:T,mintB:S});return B.addInstruction({instructions:[Xc(t,this.scope.ownerPubKey,new z(u.id),O.authority,O.poolId,T,S,O.lpMint,C,R,le(this.scope.ownerPubKey,O.lpMint).publicKey,O.vaultA,O.vaultB,n,new z((U=b.programId)!=null?U:Wt),new z((q=g.programId)!=null?q:Wt),O.observationId,P,A,i)],instructionTypes:[E.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.versionBuild({txVersion:c,extInfo:{address:D(L({},O),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:s,slippage:r,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:D(L({},t),{lpAmount:new M(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Le(0),baseIn:s,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(i.toString()).div(10**(s?t.mintA.decimals:t.mintB.decimals))}),P=g.amount,A=t.mintA.address===br.toString(),h=t.mintB.address===br.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(s?i:P).isZero()?{payer:this.scope.ownerPubKey,amount:s?i:P}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(C||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(s?P:i).isZero()?{payer:this.scope.ownerPubKey,amount:s?P:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{}),!B&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let F=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Re=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:F,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:O}=Re,X=ve(Re,["tokenAccount"]);I.addInstruction(X);let U=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Le(new Ne(1)).sub(r);return I.addInstruction({instructions:[zc(new z(t.programId),this.scope.ownerPubKey,new z(U.authority),new z(t.id),O,B,x,new z(U.vault.A),new z(U.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,s?b.amount:P,s?P:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var O,X;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:s,computeBudgetConfig:r,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Le(new Ne(1)).sub(s),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,P]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),h=P.equals(H),I,T,{account:S,instructionParams:B}=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});I=S,B&&b.addInstruction(B);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let R=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let F=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Qc(new z(t.programId),this.scope.ownerPubKey,new z(F.authority),new z(t.id),R,I,T,new z(F.vault.A),new z(F.vault.B),g,P,new z(t.lpMint.address),i,l.sub((O=p.fee)!=null?O:new Ne(0)),m.sub((X=y.fee)!=null?X:new Ne(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),b.addCustomComputeBudget(r),b.versionBuild({txVersion:a})}async swap(e){var C,x,R,F,O,X;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:s,inputAmount:r,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];s?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ne((1+c)*1e4)).div(new Ne(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ne((1-c)*1e4)).div(new Ne(1e4));let P=t.mintA.address===H.toBase58(),A=t.mintB.address===H.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((C=t.mintA.programId)!=null?C:Wt),owner:this.scope.ownerPubKey,createInfo:P||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Wt),owner:this.scope.ownerPubKey,createInfo:A||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:P,mintBUseSOLBalance:A,associatedOnly:y});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[s?Yc(new z(t.programId),this.scope.ownerPubKey,new z(B.authority),new z(B.config.id),new z(t.id),i?h:T,i?T:h,new z(B.vault[i?"A":"B"]),new z(B.vault[i?"B":"A"]),new z((O=t[i?"mintA":"mintB"].programId)!=null?O:Wt),new z((X=t[i?"mintB":"mintA"].programId)!=null?X:Wt),i?b:g,i?g:b,dr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):fr(new z(t.programId),this.scope.ownerPubKey,new z(B.authority),new z(B.config.id),new z(t.id),i?h:T,i?T:h,new z(B.vault[i?"A":"B"]),new z(B.vault[i?"B":"A"]),new z((R=t[i?"mintA":"mintB"].programId)!=null?R:Wt),new z((F=t[i?"mintB":"mintA"].programId)!=null?F:Wt),i?b:g,i?g:b,dr(new z(t.programId),new z(t.id)).publicKey,r,a.destinationAmountSwapped)],instructionTypes:[s?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:s}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let r=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await jc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:Io,lockAuthProgram:(d=e.authProgram)!=null?d:Bo,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return r.addInstruction(c),r.addCustomComputeBudget(i),r.versionBuild({txVersion:s,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:s=Io,authProgram:r=Bo,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new z(t.mintA.address),new z(t.mintB.address)],y=d.equals(H),f=p.equals(H),b,g,{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=P,A&&m.addInstruction(A);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,I&&m.addInstruction(I),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=le(l,i,Wt),{publicKey:B}=pr(s,i),{publicKey:C}=le(r,new z(t.lpMint.address),Wt);return m.addInstruction({instructions:[Hc({programId:s!=null?s:Io,nftOwner:this.scope.ownerPubKey,auth:r!=null?r:Bo,nftMint:i,nftAccount:S,lockPda:B,poolId:new z(t.id),mintLp:new z(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new z(T.vault.A),poolVaultB:new z(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[E.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let s=n.toString()===e.mintB.address,r=mr.swap(t,s?e.baseReserve:e.quoteReserve,s?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(r.destinationAmountSwapped.toString()).div(r.sourceAmountSwapped.toString()),c=r.destinationAmountSwapped.mul(new Ne((1-i)*1e4)).div(new Ne(1e4));return{allTrade:r.sourceAmountSwapped.eq(t),amountIn:t,amountOut:r.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:r.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:s,epochInfo:r,baseIn:a}){var h,I,T,S,B,C,x,R,F;let c=1-Number(s.toSignificant())/100,u=new Ne(new M(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((h=l.fee)!=null?h:new Ne(0)),d=new Ne(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(I=l.fee)==null?void 0:I.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${s.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Fe,fee:void 0,expirationTime:void 0};if(!m.isZero()){let O=qf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),f=ge(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new Le(new Ne(1)).add(s),g=new Le(new Ne(1)).sub(s),P=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ne(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),A=ge(g.mul(f.amount.sub((B=f.fee)!=null?B:new Ne(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(F=(R=P.fee)==null?void 0:R.toString())!=null?F:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:P,minAnotherAmount:A,liquidity:y}}};function qf(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Ne(1)));let s=o.mul(t).div(n);return!s.isZero()&&!o.mul(t).mod(n).isZero()&&(s=s.add(new Ne(1))),{amountA:i,amountB:s}}import{PublicKey as Xn}from"@solana/web3.js";import{createTransferInstruction as ol,TOKEN_PROGRAM_ID as _e,TOKEN_2022_PROGRAM_ID as wr}from"@solana/spl-token";import Pr from"bn.js";var $c={[Ni.toBase58()]:3},Jc={3:Ni};var sa=V([Ae(5),Ae(8),K("ownAddress"),k("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),K("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),Ae(7)]),el={3:sa};import{PublicKey as tl}from"@solana/web3.js";var gr=me("Serum"),Ar=class{static getProgramId(e){let t=Jc[e];return t||gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=$c[t];return n||gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=el[e];return t||gr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,s;for(;i<100;){try{let r=n.concat(Buffer.from([i]),Buffer.alloc(7));s=tl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;i++;continue}return{publicKey:s,nonce:i}}return gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:tl.default,nonce:i}}};import{PublicKey as $,SystemProgram as aa,TransactionInstruction as ua}from"@solana/web3.js";import Gn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Uf,TOKEN_2022_PROGRAM_ID as Gf,TOKEN_PROGRAM_ID as ca}from"@solana/spl-token";function xK(o,e,t,n,i,s,r,a,c,u,l,m){let d=V([W("instruction"),k("amountIn"),k("amountOut")]),p=[{pubkey:aa.programId,isSigner:!1,isWritable:!1},{pubkey:ca,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ua({keys:p,programId:o,data:y})}function SK(o,e,t,n,i,s,r,a,c,u){let l=V([W("instruction")]),m=[{pubkey:aa.programId,isSigner:!1,isWritable:!1},{pubkey:ca,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ua({keys:m,programId:o,data:d})}function Xf(o,e,t,n,i,s,r,a,c,u,l,m,d,p,y){var T;let f=[],b=[w({pubkey:ca,isWritable:!1}),w({pubkey:Gf,isWritable:!1}),w({pubkey:Uf,isWritable:!1}),w({pubkey:aa.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})];b.push(w({pubkey:t})),b.push(w({pubkey:i}));let g=[c,u],P=[l,m],A=[s,r,a];for(let S=0;S<g.length;S++){let B=g[S],C=A[S]===B.mintA.address;if(b.push(w({pubkey:new $(B.programId),isWritable:!1})),S===g.length-1?b.push(w({pubkey:i})):b.push(w({pubkey:n})),b.push(w({pubkey:new $(A[S])})),b.push(w({pubkey:new $(A[S+1])})),B.version===6){let x=P[S];b.push(w({pubkey:new $(x.config.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new $(B.observationId)})),b.push(w({pubkey:fn})),b.push(w({pubkey:ot(new $(B.programId),new $(B.id)).publicKey})),f.push(zf(B.sqrtPriceX64.toString(),C));for(let R of(T=y[S])!=null?T:[])b.push(w({pubkey:new $(R)}))}else if(B.version===5){let x=P[S];b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.authority),isWritable:!1})),b.push(w({pubkey:new $(x.marketProgramId)})),b.push(w({pubkey:new $(x.marketAuthority)})),b.push(w({pubkey:su,isWritable:!1})),b.push(w({pubkey:new $(x.openOrders)})),b.push(w({pubkey:new $(x.vault.A)})),b.push(w({pubkey:new $(x.vault.B)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.marketId)})),b.push(w({pubkey:new $(x.marketBids)})),b.push(w({pubkey:new $(x.marketAsks)})),b.push(w({pubkey:new $(x.marketEventQueue)})),b.push(w({pubkey:new $(x.marketBaseVault)})),b.push(w({pubkey:new $(x.marketQuoteVault)}))}else if(B.version===4){let x=P[S],R=B.status!==1;b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.authority),isWritable:!1})),b.push(w({pubkey:new $(R?x.id:x.marketProgramId)})),b.push(w({pubkey:new $(R?x.id:x.marketAuthority)})),b.push(w({pubkey:new $(R?x.id:x.openOrders)})),b.push(w({pubkey:new $(x.vault.A)})),b.push(w({pubkey:new $(x.vault.B)})),b.push(w({pubkey:new $(R?x.id:x.marketId)})),b.push(w({pubkey:new $(R?x.id:x.marketBids)})),b.push(w({pubkey:new $(R?x.id:x.marketAsks)})),b.push(w({pubkey:new $(R?x.id:x.marketEventQueue)})),b.push(w({pubkey:new $(R?x.id:x.marketBaseVault)})),b.push(w({pubkey:new $(R?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=P[S];b.push(w({pubkey:new $(x.authority)})),b.push(w({pubkey:new $(x.config.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new $(B.observationId)}))}else throw Error("pool type error")}let h=V([W("insId"),k("amountIn"),k("amountOut"),Y(ee(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new ua({keys:b,programId:o,data:I})}function zf(o,e){if(o)if(e){let t=new Gn(o).div(new Gn(25));return t.gt(ji)?t:ji}else{let t=new Gn(o).mul(new Gn(25));return t.lt(Hi)?t:Hi}else return e?ji:Hi}function nl({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,s,r,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Kt.add(Tt):Ct.sub(Tt);return ke.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((s=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?s:new Gn(0)),sqrtPriceLimitX64:p,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[nr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Gn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.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:[Xf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Gn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var an=new Pr(0),ci=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:i=1}=e,s=await this.getWSolAccounts(),r=this.createTxBuilder();r.addCustomComputeBudget(e.computeBudgetConfig);let a=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});r.addInstruction(a);let c=Z(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(r.addInstruction({instructions:[tn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):r.addInstruction({instructions:[tn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return r.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),s=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:s,txVersion:r}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?wr:_e,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?wr:_e);else{let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?wr:_e,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[tn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:_e})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?wr:_e)}let P=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=nl({routeProgram:s,inputMint:d,swapInfo:D(L({},e),{poolInfo:[...e.poolInfoList],poolKey:P,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[ol(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),h.addInstruction(A);let{transactions:I}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[ol(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(A),r===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ko,clmm:n=yn,cpmm:i=To}=e||{},s=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Jo.offsetOf("baseMint"),length:64}}),r=V([K("baseMint"),K("quoteMint")]),a=s.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:_n.span}],dataSlice:{offset:_n.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:yr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:s}){e=e.toString()===Xn.default.toString()?H:e,t=t.toString()===Xn.default.toString()?H:t;let r={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),r[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of s)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=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 s=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),r=ir(s),a={};Object.values(r).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new Xn(f.mintA.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new Xn(f.mintB.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(_e)?(i.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}):i.add(b),f.mintProgramB.equals(_e)?(i.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}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Qn({connection:this.scope.connection,mints:Array.from(i).map(f=>new Xn(f))});a=L(L({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>D(L({},f),{[b]:D(L({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:s,ammSimulateCache:r,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:s,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,P,A,h,I,T,S,B,C;let m=l===void 0?new Pr(0):e.raw.mul(new Pr(l.feeBps.toNumber())).div(new Pr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=D(L({},t),{address:ht(t.address).toString()}),b=[];for(let x of n)try{b.push(D(L({},this.computeAmountOut({itemPool:x,tickCache:r,simulateCache:s,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(R){this.logDebug("direct error",x.version,x.id.toString(),R.message)}this.logDebug("direct done");for(let[x,R]of Object.entries(i)){let F={chainId:101,address:x,programId:R.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:R.mDecimals,tags:[],extensions:{}},O=R.in.map(U=>{try{return{pool:U,data:this.computeAmountOut({itemPool:U,tickCache:r,simulateCache:s,chainTime:c,epochInfo:u,slippage:a,outputToken:F,amountIn:p})}}catch(q){this.logDebug("route in error",U.version,U.id.toString(),q.message);return}}).sort((U,q)=>{var Ve,ft,yt,kt;let Re=U===void 0?an:U.data.amountOut.amount.raw.sub((ft=(Ve=U.data.amountOut.fee)==null?void 0:Ve.raw)!=null?ft:an),qt=q===void 0?an:q.data.amountOut.amount.raw.sub((kt=(yt=q.data.amountOut.fee)==null?void 0:yt.raw)!=null?kt:an);return Re.lt(qt)?1:-1})[0];if(O===void 0)continue;let X=new be(er(F),O.data.amountOut.amount.raw.sub((P=(g=O.data.amountOut.fee)==null?void 0:g.raw)!=null?P:an));for(let U of R.out)try{let q=this.computeAmountOut({itemPool:U,tickCache:r,simulateCache:s,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:X});b.push(D(L({},q),{allTrade:!!(O.data.allTrade&&q.allTrade),amountIn:O.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new M(new $e({baseToken:O.data.amountIn.amount.token,denominator:O.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((h=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?h:an)}).toFixed()),priceImpact:new M(O.data.priceImpact.add(q.priceImpact).toFixed()),fee:[O.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[O.pool,U],remainingAccounts:[O.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new be(O.data.amountOut.amount.token,((S=(T=O.data.amountOut.fee)==null?void 0:T.raw)!=null?S:an).add((C=(B=q.amountOut.fee)==null?void 0:B.raw)!=null?C:an)):void 0,middleToken:O.data.amountOut.amount.token,poolReady:O.data.poolReady&&q.poolReady,poolType:[O.data.poolType,q.poolType],feeConfig:y,expirationTime:Vt(O.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",U.version,U.id.toString(),q.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(R=>R.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,R)=>x.amountOut.amount.raw.sub(R.amountOut.amount.raw).gt(an)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:s,slippage:r,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:P,executionPriceX64:A}=Me.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:s,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(y.toFixed()),executionPrice:new M(f.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:r,clmmExPriceX64:[A],expirationTime:Vt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:$o(D(L({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:$o(D(L({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:$o(D(L({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:$o(D(L({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await ze(this.scope.connection,Array.from(r).map(l=>({pubkey:new Xn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=sa.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ar.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:D(L({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=L({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Js({programId:new Xn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:lo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ut({address:u.mintLp.toBase58(),programId:_e.toBase58(),decimals:u.lpDecimals}),config:D(L({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Qf,Transaction as la,TransactionInstruction as Yf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as jf}from"@solana/spl-token";import il from"bn.js";var ct=class extends Ke{static getPdaPoolId(e,t){return ae([ct.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ae([ct.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new il(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:s}){if(n.length===0)return[];let r=n.map(l=>ct.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ct.VERSION_PROJECT.length;l++)a.push(...r.map(m=>ct.getPdaOwnerId(t,m,i,l).publicKey));let c=await Lt(e,[...r,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=r[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==ct.POOL_LAYOUT.span||b.data.length!==ct.OWNER_LAYOUT.span)continue;let g=ct.POOL_LAYOUT.decode(f.data),P=ct.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),h=g.endTime.toNumber(),I=P.tokenInfo.map(B=>B.debtAmount.gt(new il(0))).filter(B=>!B).length!==3,T=s>A&&s<h&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:ct.VERSION_PROJECT[m],openTime:A,endTime:h,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:P.tokenInfo[C].debtAmount.add(P.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,s=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),s.push(u)}n.addInstruction({instructions:[ct.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:s}})]});let{transaction:r,signers:a}=n.build();return[{transaction:r,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,s={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(s[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ct.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:r,signers:a}=n.build(),c=n.allInstructions;return Mi(c,[i,...a.map(u=>u.publicKey)])?[{transaction:r,signer:a}]:[{transaction:new la().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new la().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new la().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=V([]),s=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:jf,isSigner:!1,isWritable:!1}],r=Buffer.alloc(i.span);i.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new Yf({keys:s,programId:e,data:a})}},Rt=ct;Rt.CLAIMED_NUM=3,Rt.POOL_LAYOUT=V([Ae(8),W("bump"),W("status"),k("openTime"),k("endTime"),K("ammId"),Y(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),k("perLpLoss"),k("totalClaimedAmount")]),ct.CLAIMED_NUM,"tokenInfo"),Y(k(),10,"padding")]),Rt.OWNER_LAYOUT=V([Ae(8),W("bump"),W("version"),K("poolId"),K("owner"),k("lpAmount"),Y(V([K("mintAddress"),k("debtAmount"),k("claimedAmount")]),ct.CLAIMED_NUM,"tokenInfo"),Y(k(),4,"padding")]),Rt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qf(e)),Rt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Rt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as mi}from"@solana/web3.js";import rl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Hf,TransactionInstruction as da}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as pa}from"@solana/spl-token";var ma=V([W("instruction"),hu("amount")]),li=V([W("instruction")]);function P0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Si,isSigner:!1,isWritable:!1},{pubkey:pa,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([s,r])=>({pubkey:r,isSigner:s==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(s)}))],i=Buffer.alloc(ma.span);return ma.encode({instruction:1,amount:Number(e)},i),new da({keys:n,programId:o,data:i})}function kr({programId:o},e){let t=[{pubkey:pa,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(li.span);return li.encode({instruction:2},n),new da({keys:t,programId:o,data:n})}function fa(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,s=n==="base"?e.baseVault:e.quoteVault,r=Buffer.alloc(li.span);li.encode({instruction:2},r);let a=[{pubkey:pa,isWritable:!1,isSigner:!1},{pubkey:Hf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:s,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new da({programId:e.programId,keys:a,data:r})}var Zf={[xo.IDO_PROGRAM_ID_V1.toString()]:1,[xo.IDO_PROGRAM_ID_V2.toString()]:2,[xo.IDO_PROGRAM_ID_V3.toString()]:3,[xo.IDO_PROGRAM_ID_V4.toString()]:4},mo=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:s}){let r=this.createTxBuilder(),a=Zf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new rl(e.coin).isZero(),!new rl(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&r.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&r.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return r.addInstruction({instructions:[...u?[kr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[kr({programId:new mi(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:s});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),r.addInstruction({instructions:[kr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:s});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new mi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return r.addInstruction({instructions:[...u?[fa(D(L({},g),{side:"base"}))]:[],...l?[fa(D(L({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:s})}};import{PublicKey as $f}from"@solana/web3.js";import{MintLayout as Jf,TOKEN_2022_PROGRAM_ID as ya,TOKEN_PROGRAM_ID as ba}from"@solana/spl-token";var di=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:i="strict"}=t||{},{mintList:s,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Xt.address,Xt),this._mintGroup.official.add(Xt.address),r.forEach(u=>{this._blackTokenMap.set(u.address,D(L({},u),{priority:-1}))}),s.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ya.toBase58():ba.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ya.toBase58():ba.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ya.toBase58():ba.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Xt;let s=(await this.scope.api.getTokenInfo([n]))[0];if(s)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(L({},s),{priority:2})),s;let r=await this.scope.connection.getAccountInfo(new $f(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=Jf.decode(r.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var hr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:s,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Nt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=s,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Uo({scope:this,moduleName:"Raydium_Farm"}),this.account=new Mo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new oi({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new di({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new ci({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new ri({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new ui({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Rt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new uo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new mo({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var l;let t=ey({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:s,logRequests:r,urlConfigs:a}=t,c=new Fi({cluster:n,timeout:i,urlConfigs:a,logCount:s,logRequests:r}),u=new hr(D(L({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Di);return this._owner.publicKey}setOwner(e){return this._owner=e?new Nt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(pu);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(Di),new Error(Di)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>D(L({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var gC=o=>o;export{dy as ACCOUNT_TYPE_SIZE,Fg as ALL_PROGRAM_ID,Np as AMM_CONFIG_SEED,Dm as AMM_STABLE,ko as AMM_V4,eb as ANAMint,We as API_URLS,gl as AccountType,Fi as Api,$u as BIT_PRECISION,_t as BNDivCeil,Rn as BNLayout,ag as BN_100,ug as BN_1000,cg as BN_10000,sg as BN_FIVE,za as BN_ONE,xn as BN_TEN,rg as BN_THREE,ig as BN_TWO,Fe as BN_ZERO,gw as BitStructure,ku as Blob,ho as CLMM_LOCK_AUTH_ID,$n as CLMM_LOCK_PROGRAM_ID,yn as CLMM_PROGRAM_ID,Dr as CLOCK_PROGRAM_ID,Zr as CREATE_CPMM_POOL_AUTH,zm as CREATE_CPMM_POOL_FEE_ACC,To as CREATE_CPMM_POOL_PROGRAM,ri as Clmm,fc as ClmmConfigLayout,ke as ClmmInstrument,ur as ConstantProductCurve,Zc as CpmmConfigInfoLayout,cr as CpmmFee,yr as CpmmPoolInfoLayout,Ao as Currency,Bn as CurrencyAmount,mr as CurveCalculator,Dg as DEVNET_PROGRAM_ID,BA as DEV_API_URLS,Ym as DEV_CREATE_CPMM_POOL_AUTH,jm as DEV_CREATE_CPMM_POOL_FEE_ACC,Qm as DEV_CREATE_CPMM_POOL_PROGRAM,Zm as DEV_LOCK_CPMM_AUTH,Hm as DEV_LOCK_CPMM_PROGRAM,ef as DataElement,tb as ETHMint,Es as EXTENSION_TICKARRAY_BITMAP_SIZE,Fu as FARM_LOCK_MINT,Du as FARM_LOCK_VAULT,Yr as FARM_PROGRAM_ID_V3,ru as FARM_PROGRAM_ID_V4,jr as FARM_PROGRAM_ID_V5,Zn as FARM_PROGRAM_ID_V6,xt as FARM_PROGRAM_TO_VERSION,qu as FARM_VERSION_TO_LEDGER_LAYOUT,Wu as FARM_VERSION_TO_STATE_LAYOUT,au as FEE_DESTINATION_ID,Zi as FEE_RATE_DENOMINATOR,na as FEE_RATE_DENOMINATOR_VALUE,qp as FETCH_TICKARRAY_COUNT,Mp as Fee,se as Fraction,xo as IDO_ALL_PROGRAM,qm as IDO_PROGRAM_ID_V1,Um as IDO_PROGRAM_ID_V2,Gm as IDO_PROGRAM_ID_V3,Xm as IDO_PROGRAM_ID_V4,xi as INSTRUCTION_PROGRAM_ID,E as InstructionType,cu as JupTokenType,tr as LIQUIDITY_FEES_DENOMINATOR,qs as LIQUIDITY_FEES_NUMERATOR,su as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Zp as LIQUIDITY_VERSION_TO_SERUM_VERSION,BI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Bo as LOCK_CPMM_AUTH,Io as LOCK_CPMM_PROGRAM,Vf as LOCK_LIQUIDITY_SEED,Ju as LOG_B_2_X32,ec as LOG_B_P_ERR_MARGIN_LOWER_X64,tc as LOG_B_P_ERR_MARGIN_UPPER_X64,Vi as LOOKUP_TABLE_CACHE,Lo as Layout,pe as LiquidityMath,ET as LockClPositionLayoutV2,vT as LockPositionLayout,dl as LogLevel,Br as Logger,ta as MARKET_STATE_LAYOUT_V2,sa as MARKET_STATE_LAYOUT_V3,el as MARKET_VERSION_TO_STATE_LAYOUT,tu as MAX_BASE64_SIZE,Ct as MAX_SQRT_PRICE_X64,Hi as MAX_SQRT_PRICE_X64_SUB_ONE,mt as MAX_TICK,Bi as MEMO_PROGRAM_ID,fn as MEMO_PROGRAM_ID2,Ht as METADATA_PROGRAM_ID,Kt as MIN_SQRT_PRICE_X64,ji as MIN_SQRT_PRICE_X64_ADD_ONE,at as MIN_TICK,so as MODEL_DATA_PUBKEY,Ar as Market,ie as MathUtil,Ms as MaxU64,Zu as MaxUint128,on as NEGATIVE_ONE,Jy as NRVMint,Wp as OBSERVATION_SEED,Tt as ONE,Hr as OPEN_BOOK_PROGRAM,Fp as OPERATION_SEED,yc as ObservationInfoLayout,Xp as ObservationLayout,bc as OperationLayout,ls as OptionLayout,Nt as Owner,zy as PAIMint,lc as POOL_LOCK_ID_SEED,vp as POOL_REWARD_VAULT_SEED,_p as POOL_SEED,Dp as POOL_TICK_ARRAY_BITMAP_SEED,Vp as POOL_VAULT_SEED,sc as POSITION_SEED,Le as Percent,lu as PoolFetchType,_n as PoolInfoLayout,Me as PoolUtils,Zo as PositionInfoLayout,Qp as PositionRewardInfoLayout,Yo as PositionUtils,$e as Price,VT as ProtocolPositionLayout,Yi as Q128,It as Q64,Xy as RAYMint,rt as RENT_PROGRAM_ID,hr as Raydium,zp as RewardInfo,Fc as RoundDirection,_r as Rounding,Wm as Router,$c as SERUM_PROGRAMID_TO_VERSION,Ni as SERUM_PROGRAM_ID_V3,Jc as SERUM_VERSION_TO_PROGRAMID,mu as SESSION_KEY,je as SOLMint,Xt as SOL_INFO,eI as SPL_MINT_LAYOUT,Qy as SRMMint,es as STORAGE_KEY,Si as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,ro as StableLayout,ms as Structure,Nn as SwapMath,Mn as TICK_ARRAY_BITMAP_SIZE,Ep as TICK_ARRAY_SEED,Ze as TICK_ARRAY_SIZE,Ah as TICK_SPACINGS,Ye as TOKEN_WSOL,rn as TickArrayBitmap,pc as TickArrayBitmapExtensionLayout,Ho as TickArrayBitmapExtensionUtils,jo as TickArrayLayout,Yp as TickLayout,Vn as TickMath,fe as TickQuery,j as TickUtils,we as Token,be as TokenAmount,vi as TxBuilder,Kn as TxVersion,Go as U64Resolution,Ph as U64_IGNORE_RANGE,as as UInt,Yy as USDCMint,$y as USDHMint,jy as USDTMint,Fm as UTIL1216,ds as Union,vu as Voter,Ap as VoterDepositEntry,gp as VoterLockup,Vu as VoterRegistrar,bp as VoterVotingMintConfig,H as WSOLMint,Xi as WideBits,en as WrappedLayout,ye as ZERO,qa as _100_PERCENT,w as accountMeta,Fb as add,Li as addComputeBudget,zs as addLiquidityLayout,nP as array,bs as associatedLedgerAccountLayout,us as bits,Ae as blob,Ge as bool,Cs as calFarmRewardAmount,Sf as ceilDiv,wo as checkLegacyTxSize,Po as checkV0TxSize,Kr as chunkArray,li as claimLayout,dc as clmmComputeInfoToApiInfo,tn as closeAccountInstruction,Hc as collectCpFeeInstruction,vr as commonSystemAccountMeta,Oi as confirmTransaction,Df as cpmmLockPositionInstruction,Fo as createAssociatedLedgerAccountInstruction,me as createLogger,Tc as createPoolFeeLayout,Hs as createPoolV4InstructionV2,II as createPoolV4Layout,nn as createWSolAccountInstructions,Xw as cstr,lb as currencyEquals,Rm as decimalToFraction,Hd as decodeBool,_b as div,Ki as divCeil,lt as dwLayout,Zd as encodeBool,zA as endlessRetry,Bm as eq,Dw as f32,Ww as f32be,qw as f64,Uw as f64be,Ps as farmAddRewardLayout,HP as farmLedgerLayoutV3_1,_o as farmLedgerLayoutV3_2,ZP as farmLedgerLayoutV5_1,Nu as farmLedgerLayoutV5_2,_u as farmLedgerLayoutV6_1,Gu as farmRewardInfoToConfig,As as farmRewardLayout,ws as farmRewardRestartLayout,yp as farmRewardTimeInfoLayout,Ou as farmStateV3Layout,Mu as farmStateV5Layout,No as farmStateV6Layout,hk as fetchMultipleFarmInfoAndUpdate,iB as fetchMultipleInfo,Qn as fetchMultipleMintInfos,ae as findProgramAddress,Us as fixedSwapInLayout,Gs as fixedSwapOutLayout,Dc as floorDiv,Mi as forecastTransactionSize,mf as formatLayout,Oe as generatePubKey,le as getATAAddress,Uu as getAssociatedAuthority,or as getAssociatedConfigId,st as getAssociatedLedgerAccount,vo as getAssociatedLedgerPoolAccount,Pf as getAssociatedOpenOrders,ea as getAssociatedPoolKeys,pr as getCpLockPda,rS as getCpmmPdaAmmConfigId,ia as getCpmmPdaPoolId,Uc as getCreatePoolKeys,ja as getDate,Rs as getDepositEntryIndex,Sc as getDxByDyBaseIn,xc as getDyByDxBaseIn,Lg as getEpochInfo,oo as getFarmLedgerLayout,wp as getFarmStateLayout,Js as getLiquidityAssociatedAuthority,Dn as getLiquidityAssociatedId,dT as getLiquidityFromAmounts,Eb as getMax,Lt as getMultipleAccountsInfo,ze as getMultipleAccountsInfoWithCustomFlags,$r as getMultipleLookupTableInfo,Sh as getPdaAmmConfigId,ot as getPdaExBitmapAccount,Qo as getPdaLockClPositionIdV2,vs as getPdaLockPositionId,Nf as getPdaLpMint,On as getPdaMetadataKey,cc as getPdaObservationAccount,dr as getPdaObservationId,zo as getPdaOperationAccount,dt as getPdaPersonalPositionAddress,lo as getPdaPoolAuthority,ac as getPdaPoolId,uc as getPdaPoolRewardVaulId,Vs as getPdaPoolVaultId,Et as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,qc as getPdaVault,Hn as getRecentBlockHash,Ts as getRegistrarAddress,Jm as getSessionKey,Kc as getStablePrice,Om as getTime,Xb as getTimestamp,Ks as getTokenOwnerRecordAddress,Ug as getTransferAmountFee,ge as getTransferAmountFeeV2,xs as getVoterAddress,Ss as getVoterWeightRecordAddress,Bs as getVotingMintAuthority,Is as getVotingTokenMint,Kp as governanceCreateTokenOwnerRecord,Aw as greedy,Im as gt,Nb as gte,Ku as i128,hh as i16ToBytes,$i as i32ToBytes,eo as i64,Su as i8,Xs as initPoolLayout,fs as initTokenAccountInstruction,If as initializeMarket,bg as intersection,Za as isDateAfter,Ha as isDateBefore,Lm as isDecimal,vb as isMeaningfulNumber,Ya as isNumber,ks as isValidFarmVersion,Xo as isZero,Ie as jsonInfo2PoolKeys,Tk as judgeFarmType,Ns as leadingZeros,rc as leastSignificantBit,Jo as liquidityStateV4Layout,$p as liquidityStateV5Layout,Ob as lt,Mb as lte,Hy as mSOLMint,nr as makeAMMSwapInstruction,Lc as makeAddLiquidityInstruction,Os as makeAddNewRewardInstruction,kr as makeClaimInstruction,fa as makeClaimInstructionV4,jc as makeCpmmLockInstruction,Xc as makeCreateCpmmPoolInInstruction,Xu as makeCreateFarmInstruction,rr as makeCreateMarketInstruction,zu as makeCreatorWithdrawFarmRewardInstruction,zc as makeDepositCpmmInInstruction,Yu as makeDepositInstructionV3,ju as makeDepositInstructionV5,Hu as makeDepositInstructionV6,Fk as makeDepositTokenInstruction,Wk as makeDepositWithdrawInstruction,qI as makeInitPoolInstructionV4,P0 as makePurchaseInstruction,Ls as makeRestartRewardInstruction,Oc as makeSimulatePoolInfoInstruction,fr as makeSwapCpmmBaseInInInstruction,Yc as makeSwapCpmmBaseOutInInstruction,ff as makeSwapFixedInInstruction,yf as makeSwapFixedOutInstruction,nl as makeSwapInstruction,Lu as makeTransferInstruction,Qc as makeWithdrawCpmmInInstruction,qo as makeWithdrawInstructionV3,Qu as makeWithdrawInstructionV4,Wo as makeWithdrawInstructionV5,Do as makeWithdrawInstructionV6,Dk as makeWithdrawTokenInstruction,Vt as minExpirationTime,wh as mockCreatePoolInfo,nc as mockV3CreatePoolInfo,tf as modelDataInfoLayout,ic as mostSignificantBit,Xr as mul,zr as notInnerObject,Mw as ns64,Fw as ns64be,hu as nu64,Sw as nu64be,cs as offset,fg as offsetDateTime,Zw as option,Z as parseBigNumberish,Sn as parseNumberInfo,ou as parseSimulateLogToJson,$t as parseSimulateValue,Ru as parseTokenAccountResp,lI as parseTokenInfo,Pn as poolTypeV6,Cn as printSimulate,K as publicKey,ma as purchaseLayout,dp as realFarmStateV3Layout,pp as realFarmStateV5Layout,fp as realFarmV6Layout,Xa as recursivelyDecimalToFraction,js as removeLiquidityInstruction,Qs as removeLiquidityLayout,xK as route1Instruction,SK as route2Instruction,Xf as routeInstruction,tP as rustEnum,Cw as s16,Nw as s16be,Rw as s24,_w as s24be,tt as s32,Vw as s32be,Lw as s40,vw as s40be,Ow as s48,Ew as s48be,Kw as s8,Y as seq,oy as setLoggerLevel,Km as shakeFractionDecimal,nu as simulateMultipleInstruction,WI as simulatePoolInfoInstruction,_m as simulateTransaction,Ua as sleep,ht as solToWSol,dI as solToWSolToken,An as splAccountLayout,Fa as splitNumber,Zy as stSOLMint,eP as str,V as struct,Vb as sub,Jw as tagged,Gr as tenExponential,ir as toAmmComputePoolInfo,ut as toApiV3Token,Cm as toBN,iu as toBuffer,kn as toFeeConfig,Qa as toFraction,Lb as toFractionWithDecimals,lg as toPercent,er as toToken,$o as toTokenAmount,mI as toTokenInfo,mg as toTokenPrice,dg as toTotalPrice,Ga as toUsdCurrency,_s as trailingZeros,Og as transformTxToBase64,Fr as tryParsePublicKey,Vm as txToBase64,ee as u128,Jt as u16,oc as u16ToBytes,hw as u16be,ww as u24,Tw as u24be,nt as u32,Th as u32ToBytes,Iw as u32be,Pw as u40,Bw as u40be,kw as u48,xw as u48be,k as u64,W as u8,oP as union,gC as unionArr,Gw as unionLayoutDiscriminator,Ag as uniq,Pp as updateFarmPoolInfo,Ei as updateReqHistory,zw as utf8,Er as validateAndParsePublicKey,hs as validateFarmRewards,$w as vec,$d as vecU8,Rp as voterStakeRegistryCreateDepositEntry,Cp as voterStakeRegistryCreateVoter,Bp as voterStakeRegistryDeposit,xp as voterStakeRegistryUpdateVoterWeightRecord,Sp as voterStakeRegistryWithdraw,pI as wSolToSolToken,gs as withdrawRewardLayout,gg as xor,iP as zeros};
1
+ var cl=Object.defineProperty,ll=Object.defineProperties;var ml=Object.getOwnPropertyDescriptors;var fi=Object.getOwnPropertySymbols;var wa=Object.prototype.hasOwnProperty,Pa=Object.prototype.propertyIsEnumerable;var Aa=(o,e,t)=>e in o?cl(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,L=(o,e)=>{for(var t in e||(e={}))wa.call(e,t)&&Aa(o,t,e[t]);if(fi)for(var t of fi(e))Pa.call(e,t)&&Aa(o,t,e[t]);return o},D=(o,e)=>ll(o,ml(e));var ve=(o,e)=>{var t={};for(var n in o)wa.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&fi)for(var n of fi(o))e.indexOf(n)<0&&Pa.call(o,n)&&(t[n]=o[n]);return t};import du from"axios";import{PublicKey as Ta}from"@solana/web3.js";import{get as Ir,set as ka}from"lodash";var dl=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(dl||{}),Br=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}},xr={},ha={};function me(o){let e=Ir(xr,o);if(!e){let t=Ir(ha,o);e=new Br({name:o,logLevel:t}),ka(xr,o,e)}return e}function oy(o,e){ka(ha,o,e);let t=Ir(xr,o);t&&(t.level=e)}import{MINT_SIZE as pl,TOKEN_PROGRAM_ID as fl,getTransferFeeConfig as yl,unpackMint as bl}from"@solana/spl-token";var Sr=me("Raydium_accountInfo_util");async function Lt(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=L({batchRequest:!1},t),s=Kr(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Kr(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Sr.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"&&Sr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ta(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&Sr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function ze(o,e,t){let n=await Lt(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>D(L({},i),{accountInfo:n[r]}))}var gl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(gl||{}),dy=1;async function Qn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await ze(o,e.map(c=>({pubkey:ht(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<pl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=bl(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);i[c.pubkey.toString()]=D(L({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||fl,feeConfig:(a=yl(u))!=null?a:void 0})}return i[Ta.default.toBase58()]=i[H.toBase58()],i}import De from"bn.js";var Yn=9e15,dn=1e9,Cr="0123456789abcdef",bi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",gi="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Rr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Yn,maxE:Yn,crypto:!1},Sa,jt,re=!0,wi="[DecimalError] ",mn=wi+"Invalid argument: ",Ka=wi+"Precision limit exceeded",Ca=wi+"crypto unavailable",Ra="[object Decimal]",it=Math.floor,Qe=Math.pow,Al=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,wl=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Pl=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,La=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Mt=1e7,ne=7,kl=9007199254740991,hl=bi.length-1,Lr=gi.length-1,v={toStringTag:Ra};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),J(o)};v.ceil=function(){return J(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(mn+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};v.comparedTo=v.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,c=r.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==o.e)return r.e>o.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Tl(n,Va(n,t)),n.precision=o,n.rounding=e,J(jt==2||jt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,i,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,r=l.s*Qe(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=et(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=Qe(t,1/3),o=it((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Te(u.plus(l).times(a),u.plus(c),s+2,1),et(a.d).slice(0,s)===(t=et(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(J(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(J(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,J(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-it(this.e/ne))*ne,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return Te(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return J(Te(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return J(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,i,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/ki(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=jn(s,1,r.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return J(r,s.precision=t,s.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=jn(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/ki(5,o)),i=jn(r,2,i,i,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,J(i,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Te(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?Ot(t,i,r):new t(0):new t(NaN):e.isZero()?Ot(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=Ot(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?J(new r(i),o,e,!0):(r.precision=t=n-i.e,i=Te(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=Ot(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Lr)return s=Ot(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Lr)return s=Ot(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ne+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/ne),n=1,c=u.times(u),s=new l(u),i=u;o!==-1;)if(i=i.times(c),r=s.minus(i.div(n+=2)),i=i.times(c),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),re=!0,J(s,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&it(this.e/ne)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,i,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(re=!1,a=m+p,s=ln(u,a),n=e?Ai(l,a+10):ln(o,a),c=Te(s,n,a,1),po(c.d,i=m,d))do if(a+=10,s=ln(u,a),n=e?Ai(l,a+10):ln(o,a),c=Te(s,n,a,1),!r){+et(c.d).slice(i+1,i+15)+1==1e14&&(c=J(c,m+1,0));break}while(po(c.d,i+=10,d));return re=!0,J(c,m,d)};v.minus=v.sub=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return re?J(o,a,c):o}if(t=it(o.e/ne),l=it(p.e/ne),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ne),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}r=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Mt-1;--u[i],u[n]+=Mt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=Pi(u,t),re?J(o,a,c):o):new y(c===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?J(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=Te(t,o.abs(),0,3,1),e.s*=o.s):e=Te(t,o,0,n.modulo,1),e=e.times(o),re=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return Or(this)};v.naturalLogarithm=v.ln=function(){return ln(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,J(o)};v.plus=v.add=function(o){var e,t,n,i,r,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),re?J(o,a,c):o;if(r=it(m.e/ne),n=it(o.e/ne),u=u.slice(),i=r-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ne),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Mt|0,u[i]%=Mt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=Pi(u,n),re?J(o,a,c):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(mn+o);return t.d?(e=Oa(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return J(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ne,n.rounding=1,t=Bl(n,Va(n,t)),n.precision=o,n.rounding=e,J(jt>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,i,r,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(re=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=et(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=it((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(Te(s,r,t+2,1)).times(.5),et(r.d).slice(0,t)===(e=et(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(J(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(J(n,c+1,1),o=!n.times(n).eq(s));break}return re=!0,J(n,c,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Te(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,J(jt==2||jt==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,i,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=it(l.e/ne)+it(o.e/ne),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=r[i]+p[n]*d[i-n-1]+e,r[i--]=a%Mt|0,e=a/Mt|0;r[i]=(r[i]+e)%Mt|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=Pi(r,t),re?J(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return Nr(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(gt(o,0,dn),e===void 0?e=n.rounding:gt(e,0,8),J(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Gt(n,!0):(gt(o,0,dn),e===void 0?e=i.rounding:gt(e,0,8),n=J(new i(n),o+1,e),t=Gt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Gt(i):(gt(o,0,dn),e===void 0?e=r.rounding:gt(e,0,8),n=J(new r(i),o+i.e+1,e),t=Gt(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,i,r,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),r=e.e=Oa(y)-p.e-1,s=r%ne,e.d[0]=Qe(10,s<0?ne+s:s),o==null)o=r>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(mn+a);o=a.gt(e)?r>0?e:u:a}for(re=!1,a=new f(et(y)),l=f.precision,f.precision=r=y.length*ne*2;m=Te(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=Te(o.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=Te(u,n,r,1).minus(p).abs().cmp(Te(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,re=!0,d};v.toHexadecimal=v.toHex=function(o,e){return Nr(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:gt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(re=!1,t=Te(t,o,0,e,1).times(o),re=!0,J(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return Nr(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,i,r,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(Qe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,o.eq(1))return J(a,n,r);if(e=it(o.e/ne),e>=o.d.length-1&&(t=u<0?-u:u)<=kl)return i=Ma(c,a,t,n),o.s<0?new c(1).div(i):J(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Qe(+a,u),e=t==0||!isFinite(t)?it(u*(Math.log("0."+et(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Or(o.times(ln(a,n+t)),n),i.d&&(i=J(i,n+5,1),po(i.d,n,r)&&(e=n+10,i=J(Or(o.times(ln(a,e+t)),e),e+5,1),+et(i.d).slice(n+1,n+15)+1==1e14&&(i=J(i,n+1,0)))),i.s=s,re=!0,c.rounding=r,J(i,n,r))};v.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Gt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(gt(o,1,dn),e===void 0?e=i.rounding:gt(e,0,8),n=J(new i(n),o,e),t=Gt(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(gt(o,1,dn),e===void 0?e=n.rounding:gt(e,0,8)),J(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Gt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return J(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Gt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function et(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ne-n.length,t&&(r+=cn(t)),r+=n;s=o[e],n=s+"",t=ne-n.length,t&&(r+=cn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function gt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(mn+o)}function po(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ne,i=0):(i=Math.ceil((e+1)/ne),e%=ne),r=Qe(10,ne-e),a=o[i]%r|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==r||t>3&&a+1==r/2)&&(o[i+1]/r/100|0)==Qe(10,e-2)-1||(a==r/2||a==0)&&(o[i+1]/r/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==r||!n&&t>3&&a+1==r/2)&&(o[i+1]/r/1e3|0)==Qe(10,e-3)-1,s}function yi(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=Cr.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function Tl(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/ki(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=jn(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var Te=function(){function o(n,i,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,c){var u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x,R,F,O=n.constructor,X=n.s==i.s?1:-1,U=n.d,q=i.d;if(!U||!U[0]||!q||!q[0])return new O(!n.s||!i.s||(U?q&&U[0]==q[0]:!q)?NaN:U&&U[0]==0||!q?X*0:X/0);for(c?(p=1,l=n.e-i.e):(c=Mt,p=ne,l=it(n.e/p)-it(i.e/p)),R=q.length,C=U.length,g=new O(X),P=g.d=[],m=0;q[m]==(U[m]||0);m++);if(q[m]>(U[m]||0)&&l--,r==null?(T=r=O.precision,s=O.rounding):a?T=r+(n.e-i.e)+1:T=r,T<0)P.push(1),y=!0;else{if(T=T/p+2|0,m=0,R==1){for(d=0,q=q[0],T++;(m<C||d)&&T--;m++)S=d*c+(U[m]||0),P[m]=S/q|0,d=S%q|0;y=d||m<C}else{for(d=c/(q[0]+1)|0,d>1&&(q=o(q,d,c),U=o(U,d,c),R=q.length,C=U.length),B=R,A=U.slice(0,R),h=A.length;h<R;)A[h++]=0;F=q.slice(),F.unshift(0),x=q[0],q[1]>=c/2&&++x;do d=0,u=e(q,A,R,h),u<0?(I=A[0],R!=h&&(I=I*c+(A[1]||0)),d=I/x|0,d>1?(d>=c&&(d=c-1),f=o(q,d,c),b=f.length,h=A.length,u=e(f,A,b,h),u==1&&(d--,t(f,R<b?F:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<h&&f.unshift(0),t(A,f,h,c),u==-1&&(h=A.length,u=e(q,A,R,h),u<1&&(d++,t(A,R<h?F:q,h,c))),h=A.length):u===0&&(d++,A=[0]),P[m++]=d,u&&A[0]?A[h++]=U[B]||0:(A=[U[B]],h=1);while((B++<C||A[0]!==void 0)&&T--);y=A[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Sa=y;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,J(g,a?r+g.e+1:r,s,y)}return g}}();function J(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ne,s=e,l=m[d=0],c=l/Qe(10,i-s-1)%10|0;else if(d=Math.ceil((r+1)/ne),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,r%=ne,s=r-ne+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;r%=ne,s=r-ne+i,c=s<0?0:l/Qe(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Qe(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/Qe(10,i-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=Qe(10,(ne-e%ne)%ne),o.e=-e||0):m[0]=o.e=0,o;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=Qe(10,ne-r),m[d]=s>0?(l/Qe(10,i-s)%Qe(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,m[0]==Mt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Mt)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return re&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Gt(o,e,t){if(!o.isFinite())return _a(o);var n,i=o.e,r=et(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+cn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+cn(-i-1)+r,t&&(n=t-s)>0&&(r+=cn(n))):i>=s?(r+=cn(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+cn(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=cn(n))),r}function Pi(o,e){var t=o[0];for(e*=ne;t>=10;t/=10)e++;return e}function Ai(o,e,t){if(e>hl)throw re=!0,t&&(o.precision=t),Error(Ka);return J(new o(bi),e,1,!0)}function Ot(o,e,t){if(e>Lr)throw Error(Ka);return J(new o(gi),e,t,!0)}function Oa(o){var e=o.length-1,t=e*ne+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function cn(o){for(var e="";o--;)e+="0";return e}function Ma(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ne+4);for(re=!1;;){if(t%2&&(r=r.times(e),Ba(r.d,s)&&(i=!0)),t=it(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Ba(e.d,s)}return re=!0,r}function Ia(o){return o.d[o.d.length-1]&1}function Na(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Or(o,e){var t,n,i,r,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(re=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Qe(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=J(r.times(o),c,1),t=t.times(++l),a=s.plus(Te(r,t,c,1)),et(a.d).slice(0,c)===et(s.d).slice(0,c)){for(i=m;i--;)s=J(s.times(s),c,1);if(e==null)if(u<3&&po(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return J(s,d.precision=y,p,re=!0);else return d.precision=y,s}s=a}}function ln(o,e){var t,n,i,r,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,P=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(re=!1,l=A):l=e,g.precision=l+=y,t=et(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=et(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return u=Ai(g,l+2,A).times(r+""),f=ln(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?J(f,A,P,re=!0):f;for(m=f,c=s=f=Te(f.minus(1),f.plus(1),l,1),d=J(f.times(f),l,1),i=3;;){if(s=J(s.times(d),l,1),u=c.plus(Te(s,new g(i),l,1)),et(u.d).slice(0,l)===et(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(Ai(g,l+2,A).times(r+""))),c=Te(c,new g(p),l,1),e==null)if(po(c.d,l-y,P,a))g.precision=l+=y,u=s=f=Te(m.minus(1),m.plus(1),l,1),d=J(f.times(f),l,1),i=a=1;else return J(c,g.precision=A,P,re=!0);else return g.precision=A,c;c=u,i+=2}}function _a(o){return String(o.s*o.s/0)}function Mr(o,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ne,t<0&&(n+=ne),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ne;n<i;)o.d.push(+e.slice(n,n+=ne));e=e.slice(n),n=ne-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),re&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Il(o,e){var t,n,i,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),La.test(e))return Mr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(wl.test(e))t=16,e=e.toLowerCase();else if(Al.test(e))t=2;else if(Pl.test(e))t=8;else throw Error(mn+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ma(n,new n(t),r,r*2)),u=yi(e,t,Mt),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(o.s*0):(o.e=Pi(u,l),o.d=u,re=!1,s&&(o=Te(o,i,a*4)),c&&(o=o.times(Math.abs(c)<54?Qe(2,c):fo.pow(2,c))),re=!0,o)}function Bl(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:jn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/ki(5,t)),e=jn(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function jn(o,e,t,n,i){var r,s,a,c,u=1,l=o.precision,m=Math.ceil(l/ne);for(re=!1,c=t.times(t),a=new o(n);;){if(s=Te(a.times(c),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Te(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return re=!0,s.d.length=m+1,s}function ki(o,e){for(var t=o;--e;)t*=o;return t}function Va(o,e){var t,n=e.s<0,i=Ot(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return jt=n?4:1,e;if(t=e.divToInt(i),t.isZero())jt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return jt=Ia(t)?n?2:3:n?4:1,e;jt=Ia(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Nr(o,e,t,n){var i,r,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(gt(t,1,dn),n===void 0?n=p.rounding:gt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=_a(o);else{for(l=Gt(o),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=yi(Gt(d),10,i),d.e=d.d.length),m=yi(l,10,i),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=m,o.e=r,o=Te(o,d,t,n,0,i),m=o.d,r=o.e,u=Sa),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Cr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=yi(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Cr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Ba(o,e){if(o.length>e)return o.length=e,!0}function xl(o){return new this(o).abs()}function Sl(o){return new this(o).acos()}function Kl(o){return new this(o).acosh()}function Cl(o,e){return new this(o).plus(e)}function Rl(o){return new this(o).asin()}function Ll(o){return new this(o).asinh()}function Ol(o){return new this(o).atan()}function Ml(o){return new this(o).atanh()}function Nl(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Ot(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Ot(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Ot(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Te(o,e,r,1)),e=Ot(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Te(o,e,r,1)),t}function _l(o){return new this(o).cbrt()}function Vl(o){return J(o=new this(o),o.e+1,2)}function vl(o,e,t){return new this(o).clamp(e,t)}function El(o){if(!o||typeof o!="object")throw Error(wi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,dn,"rounding",0,8,"toExpNeg",-Yn,0,"toExpPos",0,Yn,"maxE",0,Yn,"minE",-Yn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=Rr[t]),(n=o[t])!==void 0)if(it(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(mn+t+": "+n);if(t="crypto",i&&(this[t]=Rr[t]),(n=o[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(Ca);else this[t]=!1;else throw Error(mn+t+": "+n);return this}function Fl(o){return new this(o).cos()}function Dl(o){return new this(o).cosh()}function va(o){var e,t,n;function i(r){var s,a,c,u=this;if(!(u instanceof i))return new i(r);if(u.constructor=i,xa(r)){u.s=r.s,re?!r.d||r.e>i.maxE?(u.e=NaN,u.d=null):r.e<i.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;re?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return Mr(u,r.toString())}else if(c!=="string")throw Error(mn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),La.test(r)?Mr(u,r):Il(u,r)}if(i.prototype=v,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=El,i.clone=va,i.isDecimal=xa,i.abs=xl,i.acos=Sl,i.acosh=Kl,i.add=Cl,i.asin=Rl,i.asinh=Ll,i.atan=Ol,i.atanh=Ml,i.atan2=Nl,i.cbrt=_l,i.ceil=Vl,i.clamp=vl,i.cos=Fl,i.cosh=Dl,i.div=Wl,i.exp=ql,i.floor=Ul,i.hypot=Gl,i.ln=Xl,i.log=zl,i.log10=Yl,i.log2=Ql,i.max=jl,i.min=Hl,i.mod=Zl,i.mul=$l,i.pow=Jl,i.random=em,i.round=tm,i.sign=nm,i.sin=om,i.sinh=im,i.sqrt=rm,i.sub=sm,i.sum=am,i.tan=um,i.tanh=cm,i.trunc=lm,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function Wl(o,e){return new this(o).div(e)}function ql(o){return new this(o).exp()}function Ul(o){return J(o=new this(o),o.e+1,3)}function Gl(){var o,e,t=new this(0);for(re=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function xa(o){return o instanceof fo||o&&o.toStringTag===Ra||!1}function Xl(o){return new this(o).ln()}function zl(o,e){return new this(o).log(e)}function Ql(o){return new this(o).log(2)}function Yl(o){return new this(o).log(10)}function jl(){return Na(this,arguments,"lt")}function Hl(){return Na(this,arguments,"gt")}function Zl(o,e){return new this(o).mod(e)}function $l(o,e){return new this(o).mul(e)}function Jl(o,e){return new this(o).pow(e)}function em(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:gt(o,1,dn),n=Math.ceil(o/ne),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(Ca);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ne,n&&o&&(i=Qe(10,ne-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ne)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ne&&(t-=ne-n)}return s.e=t,s.d=a,s}function tm(o){return J(o=new this(o),o.e+1,this.rounding)}function nm(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function om(o){return new this(o).sin()}function im(o){return new this(o).sinh()}function rm(o){return new this(o).sqrt()}function sm(o,e){return new this(o).sub(e)}function am(){var o=0,e=arguments,t=new this(e[o]);for(re=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return re=!0,J(t,this.precision,this.rounding)}function um(o){return new this(o).tan()}function cm(o){return new this(o).tanh()}function lm(o){return J(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var fo=v.constructor=va(Rr);bi=new fo(bi);gi=new fo(gi);var M=fo;import gm from"big.js";import pn from"bn.js";import mm from"toformat";var dm=mm,yo=dm;import Ti from"big.js";import pm from"bn.js";import fm from"decimal.js-light";import bo from"bn.js";var _r=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(_r||{}),Ea=9007199254740991;function Z(o){let e=me("Raydium_parseBigNumberish");if(o instanceof bo)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new bo(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Ea||o<=-Ea)&&e.logWithError(`BigNumberish number overflow: ${o}`),new bo(String(o))):typeof o=="bigint"?new bo(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new bo(0))}var hi=me("module/fraction"),Vr=yo(Ti),go=yo(fm),ym={[0]:go.ROUND_DOWN,[1]:go.ROUND_HALF_UP,[2]:go.ROUND_UP},bm={[0]:Ti.roundDown,[1]:Ti.roundHalfUp,[2]:Ti.roundUp},se=class{constructor(e,t=new pm(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new se(this.denominator,this.numerator)}add(e){let t=e instanceof se?e:new se(Z(e));return this.denominator.eq(t.denominator)?new se(this.numerator.add(t.numerator),this.denominator):new se(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof se?e:new se(Z(e));return this.denominator.eq(t.denominator)?new se(this.numerator.sub(t.numerator),this.denominator):new se(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof se?e:new se(Z(e));return new se(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof se?e:new se(Z(e));return new se(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||hi.logWithError(`${e} is not an integer.`),e<=0&&hi.logWithError(`${e} is not positive.`),go.set({precision:e+1,rounding:ym[n]});let i=new go(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||hi.logWithError(`${e} is not an integer.`),e<0&&hi.logWithError(`${e} is negative.`),Vr.DP=e,Vr.RM=bm[n]||1,new Vr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Am=me("Raydium_amount"),Ii=yo(gm);function Fa(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):Am.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends se{constructor(t,n,i=!0,r){let s=new pn(0),a=xn.pow(new pn(t.decimals));if(i)s=Z(n);else{let c=new pn(0),u=new pn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fa(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Ii.DP=this.token.decimals,new Ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},Bn=class extends se{constructor(t,n,i=!0,r){let s=new pn(0),a=xn.pow(new pn(t.decimals));if(i)s=Z(n);else{let c=new pn(0),u=new pn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fa(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=me(r||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new Bn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new Bn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Ii.DP=this.currency.decimals,new Ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as wm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Da}from"@solana/spl-token";var Xt={chainId:101,address:wm.default.toBase58(),programId:Da.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ye={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Da.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Wr}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as Wa,SYSVAR_RENT_PUBKEY as Pm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as km}from"@solana/spl-token";function w({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var vr=[w({pubkey:km,isWritable:!1}),w({pubkey:Wa.programId,isWritable:!1}),w({pubkey:Pm,isWritable:!1})];function Er({publicKey:o,transformSol:e}){let t=Fr(o.toString());if(t instanceof Se)return e&&t.equals(je)?H:t;if(e&&t.toString()===je.toBase58())return H;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Fr(o){try{return new Se(o)}catch{return o}}var Bi=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),fn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rt=new Se("SysvarRent111111111111111111111111111111111"),Dr=new Se("SysvarC1ock11111111111111111111111111111111"),Ht=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),xi=new Se("Sysvar1nstructions1111111111111111111111111"),Si=Wa.programId,Xy=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),zy=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Qy=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Yy=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),jy=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Hy=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Zy=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),$y=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Jy=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),eb=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),tb=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Se("So11111111111111111111111111111111111111112"),je=Se.default;function ht(o){return Er({publicKey:o,transformSol:!0})}var qr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===je.toBase58()||e instanceof Wr&&je.equals(e)){this.decimals=Ye.decimals,this.symbol=Ye.symbol,this.name=Ye.name,this.mint=new Wr(Ye.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?Wr.default:Er({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},we=qr;we.WSOL=new qr(D(L({},Ye),{mint:Ye.address}));var Ur=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Ao=Ur;Ao.SOL=new Ur(Xt);function lb(o,e){return o instanceof we&&e instanceof we?o.equals(e):o instanceof we||e instanceof we?!1:o===e}import hm from"bn.js";var qa=new se(new hm(100)),Le=class extends se{toSignificant(e=5,t,n){return this.mul(qa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(qa).toFixed(e,t,n)}};var Tm=me("Raydium_price"),$e=class extends se{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new se(Gr(n.decimals),Gr(i.decimals))}get raw(){return new se(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&&Tm.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,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};function Ee(o){if(o instanceof Le)return new se(o.numerator,o.denominator);if(o instanceof $e)return o.adjusted;if(o instanceof be)try{return Ee(o.toExact())}catch{return new se(Fe)}if(o instanceof se)return o;let e=String(o),t=Sn(e);return new se(t.numerator,t.denominator)}function Lb(o){var n;if(o instanceof Le)return{fr:new se(o.numerator,o.denominator)};if(o instanceof $e)return{fr:o.adjusted};if(o instanceof be)return{fr:Ee(o.toExact()),decimals:o.token.decimals};if(o instanceof se)return{fr:o};let e=String(o),t=Sn(e);return{fr:new se(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Ob(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Fe)}function Im(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.gt(Fe)}function Mb(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.lte(Fe)}function Nb(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.gte(Fe)}function Bm(o,e){if(o==null||e==null)return!1;let t=Ee(o),n=Ee(e);return t.sub(n).numerator.eq(Fe)}function _b(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);try{return t.div(n)}catch{return t}}function Vb(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.sub(n)}function vb(o){return o==null?!1:!Bm(o,0)}function Eb(o,e){return Im(e,o)?e:o}function Xr(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.mul(n)}function Fb(o,e){if(o==null||e==null)return;let t=Ee(o),n=Ee(e);return t.add(n)}import{PublicKey as xm}from"@solana/web3.js";import Sm from"bn.js";async function Ua(o){new Promise(e=>setTimeout(e,o))}function Xb(){return new Date().getTime()}function zr(o){return typeof o=="object"&&o!==null&&![we,be,xm,se,Sm,$e,Le].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?Fr(o):Array.isArray(o)?o.map(e=>Ie(e)):zr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}var Fe=new De(0),za=new De(1),ig=new De(2),rg=new De(3),sg=new De(5),xn=new De(10),ag=new De(100),ug=new De(1e3),cg=new De(1e4);function Gr(o){return xn.pow(Z(o))}function Sn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof De)return{numerator:o.toString(),denominator:"1"};if(o instanceof se)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:i}}function Ki(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Km(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Cm(o,e=0){return o instanceof De?o:new De(Km(Qa(o).mul(xn.pow(new De(String(e))))))}function Qa(o){if(o instanceof Le)return new se(o.numerator,o.denominator);if(o instanceof $e)return o.adjusted;if(o instanceof be)try{return Qa(o.toExact())}catch{return new se(Fe)}if(o instanceof se)return o;let e=String(o),t=Sn(e);return new se(t.numerator,t.denominator)}function lg(o,e){let{numerator:t,denominator:n}=Sn(o);return new Le(new De(t),new De(n).mul(e!=null&&e.alreadyDecimaled?new De(100):new De(1)))}function mg(o){let{token:e,numberPrice:t,decimalDone:n}=o,i=new we({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=Sn(t),a=n?new De(r).mul(xn.pow(new De(e.decimals))):r,c=new De(s).mul(xn.pow(new De(i.decimals)));return new $e({baseToken:i,denominator:c.toString(),quoteToken:new we(D(L({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Ga(o){let e=new Ao({decimals:6,symbol:"usd",name:"usd"}),t=Cm(Xr(o,10**e.decimals));return new Bn(e,t)}function dg(o,e){return Ga(!e||!o?0:Xr(o,e))}function Rm(o){if(o==null)return;let{numerator:e,denominator:t}=Sn(o.toString());return new se(e,t)}function Lm(o){return o instanceof M}function Xa(o){return Lm(o)?Rm(o):Array.isArray(o)?o.map(e=>Xa(e)):zr(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Xa(t)])):o}var Ya=o=>typeof o=="number",ja=o=>o?new Date(o):new Date,Om=o=>ja(o).getTime();function Ha(o,e,t){let n=Ya(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function Za(o,e,t){let n=Ya(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function fg(o,e){let n=Om(o)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return ja(n)}function Kr(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function bg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function gg(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function Ag(o){return[...new Set(o)]}var Nt=class{constructor(e){this._owner=e}get publicKey(){return Nt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Nt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Nt.isKeyPair(this._owner)}get isPublicKey(){return Nt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Nt.isKeyPair(e)}};import{PublicKey as vm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Em}from"@solana/spl-token";import{ComputeBudgetProgram as $a,Keypair as Ja,PublicKey as eu,Transaction as Ri,TransactionMessage as Mm,VersionedTransaction as Qr}from"@solana/web3.js";var Kn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Kn||{}),E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee"};import{TOKEN_PROGRAM_ID as Nm}from"@solana/spl-token";var Zt=me("Raydium_txUtil"),tu=1644;function Li(o){let e=[],t=[];return o.microLamports&&(e.push($a.setComputeUnitPrice({microLamports:o.microLamports})),t.push(E.SetComputeUnitPrice)),o.units&&(e.push($a.setComputeUnitLimit({units:o.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Hn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function Oi(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function Mi(o,e){o.length<1&&Zt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Zt.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ri;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<tu}catch{return!1}}async function nu(o,e,t,n=!0){let i=new eu("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Ri;s.feePayer=i;for(let u of e)Mi([...s.instructions,u],[i])||(r.push(s),s=new Ri,s.feePayer=i),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await _m(o,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Zt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Zt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Zt.debug("filteredLog:",c),l.length||Zt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ou(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Zt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function $t(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Zt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(o,e){let[t,n]=eu.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function _m(o,e,t){let n=[];if(t){let i=await o.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=i.blockhash,u.lastValidBlockHeight=i.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await o.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Zt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function wo({instructions:o,payer:e,signers:t}){return Mi(o,[e,...t])}function Po({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ja.generate().publicKey.toString()}){let r=new Mm({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Qr(r).serialize()).toString("base64").length<tu}catch{return!1}}var Ci={time:0,data:void 0};async function Lg(o){if(!Ci.data||(Date.now()-Ci.time)/1e3>30){let e=await o.getEpochInfo();return Ci={time:Date.now(),data:e},e}else return Ci.data}var iu=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),Vm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Qr&&(e=iu(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Cn(o){let e=[];return o.forEach(t=>{t instanceof Ri&&(t.recentBlockhash||(t.recentBlockhash=Nm.toBase58()),t.feePayer||(t.feePayer=Ja.generate().publicKey)),e.push(Vm(t))}),console.log("simulate tx string:",e),e}function Og(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Qr&&(e=iu(e)),e.toString("base64")}function le(o,e,t){return ae([o.toBuffer(),(t!=null?t:Em).toBuffer(),e.toBuffer()],new vm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ue}from"@solana/web3.js";var Yr=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ru=new ue("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),jr=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Zn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Fm=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Hr=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ni=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ko=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Dm=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),su=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),yn=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),$n=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ho=new ue("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Wm=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),au=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),qm=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Um=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Gm=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Xm=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),To=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Zr=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),zm=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Qm=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Ym=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),jm=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Io=new ue("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Hm=new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),Bo=new ue("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Zm=new ue("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),xo={IDO_PROGRAM_ID_V1:qm,IDO_PROGRAM_ID_V2:Um,IDO_PROGRAM_ID_V3:Gm,IDO_PROGRAM_ID_V4:Xm},Fg={AMM_V4:ko,AMM_STABLE:Dm,CLMM_PROGRAM_ID:yn,CLMM_LOCK_PROGRAM_ID:$n,CLMM_LOCK_AUTH_ID:ho,FARM_PROGRAM_ID_V3:Yr,FARM_PROGRAM_ID_V5:jr,FARM_PROGRAM_ID_V6:Zn,OPEN_BOOK_PROGRAM:Hr,SERUM_PROGRAM_ID_V3:Ni,UTIL1216:Fm,Router:Wm,CREATE_CPMM_POOL_PROGRAM:To,CREATE_CPMM_POOL_AUTH:Zr,CREATE_CPMM_POOL_FEE_ACC:zm,LOCK_CPMM_PROGRAM:Io,LOCK_CPMM_AUTH:Bo},Dg={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"),CLMM_LOCK_PROGRAM_ID:new ue("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ue("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Qm,CREATE_CPMM_POOL_AUTH:Ym,CREATE_CPMM_POOL_FEE_ACC:jm,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Hm,LCOK_CPMM_AUTH:Zm};import Ue from"bn.js";var zt=1e4;function Ug(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new Ue(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===zt){let a=new Ue(i.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=_t(o.mul(new Ue(zt)),new Ue(zt-i.transferFeeBasisPoints)),c=new Ue(i.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=_t(u.mul(new Ue(i.transferFeeBasisPoints)),new Ue(zt)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=_t(o.mul(new Ue(i.transferFeeBasisPoints)),new Ue(zt)),c=a.gt(r)?r:a;return{amount:o,fee:c,expirationTime:s}}}function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=D(L({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),r=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Ue(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===zt){let c=new Ue(r.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=_t(o.mul(new Ue(zt)),new Ue(zt-r.transferFeeBasisPoints)),u=new Ue(r.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=_t(l.mul(new Ue(r.transferFeeBasisPoints)),new Ue(zt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=_t(o.mul(new Ue(r.transferFeeBasisPoints)),new Ue(zt)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Vt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function _t(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new Ue(0))?t.add(new Ue(1)):t}import{PublicKey as uu,AddressLookupTableAccount as _i}from"@solana/web3.js";async function $r({connection:o,address:e}){let t=await Lt(o,[...new Set(e.map(i=>i.toString()))].map(i=>new uu(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new _i({key:s,state:_i.deserialize(r.data)});n[s.toString()]=a,Vi[s.toString()]=a}return n}var Vi={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new _i({key:new uu("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:_i.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as So,sendAndConfirmTransaction as Jr,Transaction as Ko,TransactionMessage as Co,VersionedTransaction as Ro}from"@solana/web3.js";import $m from"axios";var vi=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await $m.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}=Li(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==So.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(L({},t||{})):this.build(t)}build(e){var n;let t=new Ko;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.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 i=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=r!=null?r:await Hn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),Cn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Jr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:y,skipPreflight:f=!0}=l||{},b=y!=null?y:await Hn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],A=0;for(let h of s){if(++A,A<=p)continue;let I=await Jr(this.connection,h,this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});P.push(I)}return{txIds:P,signedTxs:s}}return{txIds:await await Promise.all(s.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:f})))),signedTxs:s}}if(this.signAllTransactions){let P=s.map((h,I)=>(h.recentBlockhash=b,a[I].length&&h.sign(...a[I]),h));Cn(P);let A=await this.signAllTransactions(P);if(m){let h=0,I=[],T=async()=>{if(!A[h])return;let S=await this.connection.sendRawTransaction(A[h].serialize(),{skipPreflight:f});I.push({txId:S,status:"sent",signedTx:A[h]}),d==null||d([...I]),h++,this.connection.onSignature(S,B=>{let C=I.findIndex(x=>x.txId===S);C>-1&&(I[C].status=B.err?"error":"success"),d==null||d([...I]),B.err||T()},"processed"),this.connection.getSignatureStatus(S)};return await T(),{txIds:I.map(S=>S.txId),signedTxs:A}}else{let h=[];for(let I=0;I<A.length;I+=1){let T=await this.connection.sendRawTransaction(A[I].serialize(),{skipPreflight:f});h.push(T)}return{txIds:h,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=y,s=ve(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=L(L({},this.cluster==="devnet"?{}:Vi),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new So(b));let l=await $r({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?So.default.toBase58():r!=null?r:await Hn(this.connection,this.blockhashCommitment),d=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Ro(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:P}=b||{};if(Cn([p]),(A=this.owner)!=null&&A.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await Oi(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),Cn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let P=await this.connection.sendTransaction(g,{skipPreflight:y});await Oi(this.connection,P),b.push(P)}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,P=[],A=async()=>{if(!b[g])return;let h=await this.connection.sendTransaction(b[g],{skipPreflight:y});P.push({txId:h,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++,this.connection.onSignature(h,I=>{let T=P.findIndex(S=>S.txId===h);T>-1&&(P[T].status=I.err?"error":"success"),d==null||d([...P]),I.err||A()},"processed"),this.connection.getSignatureStatus(h)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let A=await this.connection.sendTransaction(b[P],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=ve(u,["computeBudgetConfig"]),i=t?Li(t):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,d)=>D(L({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...i.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 So(b));if(c.length<12&&wo({instructions:p,payer:this.feePayer,signers:f})||wo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");wo({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Ko().add(...i.instructions,...c)):s.push(new Ko().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>r[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>r[p]).filter(p=>p!==void 0);wo({instructions:t?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Ko().add(...i.instructions,...c)):s.push(new Ko().add(...c)),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))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var P;let{sequentially:d,onTxUpdate:p,skipTxCount:y=0,recentBlockHash:f,skipPreflight:b=!0}=m||{},g=f!=null?f:await Hn(this.connection,this.blockhashCommitment);if(s.forEach(async(A,h)=>{A.recentBlockhash=g,a[h].length&&A.sign(...a[h])}),Cn(s),(P=this.owner)!=null&&P.isKeyPair){if(d){let A=0,h=[];for(let I of s){if(++A,A<=y){h.push("tx skipped");continue}let T=await Jr(this.connection,I,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});h.push(T)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:b}))),signedTxs:s}}if(this.signAllTransactions){let A=await this.signAllTransactions(s.slice(y,s.length)),h=[...s.slice(0,y),...A];if(d){let I=0,T=[],S=async()=>{if(!h[I])return;I<y&&(T.push({txId:"",status:"success",signedTx:h[I]}),p==null||p([...T]),I++,S());let B=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:b});T.push({txId:B,status:"sent",signedTx:h[I]}),p==null||p([...T]),I++,this.connection.onSignature(B,C=>{let x=T.findIndex(R=>R.txId===B);x>-1&&(T[x].status=C.err?"error":"success"),p==null||p([...T]),C.err||S()},"processed"),this.connection.getSignatureStatus(B)};return await S(),{txIds:T.map(B=>B.txId),signedTxs:h}}else{let I=[];for(let T=0;T<h.length;T+=1){let S=await this.connection.sendRawTransaction(h[T].serialize(),{skipPreflight:b});I.push(S)}return{txIds:I,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:i=[]}=b,r=ve(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=L(L({},this.cluster==="devnet"?{}:Vi),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),c=[];for(let P of a)s[P]===void 0&&c.push(new So(P));let u=await $r({connection:this.connection,address:c});for(let[P,A]of Object.entries(u))s[P]=A;let l=t?Li(t):{instructions:[],instructionTypes:[]},m=await Hn(this.connection,this.blockhashCommitment),d=this.signers.reduce((P,A)=>D(L({},P),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(P=>{let A=[...f,P],h=t?[...l.instructions,...A]:A;if(f.length<12&&Po({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s})||Po({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(P);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&Po({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Ro(T))}else{let T=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Ro(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=[P]}}),f.length>0){let A=[...new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(h=>d[h]).filter(h=>h!==void 0);if(t&&Po({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Ro(h))}else{let h=new Co({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Ro(h))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(P=>{P.some(A=>A.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async P=>{var B;let{sequentially:A,onTxUpdate:h,skipTxCount:I=0,recentBlockHash:T,skipPreflight:S=!0}=P||{};if(p.map(async(C,x)=>{y[x].length&&C.sign(y[x]),T&&(C.message.recentBlockhash=T)}),Cn(p),(B=this.owner)!=null&&B.isKeyPair){if(A){let C=0,x=[];for(let R of p){if(++C,C<=I){console.log("skip tx: ",C),x.push("tx skipped");continue}let F=await this.connection.sendTransaction(R,{skipPreflight:S});await Oi(this.connection,F),x.push(F)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:S}))),signedTxs:p}}if(this.signAllTransactions){let C=await this.signAllTransactions(p.slice(I,p.length)),x=[...p.slice(0,I),...C];if(A){let R=0,F=[],O=async()=>{if(!x[R])return;if(R<I){F.push({txId:"",status:"success",signedTx:x[R]}),h==null||h([...F]),R++,O();return}let X=await this.connection.sendTransaction(x[R],{skipPreflight:S});F.push({txId:X,status:"sent",signedTx:x[R]}),h==null||h([...F]),R++,this.connection.onSignature(X,U=>{let q=F.findIndex(Re=>Re.txId===X);q>-1&&(F[q].status=U.err?"error":"success"),h==null||h([...F]),U.err||O()},"processed"),this.connection.getSignatureStatus(X)};return O(),{txIds:[],signedTxs:x}}else{let R=[];for(let F=0;F<x.length;F+=1){let O=await this.connection.sendTransaction(x[F],{skipPreflight:S});R.push(O)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};var cu=(t=>(t.ALL="all",t.Strict="strict",t))(cu||{}),lu=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(lu||{});var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},BA=L({},We);var mu="ray_tab_hash",es="ray_req_hash",Jm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(mu);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(mu,o)),o},Ei=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=ve(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(es)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(D(L({},t),{time:Date.now(),session:Jm()}));try{localStorage.setItem(es,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(es,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return Ei(D(L({},t),{logCount:o,removeLastLog:!0}))}};var Jn=me("Raydium_Api"),ts=new Map;async function zA(o,e,t=1e3){let n;for(;n==null;)try{Jn.debug(`Request ${o} through endlessRetry`),n=await e()}catch(i){Jn.error(`Request ${o} failed, retry after ${t} ms`,i),await Ua(t)}return n}var Fi=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=du.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Jn.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Jn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&Ei({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Jn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&Ei({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Jn.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||We.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await du.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>ts.has(s)?(n.push(ts.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{ts.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ht(t).toBase58(),n&&n!=="undefined"?ht(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||We.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||We.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||We.JITO})).data}};import{merge as ey}from"lodash";var Di="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",pu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as zi,SystemProgram as cp}from"@solana/web3.js";import{AccountLayout as no,createAssociatedTokenAccountInstruction as ys,TOKEN_PROGRAM_ID as wn,TOKEN_2022_PROGRAM_ID as lp}from"@solana/spl-token";var ns=(...o)=>o.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=me(t)}createTxBuilder(e){return this.scope.checkOwner(),new vi({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ns(e))}logInfo(...e){this.logger.info(ns(e))}logAndCreateError(...e){let t=ns(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as op,SystemProgram as ip}from"@solana/web3.js";import rp from"bn.js";import{createCloseAccountInstruction as sp,createInitializeAccountInstruction as ap,createTransferInstruction as up,TOKEN_PROGRAM_ID as to}from"@solana/spl-token";import{Keypair as Jd,PublicKey as Cu}from"@solana/web3.js";import ep from"bn.js";import{TOKEN_PROGRAM_ID as tp}from"@solana/spl-token";function ed(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function os(o,...e){if(!ed(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function is(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function fu(o,e){os(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var qi=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),vt=(o,e)=>o<<32-e|o>>>e;var sw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function td(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function rs(o){return typeof o=="string"&&(o=td(o)),os(o),o}var Wi=class{clone(){return this._cloneInto()}},aw={}.toString;function yu(o){let e=n=>o().update(rs(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function nd(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var bu=(o,e,t)=>o&e^~o&t,gu=(o,e,t)=>o&e^o&t^e&t,Ui=class extends Wi{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=qi(this.buffer)}update(e){is(this);let{view:t,buffer:n,blockLen:i}=this;e=rs(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let c=qi(e);for(;i<=r-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){is(this),fu(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;nd(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=qi(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var od=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]),bn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),gn=new Uint32Array(64),ss=class extends Ui{constructor(){super(64,32,8,!1),this.A=bn[0]|0,this.B=bn[1]|0,this.C=bn[2]|0,this.D=bn[3]|0,this.E=bn[4]|0,this.F=bn[5]|0,this.G=bn[6]|0,this.H=bn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:c}=this;return[e,t,n,i,r,s,a,c]}set(e,t,n,i,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)gn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=gn[m-15],p=gn[m-2],y=vt(d,7)^vt(d,18)^d>>>3,f=vt(p,17)^vt(p,19)^p>>>10;gn[m]=f+gn[m-7]+y+gn[m-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=vt(a,6)^vt(a,11)^vt(a,25),p=l+d+bu(a,c,u)+od[m]+gn[m]|0,f=(vt(n,2)^vt(n,13)^vt(n,22))+gu(n,i,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,r,s,a,c,u,l)}roundClean(){gn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Au=yu(()=>new ss);import{PublicKey as jd}from"@solana/web3.js";import Bu,{isBN as xu}from"bn.js";import{bits as id,BitStructure as rd,blob as sd,Blob as ad,cstr as ud,f32 as cd,f32be as ld,f64 as md,f64be as dd,greedy as pd,Layout as fd,ns64 as yd,ns64be as bd,nu64 as gd,nu64be as Ad,offset as wd,s16 as Pd,s16be as kd,s24 as hd,s24be as Td,s32 as Id,s32be as Bd,s40 as xd,s40be as Sd,s48 as Kd,s48be as Cd,s8 as Rd,seq as Ld,struct as bw,Structure as Od,u16 as Md,u16be as Nd,u24 as _d,u24be as Vd,u32 as vd,u32be as Ed,u40 as Fd,u40be as Dd,u48 as Wd,u48be as qd,u8 as Ud,UInt as Gd,union as Xd,Union as zd,unionLayoutDiscriminator as Qd,utf8 as Yd}from"@solana/buffer-layout";var Lo=fd,wu=Od,Pu=zd,gw=rd,as=Gd,ku=ad,Aw=pd,Gi=Ud,Jt=Md,ww=_d,Oo=vd,Pw=Fd,kw=Wd,hu=gd,hw=Nd,Tw=Vd,Iw=Ed,Bw=Dd,xw=qd,Sw=Ad,Kw=Rd,Cw=Pd,Rw=hd,tt=Id,Lw=xd,Ow=Kd,Mw=yd,Nw=kd,_w=Td,Vw=Bd,vw=Sd,Ew=Cd,Fw=bd,Dw=cd,Ww=ld,qw=md,Uw=dd;var Tu=Ld,Iu=Xd,Gw=Qd,Ae=sd,Xw=ud,zw=Yd,us=id,cs=wd;var Rn=class extends Lo{constructor(t,n,i){super(t,i);this.blob=Ae(t),this.signed=n}decode(t,n=0){let i=new Bu(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new Bu(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Xi=class extends Lo{constructor(t){super(8,t);this._lower=us(Oo(),!1),this._upper=us(Oo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return L(L({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function W(o){return new as(1,o)}function nt(o){return new as(4,o)}function k(o){return new Rn(8,!1,o)}function ee(o){return new Rn(16,!1,o)}function Su(o){return new Rn(1,!0,o)}function eo(o){return new Rn(8,!0,o)}function Ku(o){return new Rn(16,!0,o)}var en=class extends Lo{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new en(Ae(32),e=>new jd(e),e=>e.toBuffer(),o)}var ls=class extends Lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=Gi()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Zw(o,e){return new ls(o,e)}function Ge(o){return new en(Gi(),Hd,Zd,o)}function Hd(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function Zd(o){return o?1:0}function $w(o,e){let t=Oo("length"),n=V([t,Y(o,cs(t,-t.span),"values")]);return new en(n,({values:i})=>i,i=>({values:i}),e)}function Jw(o,e,t){let n=V([k("tag"),e.replicate("data")]);function i({tag:r,data:s}){if(!r.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+r.toString("hex"));return s}return new en(n,i,r=>({tag:o,data:r}),t)}function $d(o){let e=Oo("length"),t=V([e,Ae(cs(e,-e.span),"data")]);return new en(t,({data:n})=>n,n=>({data:n}),o)}function eP(o){return new en($d(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function tP(o,e){let t=Iu(Gi(),e);return o.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function nP(o,e,t){let n=V([Y(o,e,"values")]);return new en(n,({values:i})=>i,i=>({values:i}),t)}var ms=class extends wu{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ms(o,e,t)}var ds=class extends Pu{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function oP(o,e,t){return new ds(o,e,t)}var ps=class extends ku{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function iP(o){return new ps(o)}function Y(o,e,t){let n,i=typeof e=="number"?e:xu(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=xu(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return Tu(o,i,t)}var An=V([K("mint"),K("owner"),k("amount"),nt("delegateOption"),K("delegate"),W("state"),nt("isNativeOption"),k("isNative"),k("delegatedAmount"),nt("closeAuthorityOption"),K("closeAuthority")]);var AP=me("Raydium_Util");function Ru({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=An.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:le(o,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Cu.default,amount:new ep(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Oe({fromPublicKey:o,programId:e=tp,assignSeed:t}){let n=t?btoa(t).slice(0,32):Jd.generate().publicKey.toBase58().slice(0,32);return{publicKey:np(o,n,e),seed:n}}function np(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Au(n);return new Cu(i)}function fs(o){let{mint:e,tokenAccount:t,owner:n,programId:i=to}=o;return ap(t,e,n,i)}function tn(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=to}=o;return sp(e,t,i,n,r)}async function nn(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(An.span,n),c=Z(t).add(new rp(a)),u=Oe({fromPublicKey:i,programId:to});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ip.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:An.span,programId:to}),fs({mint:new op(Ye.address),tokenAccount:u.publicKey,owner:r,programId:to})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[tn({tokenAccount:u.publicKey,payer:i,owner:r})]}}function Lu({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=to}){return up(o,e,t,BigInt(String(n)),i,r)}var Mo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=r!=null?r:!1,this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return le(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=L(L({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:wn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:lp},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ru({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=wn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let r=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of r){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new zi(t.tokenProgram||wn),m=this.getAssociatedTokenAccount(n,new zi(l)),d=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!r||P.pubkey.equals(m))).sort((P,A)=>P.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let P=ys(s,m,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(P),p.instructionTypes.push(E.CreateATA);else if(!(A.owner.equals(l)&&no.decode(A.data).mint.equals(n)&&no.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(P),p.instructionTypes.push(E.CreateATA);if(n.equals(H)&&i.amount){let A=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),i.amount&&(p.instructions.push(Lu({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:wn})),p.instructionTypes.push(E.TransferAmount))}return c||(p.endInstructions.push(tn({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let P=Oe({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(no.span),h=cp.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:P.seed,newAccountPubkey:P.publicKey,lamports:A+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:no.span,programId:l});return p.instructions.push(h,fs({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),c||(p.endInstructions.push(tn({owner:s,payer:i.payer||s,tokenAccount:P.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:P.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=wn,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let r=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!r){let u=this.getAssociatedTokenAccount(t,n),l=await ys(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],r=u}return i&&H.toBase58()===t.toBase58()&&(a.endInstructions=[tn({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=wn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new zi(H).equals(r)){let p=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return L({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=ys(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(wn)&&no.decode(f.data).mint.equals(r)&&no.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=wn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new zi(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=ve(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=ve(m,["tokenAccount"]);c=d,u.addInstruction(p)}return L({tokenAccount:c},u.AllTxData)}};import{PublicKey as Pe,SystemProgram as Lp}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Op}from"@solana/spl-token";import{PublicKey as Eu}from"@solana/web3.js";var bs=V([W("instruction")]),gs=V([W("instruction")]),mp=V([k("rewardState"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardLastUpdateTime"),k("totalReward"),k("totalRewardEmissioned"),k("rewardClaimed"),k("rewardPerSecond"),ee("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),k("rewardType"),Y(k(),15,"padding")]),dp=V([k("state"),k("nonce"),K("lpVault"),K("rewardVault"),K(),K(),k(),k(),k("totalReward"),ee("perShareReward"),k("lastSlot"),k("perSlotReward")]),pp=V([k("state"),k("nonce"),K("lpVault"),K("rewardVaultA"),k("totalRewardA"),ee("perShareRewardA"),k("perSlotRewardA"),W("option"),K("rewardVaultB"),Ae(7),k("totalRewardB"),ee("perShareRewardB"),k("perSlotRewardB"),k("lastSlot"),K()]),fp=V([k(),k("state"),k("nonce"),k("validRewardTokenNum"),ee("rewardMultiplier"),k("rewardPeriodMax"),k("rewardPeriodMin"),k("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Y(mp,5,"rewardInfos"),K("creator"),K(),Y(k(),32,"padding")]),Ou=new Proxy(dp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),Mu=new Proxy(pp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),No=new Proxy(fp,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return D(L({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return D(L({},r),{rewardType:((s=Object.entries(Pn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),yp=V([k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),As=V([W("instruction"),k("nonce"),Y(yp,5,"rewardTimeInfo")]),ws=V([W("instruction"),k("rewardReopenTime"),k("rewardEndTime"),k("rewardPerSecond")]),Ps=V([W("instruction"),k("isSet"),k("rewardPerSecond"),k("rewardOpenTime"),k("rewardEndTime"),k("rewardType")]),HP=V([k("state"),K("id"),K("owner"),k("deposited"),Y(k(),1,"rewardDebts")]),_o=V([k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),1,"rewardDebts"),k(""),k("voteLockedBalance"),Y(k(),15)]),ZP=V([k("state"),K("id"),K("owner"),k("deposited"),Y(k(),2,"rewardDebts")]),Nu=V([k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),2,"rewardDebts"),Y(k(),17)]),_u=V([k(),k("state"),K("id"),K("owner"),k("deposited"),Y(ee(),5,"rewardDebts"),Y(k(),16)]),lt=V([W("instruction"),k("amount")]),bp=V([K("mint"),K("grantAuthority"),k("baselineVoteWeightScaledFactor"),k("maxExtraLockupVoteWeightScaledFactor"),k("lockupSaturationSecs"),Su("digitShift"),Y(W(),7,"reserved1"),Y(k(),7,"reserved2")]),Vu=V([Ae(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Y(W(),32,"reserved1"),Y(bp,4,"votingMints"),eo("timeOffset"),W("bump"),Y(W(),7,"reserved2"),Y(k(),11,"reserved3")]),gp=V([eo("startTime"),eo("endTime"),W("kind"),Y(W(),15,"reserved")]),Ap=V([Y(gp,1,"lockup"),k("amountDeposited_native"),k("amountInitiallyLockedNative"),Ge("isUsed"),Ge("allowClawback"),W("votingMintConfigIdx"),Y(W(),29,"reserved")]),vu=V([Ae(8),K("voterAuthority"),K("registrar"),Y(Ap,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),Y(W(),94,"reserved")]);var rk=me("Raydium_farm_config"),Fu=new Eu("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Du=new Eu("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Wu={3:Ou,5:Mu,6:No},qu={3:_o,5:Nu,6:_u},ks=o=>[3,4,5,6].indexOf(o)!==-1,hs=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},Pn={"Standard SPL":0,"Option tokens":1},xt={[Yr.toString()]:3,[ru.toString()]:4,[jr.toString()]:5,[Zn.toString()]:6};import{PublicKey as oe,SystemProgram as Ln,SYSVAR_CLOCK_PUBKEY as io,SYSVAR_RENT_PUBKEY as kp,TransactionInstruction as He}from"@solana/web3.js";import Qi from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hp,createAssociatedTokenAccountInstruction as Tp,TOKEN_PROGRAM_ID as wt}from"@solana/spl-token";function Ts(o,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function Is(o,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function Bs(o,e){return ae([e.toBuffer()],o)}function xs(o,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function Ss(o,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function Ks(o,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import At from"bn.js";var Vo=me("Raydium.farm.util");function vo({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function st({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Uu=({programId:o,poolId:e})=>ae([e.toBuffer()],o);function Gu(o){return{isSet:new At(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(Pn[o.rewardType])}}function Cs(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function oo(o){let e=qu[o];return e||Vo.logWithError("invalid version",o),e}function wp(o){let e=Wu[o];return e||Vo.logWithError("invalid version",o),e}function Pp(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new At(t)))return o;let i=new At(t).sub(o.lastSlot);o.lastSlot=new At(t);for(let r of o.rewardInfos){if(e.amount.eq(new At(0)))continue;let s=r.perSlotReward.mul(i);r.perShareReward=r.perShareReward.add(s.mul(new At(10).pow(new At(o.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(o.version===6)for(let i of o.rewardInfos){if(i.rewardState.eq(new At(0)))continue;let r=At.min(new At(n),i.rewardEndTime);if(i.rewardOpenTime.gte(r))continue;let a=r.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),c=i.totalReward.sub(i.totalRewardEmissioned);c.lt(a)?(a=c,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(c.div(i.rewardPerSecond))):i.rewardLastUpdateTime=r,!e.amount.eq(new At(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return o}async function hk({connection:o,farmPools:e,owner:t,config:n,chainTime:i}){let r=!1,s=!1,a=new At(10),c=[];for(let d of e){let p=Ie(d);p.version===6?s=!0:r=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:st({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await ze(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=L({},u[g]),y==="state"){let P=wp(p);(!b||!b.data||b.data.length!==P.span)&&Vo.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==An.span)&&Vo.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=An.decode(b.data);else if(y==="ledger"){let P=oo(p);b&&b.data&&(b.data.length!==P.span&&Vo.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=P.decode(b.data))}}let m=s||r?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Pp(u[d].state,u[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new At(9)):a.pow(new At(15)),b=p.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=D(L({},u[d].wrapped),{pendingRewards:b})}return u}function Tk(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Ha(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Za(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Rs(o,e,t,n){let i=await o.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=Vu.decode(i.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=vu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Ip=me("Raydium_farm_instruction"),Eo={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 Fo(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||Ip.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(bs.span);bs.encode({instruction:s},a);let c=[w({pubkey:t}),w({pubkey:n}),w({pubkey:r,isWritable:!1}),w({pubkey:Ln.programId,isWritable:!1}),w({pubkey:kp,isWritable:!1})];return{instruction:new He({programId:i,keys:c,data:a}),instructionType:E.FarmV3CreateLedger}}function Xu(o){var n;let e=Buffer.alloc(As.span);As.encode({instruction:0,nonce:new Qi(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...vr,w({pubkey:o.farmId}),w({pubkey:o.farmAuthority,isWritable:!1}),w({pubkey:o.lpVault}),w({pubkey:o.lpMint,isWritable:!1}),w({pubkey:o.lockVault}),w({pubkey:o.lockMint,isWritable:!1}),w({pubkey:(n=o.lockUserAccount)!=null?n:je}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(w({pubkey:i.rewardMint,isWritable:!1}),w({pubkey:i.rewardVault}),w({pubkey:i.userRewardToken}));return{instruction:new He({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function zu(o){let e=Buffer.alloc(gs.span);gs.encode({instruction:5},e);let t=[w({pubkey:wt,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.authority,isWritable:!1}),w({pubkey:o.lpVault,isWritable:!1}),w({pubkey:o.rewardVault}),w({pubkey:o.userRewardToken}),w({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new He({programId:o.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function Bp(o,e,t,n,i,r,s,a,c,u,l,m,d){let p=V([W("depositEntryIndex"),k("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Eo.voterStakeRegistryDeposit,...f]);return new He({keys:y,programId:o,data:b})}function xp(o,e,t,n){let i=V([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...Eo.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new He({keys:r,programId:o,data:a})}function Sp(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=V([W("depositEntryIndex"),k("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let P=Buffer.from([...Eo.voterStakeRegistryWithdraw,...g]);return new He({keys:b,programId:o,data:P})}function Kp(o,e,t,n,i,r){let s=V([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new He({keys:a,programId:o,data:c})}function Cp(o,e,t,n,i,r,s,a){let c=V([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:xi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Eo.voterStakeRegistryCreateVoter,...l]);return new He({keys:u,programId:o,data:m})}function Rp(o,e,t,n,i,r,s,a,c,u,l,m){let d=V([W("depositEntryIndex"),W("kind"),W("option"),k("startTs"),nt("periods"),Ge("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ln.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:hp,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Eo.voterStakeRegistryCreateDepositEntry,...y]);return new He({keys:p,programId:o,data:f})}async function Fk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ts(n,i,r).publicKey,l=st({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=_o.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Qi(0)))throw Error("user do not has new stake amount");let y=Is(e,a).publicKey,f=Bs(e,a).publicKey,{publicKey:b,nonce:g}=xs(n,u,s),P=le(b,y,c).publicKey,{publicKey:A,nonce:h}=Ss(n,u,s),I=Ks(t,i,r,s).publicKey,T=[],S=le(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Tp(s,S,s,y)),await o.getAccountInfo(b)===null){let F=Kp(t,i,s,r,s,I);T.push(F,Cp(n,u,b,A,s,s,g,h))}let{index:x,isInit:R}=await Rs(o,u,b,y);return R||T.push(Rp(n,u,b,P,s,s,y,x,0,void 0,0,!1)),T.push(Bp(n,u,b,P,S,s,l,a,y,f,e,x,p),xp(n,u,b,A)),T}async function Dk({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ts(n,i,r).publicKey,l=st({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=_o.decode(m.data);if(d.voteLockedBalance.eq(new Qi(0)))throw Error("user has vote locked balance = 0");let p=Is(e,a).publicKey,y=Bs(e,a).publicKey,{publicKey:f}=xs(n,u,s),b=le(f,p,c).publicKey,{publicKey:g}=Ss(n,u,s),P=Ks(t,i,r,s).publicKey,A=[],{index:h,isInit:I}=await Rs(o,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Sp(n,u,f,s,P,g,b,le(s,p,c).publicKey,l,a,p,y,e,h,d.voteLockedBalance)),A}function Ls({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(ws.span);ws.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},r);let s=[w({pubkey:wt,isWritable:!1}),w({pubkey:n.id}),w({pubkey:n.lpVault,isWritable:!1}),w({pubkey:e}),w({pubkey:t}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new He({programId:n.programId,keys:s,data:r})}function Os({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(Ps.span);Ps.encode({instruction:4,isSet:new Qi(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(Pn[i.rewardType])},r);let s=[...vr,w({pubkey:t.id}),w({pubkey:t.authority,isWritable:!1}),w({pubkey:i.mint,isWritable:!1}),w({pubkey:n}),w({pubkey:e}),w({pubkey:o,isWritable:!1,isSigner:!0})];return new He({programId:t.programId,keys:s,data:r})}function Wk(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new oe(e.programId),new oe(e.id)],d=st({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(lt.span);lt.encode({instruction:a,amount:c},p);let y=n===6?[w({pubkey:wt,isWritable:!1}),...u?[w({pubkey:Ln.programId,isWritable:!1})]:[],w({pubkey:m}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:i})]:[w({pubkey:m}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:i}),w({pubkey:new oe(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(w({pubkey:r[f]})),y.push(w({pubkey:new oe(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(w({pubkey:new oe(t.rewardInfos[f].vault)})),y.push(w({pubkey:r[f]}));return new He({programId:l,keys:y,data:p})}function Do(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new oe(e.programId),new oe(e.id)],u=st({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(lt.span);lt.encode({instruction:2,amount:Z(s)},l);let m=[w({pubkey:wt,isWritable:!1}),w({pubkey:c}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(w({pubkey:i[d]}));return new He({programId:a,keys:m,data:l})}function Wo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(lt.span);lt.encode({instruction:12,amount:Z(s)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:i[p]})),d.push(w({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Qu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=V([W("instruction"),k("amount")]),m=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:a[0]}),w({pubkey:r,isSigner:!0,isWritable:!1}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1}),w({pubkey:i[1]}),w({pubkey:new oe(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new He({keys:m,programId:c,data:d})}function qo(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(lt.span);lt.encode({instruction:11,amount:Z(s)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Yu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(lt.span);lt.encode({instruction:10,amount:Z(s)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function ju(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new oe(e.programId),new oe(e.id)],l=st({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(lt.span);lt.encode({instruction:11,amount:Z(s)},m);let d=[w({pubkey:u}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new oe(t.lpVault)}),w({pubkey:i[0]}),w({pubkey:new oe(t.rewardInfos[0].vault)}),w({pubkey:io,isWritable:!1}),w({pubkey:wt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:i[p]})),d.push(w({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new He({programId:c,keys:d,data:m})}function Hu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new oe(e.programId),new oe(e.id)],u=st({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(lt.span);lt.encode({instruction:1,amount:Z(s)},l);let m=[w({pubkey:wt,isWritable:!1}),w({pubkey:Ln.programId,isWritable:!1}),w({pubkey:c}),w({pubkey:new oe(t.authority),isWritable:!1}),w({pubkey:new oe(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(w({pubkey:i[d]}));return new He({programId:a,keys:m,data:l})}var Uo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(je)){let n=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Cs(D(L({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=Zn,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Pe(e.lpMint.address),lockInfo:{lockMint:Fu,lockVault:Du},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Oe({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(No.span);c.addInstruction({instructions:[Lp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:No.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Uu({programId:new Pe(a.programId),poolId:l.publicKey}),y=vo({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(Pn[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Gu(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=I.mint.equals(je)?new Pe(Ye.address):I.mint;b.push({rewardMint:B,rewardVault:vo({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:new Pe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});P&&c.addInstruction(P),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:h}=Xu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[h]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let r=xt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(je)?new Pe(Ye.address):n.mint,l=a.rewardInfos.findIndex(g=>new Pe(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:je,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ls({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=xt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(je)?new Pe(Ye.address):m.mint,p=a.rewardInfos.findIndex(A=>new Pe(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:je,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=Ls({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[P],instructionTypes:[E.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=xt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(je)?new Pe(Ye.address):i.mint,m=vo({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Os({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=xt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(je)?new Pe(Ye.address):l.mint,d=vo({programId:new Pe(n.programId),poolId:new Pe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Os({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:D(L({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=xt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),ks(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Pe(n.programId),new Pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=st({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let O of this.scope.account.tokenAccounts)if(a){let X=le(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&X.equals(O.publicKey)&&(A[O.mint.toString()]=O.publicKey)}else A[O.mint.toString()]=O.publicKey;let h=b.lpMint,I=A[h.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let O of m){let X=s&&O.mint.address===H.toString(),U=A[O.mint.address];if(!U){let{account:q,instructionParams:Re}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Pe(O.mint.address),notUseTokenAccount:X,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!X,associatedOnly:X?!1:a,checkCreateATAOwner:c});U=q,Re&&P.addInstruction(Re)}A[O.mint.address]=U,T.push(U)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=oo(p).decode(B.data)),n.programId!==Zn.toString()&&!S){let{instruction:O,instructionType:X}=Fo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[O],instructionTypes:[X]})}let C=hs({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Pe(O))},R=p===6?Hu(x):p===5?ju(x):Yu(x),F={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return P.addInstruction({instructions:[R],instructionTypes:[F[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=xt[n.programId];ks(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let C of this.scope.account.tokenAccounts)if(c){let x=le(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(!r&&p!==4){let C=st({programId:new Pe(n.programId),poolId:new Pe(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)oo(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:R,instructionType:F}=Fo({id:new Pe(y.id),programId:new Pe(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[R],instructionTypes:[F]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else r&&r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=y.lpMint.address,P=s&&g===H.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Pe(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:c,checkCreateATAOwner:u});A=C,x&&f.addInstruction(x)}b[g.toString()]=A;let h=[];for(let C of d){let x=s&&C.mint.address===H.toString(),R=b[C.mint.address];if(!R){let{account:F,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new Pe(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:c,checkCreateATAOwner:u});R=F,O&&f.addInstruction(O)}b[C.mint.address]=R,h.push(R)}let I=hs({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:h});I&&this.logAndCreateError(I);let T={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new Pe(C))},S=p===6?Do(T):p===5?Wo(T):p===4?Qu(T):qo(T),B={3:E.FarmV3Withdraw,4:E.FarmV4Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=xt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===je.toString()?new Pe(Ye.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:je,u=this.createTxBuilder(),l;if(t.equals(je)){let y=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Cs(D(L({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Op(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=zu({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=le(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)=>D(L({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=xt[f],h=b.address,I=n&&h===H.toString(),T=m[h];if(!T){let{account:F,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Pe(h),notUseTokenAccount:I,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:r,checkCreateATAOwner:s});T=F,O&&l.addInstruction(O)}m[h.toString()]=T;let S=[];for(let F of g){let O=n&&F.mint.address===H.toString(),X=m[F.mint.address];if(!X){let{account:U,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new Pe(F.mint.address),notUseTokenAccount:O,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:r,checkCreateATAOwner:s});X=U,q&&l.addInstruction(q)}m[F.mint.address]=X,S.push(X)}let B=p[P],C={amount:Fe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(F=>new Pe(F))},x=A===6?Do(C):A===5?Wo(C):qo(C),R={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[R[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as qe}from"@solana/web3.js";import{AccountLayout as Bf,NATIVE_MINT as sr,TOKEN_PROGRAM_ID as hn}from"@solana/spl-token";import{Keypair as Ji,PublicKey as G,SystemProgram as vn,TransactionInstruction as pt}from"@solana/web3.js";import gc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ws,TOKEN_2022_PROGRAM_ID as Yt,TOKEN_PROGRAM_ID as xe}from"@solana/spl-token";import Gp from"bn.js";import St from"bn.js";var ye=new St(0),Tt=new St(1),on=new St(-1),It=new St(1).shln(64),Yi=new St(1).shln(128),Ms=It.sub(Tt),Go=64,Zu=Yi.subn(1),at=-443636,mt=-at,Kt=new St("4295048016"),Ct=new St("79226673521066979257578248091"),ji=new St("4295048017"),Hi=new St("79226673521066979257578248090"),$u=16,Ju="59543866431248",ec="184467440737095516",tc="15793534762490258745",Zi=new St(10).pow(new St(6)),Mp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Mp||{}),Ah={[500]:10,[3e3]:60,[1e4]:200},wh={version:6,liquidity:ye,tickCurrent:0,feeGrowthGlobalX64A:ye,feeGrowthGlobalX64B:ye,protocolFeesTokenA:ye,protocolFeesTokenB:ye,swapInAmountTokenA:ye,swapOutAmountTokenB:ye,swapInAmountTokenB:ye,swapOutAmountTokenA:ye,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},nc={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:[]},Ph=new St("18446744073700000000");import ce from"bn.js";function oc(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function hh(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Th(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function $i(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ns(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function _s(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Xo(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function ic(o,e){return Xo(o,e)?null:Ns(o,e)}function rc(o,e){return Xo(o,e)?null:_s(o,e)}var Np=Buffer.from("amm_config","utf8"),_p=Buffer.from("pool","utf8"),Vp=Buffer.from("pool_vault","utf8"),vp=Buffer.from("pool_reward_vault","utf8"),sc=Buffer.from("position","utf8"),Ep=Buffer.from("tick_array","utf8"),Fp=Buffer.from("operation","utf8"),Dp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Wp=Buffer.from("observation","utf8");function Sh(o,e){return ae([Np,oc(e)],o)}function ac(o,e,t,n){return ae([_p,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Vs(o,e,t){return ae([Vp,e.toBuffer(),t.toBuffer()],o)}function uc(o,e,t){return ae([vp,e.toBuffer(),t.toBuffer()],o)}function de(o,e,t){return ae([Ep,e.toBuffer(),$i(t)],o)}function Et(o,e,t,n){return ae([sc,e.toBuffer(),$i(t),$i(n)],o)}function dt(o,e){return ae([sc,e.toBuffer()],o)}function On(o){return ae([Buffer.from("metadata","utf8"),Ht.toBuffer(),o.toBuffer()],Ht)}function zo(o){return ae([Fp],o)}function ot(o,e){return ae([Dp,e.toBuffer()],o)}function cc(o,e){return ae([Wp,e.toBuffer()],o)}var lc=Buffer.from("locked_position","utf8");function vs(o,e){return ae([lc,e.toBuffer()],o)}function Qo(o,e){return ae([lc,e.toBuffer()],o)}import{PublicKey as Ft}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as mc}from"@solana/spl-token";import Be from"bn.js";import Qt from"bn.js";var Yo=class{static getfeeGrowthInside(e,t,n){let i=new Qt(0),r=new Qt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Qt(0),a=new Qt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,It),c=t.tokenFeesOwedA.add(a),u=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,It),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,It),c=t.tokenFeesOwedA.add(a),u=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,It),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ie.wrappingSubU128(c,u.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,It),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ie.wrappingSubU128(c,u.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,It),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var b,g,P,A;let a=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new Qt(new M(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),ge(new Qt(new M(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:Vt(d.expirationTime,p.expirationTime)}}};var qp=15,fe=class{static async getTickArrays(e,t,n,i,r,s,a){let c=[],u=j.getTickArrayStartIndexByTick(i,r),l=j.getInitializedTickArrayInRange(s,a,r,u,Math.floor(qp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=de(t,n,l[p]);c.push(y)}let m=(await Lt(e,c)).map(p=>p!==null?jo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=D(L({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,r){let s=Math.floor(e/fe.tickCount(t)),a=n?j.searchLowBitFromStart(i,r,s-1,1,t):j.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=Ze-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<Ze;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=j.getTickArrayStartIndexByTick(i,r),c=Math.floor((i-a)/r),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Ze;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=de(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>mt)return!1;let n=j.getTickArrayStartIndexByTick(at,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ze*e}};var Es=14,rn=class{static maxTickInTickarrayBitmap(e){return e*Ze*Mn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!fe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-fe.tickCount(n):t+fe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*Ze,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=ic(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=rc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-fe.tickCount(n)}}}},Ho=class{static getBitmapOffset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=rn.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=rn.maxTickInTickarrayBitmap(e),n=-t;if(mt<=t)throw Error(`extensionTickBoundary check error: ${mt}, ${t}`);if(n<=at)throw Error(`extensionTickBoundary check error: ${n}, ${at}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=fe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=rn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=j.mergeTickArrayBitmap(e).shln(Mn-1-a),u=Xo(512,c)?null:Ns(512,c);if(u!==null){let l=t-u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Xo(512,c)?null:_s(512,c);if(u!==null){let l=t+u*fe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-fe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%rn.maxTickInTickarrayBitmap(t),i=Math.floor(n/fe.tickCount(t));return e<0&&n!=0&&(i=Mn-i),i}};var Me=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Nn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(on),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,r){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=de(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Nn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(on),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Me.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Ho.checkTickArrayIsInit(fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/fe.tickCount(e.tickSpacing)),i=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=fe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=rn.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Ho.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<at||t>mt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=D(L({},m),{perSecond:ie.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ft(d)});if(p.tokenMint.equals(Ft.default))continue;if(n<=p.openTime.toNumber()||i.eq(ye)){s.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ie.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),P=ie.mulDivFloor(f,p.emissionsPerSecondX64,It),A=p.rewardTotalEmissioned.add(P);s.push(D(L({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=j.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=rn.maxTickInTickarrayBitmap(e),n=-t;return t>mt&&(t=fe.getArrayStartIndex(mt,e)+fe.tickCount(e)),n<at&&(n=fe.getArrayStartIndex(at,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!fe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/fe.tickCount(t)*Mn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await ze(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=pc.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=de(c.programId,c.id,m);r.push({pubkey:d}),i[d.toString()]=c.id}}let s=await ze(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=jo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=D(L({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:r=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(dt(p,d).publicKey);let l=await Lt(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Zo.decode(d.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:h}=pe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:h,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>D(L({},B),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await Lt(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=jo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,h=y[m[P].toString()],I=y[m[A].toString()],T=h.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await Yo.GetPositionFees(f,g,T,S),x=await Yo.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=B.gte(new Be(0))?B:new Be(0),g.tokenFeeAmountB=C.gte(new Be(0))?C:new Be(0);for(let R=0;R<x.length;R++)g.rewardInfos[R].pendingReward=x[R].gte(new Be(0))?x[R]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var F;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Kt.add(new Be(1)):Ct.sub(new Be(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:P}=Me.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((F=p.fee)!=null?F:ye),u,c),A=ge(f,d,i,!1),h=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?h:new M(1).div(h),T=f.mul(new Be(Math.floor((1-s)*1e10))).div(new Be(1e10)),S=ge(T,d,i,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(I).sub(B).abs(),x=B,R=new Le(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Vt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:R,fee:P,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new we(D(L({},u),{mint:u.address,isToken2022:u.programId===mc.toBase58()})),new we(D(L({},l),{mint:l.address,isToken2022:l.programId===mc.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:A,priceImpact:h,fee:I,remainingAccounts:T,executionPriceX64:S}=Me.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ft(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),B=D(L({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=D(L({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=D(L({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),R=new $e({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),F=new $e({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),O=new be(m,I);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:R,executionPrice:F,priceImpact:h,fee:O,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Ct.sub(new Be(1)):Kt.add(new Be(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Me.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:ye),l),b=c?e.mintB.address:e.mintA.address,g=ge(d,u[b],i,!1),P=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?P:new M(1).div(P),h=d.mul(new Be(Math.floor((1+s)*1e10))).div(new Be(1e10)),I=ge(h,u[b],i,!0),T=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(A).sub(T).abs(),B=T,C=new Le(new M(S).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Vt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let r=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[ht(e.mintA.address).toString()],d=i[ht(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:h,amountSlippageB:I}=pe.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),T=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(A.toString()).div(new M(10).pow(y)).mul(d.value)),S=new M(h.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(I.toString()).div(new M(10).pow(y)).mul(d.value)),B=new M(1).div(T.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),R=3600*24*365,F=e.rewardDefaultInfos.map(O=>{var q,Re;let X=O.mint.decimals,U=i[O.mint.address];return c<((q=O.startTime)!=null?q:0)||c>((Re=O.endTime)!=null?Re:0)||!O.perSecond||!U||X===void 0?0:new M(U.value).mul(new M(O.perSecond).mul(R)).div(new M(10).pow(X)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:F,apr:x+F.reduce((O,X)=>O+X,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new M(y.amount.sub((P=y.fee)!=null?P:ye).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?pe.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let A=pe.getLiquidityFromTokenAmountA(l,d,f,!a),h=pe.getLiquidityFromTokenAmountB(m,l,f);b=t?A:h}else b=t?new Be(0):pe.getLiquidityFromTokenAmountB(m,d,f);return Me.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var b,g,P,A;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),ge(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Vt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new Ft(c.id));(await Lt(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=_n.decode(c.data))});let s=t.map(c=>ot(new Ft(c.programId),new Ft(c.id)).publicKey),a=await Me.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>D(L({},c),{[u.id]:D(L({},n[u.id]),{id:new Ft(u.id),version:6,programId:new Ft(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:D(L({},u.config),{id:new Ft(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapInfo:a[ot(new Ft(u.programId),new Ft(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function dT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var A,h,I,T;let[u,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=te.priceToSqrtPriceX64(new M(o.price),o.mintA.decimals,o.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[ge(m,(A=o.mintA.extensions)==null?void 0:A.feeConfig,a,!c),ge(d,(h=o.mintB.extensions)==null?void 0:h.feeConfig,a,!c)],P=pe.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:ye),g.amount.sub((T=g.fee)!=null?T:ye));return pe.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:P,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var Fs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function dc(o){return D(L({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Fs,week:Fs,month:Fs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:D(L({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ie=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(ye)||(r=r.add(Tt)),r}static mulDivFloor(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(ye))throw new Error("division by 0");return e.mul(t).add(n.sub(Tt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ce(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Yi).sub(t).mod(Yi)}};function Je(o,e){return Ds(o.mul(e),64,256)}function Up(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Ds(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ie.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ie.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(ye))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(ye))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(ye))return e;let r=t.shln(Go);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?ie.mulDivCeil(s,e,a):ie.mulDivRoundingUp(s,Tt,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return ie.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(Go);if(i)return e.add(r.div(t));{let s=ie.mulDivRoundingUp(r,Tt,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<at||e>mt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ce("18445821805675395072"):new ce("18446744073709551616");return(t&2)!=0&&(n=Je(n,new ce("18444899583751176192"))),(t&4)!=0&&(n=Je(n,new ce("18443055278223355904"))),(t&8)!=0&&(n=Je(n,new ce("18439367220385607680"))),(t&16)!=0&&(n=Je(n,new ce("18431993317065453568"))),(t&32)!=0&&(n=Je(n,new ce("18417254355718170624"))),(t&64)!=0&&(n=Je(n,new ce("18387811781193609216"))),(t&128)!=0&&(n=Je(n,new ce("18329067761203558400"))),(t&256)!=0&&(n=Je(n,new ce("18212142134806163456"))),(t&512)!=0&&(n=Je(n,new ce("17980523815641700352"))),(t&1024)!=0&&(n=Je(n,new ce("17526086738831433728"))),(t&2048)!=0&&(n=Je(n,new ce("16651378430235570176"))),(t&4096)!=0&&(n=Je(n,new ce("15030750278694412288"))),(t&8192)!=0&&(n=Je(n,new ce("12247334978884435968"))),(t&16384)!=0&&(n=Je(n,new ce("8131365268886854656"))),(t&32768)!=0&&(n=Je(n,new ce("3584323654725218816"))),(t&65536)!=0&&(n=Je(n,new ce("696457651848324352"))),(t&131072)!=0&&(n=Je(n,new ce("26294789957507116"))),(t&262144)!=0&&(n=Je(n,new ce("37481735321082"))),e>0&&(n=Zu.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Ct)||e.lt(Kt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ce(t-64),i=Up(n,32,128),r=new ce("8000000000000000","hex"),s=0,a=new ce(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new ce(0))&&s<$u;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new ce(Ju)),d=Ds(m.sub(new ce(ec)),64,128).toNumber(),p=Ds(m.add(new ce(tc)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Vn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=Vn.getTickWithPriceAndTickspacing(e,t,n,i),s=te.getSqrtPriceX64FromTick(r);return te.sqrtPriceX64ToPrice(s,n,i)}},pe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Go),s=t.sub(e);return i?ie.mulDivRoundingUp(ie.mulDivCeil(r,s,t),Tt,e):ie.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(ye))throw new Error("sqrtPriceX64A must greater than 0");return i?ie.mulDivCeil(n,t.sub(e),It):ie.mulDivFloor(n,t.sub(e),It)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?ie.mulDivRoundingUp(a,Tt,Ms):a.shrn(Go)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ie.mulDivFloor(n,Ms,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new ce(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,i,r),a=pe.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new ce(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,m=new ce(new M(c.toString()).mul(l).toFixed(0)),d=new ce(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var P,A,h,I;let u=te.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=pe.getAmountsFromLiquidity(u,l,m,i,s),[y,f]=[ge(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),ge(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[ge(new ce(new M(p.amountA.toString()).mul(d).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),ge(new ce(new M(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Vt(y.expirationTime,f.expirationTime)}}},Nn=class{static swapCompute(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(ye))throw new Error("amountSpecified must not be 0");if(y||(y=s?Kt.add(Tt):Ct.sub(Tt)),s){if(y.lt(Kt))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(Ct))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(ye),g={amountSpecifiedRemaining:d,amountCalculated:ye,sqrtPriceX64:m,tick:u>p?Math.min(p+fe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ce(0)},P=p,A=n[p],h=0,I=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(ye)&&!g.sqrtPriceX64.eq(y);){h>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,s,I),B=S||null,C=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let R=Me.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},P,s);if(!R.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")}P=R.nextStartIndex;let{publicKey:F}=de(e,t,P);C=F,A=n[P];try{B=j.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=B.tick,T.initialized=B.liquidityGross.gtn(0),p!==P&&C&&(g.accounts.push(C),p=P),T.tickNext<at?T.tickNext=at:T.tickNext>mt&&(T.tickNext=mt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let x;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?x=y:x=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Nn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let R=B.liquidityNet;s&&(R=R.mul(on)),g.liquidity=pe.addDelta(g.liquidity,R)}I=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let R=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=R!=g.tick&&!s&&A.startTickIndex===R,g.tick=R}++h}try{let{nextStartIndex:T,isExist:S}=fe.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==T&&(g.accounts.push(de(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:ye,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r){let s={sqrtPriceX64Next:new ce(0),amountIn:new ce(0),amountOut:new ce(0),feeAmount:new ce(0)},a=e.gte(t),c=i.gte(ye);if(c){let l=ie.mulDivFloor(i,Zi.sub(new ce(r.toString())),Zi);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(on).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,i.mul(on),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(i.mul(on))&&(s.amountOut=i.mul(on)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=ie.mulDivCeil(s.amountIn,new ce(r),Zi.sub(new ce(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ze=60,Mn=512,j=class{static getTickArrayAddressByTick(e,t,n,i){let r=j.getTickArrayStartIndexByTick(n,i),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Ze)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=fe.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*fe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ze,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Ze,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ze:e+t*Ze}static mergeTickArrayBitmap(e){let t=new Gp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*Ze));return[...j.searchLowBitFromStart(e,t,s-1,r,n),...j.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,Mn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,i,r);for(let c of a){let{publicKey:u}=de(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=fe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<at||e>mt}static nextInitTick(e,t,n,i,r){if(fe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<Ze;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ze-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ze;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),r=Vn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=te.getSqrtPriceX64FromTick(t),r=te.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),r=Vn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(r),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}};var fc=V([Ae(8),W("bump"),Jt("index"),K(""),nt("protocolFeeRate"),nt("tradeFeeRate"),Jt("tickSpacing"),Y(k(),8,"")]),Xp=V([nt("blockTimestamp"),eo("tickCumulative"),Y(k(),4)]),yc=V([Ae(8),Ge("initialized"),k("recentEpoch"),Jt("observationIndex"),K("poolId"),Y(Xp,100,"observations"),Y(k(),4)]),zp=V([W("rewardState"),k("openTime"),k("endTime"),k("lastUpdateTime"),ee("emissionsPerSecondX64"),k("rewardTotalEmissioned"),k("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),ee("rewardGrowthGlobalX64")]),_n=V([Ae(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Jt("tickSpacing"),ee("liquidity"),ee("sqrtPriceX64"),tt("tickCurrent"),nt(),ee("feeGrowthGlobalX64A"),ee("feeGrowthGlobalX64B"),k("protocolFeesTokenA"),k("protocolFeesTokenB"),ee("swapInAmountTokenA"),ee("swapOutAmountTokenB"),ee("swapInAmountTokenB"),ee("swapOutAmountTokenA"),W("status"),Y(W(),7,""),Y(zp,3,"rewardInfos"),Y(k(),16,"tickArrayBitmap"),k("totalFeesTokenA"),k("totalFeesClaimedTokenA"),k("totalFeesTokenB"),k("totalFeesClaimedTokenB"),k("fundFeesTokenA"),k("fundFeesTokenB"),k("startTime"),Y(k(),15*4-3,"padding")]),Qp=V([ee("growthInsideLastX64"),k("rewardAmountOwed")]),Zo=V([Ae(8),W("bump"),K("nftMint"),K("poolId"),tt("tickLower"),tt("tickUpper"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),Y(Qp,3,"rewardInfos"),Y(k(),8,"")]),VT=V([Ae(8),W("bump"),K("poolId"),tt("tickLowerIndex"),tt("tickUpperIndex"),ee("liquidity"),ee("feeGrowthInsideLastX64A"),ee("feeGrowthInsideLastX64B"),k("tokenFeesOwedA"),k("tokenFeesOwedB"),Y(ee(),3,"rewardGrowthInside"),Y(k(),8,"")]),Yp=V([tt("tick"),Ku("liquidityNet"),ee("liquidityGross"),ee("feeGrowthOutsideX64A"),ee("feeGrowthOutsideX64B"),Y(ee(),3,"rewardGrowthsOutsideX64"),Y(nt(),13,"")]),jo=V([Ae(8),K("poolId"),tt("startTickIndex"),Y(Yp,Ze,"ticks"),W("initializedTickCount"),Y(W(),115,"")]),bc=V([Ae(329),Y(K(),100,"whitelistMints")]),pc=V([Ae(8),K("poolId"),Y(Y(k(),8),Es,"positiveTickArrayBitmap"),Y(Y(k(),8),Es,"negativeTickArrayBitmap")]),vT=V([k(),W("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Y(k(),8)]),ET=V([Ae(8),W("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),k("recentEpoch"),Y(k(),8)]);yc.span;var Ac=me("Raydium_Clmm"),Dt={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]},wc=[188,37,179,131,82,150,84,73],Pc=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=V([ee("sqrtPriceX64"),k("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let P=Buffer.from([...Dt.createPool,...g]);return new pt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new G(i.address),new G(r.address)],{publicKey:m}=ac(t,s,u,l),{publicKey:d}=cc(t,m),{publicKey:p}=Vs(t,m,u),{publicKey:y}=Vs(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new G(i.programId||xe),l,y,new G(r.programId||xe),ot(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x){let R=V([tt("tickLowerIndex"),tt("tickUpperIndex"),tt("tickArrayLowerStartIndex"),tt("tickArrayUpperStartIndex"),ee("liquidity"),k("amountMaxA"),k("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),F=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...F],X=Buffer.alloc(R.span);R.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},X);let U=Buffer.from([...Dt.openPosition,...X]);return new pt({keys:O,programId:e,data:U})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new G(e.programId),new G(e.id)],y;if(l)y=new G((await l(1))[0]);else{let B=Ji.generate();m.push(B),y=B.publicKey}let f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:P}=de(d,p,b),{publicKey:A}=le(n.wallet,y,xe),{publicKey:h}=On(y),{publicKey:I}=dt(d,y),{publicKey:T}=Et(d,p,i,r),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new G(e.programId),new G(e.id)],y;if(l)y=new G((await l(1))[0]);else{let B=Ji.generate();m.push(B),y=B.publicKey}let f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(d,p,f),{publicKey:P}=de(d,p,b),{publicKey:A}=le(n.wallet,y,xe),{publicKey:h}=On(y),{publicKey:I}=dt(d,y),{publicKey:T}=Et(d,p,i,r),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,f,b,u,s,a,c,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P,A,h,I,T,S,B,C,x){let R=V([tt("tickLowerIndex"),tt("tickUpperIndex"),tt("tickArrayLowerStartIndex"),tt("tickArrayUpperStartIndex"),ee("liquidity"),k("amountMaxA"),k("amountMaxB"),Ge("withMetadata"),W("optionBaseFlag"),Ge("baseFlag")]),F=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...F],X=Buffer.alloc(R.span);R.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new gc(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},X);let U=Buffer.from([...Dt.openPosition,...X]);return new pt({keys:O,programId:e,data:U})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new G((await l(1))[0]);else{let B=Ji.generate();d.push(B),m=B.publicKey}let[p,y]=[new G(e.programId),new G(e.id)],f=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=de(p,y,f),{publicKey:P}=de(p,y,b),{publicKey:A}=le(n.wallet,m,xe),{publicKey:h}=On(m),{publicKey:I}=dt(p,m),{publicKey:T}=Et(p,y,i,r),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,h,T,g,P,I,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(t.mintA.address),new G(t.mintB.address),i,r,f,b,s,a,c,u,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:h,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r){let s=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Dt.closePosition,...c]);return new pt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let r=new G(e.programId),{publicKey:s}=le(n.wallet,i.nftMint,xe),{publicKey:a}=dt(r,i.nftMint),c=[];return c.push(this.closePositionInstruction(r,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P){let A=V([ee("liquidity"),k("amountMaxA"),k("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Dt.increaseLiquidity,...T]);return new pt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a}){let[c,u]=[new G(e.programId),new G(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=dt(c,n.nftMint),{publicKey:b}=Et(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),r,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a}){let[c,u]=[new G(e.programId),new G(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=de(c,u,l),{publicKey:p}=de(c,u,m),{publicKey:y}=le(i.wallet,n.nftMint,xe),{publicKey:f}=dt(c,n.nftMint),{publicKey:b}=Et(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,i.wallet,y,f,u,b,d,p,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),r,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(c,u).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P){let A=V([ee("liquidity"),k("amountMaxA"),k("amountMaxB"),W("optionBaseFlag"),Ge("baseFlag")]),h=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(A.span);A.encode({liquidity:new gc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Dt.increaseLiquidity,...T]);return new pt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P,A){let h=V([ee("liquidity"),k("amountMinA"),k("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(h.span);h.encode({liquidity:b,amountMinA:g,amountMinB:P},S);let B=Buffer.from([...Dt.decreaseLiquidity,...S]);return new pt({keys:T,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new G(e.programId),new G(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,m),{publicKey:y}=de(u,l,d),{publicKey:f}=le(i.wallet,n.nftMint,c),{publicKey:b}=dt(u,n.nftMint),{publicKey:g}=Et(u,l,n.tickLower,n.tickUpper),P=[];for(let I=0;I<e.rewardDefaultInfos.length;I++)P.push({poolRewardVault:new G(t.rewardInfos[I].vault),ownerRewardVault:i.rewardAccounts[I],rewardMint:new G(e.rewardDefaultInfos[I].mint.address)});let A=[],h=this.decreaseLiquidityInstruction(u,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),P,r,s,a,Me.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0);return A.push(h),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g){let P=V([k("amount"),k("otherAmountThreshold"),ee("sqrtPriceLimitX64"),Ge("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Dt.swap,...I]);return new pt({keys:h,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new G(e.programId),new G(e.id)],[d,p]=[new G(t.vault.A),new G(t.vault.B)],[y,f]=[new G(e.mintA.address),new G(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,m,new G(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new G(e.programId),new G(e.id)],[d,p]=[new G(t.vault.A),new G(t.vault.B)],[y,f]=[new G(e.mintA.address),new G(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new G(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=V([k("openTime"),k("endTime"),ee("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Dt.initReward,...f]);return new pt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new G(e.programId),new G(e.id)],a=uc(r,s,i.mint).publicKey,c=zo(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new G(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,c,u,l,m,d){let p=V([W("rewardIndex"),ee("emissionsPerSecondX64"),k("openTime"),k("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Dt.setRewardEmissions,...f]);return new pt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new G(e.programId),new G(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new G(t.rewardInfos[d].vault),u=new G(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=zo(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new G(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let c=V([W("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Dt.collectReward,...l]);return new pt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new G(e.programId),new G(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new G(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ac.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,getEphemeralSigners:a}){let c=[],u;if(a)u=new G((await a(1))[0]);else{let b=Ji.generate();c.push(b),u=b.publicKey}let{publicKey:l}=le(r,s,xe),{publicKey:m}=dt(n,s),d=Qo(e,u).publicKey,p=le(r,u,xe).publicKey,y=On(u).publicKey,f=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:u,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:u,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:c,instructionTypes:[E.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,lockPositionId:c,lockNftMint:u,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ht,isSigner:!1,isWritable:!1},{pubkey:Ws,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1}],y=V([Ge("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...wc,...f]);return new pt({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=le(i,r,xe),{publicKey:a}=dt(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:vs(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:vn.programId,isSigner:!1,isWritable:!1}];return new pt({keys:c,programId:e,data:Buffer.from(wc)})}static harvestLockPositionInstruction(e){let[t,n]=[new G(e.poolKeys.programId),new G(e.poolKeys.id)],i=j.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=j.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,i),{publicKey:a}=de(t,n,r),{publicKey:c}=le(e.owner,e.ownerPosition.nftMint,xe),{publicKey:u}=dt(t,e.ownerPosition.nftMint),{publicKey:l}=Et(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new G(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new G(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:vs(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new G(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new G(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new pt({keys:p,programId:e.programId,data:Buffer.from(Pc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:P,mintB:A,rewardAccounts:h,exTickArrayBitmap:I}){let T=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[],...h.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:xe,isSigner:!1,isWritable:!1},{pubkey:Yt,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},...T];return new pt({keys:S,programId:e,data:Buffer.from(Pc)})}};var eI=V([nt("mintAuthorityOption"),K("mintAuthority"),k("supply"),W("decimals"),W("isInitialized"),nt("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as jp}from"@solana/web3.js";import{MintLayout as kc,TOKEN_PROGRAM_ID as Hp}from"@solana/spl-token";var lI=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new jp(e));return!t||t.data.length!==kc.span?void 0:kc.decode(t.data)},mI=({mint:o,decimals:e,programId:t=Hp,logoURI:n="",priority:i=3})=>{let r=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:i}},er=o=>new we({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),$o=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=ve(r,["amount","isRaw","name"]);return new be(new we({mint:ht(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function dI(o){return o.address===Xt.address?Ye:o}function pI(o){return o.address===Ye.address?Xt:o}var ut=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=ve(r,["address","programId","decimals"]);return L({chainId:101,address:ht(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},kn=o=>o?D(L({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:D(L({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:D(L({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import hc from"bn.js";var qs=new hc(25),tr=new hc(1e4),Zp={4:3,5:3};import{PublicKey as he,SystemProgram as Rc,SYSVAR_RENT_PUBKEY as df,TransactionInstruction as sn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pf,TOKEN_PROGRAM_ID as ao}from"@solana/spl-token";var Us=V([W("instruction"),k("amountIn"),k("minAmountOut")]),Gs=V([W("instruction"),k("maxAmountIn"),k("amountOut")]),II=V([W("instruction"),W("nonce")]),Xs=V([W("instruction"),W("nonce"),k("startTime")]),Jo=V([k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalValue"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),k("swapBase2QuoteFee"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),k("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"),k("lpReserve"),Y(k(),3,"padding")]),$p=V([k("accountType"),k("status"),k("nonce"),k("maxOrder"),k("depth"),k("baseDecimal"),k("quoteDecimal"),k("state"),k("resetFlag"),k("minSize"),k("volMaxCutRatio"),k("amountWaveRatio"),k("baseLotSize"),k("quoteLotSize"),k("minPriceMultiplier"),k("maxPriceMultiplier"),k("systemDecimalsValue"),k("abortTradeFactor"),k("priceTickMultiplier"),k("priceTick"),k("minSeparateNumerator"),k("minSeparateDenominator"),k("tradeFeeNumerator"),k("tradeFeeDenominator"),k("pnlNumerator"),k("pnlDenominator"),k("swapFeeNumerator"),k("swapFeeDenominator"),k("baseNeedTakePnl"),k("quoteNeedTakePnl"),k("quoteTotalPnl"),k("baseTotalPnl"),k("poolOpenTime"),k("punishPcAmount"),k("punishCoinAmount"),k("orderbookToInitTime"),ee("swapBaseInAmount"),ee("swapQuoteOutAmount"),ee("swapQuoteInAmount"),ee("swapBaseOutAmount"),k("swapQuote2BaseFee"),k("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Y(k(),64,"padding")]),zs=V([W("instruction"),k("baseAmountIn"),k("quoteAmountIn"),k("fixedSide"),k("otherAmountMin")]),Qs=V([W("instruction"),k("lpAmount"),k("baseAmountMin"),k("quoteAmountMin")]),BI={4:Jo,5:$p},Tc=V([k("fee")]);import{PublicKey as Jp}from"@solana/web3.js";var so=new Jp("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Fn=5e4,ef=V([k("x"),k("y"),k("price")]),tf=V([k("accountType"),k("status"),k("multiplier"),k("validDataCount"),Y(ef,Fn,"DataElement")]);function nf(o,e){return[0,Fn-2]}function of(o){return[0,Fn-2]}function rf(o){return[0,Fn-2]}function sf(o,e,t){let[n,i]=nf(e,t),r=n,s=i,a=0,c=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Fn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function Ys(o,e,t){let[n,i,r]=sf(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[i].x,u=o.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function En(o,e,t){return e*o.multiplier/t}function Ic(o,e,t){return e*t/o.multiplier}function af(o,e){let[t,n]=of(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>Fn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function uf(o,e){let[t,n]=rf(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=Fn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Bc(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=af(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(i-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-i)*o.multiplier/l),[y,f,!1,a]}}}function cf(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=uf(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function lf(o,e){let t=Bc(o,e,0,!1);return t[3]?t[0]:0}function xc(o,e,t,n){let i=Ys(o,e,t),r=En(o,e,i),s=En(o,t,i),a=En(o,n,i),c=!0,[u,l,m,d]=Bc(o,r,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return Ic(o,p,i)}}function Sc(o,e,t,n){let i=Ys(o,e,t),r=En(o,e,i),s=En(o,t,i),a=En(o,n,i),c=!1,[u,l,m,d]=cf(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=r-l;return Ic(o,p,i)}}function mf(o){let e=tf.decode(o);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 Kc(o,e,t,n){let i=lf(o,En(o,e,Ys(o,e,t)))/o.multiplier;return n?i:1/i}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(so);e&&(this._layoutData=mf(e==null?void 0:e.data))}}};var Cc=me("Raydium_liquidity_instruction");function Lc(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,c=Buffer.alloc(zs.span);zs.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?Fe:za},c);let u=[w({pubkey:ao,isWritable:!1}),w({pubkey:new he(e.id)}),w({pubkey:new he(t.authority),isWritable:!1}),w({pubkey:new he(t.openOrders),isWritable:!1}),w({pubkey:new he(t.targetOrders)}),w({pubkey:new he(e.lpMint.address)}),w({pubkey:new he(t.vault.A)}),w({pubkey:new he(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(w({pubkey:so})),u.push(w({pubkey:new he(e.marketId),isWritable:!1}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:new he(t.marketEventQueue),isWritable:!1})),new sn({programId:new he(e.programId),keys:u,data:c})}function js(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=Ie(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(Qs.span);Qs.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(r),quoteAmountMin:Z(s)},u);let l=[w({pubkey:ao,isWritable:!1}),w({pubkey:a.id}),w({pubkey:a.authority,isWritable:!1}),w({pubkey:a.openOrders}),w({pubkey:a.targetOrders}),w({pubkey:a.mintLp.address}),w({pubkey:a.vault.A}),w({pubkey:a.vault.B})];return c===5?l.push(w({pubkey:so})):(l.push(w({pubkey:a.id})),l.push(w({pubkey:a.id}))),l.push(w({pubkey:a.marketProgramId,isWritable:!1}),w({pubkey:a.marketId}),w({pubkey:a.marketBaseVault}),w({pubkey:a.marketQuoteVault}),w({pubkey:a.marketAuthority,isWritable:!1}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:a.marketEventQueue}),w({pubkey:a.marketBids}),w({pubkey:a.marketAsks})),new sn({programId:a.programId,keys:l,data:u})}return new sn({programId:a.programId,keys:[]})}function Hs({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:h,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let B=V([W("instruction"),W("nonce"),k("openTime"),k("pcAmount"),k("coinAmount")]),C=[{pubkey:ao,isSigner:!1,isWritable:!1},{pubkey:pf,isSigner:!1,isWritable:!1},{pubkey:Rc.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:P,openTime:A,coinAmount:h,pcAmount:I},x),{instruction:new sn({keys:C,programId:o,data:x}),instructionType:E.AmmV4CreatePool}}function WI(o){let e=V([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new he(o.id),isWritable:!1}),w({pubkey:new he(o.authority),isWritable:!1}),w({pubkey:new he(o.openOrders),isWritable:!1}),w({pubkey:new he(o.vault.A),isWritable:!1}),w({pubkey:new he(o.vault.B),isWritable:!1}),w({pubkey:new he(o.mintLp.address),isWritable:!1}),w({pubkey:new he(o.marketId),isWritable:!1}),w({pubkey:new he(o.marketEventQueue),isWritable:!1})];return new sn({programId:new he(o.programId),keys:n,data:t})}function ff({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=Ie(o),s=Buffer.alloc(Us.span);Us.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[w({pubkey:ao,isWritable:!1}),w({pubkey:r.id}),w({pubkey:r.authority,isWritable:!1}),w({pubkey:r.openOrders})];return i===4&&a.push(w({pubkey:r.targetOrders})),a.push(w({pubkey:r.vault.A}),w({pubkey:r.vault.B})),i===5&&a.push(w({pubkey:so})),a.push(w({pubkey:r.marketProgramId,isWritable:!1}),w({pubkey:r.marketId}),w({pubkey:r.marketBids}),w({pubkey:r.marketAsks}),w({pubkey:r.marketEventQueue}),w({pubkey:r.marketBaseVault}),w({pubkey:r.marketQuoteVault}),w({pubkey:r.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1})),new sn({programId:r.programId,keys:a,data:s})}function yf({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=Ie(o),s=Buffer.alloc(Gs.span);Gs.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[w({pubkey:ao,isWritable:!1}),w({pubkey:r.id}),w({pubkey:r.authority,isWritable:!1}),w({pubkey:r.openOrders}),w({pubkey:r.targetOrders}),w({pubkey:r.vault.A}),w({pubkey:r.vault.B})];return i===5&&a.push(w({pubkey:so})),a.push(w({pubkey:r.marketProgramId,isWritable:!1}),w({pubkey:r.marketId}),w({pubkey:r.marketBids}),w({pubkey:r.marketAsks}),w({pubkey:r.marketEventQueue}),w({pubkey:r.marketBaseVault}),w({pubkey:r.marketQuoteVault}),w({pubkey:r.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new sn({programId:r.programId,keys:a,data:s})}function nr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return ff(D(L({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return yf(D(L({},a),{maxAmountIn:i,amountOut:r}),t);Cc.logWithError("invalid params","params",o)}throw Cc.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function qI({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(Xs.span);Xs.encode({instruction:0,nonce:5,startTime:Z(t)},n);let i=Ie(o),r=[w({pubkey:ao,isWritable:!1}),w({pubkey:Rc.programId,isWritable:!1}),w({pubkey:df,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.openOrders}),w({pubkey:i.mintLp.address}),w({pubkey:i.mintA.address,isWritable:!1}),w({pubkey:i.mintB.address,isWritable:!1}),w({pubkey:i.vault.A,isWritable:!1}),w({pubkey:i.vault.B,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.targetOrders}),w({pubkey:e.lpTokenAccount}),w({pubkey:i.id,isWritable:!1}),w({pubkey:i.marketProgramId,isWritable:!1}),w({pubkey:i.marketId,isWritable:!1}),w({pubkey:e.payer,isSigner:!0})];return new sn({programId:i.programId,keys:r,data:n})}function Oc({poolKeys:o}){let e=V([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new he(o.id),isWritable:!1}),w({pubkey:new he(o.authority),isWritable:!1}),w({pubkey:new he(o.openOrders),isWritable:!1}),w({pubkey:new he(o.vault.A),isWritable:!1}),w({pubkey:new he(o.vault.B),isWritable:!1}),w({pubkey:new he(o.mintLp.address),isWritable:!1}),w({pubkey:new he(o.marketId),isWritable:!1}),w({pubkey:new he(o.marketEventQueue),isWritable:!1})];return{instruction:new sn({programId:new he(o.programId),keys:n,data:t})}}import{PublicKey as Af}from"@solana/web3.js";import ei from"bn.js";import{TOKEN_PROGRAM_ID as wf}from"@solana/spl-token";import{PublicKey as bf}from"@solana/web3.js";var gf=me("Raydium_liquidity_serum");function Mc({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=bf.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw gf.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function or({programId:o}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Dn({name:o,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Pf({programId:o,marketId:e}){let{publicKey:t}=ae([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Js({programId:o}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function ea({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Dn({name:"amm_associated_seed",programId:a,marketId:t}),l=Dn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Js({programId:a}),p=Dn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Dn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Dn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Pf({programId:a,marketId:t}),g=Dn({name:"target_associated_seed",programId:a,marketId:t}),P=Dn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Mc({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Af.default,configId:or({programId:a})}}var Zs;async function iB({connection:o,poolKeysList:e,config:t}){Zs||(Zs=new ro({connection:o}),await Zs.initStableModelLayout());let n=e.map(s=>Oc({poolKeys:s}));return(await nu(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ou(s,"GetPoolData"),c=new ei($t(a,"status")),u=Number($t(a,"coin_decimals")),l=Number($t(a,"pc_decimals")),m=Number($t(a,"lp_decimals")),d=new ei($t(a,"pool_coin_amount")),p=new ei($t(a,"pool_pc_amount")),y=new ei($t(a,"pool_lp_supply")),f="0";try{f=$t(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new ei(f)}})}var $s={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},ir=o=>{let e={},t=wf.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:ut({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:ut({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new M(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new M(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:$s,week:$s,month:$s,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:or({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:ut({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Ce from"bn.js";import{PublicKey as ti}from"@solana/web3.js";import ni from"bn.js";import{TOKEN_PROGRAM_ID as vc}from"@solana/spl-token";import{SystemProgram as Wn,SYSVAR_RENT_PUBKEY as hf,Transaction as Nc,TransactionInstruction as Tf}from"@solana/web3.js";import{createInitializeAccountInstruction as _c,TOKEN_PROGRAM_ID as Vc}from"@solana/spl-token";function kf(o="accountFlags"){let e=new Xi(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ta=V([Ae(5),kf("accountFlags"),K("ownAddress"),k("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),K("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),Ae(7)]);function If({programId:o,marketInfo:e}){let t=V([W("version"),nt("instruction"),k("baseLotSize"),k("quoteLotSize"),Jt("feeRateBps"),k("vaultSignerNonce"),k("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:hf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),i=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},i),new Tf({keys:n,programId:o,data:i})}async function rr({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Nc,i=await o.getMinimumBalanceForRentExemption(165);n.add(Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Vc}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Vc}),_c(t.baseVault.publicKey,t.baseMint,t.vaultOwner),_c(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ta.span),space:ta.span,programId:t.programId}));let r=new Nc;return r.add(Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Wn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),If({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:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:r,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var uo=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,y=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,f=Oe({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-market`}),b=Oe({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-request`}),g=Oe({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-event`}),P=Oe({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-bids`}),A=Oe({fromPublicKey:p,programId:r,assignSeed:y&&`${y}-asks`}),h=Oe({fromPublicKey:p,programId:vc,assignSeed:y&&`${y}-baseVault`}),I=Oe({fromPublicKey:p,programId:vc,assignSeed:y&&`${y}-quoteVault`}),T=0,S=new ni(100);function B(){let U=new ni(0);for(;;)try{return{vaultOwner:ti.createProgramAddressSync([f.publicKey.toBuffer(),U.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:U}}catch{if(U.iaddn(1),U.gt(new ni(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=B(),R=new ni(Math.round(10**e.decimals*n)),F=new ni(Math.round(n*10**t.decimals*i));if(R.eq(Fe))throw Error("lot size is too small");if(F.eq(Fe))throw Error("tick size or lot size is too small");let O=await rr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:f,baseMint:e.mint,quoteMint:t.mint,baseVault:h,quoteVault:I,vaultOwner:C,requestQueue:b,eventQueue:g,bids:P,asks:A,feeRateBps:T,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:R,quoteLotSize:F,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),X=this.createTxBuilder();X.addInstruction({instructions:O[0].transaction.instructions,signers:O[0].signer});for await(let U of O.slice(1,O.length))X.addInstruction({instructions:U.transaction.instructions,signers:U.signer,instructionTypes:U.instructionTypes});return m===0?X.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:P.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:I.publicKey,baseMint:new ti(e.mint),quoteMin:new ti(t.mint)}}):X.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:f.publicKey,requestQueue:b.publicKey,eventQueue:g.publicKey,bids:P.publicKey,asks:A.publicKey,baseVault:h.publicKey,quoteVault:I.publicKey,baseMint:new ti(e.mint),quoteMin:new ti(t.mint)}})}};var oi=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:i,baseIn:r}){let s=new Ce(new M(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=er(t[r?"mintB":"mintA"]),[c,u]=[new Ce(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ce(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ce(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=Fe;s.isZero()||(d=m==="base"?Ki(s.mul(u),c):Ki(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ki(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let y=new Le(new Ce(1)).add(i),f=new Le(new Ce(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,P=new be(a,d),A=new be(a,b),h=new be(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",A.toFixed()),{anotherAmount:P,maxAnotherAmount:A,minAnotherAmount:h,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),P=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!P&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let A=await d.getCreatedTokenAccount({mint:new qe(n.lpMint.address)}),h=[f,b],I=[g,P],T=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(h.reverse(),I.reverse(),T.reverse(),B=c==="a"?"quote":"base"):S==="base"&&(B=c==="a"?"base":"quote");let[C,x]=h,[R,F]=I,[O,X]=T,U=i!=null?i:await this.getAmmPoolKeys(n.id),q=this.createTxBuilder(),bt=await d.handleTokenAccount({side:"in",amount:O,mint:C.mint,tokenAccount:R,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Re}=bt,qt=ve(bt,["tokenAccount"]);q.addInstruction(qt);let Bt=await d.handleTokenAccount({side:"in",amount:X,mint:x.mint,tokenAccount:F,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Ve}=Bt,ft=ve(Bt,["tokenAccount"]);q.addInstruction(ft);let In=await d.handleTokenAccount({side:"out",amount:0,mint:new qe(n.lpMint.address),tokenAccount:A,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:yt}=In,kt=ve(In,["tokenAccount"]);return q.addInstruction(kt),q.addInstruction({instructions:[Lc({poolInfo:n,poolKeys:U,userKeys:{baseTokenAccount:Re,quoteTokenAccount:Ve,lpTokenAccount:yt,owner:this.scope.ownerPubKey},baseAmountIn:O,quoteAmountIn:X,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),q.addCustomComputeBudget(m),l===0&&await q.buildV0(),q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new qe(n.mintA.address),new qe(n.mintB.address),new qe(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),P=await f.getCreatedTokenAccount({mint:p}),A=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:I}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:T}=x,S=ve(x,["tokenAccount"]);A.addInstruction(S);let R=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:P,bypassAssociatedCheck:h,checkCreateATAOwner:I}),{tokenAccount:B}=R,C=ve(R,["tokenAccount"]);return A.addInstruction(C),A.addInstruction({instructions:[js({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),A.addCustomComputeBudget(l),u===0?await A.buildV0():A.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=hn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||le(this.scope.ownerPubKey,q.accountInfo.mint,hn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let P=g[t.lpMint.address];if(P===void 0)throw Error("find lp account error in trade accounts");let A=i.add(a!=null?a:new Ce(0)),h=t.mintA.address===we.WSOL.mint.toString(),I=t.mintB.address===we.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let q=xt[s.programId],Re=st({programId:new qe(s.programId),poolId:new qe(s.id),owner:this.scope.ownerPubKey,version:q}),qt,Ve=await this.scope.connection.getAccountInfo(Re);if(Ve&&(qt=oo(q).decode(Ve.data)),q!==6&&!qt){let{instruction:Ut,instructionType:zn}=Fo({id:new qe(s.id),programId:new qe(s.programId),version:q,ledger:Re,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Ut],instructionTypes:[zn]})}let ft=[];for(let Ut of s.rewardInfos){let zn=Ut.mint.address===we.WSOL.mint.toString();if(g[Ut.mint.address])ft.push(g[Ut.mint.address]);else{let{account:pi,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({mint:new qe(Ut.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!zn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});pi||this.logAndCreateError("farm reward account not found:",Ut.mint.address),Xe&&b.addInstruction(Xe),ft.push(pi)}}let yt=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],kt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:yt,lpAccount:P,rewardAccounts:ft},bt=xt[s.programId],Bt=bt===6?Do(kt):bt===5?Wo(kt):qo(kt),In={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[Bt],instructionTypes:[In[bt]]})}let x=await this.getAmmPoolKeys(t.id),R=js({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:P,baseTokenAccount:T,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:A,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[F,O]=t.mintA.address===n.mintA.address?[T,B]:[B,T],X=await this.scope.clmm.getClmmPoolKeys(n.id),U=await ke.openPositionFromBaseInstructions(D(L({poolInfo:n,poolKeys:X,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:F,tokenAccountB:O},withMetadata:"create"},r),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...U.instructions],signers:U.signers,instructionTypes:[...U.instructionTypes],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var F;let b=u.feePayer||((F=this.scope.owner)==null?void 0:F.publicKey),g=u.useSOLBalance&&i.mint.equals(sr),P=u.useSOLBalance&&r.mint.equals(sr),A=this.createTxBuilder(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),h===void 0||T===void 0)throw Error("you don't has some token account");let B=ea({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:R}=Hs(D(L({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:h,userPcVault:T,userLpVault:le(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[x],instructionTypes:[R]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ko,marketProgram:n=Hr,feeDestinationId:i=au,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:y=!1,checkCreateATAOwner:f=!1,lotSize:b=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:A}){var ga;let h=this.scope.ownerPubKey,I=m.feePayer||((ga=this.scope.owner)==null?void 0:ga.publicKey),T=m.useSOLBalance&&s.mint.equals(sr),S=m.useSOLBalance&&a.mint.equals(sr),B=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-market`}),x=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-request`}),R=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-event`}),F=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-bids`}),O=Oe({fromPublicKey:h,programId:n,assignSeed:B&&`${B}-asks`}),X=Oe({fromPublicKey:h,programId:hn,assignSeed:B&&`${B}-baseVault`}),U=Oe({fromPublicKey:h,programId:hn,assignSeed:B&&`${B}-quoteVault`}),q=0,Re=new Ce(100);function qt(){let un=new Ce(0);for(;;)try{return{vaultOwner:qe.createProgramAddressSync([C.publicKey.toBuffer(),un.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:un}}catch{if(un.iaddn(1),un.gt(new Ce(25555)))throw Error("find vault owner error")}}let{vaultOwner:Ve,vaultSignerNonce:ft}=qt(),yt=new Ce(Math.round(10**s.decimals*b)),kt=new Ce(Math.round(b*10**a.decimals*g));if(yt.eq(Fe))throw Error("lot size is too small");if(kt.eq(Fe))throw Error("tick size or lot size is too small");let bt=await rr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Ve,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:X,quoteVault:U,requestQueue:x,eventQueue:R,bids:F,asks:O,feeRateBps:q,quoteDustThreshold:Re,vaultSignerNonce:ft,baseLotSize:yt,quoteLotSize:kt,lowestFeeMarket:d}}),Bt=this.createTxBuilder();Bt.addInstruction({instructions:bt[0].transaction.instructions,signers:bt[0].signer});for await(let un of bt.slice(1,bt.length))Bt.addInstruction({instructions:un.transaction.instructions,signers:un.signer,instructionTypes:un.instructionTypes});let{account:In,instructionParams:Ut}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:I,amount:c}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:y,checkCreateATAOwner:f});Bt.addInstruction(Ut||{});let{account:zn,instructionParams:pi}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:I,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:y,checkCreateATAOwner:f});if(Bt.addInstruction(pi||{}),In===void 0)throw Error("you don't has base token account");if(zn===void 0)throw Error("you don't has quote token account");let Xe=ea({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Tr={programId:t,ammId:Xe.id,ammAuthority:Xe.authority,ammOpenOrders:Xe.openOrders,lpMint:Xe.lpMint,coinMint:Xe.baseMint,pcMint:Xe.quoteMint,coinVault:Xe.baseVault,pcVault:Xe.quoteVault,withdrawQueue:Xe.withdrawQueue,ammTargetOrders:Xe.targetOrders,poolTempLp:Xe.lpVault,marketProgramId:Xe.marketProgramId,marketId:Xe.marketId,ammConfigId:Xe.configId,feeDestinationId:i},{instruction:sl,instructionType:al}=Hs(D(L({},Tr),{userWallet:this.scope.ownerPubKey,userCoinVault:In,userPcVault:zn,userLpVault:le(this.scope.ownerPubKey,Xe.lpMint,r).publicKey,nonce:Xe.nonce,openTime:l,coinAmount:c,pcAmount:u}));return Bt.addInstruction({instructions:[sl],instructionTypes:[al]}),P===0?Bt.sizeCheckBuildV0({computeBudgetConfig:A,address:L({requestQueue:x.publicKey,eventQueue:R.publicKey,bids:F.publicKey,asks:O.publicKey,baseVault:X.publicKey,quoteVault:U.publicKey,baseMint:new qe(s.mint),quoteMin:new qe(a.mint)},Tr)}):Bt.sizeCheckBuild({computeBudgetConfig:A,address:L({requestQueue:x.publicKey,eventQueue:R.publicKey,bids:F.publicKey,asks:O.publicKey,baseVault:X.publicKey,quoteVault:U.publicKey,baseMint:new qe(s.mint),quoteMin:new qe(a.mint)},Tr)})}async getCreatePoolFee({programId:t}){let n=or({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Tc.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,c]=[i.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,P=t.version===4,A;if(P)A=new M(f.toString()).div(10**g).div(new M(y.toString()).div(10**b));else{let O=Kc(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new M(1e6).div(O*1e6):A=new M(O*1e6).div(1e6)}let h=n,I=new Ce(0),T=new Ce(0);if(!h.isZero())if(P){T=_t(h.mul(qs),tr);let O=h.sub(T),X=y.add(O);I=f.mul(O).div(X)}else{T=h.mul(new Ce(2)).div(new Ce(1e4));let O=h.sub(T);p==="quote"?I=new Ce(xc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber())):I=new Ce(Sc(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),O.toNumber()))}let S=new Ce(new M(I.toString()).mul(1-s).toFixed(0)),B=I,C=S,x=new M(I.toString()).div(new M(h.sub(T).toString()).toFixed(0));!h.isZero()&&!I.isZero()&&(x=new M(I.toString()).div(10**g).div(new M(h.sub(T).toString()).div(10**b)));let R=A.sub(x).div(A).mul(100);return{amountOut:B,minAmountOut:C,currentPrice:A,executionPrice:x,priceImpact:R,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new M(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ce(0),P=n;if(!P.isZero()){P.gt(f)&&(P=f.sub(new Ce(1)));let C=f.sub(P);g=y.mul(P).div(C).mul(tr).div(tr.sub(qs))}let A=new Ce(new M(g.toString()).mul(1+s).toFixed(0)),h=g,I=A;this.logDebug("amountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!P.isZero()&&(T=new M(P.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(h.toString()),B=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:h,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),P=y&&b.address===H.toBase58(),{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(h||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hn,mint:new qe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:P,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),m.addInstruction({instructions:[nr({version:B,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[B===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await ze(this.scope.connection,t.map(l=>({pubkey:new qe(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Jo.decode(m.accountInfo.data);r[String(t[l])]=D(L({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await ze(this.scope.connection,s.map(l=>({pubkey:new qe(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Ce(Bf.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=D(L({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=ir({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import Pt from"bn.js";import{AccountLayout as Ec,TOKEN_PROGRAM_ID as ii}from"@solana/spl-token";var ri=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||Q.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new Pt(new Q(i.address).toBuffer()).gt(new Pt(new Q(r.address).toBuffer()))?[r,i,new M(1).div(a)]:[i,r,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),P=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(P),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:D(L({},P.address),{programId:t.toString(),id:P.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:P.address.mintAVault.toString(),B:P.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:L({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:P.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},nc),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!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,P=n.useSOLBalance&&e.mintA.address===H.toString(),A=n.useSOLBalance&&e.mintB.address===H.toString(),[h,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!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 x=t||await this.getClmmPoolKeys(e.id),R=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:D(L({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L({},R.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,P=n.useSOLBalance&&e.mintA.address===H.toBase58(),A=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});h&&(b=h),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:r,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});P&&(y=P),p.addInstruction(A||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h&&(f=h),p.addInstruction(I||{}),!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=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,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:i,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(h||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:r,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:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!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=r.useSOLBalance&&t.mintA.address===H.toString(),f=r.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=P,A&&p.addInstruction(A);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=h,I&&p.addInstruction(I);let T=[];for(let x of t.rewardDefaultInfos){let R=r.useSOLBalance&&x.mint.address===H.toString(),F;if(x.mint.address===t.mintA.address)F=b;else if(x.mint.address===t.mintB.address)F=g;else{let{account:O,instructionParams:X}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});F=O,X&&p.addInstruction(X)}T.push(F)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:B.instructions,instructionTypes:[E.ClmmDecreasePosition]});let C=L({},B.address);if(r.closePosition){let x=await ke.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=L(L({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=$n,authProgramId:n=ho,poolProgramId:i=yn,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:c}=e,u=this.createTxBuilder(),l=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint});return u.addInstruction(l),u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=$n,authProgramId:n=ho,clmmProgram:i=yn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=Zo.decode(y.data),b=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),P,A,{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P=h,I&&p.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});A=T,S&&p.addInstruction(S);let B={},C=[];for(let Ve of d.rewardInfos){let ft=a.useSOLBalance&&Ve.mint.address===H.toString(),yt=B[Ve.mint.address];if(!yt){let{account:kt,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Ve.mint.programId),mint:new Q(Ve.mint.address),notUseTokenAccount:ft,owner:this.scope.ownerPubKey,skipCloseAccount:!ft,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ft?!1:c});yt=kt,bt&&p.addInstruction(bt)}B[Ve.mint.address]=yt,C.push(yt)}let x=Qo(t,s.lockNftMint).publicKey,R=le(this.scope.ownerPubKey,s.lockNftMint,ii).publicKey,F=j.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),O=j.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:X}=de(new Q(d.programId),s.poolId,F),{publicKey:U}=de(new Q(d.programId),s.poolId,O),{publicKey:q}=Et(new Q(d.programId),s.poolId,f.tickLower,f.tickUpper),Re=[];for(let Ve=0;Ve<d.rewardInfos.length;Ve++)Re.push({poolRewardVault:new Q(d.rewardInfos[Ve].vault),ownerRewardVault:C[Ve],rewardMint:new Q(d.rewardInfos[Ve].mint.address)});let qt=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:R,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:q,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:X,tickArrayUpper:U,userVaultA:P,userVaultB:A,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Re,exTickArrayBitmap:ot(i,s.poolId).publicKey});return p.addInstruction({instructions:[qt],instructionTypes:[E.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return r.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});l=L(L({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Pt(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});u.addInstruction(b),l=L(L({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:r});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=L(L({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),P;!s||s.equals(new M(0))?P=f?Kt.add(new Pt(1)):Ct.sub(new Pt(1)):P=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},inputMint:new Q(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:P,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),P;!s||s.equals(new M(0))?P=n.toString()===e.mintB.address?Kt.add(new Pt(1)):Ct.sub(new Pt(1)):P=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let h;if(!h){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});h=T,S&&y.addInstruction(S)}(!A||!h)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:h,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:h},outputMint:new Q(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:P,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)r?le(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(T=>!T.liquidity.isZero()||T.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===H.toString(),b=i.useSOLBalance&&y.mintB.address===H.toString(),g=l[y.mintA.address];if(!g){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new Q(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:r,checkCreateATAOwner:s});g=T,S&&m.addInstruction(S)}let P=l[y.mintB.address];if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new Q(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:r,checkCreateATAOwner:s});P=T,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=P;let A=[];for(let T of y.rewardDefaultInfos){let S=i.useSOLBalance&&T.mint.address===H.toString(),B=l[T.mint.address];if(!B){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(T.mint.programId),mint:new Q(T.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r});B=C,x&&m.addInstruction(x)}l[T.mint.address]=B,A.push(B)}let h=await this.getClmmPoolKeys(y.id),I=[];for(let T=0;T<h.rewardInfos.length;T++)I.push({poolRewardVault:new Q(h.rewardInfos[T].vault),ownerRewardVault:A[T],rewardMint:new Q(h.rewardInfos[T].mint.address)});for(let T of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[T.nftMint.toBase58()];if(S){let B=le(this.scope.ownerPubKey,S.lockNftMint,ii).publicKey,C=j.getTickArrayStartIndexByTick(T.tickLower,h.config.tickSpacing),x=j.getTickArrayStartIndexByTick(T.tickUpper,h.config.tickSpacing),{publicKey:R}=de(new Q(h.programId),S.poolId,C),{publicKey:F}=de(new Q(h.programId),S.poolId,x),{publicKey:O}=Et(new Q(h.programId),S.poolId,T.tickLower,T.tickUpper),X=Qo($n,S.lockNftMint).publicKey,U=ke.harvestLockPositionInstructionV2({programId:$n,auth:ho,lockPositionId:X,clmmProgram:yn,lockOwner:this.scope.ownerPubKey,lockNftMint:S.lockNftMint,lockNftAccount:B,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:O,vaultA:new Q(h.vault.A),vaultB:new Q(h.vault.B),tickArrayLower:R,tickArrayUpper:F,userVaultA:g,userVaultB:P,mintA:new Q(h.mintA.address),mintB:new Q(h.mintB.address),rewardAccounts:I,exTickArrayBitmap:ot(yn,S.poolId).publicKey});m.addInstruction({instructions:[U],instructionTypes:[E.ClmmHarvestLockPosition],lookupTableAddress:h.lookupTableAccount?[h.lookupTableAccount]:[]})}else{let B=ke.decreaseLiquidityInstructions({poolInfo:y,poolKeys:h,ownerPosition:T,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:P,rewardAccounts:A},liquidity:new Pt(0),amountMinA:new Pt(0),amountMinB:new Pt(0)});m.addInstruction(B)}}}return c===0?m.sizeCheckBuildV0({computeBudgetConfig:u}):m.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(zo(e).publicKey);return t?bc.decode(t.data).whitelistMints.filter(i=>!i.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new Pt(1))).map(s=>dt(new Q(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Zo.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await ze(this.scope.connection,e.map(r=>({pubkey:new Q(r)})),t),i={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=_n.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=D(L({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await ze(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),r={};i.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=fc.decode(c.accountInfo.data))});let s=await Me.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:ut({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||ii.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?kn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:ut({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||ii.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?kn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:D(L({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Me.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()]),i=await Qn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await ze(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=dc(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Ec.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Ec.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=D(L({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:ut({address:m.tokenMint.toBase58(),programId:ii.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Wf,NATIVE_MINT as br,TOKEN_PROGRAM_ID as Wt}from"@solana/spl-token";import oa from"bn.js";import lr from"decimal.js-light";import si from"bn.js";function ar(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function xf(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=ar(o,e);return n.gt(co)&&(t=t.add(new si(1)),e=o.div(t),n=ar(o,t),n.gt(co)&&(e=e.add(new si(1)))),[t,e]}var co=new si(0),ur=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=xf(i,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return ar(e.mul(n),t).gt(co)&&s.gt(co)&&(s=s.add(new si(1))),ar(e.mul(i),t).gt(co)&&a.gt(co)&&(a=a.add(new si(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Wc from"bn.js";var na=new Wc(1e6);function Sf(o,e,t){return o.mul(e).add(t).sub(new Wc(1)).div(t)}function Dc(o,e,t){return o.mul(e).div(t)}var cr=class{static tradingFee(e,t){return Sf(e,t,na)}static protocolFee(e,t){return Dc(e,t,na)}static fundFee(e,t){return Dc(e,t,na)}};var Fc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Fc||{}),mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=cr.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=ur.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new lr(u.toString()).div(10**m).div(new lr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new oa(1)):a,f=u.sub(y),b=_t(c.mul(y),f),g=_t(b.mul(new oa(1e6)),new oa(1e6).sub(n)),P=g.sub(b),A=new lr(y.toString()).div(10**m).div(new lr(g.toString()).div(10**l)),h=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:P,priceImpact:h}}};import Ne from"bn.js";import{PublicKey as ai,TransactionInstruction as qn,Keypair as vf,SystemProgram as Ef}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Gc,TOKEN_2022_PROGRAM_ID as ra,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";var Kf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Cf=Buffer.from("amm_config","utf8"),Rf=Buffer.from("pool","utf8"),Lf=Buffer.from("pool_lp_mint","utf8"),Of=Buffer.from("pool_vault","utf8"),Mf=Buffer.from("observation","utf8");function lo(o){return ae([Kf],o)}function rS(o,e){return ae([Cf,_f(e)],o)}function ia(o,e,t,n){return ae([Rf,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Nf(o,e){return ae([Lf,e.toBuffer()],o)}function qc(o,e,t){return ae([Of,e.toBuffer(),t.toBuffer()],o)}function dr(o,e){return ae([Mf,e.toBuffer()],o)}function _f(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Uc({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=lo(e).publicKey,s=o||ia(e,t,n,i).publicKey,a=Nf(e,s).publicKey,c=qc(e,s,n).publicKey,u=qc(e,s,i).publicKey,l=dr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Vf=Buffer.from("locked_liquidity","utf8");function pr(o,e){return ae([Vf,e.toBuffer()],o)}var Ff=me("Raydium_cpmm"),Un={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function Xc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f,b,g,P,A){let h=V([k("amountMaxA"),k("amountMaxB"),k("openTime")]),I=ia(o,t,r,s).publicKey,T=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(I),isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Gc,isSigner:!1,isWritable:!1},{pubkey:Si,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(h.span);return h.encode({amountMaxA:g,amountMaxB:P,openTime:A},S),new qn({keys:T,programId:o,data:Buffer.from([...Un.initialize,...S])})}function zc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=V([k("lpAmount"),k("amountMaxA"),k("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ff.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new qn({keys:b,programId:o,data:Buffer.from([...Un.deposit,...g])})}function Qc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){let f=V([k("lpAmount"),k("amountMinA"),k("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new qn({keys:b,programId:o,data:Buffer.from([...Un.withdraw,...g])})}function fr(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=V([k("amountIn"),k("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new qn({keys:g,programId:o,data:Buffer.from([...Un.swapBaseInput,...P])})}function Yc(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y,f){let b=V([k("amountInMax"),k("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new qn({keys:g,programId:o,data:Buffer.from([...Un.swapBaseOutput,...P])})}async function jc(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new ai(t.id),new ai(t.lpMint.address)],c;if(i)c=new ai((await i(1))[0]);else{let b=vf.generate();r.push(b),c=b.publicKey}let{publicKey:u}=le(e.feePayer,c,Tn),{publicKey:l}=On(c),{publicKey:m}=pr(o.lockProgram,c),{publicKey:d}=le(e.feePayer,a,Tn),{publicKey:p}=le(o.lockAuthProgram,a,Tn),y=Df({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new ai(n.vault.A),poolVaultB:new ai(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[E.CpmmLockLp],lookupTableAddress:[]}}function Df({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Ef.programId,isSigner:!1,isWritable:!1},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:Gc,isSigner:!1,isWritable:!1},{pubkey:Ht,isSigner:!1,isWritable:!1}],P=V([k("lpAmount"),Ge("withMetadata")]),A=Buffer.alloc(P.span);P.encode({lpAmount:f,withMetadata:b},A);let h=Buffer.from([...Un.lockCpLiquidity,...A]);return new qn({keys:g,programId:o,data:h})}function Hc({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:To,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Zr,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Tn,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1}],P=V([k("lpFeeAmount")]),A=Buffer.alloc(P.span);P.encode({lpFeeAmount:y},A);let h=Buffer.from([...Un.collectCpFee,...A]);return new qn({keys:g,programId:o,data:h})}var Zc=V([Ae(8),W("bump"),Ge("disableCreatePool"),Jt("index"),k("tradeFeeRate"),k("protocolFeeRate"),k("fundFeeRate"),k("createPoolFee"),K("protocolOwner"),K("fundOwner"),Y(k(),16)]),yr=V([Ae(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),k("lpAmount"),k("protocolFeesMintA"),k("protocolFeesMintB"),k("fundFeesMintA"),k("fundFeesMintB"),k("openTime"),Y(k(),32)]);var ui=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 ze(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),i={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=yr.decode(d.accountInfo.data);i[String(e[m])]=D(L({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await ze(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]]=Zc.decode(y.data)}}let c={},u=await ze(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ne(Wf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=D(L({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(y.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return D(L({},n),{[i]:D(L({},r),{id:new z(i),configInfo:r.configInfo,version:7,authority:lo(r.programId).publicKey,mintA:ut({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?kn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:ut({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?kn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Qn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=ut({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?kn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=ut({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?kn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=ut({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Wt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:lo(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=ve(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var X,U,q;let y=r.feePayer||((X=this.scope.owner)==null?void 0:X.publicKey),f=new Ne(new z(m.mintA.address).toBuffer()).lte(new Ne(new z(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[P,A]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],h=r.useSOLBalance&&b.address===br.toBase58(),I=r.useSOLBalance&&g.address===br.toBase58(),[T,S]=[new z(b.address),new z(g.address)],B=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:y,amount:P}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});B.addInstruction(x||{});let{account:R,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:y,amount:A}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:s,checkCreateATAOwner:a});if(B.addInstruction(F||{}),C===void 0||R===void 0)throw Error("you don't has some token account");let O=Uc({poolId:e,programId:t,configId:new z(u.id),mintA:T,mintB:S});return B.addInstruction({instructions:[Xc(t,this.scope.ownerPubKey,new z(u.id),O.authority,O.poolId,T,S,O.lpMint,C,R,le(this.scope.ownerPubKey,O.lpMint).publicKey,O.vaultA,O.vaultB,n,new z((U=b.programId)!=null?U:Wt),new z((q=g.programId)!=null?q:Wt),O.observationId,P,A,i)],instructionTypes:[E.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.versionBuild({txVersion:c,extInfo:{address:D(L({},O),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:D(L({},t),{lpAmount:new M(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Le(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),P=g.amount,A=t.mintA.address===br.toString(),h=t.mintB.address===br.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(r?i:P).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:P}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(C||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||(r?P:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?P:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{}),!B&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let F=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Re=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:F,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:O}=Re,X=ve(Re,["tokenAccount"]);I.addInstruction(X);let U=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Le(new Ne(1)).sub(s);return I.addInstruction({instructions:[zc(new z(t.programId),this.scope.ownerPubKey,new z(U.authority),new z(t.id),O,B,x,new z(U.vault.A),new z(U.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,r?b.amount:P,r?P:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var O,X;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Le(new Ne(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,P]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(H),h=P.equals(H),I,T,{account:S,instructionParams:B}=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});I=S,B&&b.addInstruction(B);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:!h,checkCreateATAOwner:!1});T=C,x&&b.addInstruction(x),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let R=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let F=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Qc(new z(t.programId),this.scope.ownerPubKey,new z(F.authority),new z(t.id),R,I,T,new z(F.vault.A),new z(F.vault.B),g,P,new z(t.lpMint.address),i,l.sub((O=p.fee)!=null?O:new Ne(0)),m.sub((X=y.fee)!=null?X:new Ne(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,R,F,O,X;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=L({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ne((1+c)*1e4)).div(new Ne(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ne((1-c)*1e4)).div(new Ne(1e4));let P=t.mintA.address===H.toBase58(),A=t.mintB.address===H.toBase58(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((C=t.mintA.programId)!=null?C:Wt),owner:this.scope.ownerPubKey,createInfo:P||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Wt),owner:this.scope.ownerPubKey,createInfo:A||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!h||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:T,mintAUseSOLBalance:P,mintBUseSOLBalance:A,associatedOnly:y});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?Yc(new z(t.programId),this.scope.ownerPubKey,new z(B.authority),new z(B.config.id),new z(t.id),i?h:T,i?T:h,new z(B.vault[i?"A":"B"]),new z(B.vault[i?"B":"A"]),new z((O=t[i?"mintA":"mintB"].programId)!=null?O:Wt),new z((X=t[i?"mintB":"mintA"].programId)!=null?X:Wt),i?b:g,i?g:b,dr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):fr(new z(t.programId),this.scope.ownerPubKey,new z(B.authority),new z(B.config.id),new z(t.id),i?h:T,i?T:h,new z(B.vault[i?"A":"B"]),new z(B.vault[i?"B":"A"]),new z((R=t[i?"mintA":"mintB"].programId)!=null?R:Wt),new z((F=t[i?"mintB":"mintA"].programId)!=null?F:Wt),i?b:g,i?g:b,dr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await jc({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:Io,lockAuthProgram:(d=e.authProgram)!=null?d:Bo,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(i),s.versionBuild({txVersion:r,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=Io,authProgram:s=Bo,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new z(t.mintA.address),new z(t.mintB.address)],y=d.equals(H),f=p.equals(H),b,g,{account:P,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=P,A&&m.addInstruction(A);let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=h,I&&m.addInstruction(I),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let T=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=le(l,i,Wt),{publicKey:B}=pr(r,i),{publicKey:C}=le(s,new z(t.lpMint.address),Wt);return m.addInstruction({instructions:[Hc({programId:r!=null?r:Io,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:Bo,nftMint:i,nftAccount:S,lockPda:B,poolId:new z(t.id),mintLp:new z(T.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new z(T.vault.A),poolVaultB:new z(T.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[E.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=mr.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ne((1-i)*1e4)).div(new Ne(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var h,I,T,S,B,C,x,R,F;let c=1-Number(r.toSignificant())/100,u=new Ne(new M(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ne(0)),d=new Ne(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(T=(I=l.fee)==null?void 0:I.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Fe,fee:void 0,expirationTime:void 0};if(!m.isZero()){let O=qf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),f=ge(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Le(new Ne(1)).add(r),g=new Le(new Ne(1)).sub(r),P=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ne(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),A=ge(g.mul(f.amount.sub((B=f.fee)!=null?B:new Ne(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(F=(R=P.fee)==null?void 0:R.toString())!=null?F:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:P,minAnotherAmount:A,liquidity:y}}};function qf(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Ne(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Ne(1))),{amountA:i,amountB:r}}import{PublicKey as Xn}from"@solana/web3.js";import{createTransferInstruction as ol,TOKEN_PROGRAM_ID as _e,TOKEN_2022_PROGRAM_ID as wr}from"@solana/spl-token";import Pr from"bn.js";var $c={[Ni.toBase58()]:3},Jc={3:Ni};var sa=V([Ae(5),Ae(8),K("ownAddress"),k("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),k("baseDepositsTotal"),k("baseFeesAccrued"),K("quoteVault"),k("quoteDepositsTotal"),k("quoteFeesAccrued"),k("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),k("baseLotSize"),k("quoteLotSize"),k("feeRateBps"),k("referrerRebatesAccrued"),Ae(7)]),el={3:sa};import{PublicKey as tl}from"@solana/web3.js";var gr=me("Serum"),Ar=class{static getProgramId(e){let t=Jc[e];return t||gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=$c[t];return n||gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=el[e];return t||gr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=tl.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:tl.default,nonce:i}}};import{PublicKey as $,SystemProgram as aa,TransactionInstruction as ua}from"@solana/web3.js";import Gn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Uf,TOKEN_2022_PROGRAM_ID as Gf,TOKEN_PROGRAM_ID as ca}from"@solana/spl-token";function xK(o,e,t,n,i,r,s,a,c,u,l,m){let d=V([W("instruction"),k("amountIn"),k("amountOut")]),p=[{pubkey:aa.programId,isSigner:!1,isWritable:!1},{pubkey:ca,isSigner:!1,isWritable:!1},{pubkey:new $(t.programId),isSigner:!1,isWritable:!1},{pubkey:new $(t.id),isSigner:!1,isWritable:!0},{pubkey:new $(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ua({keys:p,programId:o,data:y})}function SK(o,e,t,n,i,r,s,a,c,u){let l=V([W("instruction")]),m=[{pubkey:aa.programId,isSigner:!1,isWritable:!1},{pubkey:ca,isSigner:!1,isWritable:!1},{pubkey:new $(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new $(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new $(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new $("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ua({keys:m,programId:o,data:d})}function Xf(o,e,t,n,i,r,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[w({pubkey:ca,isWritable:!1}),w({pubkey:Gf,isWritable:!1}),w({pubkey:Uf,isWritable:!1}),w({pubkey:aa.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})];b.push(w({pubkey:t})),b.push(w({pubkey:i}));let g=[c,u],P=[l,m],A=[r,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=A[S]===B.mintA.address;if(b.push(w({pubkey:new $(B.programId),isWritable:!1})),S===g.length-1?b.push(w({pubkey:i})):b.push(w({pubkey:n})),b.push(w({pubkey:new $(A[S])})),b.push(w({pubkey:new $(A[S+1])})),B.version===6){let x=P[S];b.push(w({pubkey:new $(x.config.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new $(B.observationId)})),b.push(w({pubkey:fn})),b.push(w({pubkey:ot(new $(B.programId),new $(B.id)).publicKey})),f.push(zf(B.sqrtPriceX64.toString(),C));for(let R of(T=y[S])!=null?T:[])b.push(w({pubkey:new $(R)}))}else if(B.version===5){let x=P[S];b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.authority),isWritable:!1})),b.push(w({pubkey:new $(x.marketProgramId)})),b.push(w({pubkey:new $(x.marketAuthority)})),b.push(w({pubkey:su,isWritable:!1})),b.push(w({pubkey:new $(x.openOrders)})),b.push(w({pubkey:new $(x.vault.A)})),b.push(w({pubkey:new $(x.vault.B)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.marketId)})),b.push(w({pubkey:new $(x.marketBids)})),b.push(w({pubkey:new $(x.marketAsks)})),b.push(w({pubkey:new $(x.marketEventQueue)})),b.push(w({pubkey:new $(x.marketBaseVault)})),b.push(w({pubkey:new $(x.marketQuoteVault)}))}else if(B.version===4){let x=P[S],R=B.status!==1;b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(x.authority),isWritable:!1})),b.push(w({pubkey:new $(R?x.id:x.marketProgramId)})),b.push(w({pubkey:new $(R?x.id:x.marketAuthority)})),b.push(w({pubkey:new $(R?x.id:x.openOrders)})),b.push(w({pubkey:new $(x.vault.A)})),b.push(w({pubkey:new $(x.vault.B)})),b.push(w({pubkey:new $(R?x.id:x.marketId)})),b.push(w({pubkey:new $(R?x.id:x.marketBids)})),b.push(w({pubkey:new $(R?x.id:x.marketAsks)})),b.push(w({pubkey:new $(R?x.id:x.marketEventQueue)})),b.push(w({pubkey:new $(R?x.id:x.marketBaseVault)})),b.push(w({pubkey:new $(R?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=P[S];b.push(w({pubkey:new $(x.authority)})),b.push(w({pubkey:new $(x.config.id)})),b.push(w({pubkey:new $(x.id)})),b.push(w({pubkey:new $(C?x.vault.A:x.vault.B)})),b.push(w({pubkey:new $(C?x.vault.B:x.vault.A)})),b.push(w({pubkey:new $(B.observationId)}))}else throw Error("pool type error")}let h=V([W("insId"),k("amountIn"),k("amountOut"),Y(ee(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(h.span);return h.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new ua({keys:b,programId:o,data:I})}function zf(o,e){if(o)if(e){let t=new Gn(o).div(new Gn(25));return t.gt(ji)?t:ji}else{let t=new Gn(o).mul(new Gn(25));return t.lt(Hi)?t:Hi}else return e?ji:Hi}function nl({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Kt.add(Tt):Ct.sub(Tt);return ke.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new Gn(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:[fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[nr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Gn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.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:[Xf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Gn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var an=new Pr(0),ci=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:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[tn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[tn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await nn({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?wr:_e,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?wr:_e);else{let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?wr:_e,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=h,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[tn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:_e})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let h=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?wr:_e)}let P=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=nl({routeProgram:r,inputMint:d,swapInfo:D(L({},e),{poolInfo:[...e.poolInfoList],poolKey:P,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[ol(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),h.addInstruction(A);let{transactions:I}=s===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[ol(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ko,clmm:n=yn,cpmm:i=To}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Jo.offsetOf("baseMint"),length:64}}),s=V([K("baseMint"),K("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:_n.span}],dataSlice:{offset:_n.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:yr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===Xn.default.toString()?H:e,t=t.toString()===Xn.default.toString()?H:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:_e,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:_e,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:_e,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:_e,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=ir(r),a={};Object.values(s).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new Xn(f.mintA.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new Xn(f.mintB.address),programId:_e,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(_e)?(i.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}):i.add(b),f.mintProgramB.equals(_e)?(i.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}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Qn({connection:this.scope.connection,mints:Array.from(i).map(f=>new Xn(f))});a=L(L({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>D(L({},f),{[b]:D(L({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,P,A,h,I,T,S,B,C;let m=l===void 0?new Pr(0):e.raw.mul(new Pr(l.feeBps.toNumber())).div(new Pr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=D(L({},t),{address:ht(t.address).toString()}),b=[];for(let x of n)try{b.push(D(L({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(R){this.logDebug("direct error",x.version,x.id.toString(),R.message)}this.logDebug("direct done");for(let[x,R]of Object.entries(i)){let F={chainId:101,address:x,programId:R.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:R.mDecimals,tags:[],extensions:{}},O=R.in.map(U=>{try{return{pool:U,data:this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:F,amountIn:p})}}catch(q){this.logDebug("route in error",U.version,U.id.toString(),q.message);return}}).sort((U,q)=>{var Ve,ft,yt,kt;let Re=U===void 0?an:U.data.amountOut.amount.raw.sub((ft=(Ve=U.data.amountOut.fee)==null?void 0:Ve.raw)!=null?ft:an),qt=q===void 0?an:q.data.amountOut.amount.raw.sub((kt=(yt=q.data.amountOut.fee)==null?void 0:yt.raw)!=null?kt:an);return Re.lt(qt)?1:-1})[0];if(O===void 0)continue;let X=new be(er(F),O.data.amountOut.amount.raw.sub((P=(g=O.data.amountOut.fee)==null?void 0:g.raw)!=null?P:an));for(let U of R.out)try{let q=this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:X});b.push(D(L({},q),{allTrade:!!(O.data.allTrade&&q.allTrade),amountIn:O.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new M(new $e({baseToken:O.data.amountIn.amount.token,denominator:O.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((h=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?h:an)}).toFixed()),priceImpact:new M(O.data.priceImpact.add(q.priceImpact).toFixed()),fee:[O.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[O.pool,U],remainingAccounts:[O.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new be(O.data.amountOut.amount.token,((S=(T=O.data.amountOut.fee)==null?void 0:T.raw)!=null?S:an).add((C=(B=q.amountOut.fee)==null?void 0:B.raw)!=null?C:an)):void 0,middleToken:O.data.amountOut.amount.token,poolReady:O.data.poolReady&&q.poolReady,poolType:[O.data.poolType,q.poolType],feeConfig:y,expirationTime:Vt(O.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",U.version,U.id.toString(),q.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(R=>R.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,R)=>x.amountOut.amount.raw.sub(R.amountOut.amount.raw).gt(an)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:P,executionPriceX64:A}=Me.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(y.toFixed()),executionPrice:new M(f.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:Vt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:$o(D(L({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:$o(D(L({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:$o(D(L({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:$o(D(L({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,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 i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await ze(this.scope.connection,Array.from(s).map(l=>({pubkey:new Xn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=sa.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ar.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:D(L({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=L({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Js({programId:new Xn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:lo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:ut({address:u.mintLp.toBase58(),programId:_e.toBase58(),decimals:u.lpDecimals}),config:D(L({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Qf,Transaction as la,TransactionInstruction as Yf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as jf}from"@solana/spl-token";import il from"bn.js";var ct=class extends Ke{static getPdaPoolId(e,t){return ae([ct.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ae([ct.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new il(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>ct.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ct.VERSION_PROJECT.length;l++)a.push(...s.map(m=>ct.getPdaOwnerId(t,m,i,l).publicKey));let c=await Lt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==ct.POOL_LAYOUT.span||b.data.length!==ct.OWNER_LAYOUT.span)continue;let g=ct.POOL_LAYOUT.decode(f.data),P=ct.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),h=g.endTime.toNumber(),I=P.tokenInfo.map(B=>B.debtAmount.gt(new il(0))).filter(B=>!B).length!==3,T=r>A&&r<h&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:ct.VERSION_PROJECT[m],openTime:A,endTime:h,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:P.tokenInfo[C].debtAmount.add(P.tokenInfo[C].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(we.WSOL.mint),associatedOnly:c.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[ct.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(we.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(we.WSOL.mint),associatedOnly:m.mintAddress.equals(we.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ct.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Mi(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new la().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new la().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new la().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=V([]),r=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:jf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Yf({keys:r,programId:e,data:a})}},Rt=ct;Rt.CLAIMED_NUM=3,Rt.POOL_LAYOUT=V([Ae(8),W("bump"),W("status"),k("openTime"),k("endTime"),K("ammId"),Y(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),k("perLpLoss"),k("totalClaimedAmount")]),ct.CLAIMED_NUM,"tokenInfo"),Y(k(),10,"padding")]),Rt.OWNER_LAYOUT=V([Ae(8),W("bump"),W("version"),K("poolId"),K("owner"),k("lpAmount"),Y(V([K("mintAddress"),k("debtAmount"),k("claimedAmount")]),ct.CLAIMED_NUM,"tokenInfo"),Y(k(),4,"padding")]),Rt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qf(e)),Rt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Rt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as mi}from"@solana/web3.js";import rl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Hf,TransactionInstruction as da}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as pa}from"@solana/spl-token";var ma=V([W("instruction"),hu("amount")]),li=V([W("instruction")]);function P0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:Si,isSigner:!1,isWritable:!1},{pubkey:pa,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],i=Buffer.alloc(ma.span);return ma.encode({instruction:1,amount:Number(e)},i),new da({keys:n,programId:o,data:i})}function kr({programId:o},e){let t=[{pubkey:pa,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(li.span);return li.encode({instruction:2},n),new da({keys:t,programId:o,data:n})}function fa(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(li.span);li.encode({instruction:2},s);let a=[{pubkey:pa,isWritable:!1,isSigner:!1},{pubkey:Hf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new da({programId:e.programId,keys:a,data:s})}var Zf={[xo.IDO_PROGRAM_ID_V1.toString()]:1,[xo.IDO_PROGRAM_ID_V2.toString()]:2,[xo.IDO_PROGRAM_ID_V3.toString()]:3,[xo.IDO_PROGRAM_ID_V4.toString()]:4},mo=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=Zf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new rl(e.coin).isZero(),!new rl(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[kr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[kr({programId:new mi(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[kr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new mi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new mi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[fa(D(L({},g),{side:"base"}))]:[],...l?[fa(D(L({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as $f}from"@solana/web3.js";import{MintLayout as Jf,TOKEN_2022_PROGRAM_ID as ya,TOKEN_PROGRAM_ID as ba}from"@solana/spl-token";var di=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:i="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Xt.address,Xt),this._mintGroup.official.add(Xt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,D(L({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ya.toBase58():ba.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ya.toBase58():ba.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,D(L({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ya.toBase58():ba.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Xt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(L({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new $f(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Jf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var hr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Nt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=me("Raydium"),this.farm=new Uo({scope:this,moduleName:"Raydium_Farm"}),this.account=new Mo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new oi({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new di({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new ci({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new ri({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new ui({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Rt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new uo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new mo({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=ey({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Fi({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),u=new hr(D(L({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Di);return this._owner.publicKey}setOwner(e){return this._owner=e?new Nt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(pu);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(Di),new Error(Di)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>D(L({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var gC=o=>o;export{dy as ACCOUNT_TYPE_SIZE,Fg as ALL_PROGRAM_ID,Np as AMM_CONFIG_SEED,Dm as AMM_STABLE,ko as AMM_V4,eb as ANAMint,We as API_URLS,gl as AccountType,Fi as Api,$u as BIT_PRECISION,_t as BNDivCeil,Rn as BNLayout,ag as BN_100,ug as BN_1000,cg as BN_10000,sg as BN_FIVE,za as BN_ONE,xn as BN_TEN,rg as BN_THREE,ig as BN_TWO,Fe as BN_ZERO,gw as BitStructure,ku as Blob,ho as CLMM_LOCK_AUTH_ID,$n as CLMM_LOCK_PROGRAM_ID,yn as CLMM_PROGRAM_ID,Dr as CLOCK_PROGRAM_ID,Zr as CREATE_CPMM_POOL_AUTH,zm as CREATE_CPMM_POOL_FEE_ACC,To as CREATE_CPMM_POOL_PROGRAM,ri as Clmm,fc as ClmmConfigLayout,ke as ClmmInstrument,ur as ConstantProductCurve,Zc as CpmmConfigInfoLayout,cr as CpmmFee,yr as CpmmPoolInfoLayout,Ao as Currency,Bn as CurrencyAmount,mr as CurveCalculator,Dg as DEVNET_PROGRAM_ID,BA as DEV_API_URLS,Ym as DEV_CREATE_CPMM_POOL_AUTH,jm as DEV_CREATE_CPMM_POOL_FEE_ACC,Qm as DEV_CREATE_CPMM_POOL_PROGRAM,Zm as DEV_LOCK_CPMM_AUTH,Hm as DEV_LOCK_CPMM_PROGRAM,ef as DataElement,tb as ETHMint,Es as EXTENSION_TICKARRAY_BITMAP_SIZE,Fu as FARM_LOCK_MINT,Du as FARM_LOCK_VAULT,Yr as FARM_PROGRAM_ID_V3,ru as FARM_PROGRAM_ID_V4,jr as FARM_PROGRAM_ID_V5,Zn as FARM_PROGRAM_ID_V6,xt as FARM_PROGRAM_TO_VERSION,qu as FARM_VERSION_TO_LEDGER_LAYOUT,Wu as FARM_VERSION_TO_STATE_LAYOUT,au as FEE_DESTINATION_ID,Zi as FEE_RATE_DENOMINATOR,na as FEE_RATE_DENOMINATOR_VALUE,qp as FETCH_TICKARRAY_COUNT,Mp as Fee,se as Fraction,xo as IDO_ALL_PROGRAM,qm as IDO_PROGRAM_ID_V1,Um as IDO_PROGRAM_ID_V2,Gm as IDO_PROGRAM_ID_V3,Xm as IDO_PROGRAM_ID_V4,xi as INSTRUCTION_PROGRAM_ID,E as InstructionType,cu as JupTokenType,tr as LIQUIDITY_FEES_DENOMINATOR,qs as LIQUIDITY_FEES_NUMERATOR,su as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Zp as LIQUIDITY_VERSION_TO_SERUM_VERSION,BI as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Bo as LOCK_CPMM_AUTH,Io as LOCK_CPMM_PROGRAM,Vf as LOCK_LIQUIDITY_SEED,Ju as LOG_B_2_X32,ec as LOG_B_P_ERR_MARGIN_LOWER_X64,tc as LOG_B_P_ERR_MARGIN_UPPER_X64,Vi as LOOKUP_TABLE_CACHE,Lo as Layout,pe as LiquidityMath,ET as LockClPositionLayoutV2,vT as LockPositionLayout,dl as LogLevel,Br as Logger,ta as MARKET_STATE_LAYOUT_V2,sa as MARKET_STATE_LAYOUT_V3,el as MARKET_VERSION_TO_STATE_LAYOUT,tu as MAX_BASE64_SIZE,Ct as MAX_SQRT_PRICE_X64,Hi as MAX_SQRT_PRICE_X64_SUB_ONE,mt as MAX_TICK,Bi as MEMO_PROGRAM_ID,fn as MEMO_PROGRAM_ID2,Ht as METADATA_PROGRAM_ID,Kt as MIN_SQRT_PRICE_X64,ji as MIN_SQRT_PRICE_X64_ADD_ONE,at as MIN_TICK,so as MODEL_DATA_PUBKEY,Ar as Market,ie as MathUtil,Ms as MaxU64,Zu as MaxUint128,on as NEGATIVE_ONE,Jy as NRVMint,Wp as OBSERVATION_SEED,Tt as ONE,Hr as OPEN_BOOK_PROGRAM,Fp as OPERATION_SEED,yc as ObservationInfoLayout,Xp as ObservationLayout,bc as OperationLayout,ls as OptionLayout,Nt as Owner,zy as PAIMint,lc as POOL_LOCK_ID_SEED,vp as POOL_REWARD_VAULT_SEED,_p as POOL_SEED,Dp as POOL_TICK_ARRAY_BITMAP_SEED,Vp as POOL_VAULT_SEED,sc as POSITION_SEED,Le as Percent,lu as PoolFetchType,_n as PoolInfoLayout,Me as PoolUtils,Zo as PositionInfoLayout,Qp as PositionRewardInfoLayout,Yo as PositionUtils,$e as Price,VT as ProtocolPositionLayout,Yi as Q128,It as Q64,Xy as RAYMint,rt as RENT_PROGRAM_ID,hr as Raydium,zp as RewardInfo,Fc as RoundDirection,_r as Rounding,Wm as Router,$c as SERUM_PROGRAMID_TO_VERSION,Ni as SERUM_PROGRAM_ID_V3,Jc as SERUM_VERSION_TO_PROGRAMID,mu as SESSION_KEY,je as SOLMint,Xt as SOL_INFO,eI as SPL_MINT_LAYOUT,Qy as SRMMint,es as STORAGE_KEY,Si as SYSTEM_PROGRAM_ID,te as SqrtPriceMath,ro as StableLayout,ms as Structure,Nn as SwapMath,Mn as TICK_ARRAY_BITMAP_SIZE,Ep as TICK_ARRAY_SEED,Ze as TICK_ARRAY_SIZE,Ah as TICK_SPACINGS,Ye as TOKEN_WSOL,rn as TickArrayBitmap,pc as TickArrayBitmapExtensionLayout,Ho as TickArrayBitmapExtensionUtils,jo as TickArrayLayout,Yp as TickLayout,Vn as TickMath,fe as TickQuery,j as TickUtils,we as Token,be as TokenAmount,vi as TxBuilder,Kn as TxVersion,Go as U64Resolution,Ph as U64_IGNORE_RANGE,as as UInt,Yy as USDCMint,$y as USDHMint,jy as USDTMint,Fm as UTIL1216,ds as Union,vu as Voter,Ap as VoterDepositEntry,gp as VoterLockup,Vu as VoterRegistrar,bp as VoterVotingMintConfig,H as WSOLMint,Xi as WideBits,en as WrappedLayout,ye as ZERO,qa as _100_PERCENT,w as accountMeta,Fb as add,Li as addComputeBudget,zs as addLiquidityLayout,nP as array,bs as associatedLedgerAccountLayout,us as bits,Ae as blob,Ge as bool,Cs as calFarmRewardAmount,Sf as ceilDiv,wo as checkLegacyTxSize,Po as checkV0TxSize,Kr as chunkArray,li as claimLayout,dc as clmmComputeInfoToApiInfo,tn as closeAccountInstruction,Hc as collectCpFeeInstruction,vr as commonSystemAccountMeta,Oi as confirmTransaction,Df as cpmmLockPositionInstruction,Fo as createAssociatedLedgerAccountInstruction,me as createLogger,Tc as createPoolFeeLayout,Hs as createPoolV4InstructionV2,II as createPoolV4Layout,nn as createWSolAccountInstructions,Xw as cstr,lb as currencyEquals,Rm as decimalToFraction,Hd as decodeBool,_b as div,Ki as divCeil,lt as dwLayout,Zd as encodeBool,zA as endlessRetry,Bm as eq,Dw as f32,Ww as f32be,qw as f64,Uw as f64be,Ps as farmAddRewardLayout,HP as farmLedgerLayoutV3_1,_o as farmLedgerLayoutV3_2,ZP as farmLedgerLayoutV5_1,Nu as farmLedgerLayoutV5_2,_u as farmLedgerLayoutV6_1,Gu as farmRewardInfoToConfig,As as farmRewardLayout,ws as farmRewardRestartLayout,yp as farmRewardTimeInfoLayout,Ou as farmStateV3Layout,Mu as farmStateV5Layout,No as farmStateV6Layout,hk as fetchMultipleFarmInfoAndUpdate,iB as fetchMultipleInfo,Qn as fetchMultipleMintInfos,ae as findProgramAddress,Us as fixedSwapInLayout,Gs as fixedSwapOutLayout,Dc as floorDiv,Mi as forecastTransactionSize,mf as formatLayout,Oe as generatePubKey,le as getATAAddress,Uu as getAssociatedAuthority,or as getAssociatedConfigId,st as getAssociatedLedgerAccount,vo as getAssociatedLedgerPoolAccount,Pf as getAssociatedOpenOrders,ea as getAssociatedPoolKeys,pr as getCpLockPda,rS as getCpmmPdaAmmConfigId,ia as getCpmmPdaPoolId,Uc as getCreatePoolKeys,ja as getDate,Rs as getDepositEntryIndex,Sc as getDxByDyBaseIn,xc as getDyByDxBaseIn,Lg as getEpochInfo,oo as getFarmLedgerLayout,wp as getFarmStateLayout,Js as getLiquidityAssociatedAuthority,Dn as getLiquidityAssociatedId,dT as getLiquidityFromAmounts,Eb as getMax,Lt as getMultipleAccountsInfo,ze as getMultipleAccountsInfoWithCustomFlags,$r as getMultipleLookupTableInfo,Sh as getPdaAmmConfigId,ot as getPdaExBitmapAccount,Qo as getPdaLockClPositionIdV2,vs as getPdaLockPositionId,Nf as getPdaLpMint,On as getPdaMetadataKey,cc as getPdaObservationAccount,dr as getPdaObservationId,zo as getPdaOperationAccount,dt as getPdaPersonalPositionAddress,lo as getPdaPoolAuthority,ac as getPdaPoolId,uc as getPdaPoolRewardVaulId,Vs as getPdaPoolVaultId,Et as getPdaProtocolPositionAddress,de as getPdaTickArrayAddress,qc as getPdaVault,Hn as getRecentBlockHash,Ts as getRegistrarAddress,Jm as getSessionKey,Kc as getStablePrice,Om as getTime,Xb as getTimestamp,Ks as getTokenOwnerRecordAddress,Ug as getTransferAmountFee,ge as getTransferAmountFeeV2,xs as getVoterAddress,Ss as getVoterWeightRecordAddress,Bs as getVotingMintAuthority,Is as getVotingTokenMint,Kp as governanceCreateTokenOwnerRecord,Aw as greedy,Im as gt,Nb as gte,Ku as i128,hh as i16ToBytes,$i as i32ToBytes,eo as i64,Su as i8,Xs as initPoolLayout,fs as initTokenAccountInstruction,If as initializeMarket,bg as intersection,Za as isDateAfter,Ha as isDateBefore,Lm as isDecimal,vb as isMeaningfulNumber,Ya as isNumber,ks as isValidFarmVersion,Xo as isZero,Ie as jsonInfo2PoolKeys,Tk as judgeFarmType,Ns as leadingZeros,rc as leastSignificantBit,Jo as liquidityStateV4Layout,$p as liquidityStateV5Layout,Ob as lt,Mb as lte,Hy as mSOLMint,nr as makeAMMSwapInstruction,Lc as makeAddLiquidityInstruction,Os as makeAddNewRewardInstruction,kr as makeClaimInstruction,fa as makeClaimInstructionV4,jc as makeCpmmLockInstruction,Xc as makeCreateCpmmPoolInInstruction,Xu as makeCreateFarmInstruction,rr as makeCreateMarketInstruction,zu as makeCreatorWithdrawFarmRewardInstruction,zc as makeDepositCpmmInInstruction,Yu as makeDepositInstructionV3,ju as makeDepositInstructionV5,Hu as makeDepositInstructionV6,Fk as makeDepositTokenInstruction,Wk as makeDepositWithdrawInstruction,qI as makeInitPoolInstructionV4,P0 as makePurchaseInstruction,Ls as makeRestartRewardInstruction,Oc as makeSimulatePoolInfoInstruction,fr as makeSwapCpmmBaseInInInstruction,Yc as makeSwapCpmmBaseOutInInstruction,ff as makeSwapFixedInInstruction,yf as makeSwapFixedOutInstruction,nl as makeSwapInstruction,Lu as makeTransferInstruction,Qc as makeWithdrawCpmmInInstruction,qo as makeWithdrawInstructionV3,Qu as makeWithdrawInstructionV4,Wo as makeWithdrawInstructionV5,Do as makeWithdrawInstructionV6,Dk as makeWithdrawTokenInstruction,Vt as minExpirationTime,wh as mockCreatePoolInfo,nc as mockV3CreatePoolInfo,tf as modelDataInfoLayout,ic as mostSignificantBit,Xr as mul,zr as notInnerObject,Mw as ns64,Fw as ns64be,hu as nu64,Sw as nu64be,cs as offset,fg as offsetDateTime,Zw as option,Z as parseBigNumberish,Sn as parseNumberInfo,ou as parseSimulateLogToJson,$t as parseSimulateValue,Ru as parseTokenAccountResp,lI as parseTokenInfo,Pn as poolTypeV6,Cn as printSimulate,K as publicKey,ma as purchaseLayout,dp as realFarmStateV3Layout,pp as realFarmStateV5Layout,fp as realFarmV6Layout,Xa as recursivelyDecimalToFraction,js as removeLiquidityInstruction,Qs as removeLiquidityLayout,xK as route1Instruction,SK as route2Instruction,Xf as routeInstruction,tP as rustEnum,Cw as s16,Nw as s16be,Rw as s24,_w as s24be,tt as s32,Vw as s32be,Lw as s40,vw as s40be,Ow as s48,Ew as s48be,Kw as s8,Y as seq,oy as setLoggerLevel,Km as shakeFractionDecimal,nu as simulateMultipleInstruction,WI as simulatePoolInfoInstruction,_m as simulateTransaction,Ua as sleep,ht as solToWSol,dI as solToWSolToken,An as splAccountLayout,Fa as splitNumber,Zy as stSOLMint,eP as str,V as struct,Vb as sub,Jw as tagged,Gr as tenExponential,ir as toAmmComputePoolInfo,ut as toApiV3Token,Cm as toBN,iu as toBuffer,kn as toFeeConfig,Qa as toFraction,Lb as toFractionWithDecimals,lg as toPercent,er as toToken,$o as toTokenAmount,mI as toTokenInfo,mg as toTokenPrice,dg as toTotalPrice,Ga as toUsdCurrency,_s as trailingZeros,Og as transformTxToBase64,Fr as tryParsePublicKey,Vm as txToBase64,ee as u128,Jt as u16,oc as u16ToBytes,hw as u16be,ww as u24,Tw as u24be,nt as u32,Th as u32ToBytes,Iw as u32be,Pw as u40,Bw as u40be,kw as u48,xw as u48be,k as u64,W as u8,oP as union,gC as unionArr,Gw as unionLayoutDiscriminator,Ag as uniq,Pp as updateFarmPoolInfo,Ei as updateReqHistory,zw as utf8,Er as validateAndParsePublicKey,hs as validateFarmRewards,$w as vec,$d as vecU8,Rp as voterStakeRegistryCreateDepositEntry,Cp as voterStakeRegistryCreateVoter,Bp as voterStakeRegistryDeposit,xp as voterStakeRegistryUpdateVoterWeightRecord,Sp as voterStakeRegistryWithdraw,pI as wSolToSolToken,gs as withdrawRewardLayout,gg as xor,iP as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map