llll-sdk 0.0.0-experimental-20260116143323 → 0.0.0-experimental-20260119174721

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Nr=Object.create;var Oe=Object.defineProperty;var Ir=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Br=Object.getPrototypeOf,qr=Object.prototype.hasOwnProperty;var Fr=(n,r)=>()=>(r||n((r={exports:{}}).exports,r),r.exports),Ur=(n,r)=>{for(var i in r)Oe(n,i,{get:r[i],enumerable:!0})},tr=(n,r,i,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of Er(r))!qr.call(n,e)&&e!==i&&Oe(n,e,{get:()=>r[e],enumerable:!(o=Ir(r,e))||o.enumerable});return n};var yi=(n,r,i)=>(i=n!=null?Nr(Br(n)):{},tr(r||!n||!n.__esModule?Oe(i,"default",{value:n,enumerable:!0}):i,n)),jr=n=>tr(Oe({},"__esModule",{value:!0}),n);var Cr=Fr((Ar,Fi)=>{"use strict";(function(n,r){"use strict";function i(p,t){if(!p)throw new Error(t||"Assertion failed")}function o(p,t){p.super_=t;var s=function(){};s.prototype=t.prototype,p.prototype=new s,p.prototype.constructor=p}function e(p,t,s){if(e.isBN(p))return p;this.negative=0,this.words=null,this.length=0,this.red=null,p!==null&&((t==="le"||t==="be")&&(s=t,t=10),this._init(p||0,t||10,s||"be"))}typeof n=="object"?n.exports=e:r.BN=e,e.BN=e,e.wordSize=26;var a;try{typeof window<"u"&&typeof window.Buffer<"u"?a=window.Buffer:a=require("buffer").Buffer}catch{}e.isBN=function(t){return t instanceof e?!0:t!==null&&typeof t=="object"&&t.constructor.wordSize===e.wordSize&&Array.isArray(t.words)},e.max=function(t,s){return t.cmp(s)>0?t:s},e.min=function(t,s){return t.cmp(s)<0?t:s},e.prototype._init=function(t,s,u){if(typeof t=="number")return this._initNumber(t,s,u);if(typeof t=="object")return this._initArray(t,s,u);s==="hex"&&(s=16),i(s===(s|0)&&s>=2&&s<=36),t=t.toString().replace(/\s+/g,"");var f=0;t[0]==="-"&&(f++,this.negative=1),f<t.length&&(s===16?this._parseHex(t,f,u):(this._parseBase(t,s,f),u==="le"&&this._initArray(this.toArray(),s,u)))},e.prototype._initNumber=function(t,s,u){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[t&67108863],this.length=1):t<4503599627370496?(this.words=[t&67108863,t/67108864&67108863],this.length=2):(i(t<9007199254740992),this.words=[t&67108863,t/67108864&67108863,1],this.length=3),u==="le"&&this._initArray(this.toArray(),s,u)},e.prototype._initArray=function(t,s,u){if(i(typeof t.length=="number"),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var f=0;f<this.length;f++)this.words[f]=0;var h,v,P=0;if(u==="be")for(f=t.length-1,h=0;f>=0;f-=3)v=t[f]|t[f-1]<<8|t[f-2]<<16,this.words[h]|=v<<P&67108863,this.words[h+1]=v>>>26-P&67108863,P+=24,P>=26&&(P-=26,h++);else if(u==="le")for(f=0,h=0;f<t.length;f+=3)v=t[f]|t[f+1]<<8|t[f+2]<<16,this.words[h]|=v<<P&67108863,this.words[h+1]=v>>>26-P&67108863,P+=24,P>=26&&(P-=26,h++);return this._strip()};function d(p,t){var s=p.charCodeAt(t);if(s>=48&&s<=57)return s-48;if(s>=65&&s<=70)return s-55;if(s>=97&&s<=102)return s-87;i(!1,"Invalid character in "+p)}function c(p,t,s){var u=d(p,s);return s-1>=t&&(u|=d(p,s-1)<<4),u}e.prototype._parseHex=function(t,s,u){this.length=Math.ceil((t.length-s)/6),this.words=new Array(this.length);for(var f=0;f<this.length;f++)this.words[f]=0;var h=0,v=0,P;if(u==="be")for(f=t.length-1;f>=s;f-=2)P=c(t,s,f)<<h,this.words[v]|=P&67108863,h>=18?(h-=18,v+=1,this.words[v]|=P>>>26):h+=8;else{var _=t.length-s;for(f=_%2===0?s+1:s;f<t.length;f+=2)P=c(t,s,f)<<h,this.words[v]|=P&67108863,h>=18?(h-=18,v+=1,this.words[v]|=P>>>26):h+=8}this._strip()};function g(p,t,s,u){for(var f=0,h=0,v=Math.min(p.length,s),P=t;P<v;P++){var _=p.charCodeAt(P)-48;f*=u,_>=49?h=_-49+10:_>=17?h=_-17+10:h=_,i(_>=0&&h<u,"Invalid character"),f+=h}return f}e.prototype._parseBase=function(t,s,u){this.words=[0],this.length=1;for(var f=0,h=1;h<=67108863;h*=s)f++;f--,h=h/s|0;for(var v=t.length-u,P=v%f,_=Math.min(v,v-P)+u,l=0,y=u;y<_;y+=f)l=g(t,y,y+f,s),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(P!==0){var U=1;for(l=g(t,y,t.length,s),y=0;y<P;y++)U*=s;this.imuln(U),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this._strip()},e.prototype.copy=function(t){t.words=new Array(this.length);for(var s=0;s<this.length;s++)t.words[s]=this.words[s];t.length=this.length,t.negative=this.negative,t.red=this.red};function m(p,t){p.words=t.words,p.length=t.length,p.negative=t.negative,p.red=t.red}if(e.prototype._move=function(t){m(t,this)},e.prototype.clone=function(){var t=new e(null);return this.copy(t),t},e.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},e.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},e.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{e.prototype[Symbol.for("nodejs.util.inspect.custom")]=M}catch{e.prototype.inspect=M}else e.prototype.inspect=M;function M(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var S=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],T=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];e.prototype.toString=function(t,s){t=t||10,s=s|0||1;var u;if(t===16||t==="hex"){u="";for(var f=0,h=0,v=0;v<this.length;v++){var P=this.words[v],_=((P<<f|h)&16777215).toString(16);h=P>>>24-f&16777215,f+=2,f>=26&&(f-=26,v--),h!==0||v!==this.length-1?u=S[6-_.length]+_+u:u=_+u}for(h!==0&&(u=h.toString(16)+u);u.length%s!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}if(t===(t|0)&&t>=2&&t<=36){var l=A[t],y=T[t];u="";var U=this.clone();for(U.negative=0;!U.isZero();){var B=U.modrn(y).toString(t);U=U.idivn(y),U.isZero()?u=B+u:u=S[l-B.length]+B+u}for(this.isZero()&&(u="0"+u);u.length%s!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}i(!1,"Base should be between 2 and 36")},e.prototype.toNumber=function(){var t=this.words[0];return this.length===2?t+=this.words[1]*67108864:this.length===3&&this.words[2]===1?t+=4503599627370496+this.words[1]*67108864:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-t:t},e.prototype.toJSON=function(){return this.toString(16,2)},a&&(e.prototype.toBuffer=function(t,s){return this.toArrayLike(a,t,s)}),e.prototype.toArray=function(t,s){return this.toArrayLike(Array,t,s)};var O=function(t,s){return t.allocUnsafe?t.allocUnsafe(s):new t(s)};e.prototype.toArrayLike=function(t,s,u){this._strip();var f=this.byteLength(),h=u||Math.max(1,f);i(f<=h,"byte array longer than desired length"),i(h>0,"Requested array length <= 0");var v=O(t,h),P=s==="le"?"LE":"BE";return this["_toArrayLike"+P](v,f),v},e.prototype._toArrayLikeLE=function(t,s){for(var u=0,f=0,h=0,v=0;h<this.length;h++){var P=this.words[h]<<v|f;t[u++]=P&255,u<t.length&&(t[u++]=P>>8&255),u<t.length&&(t[u++]=P>>16&255),v===6?(u<t.length&&(t[u++]=P>>24&255),f=0,v=0):(f=P>>>24,v+=2)}if(u<t.length)for(t[u++]=f;u<t.length;)t[u++]=0},e.prototype._toArrayLikeBE=function(t,s){for(var u=t.length-1,f=0,h=0,v=0;h<this.length;h++){var P=this.words[h]<<v|f;t[u--]=P&255,u>=0&&(t[u--]=P>>8&255),u>=0&&(t[u--]=P>>16&255),v===6?(u>=0&&(t[u--]=P>>24&255),f=0,v=0):(f=P>>>24,v+=2)}if(u>=0)for(t[u--]=f;u>=0;)t[u--]=0},Math.clz32?e.prototype._countBits=function(t){return 32-Math.clz32(t)}:e.prototype._countBits=function(t){var s=t,u=0;return s>=4096&&(u+=13,s>>>=13),s>=64&&(u+=7,s>>>=7),s>=8&&(u+=4,s>>>=4),s>=2&&(u+=2,s>>>=2),u+s},e.prototype._zeroBits=function(t){if(t===0)return 26;var s=t,u=0;return(s&8191)===0&&(u+=13,s>>>=13),(s&127)===0&&(u+=7,s>>>=7),(s&15)===0&&(u+=4,s>>>=4),(s&3)===0&&(u+=2,s>>>=2),(s&1)===0&&u++,u},e.prototype.bitLength=function(){var t=this.words[this.length-1],s=this._countBits(t);return(this.length-1)*26+s};function L(p){for(var t=new Array(p.bitLength()),s=0;s<t.length;s++){var u=s/26|0,f=s%26;t[s]=p.words[u]>>>f&1}return t}e.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,s=0;s<this.length;s++){var u=this._zeroBits(this.words[s]);if(t+=u,u!==26)break}return t},e.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},e.prototype.toTwos=function(t){return this.negative!==0?this.abs().inotn(t).iaddn(1):this.clone()},e.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},e.prototype.isNeg=function(){return this.negative!==0},e.prototype.neg=function(){return this.clone().ineg()},e.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},e.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var s=0;s<t.length;s++)this.words[s]=this.words[s]|t.words[s];return this._strip()},e.prototype.ior=function(t){return i((this.negative|t.negative)===0),this.iuor(t)},e.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},e.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},e.prototype.iuand=function(t){var s;this.length>t.length?s=t:s=this;for(var u=0;u<s.length;u++)this.words[u]=this.words[u]&t.words[u];return this.length=s.length,this._strip()},e.prototype.iand=function(t){return i((this.negative|t.negative)===0),this.iuand(t)},e.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},e.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},e.prototype.iuxor=function(t){var s,u;this.length>t.length?(s=this,u=t):(s=t,u=this);for(var f=0;f<u.length;f++)this.words[f]=s.words[f]^u.words[f];if(this!==s)for(;f<s.length;f++)this.words[f]=s.words[f];return this.length=s.length,this._strip()},e.prototype.ixor=function(t){return i((this.negative|t.negative)===0),this.iuxor(t)},e.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},e.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},e.prototype.inotn=function(t){i(typeof t=="number"&&t>=0);var s=Math.ceil(t/26)|0,u=t%26;this._expand(s),u>0&&s--;for(var f=0;f<s;f++)this.words[f]=~this.words[f]&67108863;return u>0&&(this.words[f]=~this.words[f]&67108863>>26-u),this._strip()},e.prototype.notn=function(t){return this.clone().inotn(t)},e.prototype.setn=function(t,s){i(typeof t=="number"&&t>=0);var u=t/26|0,f=t%26;return this._expand(u+1),s?this.words[u]=this.words[u]|1<<f:this.words[u]=this.words[u]&~(1<<f),this._strip()},e.prototype.iadd=function(t){var s;if(this.negative!==0&&t.negative===0)return this.negative=0,s=this.isub(t),this.negative^=1,this._normSign();if(this.negative===0&&t.negative!==0)return t.negative=0,s=this.isub(t),t.negative=1,s._normSign();var u,f;this.length>t.length?(u=this,f=t):(u=t,f=this);for(var h=0,v=0;v<f.length;v++)s=(u.words[v]|0)+(f.words[v]|0)+h,this.words[v]=s&67108863,h=s>>>26;for(;h!==0&&v<u.length;v++)s=(u.words[v]|0)+h,this.words[v]=s&67108863,h=s>>>26;if(this.length=u.length,h!==0)this.words[this.length]=h,this.length++;else if(u!==this)for(;v<u.length;v++)this.words[v]=u.words[v];return this},e.prototype.add=function(t){var s;return t.negative!==0&&this.negative===0?(t.negative=0,s=this.sub(t),t.negative^=1,s):t.negative===0&&this.negative!==0?(this.negative=0,s=t.sub(this),this.negative=1,s):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},e.prototype.isub=function(t){if(t.negative!==0){t.negative=0;var s=this.iadd(t);return t.negative=1,s._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var u=this.cmp(t);if(u===0)return this.negative=0,this.length=1,this.words[0]=0,this;var f,h;u>0?(f=this,h=t):(f=t,h=this);for(var v=0,P=0;P<h.length;P++)s=(f.words[P]|0)-(h.words[P]|0)+v,v=s>>26,this.words[P]=s&67108863;for(;v!==0&&P<f.length;P++)s=(f.words[P]|0)+v,v=s>>26,this.words[P]=s&67108863;if(v===0&&P<f.length&&f!==this)for(;P<f.length;P++)this.words[P]=f.words[P];return this.length=Math.max(this.length,P),f!==this&&(this.negative=1),this._strip()},e.prototype.sub=function(t){return this.clone().isub(t)};function I(p,t,s){s.negative=t.negative^p.negative;var u=p.length+t.length|0;s.length=u,u=u-1|0;var f=p.words[0]|0,h=t.words[0]|0,v=f*h,P=v&67108863,_=v/67108864|0;s.words[0]=P;for(var l=1;l<u;l++){for(var y=_>>>26,U=_&67108863,B=Math.min(l,t.length-1),$=Math.max(0,l-p.length+1);$<=B;$++){var K=l-$|0;f=p.words[K]|0,h=t.words[$]|0,v=f*h+U,y+=v/67108864|0,U=v&67108863}s.words[l]=U|0,_=y|0}return _!==0?s.words[l]=_|0:s.length--,s._strip()}var N=function(t,s,u){var f=t.words,h=s.words,v=u.words,P=0,_,l,y,U=f[0]|0,B=U&8191,$=U>>>13,K=f[1]|0,V=K&8191,J=K>>>13,rt=f[2]|0,G=rt&8191,et=rt>>>13,ht=f[3]|0,tt=ht&8191,X=ht>>>13,me=f[4]|0,ut=me&8191,st=me>>>13,ie=f[5]|0,at=ie&8191,nt=ie>>>13,De=f[6]|0,gt=De&8191,_t=De>>>13,ji=f[7]|0,wt=ji&8191,vt=ji>>>13,$i=f[8]|0,Mt=$i&8191,bt=$i>>>13,Wi=f[9]|0,yt=Wi&8191,kt=Wi>>>13,Zi=h[0]|0,St=Zi&8191,Pt=Zi>>>13,Ki=h[1]|0,At=Ki&8191,Ct=Ki>>>13,zi=h[2]|0,xt=zi&8191,Tt=zi>>>13,Gi=h[3]|0,Dt=Gi&8191,Ot=Gi>>>13,Hi=h[4]|0,Rt=Hi&8191,Lt=Hi>>>13,Vi=h[5]|0,Nt=Vi&8191,It=Vi>>>13,Xi=h[6]|0,Et=Xi&8191,Bt=Xi>>>13,Ji=h[7]|0,qt=Ji&8191,Ft=Ji>>>13,Yi=h[8]|0,Ut=Yi&8191,jt=Yi>>>13,Qi=h[9]|0,$t=Qi&8191,Wt=Qi>>>13;u.negative=t.negative^s.negative,u.length=19,_=Math.imul(B,St),l=Math.imul(B,Pt),l=l+Math.imul($,St)|0,y=Math.imul($,Pt);var ri=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ri>>>26)|0,ri&=67108863,_=Math.imul(V,St),l=Math.imul(V,Pt),l=l+Math.imul(J,St)|0,y=Math.imul(J,Pt),_=_+Math.imul(B,At)|0,l=l+Math.imul(B,Ct)|0,l=l+Math.imul($,At)|0,y=y+Math.imul($,Ct)|0;var ni=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ni>>>26)|0,ni&=67108863,_=Math.imul(G,St),l=Math.imul(G,Pt),l=l+Math.imul(et,St)|0,y=Math.imul(et,Pt),_=_+Math.imul(V,At)|0,l=l+Math.imul(V,Ct)|0,l=l+Math.imul(J,At)|0,y=y+Math.imul(J,Ct)|0,_=_+Math.imul(B,xt)|0,l=l+Math.imul(B,Tt)|0,l=l+Math.imul($,xt)|0,y=y+Math.imul($,Tt)|0;var oi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(oi>>>26)|0,oi&=67108863,_=Math.imul(tt,St),l=Math.imul(tt,Pt),l=l+Math.imul(X,St)|0,y=Math.imul(X,Pt),_=_+Math.imul(G,At)|0,l=l+Math.imul(G,Ct)|0,l=l+Math.imul(et,At)|0,y=y+Math.imul(et,Ct)|0,_=_+Math.imul(V,xt)|0,l=l+Math.imul(V,Tt)|0,l=l+Math.imul(J,xt)|0,y=y+Math.imul(J,Tt)|0,_=_+Math.imul(B,Dt)|0,l=l+Math.imul(B,Ot)|0,l=l+Math.imul($,Dt)|0,y=y+Math.imul($,Ot)|0;var si=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(si>>>26)|0,si&=67108863,_=Math.imul(ut,St),l=Math.imul(ut,Pt),l=l+Math.imul(st,St)|0,y=Math.imul(st,Pt),_=_+Math.imul(tt,At)|0,l=l+Math.imul(tt,Ct)|0,l=l+Math.imul(X,At)|0,y=y+Math.imul(X,Ct)|0,_=_+Math.imul(G,xt)|0,l=l+Math.imul(G,Tt)|0,l=l+Math.imul(et,xt)|0,y=y+Math.imul(et,Tt)|0,_=_+Math.imul(V,Dt)|0,l=l+Math.imul(V,Ot)|0,l=l+Math.imul(J,Dt)|0,y=y+Math.imul(J,Ot)|0,_=_+Math.imul(B,Rt)|0,l=l+Math.imul(B,Lt)|0,l=l+Math.imul($,Rt)|0,y=y+Math.imul($,Lt)|0;var ai=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ai>>>26)|0,ai&=67108863,_=Math.imul(at,St),l=Math.imul(at,Pt),l=l+Math.imul(nt,St)|0,y=Math.imul(nt,Pt),_=_+Math.imul(ut,At)|0,l=l+Math.imul(ut,Ct)|0,l=l+Math.imul(st,At)|0,y=y+Math.imul(st,Ct)|0,_=_+Math.imul(tt,xt)|0,l=l+Math.imul(tt,Tt)|0,l=l+Math.imul(X,xt)|0,y=y+Math.imul(X,Tt)|0,_=_+Math.imul(G,Dt)|0,l=l+Math.imul(G,Ot)|0,l=l+Math.imul(et,Dt)|0,y=y+Math.imul(et,Ot)|0,_=_+Math.imul(V,Rt)|0,l=l+Math.imul(V,Lt)|0,l=l+Math.imul(J,Rt)|0,y=y+Math.imul(J,Lt)|0,_=_+Math.imul(B,Nt)|0,l=l+Math.imul(B,It)|0,l=l+Math.imul($,Nt)|0,y=y+Math.imul($,It)|0;var li=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(li>>>26)|0,li&=67108863,_=Math.imul(gt,St),l=Math.imul(gt,Pt),l=l+Math.imul(_t,St)|0,y=Math.imul(_t,Pt),_=_+Math.imul(at,At)|0,l=l+Math.imul(at,Ct)|0,l=l+Math.imul(nt,At)|0,y=y+Math.imul(nt,Ct)|0,_=_+Math.imul(ut,xt)|0,l=l+Math.imul(ut,Tt)|0,l=l+Math.imul(st,xt)|0,y=y+Math.imul(st,Tt)|0,_=_+Math.imul(tt,Dt)|0,l=l+Math.imul(tt,Ot)|0,l=l+Math.imul(X,Dt)|0,y=y+Math.imul(X,Ot)|0,_=_+Math.imul(G,Rt)|0,l=l+Math.imul(G,Lt)|0,l=l+Math.imul(et,Rt)|0,y=y+Math.imul(et,Lt)|0,_=_+Math.imul(V,Nt)|0,l=l+Math.imul(V,It)|0,l=l+Math.imul(J,Nt)|0,y=y+Math.imul(J,It)|0,_=_+Math.imul(B,Et)|0,l=l+Math.imul(B,Bt)|0,l=l+Math.imul($,Et)|0,y=y+Math.imul($,Bt)|0;var ui=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ui>>>26)|0,ui&=67108863,_=Math.imul(wt,St),l=Math.imul(wt,Pt),l=l+Math.imul(vt,St)|0,y=Math.imul(vt,Pt),_=_+Math.imul(gt,At)|0,l=l+Math.imul(gt,Ct)|0,l=l+Math.imul(_t,At)|0,y=y+Math.imul(_t,Ct)|0,_=_+Math.imul(at,xt)|0,l=l+Math.imul(at,Tt)|0,l=l+Math.imul(nt,xt)|0,y=y+Math.imul(nt,Tt)|0,_=_+Math.imul(ut,Dt)|0,l=l+Math.imul(ut,Ot)|0,l=l+Math.imul(st,Dt)|0,y=y+Math.imul(st,Ot)|0,_=_+Math.imul(tt,Rt)|0,l=l+Math.imul(tt,Lt)|0,l=l+Math.imul(X,Rt)|0,y=y+Math.imul(X,Lt)|0,_=_+Math.imul(G,Nt)|0,l=l+Math.imul(G,It)|0,l=l+Math.imul(et,Nt)|0,y=y+Math.imul(et,It)|0,_=_+Math.imul(V,Et)|0,l=l+Math.imul(V,Bt)|0,l=l+Math.imul(J,Et)|0,y=y+Math.imul(J,Bt)|0,_=_+Math.imul(B,qt)|0,l=l+Math.imul(B,Ft)|0,l=l+Math.imul($,qt)|0,y=y+Math.imul($,Ft)|0;var ci=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ci>>>26)|0,ci&=67108863,_=Math.imul(Mt,St),l=Math.imul(Mt,Pt),l=l+Math.imul(bt,St)|0,y=Math.imul(bt,Pt),_=_+Math.imul(wt,At)|0,l=l+Math.imul(wt,Ct)|0,l=l+Math.imul(vt,At)|0,y=y+Math.imul(vt,Ct)|0,_=_+Math.imul(gt,xt)|0,l=l+Math.imul(gt,Tt)|0,l=l+Math.imul(_t,xt)|0,y=y+Math.imul(_t,Tt)|0,_=_+Math.imul(at,Dt)|0,l=l+Math.imul(at,Ot)|0,l=l+Math.imul(nt,Dt)|0,y=y+Math.imul(nt,Ot)|0,_=_+Math.imul(ut,Rt)|0,l=l+Math.imul(ut,Lt)|0,l=l+Math.imul(st,Rt)|0,y=y+Math.imul(st,Lt)|0,_=_+Math.imul(tt,Nt)|0,l=l+Math.imul(tt,It)|0,l=l+Math.imul(X,Nt)|0,y=y+Math.imul(X,It)|0,_=_+Math.imul(G,Et)|0,l=l+Math.imul(G,Bt)|0,l=l+Math.imul(et,Et)|0,y=y+Math.imul(et,Bt)|0,_=_+Math.imul(V,qt)|0,l=l+Math.imul(V,Ft)|0,l=l+Math.imul(J,qt)|0,y=y+Math.imul(J,Ft)|0,_=_+Math.imul(B,Ut)|0,l=l+Math.imul(B,jt)|0,l=l+Math.imul($,Ut)|0,y=y+Math.imul($,jt)|0;var fi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(fi>>>26)|0,fi&=67108863,_=Math.imul(yt,St),l=Math.imul(yt,Pt),l=l+Math.imul(kt,St)|0,y=Math.imul(kt,Pt),_=_+Math.imul(Mt,At)|0,l=l+Math.imul(Mt,Ct)|0,l=l+Math.imul(bt,At)|0,y=y+Math.imul(bt,Ct)|0,_=_+Math.imul(wt,xt)|0,l=l+Math.imul(wt,Tt)|0,l=l+Math.imul(vt,xt)|0,y=y+Math.imul(vt,Tt)|0,_=_+Math.imul(gt,Dt)|0,l=l+Math.imul(gt,Ot)|0,l=l+Math.imul(_t,Dt)|0,y=y+Math.imul(_t,Ot)|0,_=_+Math.imul(at,Rt)|0,l=l+Math.imul(at,Lt)|0,l=l+Math.imul(nt,Rt)|0,y=y+Math.imul(nt,Lt)|0,_=_+Math.imul(ut,Nt)|0,l=l+Math.imul(ut,It)|0,l=l+Math.imul(st,Nt)|0,y=y+Math.imul(st,It)|0,_=_+Math.imul(tt,Et)|0,l=l+Math.imul(tt,Bt)|0,l=l+Math.imul(X,Et)|0,y=y+Math.imul(X,Bt)|0,_=_+Math.imul(G,qt)|0,l=l+Math.imul(G,Ft)|0,l=l+Math.imul(et,qt)|0,y=y+Math.imul(et,Ft)|0,_=_+Math.imul(V,Ut)|0,l=l+Math.imul(V,jt)|0,l=l+Math.imul(J,Ut)|0,y=y+Math.imul(J,jt)|0,_=_+Math.imul(B,$t)|0,l=l+Math.imul(B,Wt)|0,l=l+Math.imul($,$t)|0,y=y+Math.imul($,Wt)|0;var di=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(di>>>26)|0,di&=67108863,_=Math.imul(yt,At),l=Math.imul(yt,Ct),l=l+Math.imul(kt,At)|0,y=Math.imul(kt,Ct),_=_+Math.imul(Mt,xt)|0,l=l+Math.imul(Mt,Tt)|0,l=l+Math.imul(bt,xt)|0,y=y+Math.imul(bt,Tt)|0,_=_+Math.imul(wt,Dt)|0,l=l+Math.imul(wt,Ot)|0,l=l+Math.imul(vt,Dt)|0,y=y+Math.imul(vt,Ot)|0,_=_+Math.imul(gt,Rt)|0,l=l+Math.imul(gt,Lt)|0,l=l+Math.imul(_t,Rt)|0,y=y+Math.imul(_t,Lt)|0,_=_+Math.imul(at,Nt)|0,l=l+Math.imul(at,It)|0,l=l+Math.imul(nt,Nt)|0,y=y+Math.imul(nt,It)|0,_=_+Math.imul(ut,Et)|0,l=l+Math.imul(ut,Bt)|0,l=l+Math.imul(st,Et)|0,y=y+Math.imul(st,Bt)|0,_=_+Math.imul(tt,qt)|0,l=l+Math.imul(tt,Ft)|0,l=l+Math.imul(X,qt)|0,y=y+Math.imul(X,Ft)|0,_=_+Math.imul(G,Ut)|0,l=l+Math.imul(G,jt)|0,l=l+Math.imul(et,Ut)|0,y=y+Math.imul(et,jt)|0,_=_+Math.imul(V,$t)|0,l=l+Math.imul(V,Wt)|0,l=l+Math.imul(J,$t)|0,y=y+Math.imul(J,Wt)|0;var hi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(hi>>>26)|0,hi&=67108863,_=Math.imul(yt,xt),l=Math.imul(yt,Tt),l=l+Math.imul(kt,xt)|0,y=Math.imul(kt,Tt),_=_+Math.imul(Mt,Dt)|0,l=l+Math.imul(Mt,Ot)|0,l=l+Math.imul(bt,Dt)|0,y=y+Math.imul(bt,Ot)|0,_=_+Math.imul(wt,Rt)|0,l=l+Math.imul(wt,Lt)|0,l=l+Math.imul(vt,Rt)|0,y=y+Math.imul(vt,Lt)|0,_=_+Math.imul(gt,Nt)|0,l=l+Math.imul(gt,It)|0,l=l+Math.imul(_t,Nt)|0,y=y+Math.imul(_t,It)|0,_=_+Math.imul(at,Et)|0,l=l+Math.imul(at,Bt)|0,l=l+Math.imul(nt,Et)|0,y=y+Math.imul(nt,Bt)|0,_=_+Math.imul(ut,qt)|0,l=l+Math.imul(ut,Ft)|0,l=l+Math.imul(st,qt)|0,y=y+Math.imul(st,Ft)|0,_=_+Math.imul(tt,Ut)|0,l=l+Math.imul(tt,jt)|0,l=l+Math.imul(X,Ut)|0,y=y+Math.imul(X,jt)|0,_=_+Math.imul(G,$t)|0,l=l+Math.imul(G,Wt)|0,l=l+Math.imul(et,$t)|0,y=y+Math.imul(et,Wt)|0;var pi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(pi>>>26)|0,pi&=67108863,_=Math.imul(yt,Dt),l=Math.imul(yt,Ot),l=l+Math.imul(kt,Dt)|0,y=Math.imul(kt,Ot),_=_+Math.imul(Mt,Rt)|0,l=l+Math.imul(Mt,Lt)|0,l=l+Math.imul(bt,Rt)|0,y=y+Math.imul(bt,Lt)|0,_=_+Math.imul(wt,Nt)|0,l=l+Math.imul(wt,It)|0,l=l+Math.imul(vt,Nt)|0,y=y+Math.imul(vt,It)|0,_=_+Math.imul(gt,Et)|0,l=l+Math.imul(gt,Bt)|0,l=l+Math.imul(_t,Et)|0,y=y+Math.imul(_t,Bt)|0,_=_+Math.imul(at,qt)|0,l=l+Math.imul(at,Ft)|0,l=l+Math.imul(nt,qt)|0,y=y+Math.imul(nt,Ft)|0,_=_+Math.imul(ut,Ut)|0,l=l+Math.imul(ut,jt)|0,l=l+Math.imul(st,Ut)|0,y=y+Math.imul(st,jt)|0,_=_+Math.imul(tt,$t)|0,l=l+Math.imul(tt,Wt)|0,l=l+Math.imul(X,$t)|0,y=y+Math.imul(X,Wt)|0;var mi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(mi>>>26)|0,mi&=67108863,_=Math.imul(yt,Rt),l=Math.imul(yt,Lt),l=l+Math.imul(kt,Rt)|0,y=Math.imul(kt,Lt),_=_+Math.imul(Mt,Nt)|0,l=l+Math.imul(Mt,It)|0,l=l+Math.imul(bt,Nt)|0,y=y+Math.imul(bt,It)|0,_=_+Math.imul(wt,Et)|0,l=l+Math.imul(wt,Bt)|0,l=l+Math.imul(vt,Et)|0,y=y+Math.imul(vt,Bt)|0,_=_+Math.imul(gt,qt)|0,l=l+Math.imul(gt,Ft)|0,l=l+Math.imul(_t,qt)|0,y=y+Math.imul(_t,Ft)|0,_=_+Math.imul(at,Ut)|0,l=l+Math.imul(at,jt)|0,l=l+Math.imul(nt,Ut)|0,y=y+Math.imul(nt,jt)|0,_=_+Math.imul(ut,$t)|0,l=l+Math.imul(ut,Wt)|0,l=l+Math.imul(st,$t)|0,y=y+Math.imul(st,Wt)|0;var gi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(gi>>>26)|0,gi&=67108863,_=Math.imul(yt,Nt),l=Math.imul(yt,It),l=l+Math.imul(kt,Nt)|0,y=Math.imul(kt,It),_=_+Math.imul(Mt,Et)|0,l=l+Math.imul(Mt,Bt)|0,l=l+Math.imul(bt,Et)|0,y=y+Math.imul(bt,Bt)|0,_=_+Math.imul(wt,qt)|0,l=l+Math.imul(wt,Ft)|0,l=l+Math.imul(vt,qt)|0,y=y+Math.imul(vt,Ft)|0,_=_+Math.imul(gt,Ut)|0,l=l+Math.imul(gt,jt)|0,l=l+Math.imul(_t,Ut)|0,y=y+Math.imul(_t,jt)|0,_=_+Math.imul(at,$t)|0,l=l+Math.imul(at,Wt)|0,l=l+Math.imul(nt,$t)|0,y=y+Math.imul(nt,Wt)|0;var _i=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(_i>>>26)|0,_i&=67108863,_=Math.imul(yt,Et),l=Math.imul(yt,Bt),l=l+Math.imul(kt,Et)|0,y=Math.imul(kt,Bt),_=_+Math.imul(Mt,qt)|0,l=l+Math.imul(Mt,Ft)|0,l=l+Math.imul(bt,qt)|0,y=y+Math.imul(bt,Ft)|0,_=_+Math.imul(wt,Ut)|0,l=l+Math.imul(wt,jt)|0,l=l+Math.imul(vt,Ut)|0,y=y+Math.imul(vt,jt)|0,_=_+Math.imul(gt,$t)|0,l=l+Math.imul(gt,Wt)|0,l=l+Math.imul(_t,$t)|0,y=y+Math.imul(_t,Wt)|0;var wi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(wi>>>26)|0,wi&=67108863,_=Math.imul(yt,qt),l=Math.imul(yt,Ft),l=l+Math.imul(kt,qt)|0,y=Math.imul(kt,Ft),_=_+Math.imul(Mt,Ut)|0,l=l+Math.imul(Mt,jt)|0,l=l+Math.imul(bt,Ut)|0,y=y+Math.imul(bt,jt)|0,_=_+Math.imul(wt,$t)|0,l=l+Math.imul(wt,Wt)|0,l=l+Math.imul(vt,$t)|0,y=y+Math.imul(vt,Wt)|0;var vi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(vi>>>26)|0,vi&=67108863,_=Math.imul(yt,Ut),l=Math.imul(yt,jt),l=l+Math.imul(kt,Ut)|0,y=Math.imul(kt,jt),_=_+Math.imul(Mt,$t)|0,l=l+Math.imul(Mt,Wt)|0,l=l+Math.imul(bt,$t)|0,y=y+Math.imul(bt,Wt)|0;var Mi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(Mi>>>26)|0,Mi&=67108863,_=Math.imul(yt,$t),l=Math.imul(yt,Wt),l=l+Math.imul(kt,$t)|0,y=Math.imul(kt,Wt);var bi=(P+_|0)+((l&8191)<<13)|0;return P=(y+(l>>>13)|0)+(bi>>>26)|0,bi&=67108863,v[0]=ri,v[1]=ni,v[2]=oi,v[3]=si,v[4]=ai,v[5]=li,v[6]=ui,v[7]=ci,v[8]=fi,v[9]=di,v[10]=hi,v[11]=pi,v[12]=mi,v[13]=gi,v[14]=_i,v[15]=wi,v[16]=vi,v[17]=Mi,v[18]=bi,P!==0&&(v[19]=P,u.length++),u};Math.imul||(N=I);function R(p,t,s){s.negative=t.negative^p.negative,s.length=p.length+t.length;for(var u=0,f=0,h=0;h<s.length-1;h++){var v=f;f=0;for(var P=u&67108863,_=Math.min(h,t.length-1),l=Math.max(0,h-p.length+1);l<=_;l++){var y=h-l,U=p.words[y]|0,B=t.words[l]|0,$=U*B,K=$&67108863;v=v+($/67108864|0)|0,K=K+P|0,P=K&67108863,v=v+(K>>>26)|0,f+=v>>>26,v&=67108863}s.words[h]=P,u=v,v=f}return u!==0?s.words[h]=u:s.length--,s._strip()}function F(p,t,s){return R(p,t,s)}e.prototype.mulTo=function(t,s){var u,f=this.length+t.length;return this.length===10&&t.length===10?u=N(this,t,s):f<63?u=I(this,t,s):f<1024?u=R(this,t,s):u=F(this,t,s),u};function q(p,t){this.x=p,this.y=t}q.prototype.makeRBT=function(t){for(var s=new Array(t),u=e.prototype._countBits(t)-1,f=0;f<t;f++)s[f]=this.revBin(f,u,t);return s},q.prototype.revBin=function(t,s,u){if(t===0||t===u-1)return t;for(var f=0,h=0;h<s;h++)f|=(t&1)<<s-h-1,t>>=1;return f},q.prototype.permute=function(t,s,u,f,h,v){for(var P=0;P<v;P++)f[P]=s[t[P]],h[P]=u[t[P]]},q.prototype.transform=function(t,s,u,f,h,v){this.permute(v,t,s,u,f,h);for(var P=1;P<h;P<<=1)for(var _=P<<1,l=Math.cos(2*Math.PI/_),y=Math.sin(2*Math.PI/_),U=0;U<h;U+=_)for(var B=l,$=y,K=0;K<P;K++){var V=u[U+K],J=f[U+K],rt=u[U+K+P],G=f[U+K+P],et=B*rt-$*G;G=B*G+$*rt,rt=et,u[U+K]=V+rt,f[U+K]=J+G,u[U+K+P]=V-rt,f[U+K+P]=J-G,K!==_&&(et=l*B-y*$,$=l*$+y*B,B=et)}},q.prototype.guessLen13b=function(t,s){var u=Math.max(s,t)|1,f=u&1,h=0;for(u=u/2|0;u;u=u>>>1)h++;return 1<<h+1+f},q.prototype.conjugate=function(t,s,u){if(!(u<=1))for(var f=0;f<u/2;f++){var h=t[f];t[f]=t[u-f-1],t[u-f-1]=h,h=s[f],s[f]=-s[u-f-1],s[u-f-1]=-h}},q.prototype.normalize13b=function(t,s){for(var u=0,f=0;f<s/2;f++){var h=Math.round(t[2*f+1]/s)*8192+Math.round(t[2*f]/s)+u;t[f]=h&67108863,h<67108864?u=0:u=h/67108864|0}return t},q.prototype.convert13b=function(t,s,u,f){for(var h=0,v=0;v<s;v++)h=h+(t[v]|0),u[2*v]=h&8191,h=h>>>13,u[2*v+1]=h&8191,h=h>>>13;for(v=2*s;v<f;++v)u[v]=0;i(h===0),i((h&-8192)===0)},q.prototype.stub=function(t){for(var s=new Array(t),u=0;u<t;u++)s[u]=0;return s},q.prototype.mulp=function(t,s,u){var f=2*this.guessLen13b(t.length,s.length),h=this.makeRBT(f),v=this.stub(f),P=new Array(f),_=new Array(f),l=new Array(f),y=new Array(f),U=new Array(f),B=new Array(f),$=u.words;$.length=f,this.convert13b(t.words,t.length,P,f),this.convert13b(s.words,s.length,y,f),this.transform(P,v,_,l,f,h),this.transform(y,v,U,B,f,h);for(var K=0;K<f;K++){var V=_[K]*U[K]-l[K]*B[K];l[K]=_[K]*B[K]+l[K]*U[K],_[K]=V}return this.conjugate(_,l,f),this.transform(_,l,$,v,f,h),this.conjugate($,v,f),this.normalize13b($,f),u.negative=t.negative^s.negative,u.length=t.length+s.length,u._strip()},e.prototype.mul=function(t){var s=new e(null);return s.words=new Array(this.length+t.length),this.mulTo(t,s)},e.prototype.mulf=function(t){var s=new e(null);return s.words=new Array(this.length+t.length),F(this,t,s)},e.prototype.imul=function(t){return this.clone().mulTo(t,this)},e.prototype.imuln=function(t){var s=t<0;s&&(t=-t),i(typeof t=="number"),i(t<67108864);for(var u=0,f=0;f<this.length;f++){var h=(this.words[f]|0)*t,v=(h&67108863)+(u&67108863);u>>=26,u+=h/67108864|0,u+=v>>>26,this.words[f]=v&67108863}return u!==0&&(this.words[f]=u,this.length++),this.length=t===0?1:this.length,s?this.ineg():this},e.prototype.muln=function(t){return this.clone().imuln(t)},e.prototype.sqr=function(){return this.mul(this)},e.prototype.isqr=function(){return this.imul(this.clone())},e.prototype.pow=function(t){var s=L(t);if(s.length===0)return new e(1);for(var u=this,f=0;f<s.length&&s[f]===0;f++,u=u.sqr());if(++f<s.length)for(var h=u.sqr();f<s.length;f++,h=h.sqr())s[f]!==0&&(u=u.mul(h));return u},e.prototype.iushln=function(t){i(typeof t=="number"&&t>=0);var s=t%26,u=(t-s)/26,f=67108863>>>26-s<<26-s,h;if(s!==0){var v=0;for(h=0;h<this.length;h++){var P=this.words[h]&f,_=(this.words[h]|0)-P<<s;this.words[h]=_|v,v=P>>>26-s}v&&(this.words[h]=v,this.length++)}if(u!==0){for(h=this.length-1;h>=0;h--)this.words[h+u]=this.words[h];for(h=0;h<u;h++)this.words[h]=0;this.length+=u}return this._strip()},e.prototype.ishln=function(t){return i(this.negative===0),this.iushln(t)},e.prototype.iushrn=function(t,s,u){i(typeof t=="number"&&t>=0);var f;s?f=(s-s%26)/26:f=0;var h=t%26,v=Math.min((t-h)/26,this.length),P=67108863^67108863>>>h<<h,_=u;if(f-=v,f=Math.max(0,f),_){for(var l=0;l<v;l++)_.words[l]=this.words[l];_.length=v}if(v!==0)if(this.length>v)for(this.length-=v,l=0;l<this.length;l++)this.words[l]=this.words[l+v];else this.words[0]=0,this.length=1;var y=0;for(l=this.length-1;l>=0&&(y!==0||l>=f);l--){var U=this.words[l]|0;this.words[l]=y<<26-h|U>>>h,y=U&P}return _&&y!==0&&(_.words[_.length++]=y),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},e.prototype.ishrn=function(t,s,u){return i(this.negative===0),this.iushrn(t,s,u)},e.prototype.shln=function(t){return this.clone().ishln(t)},e.prototype.ushln=function(t){return this.clone().iushln(t)},e.prototype.shrn=function(t){return this.clone().ishrn(t)},e.prototype.ushrn=function(t){return this.clone().iushrn(t)},e.prototype.testn=function(t){i(typeof t=="number"&&t>=0);var s=t%26,u=(t-s)/26,f=1<<s;if(this.length<=u)return!1;var h=this.words[u];return!!(h&f)},e.prototype.imaskn=function(t){i(typeof t=="number"&&t>=0);var s=t%26,u=(t-s)/26;if(i(this.negative===0,"imaskn works only with positive numbers"),this.length<=u)return this;if(s!==0&&u++,this.length=Math.min(u,this.length),s!==0){var f=67108863^67108863>>>s<<s;this.words[this.length-1]&=f}return this._strip()},e.prototype.maskn=function(t){return this.clone().imaskn(t)},e.prototype.iaddn=function(t){return i(typeof t=="number"),i(t<67108864),t<0?this.isubn(-t):this.negative!==0?this.length===1&&(this.words[0]|0)<=t?(this.words[0]=t-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},e.prototype._iaddn=function(t){this.words[0]+=t;for(var s=0;s<this.length&&this.words[s]>=67108864;s++)this.words[s]-=67108864,s===this.length-1?this.words[s+1]=1:this.words[s+1]++;return this.length=Math.max(this.length,s+1),this},e.prototype.isubn=function(t){if(i(typeof t=="number"),i(t<67108864),t<0)return this.iaddn(-t);if(this.negative!==0)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var s=0;s<this.length&&this.words[s]<0;s++)this.words[s]+=67108864,this.words[s+1]-=1;return this._strip()},e.prototype.addn=function(t){return this.clone().iaddn(t)},e.prototype.subn=function(t){return this.clone().isubn(t)},e.prototype.iabs=function(){return this.negative=0,this},e.prototype.abs=function(){return this.clone().iabs()},e.prototype._ishlnsubmul=function(t,s,u){var f=t.length+u,h;this._expand(f);var v,P=0;for(h=0;h<t.length;h++){v=(this.words[h+u]|0)+P;var _=(t.words[h]|0)*s;v-=_&67108863,P=(v>>26)-(_/67108864|0),this.words[h+u]=v&67108863}for(;h<this.length-u;h++)v=(this.words[h+u]|0)+P,P=v>>26,this.words[h+u]=v&67108863;if(P===0)return this._strip();for(i(P===-1),P=0,h=0;h<this.length;h++)v=-(this.words[h]|0)+P,P=v>>26,this.words[h]=v&67108863;return this.negative=1,this._strip()},e.prototype._wordDiv=function(t,s){var u=this.length-t.length,f=this.clone(),h=t,v=h.words[h.length-1]|0,P=this._countBits(v);u=26-P,u!==0&&(h=h.ushln(u),f.iushln(u),v=h.words[h.length-1]|0);var _=f.length-h.length,l;if(s!=="mod"){l=new e(null),l.length=_+1,l.words=new Array(l.length);for(var y=0;y<l.length;y++)l.words[y]=0}var U=f.clone()._ishlnsubmul(h,1,_);U.negative===0&&(f=U,l&&(l.words[_]=1));for(var B=_-1;B>=0;B--){var $=(f.words[h.length+B]|0)*67108864+(f.words[h.length+B-1]|0);for($=Math.min($/v|0,67108863),f._ishlnsubmul(h,$,B);f.negative!==0;)$--,f.negative=0,f._ishlnsubmul(h,1,B),f.isZero()||(f.negative^=1);l&&(l.words[B]=$)}return l&&l._strip(),f._strip(),s!=="div"&&u!==0&&f.iushrn(u),{div:l||null,mod:f}},e.prototype.divmod=function(t,s,u){if(i(!t.isZero()),this.isZero())return{div:new e(0),mod:new e(0)};var f,h,v;return this.negative!==0&&t.negative===0?(v=this.neg().divmod(t,s),s!=="mod"&&(f=v.div.neg()),s!=="div"&&(h=v.mod.neg(),u&&h.negative!==0&&h.iadd(t)),{div:f,mod:h}):this.negative===0&&t.negative!==0?(v=this.divmod(t.neg(),s),s!=="mod"&&(f=v.div.neg()),{div:f,mod:v.mod}):(this.negative&t.negative)!==0?(v=this.neg().divmod(t.neg(),s),s!=="div"&&(h=v.mod.neg(),u&&h.negative!==0&&h.isub(t)),{div:v.div,mod:h}):t.length>this.length||this.cmp(t)<0?{div:new e(0),mod:this}:t.length===1?s==="div"?{div:this.divn(t.words[0]),mod:null}:s==="mod"?{div:null,mod:new e(this.modrn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new e(this.modrn(t.words[0]))}:this._wordDiv(t,s)},e.prototype.div=function(t){return this.divmod(t,"div",!1).div},e.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},e.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},e.prototype.divRound=function(t){var s=this.divmod(t);if(s.mod.isZero())return s.div;var u=s.div.negative!==0?s.mod.isub(t):s.mod,f=t.ushrn(1),h=t.andln(1),v=u.cmp(f);return v<0||h===1&&v===0?s.div:s.div.negative!==0?s.div.isubn(1):s.div.iaddn(1)},e.prototype.modrn=function(t){var s=t<0;s&&(t=-t),i(t<=67108863);for(var u=(1<<26)%t,f=0,h=this.length-1;h>=0;h--)f=(u*f+(this.words[h]|0))%t;return s?-f:f},e.prototype.modn=function(t){return this.modrn(t)},e.prototype.idivn=function(t){var s=t<0;s&&(t=-t),i(t<=67108863);for(var u=0,f=this.length-1;f>=0;f--){var h=(this.words[f]|0)+u*67108864;this.words[f]=h/t|0,u=h%t}return this._strip(),s?this.ineg():this},e.prototype.divn=function(t){return this.clone().idivn(t)},e.prototype.egcd=function(t){i(t.negative===0),i(!t.isZero());var s=this,u=t.clone();s.negative!==0?s=s.umod(t):s=s.clone();for(var f=new e(1),h=new e(0),v=new e(0),P=new e(1),_=0;s.isEven()&&u.isEven();)s.iushrn(1),u.iushrn(1),++_;for(var l=u.clone(),y=s.clone();!s.isZero();){for(var U=0,B=1;(s.words[0]&B)===0&&U<26;++U,B<<=1);if(U>0)for(s.iushrn(U);U-- >0;)(f.isOdd()||h.isOdd())&&(f.iadd(l),h.isub(y)),f.iushrn(1),h.iushrn(1);for(var $=0,K=1;(u.words[0]&K)===0&&$<26;++$,K<<=1);if($>0)for(u.iushrn($);$-- >0;)(v.isOdd()||P.isOdd())&&(v.iadd(l),P.isub(y)),v.iushrn(1),P.iushrn(1);s.cmp(u)>=0?(s.isub(u),f.isub(v),h.isub(P)):(u.isub(s),v.isub(f),P.isub(h))}return{a:v,b:P,gcd:u.iushln(_)}},e.prototype._invmp=function(t){i(t.negative===0),i(!t.isZero());var s=this,u=t.clone();s.negative!==0?s=s.umod(t):s=s.clone();for(var f=new e(1),h=new e(0),v=u.clone();s.cmpn(1)>0&&u.cmpn(1)>0;){for(var P=0,_=1;(s.words[0]&_)===0&&P<26;++P,_<<=1);if(P>0)for(s.iushrn(P);P-- >0;)f.isOdd()&&f.iadd(v),f.iushrn(1);for(var l=0,y=1;(u.words[0]&y)===0&&l<26;++l,y<<=1);if(l>0)for(u.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(v),h.iushrn(1);s.cmp(u)>=0?(s.isub(u),f.isub(h)):(u.isub(s),h.isub(f))}var U;return s.cmpn(1)===0?U=f:U=h,U.cmpn(0)<0&&U.iadd(t),U},e.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var s=this.clone(),u=t.clone();s.negative=0,u.negative=0;for(var f=0;s.isEven()&&u.isEven();f++)s.iushrn(1),u.iushrn(1);do{for(;s.isEven();)s.iushrn(1);for(;u.isEven();)u.iushrn(1);var h=s.cmp(u);if(h<0){var v=s;s=u,u=v}else if(h===0||u.cmpn(1)===0)break;s.isub(u)}while(!0);return u.iushln(f)},e.prototype.invm=function(t){return this.egcd(t).a.umod(t)},e.prototype.isEven=function(){return(this.words[0]&1)===0},e.prototype.isOdd=function(){return(this.words[0]&1)===1},e.prototype.andln=function(t){return this.words[0]&t},e.prototype.bincn=function(t){i(typeof t=="number");var s=t%26,u=(t-s)/26,f=1<<s;if(this.length<=u)return this._expand(u+1),this.words[u]|=f,this;for(var h=f,v=u;h!==0&&v<this.length;v++){var P=this.words[v]|0;P+=h,h=P>>>26,P&=67108863,this.words[v]=P}return h!==0&&(this.words[v]=h,this.length++),this},e.prototype.isZero=function(){return this.length===1&&this.words[0]===0},e.prototype.cmpn=function(t){var s=t<0;if(this.negative!==0&&!s)return-1;if(this.negative===0&&s)return 1;this._strip();var u;if(this.length>1)u=1;else{s&&(t=-t),i(t<=67108863,"Number is too big");var f=this.words[0]|0;u=f===t?0:f<t?-1:1}return this.negative!==0?-u|0:u},e.prototype.cmp=function(t){if(this.negative!==0&&t.negative===0)return-1;if(this.negative===0&&t.negative!==0)return 1;var s=this.ucmp(t);return this.negative!==0?-s|0:s},e.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var s=0,u=this.length-1;u>=0;u--){var f=this.words[u]|0,h=t.words[u]|0;if(f!==h){f<h?s=-1:f>h&&(s=1);break}}return s},e.prototype.gtn=function(t){return this.cmpn(t)===1},e.prototype.gt=function(t){return this.cmp(t)===1},e.prototype.gten=function(t){return this.cmpn(t)>=0},e.prototype.gte=function(t){return this.cmp(t)>=0},e.prototype.ltn=function(t){return this.cmpn(t)===-1},e.prototype.lt=function(t){return this.cmp(t)===-1},e.prototype.lten=function(t){return this.cmpn(t)<=0},e.prototype.lte=function(t){return this.cmp(t)<=0},e.prototype.eqn=function(t){return this.cmpn(t)===0},e.prototype.eq=function(t){return this.cmp(t)===0},e.red=function(t){return new x(t)},e.prototype.toRed=function(t){return i(!this.red,"Already a number in reduction context"),i(this.negative===0,"red works only with positives"),t.convertTo(this)._forceRed(t)},e.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},e.prototype._forceRed=function(t){return this.red=t,this},e.prototype.forceRed=function(t){return i(!this.red,"Already a number in reduction context"),this._forceRed(t)},e.prototype.redAdd=function(t){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},e.prototype.redIAdd=function(t){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},e.prototype.redSub=function(t){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},e.prototype.redISub=function(t){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},e.prototype.redShl=function(t){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},e.prototype.redMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},e.prototype.redIMul=function(t){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},e.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},e.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},e.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},e.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},e.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},e.prototype.redPow=function(t){return i(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var W={k256:null,p224:null,p192:null,p25519:null};function j(p,t){this.name=p,this.p=new e(t,16),this.n=this.p.bitLength(),this.k=new e(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}j.prototype._tmp=function(){var t=new e(null);return t.words=new Array(Math.ceil(this.n/13)),t},j.prototype.ireduce=function(t){var s=t,u;do this.split(s,this.tmp),s=this.imulK(s),s=s.iadd(this.tmp),u=s.bitLength();while(u>this.n);var f=u<this.n?-1:s.ucmp(this.p);return f===0?(s.words[0]=0,s.length=1):f>0?s.isub(this.p):s.strip!==void 0?s.strip():s._strip(),s},j.prototype.split=function(t,s){t.iushrn(this.n,0,s)},j.prototype.imulK=function(t){return t.imul(this.k)};function Z(){j.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}o(Z,j),Z.prototype.split=function(t,s){for(var u=4194303,f=Math.min(t.length,9),h=0;h<f;h++)s.words[h]=t.words[h];if(s.length=f,t.length<=9){t.words[0]=0,t.length=1;return}var v=t.words[9];for(s.words[s.length++]=v&u,h=10;h<t.length;h++){var P=t.words[h]|0;t.words[h-10]=(P&u)<<4|v>>>22,v=P}v>>>=22,t.words[h-10]=v,v===0&&t.length>10?t.length-=10:t.length-=9},Z.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var s=0,u=0;u<t.length;u++){var f=t.words[u]|0;s+=f*977,t.words[u]=s&67108863,s=f*64+(s/67108864|0)}return t.words[t.length-1]===0&&(t.length--,t.words[t.length-1]===0&&t.length--),t};function w(){j.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}o(w,j);function b(){j.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}o(b,j);function k(){j.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}o(k,j),k.prototype.imulK=function(t){for(var s=0,u=0;u<t.length;u++){var f=(t.words[u]|0)*19+s,h=f&67108863;f>>>=26,t.words[u]=h,s=f}return s!==0&&(t.words[t.length++]=s),t},e._prime=function(t){if(W[t])return W[t];var s;if(t==="k256")s=new Z;else if(t==="p224")s=new w;else if(t==="p192")s=new b;else if(t==="p25519")s=new k;else throw new Error("Unknown prime "+t);return W[t]=s,s};function x(p){if(typeof p=="string"){var t=e._prime(p);this.m=t.p,this.prime=t}else i(p.gtn(1),"modulus must be greater than 1"),this.m=p,this.prime=null}x.prototype._verify1=function(t){i(t.negative===0,"red works only with positives"),i(t.red,"red works only with red numbers")},x.prototype._verify2=function(t,s){i((t.negative|s.negative)===0,"red works only with positives"),i(t.red&&t.red===s.red,"red works only with red numbers")},x.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):(m(t,t.umod(this.m)._forceRed(this)),t)},x.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},x.prototype.add=function(t,s){this._verify2(t,s);var u=t.add(s);return u.cmp(this.m)>=0&&u.isub(this.m),u._forceRed(this)},x.prototype.iadd=function(t,s){this._verify2(t,s);var u=t.iadd(s);return u.cmp(this.m)>=0&&u.isub(this.m),u},x.prototype.sub=function(t,s){this._verify2(t,s);var u=t.sub(s);return u.cmpn(0)<0&&u.iadd(this.m),u._forceRed(this)},x.prototype.isub=function(t,s){this._verify2(t,s);var u=t.isub(s);return u.cmpn(0)<0&&u.iadd(this.m),u},x.prototype.shl=function(t,s){return this._verify1(t),this.imod(t.ushln(s))},x.prototype.imul=function(t,s){return this._verify2(t,s),this.imod(t.imul(s))},x.prototype.mul=function(t,s){return this._verify2(t,s),this.imod(t.mul(s))},x.prototype.isqr=function(t){return this.imul(t,t.clone())},x.prototype.sqr=function(t){return this.mul(t,t)},x.prototype.sqrt=function(t){if(t.isZero())return t.clone();var s=this.m.andln(3);if(i(s%2===1),s===3){var u=this.m.add(new e(1)).iushrn(2);return this.pow(t,u)}for(var f=this.m.subn(1),h=0;!f.isZero()&&f.andln(1)===0;)h++,f.iushrn(1);i(!f.isZero());var v=new e(1).toRed(this),P=v.redNeg(),_=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new e(2*l*l).toRed(this);this.pow(l,_).cmp(P)!==0;)l.redIAdd(P);for(var y=this.pow(l,f),U=this.pow(t,f.addn(1).iushrn(1)),B=this.pow(t,f),$=h;B.cmp(v)!==0;){for(var K=B,V=0;K.cmp(v)!==0;V++)K=K.redSqr();i(V<$);var J=this.pow(y,new e(1).iushln($-V-1));U=U.redMul(J),y=J.redSqr(),B=B.redMul(y),$=V}return U},x.prototype.invm=function(t){var s=t._invmp(this.m);return s.negative!==0?(s.negative=0,this.imod(s).redNeg()):this.imod(s)},x.prototype.pow=function(t,s){if(s.isZero())return new e(1).toRed(this);if(s.cmpn(1)===0)return t.clone();var u=4,f=new Array(1<<u);f[0]=new e(1).toRed(this),f[1]=t;for(var h=2;h<f.length;h++)f[h]=this.mul(f[h-1],t);var v=f[0],P=0,_=0,l=s.bitLength()%26;for(l===0&&(l=26),h=s.length-1;h>=0;h--){for(var y=s.words[h],U=l-1;U>=0;U--){var B=y>>U&1;if(v!==f[0]&&(v=this.sqr(v)),B===0&&P===0){_=0;continue}P<<=1,P|=B,_++,!(_!==u&&(h!==0||U!==0))&&(v=this.mul(v,f[P]),_=0,P=0)}l=26}return v},x.prototype.convertTo=function(t){var s=t.umod(this.m);return s===t?s.clone():s},x.prototype.convertFrom=function(t){var s=t.clone();return s.red=null,s},e.mont=function(t){return new C(t)};function C(p){x.call(this,p),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new e(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}o(C,x),C.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},C.prototype.convertFrom=function(t){var s=this.imod(t.mul(this.rinv));return s.red=null,s},C.prototype.imul=function(t,s){if(t.isZero()||s.isZero())return t.words[0]=0,t.length=1,t;var u=t.imul(s),f=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(f).iushrn(this.shift),v=h;return h.cmp(this.m)>=0?v=h.isub(this.m):h.cmpn(0)<0&&(v=h.iadd(this.m)),v._forceRed(this)},C.prototype.mul=function(t,s){if(t.isZero()||s.isZero())return new e(0)._forceRed(this);var u=t.mul(s),f=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(f).iushrn(this.shift),v=h;return h.cmp(this.m)>=0?v=h.isub(this.m):h.cmpn(0)<0&&(v=h.iadd(this.m)),v._forceRed(this)},C.prototype.invm=function(t){var s=this.imod(t._invmp(this.m).mul(this.r2));return s._forceRed(this)}})(typeof Fi>"u"||Fi,Ar)});var Kn={};Ur(Kn,{CetusMarginTradingSDK:()=>Te,appendExtraRewards:()=>Fn,calculateBorrowAprPercent:()=>ti,calculateDepositAprPercent:()=>Ei,calculateUtilizationPercent:()=>Ii,default:()=>Zn,formatLtvPercentValue:()=>Wn,getPriceWithFormattedDecimals:()=>Bi,getRewardsAprMultiplier:()=>jn,getUpdatedReserve:()=>Un,margin_trading_mainnet:()=>ki,mergePositionData:()=>Ne,oraclePriceMultiplierDecimal:()=>Qe,updateRewardsWithMultiplier:()=>$n,wrapMarketInfo:()=>Re,wrapMarketPermissions:()=>Ie,wrapPosition:()=>Le});module.exports=jr(Kn);var Tr=require("@mysten/sui/client"),Dr=require("@mysten/sui/utils"),Or=require("@pythnetwork/pyth-sui-js"),Rr=require("@cetusprotocol/common-sdk"),Lr=require("@cetusprotocol/sui-clmm-sdk"),xe=require("@cetusprotocol/aggregator-sdk");var er=require("@cetusprotocol/common-sdk"),ki={full_rpc_url:er.FullRpcUrlMainnet,env:"mainnet",aggregator_url:"https://api-sui.cetus.zone/router_v3",margin_trading:{package_id:"0xa079129c989dacac4f5ccb7b2bb2b8f233b13694c465466a344e2e095e987407",published_at:"0xa079129c989dacac4f5ccb7b2bb2b8f233b13694c465466a344e2e095e987407",version:0,config:{versioned_id:"0x85d30849a1e172e1f90bb42e22ed87457a8110dad7658d51c806baa84f5dcd94",admin_cap_id:"0xdae1da9a2bacb4738411365e9719b739b655ce6b737155ff58137b78c944112a",global_config_id:"0x267de967e72360eb09837bb595a0c6b54bb98a2a1ae47436ccab4a99e6b84f25",markets:"0xe0986f697a300da740d384e64c2ba010aa9caf37a54ed0cc8b4098c4d4e592d0",markets_table_id:"0xe9dd2dbc3d68c00f297dd84e57ad28f6a504effbf6b1b869b9e4138ead14c731"}},suilend:{package_id:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf",published_at:"0xe37cc7bb50fd9b6dbd3873df66fa2c554e973697f50ef97707311dc78bd08444",config:{lending_market:[{name:"Main market",slug:"main",id:"0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",type:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",owner_cap_id:"0xf7a4defe0b6566b6a2674a02a0c61c9f99bd012eed21bc741a069eaa82d35927"},{name:"STEAMM LM",slug:"steamm-lm",id:"0xc1888ec1b81a414e427a44829310508352aec38252ee0daa9f8b181b6947de9f",type:"0x0a071f4976abae1a7f722199cf0bfcbe695ef9408a878e7d12a7ca87b7e582a6::lp_rewards::LP_REWARDS",owner_cap_id:"0x55a0f33b24e091830302726c8cfbff8cf8abd2ec1f83a4e6f4bf51c7ba3ad5ab",is_hidden:!0}],lending_market_id:"0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",lending_market_type:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",api_url:"https://d10td5ybgrf39v.cloudfront.net"}}};var Kt=require("@cetusprotocol/common-sdk"),Pe=require("@mysten/sui/transactions");var Gt=require("@cetusprotocol/common-sdk"),ir=require("@suilend/sdk/parsers/obligation"),ae=require("@suilend/sdk"),Re=n=>{let r=(0,Gt.getObjectFields)(n),{open_permissions_pause:i,close_permissions_pause:o,deposit_permissions_pause:e,withdraw_permissions_pause:a,borrow_permissions_pause:d,repay_permissions_pause:c}=Ie(r.permissions.toString(2));return{market_id:r.id.id,base_token:(0,Gt.addHexPrefix)(r.base_token.fields.name),quote_token:(0,Gt.addHexPrefix)(r.quote_token.fields.name),max_long_leverage:(0,Gt.d)(r.max_long_leverage).div(10**6).toString(),max_short_leverage:(0,Gt.d)(r.max_short_leverage).div(10**6).toString(),open_fee_rate:(0,Gt.d)(r.open_fee_rate).div(10**6).toString(),close_fee_rate:(0,Gt.d)(r.close_fee_rate).div(10**6).toString(),open_permissions_pause:i,close_permissions_pause:o,deposit_permissions_pause:e,withdraw_permissions_pause:a,borrow_permissions_pause:d,repay_permissions_pause:c}},Le=(n,r)=>{let i=(0,Gt.getObjectFields)(n);return{created_at:i.created_ts,position_id:i.id.id,init_deposit_amount:i.init_deposit_amount,is_long:i.is_long,lending_market_id:i.lending_market_id,obligation_owner_cap:i.obligation_owner_cap.fields.obligation_id,market_id:i.market_id,position_cap_id:r}},Ne=(n,r,i,o,e)=>{let a=(0,ir.parseObligation)(r,i),d=(0,ae.getNetAprPercent)(a,e,o);if(!a.deposits||a.deposits.length===0)throw new Error("No deposits found in obligation data");let c=a.deposits[0],g=(0,Gt.d)(c.reserve.config.closeLtvPct).div(100).toString(),m=(0,Gt.d)(c.reserve.config.openLtvPct).div(100).toString(),M=a.depositedAmountUsd.gt(0)?a.borrowedAmountUsd.div(a.depositedAmountUsd).toString():"0",S=(0,Gt.d)(1).div(g).toString(),A=(0,Gt.d)(g).sub(M).toString(),T="0",O="0",L="0",I="0";if(a.borrows&&a.borrows.length>0){let N=a.borrows[0],R=e[N?.coinType];R&&(T=(0,ae.getTotalAprPercent)(ae.Side.BORROW,N?.reserve.borrowAprPercent,(0,ae.getFilteredRewards)(R.borrow)).toString()),L=N.borrowedAmountUsd.toString(),I=N.borrowedAmount.toString()}if(a.deposits&&a.deposits.length>0){let N=a.deposits[0],R=e[N?.coinType];R&&(O=(0,ae.getTotalAprPercent)(ae.Side.DEPOSIT,N?.reserve.depositAprPercent,(0,ae.getFilteredRewards)(R.deposit)).toString())}return{...n,...a,origin_obligation:r,net_apr_percent:d.toString(),supplied_apr:(0,Gt.d)(O).toString(),borrowed_apr:(0,Gt.d)(T).toString(),close_ltv:g,open_ltv:m,cr:M,ltr:S,liquidation_buffer:A,deposited_amount_usd:c.depositedAmountUsd.toString(),borrowed_amount_usd:L,deposited_amount:c.depositedAmount.toString(),borrowed_amount:I}},Ie=n=>{let r=n.length,i=n.substring(r-1,r)==="0",o=n.substring(r-2,r-1)==="0",e=n.substring(r-3,r-2)==="0",a=n.substring(r-4,r-3)==="0",d=n.substring(r-5,r-4)==="0",c=n.substring(r-6,r-5)==="0";return{open_permissions_pause:i,close_permissions_pause:o,deposit_permissions_pause:e,withdraw_permissions_pause:d,borrow_permissions_pause:a,repay_permissions_pause:c}};var ct=require("@suilend/sdk");var rr=require("@cetusprotocol/common-sdk");var Ee=class extends rr.BaseError{constructor(r,i,o){super(r,i||"UnknownError",o)}static isCrossSwapErrorCode(r,i){return this.isErrorCode(r,i)}},Yt=(n,r,i)=>{let o={...i,stack:r instanceof Error?r.stack:void 0};throw r instanceof Error?new Ee(r.message,n,o):new Ee(r,n,o)};var Be=class{constructor(r){this.createMarket=async r=>{let{package_id:i}=this._sdk.sdkOptions.margin_trading,{versioned_id:o,admin_cap_id:e,markets:a,global_config_id:d}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),c=new Pe.Transaction;return c.moveCall({target:`${i}::market::create_market`,arguments:[c.object(e),c.object(d),c.object(a),c.pure.u64(r.open_fee_rate),c.pure.u64(r.close_fee_rate),c.object(o)],typeArguments:[r.base_token,r.quote_token]}),c};this.updateMarketFeeRate=async r=>{let{package_id:i}=this._sdk.sdkOptions.margin_trading,{versioned_id:o,admin_cap_id:e}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{market_id:a,open_fee_rate:d,close_fee_rate:c}=r,g=new Pe.Transaction;return g.moveCall({target:`${i}::market::set_fee_rate`,arguments:[g.object(e),g.object(a),g.pure.u64(d),g.pure.u64(c),g.object(o)],typeArguments:[]}),g};this.claimMarketFees=async(r,i)=>{let{package_id:o}=this._sdk.sdkOptions.margin_trading,{versioned_id:e,admin_cap_id:a}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),d=i||new Pe.Transaction,{base_token:c,quote_token:g}=await this._sdk.MarketModules.getMarketInfo(r);return d.moveCall({target:`${o}::market::claim_fees`,arguments:[d.object(a),d.object(r),d.object(e)],typeArguments:[c,g]}),d};this.claimAllMarketFees=async r=>{let i=new Pe.Transaction;for(let o=0;o<r.length;o++){let e=r[o];this.claimMarketFees(e,i)}return i};this.getMarginTradingConfig=async()=>{let{package_id:r}=this._sdk.sdkOptions.margin_trading;try{let i=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${r}::versioned::InitEvent`}),o=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${r}::admin_cap::InitEvent`}),e=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${r}::config::InitEvent`}),d=(await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${r}::market::InitEvent`})).data[0].parsedJson.markets_id,g=(await this._sdk.FullClient.getObject({id:d,options:{showContent:!0}})).data.content.fields.list.fields.id.id;return{versioned_id:i.data[0].parsedJson.versioned_id,admin_cap_id:o.data[0].parsedJson.admin_cap_id,global_config_id:e.data[0].parsedJson.global_config_id,markets:d,markets_table_id:g}}catch(i){return Yt("FetchError",i),{versioned_id:"",admin_cap_id:"",global_config_id:"",markets_table_id:"",markets:""}}};this.getMarketList=async(r=!1)=>{let o=this._sdk.getCache("margin_trading_markets_list",r);if(o)return o;let{package_id:e}=this._sdk.sdkOptions.margin_trading,a=[];try{let d=`${e}::market::CreateMarketEvent`,g=(await this._sdk.FullClient.queryEventsByPage({MoveEventType:d})).data.map(m=>m.parsedJson.market_id);return g.length>0?((await this._sdk.FullClient.batchGetObjects(g,{showContent:!0,showType:!0})).forEach(M=>{let S=Re(M),A=`margin_trading_market_info_${S.market_id}`;this._sdk.updateCache(A,S),a.push(S)}),a):(Yt("MarketNotFound","Market not found"),[])}catch(d){return Yt("FetchError",d),[]}};this.getMarketInfo=async(r,i=!1)=>{let o=`margin_trading_market_info_${r}`,e=this._sdk.getCache(o,i);if(e)return e;try{let a=await this._sdk.FullClient.getObject({id:r,options:{showContent:!0}}),d=Re(a);return this._sdk.updateCache(o,d,Kt.CACHE_TIME_5MIN),d}catch(a){return Yt("FetchError",a),{}}};this.getMarketSuilendInfo=async r=>{try{let{base_token:i,quote_token:o}=await this.getMarketInfo(r),{lending_market_id:e}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{allLendingMarketData:a,lstAprPercentMap:d}=await this._sdk.SuiLendModule.getLendingMarketData(!0),{base_reserve_map_info:c,quote_reserve_map_info:g}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(i,o,a);console.log("\u{1F680}\u{1F680}\u{1F680} ~ marketModules.ts:188 ~ MarketModules ~ base_reserve_map_info:",c);let m=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:a,lstAprPercentMap:d},!0),M=m[e].rewardMap[i],S=m[e].rewardMap[o],{depositedAmountUsd:A,borrowedAmountUsd:T,depositAprPercent:O,borrowAprPercent:L,depositedAmount:I,borrowedAmount:N}=c,{depositLimit:R,borrowLimit:F}=c.config,{depositedAmountUsd:q,borrowedAmountUsd:W,depositAprPercent:j,borrowAprPercent:Z,depositedAmount:w,borrowedAmount:b}=g,{depositLimit:k,borrowLimit:x}=g.config,C=(0,ct.getTotalAprPercent)(ct.Side.DEPOSIT,O,(0,ct.getFilteredRewards)(M.deposit),(0,ct.getStakingYieldAprPercent)(ct.Side.DEPOSIT,i,d)),p=(0,ct.getTotalAprPercent)(ct.Side.BORROW,L,(0,ct.getFilteredRewards)(M.borrow)),t=(0,ct.getTotalAprPercent)(ct.Side.DEPOSIT,j,(0,ct.getFilteredRewards)(S.deposit),(0,ct.getStakingYieldAprPercent)(ct.Side.DEPOSIT,i,d)),s=(0,ct.getTotalAprPercent)(ct.Side.BORROW,Z,(0,ct.getFilteredRewards)(S.borrow)),u=(0,Kt.d)(q.toString()).sub(W.toString()).toString(),f=(0,Kt.d)(A.toString()).sub(T.toString()).toString(),h=(0,Kt.d)(R.toString()).sub((0,Kt.d)(I.toString())).toString(),v=(0,Kt.d)(F.toString()).sub((0,Kt.d)(N.toString())).toString(),P=(0,Kt.d)(k.toString()).sub((0,Kt.d)(w.toString())).toString(),_=(0,Kt.d)(x.toString()).sub((0,Kt.d)(b.toString())).toString();return{long_liquidity:u,short_liquidity:f,base_total_deposit_apr_percent:C.toString(),base_total_borrow_apr_percent:p.toString(),quote_total_deposit_apr_percent:t.toString(),quote_total_borrow_apr_percent:s.toString(),base_token_available_deposit_amount:h,base_token_available_borrow_amount:v,quote_token_available_deposit_amount:P,quote_token_available_borrow_amount:_,base_deposit_rewards:(0,ct.getFilteredRewards)(M.deposit),quote_deposit_rewards:(0,ct.getFilteredRewards)(S.deposit),base_borrow_rewards:(0,ct.getFilteredRewards)(M.borrow),quote_borrow_rewards:(0,ct.getFilteredRewards)(S.borrow),base_deposit_apr_percent:O.toString(),base_borrow_apr_percent:L.toString(),quote_deposit_apr_percent:j.toString(),quote_borrow_apr_percent:Z.toString(),obligations:m[e],base_reserve_map_info:c,quote_reserve_map_info:g}}catch(i){return Yt("FetchError",i),{}}};this._sdk=r}};var pt=require("@cetusprotocol/common-sdk"),Qt=require("@mysten/sui/transactions");var qe=class{constructor(r){this.queryGlobalPermissions=async()=>{let r=this._sdk.sdkOptions.margin_trading,{global_config_id:i}=(0,pt.getPackagerConfigs)(r),o=await this._sdk.FullClient.getObject({id:i,options:{showContent:!0}});if(o){let e=o.data.content.fields.permissions.toString(2),{open_permissions_pause:a,close_permissions_pause:d,deposit_permissions_pause:c,withdraw_permissions_pause:g,borrow_permissions_pause:m,repay_permissions_pause:M}=Ie(e);return{open_permissions_pause:a,close_permissions_pause:d,deposit_permissions_pause:c,withdraw_permissions_pause:g,borrow_permissions_pause:m,repay_permissions_pause:M}}};this.updateGlobalPermissions=async r=>{let i=new Qt.Transaction;return this.updateGlobalOpenPositionPermissions(r,i),this.updateGlobalClosePositionPermissions(r,i),this.updateGlobalDepositPermissions(r,i),this.updateGlobalBorrowPermissions(r,i),this.updateGlobalWithdrawPermissions(r,i),this.updateGlobalRepayPermissions(r,i),i};this.updateGlobalOpenPositionPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_open_position_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalClosePositionPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_close_position_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalDepositPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_deposit_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalBorrowPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_borrow_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalWithdrawPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_withdraw_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalRepayPermissions=async(r,i)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:e,versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(o),c=i||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_repay_permissions`,arguments:[c.object(d),c.object(e),c.pure.bool(r),c.object(pt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateMarketCreatePositionPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_open_position_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketClosePositionPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_close_position_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketDepositPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_deposit_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketWithdrawPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_withdraw_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketBorrowPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_borrow_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketRepayPermissions=async(r,i,o)=>{let e=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,pt.getPackagerConfigs)(e),c=o||new Qt.Transaction;return c.moveCall({target:`${e.published_at}::market::update_market_repay_permission`,arguments:[c.object(d),c.object(r),c.pure.bool(i),c.object(a)],typeArguments:[]}),c};this.updateMarketPermissions=async(r,i,o)=>{let e=o||new Qt.Transaction;return this.updateMarketCreatePositionPermissions(r,i,e),this.updateMarketClosePositionPermissions(r,i,e),this.updateMarketDepositPermissions(r,i,e),this.updateMarketWithdrawPermissions(r,i,e),this.updateMarketBorrowPermissions(r,i,e),this.updateMarketRepayPermissions(r,i,e),e};this._sdk=r}};var D=require("@cetusprotocol/common-sdk");var $r=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Pi=Math.ceil,ne=Math.floor,te="[BigNumber Error] ",nr=te+"Number primitive has more than 15 significant digits: ",le=1e14,Q=14,Ai=9007199254740991,Ci=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],ge=1e7,zt=1e9;function or(n){var r,i,o,e=R.prototype={constructor:R,toString:null,valueOf:null},a=new R(1),d=20,c=4,g=-7,m=21,M=-1e7,S=1e7,A=!1,T=1,O=0,L={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},I="0123456789abcdefghijklmnopqrstuvwxyz",N=!0;function R(w,b){var k,x,C,p,t,s,u,f,h=this;if(!(h instanceof R))return new R(w,b);if(b==null){if(w&&w._isBigNumber===!0){h.s=w.s,!w.c||w.e>S?h.c=h.e=null:w.e<M?h.c=[h.e=0]:(h.e=w.e,h.c=w.c.slice());return}if((s=typeof w=="number")&&w*0==0){if(h.s=1/w<0?(w=-w,-1):1,w===~~w){for(p=0,t=w;t>=10;t/=10,p++);p>S?h.c=h.e=null:(h.e=p,h.c=[w]);return}f=String(w)}else{if(!$r.test(f=String(w)))return o(h,f,s);h.s=f.charCodeAt(0)==45?(f=f.slice(1),-1):1}(p=f.indexOf("."))>-1&&(f=f.replace(".","")),(t=f.search(/e/i))>0?(p<0&&(p=t),p+=+f.slice(t+1),f=f.substring(0,t)):p<0&&(p=f.length)}else{if(dt(b,2,I.length,"Base"),b==10&&N)return h=new R(w),j(h,d+h.e+1,c);if(f=String(w),s=typeof w=="number"){if(w*0!=0)return o(h,f,s,b);if(h.s=1/w<0?(f=f.slice(1),-1):1,R.DEBUG&&f.replace(/^0\.0*|\./,"").length>15)throw Error(nr+w)}else h.s=f.charCodeAt(0)===45?(f=f.slice(1),-1):1;for(k=I.slice(0,b),p=t=0,u=f.length;t<u;t++)if(k.indexOf(x=f.charAt(t))<0){if(x=="."){if(t>p){p=u;continue}}else if(!C&&(f==f.toUpperCase()&&(f=f.toLowerCase())||f==f.toLowerCase()&&(f=f.toUpperCase()))){C=!0,t=-1,p=0;continue}return o(h,String(w),s,b)}s=!1,f=i(f,b,10,h.s),(p=f.indexOf("."))>-1?f=f.replace(".",""):p=f.length}for(t=0;f.charCodeAt(t)===48;t++);for(u=f.length;f.charCodeAt(--u)===48;);if(f=f.slice(t,++u)){if(u-=t,s&&R.DEBUG&&u>15&&(w>Ai||w!==ne(w)))throw Error(nr+h.s*w);if((p=p-t-1)>S)h.c=h.e=null;else if(p<M)h.c=[h.e=0];else{if(h.e=p,h.c=[],t=(p+1)%Q,p<0&&(t+=Q),t<u){for(t&&h.c.push(+f.slice(0,t)),u-=Q;t<u;)h.c.push(+f.slice(t,t+=Q));t=Q-(f=f.slice(t)).length}else t-=u;for(;t--;f+="0");h.c.push(+f)}}else h.c=[h.e=0]}R.clone=or,R.ROUND_UP=0,R.ROUND_DOWN=1,R.ROUND_CEIL=2,R.ROUND_FLOOR=3,R.ROUND_HALF_UP=4,R.ROUND_HALF_DOWN=5,R.ROUND_HALF_EVEN=6,R.ROUND_HALF_CEIL=7,R.ROUND_HALF_FLOOR=8,R.EUCLID=9,R.config=R.set=function(w){var b,k;if(w!=null)if(typeof w=="object"){if(w.hasOwnProperty(b="DECIMAL_PLACES")&&(k=w[b],dt(k,0,zt,b),d=k),w.hasOwnProperty(b="ROUNDING_MODE")&&(k=w[b],dt(k,0,8,b),c=k),w.hasOwnProperty(b="EXPONENTIAL_AT")&&(k=w[b],k&&k.pop?(dt(k[0],-zt,0,b),dt(k[1],0,zt,b),g=k[0],m=k[1]):(dt(k,-zt,zt,b),g=-(m=k<0?-k:k))),w.hasOwnProperty(b="RANGE"))if(k=w[b],k&&k.pop)dt(k[0],-zt,-1,b),dt(k[1],1,zt,b),M=k[0],S=k[1];else if(dt(k,-zt,zt,b),k)M=-(S=k<0?-k:k);else throw Error(te+b+" cannot be zero: "+k);if(w.hasOwnProperty(b="CRYPTO"))if(k=w[b],k===!!k)if(k)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))A=k;else throw A=!k,Error(te+"crypto unavailable");else A=k;else throw Error(te+b+" not true or false: "+k);if(w.hasOwnProperty(b="MODULO_MODE")&&(k=w[b],dt(k,0,9,b),T=k),w.hasOwnProperty(b="POW_PRECISION")&&(k=w[b],dt(k,0,zt,b),O=k),w.hasOwnProperty(b="FORMAT"))if(k=w[b],typeof k=="object")L=k;else throw Error(te+b+" not an object: "+k);if(w.hasOwnProperty(b="ALPHABET"))if(k=w[b],typeof k=="string"&&!/^.?$|[+\-.\s]|(.).*\1/.test(k))N=k.slice(0,10)=="0123456789",I=k;else throw Error(te+b+" invalid: "+k)}else throw Error(te+"Object expected: "+w);return{DECIMAL_PLACES:d,ROUNDING_MODE:c,EXPONENTIAL_AT:[g,m],RANGE:[M,S],CRYPTO:A,MODULO_MODE:T,POW_PRECISION:O,FORMAT:L,ALPHABET:I}},R.isBigNumber=function(w){if(!w||w._isBigNumber!==!0)return!1;if(!R.DEBUG)return!0;var b,k,x=w.c,C=w.e,p=w.s;t:if({}.toString.call(x)=="[object Array]"){if((p===1||p===-1)&&C>=-zt&&C<=zt&&C===ne(C)){if(x[0]===0){if(C===0&&x.length===1)return!0;break t}if(b=(C+1)%Q,b<1&&(b+=Q),String(x[0]).length==b){for(b=0;b<x.length;b++)if(k=x[b],k<0||k>=le||k!==ne(k))break t;if(k!==0)return!0}}}else if(x===null&&C===null&&(p===null||p===1||p===-1))return!0;throw Error(te+"Invalid BigNumber: "+w)},R.maximum=R.max=function(){return q(arguments,-1)},R.minimum=R.min=function(){return q(arguments,1)},R.random=(function(){var w=9007199254740992,b=Math.random()*w&2097151?function(){return ne(Math.random()*w)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(k){var x,C,p,t,s,u=0,f=[],h=new R(a);if(k==null?k=d:dt(k,0,zt),t=Pi(k/Q),A)if(crypto.getRandomValues){for(x=crypto.getRandomValues(new Uint32Array(t*=2));u<t;)s=x[u]*131072+(x[u+1]>>>11),s>=9e15?(C=crypto.getRandomValues(new Uint32Array(2)),x[u]=C[0],x[u+1]=C[1]):(f.push(s%1e14),u+=2);u=t/2}else if(crypto.randomBytes){for(x=crypto.randomBytes(t*=7);u<t;)s=(x[u]&31)*281474976710656+x[u+1]*1099511627776+x[u+2]*4294967296+x[u+3]*16777216+(x[u+4]<<16)+(x[u+5]<<8)+x[u+6],s>=9e15?crypto.randomBytes(7).copy(x,u):(f.push(s%1e14),u+=7);u=t/7}else throw A=!1,Error(te+"crypto unavailable");if(!A)for(;u<t;)s=b(),s<9e15&&(f[u++]=s%1e14);for(t=f[--u],k%=Q,t&&k&&(s=Ci[Q-k],f[u]=ne(t/s)*s);f[u]===0;f.pop(),u--);if(u<0)f=[p=0];else{for(p=-1;f[0]===0;f.splice(0,1),p-=Q);for(u=1,s=f[0];s>=10;s/=10,u++);u<Q&&(p-=Q-u)}return h.e=p,h.c=f,h}})(),R.sum=function(){for(var w=1,b=arguments,k=new R(b[0]);w<b.length;)k=k.plus(b[w++]);return k},i=(function(){var w="0123456789";function b(k,x,C,p){for(var t,s=[0],u,f=0,h=k.length;f<h;){for(u=s.length;u--;s[u]*=x);for(s[0]+=p.indexOf(k.charAt(f++)),t=0;t<s.length;t++)s[t]>C-1&&(s[t+1]==null&&(s[t+1]=0),s[t+1]+=s[t]/C|0,s[t]%=C)}return s.reverse()}return function(k,x,C,p,t){var s,u,f,h,v,P,_,l,y=k.indexOf("."),U=d,B=c;for(y>=0&&(h=O,O=0,k=k.replace(".",""),l=new R(x),P=l.pow(k.length-y),O=h,l.c=b(he(re(P.c),P.e,"0"),10,C,w),l.e=l.c.length),_=b(k,x,C,t?(s=I,w):(s=w,I)),f=h=_.length;_[--h]==0;_.pop());if(!_[0])return s.charAt(0);if(y<0?--f:(P.c=_,P.e=f,P.s=p,P=r(P,l,U,B,C),_=P.c,v=P.r,f=P.e),u=f+U+1,y=_[u],h=C/2,v=v||u<0||_[u+1]!=null,v=B<4?(y!=null||v)&&(B==0||B==(P.s<0?3:2)):y>h||y==h&&(B==4||v||B==6&&_[u-1]&1||B==(P.s<0?8:7)),u<1||!_[0])k=v?he(s.charAt(1),-U,s.charAt(0)):s.charAt(0);else{if(_.length=u,v)for(--C;++_[--u]>C;)_[u]=0,u||(++f,_=[1].concat(_));for(h=_.length;!_[--h];);for(y=0,k="";y<=h;k+=s.charAt(_[y++]));k=he(k,f,s.charAt(0))}return k}})(),r=(function(){function w(x,C,p){var t,s,u,f,h=0,v=x.length,P=C%ge,_=C/ge|0;for(x=x.slice();v--;)u=x[v]%ge,f=x[v]/ge|0,t=_*u+f*P,s=P*u+t%ge*ge+h,h=(s/p|0)+(t/ge|0)+_*f,x[v]=s%p;return h&&(x=[h].concat(x)),x}function b(x,C,p,t){var s,u;if(p!=t)u=p>t?1:-1;else for(s=u=0;s<p;s++)if(x[s]!=C[s]){u=x[s]>C[s]?1:-1;break}return u}function k(x,C,p,t){for(var s=0;p--;)x[p]-=s,s=x[p]<C[p]?1:0,x[p]=s*t+x[p]-C[p];for(;!x[0]&&x.length>1;x.splice(0,1));}return function(x,C,p,t,s){var u,f,h,v,P,_,l,y,U,B,$,K,V,J,rt,G,et,ht=x.s==C.s?1:-1,tt=x.c,X=C.c;if(!tt||!tt[0]||!X||!X[0])return new R(!x.s||!C.s||(tt?X&&tt[0]==X[0]:!X)?NaN:tt&&tt[0]==0||!X?ht*0:ht/0);for(y=new R(ht),U=y.c=[],f=x.e-C.e,ht=p+f+1,s||(s=le,f=oe(x.e/Q)-oe(C.e/Q),ht=ht/Q|0),h=0;X[h]==(tt[h]||0);h++);if(X[h]>(tt[h]||0)&&f--,ht<0)U.push(1),v=!0;else{for(J=tt.length,G=X.length,h=0,ht+=2,P=ne(s/(X[0]+1)),P>1&&(X=w(X,P,s),tt=w(tt,P,s),G=X.length,J=tt.length),V=G,B=tt.slice(0,G),$=B.length;$<G;B[$++]=0);et=X.slice(),et=[0].concat(et),rt=X[0],X[1]>=s/2&&rt++;do{if(P=0,u=b(X,B,G,$),u<0){if(K=B[0],G!=$&&(K=K*s+(B[1]||0)),P=ne(K/rt),P>1)for(P>=s&&(P=s-1),_=w(X,P,s),l=_.length,$=B.length;b(_,B,l,$)==1;)P--,k(_,G<l?et:X,l,s),l=_.length,u=1;else P==0&&(u=P=1),_=X.slice(),l=_.length;if(l<$&&(_=[0].concat(_)),k(B,_,$,s),$=B.length,u==-1)for(;b(X,B,G,$)<1;)P++,k(B,G<$?et:X,$,s),$=B.length}else u===0&&(P++,B=[0]);U[h++]=P,B[0]?B[$++]=tt[V]||0:(B=[tt[V]],$=1)}while((V++<J||B[0]!=null)&&ht--);v=B[0]!=null,U[0]||U.splice(0,1)}if(s==le){for(h=1,ht=U[0];ht>=10;ht/=10,h++);j(y,p+(y.e=h+f*Q-1)+1,t,v)}else y.e=f,y.r=+v;return y}})();function F(w,b,k,x){var C,p,t,s,u;if(k==null?k=c:dt(k,0,8),!w.c)return w.toString();if(C=w.c[0],t=w.e,b==null)u=re(w.c),u=x==1||x==2&&(t<=g||t>=m)?Ue(u,t):he(u,t,"0");else if(w=j(new R(w),b,k),p=w.e,u=re(w.c),s=u.length,x==1||x==2&&(b<=p||p<=g)){for(;s<b;u+="0",s++);u=Ue(u,p)}else if(b-=t+(x===2&&p>t),u=he(u,p,"0"),p+1>s){if(--b>0)for(u+=".";b--;u+="0");}else if(b+=p-s,b>0)for(p+1==s&&(u+=".");b--;u+="0");return w.s<0&&C?"-"+u:u}function q(w,b){for(var k,x,C=1,p=new R(w[0]);C<w.length;C++)x=new R(w[C]),(!x.s||(k=ye(p,x))===b||k===0&&p.s===b)&&(p=x);return p}function W(w,b,k){for(var x=1,C=b.length;!b[--C];b.pop());for(C=b[0];C>=10;C/=10,x++);return(k=x+k*Q-1)>S?w.c=w.e=null:k<M?w.c=[w.e=0]:(w.e=k,w.c=b),w}o=(function(){var w=/^(-?)0([xbo])(?=\w[\w.]*$)/i,b=/^([^.]+)\.$/,k=/^\.([^.]+)$/,x=/^-?(Infinity|NaN)$/,C=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(p,t,s,u){var f,h=s?t:t.replace(C,"");if(x.test(h))p.s=isNaN(h)?null:h<0?-1:1;else{if(!s&&(h=h.replace(w,function(v,P,_){return f=(_=_.toLowerCase())=="x"?16:_=="b"?2:8,!u||u==f?P:v}),u&&(f=u,h=h.replace(b,"$1").replace(k,"0.$1")),t!=h))return new R(h,f);if(R.DEBUG)throw Error(te+"Not a"+(u?" base "+u:"")+" number: "+t);p.s=null}p.c=p.e=null}})();function j(w,b,k,x){var C,p,t,s,u,f,h,v=w.c,P=Ci;if(v){t:{for(C=1,s=v[0];s>=10;s/=10,C++);if(p=b-C,p<0)p+=Q,t=b,u=v[f=0],h=ne(u/P[C-t-1]%10);else if(f=Pi((p+1)/Q),f>=v.length)if(x){for(;v.length<=f;v.push(0));u=h=0,C=1,p%=Q,t=p-Q+1}else break t;else{for(u=s=v[f],C=1;s>=10;s/=10,C++);p%=Q,t=p-Q+C,h=t<0?0:ne(u/P[C-t-1]%10)}if(x=x||b<0||v[f+1]!=null||(t<0?u:u%P[C-t-1]),x=k<4?(h||x)&&(k==0||k==(w.s<0?3:2)):h>5||h==5&&(k==4||x||k==6&&(p>0?t>0?u/P[C-t]:0:v[f-1])%10&1||k==(w.s<0?8:7)),b<1||!v[0])return v.length=0,x?(b-=w.e+1,v[0]=P[(Q-b%Q)%Q],w.e=-b||0):v[0]=w.e=0,w;if(p==0?(v.length=f,s=1,f--):(v.length=f+1,s=P[Q-p],v[f]=t>0?ne(u/P[C-t]%P[t])*s:0),x)for(;;)if(f==0){for(p=1,t=v[0];t>=10;t/=10,p++);for(t=v[0]+=s,s=1;t>=10;t/=10,s++);p!=s&&(w.e++,v[0]==le&&(v[0]=1));break}else{if(v[f]+=s,v[f]!=le)break;v[f--]=0,s=1}for(p=v.length;v[--p]===0;v.pop());}w.e>S?w.c=w.e=null:w.e<M&&(w.c=[w.e=0])}return w}function Z(w){var b,k=w.e;return k===null?w.toString():(b=re(w.c),b=k<=g||k>=m?Ue(b,k):he(b,k,"0"),w.s<0?"-"+b:b)}return e.absoluteValue=e.abs=function(){var w=new R(this);return w.s<0&&(w.s=1),w},e.comparedTo=function(w,b){return ye(this,new R(w,b))},e.decimalPlaces=e.dp=function(w,b){var k,x,C,p=this;if(w!=null)return dt(w,0,zt),b==null?b=c:dt(b,0,8),j(new R(p),w+p.e+1,b);if(!(k=p.c))return null;if(x=((C=k.length-1)-oe(this.e/Q))*Q,C=k[C])for(;C%10==0;C/=10,x--);return x<0&&(x=0),x},e.dividedBy=e.div=function(w,b){return r(this,new R(w,b),d,c)},e.dividedToIntegerBy=e.idiv=function(w,b){return r(this,new R(w,b),0,1)},e.exponentiatedBy=e.pow=function(w,b){var k,x,C,p,t,s,u,f,h,v=this;if(w=new R(w),w.c&&!w.isInteger())throw Error(te+"Exponent not an integer: "+Z(w));if(b!=null&&(b=new R(b)),s=w.e>14,!v.c||!v.c[0]||v.c[0]==1&&!v.e&&v.c.length==1||!w.c||!w.c[0])return h=new R(Math.pow(+Z(v),s?w.s*(2-Fe(w)):+Z(w))),b?h.mod(b):h;if(u=w.s<0,b){if(b.c?!b.c[0]:!b.s)return new R(NaN);x=!u&&v.isInteger()&&b.isInteger(),x&&(v=v.mod(b))}else{if(w.e>9&&(v.e>0||v.e<-1||(v.e==0?v.c[0]>1||s&&v.c[1]>=24e7:v.c[0]<8e13||s&&v.c[0]<=9999975e7)))return p=v.s<0&&Fe(w)?-0:0,v.e>-1&&(p=1/p),new R(u?1/p:p);O&&(p=Pi(O/Q+2))}for(s?(k=new R(.5),u&&(w.s=1),f=Fe(w)):(C=Math.abs(+Z(w)),f=C%2),h=new R(a);;){if(f){if(h=h.times(v),!h.c)break;p?h.c.length>p&&(h.c.length=p):x&&(h=h.mod(b))}if(C){if(C=ne(C/2),C===0)break;f=C%2}else if(w=w.times(k),j(w,w.e+1,1),w.e>14)f=Fe(w);else{if(C=+Z(w),C===0)break;f=C%2}v=v.times(v),p?v.c&&v.c.length>p&&(v.c.length=p):x&&(v=v.mod(b))}return x?h:(u&&(h=a.div(h)),b?h.mod(b):p?j(h,O,c,t):h)},e.integerValue=function(w){var b=new R(this);return w==null?w=c:dt(w,0,8),j(b,b.e+1,w)},e.isEqualTo=e.eq=function(w,b){return ye(this,new R(w,b))===0},e.isFinite=function(){return!!this.c},e.isGreaterThan=e.gt=function(w,b){return ye(this,new R(w,b))>0},e.isGreaterThanOrEqualTo=e.gte=function(w,b){return(b=ye(this,new R(w,b)))===1||b===0},e.isInteger=function(){return!!this.c&&oe(this.e/Q)>this.c.length-2},e.isLessThan=e.lt=function(w,b){return ye(this,new R(w,b))<0},e.isLessThanOrEqualTo=e.lte=function(w,b){return(b=ye(this,new R(w,b)))===-1||b===0},e.isNaN=function(){return!this.s},e.isNegative=function(){return this.s<0},e.isPositive=function(){return this.s>0},e.isZero=function(){return!!this.c&&this.c[0]==0},e.minus=function(w,b){var k,x,C,p,t=this,s=t.s;if(w=new R(w,b),b=w.s,!s||!b)return new R(NaN);if(s!=b)return w.s=-b,t.plus(w);var u=t.e/Q,f=w.e/Q,h=t.c,v=w.c;if(!u||!f){if(!h||!v)return h?(w.s=-b,w):new R(v?t:NaN);if(!h[0]||!v[0])return v[0]?(w.s=-b,w):new R(h[0]?t:c==3?-0:0)}if(u=oe(u),f=oe(f),h=h.slice(),s=u-f){for((p=s<0)?(s=-s,C=h):(f=u,C=v),C.reverse(),b=s;b--;C.push(0));C.reverse()}else for(x=(p=(s=h.length)<(b=v.length))?s:b,s=b=0;b<x;b++)if(h[b]!=v[b]){p=h[b]<v[b];break}if(p&&(C=h,h=v,v=C,w.s=-w.s),b=(x=v.length)-(k=h.length),b>0)for(;b--;h[k++]=0);for(b=le-1;x>s;){if(h[--x]<v[x]){for(k=x;k&&!h[--k];h[k]=b);--h[k],h[x]+=le}h[x]-=v[x]}for(;h[0]==0;h.splice(0,1),--f);return h[0]?W(w,h,f):(w.s=c==3?-1:1,w.c=[w.e=0],w)},e.modulo=e.mod=function(w,b){var k,x,C=this;return w=new R(w,b),!C.c||!w.s||w.c&&!w.c[0]?new R(NaN):!w.c||C.c&&!C.c[0]?new R(C):(T==9?(x=w.s,w.s=1,k=r(C,w,0,3),w.s=x,k.s*=x):k=r(C,w,0,T),w=C.minus(k.times(w)),!w.c[0]&&T==1&&(w.s=C.s),w)},e.multipliedBy=e.times=function(w,b){var k,x,C,p,t,s,u,f,h,v,P,_,l,y,U,B=this,$=B.c,K=(w=new R(w,b)).c;if(!$||!K||!$[0]||!K[0])return!B.s||!w.s||$&&!$[0]&&!K||K&&!K[0]&&!$?w.c=w.e=w.s=null:(w.s*=B.s,!$||!K?w.c=w.e=null:(w.c=[0],w.e=0)),w;for(x=oe(B.e/Q)+oe(w.e/Q),w.s*=B.s,u=$.length,v=K.length,u<v&&(l=$,$=K,K=l,C=u,u=v,v=C),C=u+v,l=[];C--;l.push(0));for(y=le,U=ge,C=v;--C>=0;){for(k=0,P=K[C]%U,_=K[C]/U|0,t=u,p=C+t;p>C;)f=$[--t]%U,h=$[t]/U|0,s=_*f+h*P,f=P*f+s%U*U+l[p]+k,k=(f/y|0)+(s/U|0)+_*h,l[p--]=f%y;l[p]=k}return k?++x:l.splice(0,1),W(w,l,x)},e.negated=function(){var w=new R(this);return w.s=-w.s||null,w},e.plus=function(w,b){var k,x=this,C=x.s;if(w=new R(w,b),b=w.s,!C||!b)return new R(NaN);if(C!=b)return w.s=-b,x.minus(w);var p=x.e/Q,t=w.e/Q,s=x.c,u=w.c;if(!p||!t){if(!s||!u)return new R(C/0);if(!s[0]||!u[0])return u[0]?w:new R(s[0]?x:C*0)}if(p=oe(p),t=oe(t),s=s.slice(),C=p-t){for(C>0?(t=p,k=u):(C=-C,k=s),k.reverse();C--;k.push(0));k.reverse()}for(C=s.length,b=u.length,C-b<0&&(k=u,u=s,s=k,b=C),C=0;b;)C=(s[--b]=s[b]+u[b]+C)/le|0,s[b]=le===s[b]?0:s[b]%le;return C&&(s=[C].concat(s),++t),W(w,s,t)},e.precision=e.sd=function(w,b){var k,x,C,p=this;if(w!=null&&w!==!!w)return dt(w,1,zt),b==null?b=c:dt(b,0,8),j(new R(p),w,b);if(!(k=p.c))return null;if(C=k.length-1,x=C*Q+1,C=k[C]){for(;C%10==0;C/=10,x--);for(C=k[0];C>=10;C/=10,x++);}return w&&p.e+1>x&&(x=p.e+1),x},e.shiftedBy=function(w){return dt(w,-Ai,Ai),this.times("1e"+w)},e.squareRoot=e.sqrt=function(){var w,b,k,x,C,p=this,t=p.c,s=p.s,u=p.e,f=d+4,h=new R("0.5");if(s!==1||!t||!t[0])return new R(!s||s<0&&(!t||t[0])?NaN:t?p:1/0);if(s=Math.sqrt(+Z(p)),s==0||s==1/0?(b=re(t),(b.length+u)%2==0&&(b+="0"),s=Math.sqrt(+b),u=oe((u+1)/2)-(u<0||u%2),s==1/0?b="5e"+u:(b=s.toExponential(),b=b.slice(0,b.indexOf("e")+1)+u),k=new R(b)):k=new R(s+""),k.c[0]){for(u=k.e,s=u+f,s<3&&(s=0);;)if(C=k,k=h.times(C.plus(r(p,C,f,1))),re(C.c).slice(0,s)===(b=re(k.c)).slice(0,s))if(k.e<u&&--s,b=b.slice(s-3,s+1),b=="9999"||!x&&b=="4999"){if(!x&&(j(C,C.e+d+2,0),C.times(C).eq(p))){k=C;break}f+=4,s+=4,x=1}else{(!+b||!+b.slice(1)&&b.charAt(0)=="5")&&(j(k,k.e+d+2,1),w=!k.times(k).eq(p));break}}return j(k,k.e+d+1,c,w)},e.toExponential=function(w,b){return w!=null&&(dt(w,0,zt),w++),F(this,w,b,1)},e.toFixed=function(w,b){return w!=null&&(dt(w,0,zt),w=w+this.e+1),F(this,w,b)},e.toFormat=function(w,b,k){var x,C=this;if(k==null)w!=null&&b&&typeof b=="object"?(k=b,b=null):w&&typeof w=="object"?(k=w,w=b=null):k=L;else if(typeof k!="object")throw Error(te+"Argument not an object: "+k);if(x=C.toFixed(w,b),C.c){var p,t=x.split("."),s=+k.groupSize,u=+k.secondaryGroupSize,f=k.groupSeparator||"",h=t[0],v=t[1],P=C.s<0,_=P?h.slice(1):h,l=_.length;if(u&&(p=s,s=u,u=p,l-=p),s>0&&l>0){for(p=l%s||s,h=_.substr(0,p);p<l;p+=s)h+=f+_.substr(p,s);u>0&&(h+=f+_.slice(p)),P&&(h="-"+h)}x=v?h+(k.decimalSeparator||"")+((u=+k.fractionGroupSize)?v.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(k.fractionGroupSeparator||"")):v):h}return(k.prefix||"")+x+(k.suffix||"")},e.toFraction=function(w){var b,k,x,C,p,t,s,u,f,h,v,P,_=this,l=_.c;if(w!=null&&(s=new R(w),!s.isInteger()&&(s.c||s.s!==1)||s.lt(a)))throw Error(te+"Argument "+(s.isInteger()?"out of range: ":"not an integer: ")+Z(s));if(!l)return new R(_);for(b=new R(a),f=k=new R(a),x=u=new R(a),P=re(l),p=b.e=P.length-_.e-1,b.c[0]=Ci[(t=p%Q)<0?Q+t:t],w=!w||s.comparedTo(b)>0?p>0?b:f:s,t=S,S=1/0,s=new R(P),u.c[0]=0;h=r(s,b,0,1),C=k.plus(h.times(x)),C.comparedTo(w)!=1;)k=x,x=C,f=u.plus(h.times(C=f)),u=C,b=s.minus(h.times(C=b)),s=C;return C=r(w.minus(k),x,0,1),u=u.plus(C.times(f)),k=k.plus(C.times(x)),u.s=f.s=_.s,p=p*2,v=r(f,x,p,c).minus(_).abs().comparedTo(r(u,k,p,c).minus(_).abs())<1?[f,x]:[u,k],S=t,v},e.toNumber=function(){return+Z(this)},e.toPrecision=function(w,b){return w!=null&&dt(w,1,zt),F(this,w,b,2)},e.toString=function(w){var b,k=this,x=k.s,C=k.e;return C===null?x?(b="Infinity",x<0&&(b="-"+b)):b="NaN":(w==null?b=C<=g||C>=m?Ue(re(k.c),C):he(re(k.c),C,"0"):w===10&&N?(k=j(new R(k),d+C+1,c),b=he(re(k.c),k.e,"0")):(dt(w,2,I.length,"Base"),b=i(he(re(k.c),C,"0"),10,w,x,!0)),x<0&&k.c[0]&&(b="-"+b)),b},e.valueOf=e.toJSON=function(){return Z(this)},e._isBigNumber=!0,e[Symbol.toStringTag]="BigNumber",e[Symbol.for("nodejs.util.inspect.custom")]=e.valueOf,n!=null&&R.set(n),R}function oe(n){var r=n|0;return n>0||n===r?r:r-1}function re(n){for(var r,i,o=1,e=n.length,a=n[0]+"";o<e;){for(r=n[o++]+"",i=Q-r.length;i--;r="0"+r);a+=r}for(e=a.length;a.charCodeAt(--e)===48;);return a.slice(0,e+1||1)}function ye(n,r){var i,o,e=n.c,a=r.c,d=n.s,c=r.s,g=n.e,m=r.e;if(!d||!c)return null;if(i=e&&!e[0],o=a&&!a[0],i||o)return i?o?0:-c:d;if(d!=c)return d;if(i=d<0,o=g==m,!e||!a)return o?0:!e^i?1:-1;if(!o)return g>m^i?1:-1;for(c=(g=e.length)<(m=a.length)?g:m,d=0;d<c;d++)if(e[d]!=a[d])return e[d]>a[d]^i?1:-1;return g==m?0:g>m^i?1:-1}function dt(n,r,i,o){if(n<r||n>i||n!==ne(n))throw Error(te+(o||"Argument")+(typeof n=="number"?n<r||n>i?" out of range: ":" not an integer: ":" not a primitive number: ")+String(n))}function Fe(n){var r=n.c.length-1;return oe(n.e/Q)==r&&n.c[r]%2!=0}function Ue(n,r){return(n.length>1?n.charAt(0)+"."+n.slice(1):n)+(r<0?"e":"e+")+r}function he(n,r,i){var o,e;if(r<0){for(e=i+".";++r;e+=i);n=e+n}else if(o=n.length,++r>o){for(e=i,r-=o;--r;e+=i);n+=e}else r<o&&(n=n.slice(0,r)+"."+n.slice(r));return n}var Wr=or(),ft=Wr;var se=require("@mysten/sui/transactions");var ke=9e15,Me=1e9,xi="0123456789abcdef",We="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ze="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ti={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-ke,maxE:ke,crypto:!1},ur,pe,Y=!0,ze="[DecimalError] ",ve=ze+"Invalid argument: ",cr=ze+"Precision limit exceeded",fr=ze+"crypto unavailable",dr="[object Decimal]",Xt=Math.floor,Zt=Math.pow,Zr=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Kr=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,zr=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,hr=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ue=1e7,H=7,Gr=9007199254740991,Hr=We.length-1,Di=Ze.length-1,E={toStringTag:dr};E.absoluteValue=E.abs=function(){var n=new this.constructor(this);return n.s<0&&(n.s=1),z(n)};E.ceil=function(){return z(new this.constructor(this),this.e+1,2)};E.clampedTo=E.clamp=function(n,r){var i,o=this,e=o.constructor;if(n=new e(n),r=new e(r),!n.s||!r.s)return new e(NaN);if(n.gt(r))throw Error(ve+r);return i=o.cmp(n),i<0?n:o.cmp(r)>0?r:new e(o)};E.comparedTo=E.cmp=function(n){var r,i,o,e,a=this,d=a.d,c=(n=new a.constructor(n)).d,g=a.s,m=n.s;if(!d||!c)return!g||!m?NaN:g!==m?g:d===c?0:!d^g<0?1:-1;if(!d[0]||!c[0])return d[0]?g:c[0]?-m:0;if(g!==m)return g;if(a.e!==n.e)return a.e>n.e^g<0?1:-1;for(o=d.length,e=c.length,r=0,i=o<e?o:e;r<i;++r)if(d[r]!==c[r])return d[r]>c[r]^g<0?1:-1;return o===e?0:o>e^g<0?1:-1};E.cosine=E.cos=function(){var n,r,i=this,o=i.constructor;return i.d?i.d[0]?(n=o.precision,r=o.rounding,o.precision=n+Math.max(i.e,i.sd())+H,o.rounding=1,i=Vr(o,wr(o,i)),o.precision=n,o.rounding=r,z(pe==2||pe==3?i.neg():i,n,r,!0)):new o(1):new o(NaN)};E.cubeRoot=E.cbrt=function(){var n,r,i,o,e,a,d,c,g,m,M=this,S=M.constructor;if(!M.isFinite()||M.isZero())return new S(M);for(Y=!1,a=M.s*Zt(M.s*M,1/3),!a||Math.abs(a)==1/0?(i=Ht(M.d),n=M.e,(a=(n-i.length+1)%3)&&(i+=a==1||a==-2?"0":"00"),a=Zt(i,1/3),n=Xt((n+1)/3)-(n%3==(n<0?-1:2)),a==1/0?i="5e"+n:(i=a.toExponential(),i=i.slice(0,i.indexOf("e")+1)+n),o=new S(i),o.s=M.s):o=new S(a.toString()),d=(n=S.precision)+3;;)if(c=o,g=c.times(c).times(c),m=g.plus(M),o=ot(m.plus(M).times(c),m.plus(g),d+2,1),Ht(c.d).slice(0,d)===(i=Ht(o.d)).slice(0,d))if(i=i.slice(d-3,d+1),i=="9999"||!e&&i=="4999"){if(!e&&(z(c,n+1,0),c.times(c).times(c).eq(M))){o=c;break}d+=4,e=1}else{(!+i||!+i.slice(1)&&i.charAt(0)=="5")&&(z(o,n+1,1),r=!o.times(o).times(o).eq(M));break}return Y=!0,z(o,n,S.rounding,r)};E.decimalPlaces=E.dp=function(){var n,r=this.d,i=NaN;if(r){if(n=r.length-1,i=(n-Xt(this.e/H))*H,n=r[n],n)for(;n%10==0;n/=10)i--;i<0&&(i=0)}return i};E.dividedBy=E.div=function(n){return ot(this,new this.constructor(n))};E.dividedToIntegerBy=E.divToInt=function(n){var r=this,i=r.constructor;return z(ot(r,new i(n),0,1,1),i.precision,i.rounding)};E.equals=E.eq=function(n){return this.cmp(n)===0};E.floor=function(){return z(new this.constructor(this),this.e+1,3)};E.greaterThan=E.gt=function(n){return this.cmp(n)>0};E.greaterThanOrEqualTo=E.gte=function(n){var r=this.cmp(n);return r==1||r===0};E.hyperbolicCosine=E.cosh=function(){var n,r,i,o,e,a=this,d=a.constructor,c=new d(1);if(!a.isFinite())return new d(a.s?1/0:NaN);if(a.isZero())return c;i=d.precision,o=d.rounding,d.precision=i+Math.max(a.e,a.sd())+4,d.rounding=1,e=a.d.length,e<32?(n=Math.ceil(e/3),r=(1/He(4,n)).toString()):(n=16,r="2.3283064365386962890625e-10"),a=Se(d,1,a.times(r),new d(1),!0);for(var g,m=n,M=new d(8);m--;)g=a.times(a),a=c.minus(g.times(M.minus(g.times(M))));return z(a,d.precision=i,d.rounding=o,!0)};E.hyperbolicSine=E.sinh=function(){var n,r,i,o,e=this,a=e.constructor;if(!e.isFinite()||e.isZero())return new a(e);if(r=a.precision,i=a.rounding,a.precision=r+Math.max(e.e,e.sd())+4,a.rounding=1,o=e.d.length,o<3)e=Se(a,2,e,e,!0);else{n=1.4*Math.sqrt(o),n=n>16?16:n|0,e=e.times(1/He(5,n)),e=Se(a,2,e,e,!0);for(var d,c=new a(5),g=new a(16),m=new a(20);n--;)d=e.times(e),e=e.times(c.plus(d.times(g.times(d).plus(m))))}return a.precision=r,a.rounding=i,z(e,r,i,!0)};E.hyperbolicTangent=E.tanh=function(){var n,r,i=this,o=i.constructor;return i.isFinite()?i.isZero()?new o(i):(n=o.precision,r=o.rounding,o.precision=n+7,o.rounding=1,ot(i.sinh(),i.cosh(),o.precision=n,o.rounding=r)):new o(i.s)};E.inverseCosine=E.acos=function(){var n=this,r=n.constructor,i=n.abs().cmp(1),o=r.precision,e=r.rounding;return i!==-1?i===0?n.isNeg()?ce(r,o,e):new r(0):new r(NaN):n.isZero()?ce(r,o+4,e).times(.5):(r.precision=o+6,r.rounding=1,n=new r(1).minus(n).div(n.plus(1)).sqrt().atan(),r.precision=o,r.rounding=e,n.times(2))};E.inverseHyperbolicCosine=E.acosh=function(){var n,r,i=this,o=i.constructor;return i.lte(1)?new o(i.eq(1)?0:NaN):i.isFinite()?(n=o.precision,r=o.rounding,o.precision=n+Math.max(Math.abs(i.e),i.sd())+4,o.rounding=1,Y=!1,i=i.times(i).minus(1).sqrt().plus(i),Y=!0,o.precision=n,o.rounding=r,i.ln()):new o(i)};E.inverseHyperbolicSine=E.asinh=function(){var n,r,i=this,o=i.constructor;return!i.isFinite()||i.isZero()?new o(i):(n=o.precision,r=o.rounding,o.precision=n+2*Math.max(Math.abs(i.e),i.sd())+6,o.rounding=1,Y=!1,i=i.times(i).plus(1).sqrt().plus(i),Y=!0,o.precision=n,o.rounding=r,i.ln())};E.inverseHyperbolicTangent=E.atanh=function(){var n,r,i,o,e=this,a=e.constructor;return e.isFinite()?e.e>=0?new a(e.abs().eq(1)?e.s/0:e.isZero()?e:NaN):(n=a.precision,r=a.rounding,o=e.sd(),Math.max(o,n)<2*-e.e-1?z(new a(e),n,r,!0):(a.precision=i=o-e.e,e=ot(e.plus(1),new a(1).minus(e),i+n,1),a.precision=n+4,a.rounding=1,e=e.ln(),a.precision=n,a.rounding=r,e.times(.5))):new a(NaN)};E.inverseSine=E.asin=function(){var n,r,i,o,e=this,a=e.constructor;return e.isZero()?new a(e):(r=e.abs().cmp(1),i=a.precision,o=a.rounding,r!==-1?r===0?(n=ce(a,i+4,o).times(.5),n.s=e.s,n):new a(NaN):(a.precision=i+6,a.rounding=1,e=e.div(new a(1).minus(e.times(e)).sqrt().plus(1)).atan(),a.precision=i,a.rounding=o,e.times(2)))};E.inverseTangent=E.atan=function(){var n,r,i,o,e,a,d,c,g,m=this,M=m.constructor,S=M.precision,A=M.rounding;if(m.isFinite()){if(m.isZero())return new M(m);if(m.abs().eq(1)&&S+4<=Di)return d=ce(M,S+4,A).times(.25),d.s=m.s,d}else{if(!m.s)return new M(NaN);if(S+4<=Di)return d=ce(M,S+4,A).times(.5),d.s=m.s,d}for(M.precision=c=S+10,M.rounding=1,i=Math.min(28,c/H+2|0),n=i;n;--n)m=m.div(m.times(m).plus(1).sqrt().plus(1));for(Y=!1,r=Math.ceil(c/H),o=1,g=m.times(m),d=new M(m),e=m;n!==-1;)if(e=e.times(g),a=d.minus(e.div(o+=2)),e=e.times(g),d=a.plus(e.div(o+=2)),d.d[r]!==void 0)for(n=r;d.d[n]===a.d[n]&&n--;);return i&&(d=d.times(2<<i-1)),Y=!0,z(d,M.precision=S,M.rounding=A,!0)};E.isFinite=function(){return!!this.d};E.isInteger=E.isInt=function(){return!!this.d&&Xt(this.e/H)>this.d.length-2};E.isNaN=function(){return!this.s};E.isNegative=E.isNeg=function(){return this.s<0};E.isPositive=E.isPos=function(){return this.s>0};E.isZero=function(){return!!this.d&&this.d[0]===0};E.lessThan=E.lt=function(n){return this.cmp(n)<0};E.lessThanOrEqualTo=E.lte=function(n){return this.cmp(n)<1};E.logarithm=E.log=function(n){var r,i,o,e,a,d,c,g,m=this,M=m.constructor,S=M.precision,A=M.rounding,T=5;if(n==null)n=new M(10),r=!0;else{if(n=new M(n),i=n.d,n.s<0||!i||!i[0]||n.eq(1))return new M(NaN);r=n.eq(10)}if(i=m.d,m.s<0||!i||!i[0]||m.eq(1))return new M(i&&!i[0]?-1/0:m.s!=1?NaN:i?0:1/0);if(r)if(i.length>1)a=!0;else{for(e=i[0];e%10===0;)e/=10;a=e!==1}if(Y=!1,c=S+T,d=we(m,c),o=r?Ke(M,c+10):we(n,c),g=ot(d,o,c,1),Ae(g.d,e=S,A))do if(c+=10,d=we(m,c),o=r?Ke(M,c+10):we(n,c),g=ot(d,o,c,1),!a){+Ht(g.d).slice(e+1,e+15)+1==1e14&&(g=z(g,S+1,0));break}while(Ae(g.d,e+=10,A));return Y=!0,z(g,S,A)};E.minus=E.sub=function(n){var r,i,o,e,a,d,c,g,m,M,S,A,T=this,O=T.constructor;if(n=new O(n),!T.d||!n.d)return!T.s||!n.s?n=new O(NaN):T.d?n.s=-n.s:n=new O(n.d||T.s!==n.s?T:NaN),n;if(T.s!=n.s)return n.s=-n.s,T.plus(n);if(m=T.d,A=n.d,c=O.precision,g=O.rounding,!m[0]||!A[0]){if(A[0])n.s=-n.s;else if(m[0])n=new O(T);else return new O(g===3?-0:0);return Y?z(n,c,g):n}if(i=Xt(n.e/H),M=Xt(T.e/H),m=m.slice(),a=M-i,a){for(S=a<0,S?(r=m,a=-a,d=A.length):(r=A,i=M,d=m.length),o=Math.max(Math.ceil(c/H),d)+2,a>o&&(a=o,r.length=1),r.reverse(),o=a;o--;)r.push(0);r.reverse()}else{for(o=m.length,d=A.length,S=o<d,S&&(d=o),o=0;o<d;o++)if(m[o]!=A[o]){S=m[o]<A[o];break}a=0}for(S&&(r=m,m=A,A=r,n.s=-n.s),d=m.length,o=A.length-d;o>0;--o)m[d++]=0;for(o=A.length;o>a;){if(m[--o]<A[o]){for(e=o;e&&m[--e]===0;)m[e]=ue-1;--m[e],m[o]+=ue}m[o]-=A[o]}for(;m[--d]===0;)m.pop();for(;m[0]===0;m.shift())--i;return m[0]?(n.d=m,n.e=Ge(m,i),Y?z(n,c,g):n):new O(g===3?-0:0)};E.modulo=E.mod=function(n){var r,i=this,o=i.constructor;return n=new o(n),!i.d||!n.s||n.d&&!n.d[0]?new o(NaN):!n.d||i.d&&!i.d[0]?z(new o(i),o.precision,o.rounding):(Y=!1,o.modulo==9?(r=ot(i,n.abs(),0,3,1),r.s*=n.s):r=ot(i,n,0,o.modulo,1),r=r.times(n),Y=!0,i.minus(r))};E.naturalExponential=E.exp=function(){return Oi(this)};E.naturalLogarithm=E.ln=function(){return we(this)};E.negated=E.neg=function(){var n=new this.constructor(this);return n.s=-n.s,z(n)};E.plus=E.add=function(n){var r,i,o,e,a,d,c,g,m,M,S=this,A=S.constructor;if(n=new A(n),!S.d||!n.d)return!S.s||!n.s?n=new A(NaN):S.d||(n=new A(n.d||S.s===n.s?S:NaN)),n;if(S.s!=n.s)return n.s=-n.s,S.minus(n);if(m=S.d,M=n.d,c=A.precision,g=A.rounding,!m[0]||!M[0])return M[0]||(n=new A(S)),Y?z(n,c,g):n;if(a=Xt(S.e/H),o=Xt(n.e/H),m=m.slice(),e=a-o,e){for(e<0?(i=m,e=-e,d=M.length):(i=M,o=a,d=m.length),a=Math.ceil(c/H),d=a>d?a+1:d+1,e>d&&(e=d,i.length=1),i.reverse();e--;)i.push(0);i.reverse()}for(d=m.length,e=M.length,d-e<0&&(e=d,i=M,M=m,m=i),r=0;e;)r=(m[--e]=m[e]+M[e]+r)/ue|0,m[e]%=ue;for(r&&(m.unshift(r),++o),d=m.length;m[--d]==0;)m.pop();return n.d=m,n.e=Ge(m,o),Y?z(n,c,g):n};E.precision=E.sd=function(n){var r,i=this;if(n!==void 0&&n!==!!n&&n!==1&&n!==0)throw Error(ve+n);return i.d?(r=pr(i.d),n&&i.e+1>r&&(r=i.e+1)):r=NaN,r};E.round=function(){var n=this,r=n.constructor;return z(new r(n),n.e+1,r.rounding)};E.sine=E.sin=function(){var n,r,i=this,o=i.constructor;return i.isFinite()?i.isZero()?new o(i):(n=o.precision,r=o.rounding,o.precision=n+Math.max(i.e,i.sd())+H,o.rounding=1,i=Jr(o,wr(o,i)),o.precision=n,o.rounding=r,z(pe>2?i.neg():i,n,r,!0)):new o(NaN)};E.squareRoot=E.sqrt=function(){var n,r,i,o,e,a,d=this,c=d.d,g=d.e,m=d.s,M=d.constructor;if(m!==1||!c||!c[0])return new M(!m||m<0&&(!c||c[0])?NaN:c?d:1/0);for(Y=!1,m=Math.sqrt(+d),m==0||m==1/0?(r=Ht(c),(r.length+g)%2==0&&(r+="0"),m=Math.sqrt(r),g=Xt((g+1)/2)-(g<0||g%2),m==1/0?r="5e"+g:(r=m.toExponential(),r=r.slice(0,r.indexOf("e")+1)+g),o=new M(r)):o=new M(m.toString()),i=(g=M.precision)+3;;)if(a=o,o=a.plus(ot(d,a,i+2,1)).times(.5),Ht(a.d).slice(0,i)===(r=Ht(o.d)).slice(0,i))if(r=r.slice(i-3,i+1),r=="9999"||!e&&r=="4999"){if(!e&&(z(a,g+1,0),a.times(a).eq(d))){o=a;break}i+=4,e=1}else{(!+r||!+r.slice(1)&&r.charAt(0)=="5")&&(z(o,g+1,1),n=!o.times(o).eq(d));break}return Y=!0,z(o,g,M.rounding,n)};E.tangent=E.tan=function(){var n,r,i=this,o=i.constructor;return i.isFinite()?i.isZero()?new o(i):(n=o.precision,r=o.rounding,o.precision=n+10,o.rounding=1,i=i.sin(),i.s=1,i=ot(i,new o(1).minus(i.times(i)).sqrt(),n+10,0),o.precision=n,o.rounding=r,z(pe==2||pe==4?i.neg():i,n,r,!0)):new o(NaN)};E.times=E.mul=function(n){var r,i,o,e,a,d,c,g,m,M=this,S=M.constructor,A=M.d,T=(n=new S(n)).d;if(n.s*=M.s,!A||!A[0]||!T||!T[0])return new S(!n.s||A&&!A[0]&&!T||T&&!T[0]&&!A?NaN:!A||!T?n.s/0:n.s*0);for(i=Xt(M.e/H)+Xt(n.e/H),g=A.length,m=T.length,g<m&&(a=A,A=T,T=a,d=g,g=m,m=d),a=[],d=g+m,o=d;o--;)a.push(0);for(o=m;--o>=0;){for(r=0,e=g+o;e>o;)c=a[e]+T[o]*A[e-o-1]+r,a[e--]=c%ue|0,r=c/ue|0;a[e]=(a[e]+r)%ue|0}for(;!a[--d];)a.pop();return r?++i:a.shift(),n.d=a,n.e=Ge(a,i),Y?z(n,S.precision,S.rounding):n};E.toBinary=function(n,r){return Ri(this,2,n,r)};E.toDecimalPlaces=E.toDP=function(n,r){var i=this,o=i.constructor;return i=new o(i),n===void 0?i:(ee(n,0,Me),r===void 0?r=o.rounding:ee(r,0,8),z(i,n+i.e+1,r))};E.toExponential=function(n,r){var i,o=this,e=o.constructor;return n===void 0?i=fe(o,!0):(ee(n,0,Me),r===void 0?r=e.rounding:ee(r,0,8),o=z(new e(o),n+1,r),i=fe(o,!0,n+1)),o.isNeg()&&!o.isZero()?"-"+i:i};E.toFixed=function(n,r){var i,o,e=this,a=e.constructor;return n===void 0?i=fe(e):(ee(n,0,Me),r===void 0?r=a.rounding:ee(r,0,8),o=z(new a(e),n+e.e+1,r),i=fe(o,!1,n+o.e+1)),e.isNeg()&&!e.isZero()?"-"+i:i};E.toFraction=function(n){var r,i,o,e,a,d,c,g,m,M,S,A,T=this,O=T.d,L=T.constructor;if(!O)return new L(T);if(m=i=new L(1),o=g=new L(0),r=new L(o),a=r.e=pr(O)-T.e-1,d=a%H,r.d[0]=Zt(10,d<0?H+d:d),n==null)n=a>0?r:m;else{if(c=new L(n),!c.isInt()||c.lt(m))throw Error(ve+c);n=c.gt(r)?a>0?r:m:c}for(Y=!1,c=new L(Ht(O)),M=L.precision,L.precision=a=O.length*H*2;S=ot(c,r,0,1,1),e=i.plus(S.times(o)),e.cmp(n)!=1;)i=o,o=e,e=m,m=g.plus(S.times(e)),g=e,e=r,r=c.minus(S.times(e)),c=e;return e=ot(n.minus(i),o,0,1,1),g=g.plus(e.times(m)),i=i.plus(e.times(o)),g.s=m.s=T.s,A=ot(m,o,a,1).minus(T).abs().cmp(ot(g,i,a,1).minus(T).abs())<1?[m,o]:[g,i],L.precision=M,Y=!0,A};E.toHexadecimal=E.toHex=function(n,r){return Ri(this,16,n,r)};E.toNearest=function(n,r){var i=this,o=i.constructor;if(i=new o(i),n==null){if(!i.d)return i;n=new o(1),r=o.rounding}else{if(n=new o(n),r===void 0?r=o.rounding:ee(r,0,8),!i.d)return n.s?i:n;if(!n.d)return n.s&&(n.s=i.s),n}return n.d[0]?(Y=!1,i=ot(i,n,0,r,1).times(n),Y=!0,z(i)):(n.s=i.s,i=n),i};E.toNumber=function(){return+this};E.toOctal=function(n,r){return Ri(this,8,n,r)};E.toPower=E.pow=function(n){var r,i,o,e,a,d,c=this,g=c.constructor,m=+(n=new g(n));if(!c.d||!n.d||!c.d[0]||!n.d[0])return new g(Zt(+c,m));if(c=new g(c),c.eq(1))return c;if(o=g.precision,a=g.rounding,n.eq(1))return z(c,o,a);if(r=Xt(n.e/H),r>=n.d.length-1&&(i=m<0?-m:m)<=Gr)return e=mr(g,c,i,o),n.s<0?new g(1).div(e):z(e,o,a);if(d=c.s,d<0){if(r<n.d.length-1)return new g(NaN);if((n.d[r]&1)==0&&(d=1),c.e==0&&c.d[0]==1&&c.d.length==1)return c.s=d,c}return i=Zt(+c,m),r=i==0||!isFinite(i)?Xt(m*(Math.log("0."+Ht(c.d))/Math.LN10+c.e+1)):new g(i+"").e,r>g.maxE+1||r<g.minE-1?new g(r>0?d/0:0):(Y=!1,g.rounding=c.s=1,i=Math.min(12,(r+"").length),e=Oi(n.times(we(c,o+i)),o),e.d&&(e=z(e,o+5,1),Ae(e.d,o,a)&&(r=o+10,e=z(Oi(n.times(we(c,r+i)),r),r+5,1),+Ht(e.d).slice(o+1,o+15)+1==1e14&&(e=z(e,o+1,0)))),e.s=d,Y=!0,g.rounding=a,z(e,o,a))};E.toPrecision=function(n,r){var i,o=this,e=o.constructor;return n===void 0?i=fe(o,o.e<=e.toExpNeg||o.e>=e.toExpPos):(ee(n,1,Me),r===void 0?r=e.rounding:ee(r,0,8),o=z(new e(o),n,r),i=fe(o,n<=o.e||o.e<=e.toExpNeg,n)),o.isNeg()&&!o.isZero()?"-"+i:i};E.toSignificantDigits=E.toSD=function(n,r){var i=this,o=i.constructor;return n===void 0?(n=o.precision,r=o.rounding):(ee(n,1,Me),r===void 0?r=o.rounding:ee(r,0,8)),z(new o(i),n,r)};E.toString=function(){var n=this,r=n.constructor,i=fe(n,n.e<=r.toExpNeg||n.e>=r.toExpPos);return n.isNeg()&&!n.isZero()?"-"+i:i};E.truncated=E.trunc=function(){return z(new this.constructor(this),this.e+1,1)};E.valueOf=E.toJSON=function(){var n=this,r=n.constructor,i=fe(n,n.e<=r.toExpNeg||n.e>=r.toExpPos);return n.isNeg()?"-"+i:i};function Ht(n){var r,i,o,e=n.length-1,a="",d=n[0];if(e>0){for(a+=d,r=1;r<e;r++)o=n[r]+"",i=H-o.length,i&&(a+=_e(i)),a+=o;d=n[r],o=d+"",i=H-o.length,i&&(a+=_e(i))}else if(d===0)return"0";for(;d%10===0;)d/=10;return a+d}function ee(n,r,i){if(n!==~~n||n<r||n>i)throw Error(ve+n)}function Ae(n,r,i,o){var e,a,d,c;for(a=n[0];a>=10;a/=10)--r;return--r<0?(r+=H,e=0):(e=Math.ceil((r+1)/H),r%=H),a=Zt(10,H-r),c=n[e]%a|0,o==null?r<3?(r==0?c=c/100|0:r==1&&(c=c/10|0),d=i<4&&c==99999||i>3&&c==49999||c==5e4||c==0):d=(i<4&&c+1==a||i>3&&c+1==a/2)&&(n[e+1]/a/100|0)==Zt(10,r-2)-1||(c==a/2||c==0)&&(n[e+1]/a/100|0)==0:r<4?(r==0?c=c/1e3|0:r==1?c=c/100|0:r==2&&(c=c/10|0),d=(o||i<4)&&c==9999||!o&&i>3&&c==4999):d=((o||i<4)&&c+1==a||!o&&i>3&&c+1==a/2)&&(n[e+1]/a/1e3|0)==Zt(10,r-3)-1,d}function je(n,r,i){for(var o,e=[0],a,d=0,c=n.length;d<c;){for(a=e.length;a--;)e[a]*=r;for(e[0]+=xi.indexOf(n.charAt(d++)),o=0;o<e.length;o++)e[o]>i-1&&(e[o+1]===void 0&&(e[o+1]=0),e[o+1]+=e[o]/i|0,e[o]%=i)}return e.reverse()}function Vr(n,r){var i,o,e;if(r.isZero())return r;o=r.d.length,o<32?(i=Math.ceil(o/3),e=(1/He(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),n.precision+=i,r=Se(n,1,r.times(e),new n(1));for(var a=i;a--;){var d=r.times(r);r=d.times(d).minus(d).times(8).plus(1)}return n.precision-=i,r}var ot=(function(){function n(o,e,a){var d,c=0,g=o.length;for(o=o.slice();g--;)d=o[g]*e+c,o[g]=d%a|0,c=d/a|0;return c&&o.unshift(c),o}function r(o,e,a,d){var c,g;if(a!=d)g=a>d?1:-1;else for(c=g=0;c<a;c++)if(o[c]!=e[c]){g=o[c]>e[c]?1:-1;break}return g}function i(o,e,a,d){for(var c=0;a--;)o[a]-=c,c=o[a]<e[a]?1:0,o[a]=c*d+o[a]-e[a];for(;!o[0]&&o.length>1;)o.shift()}return function(o,e,a,d,c,g){var m,M,S,A,T,O,L,I,N,R,F,q,W,j,Z,w,b,k,x,C,p=o.constructor,t=o.s==e.s?1:-1,s=o.d,u=e.d;if(!s||!s[0]||!u||!u[0])return new p(!o.s||!e.s||(s?u&&s[0]==u[0]:!u)?NaN:s&&s[0]==0||!u?t*0:t/0);for(g?(T=1,M=o.e-e.e):(g=ue,T=H,M=Xt(o.e/T)-Xt(e.e/T)),x=u.length,b=s.length,N=new p(t),R=N.d=[],S=0;u[S]==(s[S]||0);S++);if(u[S]>(s[S]||0)&&M--,a==null?(j=a=p.precision,d=p.rounding):c?j=a+(o.e-e.e)+1:j=a,j<0)R.push(1),O=!0;else{if(j=j/T+2|0,S=0,x==1){for(A=0,u=u[0],j++;(S<b||A)&&j--;S++)Z=A*g+(s[S]||0),R[S]=Z/u|0,A=Z%u|0;O=A||S<b}else{for(A=g/(u[0]+1)|0,A>1&&(u=n(u,A,g),s=n(s,A,g),x=u.length,b=s.length),w=x,F=s.slice(0,x),q=F.length;q<x;)F[q++]=0;C=u.slice(),C.unshift(0),k=u[0],u[1]>=g/2&&++k;do A=0,m=r(u,F,x,q),m<0?(W=F[0],x!=q&&(W=W*g+(F[1]||0)),A=W/k|0,A>1?(A>=g&&(A=g-1),L=n(u,A,g),I=L.length,q=F.length,m=r(L,F,I,q),m==1&&(A--,i(L,x<I?C:u,I,g))):(A==0&&(m=A=1),L=u.slice()),I=L.length,I<q&&L.unshift(0),i(F,L,q,g),m==-1&&(q=F.length,m=r(u,F,x,q),m<1&&(A++,i(F,x<q?C:u,q,g))),q=F.length):m===0&&(A++,F=[0]),R[S++]=A,m&&F[0]?F[q++]=s[w]||0:(F=[s[w]],q=1);while((w++<b||F[0]!==void 0)&&j--);O=F[0]!==void 0}R[0]||R.shift()}if(T==1)N.e=M,ur=O;else{for(S=1,A=R[0];A>=10;A/=10)S++;N.e=S+M*T-1,z(N,c?a+N.e+1:a,d,O)}return N}})();function z(n,r,i,o){var e,a,d,c,g,m,M,S,A,T=n.constructor;t:if(r!=null){if(S=n.d,!S)return n;for(e=1,c=S[0];c>=10;c/=10)e++;if(a=r-e,a<0)a+=H,d=r,M=S[A=0],g=M/Zt(10,e-d-1)%10|0;else if(A=Math.ceil((a+1)/H),c=S.length,A>=c)if(o){for(;c++<=A;)S.push(0);M=g=0,e=1,a%=H,d=a-H+1}else break t;else{for(M=c=S[A],e=1;c>=10;c/=10)e++;a%=H,d=a-H+e,g=d<0?0:M/Zt(10,e-d-1)%10|0}if(o=o||r<0||S[A+1]!==void 0||(d<0?M:M%Zt(10,e-d-1)),m=i<4?(g||o)&&(i==0||i==(n.s<0?3:2)):g>5||g==5&&(i==4||o||i==6&&(a>0?d>0?M/Zt(10,e-d):0:S[A-1])%10&1||i==(n.s<0?8:7)),r<1||!S[0])return S.length=0,m?(r-=n.e+1,S[0]=Zt(10,(H-r%H)%H),n.e=-r||0):S[0]=n.e=0,n;if(a==0?(S.length=A,c=1,A--):(S.length=A+1,c=Zt(10,H-a),S[A]=d>0?(M/Zt(10,e-d)%Zt(10,d)|0)*c:0),m)for(;;)if(A==0){for(a=1,d=S[0];d>=10;d/=10)a++;for(d=S[0]+=c,c=1;d>=10;d/=10)c++;a!=c&&(n.e++,S[0]==ue&&(S[0]=1));break}else{if(S[A]+=c,S[A]!=ue)break;S[A--]=0,c=1}for(a=S.length;S[--a]===0;)S.pop()}return Y&&(n.e>T.maxE?(n.d=null,n.e=NaN):n.e<T.minE&&(n.e=0,n.d=[0])),n}function fe(n,r,i){if(!n.isFinite())return _r(n);var o,e=n.e,a=Ht(n.d),d=a.length;return r?(i&&(o=i-d)>0?a=a.charAt(0)+"."+a.slice(1)+_e(o):d>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(n.e<0?"e":"e+")+n.e):e<0?(a="0."+_e(-e-1)+a,i&&(o=i-d)>0&&(a+=_e(o))):e>=d?(a+=_e(e+1-d),i&&(o=i-e-1)>0&&(a=a+"."+_e(o))):((o=e+1)<d&&(a=a.slice(0,o)+"."+a.slice(o)),i&&(o=i-d)>0&&(e+1===d&&(a+="."),a+=_e(o))),a}function Ge(n,r){var i=n[0];for(r*=H;i>=10;i/=10)r++;return r}function Ke(n,r,i){if(r>Hr)throw Y=!0,i&&(n.precision=i),Error(cr);return z(new n(We),r,1,!0)}function ce(n,r,i){if(r>Di)throw Error(cr);return z(new n(Ze),r,i,!0)}function pr(n){var r=n.length-1,i=r*H+1;if(r=n[r],r){for(;r%10==0;r/=10)i--;for(r=n[0];r>=10;r/=10)i++}return i}function _e(n){for(var r="";n--;)r+="0";return r}function mr(n,r,i,o){var e,a=new n(1),d=Math.ceil(o/H+4);for(Y=!1;;){if(i%2&&(a=a.times(r),ar(a.d,d)&&(e=!0)),i=Xt(i/2),i===0){i=a.d.length-1,e&&a.d[i]===0&&++a.d[i];break}r=r.times(r),ar(r.d,d)}return Y=!0,a}function sr(n){return n.d[n.d.length-1]&1}function gr(n,r,i){for(var o,e,a=new n(r[0]),d=0;++d<r.length;){if(e=new n(r[d]),!e.s){a=e;break}o=a.cmp(e),(o===i||o===0&&a.s===i)&&(a=e)}return a}function Oi(n,r){var i,o,e,a,d,c,g,m=0,M=0,S=0,A=n.constructor,T=A.rounding,O=A.precision;if(!n.d||!n.d[0]||n.e>17)return new A(n.d?n.d[0]?n.s<0?0:1/0:1:n.s?n.s<0?0:n:NaN);for(r==null?(Y=!1,g=O):g=r,c=new A(.03125);n.e>-2;)n=n.times(c),S+=5;for(o=Math.log(Zt(2,S))/Math.LN10*2+5|0,g+=o,i=a=d=new A(1),A.precision=g;;){if(a=z(a.times(n),g,1),i=i.times(++M),c=d.plus(ot(a,i,g,1)),Ht(c.d).slice(0,g)===Ht(d.d).slice(0,g)){for(e=S;e--;)d=z(d.times(d),g,1);if(r==null)if(m<3&&Ae(d.d,g-o,T,m))A.precision=g+=10,i=a=c=new A(1),M=0,m++;else return z(d,A.precision=O,T,Y=!0);else return A.precision=O,d}d=c}}function we(n,r){var i,o,e,a,d,c,g,m,M,S,A,T=1,O=10,L=n,I=L.d,N=L.constructor,R=N.rounding,F=N.precision;if(L.s<0||!I||!I[0]||!L.e&&I[0]==1&&I.length==1)return new N(I&&!I[0]?-1/0:L.s!=1?NaN:I?0:L);if(r==null?(Y=!1,M=F):M=r,N.precision=M+=O,i=Ht(I),o=i.charAt(0),Math.abs(a=L.e)<15e14){for(;o<7&&o!=1||o==1&&i.charAt(1)>3;)L=L.times(n),i=Ht(L.d),o=i.charAt(0),T++;a=L.e,o>1?(L=new N("0."+i),a++):L=new N(o+"."+i.slice(1))}else return m=Ke(N,M+2,F).times(a+""),L=we(new N(o+"."+i.slice(1)),M-O).plus(m),N.precision=F,r==null?z(L,F,R,Y=!0):L;for(S=L,g=d=L=ot(L.minus(1),L.plus(1),M,1),A=z(L.times(L),M,1),e=3;;){if(d=z(d.times(A),M,1),m=g.plus(ot(d,new N(e),M,1)),Ht(m.d).slice(0,M)===Ht(g.d).slice(0,M))if(g=g.times(2),a!==0&&(g=g.plus(Ke(N,M+2,F).times(a+""))),g=ot(g,new N(T),M,1),r==null)if(Ae(g.d,M-O,R,c))N.precision=M+=O,m=d=L=ot(S.minus(1),S.plus(1),M,1),A=z(L.times(L),M,1),e=c=1;else return z(g,N.precision=F,R,Y=!0);else return N.precision=F,g;g=m,e+=2}}function _r(n){return String(n.s*n.s/0)}function $e(n,r){var i,o,e;for((i=r.indexOf("."))>-1&&(r=r.replace(".","")),(o=r.search(/e/i))>0?(i<0&&(i=o),i+=+r.slice(o+1),r=r.substring(0,o)):i<0&&(i=r.length),o=0;r.charCodeAt(o)===48;o++);for(e=r.length;r.charCodeAt(e-1)===48;--e);if(r=r.slice(o,e),r){if(e-=o,n.e=i=i-o-1,n.d=[],o=(i+1)%H,i<0&&(o+=H),o<e){for(o&&n.d.push(+r.slice(0,o)),e-=H;o<e;)n.d.push(+r.slice(o,o+=H));r=r.slice(o),o=H-r.length}else o-=e;for(;o--;)r+="0";n.d.push(+r),Y&&(n.e>n.constructor.maxE?(n.d=null,n.e=NaN):n.e<n.constructor.minE&&(n.e=0,n.d=[0]))}else n.e=0,n.d=[0];return n}function Xr(n,r){var i,o,e,a,d,c,g,m,M;if(r.indexOf("_")>-1){if(r=r.replace(/(\d)_(?=\d)/g,"$1"),hr.test(r))return $e(n,r)}else if(r==="Infinity"||r==="NaN")return+r||(n.s=NaN),n.e=NaN,n.d=null,n;if(Kr.test(r))i=16,r=r.toLowerCase();else if(Zr.test(r))i=2;else if(zr.test(r))i=8;else throw Error(ve+r);for(a=r.search(/p/i),a>0?(g=+r.slice(a+1),r=r.substring(2,a)):r=r.slice(2),a=r.indexOf("."),d=a>=0,o=n.constructor,d&&(r=r.replace(".",""),c=r.length,a=c-a,e=mr(o,new o(i),a,a*2)),m=je(r,i,ue),M=m.length-1,a=M;m[a]===0;--a)m.pop();return a<0?new o(n.s*0):(n.e=Ge(m,M),n.d=m,Y=!1,d&&(n=ot(n,e,c*4)),g&&(n=n.times(Math.abs(g)<54?Zt(2,g):Ce.pow(2,g))),Y=!0,n)}function Jr(n,r){var i,o=r.d.length;if(o<3)return r.isZero()?r:Se(n,2,r,r);i=1.4*Math.sqrt(o),i=i>16?16:i|0,r=r.times(1/He(5,i)),r=Se(n,2,r,r);for(var e,a=new n(5),d=new n(16),c=new n(20);i--;)e=r.times(r),r=r.times(a.plus(e.times(d.times(e).minus(c))));return r}function Se(n,r,i,o,e){var a,d,c,g,m=1,M=n.precision,S=Math.ceil(M/H);for(Y=!1,g=i.times(i),c=new n(o);;){if(d=ot(c.times(g),new n(r++*r++),M,1),c=e?o.plus(d):o.minus(d),o=ot(d.times(g),new n(r++*r++),M,1),d=c.plus(o),d.d[S]!==void 0){for(a=S;d.d[a]===c.d[a]&&a--;);if(a==-1)break}a=c,c=o,o=d,d=a,m++}return Y=!0,d.d.length=S+1,d}function He(n,r){for(var i=n;--r;)i*=n;return i}function wr(n,r){var i,o=r.s<0,e=ce(n,n.precision,1),a=e.times(.5);if(r=r.abs(),r.lte(a))return pe=o?4:1,r;if(i=r.divToInt(e),i.isZero())pe=o?3:2;else{if(r=r.minus(i.times(e)),r.lte(a))return pe=sr(i)?o?2:3:o?4:1,r;pe=sr(i)?o?1:4:o?3:2}return r.minus(e).abs()}function Ri(n,r,i,o){var e,a,d,c,g,m,M,S,A,T=n.constructor,O=i!==void 0;if(O?(ee(i,1,Me),o===void 0?o=T.rounding:ee(o,0,8)):(i=T.precision,o=T.rounding),!n.isFinite())M=_r(n);else{for(M=fe(n),d=M.indexOf("."),O?(e=2,r==16?i=i*4-3:r==8&&(i=i*3-2)):e=r,d>=0&&(M=M.replace(".",""),A=new T(1),A.e=M.length-d,A.d=je(fe(A),10,e),A.e=A.d.length),S=je(M,10,e),a=g=S.length;S[--g]==0;)S.pop();if(!S[0])M=O?"0p+0":"0";else{if(d<0?a--:(n=new T(n),n.d=S,n.e=a,n=ot(n,A,i,o,0,e),S=n.d,a=n.e,m=ur),d=S[i],c=e/2,m=m||S[i+1]!==void 0,m=o<4?(d!==void 0||m)&&(o===0||o===(n.s<0?3:2)):d>c||d===c&&(o===4||m||o===6&&S[i-1]&1||o===(n.s<0?8:7)),S.length=i,m)for(;++S[--i]>e-1;)S[i]=0,i||(++a,S.unshift(1));for(g=S.length;!S[g-1];--g);for(d=0,M="";d<g;d++)M+=xi.charAt(S[d]);if(O){if(g>1)if(r==16||r==8){for(d=r==16?4:3,--g;g%d;g++)M+="0";for(S=je(M,e,r),g=S.length;!S[g-1];--g);for(d=1,M="1.";d<g;d++)M+=xi.charAt(S[d])}else M=M.charAt(0)+"."+M.slice(1);M=M+(a<0?"p":"p+")+a}else if(a<0){for(;++a;)M="0"+M;M="0."+M}else if(++a>g)for(a-=g;a--;)M+="0";else a<g&&(M=M.slice(0,a)+"."+M.slice(a))}M=(r==16?"0x":r==2?"0b":r==8?"0o":"")+M}return n.s<0?"-"+M:M}function ar(n,r){if(n.length>r)return n.length=r,!0}function Yr(n){return new this(n).abs()}function Qr(n){return new this(n).acos()}function tn(n){return new this(n).acosh()}function en(n,r){return new this(n).plus(r)}function rn(n){return new this(n).asin()}function nn(n){return new this(n).asinh()}function on(n){return new this(n).atan()}function sn(n){return new this(n).atanh()}function an(n,r){n=new this(n),r=new this(r);var i,o=this.precision,e=this.rounding,a=o+4;return!n.s||!r.s?i=new this(NaN):!n.d&&!r.d?(i=ce(this,a,1).times(r.s>0?.25:.75),i.s=n.s):!r.d||n.isZero()?(i=r.s<0?ce(this,o,e):new this(0),i.s=n.s):!n.d||r.isZero()?(i=ce(this,a,1).times(.5),i.s=n.s):r.s<0?(this.precision=a,this.rounding=1,i=this.atan(ot(n,r,a,1)),r=ce(this,a,1),this.precision=o,this.rounding=e,i=n.s<0?i.minus(r):i.plus(r)):i=this.atan(ot(n,r,a,1)),i}function ln(n){return new this(n).cbrt()}function un(n){return z(n=new this(n),n.e+1,2)}function cn(n,r,i){return new this(n).clamp(r,i)}function fn(n){if(!n||typeof n!="object")throw Error(ze+"Object expected");var r,i,o,e=n.defaults===!0,a=["precision",1,Me,"rounding",0,8,"toExpNeg",-ke,0,"toExpPos",0,ke,"maxE",0,ke,"minE",-ke,0,"modulo",0,9];for(r=0;r<a.length;r+=3)if(i=a[r],e&&(this[i]=Ti[i]),(o=n[i])!==void 0)if(Xt(o)===o&&o>=a[r+1]&&o<=a[r+2])this[i]=o;else throw Error(ve+i+": "+o);if(i="crypto",e&&(this[i]=Ti[i]),(o=n[i])!==void 0)if(o===!0||o===!1||o===0||o===1)if(o)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[i]=!0;else throw Error(fr);else this[i]=!1;else throw Error(ve+i+": "+o);return this}function dn(n){return new this(n).cos()}function hn(n){return new this(n).cosh()}function vr(n){var r,i,o;function e(a){var d,c,g,m=this;if(!(m instanceof e))return new e(a);if(m.constructor=e,lr(a)){m.s=a.s,Y?!a.d||a.e>e.maxE?(m.e=NaN,m.d=null):a.e<e.minE?(m.e=0,m.d=[0]):(m.e=a.e,m.d=a.d.slice()):(m.e=a.e,m.d=a.d?a.d.slice():a.d);return}if(g=typeof a,g==="number"){if(a===0){m.s=1/a<0?-1:1,m.e=0,m.d=[0];return}if(a<0?(a=-a,m.s=-1):m.s=1,a===~~a&&a<1e7){for(d=0,c=a;c>=10;c/=10)d++;Y?d>e.maxE?(m.e=NaN,m.d=null):d<e.minE?(m.e=0,m.d=[0]):(m.e=d,m.d=[a]):(m.e=d,m.d=[a]);return}if(a*0!==0){a||(m.s=NaN),m.e=NaN,m.d=null;return}return $e(m,a.toString())}if(g==="string")return(c=a.charCodeAt(0))===45?(a=a.slice(1),m.s=-1):(c===43&&(a=a.slice(1)),m.s=1),hr.test(a)?$e(m,a):Xr(m,a);if(g==="bigint")return a<0?(a=-a,m.s=-1):m.s=1,$e(m,a.toString());throw Error(ve+a)}if(e.prototype=E,e.ROUND_UP=0,e.ROUND_DOWN=1,e.ROUND_CEIL=2,e.ROUND_FLOOR=3,e.ROUND_HALF_UP=4,e.ROUND_HALF_DOWN=5,e.ROUND_HALF_EVEN=6,e.ROUND_HALF_CEIL=7,e.ROUND_HALF_FLOOR=8,e.EUCLID=9,e.config=e.set=fn,e.clone=vr,e.isDecimal=lr,e.abs=Yr,e.acos=Qr,e.acosh=tn,e.add=en,e.asin=rn,e.asinh=nn,e.atan=on,e.atanh=sn,e.atan2=an,e.cbrt=ln,e.ceil=un,e.clamp=cn,e.cos=dn,e.cosh=hn,e.div=pn,e.exp=mn,e.floor=gn,e.hypot=_n,e.ln=wn,e.log=vn,e.log10=bn,e.log2=Mn,e.max=yn,e.min=kn,e.mod=Sn,e.mul=Pn,e.pow=An,e.random=Cn,e.round=xn,e.sign=Tn,e.sin=Dn,e.sinh=On,e.sqrt=Rn,e.sub=Ln,e.sum=Nn,e.tan=In,e.tanh=En,e.trunc=Bn,n===void 0&&(n={}),n&&n.defaults!==!0)for(o=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],r=0;r<o.length;)n.hasOwnProperty(i=o[r++])||(n[i]=this[i]);return e.config(n),e}function pn(n,r){return new this(n).div(r)}function mn(n){return new this(n).exp()}function gn(n){return z(n=new this(n),n.e+1,3)}function _n(){var n,r,i=new this(0);for(Y=!1,n=0;n<arguments.length;)if(r=new this(arguments[n++]),r.d)i.d&&(i=i.plus(r.times(r)));else{if(r.s)return Y=!0,new this(1/0);i=r}return Y=!0,i.sqrt()}function lr(n){return n instanceof Ce||n&&n.toStringTag===dr||!1}function wn(n){return new this(n).ln()}function vn(n,r){return new this(n).log(r)}function Mn(n){return new this(n).log(2)}function bn(n){return new this(n).log(10)}function yn(){return gr(this,arguments,-1)}function kn(){return gr(this,arguments,1)}function Sn(n,r){return new this(n).mod(r)}function Pn(n,r){return new this(n).mul(r)}function An(n,r){return new this(n).pow(r)}function Cn(n){var r,i,o,e,a=0,d=new this(1),c=[];if(n===void 0?n=this.precision:ee(n,1,Me),o=Math.ceil(n/H),this.crypto)if(crypto.getRandomValues)for(r=crypto.getRandomValues(new Uint32Array(o));a<o;)e=r[a],e>=429e7?r[a]=crypto.getRandomValues(new Uint32Array(1))[0]:c[a++]=e%1e7;else if(crypto.randomBytes){for(r=crypto.randomBytes(o*=4);a<o;)e=r[a]+(r[a+1]<<8)+(r[a+2]<<16)+((r[a+3]&127)<<24),e>=214e7?crypto.randomBytes(4).copy(r,a):(c.push(e%1e7),a+=4);a=o/4}else throw Error(fr);else for(;a<o;)c[a++]=Math.random()*1e7|0;for(o=c[--a],n%=H,o&&n&&(e=Zt(10,H-n),c[a]=(o/e|0)*e);c[a]===0;a--)c.pop();if(a<0)i=0,c=[0];else{for(i=-1;c[0]===0;i-=H)c.shift();for(o=1,e=c[0];e>=10;e/=10)o++;o<H&&(i-=H-o)}return d.e=i,d.d=c,d}function xn(n){return z(n=new this(n),n.e+1,this.rounding)}function Tn(n){return n=new this(n),n.d?n.d[0]?n.s:0*n.s:n.s||NaN}function Dn(n){return new this(n).sin()}function On(n){return new this(n).sinh()}function Rn(n){return new this(n).sqrt()}function Ln(n,r){return new this(n).sub(r)}function Nn(){var n=0,r=arguments,i=new this(r[n]);for(Y=!1;i.s&&++n<r.length;)i=i.plus(r[n]);return Y=!0,z(i,this.precision,this.rounding)}function In(n){return new this(n).tan()}function En(n){return new this(n).tanh()}function Bn(n){return z(n=new this(n),n.e+1,1)}E[Symbol.for("nodejs.util.inspect.custom")]=E.toString;E[Symbol.toStringTag]="Decimal";var Ce=E.constructor=vr(Ti);We=new Ce(We);Ze=new Ce(Ze);var mt=Ce;var Mr=require("@suilend/sdk");var Ve=class{constructor(r){this.getPositionList=async(r=this._sdk.getSenderAddress(),i=!1)=>{let{lending_market_id:o,lending_market_type:e}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend);try{let a=`cap_to_position_mapping_${r}`,d=this._sdk.getCache(a,i),c=await this._sdk.FullClient.getOwnedObjectsByPage(r,{options:{showType:!0,showContent:!0,showOwner:!0},filter:{MatchAny:[{StructType:`${this._sdk.sdkOptions.margin_trading.package_id}::position::PositionCap`}]}});if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:42 ~ PositionModules ~ ownerRes.data.length:",c.data.length),c.data.length===0)return Yt("PositionNotFound","Position not found"),[];let g=await this._sdk.SuiLendModule.getSuilendClient(o,e);console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:48 ~ PositionModules ~ suiLendClient:",g);let{allLendingMarketData:m,lstAprPercentMap:M}=await this._sdk.SuiLendModule.getLendingMarketData();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:50 ~ PositionModules ~ allLendingMarketData:",m);let S=m[o].reserveMap;d||(d=new Map);let A=[];for(let I=0;I<c.data.length;I++){let N=(0,D.getObjectFields)(c.data[I]);N.position_id&&A.push(N.position_id),N.id.id&&d.set(N.id.id,N.position_id)}await this._sdk.updateCache(a,d,D.CACHE_TIME_24H);let T=await this._sdk.FullClient.batchGetObjects(A,{showContent:!0});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:73 ~ PositionModules ~ positionRes:",T);let O=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:m,lstAprPercentMap:M},!0);console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:75 ~ PositionModules ~ obligations:",O);let L=[];for(let I=0;I<T.length;I++){let N=A[I],R="";for(let[Z,w]of d.entries())if(w===N){R=Z;break}let F=Le(T[I],R),q=await g.getObligation(F.obligation_owner_cap),W=Ne(F,q,S||{},M||{},O[o].rewardMap),j=this.getObligationRewardsInfo(q,Object.values(S));L.push({...W,claimable_rewards:j})}return L}catch(a){return Yt("FetchError",a),[]}};this.getPositionInfo=async(r,i=this._sdk.getSenderAddress(),o=!0)=>{let e=`cap_to_position_mapping_${i}`,a=this._sdk.getCache(e,o);a||(a=new Map);let d=this.getCapIdByPositionId(r,i)||"";if(!d){let q=await this._sdk.FullClient.getOwnedObjectsByPage(i,{options:{showType:!0,showContent:!0,showOwner:!0},filter:{MatchAny:[{StructType:`${this._sdk.sdkOptions.margin_trading.package_id}::position::PositionCap`}]}});for(let W=0;W<q.data.length;W++){let j=(0,D.getObjectFields)(q.data[W]);j.id.id&&a.set(j.id.id,j.position_id),j.position_id===r&&(d=j.id.id)}}let c=await this._sdk.FullClient.batchGetObjects([r],{showContent:!0}),g=Le(c[0],d||""),{lending_market_id:m,lending_market_type:M}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),S=await this._sdk.SuiLendModule.getSuilendClient(m,M),{allLendingMarketData:A,lstAprPercentMap:T}=await this._sdk.SuiLendModule.getLendingMarketData(),O=A[m].reserveMap,L=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:A,lstAprPercentMap:T},!0),I=await S.getObligation(g.obligation_owner_cap),N=this.getObligationRewardsInfo(I,Object.values(O));return{...Ne(g,I,O||{},T||{},L[m].rewardMap),claimable_rewards:N}};this.getCapIdByPositionId=(r,i=this._sdk.getSenderAddress())=>{let o=`cap_to_position_mapping_${i}`,e=this._sdk.getCache(o,!1);if(!e)return"";for(let[a,d]of e.entries())if(d===r)return a;return""};this.repay=r=>{let{margin_trading:i}=this._sdk.sdkOptions,{lending_market_id:o,lending_market_type:e}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:a,versioned_id:d}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{txb:c,repay_amount:g,repay_coin_type:m,repay_coin:M,repay_reserve_array_index:S,market_id:A,position_cap_id:T,margin_trading_context:O}=r,L=c||new se.Transaction,I=M||D.CoinAssist.buildCoinWithBalance(BigInt(g.toString()),m,L);L.moveCall({target:`${i.published_at}::router::repay`,typeArguments:[e,m],arguments:[O,L.object(a),L.object(o),L.object(A),L.object(T),I,L.pure.u64(S.toString()),L.object(D.CLOCK_ADDRESS),L.object(d)]})};this.withdrawAsset=(r,i)=>{let{margin_trading:o}=this._sdk.sdkOptions,{lending_market_id:e,lending_market_type:a}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:d,versioned_id:c}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{package_id:g}=this._sdk.sdkOptions.suilend,{market_id:m,withdraw_amount:M,withdraw_reserve_array_index:S,withdraw_coin_type:A,position_cap_id:T,margin_trading_context:O}=r,[L]=i.moveCall({target:"0x1::option::none",typeArguments:[`${g}::lending_market::RateLimiterExemption<${a}, ${A}>`],arguments:[]});return i.moveCall({target:`${o.published_at}::router::withdraw`,typeArguments:[a,A],arguments:[O,i.object(d),i.object(e),i.object(m),i.object(T),i.object(L),i.pure.u64(M),i.pure.u64(S),i.object(D.SUI_SYSTEM_STATE_OBJECT_ID),i.object(D.CLOCK_ADDRESS),i.object(c)]})};this.borrowAsset=(r,i)=>{let{reserve_array_index:o,borrow_amount:e,base_token:a,quote_token:d,lending_market_id:c,is_long:g,market_id:m,position_cap_id:M,position_cap:S,margin_trading_context:A}=r,{margin_trading:T}=this._sdk.sdkOptions,{lending_market_type:O}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:L,versioned_id:I}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);return i.moveCall({target:`${T.published_at}::router::borrow`,typeArguments:[O,g?d:a],arguments:[A,i.object(L),i.object(c),i.object(m),M?i.object(M):S,i.pure.u64(o),i.pure.u64(e.toString()),i.object(D.SUI_SYSTEM_STATE_OBJECT_ID),i.object(D.CLOCK_ADDRESS),i.object(I)]})};this.createMarginTradingContext=(r,i)=>{let{published_at:o}=this._sdk.sdkOptions.margin_trading,{market_id:e,position_cap_id:a,action:d,coin_type:c,amount:g}=r;return i.moveCall({target:`${o}::router::create_margin_trading_context`,arguments:[i.object(e),i.object(a),i.pure.string(d),i.pure.u64(g)],typeArguments:[c]})};this.marginTradingContextConfirm=(r,i)=>{let{published_at:o}=this._sdk.sdkOptions.margin_trading;return i.moveCall({target:`${o}::router::confirm`,arguments:[r],typeArguments:[]}),i};this.openPosition=async r=>{let{is_quote:i,is_long:o,amount:e,swap_clmm_pool:a="",slippage:d,leverage:c,market_id:g}=r,{lending_market_id:m}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),M=new se.Transaction,{base_token:S,quote_token:A}=await this._sdk.MarketModules.getMarketInfo(g),{flash_amount:T,flash_loan_coin:O,is_flash_a:L,borrow_amount:I,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R,clmm_pool:F,base_reserve_array_index:q,quote_reserve_array_index:W,reserve:j,has_swap:Z,routers:w}=await this.calculatePositionDeposit({is_long:o,is_quote:i,amount:e,swap_clmm_pool:a,leverage:c,slippage:d,market_id:g,base_token:S,quote_token:A,is_submit:!0});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:492 ~ PositionModules ~ routers:",w),await this._sdk.SuiLendModule.refreshReservePrices(M,j);let{balance_a:b,balance_b:k,receipt:x}=this._sdk.SwapModules.flashLoan({amount:T,clmm_pool:F,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R,flash_loan_coin:O,tx:M}),C=o?A:S,p=o?S:A,t=D.CoinAssist.buildCoinWithBalance(BigInt(e),i?A:S,M),s=D.CoinAssist.fromBalance(b,N,M),u=D.CoinAssist.fromBalance(k,R,M);Z&&(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:515 ~ PositionModules ~ is_flash_a:",L),M.mergeCoins(t,[L?s:u])),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:521 ~ PositionModules ~ d(flash_amount).add(amount).toString():",(0,D.d)(T).add(e).toString(),C,p);let f=await this._sdk.SwapModules.handleSwap({from:C,to:p,amount:Z?(0,D.d)(T).add(e).toString():T,input_coin:Z?t:L?s:u,swap_clmm_pool:a,slippage:d,tx:M}),{position_cap:h,margin_trading_context:v}=this.createLeveragePosition({leverage:c,market_id:g,base_token:S,quote_token:A,is_long:o,init_deposit_amount:(0,D.d)(e).toString(),init_coin_type:i?A:S,tx:M}),P=o?q:W;f.swap_out_coin&&!Z&&M.mergeCoins(f.swap_out_coin,[t]),await this.depositToLeveragePosition({is_long:o,market_id:g,position_cap:h,deposit_reserve_array_index:P,input_coin:f.swap_out_coin,margin_trading_context:v,base_token:S,quote_token:A},M),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:580 ~ PositionModules ~ borrow_amount:",I);let _=this.borrowAsset({position_cap:h,reserve_array_index:o?W:q,borrow_amount:I,base_token:S,quote_token:A,is_long:o,lending_market_id:m,market_id:g,margin_trading_context:v},M),l=D.CoinAssist.mintBalanceZero(L?R:N,M);return this._sdk.SwapModules.repayFlashLoan({tx:M,clmm_pool:F,repay_base:L?D.CoinAssist.intoBalance(_,N,M):l,repay_quote:L?l:D.CoinAssist.intoBalance(_,R,M),receipt:x,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R}),M.transferObjects([h],M.pure.address(this._sdk.getSenderAddress())),D.CoinAssist.destroyBalanceZero(L?D.CoinAssist.intoBalance(u,R,M):D.CoinAssist.intoBalance(s,N,M),L?R:N,M),this.marginTradingContextConfirm(v,M),M};this.positionDeposit=async r=>{let{position_id:i,swap_clmm_pool:o="",is_quote:e,amount:a,slippage:d,leverage:c,txb:g}=r,{lending_market_id:m}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{is_long:M,deposits:S,borrows:A,position_cap_id:T,market_id:O}=await this.getPositionInfo(i),{base_token:L,quote_token:I}=await this._sdk.MarketModules.getMarketInfo(O),N=g||new se.Transaction,R=this.createMarginTradingContext({market_id:O,position_cap_id:T,action:"increase_size",coin_type:e?I:L,amount:a.toString()},N),F=S[0].reserveArrayIndex.toString(),q=A[0].reserveArrayIndex.toString(),{flash_amount:W,flash_loan_coin:j,is_flash_a:Z,borrow_amount:w,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k,clmm_pool:x,reserve:C,has_swap:p}=await this.calculatePositionDeposit({market_id:O,is_long:M,is_quote:e,amount:a,swap_clmm_pool:o,leverage:c,slippage:d,base_token:L,quote_token:I,position_id:i,is_open:!1});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:603 ~ PositionModules ~ flash_amount:",W),await this._sdk.SuiLendModule.refreshReservePrices(N,C);let{balance_a:t,balance_b:s,receipt:u}=this._sdk.SwapModules.flashLoan({amount:W,clmm_pool:x,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k,flash_loan_coin:j,tx:N}),f=M?I:L,h=M?L:I,v=D.CoinAssist.buildCoinWithBalance(BigInt(a),e?I:L,N),P=D.CoinAssist.fromBalance(t,b,N),_=D.CoinAssist.fromBalance(s,k,N);p&&N.mergeCoins(v,[Z?P:_]);let l=await this._sdk.SwapModules.handleSwap({from:f,to:h,amount:p?(0,D.d)(W).add(a).toString():W,input_coin:p?v:Z?P:_,swap_clmm_pool:o,slippage:d,tx:N});l.swap_out_coin&&!p&&N.mergeCoins(l.swap_out_coin,[v]),await this.depositToLeveragePosition({is_long:M,market_id:O,position_cap_id:T,deposit_reserve_array_index:F,input_coin:l.swap_out_coin,margin_trading_context:R,base_token:L,quote_token:I},N);let y=await this.borrowAsset({position_cap_id:T,reserve_array_index:q,borrow_amount:w,base_token:L,quote_token:I,is_long:M,lending_market_id:m,market_id:O,margin_trading_context:R},N),U=D.CoinAssist.mintBalanceZero(Z?k:b,N);return this._sdk.SwapModules.repayFlashLoan({tx:N,clmm_pool:x,repay_base:Z?D.CoinAssist.intoBalance(y,b,N):U,repay_quote:Z?U:D.CoinAssist.intoBalance(y,k,N),receipt:u,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k}),D.CoinAssist.destroyBalanceZero(Z?D.CoinAssist.intoBalance(_,k,N):D.CoinAssist.intoBalance(P,b,N),Z?k:b,N),await this.marginTradingContextConfirm(R,N),N};this.positionWithdraw=async r=>{let{amount:i,is_quote:o,txb:e,swap_clmm_pool:a="",slippage:d,position_id:c,leverage:g}=r,m=e||new se.Transaction,{withdraw_ctoken_amount:M,repay_amount:S,is_close:A,deposits:T,borrows:O,reserve:L,base_token:I,quote_token:N,clmm_pool:R,clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:q,position_cap_id:W,market_id:j,is_long:Z,swap_convert_all:w,flash_loan_amount:b,routers:k,repay_flash_loan_amount:x="0",partial_amount_in:C,withdraw_amount:p,has_flash_loan:t}=await this.calculatePositionWithdraw({position_id:c,is_quote:o,swap_clmm_pool:a,amount:i,leverage:g,slippage:d});if(A)return this.positionClose({position_id:c,is_quote:o,leverage:g,slippage:d,swap_clmm_pool:a});let s=this.createMarginTradingContext({market_id:j,position_cap_id:W,action:"decrease_size",coin_type:o?N:I,amount:i.toString()},m);await this._sdk.SuiLendModule.refreshReservePrices(m,L);let u,f;if(t){let{balance_a:_,balance_b:l,receipt:y,is_loan_a:U}=this._sdk.SwapModules.flashLoan({tx:m,amount:b,flash_loan_coin:O[0].reserve.coinType,clmm_pool:R,clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:q});u=y,f=U,D.CoinAssist.destroyBalanceZero(f?l:_,f?q:F,m);let B=U?D.CoinAssist.fromBalance(_,F,m):D.CoinAssist.fromBalance(l,q,m);this.repay({txb:m,position_cap_id:W,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:B,repay_coin_type:Z?N:I,repay_amount:"0",market_id:j,margin_trading_context:s}),m.transferObjects([B],this._sdk.getSenderAddress())}let h=this.withdrawAsset({market_id:j,position_cap_id:W,withdraw_amount:M.toString(),withdraw_reserve_array_index:T[0].reserveArrayIndex.toString(),withdraw_coin_type:Z?I:N,margin_trading_context:s},m);for(let _=1;_<T.length;_++){let l=this.withdrawAsset({market_id:j,position_cap_id:W,withdraw_amount:D.U64_MAX.toString(),withdraw_reserve_array_index:T[_].reserveArrayIndex.toString(),withdraw_coin_type:T[_].coinType,margin_trading_context:s},m);m.transferObjects([l],this._sdk.getSenderAddress())}let v;if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:778 ~ PositionModules ~ swap_convert_all:",{swap_convert_all:w,has_flash_loan:t}),w)v=await this._sdk.SwapModules.routerSwap({router:k?.route_obj,input_coin:h,slippage:d,txb:m});else{let _=m.splitCoins(h,[m.pure.u64(C?.toString()||"0")]);v=await this._sdk.SwapModules.routerSwap({router:k?.route_obj,input_coin:_,slippage:d,txb:m})}let P;if(v&&t&&(P=m.splitCoins(v,[m.pure.u64(x.toString())])),P&&t){let _=D.CoinAssist.mintBalanceZero(f?q:F,m);this._sdk.SwapModules.repayFlashLoan({tx:m,clmm_pool:R,repay_base:f?D.CoinAssist.intoBalance(P,F,m):_,repay_quote:f?_:D.CoinAssist.intoBalance(P,q,m),clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:q,receipt:u})}else if(v){let _=m.splitCoins(v,[m.pure.u64(x.toString())]);this.repay({txb:m,position_cap_id:W,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:_,repay_coin_type:Z?N:I,repay_amount:"0",market_id:j,margin_trading_context:s}),m.transferObjects([_],this._sdk.getSenderAddress())}return v&&m.transferObjects([v],this._sdk.getSenderAddress()),w||m.transferObjects([h],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(s,m),m};this.positionClose=async r=>{let{position_id:i,is_quote:o,slippage:e,leverage:a,swap_clmm_pool:d=""}=r,{margin_trading:c}=this._sdk.sdkOptions,{global_config_id:g,versioned_id:m}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{lending_market_type:M,lending_market_id:S}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),A=new se.Transaction,{deposits:T,borrows:O,base_token:L,quote_token:I,clmm_pool:N,clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:F,position_cap_id:q,market_id:W,swap_convert_all:j,routers:Z,partial_amount_in:w,is_long:b,flash_loan_amount:k,reserve:x,repay_flash_loan_amount:C="0"}=await this.calculatePositionWithdraw({position_id:i,is_quote:o,swap_clmm_pool:d,amount:D.U64_MAX.toString(),leverage:a,slippage:e}),p=this.createMarginTradingContext({market_id:W,position_cap_id:q,action:"close_position",coin_type:o?I:L,amount:"0"},A);await this._sdk.SuiLendModule.refreshReservePrices(A,x);let t,s;if((0,D.d)(k).gt(0)){let{balance_a:h,balance_b:v,receipt:P,is_loan_a:_}=this._sdk.SwapModules.flashLoan({tx:A,amount:k,flash_loan_coin:b?I:L,clmm_pool:N,clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:F});t=P,s=_,D.CoinAssist.destroyBalanceZero(s?v:h,s?F:R,A);let l=s?D.CoinAssist.fromBalance(h,R,A):D.CoinAssist.fromBalance(v,F,A);this.repay({txb:A,position_cap_id:q,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:l,repay_coin_type:O[0].reserve.coinType,repay_amount:"0",market_id:W,margin_trading_context:p}),A.transferObjects([l],this._sdk.getSenderAddress())}let u=this.withdrawAsset({market_id:W,position_cap_id:q,withdraw_amount:D.U64_MAX.toString(),withdraw_reserve_array_index:T[0].reserveArrayIndex.toString(),withdraw_coin_type:b?L:I,margin_trading_context:p},A);for(let h=1;h<T.length;h++){let v=this.withdrawAsset({market_id:W,position_cap_id:q,withdraw_amount:D.U64_MAX.toString(),withdraw_reserve_array_index:T[h].reserveArrayIndex.toString(),withdraw_coin_type:T[h].coinType,margin_trading_context:p},A);A.transferObjects([v],this._sdk.getSenderAddress())}let f;if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:895 ~ PositionModules ~ swap_convert_all:",j),j)f=await this._sdk.SwapModules.routerSwap({router:Z?.route_obj,input_coin:u,slippage:e,txb:A});else if(w&&(0,D.d)(w).gt(0)){let h=A.splitCoins(u,[A.pure.u64(w?.toString()||"0")]);f=await this._sdk.SwapModules.routerSwap({router:Z?.route_obj,input_coin:h,slippage:e,txb:A})}if(f&&t){let h=D.CoinAssist.mintBalanceZero(s?F:R,A),v=A.splitCoins(f,[A.pure.u64(C?.toString()||"0")]);this._sdk.SwapModules.repayFlashLoan({tx:A,clmm_pool:N,repay_base:s?D.CoinAssist.intoBalance(v,R,A):h,repay_quote:s?h:D.CoinAssist.intoBalance(v,F,A),clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:F,receipt:t})}return A.moveCall({target:`${c.published_at}::router::close_position`,typeArguments:[M],arguments:[p,A.object(g),A.object(S),A.object(W),A.object(q),A.object(D.CLOCK_ADDRESS),A.object(m)]}),f&&A.transferObjects([f],this._sdk.getSenderAddress()),j||A.transferObjects([u],this._sdk.getSenderAddress()),this.marginTradingContextConfirm(p,A),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:951 ~ PositionModules ~ tx:",A),A};this.positionLeverageIncrease=async r=>{let{current_leverage:i,target_leverage:o,swap_clmm_pool:e="",slippage:a,position_id:d}=r,{lending_market_id:c}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),g=new se.Transaction,{flash_loan_amount:m,quote_token:M,base_token:S,reserve:A,deposits:T,borrow_amount:O,routers:L,position_cap_id:I,is_long:N,market_id:R,is_flash_loan:F}=await this.calculatePositionLeverage({position_id:d,current_leverage:i,target_leverage:o,swap_clmm_pool:e,slippage:a}),q=N?M:S,W=this.createMarginTradingContext({market_id:R,position_cap_id:I,action:"increase_leverage",coin_type:N?S:M,amount:"0"},g);if(await this._sdk.SuiLendModule.refreshReservePrices(g,A),F){let{clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z,clmm_pool:w}=await this._sdk.SwapModules.getFlashLoanPool(q,m?.toString()||""),{balance_a:b,balance_b:k,receipt:x,is_loan_a:C}=this._sdk.SwapModules.flashLoan({tx:g,amount:m?.toString()||"0",clmm_pool:w,clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z,flash_loan_coin:q}),p=await this._sdk.SwapModules.routerSwap({router:L?.route_obj,input_coin:C?D.CoinAssist.fromBalance(b,j,g):D.CoinAssist.fromBalance(k,Z,g),slippage:a,txb:g});this.depositToLeveragePosition({is_long:N,market_id:R,position_cap_id:I,deposit_reserve_array_index:T[0].reserveArrayIndex.toString(),input_coin:p,margin_trading_context:W,base_token:S,quote_token:M},g);let t=this.borrowAsset({position_cap_id:I,reserve_array_index:N?A[1].arrayIndex.toString():A[0].arrayIndex.toString(),borrow_amount:O,base_token:S,quote_token:M,is_long:N,lending_market_id:c,market_id:R,margin_trading_context:W},g),s=D.CoinAssist.mintBalanceZero(C?Z:j,g);this._sdk.SwapModules.repayFlashLoan({tx:g,clmm_pool:w,repay_base:C?D.CoinAssist.intoBalance(t,j,g):s,repay_quote:C?s:D.CoinAssist.intoBalance(t,Z,g),receipt:x,clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z}),D.CoinAssist.destroyBalanceZero(C?k:b,C?Z:j,g)}else{let j=this.borrowAsset({position_cap_id:I,reserve_array_index:N?A[1].arrayIndex.toString():A[0].arrayIndex.toString(),borrow_amount:O,base_token:S,quote_token:M,is_long:N,lending_market_id:c,market_id:R,margin_trading_context:W},g),Z=await this._sdk.SwapModules.routerSwap({router:L?.route_obj,input_coin:j,slippage:a,txb:g});this.depositToLeveragePosition({is_long:N,market_id:R,position_cap_id:I,deposit_reserve_array_index:T[0].reserveArrayIndex.toString(),input_coin:Z,margin_trading_context:W,base_token:S,quote_token:M},g)}return await this.marginTradingContextConfirm(W,g),g};this.positionLeverageDecrease=async r=>{let{current_leverage:i,target_leverage:o,swap_clmm_pool:e="",slippage:a,position_id:d}=r,{deposits:c,borrows:g,position_cap_id:m,market_id:M,is_long:S}=await this.getPositionInfo(d),{base_token:A,quote_token:T}=await this._sdk.MarketModules.getMarketInfo(M),O=new se.Transaction,{withdraw_ctoken_amount:L,routers:I,reserve:N,is_flash_loan:R}=await this.calculatePositionLeverage({position_id:d,current_leverage:i,target_leverage:o,swap_clmm_pool:e,slippage:a}),F=this.createMarginTradingContext({market_id:M,position_cap_id:m,action:"decrease_leverage",coin_type:S?A:T,amount:"0"},O);if(await this._sdk.SuiLendModule.refreshReservePrices(O,N),R){let{clmm_pool_coin_type_a:q,clmm_pool_coin_type_b:W,clmm_pool:j,clmm_fee_tier:Z}=await this._sdk.SwapModules.getFlashLoanPool(c[0].reserve.coinType,L.toString()),{balance_a:w,balance_b:b,receipt:k,is_loan_a:x}=this._sdk.SwapModules.flashLoan({tx:O,amount:L,clmm_pool:j,clmm_pool_coin_type_a:q,clmm_pool_coin_type_b:W,flash_loan_coin:c[0].reserve.coinType}),C=await this._sdk.SwapModules.routerSwap({router:I?.route_obj,input_coin:x?D.CoinAssist.fromBalance(w,q,O):D.CoinAssist.fromBalance(b,W,O),slippage:a,txb:O});this.repay({txb:O,market_id:M,position_cap_id:m,repay_reserve_array_index:g[0].reserveArrayIndex.toString(),repay_coin:C,repay_coin_type:S?T:A,repay_amount:"0",margin_trading_context:F}),C&&O.transferObjects([C],this._sdk.getSenderAddress());let p=(0,D.d)(L).mul(Z).toString(),t=(0,D.d)(L).add(p).toDP(0,mt.ROUND_UP),s=this.withdrawAsset({market_id:M,position_cap_id:m,withdraw_amount:t.toString(),withdraw_reserve_array_index:c[0].reserveArrayIndex.toString(),withdraw_coin_type:S?A:T,margin_trading_context:F},O),u=O.splitCoins(s,[t.toString()]);this._sdk.SwapModules.repayFlashLoan({tx:O,clmm_pool:j,repay_base:x?D.CoinAssist.intoBalance(u,q,O):w,repay_quote:x?b:D.CoinAssist.intoBalance(u,W,O),receipt:k,clmm_pool_coin_type_a:q,clmm_pool_coin_type_b:W}),O.transferObjects([s],this._sdk.getSenderAddress())}else{let q=this.withdrawAsset({market_id:M,position_cap_id:m,withdraw_amount:L.toString(),withdraw_reserve_array_index:c[0].reserveArrayIndex.toString(),withdraw_coin_type:S?A:T,margin_trading_context:F},O);O.transferObjects([q],this._sdk.getSenderAddress())}return await this.marginTradingContextConfirm(F,O),O};this.positionRepay=async r=>{let{position_id:i,amount:o,is_quote:e,slippage:a}=r,{routers:d,repay_coin_type:c,base_token:g,quote_token:m,borrows:M,deposits:S,market_id:A,position_cap_id:T}=await this.calculatePositionRepay({position_id:i,amount:o,is_quote:e}),O=this.extractOtherTokenTypes(S,M,g,m),{reserve:L}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(g,m,void 0,O),I=new se.Transaction;await this._sdk.SuiLendModule.refreshReservePrices(I,L);let N=e?m!==c:g!==c,R,F=this.createMarginTradingContext({market_id:A,position_cap_id:T,action:"repay_debt",coin_type:e?m:g,amount:o.toString()},I);if(N){let q=D.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),e?m:g,I);R=await this._sdk.SwapModules.routerSwap({router:d?.route_obj,input_coin:q,slippage:a,txb:I})}else R=D.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),e?m:g,I);return this.repay({txb:I,position_cap_id:T,repay_reserve_array_index:M[0].reserveArrayIndex.toString(),repay_coin:R,repay_coin_type:c,repay_amount:"0",market_id:A,margin_trading_context:F}),I.transferObjects([R],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(F,I),I};this.positionTopUpCToken=async r=>{let{position_id:i,amount:o,is_quote:e,swap_clmm_pool:a="",slippage:d}=r,c=new se.Transaction,{is_long:g,market_id:m,position_cap_id:M,deposits:S,borrows:A}=await this.getPositionInfo(i),{base_token:T,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(m),L=g&&e||!g&&!e,I=await this.createMarginTradingContext({market_id:m,position_cap_id:M,action:"top_up_collateral",coin_type:e?O:T,amount:o.toString()},c),N=this.extractOtherTokenTypes(S,A,T,O),{base_reserve_array_index:R,quote_reserve_array_index:F,reserve:q}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(T,O,void 0,N);await this._sdk.SuiLendModule.refreshReservePrices(c,q);let W;if(L){let j=await this._sdk.SwapModules.findRouters(e?O:T,e?T:O,o,!0,[a]),Z=D.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),e?O:T,c);W=await this._sdk.SwapModules.routerSwap({router:j?.route_obj,input_coin:Z,slippage:d,txb:c})}else W=D.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),e?O:T,c);return await this.depositToLeveragePosition({is_long:g,market_id:m,position_cap_id:M,deposit_reserve_array_index:g?R:F,input_coin:W,margin_trading_context:I,base_token:T,quote_token:O},c),await this.marginTradingContextConfirm(I,c),c};this.positionWithdrawCToken=async r=>{let{position_id:i,amount:o,is_quote:e,swap_clmm_pool:a="",slippage:d}=r,c=new se.Transaction,{is_long:g,market_id:m,position_cap_id:M,deposits:S,borrows:A}=await this.getPositionInfo(i),{base_token:T,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(m),L=g&&e||!g&&!e,I=await this.createMarginTradingContext({market_id:m,position_cap_id:M,action:"withdraw_collateral",coin_type:e?O:T,amount:o.toString()},c),N=this.extractOtherTokenTypes(S,A,T,O),{base_reserve_array_index:R,quote_reserve_array_index:F,reserve:q}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(T,O,void 0,N);await this._sdk.SuiLendModule.refreshReservePrices(c,q);let W=await this._sdk.SuiLendModule.getLatestPriceFeeds(q,!0),j=W[(0,D.removeHexPrefix)(O)]?.price,Z=W[(0,D.removeHexPrefix)(T)]?.price,w=g?(0,D.d)(j).div((0,D.d)(Z)).toString():(0,D.d)(Z).div((0,D.d)(j)).toString(),b=q[0].mintDecimals,k=q[1].mintDecimals,x=L?(0,D.d)(o).mul(w).div(10**(e?k:b)).mul(10**(g?b:k)).toDP(0,mt.ROUND_DOWN).toString():o.toString(),C=this.withdrawAsset({market_id:m,position_cap_id:M,withdraw_amount:x,withdraw_reserve_array_index:g?R:F,withdraw_coin_type:g?T:O,margin_trading_context:I},c);if(L){let p=await this._sdk.SwapModules.findRouters(g?T:O,e?O:T,x,!0,[a]),t=await this._sdk.SwapModules.routerSwap({router:p?.route_obj,input_coin:C,slippage:d,txb:c});t&&c.transferObjects([t],this._sdk.getSenderAddress())}else c.transferObjects([C],this._sdk.getSenderAddress());return await this.marginTradingContextConfirm(I,c),c};this.positionClaim=async r=>{let i=new se.Transaction,{position_cap_id:o,obligation_owner_cap:e,market_id:a,claimable_rewards:d}=await this.getPositionInfo(r);console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1650 ~ PositionModules ~ claimable_rewards:",d);let{suilend:c,margin_trading:g}=this._sdk.sdkOptions,m=(0,D.getPackagerConfigs)(c).lending_market_id,M=(0,D.getPackagerConfigs)(c).lending_market_type,{global_config_id:S,versioned_id:A}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);for(let T=0;T<d.length;T++){let O=await this.createMarginTradingContext({market_id:a,position_cap_id:o,action:"claim_reward",coin_type:d[T].coinType,amount:(0,D.d)(d[T].earnedRewards).toFixed(0)},i),L=i.moveCall({target:`${g.published_at}::router::claim_rewards`,arguments:[O,i.object(S),i.object(m),i.object(a),i.object(o),i.pure.u64(d[T].reserveArrayIndex.toString()),i.pure.u64(d[T].rewardIndex.toString()),i.pure.bool(d[T].reserveType==="deposit"),i.object(D.CLOCK_ADDRESS),i.object(A)],typeArguments:[M,d[T].coinType]});i.transferObjects([L],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(O,i)}return i};this.calculatePositionDeposit=async r=>{let{is_quote:i,is_long:o,amount:e,swap_clmm_pool:a="",leverage:d,by_amount_in:c=!0,base_token:g,quote_token:m,is_submit:M=!1,is_open:S=!0,position_id:A}=r,T=[],O=[],L=[];if(!S&&A){let{deposits:rt,borrows:G}=await this.getPositionInfo(A);O=rt,L=G,T=this.extractOtherTokenTypes(O,L,g,m)}let{reserve:I,base_reserve_array_index:N,quote_reserve_array_index:R}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(g,m,void 0,T),F=I[0].mintDecimals,q=I[1].mintDecimals,W=e.toString(),j=o&&i||!o&&!i,Z=await this._sdk.SuiLendModule.getLatestPriceFeedsByCoinTypes([g,m]),w=Z&&Z[m]?.price,b=Z&&Z[g]?.price;if(!w||!b)throw Yt("PriceNotFound","Price not found");if(j&&M){let rt=o?(0,D.d)(w).div((0,D.d)(b)).toString():(0,D.d)(b).div((0,D.d)(w)).toString();W=(0,D.d)(e).mul(rt).div(10**(i?q:F)).mul(10**(o?F:q)).toString(),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:492 ~ PositionModules ~ initDepositAmount:",{initDepositAmount:W,rate:rt})}else if(j&&!M){let rt=o?m:g,G=o?g:m;W=(await this._sdk.SwapModules.findRouters(rt,G,W,!0,[a]))?.amount_out.toString()}else W=e;let{base_price:k,quote_price:x,flash_amount:C,flash_loan_fee:p,flash_loan_coin:t,is_flash_a:s,clmm_pool:u,clmm_fee_tier:f,clmm_pool_coin_type_a:h,clmm_pool_coin_type_b:v}=await this._sdk.SwapModules.calculateFlashLoan({is_long:o,leverage:d,base_token:g,quote_token:m,deposit_amount:W,reserve:I,base_token_decimal:F,quote_token_decimal:q}),P=await this._sdk.SwapModules.findRouters(o?m:g,o?g:m,C.toString(),!0,[a]),_=(0,D.d)(W).add((0,D.d)(P?.amount_out.toString())).toDP(0,mt.ROUND_DOWN).toString(),l=(0,D.d)(_).mul(o?k:x).toString(),y=(0,D.d)(C).add(p).toDP(0,mt.ROUND_UP).toString(),U=(0,D.d)(y).mul(o?x:k).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1575 ~ PositionModules ~ depositAmount:",{depositAmount:_,borrowAmount:y});let B=i?(0,D.d)(e).div(10**(i?q:F)).mul(10**F).mul(d).div(k).toDP(0,mt.ROUND_DOWN).toString():(0,D.d)(e).mul(d).toDP(0,mt.ROUND_DOWN).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1583 ~ PositionModules ~ leverageDepositAmount:",B);let $="0",K="0",V="0",J="0";return!S&&A&&(L&&L.length>0&&($=(0,D.d)(L[0].borrowedAmount.toString()).mul(o?10**q:10**F).add((0,D.d)(y)).toString(),K=(0,D.d)($).mul(o?w:b).toString()),V=(0,D.d)(O[0].depositedAmount.toString()).mul(o?10**F:10**q).add((0,D.d)(_)).toString(),J=(0,D.d)(V).mul(o?b:w).toString()),{routers:P,leverage_deposit_amount:B,quote_price:x,base_price:k,clmm_fee_tier:f,flash_loan_fee:p,flash_loan_coin:t,deposit_amount:_,borrow_amount:y,deposit_amount_usd:l,borrow_amount_usd:U,after_borrow_amount:$,after_borrow_amount_usd:K,after_deposit_amount:V,after_deposit_amount_usd:J,flash_amount:C,is_flash_a:s,init_deposit_amount:W,clmm_pool_coin_type_a:h,clmm_pool_coin_type_b:v,clmm_pool:u,base_reserve_array_index:N,quote_reserve_array_index:R,reserve:I,has_swap:j}};this.calculatePositionWithdraw=async r=>{let{position_id:i,is_quote:o,swap_clmm_pool:e="",amount:a,leverage:d,slippage:c,withdraw_max:g}=r,{deposits:m,borrows:M,origin_obligation:S,position_cap_id:A,market_id:T,is_long:O}=await this.getPositionInfo(i),{base_token:L,quote_token:I}=await this._sdk.MarketModules.getMarketInfo(T),N=i?this.extractOtherTokenTypes(m,M,L,I):[],{reserve:R,base_reserve_map_info:F,quote_reserve_map_info:q}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(L,I,void 0,N),W=R[0].mintDecimals,j=R[1].mintDecimals,Z=O?F.cTokenExchangeRate:q.cTokenExchangeRate,w=await this._sdk.SuiLendModule.getLatestPriceFeeds(R,!0),b=w[(0,D.removeHexPrefix)(I)]?.price,k=w[(0,D.removeHexPrefix)(L)]?.price,x=(0,D.d)(0),C;O?(x=(0,D.d)(o?(0,D.d)(a).mul(b).toString():(0,D.d)(a).mul(k).toString()).div(o?10**j:10**W),C=o?(0,D.d)(a).div(k).div(10**j).mul(10**W).toString():(0,D.d)(a)):(x=(0,D.d)(o?(0,D.d)(a).mul(b).toString():(0,D.d)(a).mul(k).toString()).div(o?10**j:10**W),C=o?(0,D.d)(a):(0,D.d)(a).mul(k).div(10**W).mul(10**j).toString());let p=(0,D.d)(m[0].depositedAmountUsd.toString()).sub((0,D.d)(M&&M.length>0?M[0].borrowedAmountUsd.toString():"0")).toString(),t=x.div((0,D.d)(p)),s=g||(0,D.d)(t).gte(1),u,f=new mt(0);S&&S.borrows&&S.borrows.length>0&&(u=(0,Mr.compoundDebt)(S.borrows[0],O?R[1]:R[0]),f=(0,D.d)(u.borrowedAmount.value.toString()).div(10**18).toDP(0,mt.ROUND_UP));let h=f.mul(s?1:t).toDP(0,mt.ROUND_UP).toString(),v=h.toString(),P,_,l,y,U,B;if((0,D.d)(h).gt(0)){let{clmm_pool_coin_type_a:ie,clmm_pool_coin_type_b:at,clmm_fee_tier:nt,clmm_pool:De}=await this._sdk.SwapModules.getFlashLoanPool(O?I:L,v);U=ie||"",B=at||"",l=nt||0,y=De||"",P=(0,D.d)(v).mul(nt).toString(),_=(0,D.d)(v).mul((0,D.d)(1).add(nt)).toDP(0,mt.ROUND_UP).toString()}let $=O&&o||!O&&!o,K,V;if($){let ie=(0,D.d)(m[0].depositedAmount.toString()).mul(10**(O?W:j)).mul(s?1:t).toDP(0,mt.ROUND_DOWN).toString();K=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,O?I:L,ie,!0,[e])}else{let ie=m[0].reserve.coinType==="0x0041f9f9344cac094454cd574e333c4fdb132d7bcc9379bcd4aab485b2a63942::wbtc::WBTC"?.01:.0025;V=(0,D.d)(h).mul(O?b:k).div(10**(O?j:W)).mul(10**(O?W:j)).div(O?k:b).mul((0,D.d)(1).add(ie)).toDP(0,mt.ROUND_DOWN).toString(),K=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,O?I:L,V.toString(),!0,[e]),s||(h=(0,D.d)(K?.amount_out.toString()).mul((0,D.d)(1).sub(c)).toDP(0,mt.ROUND_DOWN).toString())}C=(0,D.d)(C).mul(d).toDP(0,mt.ROUND_DOWN).toString(),x=(0,D.d)(x).mul(d);let J=f.mul((0,D.d)(1).sub(t)).toString(),rt=(0,D.d)(J).mul(O?b:k).toString(),G=(0,D.d)(m[0].depositedAmount.toString()).mul(O?10**W:10**j).sub((0,D.d)(C)).toString(),et=(0,D.d)(G).mul(O?k:b).toString(),ht=(0,D.d)(K?.amount_in.toString()).toString(),tt=(0,D.d)(K?.amount_out.toString()).toString(),X=(0,D.d)(C).div(Z.toString()).toDP(0,mt.ROUND_DOWN).toString(),me=(0,D.d)(rt).div((0,D.d)(10**(O?j:W))),ut=(0,D.d)(et).div((0,D.d)(10**(O?W:j))),st=!0;if(M.length>0){let ie=(0,D.d)(M[0].borrowedAmountUsd.toString()),at=ie.div(ut).toString(),nt=(0,D.d)(m[0].reserve.config.openLtvPct).mul((0,D.d)(.95)).div(100).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1459 ~ PositionModules ~ afterLTV:",{afterLTV:at,ltv:nt,afterDepositAmount:G,afterDepositAmountUSD:ut,afterBorrowAmount:J,afterBorrowAmountUSD:me,withdrawAmount:C,currentBorrowAmountUSD:ie}),(0,D.d)(at).lte(nt)&&(st=!1)}return{amount_in:ht,amount_out:tt,from:m[0].reserve.coinType,to:O?L:I,after_borrow_amount:J,after_borrow_amount_usd:rt,after_deposit_amount:G,after_deposit_amount_usd:et,flash_loan_fee:P,clmm_fee_tier:l,withdraw_amount:C,withdraw_ctoken_amount:X,repay_amount:h,ratio:t,is_close:s,is_long:O,deposits:m,borrows:M,reserve:R,base_token:L,quote_token:I,clmm_pool:y,clmm_pool_coin_type_a:U,clmm_pool_coin_type_b:B,position_cap_id:A,market_id:T,swap_convert_all:$,flash_loan_amount:v,routers:K,repay_flash_loan_amount:_,partial_amount_in:V,has_flash_loan:st}};this.calculatePositionLeverage=async r=>{let{position_id:i,current_leverage:o,target_leverage:e,swap_clmm_pool:a=""}=r,d=(0,D.d)(e).sub((0,D.d)(o)),c=d.gt(0),{borrows:g,deposits:m,is_long:M,position_cap_id:S,market_id:A}=await this.getPositionInfo(i),{base_token:T,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(A),L=this.extractOtherTokenTypes(m,g,T,O),{reserve:I}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(T,O,void 0,L),N=I[0].mintDecimals,R=I[1].mintDecimals,F=await this._sdk.SuiLendModule.getLatestPriceFeeds(I,!0),q=F[(0,D.removeHexPrefix)(O)]?.price,W=F[(0,D.removeHexPrefix)(T)]?.price,j=g.length>0,Z=m[0].depositedAmountUsd.toString(),w=m[0].depositedAmount.toString(),b=j?(0,D.d)(g[0].borrowedAmount.toString()).mul(10**(M?R:N)):(0,D.d)(0),k=j?g[0].borrowedAmountUsd.toString():(0,D.d)(0),x=j?(0,D.d)(g[0].reserve.config.borrowWeightBps.toString()).div(1e4).toString():"1",C=(0,D.d)(m[0].reserve.config.openLtvPct).mul((0,D.d)(.95)).div(100).div(x).toString(),p=(0,D.d)(Z).sub((0,D.d)(k)).mul(C).toString();if(c){let t=(0,D.d)(Z).div(o).mul(d),s=t.add(k).div(Z).toString(),u=t.div(M?q:W).mul(10**(M?R:N)).toDP(0,mt.ROUND_UP),f=(0,D.d)(s).gt(C),h=u,v=M?O:T,P=M?T:O,_=await this._sdk.SwapModules.findRouters(v,P,h.toString(),!0,[a]),l=(0,D.d)(_?.amount_out.toString()).toString(),y=(0,D.d)(l).mul(M?W:q).toString(),U,B,$,K,V,J="0",rt="0";if(f){let{clmm_pool_coin_type_a:X,clmm_pool_coin_type_b:me,clmm_pool:ut,clmm_fee_tier:st}=await this._sdk.SwapModules.getFlashLoanPool(v,h.toString());$=st,K=X,V=me,U=h.mul($).toString(),B=M?K==O:V==T,J=(0,D.d)(h).add(U).toDP(0,mt.ROUND_UP).toString(),rt=(0,D.d)(J).mul(M?q:W).toString()}else J=u.toString(),rt=t.toString();let G=(0,D.d)(w).add((0,D.d)(l).div(10**(M?N:R))).toString(),et=(0,D.d)(G).mul(M?W:q).toString(),ht=(0,D.d)(b).add((0,D.d)(J)).div(10**(M?R:N)).toString(),tt=(0,D.d)(ht).mul(M?q:W).toString();return{amount_in:_?.amount_in.toString(),amount_out:_?.amount_out.toString(),flash_loan_fee:U,deposit_amount:l,borrow_amount:J,deposit_amount_usd:y,borrow_amount_usd:rt,flash_loan_amount:h,base_token:T,quote_token:O,reserve:I,deposits:m,borrows:g,clmm_fee_tier:$,is_flash_loan:f,is_loan_a:B,clmm_pool_coin_type_a:K,clmm_pool_coin_type_b:V,after_deposit_amount:G,after_borrow_amount:ht,after_deposit_amount_usd:et,after_borrow_amount_usd:tt,position_cap_id:S,market_id:A,is_long:M,routers:_}}else{let s=(0,D.d)(Z).div(o).mul(d.abs()).div(M?q:W).mul(10**(M?R:N)).toDP(0,mt.ROUND_UP),u=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,g[0].reserve.coinType,s.toString(),!1,[a]),f=u?.amount_in.toString(),h=(0,D.d)(f).mul(M?W:q).div(10**(M?N:R)).toString(),v=(0,D.d)(Z).mul(C).toString(),P=(0,D.d)(k).div((0,D.d)(Z).sub((0,D.d)(h))).toString(),_=(0,D.d)(P).gt(C),l=s.toString(),y=(0,D.d)(l).mul(M?q:W).toString(),U=f,B=(0,D.d)(U).mul(M?W:q).toString(),$,K="",V="";if(_){let{clmm_pool_coin_type_a:ht,clmm_pool_coin_type_b:tt,clmm_pool:X,clmm_fee_tier:me}=await this._sdk.SwapModules.getFlashLoanPool(g[0].reserve.coinType,l.toString());$=me,K=ht,V=tt}let J=(0,D.d)(w).sub((0,D.d)(U).div(10**(M?N:R))).toString(),rt=(0,D.d)(J).mul(M?W:q).toString(),G=(0,D.d)(b).sub((0,D.d)(l)).div(10**(M?R:N)).toString(),et=(0,D.d)(G).mul(M?q:W).toString();return{amount_in:u?.amount_in.toString(),amount_out:u?.amount_out.toString(),deposit_amount:U,borrow_amount:l,deposit_amount_usd:B,borrow_amount_usd:y,base_token:T,quote_token:O,reserve:I,deposits:m,borrows:g,clmm_fee_tier:$,withdraw_ctoken_amount:f,is_flash_loan:_,clmm_pool_coin_type_a:K,clmm_pool_coin_type_b:V,after_deposit_amount:J,after_borrow_amount:G,after_deposit_amount_usd:rt,after_borrow_amount_usd:et,position_cap_id:S,market_id:A,is_long:M,routers:u}}};this.calculatePositionRepay=async r=>{let{position_id:i,amount:o,is_quote:e}=r,{borrows:a,deposits:d,is_long:c,market_id:g,position_cap_id:m}=await this._sdk.PositionModules.getPositionInfo(i),M=a[0].reserve.coinType,S=c?d[0].reserve.coinType:a[0].reserve.coinType,A=c?a[0].reserve.coinType:d[0].reserve.coinType,T,O=c?!e:e;return O&&(T=await this._sdk.SwapModules.findRouters(e?A:S,M,o,!0,[])),{routers:T,repay_coin_type:M,base_token:S,quote_token:A,is_long:c,borrows:a,deposits:d,market_id:g,position_cap_id:m,has_swap:O}};this._sdk=r}getObligationRewardsInfo(r,i){let o=[],e=new ft(10).pow(18),a={},d=Date.now();for(let g of i){let m=g.coinType,M=g.arrayIndex.toString(),S=g.depositsPoolRewardManager.poolRewards||[];for(let T of S){if(!T)continue;let O=T.id,L=T.coinType,I=parseInt(T.startTimeMs),N=parseInt(T.endTimeMs),R=d>=I&&d<N,F=T.mintDecimals,q=ft(T.cumulativeRewardsPerShare).times(10**F);a[O]={coinType:L,mintDecimals:F,isActive:R,reserveType:"deposit",reserveArrayIndex:M,reserveCoinType:m,globalCumulativePerShare:q,rewardIndex:T.rewardIndex,reserve:g}}let A=g.borrowsPoolRewardManager.poolRewards||[];for(let T of A){if(!T)continue;let O=T.id,L=T.coinType,I=parseInt(T.startTimeMs),N=parseInt(T.endTimeMs),R=d>=I&&d<N,F=T.mintDecimals,q=ft(T.cumulativeRewardsPerShare).times(10**F);a[O]={coinType:L,mintDecimals:F,isActive:R,reserveType:"borrow",reserveCoinType:m,reserveArrayIndex:M,rewardIndex:T.rewardIndex,globalCumulativePerShare:q,reserve:g}}}let c=r.userRewardManagers;for(let g of c)for(let m=0;m<g.rewards.length;m++){let M=g.rewards[m];if(!M)continue;let S=a[M.poolRewardId];if(!S)continue;let A=S.globalCumulativePerShare,T=new ft(M.cumulativeRewardsPerShare.value.toString()).div(e),O=new ft(g.share).times(A.minus(T)),L=new ft(M.earnedRewards.value).div(e),I=new ft(L).plus(O),N=S.reserve.price,R=I.div(10**S.mintDecimals),F=N?R.times(N).toFixed(12):0;(0,D.d)(F).gt(0)&&o.push({poolRewardId:M.poolRewardId,coinType:S.coinType,earnedRewards:I.toString(),earnedRewardsUsd:F,earnedRewardsFormatted:R.toFixed(12),isActive:S.isActive,reserveType:S.reserveType,reserveCoinType:S.reserveCoinType,reserveArrayIndex:S.reserveArrayIndex,rewardIndex:S.rewardIndex,rewardInfo:S})}return o}createLeveragePosition(r){let{lending_market_id:i,lending_market_type:o}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:e,versioned_id:a}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),d=this._sdk.sdkOptions.margin_trading,{leverage:c,market_id:g,base_token:m,quote_token:M,is_long:S,init_deposit_amount:A,tx:T,init_coin_type:O}=r,[L,I]=T.moveCall({target:`${d.published_at}::router::open_position`,arguments:[T.object(e),T.object(g),T.object(i),T.pure.u64(A),T.pure.u64((0,D.d)(c).mul(1e4).toString()),T.object(D.CLOCK_ADDRESS),T.object(a)],typeArguments:[o,S?m:M,O]});return{position_cap:L,margin_trading_context:I}}async depositToLeveragePosition(r,i){let{margin_trading:o}=this._sdk.sdkOptions,{lending_market_type:e,lending_market_id:a}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{is_long:d,market_id:c,position_cap_id:g,position_cap:m,deposit_reserve_array_index:M,input_coin:S,margin_trading_context:A,base_token:T,quote_token:O}=r,{global_config_id:L,versioned_id:I}=(0,D.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);return i.moveCall({target:`${o.published_at}::router::deposit`,typeArguments:[e,d?T:O],arguments:[A,i.object(L),i.object(a),i.object(c),g?i.object(g):m,S,i.pure.u64(M),i.object(D.CLOCK_ADDRESS),i.object(I)]}),i}extractOtherTokenTypes(r,i,o,e){let a=[];return r.forEach(d=>{d.reserve.coinType!==o&&d.reserve.coinType!==e&&a.push(d.reserve.coinType)}),i.forEach(d=>{d.reserve.coinType!==o&&d.reserve.coinType!==e&&a.push(d.reserve.coinType)}),a}};var Pr=require("@suilend/sdk/client"),it=require("@suilend/sdk");var de=require("@suilend/sdk"),be=require("@suilend/sui-fe");var br=yi(require("crypto")),Je=new Uint8Array(256),Xe=Je.length;function Li(){return Xe>Je.length-16&&(br.default.randomFillSync(Je),Xe=0),Je.slice(Xe,Xe+=16)}var Vt=[];for(let n=0;n<256;++n)Vt.push((n+256).toString(16).slice(1));function yr(n,r=0){return Vt[n[r+0]]+Vt[n[r+1]]+Vt[n[r+2]]+Vt[n[r+3]]+"-"+Vt[n[r+4]]+Vt[n[r+5]]+"-"+Vt[n[r+6]]+Vt[n[r+7]]+"-"+Vt[n[r+8]]+Vt[n[r+9]]+"-"+Vt[n[r+10]]+Vt[n[r+11]]+Vt[n[r+12]]+Vt[n[r+13]]+Vt[n[r+14]]+Vt[n[r+15]]}var kr=yi(require("crypto")),Ni={randomUUID:kr.default.randomUUID};function qn(n,r,i){if(Ni.randomUUID&&!r&&!n)return Ni.randomUUID();n=n||{};let o=n.random||(n.rng||Li)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,r){i=i||0;for(let e=0;e<16;++e)r[i+e]=o[e];return r}return yr(o)}var Ye=qn;var Sr=require("@cetusprotocol/common-sdk"),Qe=10n;function Ii(n){return n.depositedAmount.eq(0)?new ft(0):n.borrowedAmount.div(n.depositedAmount).times(100)}function ti(n){let r=Ii(n);if(!r.gt(100))return(0,de.linearlyInterpolate)(n.config.interestRate,"utilPercent","aprPercent",r)}function Ei(n){let r=Ii(n),i=ti(n);if(!(i===void 0||r.gt(100)))return new ft(r.div(100)).times(i.div(100)).times(1-n.config.spreadFeeBps/1e4).times(100)}function Fn(n,r,i,o){let{api_url:e}=(0,Sr.getPackagerConfigs)(o.sdkOptions.suilend);n===de.Side.DEPOSIT&&([be.NORMALIZED_flSUI_COINTYPE,be.NORMALIZED_jugSUI_COINTYPE].includes(r.coinType)&&i.push({stats:{id:Ye(),isActive:!0,rewardIndex:-1,reserve:r,rewardCoinType:"LIQ_AG",mintDecimals:0,symbol:"LiqAg Points",iconUrl:`${e}/partners/LiqAg.png`,perDay:new ft(.036),side:de.Side.DEPOSIT},obligationClaims:{}}),r.coinType===be.NORMALIZED_LBTC_COINTYPE&&i.push({stats:{id:Ye(),isActive:!0,rewardIndex:-1,reserve:r,rewardCoinType:"LOMBARD",mintDecimals:0,symbol:"3x Lombard Lux",iconUrl:`${e}/partners/Lombard Lux.png`,perDay:new ft(0),side:de.Side.DEPOSIT},obligationClaims:{}}))}function Un(n,r,i){return{...n,depositedAmount:r===de.Side.DEPOSIT?ft.max(n.depositedAmount.plus(i),0):n.depositedAmount,borrowedAmount:r===de.Side.BORROW?ft.max(n.borrowedAmount.plus(i),0):n.borrowedAmount}}function jn(n,r,i){let o=n===de.Side.DEPOSIT?r.depositedAmount:r.borrowedAmount,e=n===de.Side.DEPOSIT?i.depositedAmount:i.borrowedAmount,a=e.eq(0)?new ft(-1):o.div(e);return{multiplier:a,isValid:!a.eq(-1)}}function $n(n,r,i,o){let e=n.map(d=>({...d,stats:{...d.stats,perDay:o?d.stats.perDay.times(i):void 0}})),a=r.map(d=>({...d,stats:{...d.stats,aprPercent:o?d.stats.aprPercent.times(i):void 0}}));return{newPerDayRewards:e,newAprRewards:a}}function Bi(n,r){if(!Qe)throw new Error("oraclePriceMultiplierDecimal is required");if(n===0n)throw new Error("Invalid oracle price");if(r<0n){let i=10n**(Qe- -r);return n*i}return n/10n**(r+Qe)}function Wn(n){return(0,be.formatLtvPercent)(new ft(n))}var Jt=require("@cetusprotocol/common-sdk"),qi=require("@mysten/sui/utils");var ei=class{constructor(r){this.getCoinAprByAmount=async(r,i,o)=>{let e=new ft(i.toString()),{allLendingMarketData:a,lstAprPercentMap:d}=await this.getLendingMarketData(!1);if(await this.getInitializeObligations({allLendingMarketData:a,lstAprPercentMap:d},!0),!a||!d)throw new Error("lendingMarketCache is not initialized");let c=Object.values(a??{})[0],g=c.lendingMarket.reserves.find(w=>w.coinType===r);if(!g)throw new Error("reserve not found");let M=(this.obligationsCache?.[c.lendingMarket.id]).rewardMap[g.token.coinType]?.[o]??[],S=(0,it.getFilteredRewards)(M),A=(0,it.getStakingYieldAprPercent)(o,g.coinType,d),T=o===it.Side.DEPOSIT?g.depositAprPercent:g.borrowAprPercent,O=T,L=new ft(1),I=!0;if(o!==void 0&&e!==void 0&&e.gt(0)){let w={...g,depositedAmount:o===it.Side.DEPOSIT?ft.max(g.depositedAmount.plus(o===it.Side.DEPOSIT?e:e.negated()),0):g.depositedAmount,borrowedAmount:o===it.Side.BORROW?ft.max(g.borrowedAmount.plus(o===it.Side.BORROW?e:e.negated()),0):g.borrowedAmount};O=o===it.Side.DEPOSIT?Ei(w):ti(w);let b=o===it.Side.DEPOSIT?g.depositedAmount:g.borrowedAmount,k=o===it.Side.DEPOSIT?w.depositedAmount:w.borrowedAmount;L=k.eq(0)?new ft(-1):b.div(k),I=!L.eq(-1)}let F=(0,it.getDedupedPerDayRewards)(S).map(w=>({...w,stats:{...w.stats,perDay:I?w.stats.perDay.times(L):void 0}})),W=(0,it.getDedupedAprRewards)(S).map(w=>({...w,stats:{...w.stats,aprPercent:I?w.stats.aprPercent.times(L):void 0}})),j=(0,it.getTotalAprPercent)(o,T,S,A),Z=O===void 0||W.some(w=>w.stats.aprPercent===void 0)?void 0:(0,it.getTotalAprPercent)(o,O,W,A);return console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:315 ~ SuiLendModule ~ newTotalAprPercent:",Z?.toString()),{new_total_apr_percent:Z?.toString(),total_apr_percent:j.toString()}};this.refreshReservePrice=async(r,i,o)=>{let{lending_market_id:e,lending_market_type:a}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),d=`${e}_${a}`;if(!this.suilendClientCache)throw new Error("suilendClientCache is not initialized");let c=await this.suilendClientCache[d].pythClient.getPriceFeedObjectId(i);this.suilendClientCache[d].refreshReservePrices(r,c,o)};this.getLatestPriceFeeds=async(r,i=!1)=>{let{lending_market_id:o,lending_market_type:e}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),a={},d=[];if(r.forEach(M=>{let S=this.sdk.getCache(`getLatestPrice_${M.coinType.name}`,i);S&&this.priceCheck(S,60)?a[M.coinType.name]=S:d.push(M.coinType.name)}),d.length==0)return a;let c=`${o}_${e}`;if(!this.suilendClientCache)throw new Error("suilendClient is not initialized");let g=Array.from(new Set(r.map(M=>M?.priceIdentifier?.bytes?(0,qi.toHEX)(new Uint8Array(M.priceIdentifier.bytes)):(0,Jt.removeHexPrefix)(M.priceIdentifier.toString()))));return(await this.suilendClientCache[c].pythConnection.getLatestPriceFeeds(g))?.forEach((M,S)=>{let A=M.getPriceUnchecked(),T=r[S];if(A){let{price:O,expo:L}=A,I=(0,Jt.d)(O).mul((0,Jt.d)(10).pow((0,Jt.d)(L))).toString(),N={coin_type:T.coinType.name||T.coinType,price:I,oracle_price:0n,last_update_time:A.publishTime};N.oracle_price=Bi(BigInt(O),BigInt(L)),a[T.coinType.name||T.coinType]=N,this.sdk.updateCache(`getLatestPrice_${N.coin_type}`,N)}}),a};this.getLatestPriceFeedsByCoinTypes=async(r,i=!1)=>{try{let{lending_market_id:o}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),{allLendingMarketData:e}=await this.getLendingMarketData(!1),a=[];return r.forEach(c=>{let g=e[o].reserveMap[c];a.push(g)}),await this.getLatestPriceFeeds(a,i)}catch(o){Yt("FetchError",o);return}};this.getSuiLendReserveInfo=async(r,i,o,e)=>{let{lending_market_id:a}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend);o||(o=(await this.getLendingMarketData(!1)).allLendingMarketData);let d=o[a].reserveMap[r],c=o[a].reserveMap[i],g=o[a].refreshedRawReserves.filter(T=>T.coinType.name==(0,Jt.removeHexPrefix)(r)),m=o[a].refreshedRawReserves.filter(T=>T.coinType.name==(0,Jt.removeHexPrefix)(i)),M=o[a].reserveMap[r],S=o[a].reserveMap[i],A=[];return e&&e.forEach(T=>{let O=o[a].refreshedRawReserves.filter(L=>L.coinType.name==(0,Jt.removeHexPrefix)(T));A.push(...O)}),{base_reserve_array_index:d.arrayIndex.toString(),quote_reserve_array_index:c.arrayIndex.toString(),reserve:[g[0],m[0],...A],base_reserve_map_info:M,quote_reserve_map_info:S}};this.refreshReservePrices=async(r,i)=>{for(let o=0;o<i.length;o++){let e=(0,qi.toHEX)(new Uint8Array(i[o].priceIdentifier.bytes));await this.refreshReservePrice(r,e,BigInt(i[o].arrayIndex))}};this.refreshReservePricesV2=async(r,i)=>{for(let o=0;o<i.length;o++){let e=i[o].priceIdentifier.toString();await this.refreshReservePrice(r,e,BigInt(i[o].arrayIndex))}};this.sdk=r}async getSuilendClient(r,i){let o=`${r}_${i}`;return this.suilendClientCache||(this.suilendClientCache={}),this.suilendClientCache[o]||(this.suilendClientCache[o]=await Pr.SuilendClient.initialize(r,i,this.sdk.FullClient,!0)),this.suilendClientCache[o]}async getLendingMarketData(r=!0){let i="lendingMarketData",o=this.sdk.getCache(i,r);if(o)return o;let e=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend)?.lending_market||[];if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:67 ~ SuiLendModule ~ getLendingMarketData ~ lendingMarkets:",e),!e.length)return console.warn("\u26A0\uFE0F No lending markets configured."),{};try{let[a,d]=await Promise.all([(async()=>Object.fromEntries(await Promise.all(e.map(async g=>{let m=await this.getSuilendClient(g.id,g.type),{lendingMarket:M,coinMetadataMap:S,refreshedRawReserves:A,reserveMap:T,reserveCoinTypes:O,reserveCoinMetadataMap:L,rewardCoinTypes:I,activeRewardCoinTypes:N,rewardCoinMetadataMap:R}=await(0,it.initializeSuilend)(this.sdk.FullClient,m),{rewardPriceMap:F}=await(0,it.initializeSuilendRewards)(T,N);return[g.id,{suilendClient:m,lendingMarket:M,coinMetadataMap:S,refreshedRawReserves:A,reserveMap:T,reserveCoinTypes:O,reserveCoinMetadataMap:L,rewardPriceMap:F,rewardCoinTypes:I,activeRewardCoinTypes:N,rewardCoinMetadataMap:R}]}))))(),(async()=>{try{let c=await fetch(`${this.sdk.sdkOptions?.suilend?.config?.api_url}/springsui/apy`),g=await c.json();if(c?.statusCode===500)throw new Error("Failed to fetch SpringSui LST APRs");return Object.fromEntries(Object.entries(g).map(([m,M])=>[m,new ft(M)]))}catch(c){return console.error(c),{}}})()]);return this.sdk.updateCache(i,{allLendingMarketData:a,lstAprPercentMap:d},30*1e3),{allLendingMarketData:a,lstAprPercentMap:d}}catch(a){throw console.log("\u{1F680} getLendingMarketData error:",a),a}}async getInitializeObligations(r,i=!1){if(!i&&this.obligationsCache)return this.obligationsCache;r||(r=await this.getLendingMarketData(!1));let o={};for(let e of Object.values(r.allLendingMarketData)){let{obligationOwnerCaps:a,obligations:d}=await(0,it.initializeObligations)(this.sdk.FullClient,e.suilendClient,e.refreshedRawReserves,e.reserveMap,this.sdk.senderAddress);d.length>0&&console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:181 ~ SuiLendModule ~ getInitializeObligations ~ obligations:",d[0].original.allowedBorrowValueUsd.value.toString());let c=(0,it.formatRewards)(e.reserveMap,e.rewardCoinMetadataMap,e.rewardPriceMap,d);o[e.lendingMarket.id]={obligationOwnerCaps:a,obligations:d,rewardMap:c}}return this.obligationsCache=o,this.obligationsCache}async getSuiLendUserData(r,i=!1){let{allLendingMarketData:o,lstAprPercentMap:e}=await this.getLendingMarketData(!1),a=await this.getInitializeObligations({allLendingMarketData:o,lstAprPercentMap:e},!1),{lending_market_id:d}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),c=a[d];if(!c)throw new Error(`No user data found for lending market: ${d}`);let g=c.obligations.find(M=>M.id===r);if(!g)throw new Error(`Obligation not found: ${r}`);let m=(0,it.getNetAprPercent)(g,c.rewardMap,e??{});return{obligation:g,netAprPercent:m,deposits:g.deposits,borrowedAmount:g.borrowedAmount,depositedAmount:g.depositedAmount,netValueUsd:g.netValueUsd,rewardMap:c.rewardMap}}priceCheck(r,i=60){let o=Math.floor(Date.now()/1e3);if(!(Math.abs(o-r.last_update_time)>i))return r}};var xr=require("@mysten/sui/transactions"),Ui=yi(Cr()),lt=require("@cetusprotocol/common-sdk");var ii=class{constructor(r){this.routerSwap=async r=>{let{slippage:i,txb:o,input_coin:e,router:a}=r,d=o||new xr.Transaction;if(a)return await this._sdk.AggregatorClient.routerSwap({router:a,inputCoin:e,slippage:i,txb:d})};this.flashLoan=r=>{console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:183 ~ SwapModules ~ params:",r);let{clmm_pool:i}=this._sdk.ClmmSDK.sdkOptions,{global_config_id:o}=(0,lt.getPackagerConfigs)(this._sdk.ClmmSDK.sdkOptions.clmm_pool),{amount:e,clmm_pool:a,clmm_pool_coin_type_a:d,clmm_pool_coin_type_b:c,flash_loan_coin:g,tx:m}=r,M=(0,lt.addHexPrefix)(d)===g;console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:188 ~ SwapModules ~ isLoanA:",M);let[S,A,T]=m.moveCall({target:`${i.published_at}::pool::flash_loan`,arguments:[m.object(o),m.object(a),m.pure.bool(M),m.pure.u64(e.toString())],typeArguments:[d,c]});return{balance_a:S,balance_b:A,receipt:T,is_loan_a:M,loan_coin_type:M?d:c}};this.getFlashLoanPool=async(r,i)=>{console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:201 ~ SwapModules ~ flash_amount:",i,r);try{let o=await fetch(`https://api-sui.cetus.zone/v3/sui/margin_trading/pools?coin_type=${r}&min_amount=${i}`),{data:e}=await o.json();return console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:206 ~ SwapModules ~ data:",e),e&&e.length>0?{clmm_pool_coin_type_a:e[0].coin_type_a,clmm_pool_coin_type_b:e[0].coin_type_b,clmm_pool:e[0].pool_id,clmm_fee_tier:(0,lt.d)(e[0].fee_rate).div(1e6).toString()}:(Yt("FlashLoanPoolNotFound","FlashLoanPoolNotFound"),{clmm_pool_coin_type_a:"",clmm_pool_coin_type_b:"",clmm_pool:"",clmm_fee_tier:""})}catch(o){return Yt("FetchError",o),{clmm_pool_coin_type_a:"",clmm_pool_coin_type_b:"",clmm_pool:"",clmm_fee_tier:""}}};this.repayFlashLoan=r=>{let{clmm_pool:i}=this._sdk.ClmmSDK.sdkOptions,{global_config_id:o}=(0,lt.getPackagerConfigs)(this._sdk.ClmmSDK.sdkOptions.clmm_pool),{tx:e,repay_base:a,repay_quote:d,receipt:c,clmm_pool:g,clmm_pool_coin_type_a:m,clmm_pool_coin_type_b:M}=r;return e.moveCall({target:`${i.published_at}::pool::repay_flash_loan`,arguments:[e.object(o),e.object(g),a,d,c],typeArguments:[m,M]}),e};this._sdk=r}async findRouters(r,i,o,e,a){try{let d={from:r,target:i,amount:new Ui.default((0,lt.d)(o).toFixed(0).toString()),byAmountIn:e,depth:3},c=await this._sdk.AggregatorClient.findRouters(d);if(c?.error?.code===10001)return{...c,is_exceed:c.insufficientLiquidity};if(c?.insufficientLiquidity)return{...c,is_exceed:c.insufficientLiquidity};if(!c?.paths||c?.paths?.length===0)throw Error("Aggregator no router");return{amount_in:c.amountIn.toString(),amount_out:c.amountOut.toString(),is_exceed:c.insufficientLiquidity,route_obj:c,by_amount_in:!0,origin_res:c}}catch{try{if(a){let c=await this._sdk.AggregatorClient.swapInPools({from:r,target:i,amount:new Ui.default((0,lt.d)(o).toFixed(0).toString()),byAmountIn:e,pools:a});return c?{amount_in:c.routeData.amountIn.toString(),amount_out:c.routeData.amountOut.toString(),is_exceed:c.isExceed,route_obj:c.routeData,by_amount_in:!0,origin_res:c}:null}return null}catch{return null}}}async handleSwapLogic(r){let{is_long:i,is_quote:o,amount:e,base_token:a,quote_token:d,swap_clmm_pool:c="",slippage:g,tx:m}=r,M=i&&o||!i&&!o,S,A,T=e;if(M){let O=i&&o?d:a,L=i&&o?a:d,I=await this.findRouters(O,L,e,!0,[c]);if(T=I?.amount_out.toString(),I){let N=lt.CoinAssist.buildCoinWithBalance(BigInt(e),O,m);A=await this.routerSwap({router:I.route_obj,slippage:g,input_coin:N,txb:m}),S=A}}else S=lt.CoinAssist.buildCoinWithBalance(BigInt(e.toString()),o?d:a,m);return{has_swap:M,input_coin:S,init_deposit_amount:T}}async handleSwap(r){let{swap_clmm_pool:i="",slippage:o,amount:e,from:a,to:d,tx:c,input_coin:g}=r,m=await this.findRouters(a,d,e,!0,[i]),M=m.amount_out.toString();return{swap_out_coin:await this.routerSwap({router:m.route_obj,slippage:o,input_coin:g||lt.CoinAssist.buildCoinWithBalance(BigInt(e),a,c),txb:c}),amount_out:M}}async calculateFlashLoan(r){let{is_long:i,leverage:o,base_token:e,quote_token:a,deposit_amount:d,reserve:c,base_token_decimal:g,quote_token_decimal:m}=r,M=await this._sdk.SuiLendModule.getLatestPriceFeeds(c),S=M&&M[(0,lt.removeHexPrefix)(a)]?.price,A=M&&M[(0,lt.removeHexPrefix)(e)]?.price,T=i?(0,lt.d)(A).div((0,lt.d)(S)).toString():(0,lt.d)(S).div((0,lt.d)(A)).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:267 ~ SwapModules ~ calculateFlashLoan ~ deposit_amount:",d,T,g,m);let O=(0,lt.d)(d).mul((0,lt.d)(o).sub(1)).mul(T).div(10**(i?g:m)).mul(10**(i?m:g)).toDP(0,mt.ROUND_UP).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:274 ~ SwapModules ~ calculateFlashLoan ~ flashAmount:",(0,lt.d)(d).mul((0,lt.d)(o).sub(1)).mul(T).div(10**(i?g:m)).mul(10**(i?m:g)).toString(),O);let L=i?a:e,{clmm_pool_coin_type_a:I,clmm_fee_tier:N,clmm_pool:R,clmm_pool_coin_type_b:F}=await this.getFlashLoanPool(L,O),q=I===L,W=(0,lt.d)(O).mul(N).toString();return{flash_amount:O,rate:T,quote_price:S,base_price:A,flash_loan_coin:L,is_flash_a:q,flash_loan_fee:W,clmm_pool:R,clmm_pool_coin_type_a:I,clmm_pool_coin_type_b:F,clmm_fee_tier:N}}};var Te=class n extends Rr.SdkWrapper{constructor(r,i){super(r),this._suilendModule=new ei(this),this._permissionModules=new qe(this),this._marketModules=new Be(this),this._positionModules=new Ve(this),this._swapModules=new ii(this),this._aggregatorClient=new xe.AggregatorClient({signer:(0,Dr.normalizeSuiAddress)("0x0"),client:r.sui_client||new Tr.SuiClient({url:r.full_rpc_url}),env:r.env==="testnet"?xe.Env.Testnet:xe.Env.Mainnet}),this._clmmSDK=i||Lr.CetusClmmSDK.createSDK({env:r.env,full_rpc_url:r.full_rpc_url}),this._pythConnection=new Or.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:30*1e3})}get SuiLendModule(){return this._suilendModule}get PermissionModules(){return this._permissionModules}get MarketModules(){return this._marketModules}get PositionModules(){return this._positionModules}get SwapModules(){return this._swapModules}get AggregatorClient(){return this._aggregatorClient}get ClmmSDK(){return this._clmmSDK}get PythConnection(){return this._pythConnection}static createSDK(r){return n.createCustomSDK({...ki,...r})}static createCustomSDK(r){return new n(r)}};var Zn=Te;0&&(module.exports={CetusMarginTradingSDK,appendExtraRewards,calculateBorrowAprPercent,calculateDepositAprPercent,calculateUtilizationPercent,formatLtvPercentValue,getPriceWithFormattedDecimals,getRewardsAprMultiplier,getUpdatedReserve,margin_trading_mainnet,mergePositionData,oraclePriceMultiplierDecimal,updateRewardsWithMultiplier,wrapMarketInfo,wrapMarketPermissions,wrapPosition});
1
+ "use strict";var Nr=Object.create;var Oe=Object.defineProperty;var Er=Object.getOwnPropertyDescriptor;var Ir=Object.getOwnPropertyNames;var Br=Object.getPrototypeOf,qr=Object.prototype.hasOwnProperty;var Fr=(n,i)=>()=>(i||n((i={exports:{}}).exports,i),i.exports),Ur=(n,i)=>{for(var r in i)Oe(n,r,{get:i[r],enumerable:!0})},tr=(n,i,r,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of Ir(i))!qr.call(n,t)&&t!==r&&Oe(n,t,{get:()=>i[t],enumerable:!(o=Er(i,t))||o.enumerable});return n};var yi=(n,i,r)=>(r=n!=null?Nr(Br(n)):{},tr(i||!n||!n.__esModule?Oe(r,"default",{value:n,enumerable:!0}):r,n)),jr=n=>tr(Oe({},"__esModule",{value:!0}),n);var Cr=Fr((Ar,Fi)=>{"use strict";(function(n,i){"use strict";function r(p,e){if(!p)throw new Error(e||"Assertion failed")}function o(p,e){p.super_=e;var s=function(){};s.prototype=e.prototype,p.prototype=new s,p.prototype.constructor=p}function t(p,e,s){if(t.isBN(p))return p;this.negative=0,this.words=null,this.length=0,this.red=null,p!==null&&((e==="le"||e==="be")&&(s=e,e=10),this._init(p||0,e||10,s||"be"))}typeof n=="object"?n.exports=t:i.BN=t,t.BN=t,t.wordSize=26;var a;try{typeof window<"u"&&typeof window.Buffer<"u"?a=window.Buffer:a=require("buffer").Buffer}catch{}t.isBN=function(e){return e instanceof t?!0:e!==null&&typeof e=="object"&&e.constructor.wordSize===t.wordSize&&Array.isArray(e.words)},t.max=function(e,s){return e.cmp(s)>0?e:s},t.min=function(e,s){return e.cmp(s)<0?e:s},t.prototype._init=function(e,s,u){if(typeof e=="number")return this._initNumber(e,s,u);if(typeof e=="object")return this._initArray(e,s,u);s==="hex"&&(s=16),r(s===(s|0)&&s>=2&&s<=36),e=e.toString().replace(/\s+/g,"");var f=0;e[0]==="-"&&(f++,this.negative=1),f<e.length&&(s===16?this._parseHex(e,f,u):(this._parseBase(e,s,f),u==="le"&&this._initArray(this.toArray(),s,u)))},t.prototype._initNumber=function(e,s,u){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[e&67108863],this.length=1):e<4503599627370496?(this.words=[e&67108863,e/67108864&67108863],this.length=2):(r(e<9007199254740992),this.words=[e&67108863,e/67108864&67108863,1],this.length=3),u==="le"&&this._initArray(this.toArray(),s,u)},t.prototype._initArray=function(e,s,u){if(r(typeof e.length=="number"),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var f=0;f<this.length;f++)this.words[f]=0;var h,v,P=0;if(u==="be")for(f=e.length-1,h=0;f>=0;f-=3)v=e[f]|e[f-1]<<8|e[f-2]<<16,this.words[h]|=v<<P&67108863,this.words[h+1]=v>>>26-P&67108863,P+=24,P>=26&&(P-=26,h++);else if(u==="le")for(f=0,h=0;f<e.length;f+=3)v=e[f]|e[f+1]<<8|e[f+2]<<16,this.words[h]|=v<<P&67108863,this.words[h+1]=v>>>26-P&67108863,P+=24,P>=26&&(P-=26,h++);return this._strip()};function d(p,e){var s=p.charCodeAt(e);if(s>=48&&s<=57)return s-48;if(s>=65&&s<=70)return s-55;if(s>=97&&s<=102)return s-87;r(!1,"Invalid character in "+p)}function c(p,e,s){var u=d(p,s);return s-1>=e&&(u|=d(p,s-1)<<4),u}t.prototype._parseHex=function(e,s,u){this.length=Math.ceil((e.length-s)/6),this.words=new Array(this.length);for(var f=0;f<this.length;f++)this.words[f]=0;var h=0,v=0,P;if(u==="be")for(f=e.length-1;f>=s;f-=2)P=c(e,s,f)<<h,this.words[v]|=P&67108863,h>=18?(h-=18,v+=1,this.words[v]|=P>>>26):h+=8;else{var _=e.length-s;for(f=_%2===0?s+1:s;f<e.length;f+=2)P=c(e,s,f)<<h,this.words[v]|=P&67108863,h>=18?(h-=18,v+=1,this.words[v]|=P>>>26):h+=8}this._strip()};function g(p,e,s,u){for(var f=0,h=0,v=Math.min(p.length,s),P=e;P<v;P++){var _=p.charCodeAt(P)-48;f*=u,_>=49?h=_-49+10:_>=17?h=_-17+10:h=_,r(_>=0&&h<u,"Invalid character"),f+=h}return f}t.prototype._parseBase=function(e,s,u){this.words=[0],this.length=1;for(var f=0,h=1;h<=67108863;h*=s)f++;f--,h=h/s|0;for(var v=e.length-u,P=v%f,_=Math.min(v,v-P)+u,l=0,y=u;y<_;y+=f)l=g(e,y,y+f,s),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(P!==0){var U=1;for(l=g(e,y,e.length,s),y=0;y<P;y++)U*=s;this.imuln(U),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this._strip()},t.prototype.copy=function(e){e.words=new Array(this.length);for(var s=0;s<this.length;s++)e.words[s]=this.words[s];e.length=this.length,e.negative=this.negative,e.red=this.red};function m(p,e){p.words=e.words,p.length=e.length,p.negative=e.negative,p.red=e.red}if(t.prototype._move=function(e){m(e,this)},t.prototype.clone=function(){var e=new t(null);return this.copy(e),e},t.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},t.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{t.prototype[Symbol.for("nodejs.util.inspect.custom")]=M}catch{t.prototype.inspect=M}else t.prototype.inspect=M;function M(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var S=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(e,s){e=e||10,s=s|0||1;var u;if(e===16||e==="hex"){u="";for(var f=0,h=0,v=0;v<this.length;v++){var P=this.words[v],_=((P<<f|h)&16777215).toString(16);h=P>>>24-f&16777215,f+=2,f>=26&&(f-=26,v--),h!==0||v!==this.length-1?u=S[6-_.length]+_+u:u=_+u}for(h!==0&&(u=h.toString(16)+u);u.length%s!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}if(e===(e|0)&&e>=2&&e<=36){var l=A[e],y=D[e];u="";var U=this.clone();for(U.negative=0;!U.isZero();){var q=U.modrn(y).toString(e);U=U.idivn(y),U.isZero()?u=q+u:u=S[l-q.length]+q+u}for(this.isZero()&&(u="0"+u);u.length%s!==0;)u="0"+u;return this.negative!==0&&(u="-"+u),u}r(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var e=this.words[0];return this.length===2?e+=this.words[1]*67108864:this.length===3&&this.words[2]===1?e+=4503599627370496+this.words[1]*67108864:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-e:e},t.prototype.toJSON=function(){return this.toString(16,2)},a&&(t.prototype.toBuffer=function(e,s){return this.toArrayLike(a,e,s)}),t.prototype.toArray=function(e,s){return this.toArrayLike(Array,e,s)};var O=function(e,s){return e.allocUnsafe?e.allocUnsafe(s):new e(s)};t.prototype.toArrayLike=function(e,s,u){this._strip();var f=this.byteLength(),h=u||Math.max(1,f);r(f<=h,"byte array longer than desired length"),r(h>0,"Requested array length <= 0");var v=O(e,h),P=s==="le"?"LE":"BE";return this["_toArrayLike"+P](v,f),v},t.prototype._toArrayLikeLE=function(e,s){for(var u=0,f=0,h=0,v=0;h<this.length;h++){var P=this.words[h]<<v|f;e[u++]=P&255,u<e.length&&(e[u++]=P>>8&255),u<e.length&&(e[u++]=P>>16&255),v===6?(u<e.length&&(e[u++]=P>>24&255),f=0,v=0):(f=P>>>24,v+=2)}if(u<e.length)for(e[u++]=f;u<e.length;)e[u++]=0},t.prototype._toArrayLikeBE=function(e,s){for(var u=e.length-1,f=0,h=0,v=0;h<this.length;h++){var P=this.words[h]<<v|f;e[u--]=P&255,u>=0&&(e[u--]=P>>8&255),u>=0&&(e[u--]=P>>16&255),v===6?(u>=0&&(e[u--]=P>>24&255),f=0,v=0):(f=P>>>24,v+=2)}if(u>=0)for(e[u--]=f;u>=0;)e[u--]=0},Math.clz32?t.prototype._countBits=function(e){return 32-Math.clz32(e)}:t.prototype._countBits=function(e){var s=e,u=0;return s>=4096&&(u+=13,s>>>=13),s>=64&&(u+=7,s>>>=7),s>=8&&(u+=4,s>>>=4),s>=2&&(u+=2,s>>>=2),u+s},t.prototype._zeroBits=function(e){if(e===0)return 26;var s=e,u=0;return(s&8191)===0&&(u+=13,s>>>=13),(s&127)===0&&(u+=7,s>>>=7),(s&15)===0&&(u+=4,s>>>=4),(s&3)===0&&(u+=2,s>>>=2),(s&1)===0&&u++,u},t.prototype.bitLength=function(){var e=this.words[this.length-1],s=this._countBits(e);return(this.length-1)*26+s};function L(p){for(var e=new Array(p.bitLength()),s=0;s<e.length;s++){var u=s/26|0,f=s%26;e[s]=p.words[u]>>>f&1}return e}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,s=0;s<this.length;s++){var u=this._zeroBits(this.words[s]);if(e+=u,u!==26)break}return e},t.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},t.prototype.toTwos=function(e){return this.negative!==0?this.abs().inotn(e).iaddn(1):this.clone()},t.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},t.prototype.isNeg=function(){return this.negative!==0},t.prototype.neg=function(){return this.clone().ineg()},t.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},t.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var s=0;s<e.length;s++)this.words[s]=this.words[s]|e.words[s];return this._strip()},t.prototype.ior=function(e){return r((this.negative|e.negative)===0),this.iuor(e)},t.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},t.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},t.prototype.iuand=function(e){var s;this.length>e.length?s=e:s=this;for(var u=0;u<s.length;u++)this.words[u]=this.words[u]&e.words[u];return this.length=s.length,this._strip()},t.prototype.iand=function(e){return r((this.negative|e.negative)===0),this.iuand(e)},t.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},t.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},t.prototype.iuxor=function(e){var s,u;this.length>e.length?(s=this,u=e):(s=e,u=this);for(var f=0;f<u.length;f++)this.words[f]=s.words[f]^u.words[f];if(this!==s)for(;f<s.length;f++)this.words[f]=s.words[f];return this.length=s.length,this._strip()},t.prototype.ixor=function(e){return r((this.negative|e.negative)===0),this.iuxor(e)},t.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},t.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},t.prototype.inotn=function(e){r(typeof e=="number"&&e>=0);var s=Math.ceil(e/26)|0,u=e%26;this._expand(s),u>0&&s--;for(var f=0;f<s;f++)this.words[f]=~this.words[f]&67108863;return u>0&&(this.words[f]=~this.words[f]&67108863>>26-u),this._strip()},t.prototype.notn=function(e){return this.clone().inotn(e)},t.prototype.setn=function(e,s){r(typeof e=="number"&&e>=0);var u=e/26|0,f=e%26;return this._expand(u+1),s?this.words[u]=this.words[u]|1<<f:this.words[u]=this.words[u]&~(1<<f),this._strip()},t.prototype.iadd=function(e){var s;if(this.negative!==0&&e.negative===0)return this.negative=0,s=this.isub(e),this.negative^=1,this._normSign();if(this.negative===0&&e.negative!==0)return e.negative=0,s=this.isub(e),e.negative=1,s._normSign();var u,f;this.length>e.length?(u=this,f=e):(u=e,f=this);for(var h=0,v=0;v<f.length;v++)s=(u.words[v]|0)+(f.words[v]|0)+h,this.words[v]=s&67108863,h=s>>>26;for(;h!==0&&v<u.length;v++)s=(u.words[v]|0)+h,this.words[v]=s&67108863,h=s>>>26;if(this.length=u.length,h!==0)this.words[this.length]=h,this.length++;else if(u!==this)for(;v<u.length;v++)this.words[v]=u.words[v];return this},t.prototype.add=function(e){var s;return e.negative!==0&&this.negative===0?(e.negative=0,s=this.sub(e),e.negative^=1,s):e.negative===0&&this.negative!==0?(this.negative=0,s=e.sub(this),this.negative=1,s):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},t.prototype.isub=function(e){if(e.negative!==0){e.negative=0;var s=this.iadd(e);return e.negative=1,s._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var u=this.cmp(e);if(u===0)return this.negative=0,this.length=1,this.words[0]=0,this;var f,h;u>0?(f=this,h=e):(f=e,h=this);for(var v=0,P=0;P<h.length;P++)s=(f.words[P]|0)-(h.words[P]|0)+v,v=s>>26,this.words[P]=s&67108863;for(;v!==0&&P<f.length;P++)s=(f.words[P]|0)+v,v=s>>26,this.words[P]=s&67108863;if(v===0&&P<f.length&&f!==this)for(;P<f.length;P++)this.words[P]=f.words[P];return this.length=Math.max(this.length,P),f!==this&&(this.negative=1),this._strip()},t.prototype.sub=function(e){return this.clone().isub(e)};function E(p,e,s){s.negative=e.negative^p.negative;var u=p.length+e.length|0;s.length=u,u=u-1|0;var f=p.words[0]|0,h=e.words[0]|0,v=f*h,P=v&67108863,_=v/67108864|0;s.words[0]=P;for(var l=1;l<u;l++){for(var y=_>>>26,U=_&67108863,q=Math.min(l,e.length-1),$=Math.max(0,l-p.length+1);$<=q;$++){var K=l-$|0;f=p.words[K]|0,h=e.words[$]|0,v=f*h+U,y+=v/67108864|0,U=v&67108863}s.words[l]=U|0,_=y|0}return _!==0?s.words[l]=_|0:s.length--,s._strip()}var N=function(e,s,u){var f=e.words,h=s.words,v=u.words,P=0,_,l,y,U=f[0]|0,q=U&8191,$=U>>>13,K=f[1]|0,G=K&8191,J=K>>>13,rt=f[2]|0,V=rt&8191,et=rt>>>13,ft=f[3]|0,tt=ft&8191,X=ft>>>13,me=f[4]|0,dt=me&8191,st=me>>>13,ke=f[5]|0,nt=ke&8191,at=ke>>>13,de=f[6]|0,pt=de&8191,_t=de>>>13,ji=f[7]|0,wt=ji&8191,vt=ji>>>13,$i=f[8]|0,Mt=$i&8191,bt=$i>>>13,Wi=f[9]|0,yt=Wi&8191,kt=Wi>>>13,Zi=h[0]|0,St=Zi&8191,Pt=Zi>>>13,Ki=h[1]|0,At=Ki&8191,Ct=Ki>>>13,zi=h[2]|0,xt=zi&8191,Tt=zi>>>13,Gi=h[3]|0,Dt=Gi&8191,Ot=Gi>>>13,Hi=h[4]|0,Rt=Hi&8191,Lt=Hi>>>13,Vi=h[5]|0,Nt=Vi&8191,Et=Vi>>>13,Xi=h[6]|0,It=Xi&8191,Bt=Xi>>>13,Ji=h[7]|0,qt=Ji&8191,Ft=Ji>>>13,Yi=h[8]|0,Ut=Yi&8191,jt=Yi>>>13,Qi=h[9]|0,$t=Qi&8191,Wt=Qi>>>13;u.negative=e.negative^s.negative,u.length=19,_=Math.imul(q,St),l=Math.imul(q,Pt),l=l+Math.imul($,St)|0,y=Math.imul($,Pt);var ri=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ri>>>26)|0,ri&=67108863,_=Math.imul(G,St),l=Math.imul(G,Pt),l=l+Math.imul(J,St)|0,y=Math.imul(J,Pt),_=_+Math.imul(q,At)|0,l=l+Math.imul(q,Ct)|0,l=l+Math.imul($,At)|0,y=y+Math.imul($,Ct)|0;var ni=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ni>>>26)|0,ni&=67108863,_=Math.imul(V,St),l=Math.imul(V,Pt),l=l+Math.imul(et,St)|0,y=Math.imul(et,Pt),_=_+Math.imul(G,At)|0,l=l+Math.imul(G,Ct)|0,l=l+Math.imul(J,At)|0,y=y+Math.imul(J,Ct)|0,_=_+Math.imul(q,xt)|0,l=l+Math.imul(q,Tt)|0,l=l+Math.imul($,xt)|0,y=y+Math.imul($,Tt)|0;var oi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(oi>>>26)|0,oi&=67108863,_=Math.imul(tt,St),l=Math.imul(tt,Pt),l=l+Math.imul(X,St)|0,y=Math.imul(X,Pt),_=_+Math.imul(V,At)|0,l=l+Math.imul(V,Ct)|0,l=l+Math.imul(et,At)|0,y=y+Math.imul(et,Ct)|0,_=_+Math.imul(G,xt)|0,l=l+Math.imul(G,Tt)|0,l=l+Math.imul(J,xt)|0,y=y+Math.imul(J,Tt)|0,_=_+Math.imul(q,Dt)|0,l=l+Math.imul(q,Ot)|0,l=l+Math.imul($,Dt)|0,y=y+Math.imul($,Ot)|0;var si=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(si>>>26)|0,si&=67108863,_=Math.imul(dt,St),l=Math.imul(dt,Pt),l=l+Math.imul(st,St)|0,y=Math.imul(st,Pt),_=_+Math.imul(tt,At)|0,l=l+Math.imul(tt,Ct)|0,l=l+Math.imul(X,At)|0,y=y+Math.imul(X,Ct)|0,_=_+Math.imul(V,xt)|0,l=l+Math.imul(V,Tt)|0,l=l+Math.imul(et,xt)|0,y=y+Math.imul(et,Tt)|0,_=_+Math.imul(G,Dt)|0,l=l+Math.imul(G,Ot)|0,l=l+Math.imul(J,Dt)|0,y=y+Math.imul(J,Ot)|0,_=_+Math.imul(q,Rt)|0,l=l+Math.imul(q,Lt)|0,l=l+Math.imul($,Rt)|0,y=y+Math.imul($,Lt)|0;var ai=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ai>>>26)|0,ai&=67108863,_=Math.imul(nt,St),l=Math.imul(nt,Pt),l=l+Math.imul(at,St)|0,y=Math.imul(at,Pt),_=_+Math.imul(dt,At)|0,l=l+Math.imul(dt,Ct)|0,l=l+Math.imul(st,At)|0,y=y+Math.imul(st,Ct)|0,_=_+Math.imul(tt,xt)|0,l=l+Math.imul(tt,Tt)|0,l=l+Math.imul(X,xt)|0,y=y+Math.imul(X,Tt)|0,_=_+Math.imul(V,Dt)|0,l=l+Math.imul(V,Ot)|0,l=l+Math.imul(et,Dt)|0,y=y+Math.imul(et,Ot)|0,_=_+Math.imul(G,Rt)|0,l=l+Math.imul(G,Lt)|0,l=l+Math.imul(J,Rt)|0,y=y+Math.imul(J,Lt)|0,_=_+Math.imul(q,Nt)|0,l=l+Math.imul(q,Et)|0,l=l+Math.imul($,Nt)|0,y=y+Math.imul($,Et)|0;var li=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(li>>>26)|0,li&=67108863,_=Math.imul(pt,St),l=Math.imul(pt,Pt),l=l+Math.imul(_t,St)|0,y=Math.imul(_t,Pt),_=_+Math.imul(nt,At)|0,l=l+Math.imul(nt,Ct)|0,l=l+Math.imul(at,At)|0,y=y+Math.imul(at,Ct)|0,_=_+Math.imul(dt,xt)|0,l=l+Math.imul(dt,Tt)|0,l=l+Math.imul(st,xt)|0,y=y+Math.imul(st,Tt)|0,_=_+Math.imul(tt,Dt)|0,l=l+Math.imul(tt,Ot)|0,l=l+Math.imul(X,Dt)|0,y=y+Math.imul(X,Ot)|0,_=_+Math.imul(V,Rt)|0,l=l+Math.imul(V,Lt)|0,l=l+Math.imul(et,Rt)|0,y=y+Math.imul(et,Lt)|0,_=_+Math.imul(G,Nt)|0,l=l+Math.imul(G,Et)|0,l=l+Math.imul(J,Nt)|0,y=y+Math.imul(J,Et)|0,_=_+Math.imul(q,It)|0,l=l+Math.imul(q,Bt)|0,l=l+Math.imul($,It)|0,y=y+Math.imul($,Bt)|0;var ui=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ui>>>26)|0,ui&=67108863,_=Math.imul(wt,St),l=Math.imul(wt,Pt),l=l+Math.imul(vt,St)|0,y=Math.imul(vt,Pt),_=_+Math.imul(pt,At)|0,l=l+Math.imul(pt,Ct)|0,l=l+Math.imul(_t,At)|0,y=y+Math.imul(_t,Ct)|0,_=_+Math.imul(nt,xt)|0,l=l+Math.imul(nt,Tt)|0,l=l+Math.imul(at,xt)|0,y=y+Math.imul(at,Tt)|0,_=_+Math.imul(dt,Dt)|0,l=l+Math.imul(dt,Ot)|0,l=l+Math.imul(st,Dt)|0,y=y+Math.imul(st,Ot)|0,_=_+Math.imul(tt,Rt)|0,l=l+Math.imul(tt,Lt)|0,l=l+Math.imul(X,Rt)|0,y=y+Math.imul(X,Lt)|0,_=_+Math.imul(V,Nt)|0,l=l+Math.imul(V,Et)|0,l=l+Math.imul(et,Nt)|0,y=y+Math.imul(et,Et)|0,_=_+Math.imul(G,It)|0,l=l+Math.imul(G,Bt)|0,l=l+Math.imul(J,It)|0,y=y+Math.imul(J,Bt)|0,_=_+Math.imul(q,qt)|0,l=l+Math.imul(q,Ft)|0,l=l+Math.imul($,qt)|0,y=y+Math.imul($,Ft)|0;var ci=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(ci>>>26)|0,ci&=67108863,_=Math.imul(Mt,St),l=Math.imul(Mt,Pt),l=l+Math.imul(bt,St)|0,y=Math.imul(bt,Pt),_=_+Math.imul(wt,At)|0,l=l+Math.imul(wt,Ct)|0,l=l+Math.imul(vt,At)|0,y=y+Math.imul(vt,Ct)|0,_=_+Math.imul(pt,xt)|0,l=l+Math.imul(pt,Tt)|0,l=l+Math.imul(_t,xt)|0,y=y+Math.imul(_t,Tt)|0,_=_+Math.imul(nt,Dt)|0,l=l+Math.imul(nt,Ot)|0,l=l+Math.imul(at,Dt)|0,y=y+Math.imul(at,Ot)|0,_=_+Math.imul(dt,Rt)|0,l=l+Math.imul(dt,Lt)|0,l=l+Math.imul(st,Rt)|0,y=y+Math.imul(st,Lt)|0,_=_+Math.imul(tt,Nt)|0,l=l+Math.imul(tt,Et)|0,l=l+Math.imul(X,Nt)|0,y=y+Math.imul(X,Et)|0,_=_+Math.imul(V,It)|0,l=l+Math.imul(V,Bt)|0,l=l+Math.imul(et,It)|0,y=y+Math.imul(et,Bt)|0,_=_+Math.imul(G,qt)|0,l=l+Math.imul(G,Ft)|0,l=l+Math.imul(J,qt)|0,y=y+Math.imul(J,Ft)|0,_=_+Math.imul(q,Ut)|0,l=l+Math.imul(q,jt)|0,l=l+Math.imul($,Ut)|0,y=y+Math.imul($,jt)|0;var fi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(fi>>>26)|0,fi&=67108863,_=Math.imul(yt,St),l=Math.imul(yt,Pt),l=l+Math.imul(kt,St)|0,y=Math.imul(kt,Pt),_=_+Math.imul(Mt,At)|0,l=l+Math.imul(Mt,Ct)|0,l=l+Math.imul(bt,At)|0,y=y+Math.imul(bt,Ct)|0,_=_+Math.imul(wt,xt)|0,l=l+Math.imul(wt,Tt)|0,l=l+Math.imul(vt,xt)|0,y=y+Math.imul(vt,Tt)|0,_=_+Math.imul(pt,Dt)|0,l=l+Math.imul(pt,Ot)|0,l=l+Math.imul(_t,Dt)|0,y=y+Math.imul(_t,Ot)|0,_=_+Math.imul(nt,Rt)|0,l=l+Math.imul(nt,Lt)|0,l=l+Math.imul(at,Rt)|0,y=y+Math.imul(at,Lt)|0,_=_+Math.imul(dt,Nt)|0,l=l+Math.imul(dt,Et)|0,l=l+Math.imul(st,Nt)|0,y=y+Math.imul(st,Et)|0,_=_+Math.imul(tt,It)|0,l=l+Math.imul(tt,Bt)|0,l=l+Math.imul(X,It)|0,y=y+Math.imul(X,Bt)|0,_=_+Math.imul(V,qt)|0,l=l+Math.imul(V,Ft)|0,l=l+Math.imul(et,qt)|0,y=y+Math.imul(et,Ft)|0,_=_+Math.imul(G,Ut)|0,l=l+Math.imul(G,jt)|0,l=l+Math.imul(J,Ut)|0,y=y+Math.imul(J,jt)|0,_=_+Math.imul(q,$t)|0,l=l+Math.imul(q,Wt)|0,l=l+Math.imul($,$t)|0,y=y+Math.imul($,Wt)|0;var di=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(di>>>26)|0,di&=67108863,_=Math.imul(yt,At),l=Math.imul(yt,Ct),l=l+Math.imul(kt,At)|0,y=Math.imul(kt,Ct),_=_+Math.imul(Mt,xt)|0,l=l+Math.imul(Mt,Tt)|0,l=l+Math.imul(bt,xt)|0,y=y+Math.imul(bt,Tt)|0,_=_+Math.imul(wt,Dt)|0,l=l+Math.imul(wt,Ot)|0,l=l+Math.imul(vt,Dt)|0,y=y+Math.imul(vt,Ot)|0,_=_+Math.imul(pt,Rt)|0,l=l+Math.imul(pt,Lt)|0,l=l+Math.imul(_t,Rt)|0,y=y+Math.imul(_t,Lt)|0,_=_+Math.imul(nt,Nt)|0,l=l+Math.imul(nt,Et)|0,l=l+Math.imul(at,Nt)|0,y=y+Math.imul(at,Et)|0,_=_+Math.imul(dt,It)|0,l=l+Math.imul(dt,Bt)|0,l=l+Math.imul(st,It)|0,y=y+Math.imul(st,Bt)|0,_=_+Math.imul(tt,qt)|0,l=l+Math.imul(tt,Ft)|0,l=l+Math.imul(X,qt)|0,y=y+Math.imul(X,Ft)|0,_=_+Math.imul(V,Ut)|0,l=l+Math.imul(V,jt)|0,l=l+Math.imul(et,Ut)|0,y=y+Math.imul(et,jt)|0,_=_+Math.imul(G,$t)|0,l=l+Math.imul(G,Wt)|0,l=l+Math.imul(J,$t)|0,y=y+Math.imul(J,Wt)|0;var hi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(hi>>>26)|0,hi&=67108863,_=Math.imul(yt,xt),l=Math.imul(yt,Tt),l=l+Math.imul(kt,xt)|0,y=Math.imul(kt,Tt),_=_+Math.imul(Mt,Dt)|0,l=l+Math.imul(Mt,Ot)|0,l=l+Math.imul(bt,Dt)|0,y=y+Math.imul(bt,Ot)|0,_=_+Math.imul(wt,Rt)|0,l=l+Math.imul(wt,Lt)|0,l=l+Math.imul(vt,Rt)|0,y=y+Math.imul(vt,Lt)|0,_=_+Math.imul(pt,Nt)|0,l=l+Math.imul(pt,Et)|0,l=l+Math.imul(_t,Nt)|0,y=y+Math.imul(_t,Et)|0,_=_+Math.imul(nt,It)|0,l=l+Math.imul(nt,Bt)|0,l=l+Math.imul(at,It)|0,y=y+Math.imul(at,Bt)|0,_=_+Math.imul(dt,qt)|0,l=l+Math.imul(dt,Ft)|0,l=l+Math.imul(st,qt)|0,y=y+Math.imul(st,Ft)|0,_=_+Math.imul(tt,Ut)|0,l=l+Math.imul(tt,jt)|0,l=l+Math.imul(X,Ut)|0,y=y+Math.imul(X,jt)|0,_=_+Math.imul(V,$t)|0,l=l+Math.imul(V,Wt)|0,l=l+Math.imul(et,$t)|0,y=y+Math.imul(et,Wt)|0;var pi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(pi>>>26)|0,pi&=67108863,_=Math.imul(yt,Dt),l=Math.imul(yt,Ot),l=l+Math.imul(kt,Dt)|0,y=Math.imul(kt,Ot),_=_+Math.imul(Mt,Rt)|0,l=l+Math.imul(Mt,Lt)|0,l=l+Math.imul(bt,Rt)|0,y=y+Math.imul(bt,Lt)|0,_=_+Math.imul(wt,Nt)|0,l=l+Math.imul(wt,Et)|0,l=l+Math.imul(vt,Nt)|0,y=y+Math.imul(vt,Et)|0,_=_+Math.imul(pt,It)|0,l=l+Math.imul(pt,Bt)|0,l=l+Math.imul(_t,It)|0,y=y+Math.imul(_t,Bt)|0,_=_+Math.imul(nt,qt)|0,l=l+Math.imul(nt,Ft)|0,l=l+Math.imul(at,qt)|0,y=y+Math.imul(at,Ft)|0,_=_+Math.imul(dt,Ut)|0,l=l+Math.imul(dt,jt)|0,l=l+Math.imul(st,Ut)|0,y=y+Math.imul(st,jt)|0,_=_+Math.imul(tt,$t)|0,l=l+Math.imul(tt,Wt)|0,l=l+Math.imul(X,$t)|0,y=y+Math.imul(X,Wt)|0;var mi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(mi>>>26)|0,mi&=67108863,_=Math.imul(yt,Rt),l=Math.imul(yt,Lt),l=l+Math.imul(kt,Rt)|0,y=Math.imul(kt,Lt),_=_+Math.imul(Mt,Nt)|0,l=l+Math.imul(Mt,Et)|0,l=l+Math.imul(bt,Nt)|0,y=y+Math.imul(bt,Et)|0,_=_+Math.imul(wt,It)|0,l=l+Math.imul(wt,Bt)|0,l=l+Math.imul(vt,It)|0,y=y+Math.imul(vt,Bt)|0,_=_+Math.imul(pt,qt)|0,l=l+Math.imul(pt,Ft)|0,l=l+Math.imul(_t,qt)|0,y=y+Math.imul(_t,Ft)|0,_=_+Math.imul(nt,Ut)|0,l=l+Math.imul(nt,jt)|0,l=l+Math.imul(at,Ut)|0,y=y+Math.imul(at,jt)|0,_=_+Math.imul(dt,$t)|0,l=l+Math.imul(dt,Wt)|0,l=l+Math.imul(st,$t)|0,y=y+Math.imul(st,Wt)|0;var gi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(gi>>>26)|0,gi&=67108863,_=Math.imul(yt,Nt),l=Math.imul(yt,Et),l=l+Math.imul(kt,Nt)|0,y=Math.imul(kt,Et),_=_+Math.imul(Mt,It)|0,l=l+Math.imul(Mt,Bt)|0,l=l+Math.imul(bt,It)|0,y=y+Math.imul(bt,Bt)|0,_=_+Math.imul(wt,qt)|0,l=l+Math.imul(wt,Ft)|0,l=l+Math.imul(vt,qt)|0,y=y+Math.imul(vt,Ft)|0,_=_+Math.imul(pt,Ut)|0,l=l+Math.imul(pt,jt)|0,l=l+Math.imul(_t,Ut)|0,y=y+Math.imul(_t,jt)|0,_=_+Math.imul(nt,$t)|0,l=l+Math.imul(nt,Wt)|0,l=l+Math.imul(at,$t)|0,y=y+Math.imul(at,Wt)|0;var _i=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(_i>>>26)|0,_i&=67108863,_=Math.imul(yt,It),l=Math.imul(yt,Bt),l=l+Math.imul(kt,It)|0,y=Math.imul(kt,Bt),_=_+Math.imul(Mt,qt)|0,l=l+Math.imul(Mt,Ft)|0,l=l+Math.imul(bt,qt)|0,y=y+Math.imul(bt,Ft)|0,_=_+Math.imul(wt,Ut)|0,l=l+Math.imul(wt,jt)|0,l=l+Math.imul(vt,Ut)|0,y=y+Math.imul(vt,jt)|0,_=_+Math.imul(pt,$t)|0,l=l+Math.imul(pt,Wt)|0,l=l+Math.imul(_t,$t)|0,y=y+Math.imul(_t,Wt)|0;var wi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(wi>>>26)|0,wi&=67108863,_=Math.imul(yt,qt),l=Math.imul(yt,Ft),l=l+Math.imul(kt,qt)|0,y=Math.imul(kt,Ft),_=_+Math.imul(Mt,Ut)|0,l=l+Math.imul(Mt,jt)|0,l=l+Math.imul(bt,Ut)|0,y=y+Math.imul(bt,jt)|0,_=_+Math.imul(wt,$t)|0,l=l+Math.imul(wt,Wt)|0,l=l+Math.imul(vt,$t)|0,y=y+Math.imul(vt,Wt)|0;var vi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(vi>>>26)|0,vi&=67108863,_=Math.imul(yt,Ut),l=Math.imul(yt,jt),l=l+Math.imul(kt,Ut)|0,y=Math.imul(kt,jt),_=_+Math.imul(Mt,$t)|0,l=l+Math.imul(Mt,Wt)|0,l=l+Math.imul(bt,$t)|0,y=y+Math.imul(bt,Wt)|0;var Mi=(P+_|0)+((l&8191)<<13)|0;P=(y+(l>>>13)|0)+(Mi>>>26)|0,Mi&=67108863,_=Math.imul(yt,$t),l=Math.imul(yt,Wt),l=l+Math.imul(kt,$t)|0,y=Math.imul(kt,Wt);var bi=(P+_|0)+((l&8191)<<13)|0;return P=(y+(l>>>13)|0)+(bi>>>26)|0,bi&=67108863,v[0]=ri,v[1]=ni,v[2]=oi,v[3]=si,v[4]=ai,v[5]=li,v[6]=ui,v[7]=ci,v[8]=fi,v[9]=di,v[10]=hi,v[11]=pi,v[12]=mi,v[13]=gi,v[14]=_i,v[15]=wi,v[16]=vi,v[17]=Mi,v[18]=bi,P!==0&&(v[19]=P,u.length++),u};Math.imul||(N=E);function R(p,e,s){s.negative=e.negative^p.negative,s.length=p.length+e.length;for(var u=0,f=0,h=0;h<s.length-1;h++){var v=f;f=0;for(var P=u&67108863,_=Math.min(h,e.length-1),l=Math.max(0,h-p.length+1);l<=_;l++){var y=h-l,U=p.words[y]|0,q=e.words[l]|0,$=U*q,K=$&67108863;v=v+($/67108864|0)|0,K=K+P|0,P=K&67108863,v=v+(K>>>26)|0,f+=v>>>26,v&=67108863}s.words[h]=P,u=v,v=f}return u!==0?s.words[h]=u:s.length--,s._strip()}function B(p,e,s){return R(p,e,s)}t.prototype.mulTo=function(e,s){var u,f=this.length+e.length;return this.length===10&&e.length===10?u=N(this,e,s):f<63?u=E(this,e,s):f<1024?u=R(this,e,s):u=B(this,e,s),u};function F(p,e){this.x=p,this.y=e}F.prototype.makeRBT=function(e){for(var s=new Array(e),u=t.prototype._countBits(e)-1,f=0;f<e;f++)s[f]=this.revBin(f,u,e);return s},F.prototype.revBin=function(e,s,u){if(e===0||e===u-1)return e;for(var f=0,h=0;h<s;h++)f|=(e&1)<<s-h-1,e>>=1;return f},F.prototype.permute=function(e,s,u,f,h,v){for(var P=0;P<v;P++)f[P]=s[e[P]],h[P]=u[e[P]]},F.prototype.transform=function(e,s,u,f,h,v){this.permute(v,e,s,u,f,h);for(var P=1;P<h;P<<=1)for(var _=P<<1,l=Math.cos(2*Math.PI/_),y=Math.sin(2*Math.PI/_),U=0;U<h;U+=_)for(var q=l,$=y,K=0;K<P;K++){var G=u[U+K],J=f[U+K],rt=u[U+K+P],V=f[U+K+P],et=q*rt-$*V;V=q*V+$*rt,rt=et,u[U+K]=G+rt,f[U+K]=J+V,u[U+K+P]=G-rt,f[U+K+P]=J-V,K!==_&&(et=l*q-y*$,$=l*$+y*q,q=et)}},F.prototype.guessLen13b=function(e,s){var u=Math.max(s,e)|1,f=u&1,h=0;for(u=u/2|0;u;u=u>>>1)h++;return 1<<h+1+f},F.prototype.conjugate=function(e,s,u){if(!(u<=1))for(var f=0;f<u/2;f++){var h=e[f];e[f]=e[u-f-1],e[u-f-1]=h,h=s[f],s[f]=-s[u-f-1],s[u-f-1]=-h}},F.prototype.normalize13b=function(e,s){for(var u=0,f=0;f<s/2;f++){var h=Math.round(e[2*f+1]/s)*8192+Math.round(e[2*f]/s)+u;e[f]=h&67108863,h<67108864?u=0:u=h/67108864|0}return e},F.prototype.convert13b=function(e,s,u,f){for(var h=0,v=0;v<s;v++)h=h+(e[v]|0),u[2*v]=h&8191,h=h>>>13,u[2*v+1]=h&8191,h=h>>>13;for(v=2*s;v<f;++v)u[v]=0;r(h===0),r((h&-8192)===0)},F.prototype.stub=function(e){for(var s=new Array(e),u=0;u<e;u++)s[u]=0;return s},F.prototype.mulp=function(e,s,u){var f=2*this.guessLen13b(e.length,s.length),h=this.makeRBT(f),v=this.stub(f),P=new Array(f),_=new Array(f),l=new Array(f),y=new Array(f),U=new Array(f),q=new Array(f),$=u.words;$.length=f,this.convert13b(e.words,e.length,P,f),this.convert13b(s.words,s.length,y,f),this.transform(P,v,_,l,f,h),this.transform(y,v,U,q,f,h);for(var K=0;K<f;K++){var G=_[K]*U[K]-l[K]*q[K];l[K]=_[K]*q[K]+l[K]*U[K],_[K]=G}return this.conjugate(_,l,f),this.transform(_,l,$,v,f,h),this.conjugate($,v,f),this.normalize13b($,f),u.negative=e.negative^s.negative,u.length=e.length+s.length,u._strip()},t.prototype.mul=function(e){var s=new t(null);return s.words=new Array(this.length+e.length),this.mulTo(e,s)},t.prototype.mulf=function(e){var s=new t(null);return s.words=new Array(this.length+e.length),B(this,e,s)},t.prototype.imul=function(e){return this.clone().mulTo(e,this)},t.prototype.imuln=function(e){var s=e<0;s&&(e=-e),r(typeof e=="number"),r(e<67108864);for(var u=0,f=0;f<this.length;f++){var h=(this.words[f]|0)*e,v=(h&67108863)+(u&67108863);u>>=26,u+=h/67108864|0,u+=v>>>26,this.words[f]=v&67108863}return u!==0&&(this.words[f]=u,this.length++),this.length=e===0?1:this.length,s?this.ineg():this},t.prototype.muln=function(e){return this.clone().imuln(e)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(e){var s=L(e);if(s.length===0)return new t(1);for(var u=this,f=0;f<s.length&&s[f]===0;f++,u=u.sqr());if(++f<s.length)for(var h=u.sqr();f<s.length;f++,h=h.sqr())s[f]!==0&&(u=u.mul(h));return u},t.prototype.iushln=function(e){r(typeof e=="number"&&e>=0);var s=e%26,u=(e-s)/26,f=67108863>>>26-s<<26-s,h;if(s!==0){var v=0;for(h=0;h<this.length;h++){var P=this.words[h]&f,_=(this.words[h]|0)-P<<s;this.words[h]=_|v,v=P>>>26-s}v&&(this.words[h]=v,this.length++)}if(u!==0){for(h=this.length-1;h>=0;h--)this.words[h+u]=this.words[h];for(h=0;h<u;h++)this.words[h]=0;this.length+=u}return this._strip()},t.prototype.ishln=function(e){return r(this.negative===0),this.iushln(e)},t.prototype.iushrn=function(e,s,u){r(typeof e=="number"&&e>=0);var f;s?f=(s-s%26)/26:f=0;var h=e%26,v=Math.min((e-h)/26,this.length),P=67108863^67108863>>>h<<h,_=u;if(f-=v,f=Math.max(0,f),_){for(var l=0;l<v;l++)_.words[l]=this.words[l];_.length=v}if(v!==0)if(this.length>v)for(this.length-=v,l=0;l<this.length;l++)this.words[l]=this.words[l+v];else this.words[0]=0,this.length=1;var y=0;for(l=this.length-1;l>=0&&(y!==0||l>=f);l--){var U=this.words[l]|0;this.words[l]=y<<26-h|U>>>h,y=U&P}return _&&y!==0&&(_.words[_.length++]=y),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},t.prototype.ishrn=function(e,s,u){return r(this.negative===0),this.iushrn(e,s,u)},t.prototype.shln=function(e){return this.clone().ishln(e)},t.prototype.ushln=function(e){return this.clone().iushln(e)},t.prototype.shrn=function(e){return this.clone().ishrn(e)},t.prototype.ushrn=function(e){return this.clone().iushrn(e)},t.prototype.testn=function(e){r(typeof e=="number"&&e>=0);var s=e%26,u=(e-s)/26,f=1<<s;if(this.length<=u)return!1;var h=this.words[u];return!!(h&f)},t.prototype.imaskn=function(e){r(typeof e=="number"&&e>=0);var s=e%26,u=(e-s)/26;if(r(this.negative===0,"imaskn works only with positive numbers"),this.length<=u)return this;if(s!==0&&u++,this.length=Math.min(u,this.length),s!==0){var f=67108863^67108863>>>s<<s;this.words[this.length-1]&=f}return this._strip()},t.prototype.maskn=function(e){return this.clone().imaskn(e)},t.prototype.iaddn=function(e){return r(typeof e=="number"),r(e<67108864),e<0?this.isubn(-e):this.negative!==0?this.length===1&&(this.words[0]|0)<=e?(this.words[0]=e-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},t.prototype._iaddn=function(e){this.words[0]+=e;for(var s=0;s<this.length&&this.words[s]>=67108864;s++)this.words[s]-=67108864,s===this.length-1?this.words[s+1]=1:this.words[s+1]++;return this.length=Math.max(this.length,s+1),this},t.prototype.isubn=function(e){if(r(typeof e=="number"),r(e<67108864),e<0)return this.iaddn(-e);if(this.negative!==0)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var s=0;s<this.length&&this.words[s]<0;s++)this.words[s]+=67108864,this.words[s+1]-=1;return this._strip()},t.prototype.addn=function(e){return this.clone().iaddn(e)},t.prototype.subn=function(e){return this.clone().isubn(e)},t.prototype.iabs=function(){return this.negative=0,this},t.prototype.abs=function(){return this.clone().iabs()},t.prototype._ishlnsubmul=function(e,s,u){var f=e.length+u,h;this._expand(f);var v,P=0;for(h=0;h<e.length;h++){v=(this.words[h+u]|0)+P;var _=(e.words[h]|0)*s;v-=_&67108863,P=(v>>26)-(_/67108864|0),this.words[h+u]=v&67108863}for(;h<this.length-u;h++)v=(this.words[h+u]|0)+P,P=v>>26,this.words[h+u]=v&67108863;if(P===0)return this._strip();for(r(P===-1),P=0,h=0;h<this.length;h++)v=-(this.words[h]|0)+P,P=v>>26,this.words[h]=v&67108863;return this.negative=1,this._strip()},t.prototype._wordDiv=function(e,s){var u=this.length-e.length,f=this.clone(),h=e,v=h.words[h.length-1]|0,P=this._countBits(v);u=26-P,u!==0&&(h=h.ushln(u),f.iushln(u),v=h.words[h.length-1]|0);var _=f.length-h.length,l;if(s!=="mod"){l=new t(null),l.length=_+1,l.words=new Array(l.length);for(var y=0;y<l.length;y++)l.words[y]=0}var U=f.clone()._ishlnsubmul(h,1,_);U.negative===0&&(f=U,l&&(l.words[_]=1));for(var q=_-1;q>=0;q--){var $=(f.words[h.length+q]|0)*67108864+(f.words[h.length+q-1]|0);for($=Math.min($/v|0,67108863),f._ishlnsubmul(h,$,q);f.negative!==0;)$--,f.negative=0,f._ishlnsubmul(h,1,q),f.isZero()||(f.negative^=1);l&&(l.words[q]=$)}return l&&l._strip(),f._strip(),s!=="div"&&u!==0&&f.iushrn(u),{div:l||null,mod:f}},t.prototype.divmod=function(e,s,u){if(r(!e.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var f,h,v;return this.negative!==0&&e.negative===0?(v=this.neg().divmod(e,s),s!=="mod"&&(f=v.div.neg()),s!=="div"&&(h=v.mod.neg(),u&&h.negative!==0&&h.iadd(e)),{div:f,mod:h}):this.negative===0&&e.negative!==0?(v=this.divmod(e.neg(),s),s!=="mod"&&(f=v.div.neg()),{div:f,mod:v.mod}):(this.negative&e.negative)!==0?(v=this.neg().divmod(e.neg(),s),s!=="div"&&(h=v.mod.neg(),u&&h.negative!==0&&h.isub(e)),{div:v.div,mod:h}):e.length>this.length||this.cmp(e)<0?{div:new t(0),mod:this}:e.length===1?s==="div"?{div:this.divn(e.words[0]),mod:null}:s==="mod"?{div:null,mod:new t(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new t(this.modrn(e.words[0]))}:this._wordDiv(e,s)},t.prototype.div=function(e){return this.divmod(e,"div",!1).div},t.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},t.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},t.prototype.divRound=function(e){var s=this.divmod(e);if(s.mod.isZero())return s.div;var u=s.div.negative!==0?s.mod.isub(e):s.mod,f=e.ushrn(1),h=e.andln(1),v=u.cmp(f);return v<0||h===1&&v===0?s.div:s.div.negative!==0?s.div.isubn(1):s.div.iaddn(1)},t.prototype.modrn=function(e){var s=e<0;s&&(e=-e),r(e<=67108863);for(var u=(1<<26)%e,f=0,h=this.length-1;h>=0;h--)f=(u*f+(this.words[h]|0))%e;return s?-f:f},t.prototype.modn=function(e){return this.modrn(e)},t.prototype.idivn=function(e){var s=e<0;s&&(e=-e),r(e<=67108863);for(var u=0,f=this.length-1;f>=0;f--){var h=(this.words[f]|0)+u*67108864;this.words[f]=h/e|0,u=h%e}return this._strip(),s?this.ineg():this},t.prototype.divn=function(e){return this.clone().idivn(e)},t.prototype.egcd=function(e){r(e.negative===0),r(!e.isZero());var s=this,u=e.clone();s.negative!==0?s=s.umod(e):s=s.clone();for(var f=new t(1),h=new t(0),v=new t(0),P=new t(1),_=0;s.isEven()&&u.isEven();)s.iushrn(1),u.iushrn(1),++_;for(var l=u.clone(),y=s.clone();!s.isZero();){for(var U=0,q=1;(s.words[0]&q)===0&&U<26;++U,q<<=1);if(U>0)for(s.iushrn(U);U-- >0;)(f.isOdd()||h.isOdd())&&(f.iadd(l),h.isub(y)),f.iushrn(1),h.iushrn(1);for(var $=0,K=1;(u.words[0]&K)===0&&$<26;++$,K<<=1);if($>0)for(u.iushrn($);$-- >0;)(v.isOdd()||P.isOdd())&&(v.iadd(l),P.isub(y)),v.iushrn(1),P.iushrn(1);s.cmp(u)>=0?(s.isub(u),f.isub(v),h.isub(P)):(u.isub(s),v.isub(f),P.isub(h))}return{a:v,b:P,gcd:u.iushln(_)}},t.prototype._invmp=function(e){r(e.negative===0),r(!e.isZero());var s=this,u=e.clone();s.negative!==0?s=s.umod(e):s=s.clone();for(var f=new t(1),h=new t(0),v=u.clone();s.cmpn(1)>0&&u.cmpn(1)>0;){for(var P=0,_=1;(s.words[0]&_)===0&&P<26;++P,_<<=1);if(P>0)for(s.iushrn(P);P-- >0;)f.isOdd()&&f.iadd(v),f.iushrn(1);for(var l=0,y=1;(u.words[0]&y)===0&&l<26;++l,y<<=1);if(l>0)for(u.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(v),h.iushrn(1);s.cmp(u)>=0?(s.isub(u),f.isub(h)):(u.isub(s),h.isub(f))}var U;return s.cmpn(1)===0?U=f:U=h,U.cmpn(0)<0&&U.iadd(e),U},t.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var s=this.clone(),u=e.clone();s.negative=0,u.negative=0;for(var f=0;s.isEven()&&u.isEven();f++)s.iushrn(1),u.iushrn(1);do{for(;s.isEven();)s.iushrn(1);for(;u.isEven();)u.iushrn(1);var h=s.cmp(u);if(h<0){var v=s;s=u,u=v}else if(h===0||u.cmpn(1)===0)break;s.isub(u)}while(!0);return u.iushln(f)},t.prototype.invm=function(e){return this.egcd(e).a.umod(e)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(e){return this.words[0]&e},t.prototype.bincn=function(e){r(typeof e=="number");var s=e%26,u=(e-s)/26,f=1<<s;if(this.length<=u)return this._expand(u+1),this.words[u]|=f,this;for(var h=f,v=u;h!==0&&v<this.length;v++){var P=this.words[v]|0;P+=h,h=P>>>26,P&=67108863,this.words[v]=P}return h!==0&&(this.words[v]=h,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(e){var s=e<0;if(this.negative!==0&&!s)return-1;if(this.negative===0&&s)return 1;this._strip();var u;if(this.length>1)u=1;else{s&&(e=-e),r(e<=67108863,"Number is too big");var f=this.words[0]|0;u=f===e?0:f<e?-1:1}return this.negative!==0?-u|0:u},t.prototype.cmp=function(e){if(this.negative!==0&&e.negative===0)return-1;if(this.negative===0&&e.negative!==0)return 1;var s=this.ucmp(e);return this.negative!==0?-s|0:s},t.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var s=0,u=this.length-1;u>=0;u--){var f=this.words[u]|0,h=e.words[u]|0;if(f!==h){f<h?s=-1:f>h&&(s=1);break}}return s},t.prototype.gtn=function(e){return this.cmpn(e)===1},t.prototype.gt=function(e){return this.cmp(e)===1},t.prototype.gten=function(e){return this.cmpn(e)>=0},t.prototype.gte=function(e){return this.cmp(e)>=0},t.prototype.ltn=function(e){return this.cmpn(e)===-1},t.prototype.lt=function(e){return this.cmp(e)===-1},t.prototype.lten=function(e){return this.cmpn(e)<=0},t.prototype.lte=function(e){return this.cmp(e)<=0},t.prototype.eqn=function(e){return this.cmpn(e)===0},t.prototype.eq=function(e){return this.cmp(e)===0},t.red=function(e){return new x(e)},t.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(this.negative===0,"red works only with positives"),e.convertTo(this)._forceRed(e)},t.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(e){return this.red=e,this},t.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},t.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},t.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},t.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},t.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},t.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},t.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},t.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},t.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var W={k256:null,p224:null,p192:null,p25519:null};function j(p,e){this.name=p,this.p=new t(e,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}j.prototype._tmp=function(){var e=new t(null);return e.words=new Array(Math.ceil(this.n/13)),e},j.prototype.ireduce=function(e){var s=e,u;do this.split(s,this.tmp),s=this.imulK(s),s=s.iadd(this.tmp),u=s.bitLength();while(u>this.n);var f=u<this.n?-1:s.ucmp(this.p);return f===0?(s.words[0]=0,s.length=1):f>0?s.isub(this.p):s.strip!==void 0?s.strip():s._strip(),s},j.prototype.split=function(e,s){e.iushrn(this.n,0,s)},j.prototype.imulK=function(e){return e.imul(this.k)};function Z(){j.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}o(Z,j),Z.prototype.split=function(e,s){for(var u=4194303,f=Math.min(e.length,9),h=0;h<f;h++)s.words[h]=e.words[h];if(s.length=f,e.length<=9){e.words[0]=0,e.length=1;return}var v=e.words[9];for(s.words[s.length++]=v&u,h=10;h<e.length;h++){var P=e.words[h]|0;e.words[h-10]=(P&u)<<4|v>>>22,v=P}v>>>=22,e.words[h-10]=v,v===0&&e.length>10?e.length-=10:e.length-=9},Z.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var s=0,u=0;u<e.length;u++){var f=e.words[u]|0;s+=f*977,e.words[u]=s&67108863,s=f*64+(s/67108864|0)}return e.words[e.length-1]===0&&(e.length--,e.words[e.length-1]===0&&e.length--),e};function w(){j.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}o(w,j);function b(){j.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}o(b,j);function k(){j.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}o(k,j),k.prototype.imulK=function(e){for(var s=0,u=0;u<e.length;u++){var f=(e.words[u]|0)*19+s,h=f&67108863;f>>>=26,e.words[u]=h,s=f}return s!==0&&(e.words[e.length++]=s),e},t._prime=function(e){if(W[e])return W[e];var s;if(e==="k256")s=new Z;else if(e==="p224")s=new w;else if(e==="p192")s=new b;else if(e==="p25519")s=new k;else throw new Error("Unknown prime "+e);return W[e]=s,s};function x(p){if(typeof p=="string"){var e=t._prime(p);this.m=e.p,this.prime=e}else r(p.gtn(1),"modulus must be greater than 1"),this.m=p,this.prime=null}x.prototype._verify1=function(e){r(e.negative===0,"red works only with positives"),r(e.red,"red works only with red numbers")},x.prototype._verify2=function(e,s){r((e.negative|s.negative)===0,"red works only with positives"),r(e.red&&e.red===s.red,"red works only with red numbers")},x.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(m(e,e.umod(this.m)._forceRed(this)),e)},x.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},x.prototype.add=function(e,s){this._verify2(e,s);var u=e.add(s);return u.cmp(this.m)>=0&&u.isub(this.m),u._forceRed(this)},x.prototype.iadd=function(e,s){this._verify2(e,s);var u=e.iadd(s);return u.cmp(this.m)>=0&&u.isub(this.m),u},x.prototype.sub=function(e,s){this._verify2(e,s);var u=e.sub(s);return u.cmpn(0)<0&&u.iadd(this.m),u._forceRed(this)},x.prototype.isub=function(e,s){this._verify2(e,s);var u=e.isub(s);return u.cmpn(0)<0&&u.iadd(this.m),u},x.prototype.shl=function(e,s){return this._verify1(e),this.imod(e.ushln(s))},x.prototype.imul=function(e,s){return this._verify2(e,s),this.imod(e.imul(s))},x.prototype.mul=function(e,s){return this._verify2(e,s),this.imod(e.mul(s))},x.prototype.isqr=function(e){return this.imul(e,e.clone())},x.prototype.sqr=function(e){return this.mul(e,e)},x.prototype.sqrt=function(e){if(e.isZero())return e.clone();var s=this.m.andln(3);if(r(s%2===1),s===3){var u=this.m.add(new t(1)).iushrn(2);return this.pow(e,u)}for(var f=this.m.subn(1),h=0;!f.isZero()&&f.andln(1)===0;)h++,f.iushrn(1);r(!f.isZero());var v=new t(1).toRed(this),P=v.redNeg(),_=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new t(2*l*l).toRed(this);this.pow(l,_).cmp(P)!==0;)l.redIAdd(P);for(var y=this.pow(l,f),U=this.pow(e,f.addn(1).iushrn(1)),q=this.pow(e,f),$=h;q.cmp(v)!==0;){for(var K=q,G=0;K.cmp(v)!==0;G++)K=K.redSqr();r(G<$);var J=this.pow(y,new t(1).iushln($-G-1));U=U.redMul(J),y=J.redSqr(),q=q.redMul(y),$=G}return U},x.prototype.invm=function(e){var s=e._invmp(this.m);return s.negative!==0?(s.negative=0,this.imod(s).redNeg()):this.imod(s)},x.prototype.pow=function(e,s){if(s.isZero())return new t(1).toRed(this);if(s.cmpn(1)===0)return e.clone();var u=4,f=new Array(1<<u);f[0]=new t(1).toRed(this),f[1]=e;for(var h=2;h<f.length;h++)f[h]=this.mul(f[h-1],e);var v=f[0],P=0,_=0,l=s.bitLength()%26;for(l===0&&(l=26),h=s.length-1;h>=0;h--){for(var y=s.words[h],U=l-1;U>=0;U--){var q=y>>U&1;if(v!==f[0]&&(v=this.sqr(v)),q===0&&P===0){_=0;continue}P<<=1,P|=q,_++,!(_!==u&&(h!==0||U!==0))&&(v=this.mul(v,f[P]),_=0,P=0)}l=26}return v},x.prototype.convertTo=function(e){var s=e.umod(this.m);return s===e?s.clone():s},x.prototype.convertFrom=function(e){var s=e.clone();return s.red=null,s},t.mont=function(e){return new C(e)};function C(p){x.call(this,p),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}o(C,x),C.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},C.prototype.convertFrom=function(e){var s=this.imod(e.mul(this.rinv));return s.red=null,s},C.prototype.imul=function(e,s){if(e.isZero()||s.isZero())return e.words[0]=0,e.length=1,e;var u=e.imul(s),f=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(f).iushrn(this.shift),v=h;return h.cmp(this.m)>=0?v=h.isub(this.m):h.cmpn(0)<0&&(v=h.iadd(this.m)),v._forceRed(this)},C.prototype.mul=function(e,s){if(e.isZero()||s.isZero())return new t(0)._forceRed(this);var u=e.mul(s),f=u.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=u.isub(f).iushrn(this.shift),v=h;return h.cmp(this.m)>=0?v=h.isub(this.m):h.cmpn(0)<0&&(v=h.iadd(this.m)),v._forceRed(this)},C.prototype.invm=function(e){var s=this.imod(e._invmp(this.m).mul(this.r2));return s._forceRed(this)}})(typeof Fi>"u"||Fi,Ar)});var Kn={};Ur(Kn,{CetusMarginTradingSDK:()=>De,appendExtraRewards:()=>Fn,calculateBorrowAprPercent:()=>ti,calculateDepositAprPercent:()=>Ii,calculateUtilizationPercent:()=>Ei,default:()=>Zn,formatLtvPercentValue:()=>Wn,getPriceWithFormattedDecimals:()=>Bi,getRewardsAprMultiplier:()=>jn,getUpdatedReserve:()=>Un,margin_trading_mainnet:()=>ki,mergePositionData:()=>Ne,oraclePriceMultiplierDecimal:()=>Qe,updateRewardsWithMultiplier:()=>$n,wrapMarketInfo:()=>Re,wrapMarketPermissions:()=>Ee,wrapPosition:()=>Le});module.exports=jr(Kn);var Tr=require("@mysten/sui/client"),Dr=require("@mysten/sui/utils"),Or=require("@pythnetwork/pyth-sui-js"),Rr=require("@cetusprotocol/common-sdk"),Lr=require("@cetusprotocol/sui-clmm-sdk"),Te=require("@cetusprotocol/aggregator-sdk");var er=require("@cetusprotocol/common-sdk"),ki={full_rpc_url:er.FullRpcUrlMainnet,env:"mainnet",aggregator_url:"https://api-sui.cetus.zone/router_v3",margin_trading:{package_id:"0xa079129c989dacac4f5ccb7b2bb2b8f233b13694c465466a344e2e095e987407",published_at:"0xa079129c989dacac4f5ccb7b2bb2b8f233b13694c465466a344e2e095e987407",version:0,config:{versioned_id:"0x85d30849a1e172e1f90bb42e22ed87457a8110dad7658d51c806baa84f5dcd94",admin_cap_id:"0xdae1da9a2bacb4738411365e9719b739b655ce6b737155ff58137b78c944112a",global_config_id:"0x267de967e72360eb09837bb595a0c6b54bb98a2a1ae47436ccab4a99e6b84f25",markets:"0xe0986f697a300da740d384e64c2ba010aa9caf37a54ed0cc8b4098c4d4e592d0",markets_table_id:"0xe9dd2dbc3d68c00f297dd84e57ad28f6a504effbf6b1b869b9e4138ead14c731"}},suilend:{package_id:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf",published_at:"0xe37cc7bb50fd9b6dbd3873df66fa2c554e973697f50ef97707311dc78bd08444",config:{lending_market:[{name:"Main market",slug:"main",id:"0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",type:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",owner_cap_id:"0xf7a4defe0b6566b6a2674a02a0c61c9f99bd012eed21bc741a069eaa82d35927"},{name:"STEAMM LM",slug:"steamm-lm",id:"0xc1888ec1b81a414e427a44829310508352aec38252ee0daa9f8b181b6947de9f",type:"0x0a071f4976abae1a7f722199cf0bfcbe695ef9408a878e7d12a7ca87b7e582a6::lp_rewards::LP_REWARDS",owner_cap_id:"0x55a0f33b24e091830302726c8cfbff8cf8abd2ec1f83a4e6f4bf51c7ba3ad5ab",is_hidden:!0}],lending_market_id:"0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1",lending_market_type:"0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL",api_url:"https://d10td5ybgrf39v.cloudfront.net"}}};var Kt=require("@cetusprotocol/common-sdk"),Ae=require("@mysten/sui/transactions");var Gt=require("@cetusprotocol/common-sdk"),ir=require("@suilend/sdk/parsers/obligation"),se=require("@suilend/sdk"),Re=n=>{let i=(0,Gt.getObjectFields)(n),{open_permissions_pause:r,close_permissions_pause:o,deposit_permissions_pause:t,withdraw_permissions_pause:a,borrow_permissions_pause:d,repay_permissions_pause:c}=Ee(i.permissions.toString(2));return{market_id:i.id.id,base_token:(0,Gt.addHexPrefix)(i.base_token.fields.name),quote_token:(0,Gt.addHexPrefix)(i.quote_token.fields.name),max_long_leverage:(0,Gt.d)(i.max_long_leverage).div(10**6).toString(),max_short_leverage:(0,Gt.d)(i.max_short_leverage).div(10**6).toString(),open_fee_rate:(0,Gt.d)(i.open_fee_rate).div(10**6).toString(),close_fee_rate:(0,Gt.d)(i.close_fee_rate).div(10**6).toString(),open_permissions_pause:r,close_permissions_pause:o,deposit_permissions_pause:t,withdraw_permissions_pause:a,borrow_permissions_pause:d,repay_permissions_pause:c}},Le=(n,i)=>{let r=(0,Gt.getObjectFields)(n);return{created_at:r.created_ts,position_id:r.id.id,init_deposit_amount:r.init_deposit_amount,is_long:r.is_long,lending_market_id:r.lending_market_id,obligation_owner_cap:r.obligation_owner_cap.fields.obligation_id,market_id:r.market_id,position_cap_id:i}},Ne=(n,i,r,o,t)=>{let a=(0,ir.parseObligation)(i,r),d=(0,se.getNetAprPercent)(a,t,o);if(!a.deposits||a.deposits.length===0)throw new Error("No deposits found in obligation data");let c=a.deposits[0],g=(0,Gt.d)(c.reserve.config.closeLtvPct).div(100).toString(),m=(0,Gt.d)(c.reserve.config.openLtvPct).div(100).toString(),M=a.depositedAmountUsd.gt(0)?a.borrowedAmountUsd.div(a.depositedAmountUsd).toString():"0",S=(0,Gt.d)(1).div(g).toString(),A=(0,Gt.d)(g).sub(M).toString(),D="0",O="0",L="0",E="0";if(a.borrows&&a.borrows.length>0){let N=a.borrows[0],R=t[N?.coinType];R&&(D=(0,se.getTotalAprPercent)(se.Side.BORROW,N?.reserve.borrowAprPercent,(0,se.getFilteredRewards)(R.borrow)).toString()),L=N.borrowedAmountUsd.toString(),E=N.borrowedAmount.toString()}if(a.deposits&&a.deposits.length>0){let N=a.deposits[0],R=t[N?.coinType];R&&(O=(0,se.getTotalAprPercent)(se.Side.DEPOSIT,N?.reserve.depositAprPercent,(0,se.getFilteredRewards)(R.deposit)).toString())}return{...n,...a,origin_obligation:i,net_apr_percent:d.toString(),supplied_apr:(0,Gt.d)(O).toString(),borrowed_apr:(0,Gt.d)(D).toString(),close_ltv:g,open_ltv:m,cr:M,ltr:S,liquidation_buffer:A,deposited_amount_usd:c.depositedAmountUsd.toString(),borrowed_amount_usd:L,deposited_amount:c.depositedAmount.toString(),borrowed_amount:E}},Ee=n=>{let i=n.length,r=n.substring(i-1,i)==="0",o=n.substring(i-2,i-1)==="0",t=n.substring(i-3,i-2)==="0",a=n.substring(i-4,i-3)==="0",d=n.substring(i-5,i-4)==="0",c=n.substring(i-6,i-5)==="0";return{open_permissions_pause:r,close_permissions_pause:o,deposit_permissions_pause:t,withdraw_permissions_pause:d,borrow_permissions_pause:a,repay_permissions_pause:c}};var ut=require("@suilend/sdk");var rr=require("@cetusprotocol/common-sdk");var Ie=class extends rr.BaseError{constructor(i,r,o){super(i,r||"UnknownError",o)}static isCrossSwapErrorCode(i,r){return this.isErrorCode(i,r)}},Yt=(n,i,r)=>{let o={...r,stack:i instanceof Error?i.stack:void 0};throw i instanceof Error?new Ie(i.message,n,o):new Ie(i,n,o)};var Be=class{constructor(i){this.createMarket=async i=>{let{package_id:r}=this._sdk.sdkOptions.margin_trading,{versioned_id:o,admin_cap_id:t,markets:a,global_config_id:d}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),c=new Ae.Transaction;return c.moveCall({target:`${r}::market::create_market`,arguments:[c.object(t),c.object(d),c.object(a),c.pure.u64(i.open_fee_rate),c.pure.u64(i.close_fee_rate),c.object(o)],typeArguments:[i.base_token,i.quote_token]}),c};this.updateMarketFeeRate=async i=>{let{package_id:r}=this._sdk.sdkOptions.margin_trading,{versioned_id:o,admin_cap_id:t}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{market_id:a,open_fee_rate:d,close_fee_rate:c}=i,g=new Ae.Transaction;return g.moveCall({target:`${r}::market::set_fee_rate`,arguments:[g.object(t),g.object(a),g.pure.u64(d),g.pure.u64(c),g.object(o)],typeArguments:[]}),g};this.claimMarketFees=async(i,r)=>{let{package_id:o}=this._sdk.sdkOptions.margin_trading,{versioned_id:t,admin_cap_id:a}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),d=r||new Ae.Transaction,{base_token:c,quote_token:g}=await this._sdk.MarketModules.getMarketInfo(i);return d.moveCall({target:`${o}::market::claim_fees`,arguments:[d.object(a),d.object(i),d.object(t)],typeArguments:[c,g]}),d};this.claimAllMarketFees=async i=>{let r=new Ae.Transaction;for(let o=0;o<i.length;o++){let t=i[o];this.claimMarketFees(t,r)}return r};this.getMarginTradingConfig=async()=>{let{package_id:i}=this._sdk.sdkOptions.margin_trading;try{let r=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${i}::versioned::InitEvent`}),o=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${i}::admin_cap::InitEvent`}),t=await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${i}::config::InitEvent`}),d=(await this._sdk.FullClient.queryEventsByPage({MoveEventType:`${i}::market::InitEvent`})).data[0].parsedJson.markets_id,g=(await this._sdk.FullClient.getObject({id:d,options:{showContent:!0}})).data.content.fields.list.fields.id.id;return{versioned_id:r.data[0].parsedJson.versioned_id,admin_cap_id:o.data[0].parsedJson.admin_cap_id,global_config_id:t.data[0].parsedJson.global_config_id,markets:d,markets_table_id:g}}catch(r){return Yt("FetchError",r),{versioned_id:"",admin_cap_id:"",global_config_id:"",markets_table_id:"",markets:""}}};this.getMarketList=async(i=!1)=>{let o=this._sdk.getCache("margin_trading_markets_list",i);if(o)return o;let{package_id:t}=this._sdk.sdkOptions.margin_trading,a=[];try{let d=`${t}::market::CreateMarketEvent`,g=(await this._sdk.FullClient.queryEventsByPage({MoveEventType:d})).data.map(m=>m.parsedJson.market_id);return g.length>0?((await this._sdk.FullClient.batchGetObjects(g,{showContent:!0,showType:!0})).forEach(M=>{let S=Re(M),A=`margin_trading_market_info_${S.market_id}`;this._sdk.updateCache(A,S),a.push(S)}),a):(Yt("MarketNotFound","Market not found"),[])}catch(d){return Yt("FetchError",d),[]}};this.getMarketInfo=async(i,r=!1)=>{let o=`margin_trading_market_info_${i}`,t=this._sdk.getCache(o,r);if(t)return t;try{let a=await this._sdk.FullClient.getObject({id:i,options:{showContent:!0}}),d=Re(a);return this._sdk.updateCache(o,d,Kt.CACHE_TIME_5MIN),d}catch(a){return Yt("FetchError",a),{}}};this.getMarketSuilendInfo=async i=>{try{let{base_token:r,quote_token:o}=await this.getMarketInfo(i),{lending_market_id:t}=(0,Kt.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{allLendingMarketData:a,lstAprPercentMap:d}=await this._sdk.SuiLendModule.getLendingMarketData(!0),{base_reserve_map_info:c,quote_reserve_map_info:g}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(r,o,a);console.log("\u{1F680}\u{1F680}\u{1F680} ~ marketModules.ts:188 ~ MarketModules ~ base_reserve_map_info:",c);let m=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:a,lstAprPercentMap:d},!0),M=m[t].rewardMap[r],S=m[t].rewardMap[o],{depositedAmountUsd:A,borrowedAmountUsd:D,depositAprPercent:O,borrowAprPercent:L,depositedAmount:E,borrowedAmount:N}=c,{depositLimit:R,borrowLimit:B}=c.config,{depositedAmountUsd:F,borrowedAmountUsd:W,depositAprPercent:j,borrowAprPercent:Z,depositedAmount:w,borrowedAmount:b}=g,{depositLimit:k,borrowLimit:x}=g.config,C=(0,ut.getTotalAprPercent)(ut.Side.DEPOSIT,O,(0,ut.getFilteredRewards)(M.deposit),(0,ut.getStakingYieldAprPercent)(ut.Side.DEPOSIT,r,d)),p=(0,ut.getTotalAprPercent)(ut.Side.BORROW,L,(0,ut.getFilteredRewards)(M.borrow)),e=(0,ut.getTotalAprPercent)(ut.Side.DEPOSIT,j,(0,ut.getFilteredRewards)(S.deposit),(0,ut.getStakingYieldAprPercent)(ut.Side.DEPOSIT,r,d)),s=(0,ut.getTotalAprPercent)(ut.Side.BORROW,Z,(0,ut.getFilteredRewards)(S.borrow)),u=(0,Kt.d)(F.toString()).sub(W.toString()).toString(),f=(0,Kt.d)(A.toString()).sub(D.toString()).toString(),h=(0,Kt.d)(R.toString()).sub((0,Kt.d)(E.toString())).toString(),v=(0,Kt.d)(B.toString()).sub((0,Kt.d)(N.toString())).toString(),P=(0,Kt.d)(k.toString()).sub((0,Kt.d)(w.toString())).toString(),_=(0,Kt.d)(x.toString()).sub((0,Kt.d)(b.toString())).toString();return{long_liquidity:u,short_liquidity:f,base_total_deposit_apr_percent:C.toString(),base_total_borrow_apr_percent:p.toString(),quote_total_deposit_apr_percent:e.toString(),quote_total_borrow_apr_percent:s.toString(),base_token_available_deposit_amount:h,base_token_available_borrow_amount:v,quote_token_available_deposit_amount:P,quote_token_available_borrow_amount:_,base_deposit_rewards:(0,ut.getFilteredRewards)(M.deposit),quote_deposit_rewards:(0,ut.getFilteredRewards)(S.deposit),base_borrow_rewards:(0,ut.getFilteredRewards)(M.borrow),quote_borrow_rewards:(0,ut.getFilteredRewards)(S.borrow),base_deposit_apr_percent:O.toString(),base_borrow_apr_percent:L.toString(),quote_deposit_apr_percent:j.toString(),quote_borrow_apr_percent:Z.toString(),obligations:m[t],base_reserve_map_info:c,quote_reserve_map_info:g}}catch(r){return Yt("FetchError",r),{}}};this._sdk=i}};var mt=require("@cetusprotocol/common-sdk"),Qt=require("@mysten/sui/transactions");var qe=class{constructor(i){this.queryGlobalPermissions=async()=>{let i=this._sdk.sdkOptions.margin_trading,{global_config_id:r}=(0,mt.getPackagerConfigs)(i),o=await this._sdk.FullClient.getObject({id:r,options:{showContent:!0}});if(o){let t=o.data.content.fields.permissions.toString(2),{open_permissions_pause:a,close_permissions_pause:d,deposit_permissions_pause:c,withdraw_permissions_pause:g,borrow_permissions_pause:m,repay_permissions_pause:M}=Ee(t);return{open_permissions_pause:a,close_permissions_pause:d,deposit_permissions_pause:c,withdraw_permissions_pause:g,borrow_permissions_pause:m,repay_permissions_pause:M}}};this.updateGlobalPermissions=async i=>{let r=new Qt.Transaction;return this.updateGlobalOpenPositionPermissions(i,r),this.updateGlobalClosePositionPermissions(i,r),this.updateGlobalDepositPermissions(i,r),this.updateGlobalBorrowPermissions(i,r),this.updateGlobalWithdrawPermissions(i,r),this.updateGlobalRepayPermissions(i,r),r};this.updateGlobalOpenPositionPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_open_position_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalClosePositionPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_close_position_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalDepositPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_deposit_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalBorrowPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_borrow_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalWithdrawPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_withdraw_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateGlobalRepayPermissions=async(i,r)=>{let o=this._sdk.sdkOptions.margin_trading,{global_config_id:t,versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(o),c=r||new Qt.Transaction;return c.moveCall({target:`${o.published_at}::config::update_global_repay_permissions`,arguments:[c.object(d),c.object(t),c.pure.bool(i),c.object(mt.CLOCK_ADDRESS),c.object(a)],typeArguments:[]}),c};this.updateMarketCreatePositionPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_open_position_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketClosePositionPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_close_position_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketDepositPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_deposit_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketWithdrawPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_withdraw_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketBorrowPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_borrow_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketRepayPermissions=async(i,r,o)=>{let t=this._sdk.sdkOptions.margin_trading,{versioned_id:a,admin_cap_id:d}=(0,mt.getPackagerConfigs)(t),c=o||new Qt.Transaction;return c.moveCall({target:`${t.published_at}::market::update_market_repay_permission`,arguments:[c.object(d),c.object(i),c.pure.bool(r),c.object(a)],typeArguments:[]}),c};this.updateMarketPermissions=async(i,r,o)=>{let t=o||new Qt.Transaction;return this.updateMarketCreatePositionPermissions(i,r,t),this.updateMarketClosePositionPermissions(i,r,t),this.updateMarketDepositPermissions(i,r,t),this.updateMarketWithdrawPermissions(i,r,t),this.updateMarketBorrowPermissions(i,r,t),this.updateMarketRepayPermissions(i,r,t),t};this._sdk=i}};var T=require("@cetusprotocol/common-sdk");var $r=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Pi=Math.ceil,re=Math.floor,te="[BigNumber Error] ",nr=te+"Number primitive has more than 15 significant digits: ",ae=1e14,Q=14,Ai=9007199254740991,Ci=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],ge=1e7,zt=1e9;function or(n){var i,r,o,t=R.prototype={constructor:R,toString:null,valueOf:null},a=new R(1),d=20,c=4,g=-7,m=21,M=-1e7,S=1e7,A=!1,D=1,O=0,L={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},E="0123456789abcdefghijklmnopqrstuvwxyz",N=!0;function R(w,b){var k,x,C,p,e,s,u,f,h=this;if(!(h instanceof R))return new R(w,b);if(b==null){if(w&&w._isBigNumber===!0){h.s=w.s,!w.c||w.e>S?h.c=h.e=null:w.e<M?h.c=[h.e=0]:(h.e=w.e,h.c=w.c.slice());return}if((s=typeof w=="number")&&w*0==0){if(h.s=1/w<0?(w=-w,-1):1,w===~~w){for(p=0,e=w;e>=10;e/=10,p++);p>S?h.c=h.e=null:(h.e=p,h.c=[w]);return}f=String(w)}else{if(!$r.test(f=String(w)))return o(h,f,s);h.s=f.charCodeAt(0)==45?(f=f.slice(1),-1):1}(p=f.indexOf("."))>-1&&(f=f.replace(".","")),(e=f.search(/e/i))>0?(p<0&&(p=e),p+=+f.slice(e+1),f=f.substring(0,e)):p<0&&(p=f.length)}else{if(ht(b,2,E.length,"Base"),b==10&&N)return h=new R(w),j(h,d+h.e+1,c);if(f=String(w),s=typeof w=="number"){if(w*0!=0)return o(h,f,s,b);if(h.s=1/w<0?(f=f.slice(1),-1):1,R.DEBUG&&f.replace(/^0\.0*|\./,"").length>15)throw Error(nr+w)}else h.s=f.charCodeAt(0)===45?(f=f.slice(1),-1):1;for(k=E.slice(0,b),p=e=0,u=f.length;e<u;e++)if(k.indexOf(x=f.charAt(e))<0){if(x=="."){if(e>p){p=u;continue}}else if(!C&&(f==f.toUpperCase()&&(f=f.toLowerCase())||f==f.toLowerCase()&&(f=f.toUpperCase()))){C=!0,e=-1,p=0;continue}return o(h,String(w),s,b)}s=!1,f=r(f,b,10,h.s),(p=f.indexOf("."))>-1?f=f.replace(".",""):p=f.length}for(e=0;f.charCodeAt(e)===48;e++);for(u=f.length;f.charCodeAt(--u)===48;);if(f=f.slice(e,++u)){if(u-=e,s&&R.DEBUG&&u>15&&(w>Ai||w!==re(w)))throw Error(nr+h.s*w);if((p=p-e-1)>S)h.c=h.e=null;else if(p<M)h.c=[h.e=0];else{if(h.e=p,h.c=[],e=(p+1)%Q,p<0&&(e+=Q),e<u){for(e&&h.c.push(+f.slice(0,e)),u-=Q;e<u;)h.c.push(+f.slice(e,e+=Q));e=Q-(f=f.slice(e)).length}else e-=u;for(;e--;f+="0");h.c.push(+f)}}else h.c=[h.e=0]}R.clone=or,R.ROUND_UP=0,R.ROUND_DOWN=1,R.ROUND_CEIL=2,R.ROUND_FLOOR=3,R.ROUND_HALF_UP=4,R.ROUND_HALF_DOWN=5,R.ROUND_HALF_EVEN=6,R.ROUND_HALF_CEIL=7,R.ROUND_HALF_FLOOR=8,R.EUCLID=9,R.config=R.set=function(w){var b,k;if(w!=null)if(typeof w=="object"){if(w.hasOwnProperty(b="DECIMAL_PLACES")&&(k=w[b],ht(k,0,zt,b),d=k),w.hasOwnProperty(b="ROUNDING_MODE")&&(k=w[b],ht(k,0,8,b),c=k),w.hasOwnProperty(b="EXPONENTIAL_AT")&&(k=w[b],k&&k.pop?(ht(k[0],-zt,0,b),ht(k[1],0,zt,b),g=k[0],m=k[1]):(ht(k,-zt,zt,b),g=-(m=k<0?-k:k))),w.hasOwnProperty(b="RANGE"))if(k=w[b],k&&k.pop)ht(k[0],-zt,-1,b),ht(k[1],1,zt,b),M=k[0],S=k[1];else if(ht(k,-zt,zt,b),k)M=-(S=k<0?-k:k);else throw Error(te+b+" cannot be zero: "+k);if(w.hasOwnProperty(b="CRYPTO"))if(k=w[b],k===!!k)if(k)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))A=k;else throw A=!k,Error(te+"crypto unavailable");else A=k;else throw Error(te+b+" not true or false: "+k);if(w.hasOwnProperty(b="MODULO_MODE")&&(k=w[b],ht(k,0,9,b),D=k),w.hasOwnProperty(b="POW_PRECISION")&&(k=w[b],ht(k,0,zt,b),O=k),w.hasOwnProperty(b="FORMAT"))if(k=w[b],typeof k=="object")L=k;else throw Error(te+b+" not an object: "+k);if(w.hasOwnProperty(b="ALPHABET"))if(k=w[b],typeof k=="string"&&!/^.?$|[+\-.\s]|(.).*\1/.test(k))N=k.slice(0,10)=="0123456789",E=k;else throw Error(te+b+" invalid: "+k)}else throw Error(te+"Object expected: "+w);return{DECIMAL_PLACES:d,ROUNDING_MODE:c,EXPONENTIAL_AT:[g,m],RANGE:[M,S],CRYPTO:A,MODULO_MODE:D,POW_PRECISION:O,FORMAT:L,ALPHABET:E}},R.isBigNumber=function(w){if(!w||w._isBigNumber!==!0)return!1;if(!R.DEBUG)return!0;var b,k,x=w.c,C=w.e,p=w.s;t:if({}.toString.call(x)=="[object Array]"){if((p===1||p===-1)&&C>=-zt&&C<=zt&&C===re(C)){if(x[0]===0){if(C===0&&x.length===1)return!0;break t}if(b=(C+1)%Q,b<1&&(b+=Q),String(x[0]).length==b){for(b=0;b<x.length;b++)if(k=x[b],k<0||k>=ae||k!==re(k))break t;if(k!==0)return!0}}}else if(x===null&&C===null&&(p===null||p===1||p===-1))return!0;throw Error(te+"Invalid BigNumber: "+w)},R.maximum=R.max=function(){return F(arguments,-1)},R.minimum=R.min=function(){return F(arguments,1)},R.random=(function(){var w=9007199254740992,b=Math.random()*w&2097151?function(){return re(Math.random()*w)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(k){var x,C,p,e,s,u=0,f=[],h=new R(a);if(k==null?k=d:ht(k,0,zt),e=Pi(k/Q),A)if(crypto.getRandomValues){for(x=crypto.getRandomValues(new Uint32Array(e*=2));u<e;)s=x[u]*131072+(x[u+1]>>>11),s>=9e15?(C=crypto.getRandomValues(new Uint32Array(2)),x[u]=C[0],x[u+1]=C[1]):(f.push(s%1e14),u+=2);u=e/2}else if(crypto.randomBytes){for(x=crypto.randomBytes(e*=7);u<e;)s=(x[u]&31)*281474976710656+x[u+1]*1099511627776+x[u+2]*4294967296+x[u+3]*16777216+(x[u+4]<<16)+(x[u+5]<<8)+x[u+6],s>=9e15?crypto.randomBytes(7).copy(x,u):(f.push(s%1e14),u+=7);u=e/7}else throw A=!1,Error(te+"crypto unavailable");if(!A)for(;u<e;)s=b(),s<9e15&&(f[u++]=s%1e14);for(e=f[--u],k%=Q,e&&k&&(s=Ci[Q-k],f[u]=re(e/s)*s);f[u]===0;f.pop(),u--);if(u<0)f=[p=0];else{for(p=-1;f[0]===0;f.splice(0,1),p-=Q);for(u=1,s=f[0];s>=10;s/=10,u++);u<Q&&(p-=Q-u)}return h.e=p,h.c=f,h}})(),R.sum=function(){for(var w=1,b=arguments,k=new R(b[0]);w<b.length;)k=k.plus(b[w++]);return k},r=(function(){var w="0123456789";function b(k,x,C,p){for(var e,s=[0],u,f=0,h=k.length;f<h;){for(u=s.length;u--;s[u]*=x);for(s[0]+=p.indexOf(k.charAt(f++)),e=0;e<s.length;e++)s[e]>C-1&&(s[e+1]==null&&(s[e+1]=0),s[e+1]+=s[e]/C|0,s[e]%=C)}return s.reverse()}return function(k,x,C,p,e){var s,u,f,h,v,P,_,l,y=k.indexOf("."),U=d,q=c;for(y>=0&&(h=O,O=0,k=k.replace(".",""),l=new R(x),P=l.pow(k.length-y),O=h,l.c=b(he(ie(P.c),P.e,"0"),10,C,w),l.e=l.c.length),_=b(k,x,C,e?(s=E,w):(s=w,E)),f=h=_.length;_[--h]==0;_.pop());if(!_[0])return s.charAt(0);if(y<0?--f:(P.c=_,P.e=f,P.s=p,P=i(P,l,U,q,C),_=P.c,v=P.r,f=P.e),u=f+U+1,y=_[u],h=C/2,v=v||u<0||_[u+1]!=null,v=q<4?(y!=null||v)&&(q==0||q==(P.s<0?3:2)):y>h||y==h&&(q==4||v||q==6&&_[u-1]&1||q==(P.s<0?8:7)),u<1||!_[0])k=v?he(s.charAt(1),-U,s.charAt(0)):s.charAt(0);else{if(_.length=u,v)for(--C;++_[--u]>C;)_[u]=0,u||(++f,_=[1].concat(_));for(h=_.length;!_[--h];);for(y=0,k="";y<=h;k+=s.charAt(_[y++]));k=he(k,f,s.charAt(0))}return k}})(),i=(function(){function w(x,C,p){var e,s,u,f,h=0,v=x.length,P=C%ge,_=C/ge|0;for(x=x.slice();v--;)u=x[v]%ge,f=x[v]/ge|0,e=_*u+f*P,s=P*u+e%ge*ge+h,h=(s/p|0)+(e/ge|0)+_*f,x[v]=s%p;return h&&(x=[h].concat(x)),x}function b(x,C,p,e){var s,u;if(p!=e)u=p>e?1:-1;else for(s=u=0;s<p;s++)if(x[s]!=C[s]){u=x[s]>C[s]?1:-1;break}return u}function k(x,C,p,e){for(var s=0;p--;)x[p]-=s,s=x[p]<C[p]?1:0,x[p]=s*e+x[p]-C[p];for(;!x[0]&&x.length>1;x.splice(0,1));}return function(x,C,p,e,s){var u,f,h,v,P,_,l,y,U,q,$,K,G,J,rt,V,et,ft=x.s==C.s?1:-1,tt=x.c,X=C.c;if(!tt||!tt[0]||!X||!X[0])return new R(!x.s||!C.s||(tt?X&&tt[0]==X[0]:!X)?NaN:tt&&tt[0]==0||!X?ft*0:ft/0);for(y=new R(ft),U=y.c=[],f=x.e-C.e,ft=p+f+1,s||(s=ae,f=ne(x.e/Q)-ne(C.e/Q),ft=ft/Q|0),h=0;X[h]==(tt[h]||0);h++);if(X[h]>(tt[h]||0)&&f--,ft<0)U.push(1),v=!0;else{for(J=tt.length,V=X.length,h=0,ft+=2,P=re(s/(X[0]+1)),P>1&&(X=w(X,P,s),tt=w(tt,P,s),V=X.length,J=tt.length),G=V,q=tt.slice(0,V),$=q.length;$<V;q[$++]=0);et=X.slice(),et=[0].concat(et),rt=X[0],X[1]>=s/2&&rt++;do{if(P=0,u=b(X,q,V,$),u<0){if(K=q[0],V!=$&&(K=K*s+(q[1]||0)),P=re(K/rt),P>1)for(P>=s&&(P=s-1),_=w(X,P,s),l=_.length,$=q.length;b(_,q,l,$)==1;)P--,k(_,V<l?et:X,l,s),l=_.length,u=1;else P==0&&(u=P=1),_=X.slice(),l=_.length;if(l<$&&(_=[0].concat(_)),k(q,_,$,s),$=q.length,u==-1)for(;b(X,q,V,$)<1;)P++,k(q,V<$?et:X,$,s),$=q.length}else u===0&&(P++,q=[0]);U[h++]=P,q[0]?q[$++]=tt[G]||0:(q=[tt[G]],$=1)}while((G++<J||q[0]!=null)&&ft--);v=q[0]!=null,U[0]||U.splice(0,1)}if(s==ae){for(h=1,ft=U[0];ft>=10;ft/=10,h++);j(y,p+(y.e=h+f*Q-1)+1,e,v)}else y.e=f,y.r=+v;return y}})();function B(w,b,k,x){var C,p,e,s,u;if(k==null?k=c:ht(k,0,8),!w.c)return w.toString();if(C=w.c[0],e=w.e,b==null)u=ie(w.c),u=x==1||x==2&&(e<=g||e>=m)?Ue(u,e):he(u,e,"0");else if(w=j(new R(w),b,k),p=w.e,u=ie(w.c),s=u.length,x==1||x==2&&(b<=p||p<=g)){for(;s<b;u+="0",s++);u=Ue(u,p)}else if(b-=e+(x===2&&p>e),u=he(u,p,"0"),p+1>s){if(--b>0)for(u+=".";b--;u+="0");}else if(b+=p-s,b>0)for(p+1==s&&(u+=".");b--;u+="0");return w.s<0&&C?"-"+u:u}function F(w,b){for(var k,x,C=1,p=new R(w[0]);C<w.length;C++)x=new R(w[C]),(!x.s||(k=ye(p,x))===b||k===0&&p.s===b)&&(p=x);return p}function W(w,b,k){for(var x=1,C=b.length;!b[--C];b.pop());for(C=b[0];C>=10;C/=10,x++);return(k=x+k*Q-1)>S?w.c=w.e=null:k<M?w.c=[w.e=0]:(w.e=k,w.c=b),w}o=(function(){var w=/^(-?)0([xbo])(?=\w[\w.]*$)/i,b=/^([^.]+)\.$/,k=/^\.([^.]+)$/,x=/^-?(Infinity|NaN)$/,C=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(p,e,s,u){var f,h=s?e:e.replace(C,"");if(x.test(h))p.s=isNaN(h)?null:h<0?-1:1;else{if(!s&&(h=h.replace(w,function(v,P,_){return f=(_=_.toLowerCase())=="x"?16:_=="b"?2:8,!u||u==f?P:v}),u&&(f=u,h=h.replace(b,"$1").replace(k,"0.$1")),e!=h))return new R(h,f);if(R.DEBUG)throw Error(te+"Not a"+(u?" base "+u:"")+" number: "+e);p.s=null}p.c=p.e=null}})();function j(w,b,k,x){var C,p,e,s,u,f,h,v=w.c,P=Ci;if(v){t:{for(C=1,s=v[0];s>=10;s/=10,C++);if(p=b-C,p<0)p+=Q,e=b,u=v[f=0],h=re(u/P[C-e-1]%10);else if(f=Pi((p+1)/Q),f>=v.length)if(x){for(;v.length<=f;v.push(0));u=h=0,C=1,p%=Q,e=p-Q+1}else break t;else{for(u=s=v[f],C=1;s>=10;s/=10,C++);p%=Q,e=p-Q+C,h=e<0?0:re(u/P[C-e-1]%10)}if(x=x||b<0||v[f+1]!=null||(e<0?u:u%P[C-e-1]),x=k<4?(h||x)&&(k==0||k==(w.s<0?3:2)):h>5||h==5&&(k==4||x||k==6&&(p>0?e>0?u/P[C-e]:0:v[f-1])%10&1||k==(w.s<0?8:7)),b<1||!v[0])return v.length=0,x?(b-=w.e+1,v[0]=P[(Q-b%Q)%Q],w.e=-b||0):v[0]=w.e=0,w;if(p==0?(v.length=f,s=1,f--):(v.length=f+1,s=P[Q-p],v[f]=e>0?re(u/P[C-e]%P[e])*s:0),x)for(;;)if(f==0){for(p=1,e=v[0];e>=10;e/=10,p++);for(e=v[0]+=s,s=1;e>=10;e/=10,s++);p!=s&&(w.e++,v[0]==ae&&(v[0]=1));break}else{if(v[f]+=s,v[f]!=ae)break;v[f--]=0,s=1}for(p=v.length;v[--p]===0;v.pop());}w.e>S?w.c=w.e=null:w.e<M&&(w.c=[w.e=0])}return w}function Z(w){var b,k=w.e;return k===null?w.toString():(b=ie(w.c),b=k<=g||k>=m?Ue(b,k):he(b,k,"0"),w.s<0?"-"+b:b)}return t.absoluteValue=t.abs=function(){var w=new R(this);return w.s<0&&(w.s=1),w},t.comparedTo=function(w,b){return ye(this,new R(w,b))},t.decimalPlaces=t.dp=function(w,b){var k,x,C,p=this;if(w!=null)return ht(w,0,zt),b==null?b=c:ht(b,0,8),j(new R(p),w+p.e+1,b);if(!(k=p.c))return null;if(x=((C=k.length-1)-ne(this.e/Q))*Q,C=k[C])for(;C%10==0;C/=10,x--);return x<0&&(x=0),x},t.dividedBy=t.div=function(w,b){return i(this,new R(w,b),d,c)},t.dividedToIntegerBy=t.idiv=function(w,b){return i(this,new R(w,b),0,1)},t.exponentiatedBy=t.pow=function(w,b){var k,x,C,p,e,s,u,f,h,v=this;if(w=new R(w),w.c&&!w.isInteger())throw Error(te+"Exponent not an integer: "+Z(w));if(b!=null&&(b=new R(b)),s=w.e>14,!v.c||!v.c[0]||v.c[0]==1&&!v.e&&v.c.length==1||!w.c||!w.c[0])return h=new R(Math.pow(+Z(v),s?w.s*(2-Fe(w)):+Z(w))),b?h.mod(b):h;if(u=w.s<0,b){if(b.c?!b.c[0]:!b.s)return new R(NaN);x=!u&&v.isInteger()&&b.isInteger(),x&&(v=v.mod(b))}else{if(w.e>9&&(v.e>0||v.e<-1||(v.e==0?v.c[0]>1||s&&v.c[1]>=24e7:v.c[0]<8e13||s&&v.c[0]<=9999975e7)))return p=v.s<0&&Fe(w)?-0:0,v.e>-1&&(p=1/p),new R(u?1/p:p);O&&(p=Pi(O/Q+2))}for(s?(k=new R(.5),u&&(w.s=1),f=Fe(w)):(C=Math.abs(+Z(w)),f=C%2),h=new R(a);;){if(f){if(h=h.times(v),!h.c)break;p?h.c.length>p&&(h.c.length=p):x&&(h=h.mod(b))}if(C){if(C=re(C/2),C===0)break;f=C%2}else if(w=w.times(k),j(w,w.e+1,1),w.e>14)f=Fe(w);else{if(C=+Z(w),C===0)break;f=C%2}v=v.times(v),p?v.c&&v.c.length>p&&(v.c.length=p):x&&(v=v.mod(b))}return x?h:(u&&(h=a.div(h)),b?h.mod(b):p?j(h,O,c,e):h)},t.integerValue=function(w){var b=new R(this);return w==null?w=c:ht(w,0,8),j(b,b.e+1,w)},t.isEqualTo=t.eq=function(w,b){return ye(this,new R(w,b))===0},t.isFinite=function(){return!!this.c},t.isGreaterThan=t.gt=function(w,b){return ye(this,new R(w,b))>0},t.isGreaterThanOrEqualTo=t.gte=function(w,b){return(b=ye(this,new R(w,b)))===1||b===0},t.isInteger=function(){return!!this.c&&ne(this.e/Q)>this.c.length-2},t.isLessThan=t.lt=function(w,b){return ye(this,new R(w,b))<0},t.isLessThanOrEqualTo=t.lte=function(w,b){return(b=ye(this,new R(w,b)))===-1||b===0},t.isNaN=function(){return!this.s},t.isNegative=function(){return this.s<0},t.isPositive=function(){return this.s>0},t.isZero=function(){return!!this.c&&this.c[0]==0},t.minus=function(w,b){var k,x,C,p,e=this,s=e.s;if(w=new R(w,b),b=w.s,!s||!b)return new R(NaN);if(s!=b)return w.s=-b,e.plus(w);var u=e.e/Q,f=w.e/Q,h=e.c,v=w.c;if(!u||!f){if(!h||!v)return h?(w.s=-b,w):new R(v?e:NaN);if(!h[0]||!v[0])return v[0]?(w.s=-b,w):new R(h[0]?e:c==3?-0:0)}if(u=ne(u),f=ne(f),h=h.slice(),s=u-f){for((p=s<0)?(s=-s,C=h):(f=u,C=v),C.reverse(),b=s;b--;C.push(0));C.reverse()}else for(x=(p=(s=h.length)<(b=v.length))?s:b,s=b=0;b<x;b++)if(h[b]!=v[b]){p=h[b]<v[b];break}if(p&&(C=h,h=v,v=C,w.s=-w.s),b=(x=v.length)-(k=h.length),b>0)for(;b--;h[k++]=0);for(b=ae-1;x>s;){if(h[--x]<v[x]){for(k=x;k&&!h[--k];h[k]=b);--h[k],h[x]+=ae}h[x]-=v[x]}for(;h[0]==0;h.splice(0,1),--f);return h[0]?W(w,h,f):(w.s=c==3?-1:1,w.c=[w.e=0],w)},t.modulo=t.mod=function(w,b){var k,x,C=this;return w=new R(w,b),!C.c||!w.s||w.c&&!w.c[0]?new R(NaN):!w.c||C.c&&!C.c[0]?new R(C):(D==9?(x=w.s,w.s=1,k=i(C,w,0,3),w.s=x,k.s*=x):k=i(C,w,0,D),w=C.minus(k.times(w)),!w.c[0]&&D==1&&(w.s=C.s),w)},t.multipliedBy=t.times=function(w,b){var k,x,C,p,e,s,u,f,h,v,P,_,l,y,U,q=this,$=q.c,K=(w=new R(w,b)).c;if(!$||!K||!$[0]||!K[0])return!q.s||!w.s||$&&!$[0]&&!K||K&&!K[0]&&!$?w.c=w.e=w.s=null:(w.s*=q.s,!$||!K?w.c=w.e=null:(w.c=[0],w.e=0)),w;for(x=ne(q.e/Q)+ne(w.e/Q),w.s*=q.s,u=$.length,v=K.length,u<v&&(l=$,$=K,K=l,C=u,u=v,v=C),C=u+v,l=[];C--;l.push(0));for(y=ae,U=ge,C=v;--C>=0;){for(k=0,P=K[C]%U,_=K[C]/U|0,e=u,p=C+e;p>C;)f=$[--e]%U,h=$[e]/U|0,s=_*f+h*P,f=P*f+s%U*U+l[p]+k,k=(f/y|0)+(s/U|0)+_*h,l[p--]=f%y;l[p]=k}return k?++x:l.splice(0,1),W(w,l,x)},t.negated=function(){var w=new R(this);return w.s=-w.s||null,w},t.plus=function(w,b){var k,x=this,C=x.s;if(w=new R(w,b),b=w.s,!C||!b)return new R(NaN);if(C!=b)return w.s=-b,x.minus(w);var p=x.e/Q,e=w.e/Q,s=x.c,u=w.c;if(!p||!e){if(!s||!u)return new R(C/0);if(!s[0]||!u[0])return u[0]?w:new R(s[0]?x:C*0)}if(p=ne(p),e=ne(e),s=s.slice(),C=p-e){for(C>0?(e=p,k=u):(C=-C,k=s),k.reverse();C--;k.push(0));k.reverse()}for(C=s.length,b=u.length,C-b<0&&(k=u,u=s,s=k,b=C),C=0;b;)C=(s[--b]=s[b]+u[b]+C)/ae|0,s[b]=ae===s[b]?0:s[b]%ae;return C&&(s=[C].concat(s),++e),W(w,s,e)},t.precision=t.sd=function(w,b){var k,x,C,p=this;if(w!=null&&w!==!!w)return ht(w,1,zt),b==null?b=c:ht(b,0,8),j(new R(p),w,b);if(!(k=p.c))return null;if(C=k.length-1,x=C*Q+1,C=k[C]){for(;C%10==0;C/=10,x--);for(C=k[0];C>=10;C/=10,x++);}return w&&p.e+1>x&&(x=p.e+1),x},t.shiftedBy=function(w){return ht(w,-Ai,Ai),this.times("1e"+w)},t.squareRoot=t.sqrt=function(){var w,b,k,x,C,p=this,e=p.c,s=p.s,u=p.e,f=d+4,h=new R("0.5");if(s!==1||!e||!e[0])return new R(!s||s<0&&(!e||e[0])?NaN:e?p:1/0);if(s=Math.sqrt(+Z(p)),s==0||s==1/0?(b=ie(e),(b.length+u)%2==0&&(b+="0"),s=Math.sqrt(+b),u=ne((u+1)/2)-(u<0||u%2),s==1/0?b="5e"+u:(b=s.toExponential(),b=b.slice(0,b.indexOf("e")+1)+u),k=new R(b)):k=new R(s+""),k.c[0]){for(u=k.e,s=u+f,s<3&&(s=0);;)if(C=k,k=h.times(C.plus(i(p,C,f,1))),ie(C.c).slice(0,s)===(b=ie(k.c)).slice(0,s))if(k.e<u&&--s,b=b.slice(s-3,s+1),b=="9999"||!x&&b=="4999"){if(!x&&(j(C,C.e+d+2,0),C.times(C).eq(p))){k=C;break}f+=4,s+=4,x=1}else{(!+b||!+b.slice(1)&&b.charAt(0)=="5")&&(j(k,k.e+d+2,1),w=!k.times(k).eq(p));break}}return j(k,k.e+d+1,c,w)},t.toExponential=function(w,b){return w!=null&&(ht(w,0,zt),w++),B(this,w,b,1)},t.toFixed=function(w,b){return w!=null&&(ht(w,0,zt),w=w+this.e+1),B(this,w,b)},t.toFormat=function(w,b,k){var x,C=this;if(k==null)w!=null&&b&&typeof b=="object"?(k=b,b=null):w&&typeof w=="object"?(k=w,w=b=null):k=L;else if(typeof k!="object")throw Error(te+"Argument not an object: "+k);if(x=C.toFixed(w,b),C.c){var p,e=x.split("."),s=+k.groupSize,u=+k.secondaryGroupSize,f=k.groupSeparator||"",h=e[0],v=e[1],P=C.s<0,_=P?h.slice(1):h,l=_.length;if(u&&(p=s,s=u,u=p,l-=p),s>0&&l>0){for(p=l%s||s,h=_.substr(0,p);p<l;p+=s)h+=f+_.substr(p,s);u>0&&(h+=f+_.slice(p)),P&&(h="-"+h)}x=v?h+(k.decimalSeparator||"")+((u=+k.fractionGroupSize)?v.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(k.fractionGroupSeparator||"")):v):h}return(k.prefix||"")+x+(k.suffix||"")},t.toFraction=function(w){var b,k,x,C,p,e,s,u,f,h,v,P,_=this,l=_.c;if(w!=null&&(s=new R(w),!s.isInteger()&&(s.c||s.s!==1)||s.lt(a)))throw Error(te+"Argument "+(s.isInteger()?"out of range: ":"not an integer: ")+Z(s));if(!l)return new R(_);for(b=new R(a),f=k=new R(a),x=u=new R(a),P=ie(l),p=b.e=P.length-_.e-1,b.c[0]=Ci[(e=p%Q)<0?Q+e:e],w=!w||s.comparedTo(b)>0?p>0?b:f:s,e=S,S=1/0,s=new R(P),u.c[0]=0;h=i(s,b,0,1),C=k.plus(h.times(x)),C.comparedTo(w)!=1;)k=x,x=C,f=u.plus(h.times(C=f)),u=C,b=s.minus(h.times(C=b)),s=C;return C=i(w.minus(k),x,0,1),u=u.plus(C.times(f)),k=k.plus(C.times(x)),u.s=f.s=_.s,p=p*2,v=i(f,x,p,c).minus(_).abs().comparedTo(i(u,k,p,c).minus(_).abs())<1?[f,x]:[u,k],S=e,v},t.toNumber=function(){return+Z(this)},t.toPrecision=function(w,b){return w!=null&&ht(w,1,zt),B(this,w,b,2)},t.toString=function(w){var b,k=this,x=k.s,C=k.e;return C===null?x?(b="Infinity",x<0&&(b="-"+b)):b="NaN":(w==null?b=C<=g||C>=m?Ue(ie(k.c),C):he(ie(k.c),C,"0"):w===10&&N?(k=j(new R(k),d+C+1,c),b=he(ie(k.c),k.e,"0")):(ht(w,2,E.length,"Base"),b=r(he(ie(k.c),C,"0"),10,w,x,!0)),x<0&&k.c[0]&&(b="-"+b)),b},t.valueOf=t.toJSON=function(){return Z(this)},t._isBigNumber=!0,t[Symbol.toStringTag]="BigNumber",t[Symbol.for("nodejs.util.inspect.custom")]=t.valueOf,n!=null&&R.set(n),R}function ne(n){var i=n|0;return n>0||n===i?i:i-1}function ie(n){for(var i,r,o=1,t=n.length,a=n[0]+"";o<t;){for(i=n[o++]+"",r=Q-i.length;r--;i="0"+i);a+=i}for(t=a.length;a.charCodeAt(--t)===48;);return a.slice(0,t+1||1)}function ye(n,i){var r,o,t=n.c,a=i.c,d=n.s,c=i.s,g=n.e,m=i.e;if(!d||!c)return null;if(r=t&&!t[0],o=a&&!a[0],r||o)return r?o?0:-c:d;if(d!=c)return d;if(r=d<0,o=g==m,!t||!a)return o?0:!t^r?1:-1;if(!o)return g>m^r?1:-1;for(c=(g=t.length)<(m=a.length)?g:m,d=0;d<c;d++)if(t[d]!=a[d])return t[d]>a[d]^r?1:-1;return g==m?0:g>m^r?1:-1}function ht(n,i,r,o){if(n<i||n>r||n!==re(n))throw Error(te+(o||"Argument")+(typeof n=="number"?n<i||n>r?" out of range: ":" not an integer: ":" not a primitive number: ")+String(n))}function Fe(n){var i=n.c.length-1;return ne(n.e/Q)==i&&n.c[i]%2!=0}function Ue(n,i){return(n.length>1?n.charAt(0)+"."+n.slice(1):n)+(i<0?"e":"e+")+i}function he(n,i,r){var o,t;if(i<0){for(t=r+".";++i;t+=r);n=t+n}else if(o=n.length,++i>o){for(t=r,i-=o;--i;t+=r);n+=t}else i<o&&(n=n.slice(0,i)+"."+n.slice(i));return n}var Wr=or(),ct=Wr;var oe=require("@mysten/sui/transactions");var Se=9e15,Me=1e9,xi="0123456789abcdef",We="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ze="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ti={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Se,maxE:Se,crypto:!1},ur,pe,Y=!0,ze="[DecimalError] ",ve=ze+"Invalid argument: ",cr=ze+"Precision limit exceeded",fr=ze+"crypto unavailable",dr="[object Decimal]",Xt=Math.floor,Zt=Math.pow,Zr=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Kr=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,zr=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,hr=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,le=1e7,H=7,Gr=9007199254740991,Hr=We.length-1,Di=Ze.length-1,I={toStringTag:dr};I.absoluteValue=I.abs=function(){var n=new this.constructor(this);return n.s<0&&(n.s=1),z(n)};I.ceil=function(){return z(new this.constructor(this),this.e+1,2)};I.clampedTo=I.clamp=function(n,i){var r,o=this,t=o.constructor;if(n=new t(n),i=new t(i),!n.s||!i.s)return new t(NaN);if(n.gt(i))throw Error(ve+i);return r=o.cmp(n),r<0?n:o.cmp(i)>0?i:new t(o)};I.comparedTo=I.cmp=function(n){var i,r,o,t,a=this,d=a.d,c=(n=new a.constructor(n)).d,g=a.s,m=n.s;if(!d||!c)return!g||!m?NaN:g!==m?g:d===c?0:!d^g<0?1:-1;if(!d[0]||!c[0])return d[0]?g:c[0]?-m:0;if(g!==m)return g;if(a.e!==n.e)return a.e>n.e^g<0?1:-1;for(o=d.length,t=c.length,i=0,r=o<t?o:t;i<r;++i)if(d[i]!==c[i])return d[i]>c[i]^g<0?1:-1;return o===t?0:o>t^g<0?1:-1};I.cosine=I.cos=function(){var n,i,r=this,o=r.constructor;return r.d?r.d[0]?(n=o.precision,i=o.rounding,o.precision=n+Math.max(r.e,r.sd())+H,o.rounding=1,r=Vr(o,wr(o,r)),o.precision=n,o.rounding=i,z(pe==2||pe==3?r.neg():r,n,i,!0)):new o(1):new o(NaN)};I.cubeRoot=I.cbrt=function(){var n,i,r,o,t,a,d,c,g,m,M=this,S=M.constructor;if(!M.isFinite()||M.isZero())return new S(M);for(Y=!1,a=M.s*Zt(M.s*M,1/3),!a||Math.abs(a)==1/0?(r=Ht(M.d),n=M.e,(a=(n-r.length+1)%3)&&(r+=a==1||a==-2?"0":"00"),a=Zt(r,1/3),n=Xt((n+1)/3)-(n%3==(n<0?-1:2)),a==1/0?r="5e"+n:(r=a.toExponential(),r=r.slice(0,r.indexOf("e")+1)+n),o=new S(r),o.s=M.s):o=new S(a.toString()),d=(n=S.precision)+3;;)if(c=o,g=c.times(c).times(c),m=g.plus(M),o=ot(m.plus(M).times(c),m.plus(g),d+2,1),Ht(c.d).slice(0,d)===(r=Ht(o.d)).slice(0,d))if(r=r.slice(d-3,d+1),r=="9999"||!t&&r=="4999"){if(!t&&(z(c,n+1,0),c.times(c).times(c).eq(M))){o=c;break}d+=4,t=1}else{(!+r||!+r.slice(1)&&r.charAt(0)=="5")&&(z(o,n+1,1),i=!o.times(o).times(o).eq(M));break}return Y=!0,z(o,n,S.rounding,i)};I.decimalPlaces=I.dp=function(){var n,i=this.d,r=NaN;if(i){if(n=i.length-1,r=(n-Xt(this.e/H))*H,n=i[n],n)for(;n%10==0;n/=10)r--;r<0&&(r=0)}return r};I.dividedBy=I.div=function(n){return ot(this,new this.constructor(n))};I.dividedToIntegerBy=I.divToInt=function(n){var i=this,r=i.constructor;return z(ot(i,new r(n),0,1,1),r.precision,r.rounding)};I.equals=I.eq=function(n){return this.cmp(n)===0};I.floor=function(){return z(new this.constructor(this),this.e+1,3)};I.greaterThan=I.gt=function(n){return this.cmp(n)>0};I.greaterThanOrEqualTo=I.gte=function(n){var i=this.cmp(n);return i==1||i===0};I.hyperbolicCosine=I.cosh=function(){var n,i,r,o,t,a=this,d=a.constructor,c=new d(1);if(!a.isFinite())return new d(a.s?1/0:NaN);if(a.isZero())return c;r=d.precision,o=d.rounding,d.precision=r+Math.max(a.e,a.sd())+4,d.rounding=1,t=a.d.length,t<32?(n=Math.ceil(t/3),i=(1/He(4,n)).toString()):(n=16,i="2.3283064365386962890625e-10"),a=Pe(d,1,a.times(i),new d(1),!0);for(var g,m=n,M=new d(8);m--;)g=a.times(a),a=c.minus(g.times(M.minus(g.times(M))));return z(a,d.precision=r,d.rounding=o,!0)};I.hyperbolicSine=I.sinh=function(){var n,i,r,o,t=this,a=t.constructor;if(!t.isFinite()||t.isZero())return new a(t);if(i=a.precision,r=a.rounding,a.precision=i+Math.max(t.e,t.sd())+4,a.rounding=1,o=t.d.length,o<3)t=Pe(a,2,t,t,!0);else{n=1.4*Math.sqrt(o),n=n>16?16:n|0,t=t.times(1/He(5,n)),t=Pe(a,2,t,t,!0);for(var d,c=new a(5),g=new a(16),m=new a(20);n--;)d=t.times(t),t=t.times(c.plus(d.times(g.times(d).plus(m))))}return a.precision=i,a.rounding=r,z(t,i,r,!0)};I.hyperbolicTangent=I.tanh=function(){var n,i,r=this,o=r.constructor;return r.isFinite()?r.isZero()?new o(r):(n=o.precision,i=o.rounding,o.precision=n+7,o.rounding=1,ot(r.sinh(),r.cosh(),o.precision=n,o.rounding=i)):new o(r.s)};I.inverseCosine=I.acos=function(){var n=this,i=n.constructor,r=n.abs().cmp(1),o=i.precision,t=i.rounding;return r!==-1?r===0?n.isNeg()?ue(i,o,t):new i(0):new i(NaN):n.isZero()?ue(i,o+4,t).times(.5):(i.precision=o+6,i.rounding=1,n=new i(1).minus(n).div(n.plus(1)).sqrt().atan(),i.precision=o,i.rounding=t,n.times(2))};I.inverseHyperbolicCosine=I.acosh=function(){var n,i,r=this,o=r.constructor;return r.lte(1)?new o(r.eq(1)?0:NaN):r.isFinite()?(n=o.precision,i=o.rounding,o.precision=n+Math.max(Math.abs(r.e),r.sd())+4,o.rounding=1,Y=!1,r=r.times(r).minus(1).sqrt().plus(r),Y=!0,o.precision=n,o.rounding=i,r.ln()):new o(r)};I.inverseHyperbolicSine=I.asinh=function(){var n,i,r=this,o=r.constructor;return!r.isFinite()||r.isZero()?new o(r):(n=o.precision,i=o.rounding,o.precision=n+2*Math.max(Math.abs(r.e),r.sd())+6,o.rounding=1,Y=!1,r=r.times(r).plus(1).sqrt().plus(r),Y=!0,o.precision=n,o.rounding=i,r.ln())};I.inverseHyperbolicTangent=I.atanh=function(){var n,i,r,o,t=this,a=t.constructor;return t.isFinite()?t.e>=0?new a(t.abs().eq(1)?t.s/0:t.isZero()?t:NaN):(n=a.precision,i=a.rounding,o=t.sd(),Math.max(o,n)<2*-t.e-1?z(new a(t),n,i,!0):(a.precision=r=o-t.e,t=ot(t.plus(1),new a(1).minus(t),r+n,1),a.precision=n+4,a.rounding=1,t=t.ln(),a.precision=n,a.rounding=i,t.times(.5))):new a(NaN)};I.inverseSine=I.asin=function(){var n,i,r,o,t=this,a=t.constructor;return t.isZero()?new a(t):(i=t.abs().cmp(1),r=a.precision,o=a.rounding,i!==-1?i===0?(n=ue(a,r+4,o).times(.5),n.s=t.s,n):new a(NaN):(a.precision=r+6,a.rounding=1,t=t.div(new a(1).minus(t.times(t)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=o,t.times(2)))};I.inverseTangent=I.atan=function(){var n,i,r,o,t,a,d,c,g,m=this,M=m.constructor,S=M.precision,A=M.rounding;if(m.isFinite()){if(m.isZero())return new M(m);if(m.abs().eq(1)&&S+4<=Di)return d=ue(M,S+4,A).times(.25),d.s=m.s,d}else{if(!m.s)return new M(NaN);if(S+4<=Di)return d=ue(M,S+4,A).times(.5),d.s=m.s,d}for(M.precision=c=S+10,M.rounding=1,r=Math.min(28,c/H+2|0),n=r;n;--n)m=m.div(m.times(m).plus(1).sqrt().plus(1));for(Y=!1,i=Math.ceil(c/H),o=1,g=m.times(m),d=new M(m),t=m;n!==-1;)if(t=t.times(g),a=d.minus(t.div(o+=2)),t=t.times(g),d=a.plus(t.div(o+=2)),d.d[i]!==void 0)for(n=i;d.d[n]===a.d[n]&&n--;);return r&&(d=d.times(2<<r-1)),Y=!0,z(d,M.precision=S,M.rounding=A,!0)};I.isFinite=function(){return!!this.d};I.isInteger=I.isInt=function(){return!!this.d&&Xt(this.e/H)>this.d.length-2};I.isNaN=function(){return!this.s};I.isNegative=I.isNeg=function(){return this.s<0};I.isPositive=I.isPos=function(){return this.s>0};I.isZero=function(){return!!this.d&&this.d[0]===0};I.lessThan=I.lt=function(n){return this.cmp(n)<0};I.lessThanOrEqualTo=I.lte=function(n){return this.cmp(n)<1};I.logarithm=I.log=function(n){var i,r,o,t,a,d,c,g,m=this,M=m.constructor,S=M.precision,A=M.rounding,D=5;if(n==null)n=new M(10),i=!0;else{if(n=new M(n),r=n.d,n.s<0||!r||!r[0]||n.eq(1))return new M(NaN);i=n.eq(10)}if(r=m.d,m.s<0||!r||!r[0]||m.eq(1))return new M(r&&!r[0]?-1/0:m.s!=1?NaN:r?0:1/0);if(i)if(r.length>1)a=!0;else{for(t=r[0];t%10===0;)t/=10;a=t!==1}if(Y=!1,c=S+D,d=we(m,c),o=i?Ke(M,c+10):we(n,c),g=ot(d,o,c,1),Ce(g.d,t=S,A))do if(c+=10,d=we(m,c),o=i?Ke(M,c+10):we(n,c),g=ot(d,o,c,1),!a){+Ht(g.d).slice(t+1,t+15)+1==1e14&&(g=z(g,S+1,0));break}while(Ce(g.d,t+=10,A));return Y=!0,z(g,S,A)};I.minus=I.sub=function(n){var i,r,o,t,a,d,c,g,m,M,S,A,D=this,O=D.constructor;if(n=new O(n),!D.d||!n.d)return!D.s||!n.s?n=new O(NaN):D.d?n.s=-n.s:n=new O(n.d||D.s!==n.s?D:NaN),n;if(D.s!=n.s)return n.s=-n.s,D.plus(n);if(m=D.d,A=n.d,c=O.precision,g=O.rounding,!m[0]||!A[0]){if(A[0])n.s=-n.s;else if(m[0])n=new O(D);else return new O(g===3?-0:0);return Y?z(n,c,g):n}if(r=Xt(n.e/H),M=Xt(D.e/H),m=m.slice(),a=M-r,a){for(S=a<0,S?(i=m,a=-a,d=A.length):(i=A,r=M,d=m.length),o=Math.max(Math.ceil(c/H),d)+2,a>o&&(a=o,i.length=1),i.reverse(),o=a;o--;)i.push(0);i.reverse()}else{for(o=m.length,d=A.length,S=o<d,S&&(d=o),o=0;o<d;o++)if(m[o]!=A[o]){S=m[o]<A[o];break}a=0}for(S&&(i=m,m=A,A=i,n.s=-n.s),d=m.length,o=A.length-d;o>0;--o)m[d++]=0;for(o=A.length;o>a;){if(m[--o]<A[o]){for(t=o;t&&m[--t]===0;)m[t]=le-1;--m[t],m[o]+=le}m[o]-=A[o]}for(;m[--d]===0;)m.pop();for(;m[0]===0;m.shift())--r;return m[0]?(n.d=m,n.e=Ge(m,r),Y?z(n,c,g):n):new O(g===3?-0:0)};I.modulo=I.mod=function(n){var i,r=this,o=r.constructor;return n=new o(n),!r.d||!n.s||n.d&&!n.d[0]?new o(NaN):!n.d||r.d&&!r.d[0]?z(new o(r),o.precision,o.rounding):(Y=!1,o.modulo==9?(i=ot(r,n.abs(),0,3,1),i.s*=n.s):i=ot(r,n,0,o.modulo,1),i=i.times(n),Y=!0,r.minus(i))};I.naturalExponential=I.exp=function(){return Oi(this)};I.naturalLogarithm=I.ln=function(){return we(this)};I.negated=I.neg=function(){var n=new this.constructor(this);return n.s=-n.s,z(n)};I.plus=I.add=function(n){var i,r,o,t,a,d,c,g,m,M,S=this,A=S.constructor;if(n=new A(n),!S.d||!n.d)return!S.s||!n.s?n=new A(NaN):S.d||(n=new A(n.d||S.s===n.s?S:NaN)),n;if(S.s!=n.s)return n.s=-n.s,S.minus(n);if(m=S.d,M=n.d,c=A.precision,g=A.rounding,!m[0]||!M[0])return M[0]||(n=new A(S)),Y?z(n,c,g):n;if(a=Xt(S.e/H),o=Xt(n.e/H),m=m.slice(),t=a-o,t){for(t<0?(r=m,t=-t,d=M.length):(r=M,o=a,d=m.length),a=Math.ceil(c/H),d=a>d?a+1:d+1,t>d&&(t=d,r.length=1),r.reverse();t--;)r.push(0);r.reverse()}for(d=m.length,t=M.length,d-t<0&&(t=d,r=M,M=m,m=r),i=0;t;)i=(m[--t]=m[t]+M[t]+i)/le|0,m[t]%=le;for(i&&(m.unshift(i),++o),d=m.length;m[--d]==0;)m.pop();return n.d=m,n.e=Ge(m,o),Y?z(n,c,g):n};I.precision=I.sd=function(n){var i,r=this;if(n!==void 0&&n!==!!n&&n!==1&&n!==0)throw Error(ve+n);return r.d?(i=pr(r.d),n&&r.e+1>i&&(i=r.e+1)):i=NaN,i};I.round=function(){var n=this,i=n.constructor;return z(new i(n),n.e+1,i.rounding)};I.sine=I.sin=function(){var n,i,r=this,o=r.constructor;return r.isFinite()?r.isZero()?new o(r):(n=o.precision,i=o.rounding,o.precision=n+Math.max(r.e,r.sd())+H,o.rounding=1,r=Jr(o,wr(o,r)),o.precision=n,o.rounding=i,z(pe>2?r.neg():r,n,i,!0)):new o(NaN)};I.squareRoot=I.sqrt=function(){var n,i,r,o,t,a,d=this,c=d.d,g=d.e,m=d.s,M=d.constructor;if(m!==1||!c||!c[0])return new M(!m||m<0&&(!c||c[0])?NaN:c?d:1/0);for(Y=!1,m=Math.sqrt(+d),m==0||m==1/0?(i=Ht(c),(i.length+g)%2==0&&(i+="0"),m=Math.sqrt(i),g=Xt((g+1)/2)-(g<0||g%2),m==1/0?i="5e"+g:(i=m.toExponential(),i=i.slice(0,i.indexOf("e")+1)+g),o=new M(i)):o=new M(m.toString()),r=(g=M.precision)+3;;)if(a=o,o=a.plus(ot(d,a,r+2,1)).times(.5),Ht(a.d).slice(0,r)===(i=Ht(o.d)).slice(0,r))if(i=i.slice(r-3,r+1),i=="9999"||!t&&i=="4999"){if(!t&&(z(a,g+1,0),a.times(a).eq(d))){o=a;break}r+=4,t=1}else{(!+i||!+i.slice(1)&&i.charAt(0)=="5")&&(z(o,g+1,1),n=!o.times(o).eq(d));break}return Y=!0,z(o,g,M.rounding,n)};I.tangent=I.tan=function(){var n,i,r=this,o=r.constructor;return r.isFinite()?r.isZero()?new o(r):(n=o.precision,i=o.rounding,o.precision=n+10,o.rounding=1,r=r.sin(),r.s=1,r=ot(r,new o(1).minus(r.times(r)).sqrt(),n+10,0),o.precision=n,o.rounding=i,z(pe==2||pe==4?r.neg():r,n,i,!0)):new o(NaN)};I.times=I.mul=function(n){var i,r,o,t,a,d,c,g,m,M=this,S=M.constructor,A=M.d,D=(n=new S(n)).d;if(n.s*=M.s,!A||!A[0]||!D||!D[0])return new S(!n.s||A&&!A[0]&&!D||D&&!D[0]&&!A?NaN:!A||!D?n.s/0:n.s*0);for(r=Xt(M.e/H)+Xt(n.e/H),g=A.length,m=D.length,g<m&&(a=A,A=D,D=a,d=g,g=m,m=d),a=[],d=g+m,o=d;o--;)a.push(0);for(o=m;--o>=0;){for(i=0,t=g+o;t>o;)c=a[t]+D[o]*A[t-o-1]+i,a[t--]=c%le|0,i=c/le|0;a[t]=(a[t]+i)%le|0}for(;!a[--d];)a.pop();return i?++r:a.shift(),n.d=a,n.e=Ge(a,r),Y?z(n,S.precision,S.rounding):n};I.toBinary=function(n,i){return Ri(this,2,n,i)};I.toDecimalPlaces=I.toDP=function(n,i){var r=this,o=r.constructor;return r=new o(r),n===void 0?r:(ee(n,0,Me),i===void 0?i=o.rounding:ee(i,0,8),z(r,n+r.e+1,i))};I.toExponential=function(n,i){var r,o=this,t=o.constructor;return n===void 0?r=ce(o,!0):(ee(n,0,Me),i===void 0?i=t.rounding:ee(i,0,8),o=z(new t(o),n+1,i),r=ce(o,!0,n+1)),o.isNeg()&&!o.isZero()?"-"+r:r};I.toFixed=function(n,i){var r,o,t=this,a=t.constructor;return n===void 0?r=ce(t):(ee(n,0,Me),i===void 0?i=a.rounding:ee(i,0,8),o=z(new a(t),n+t.e+1,i),r=ce(o,!1,n+o.e+1)),t.isNeg()&&!t.isZero()?"-"+r:r};I.toFraction=function(n){var i,r,o,t,a,d,c,g,m,M,S,A,D=this,O=D.d,L=D.constructor;if(!O)return new L(D);if(m=r=new L(1),o=g=new L(0),i=new L(o),a=i.e=pr(O)-D.e-1,d=a%H,i.d[0]=Zt(10,d<0?H+d:d),n==null)n=a>0?i:m;else{if(c=new L(n),!c.isInt()||c.lt(m))throw Error(ve+c);n=c.gt(i)?a>0?i:m:c}for(Y=!1,c=new L(Ht(O)),M=L.precision,L.precision=a=O.length*H*2;S=ot(c,i,0,1,1),t=r.plus(S.times(o)),t.cmp(n)!=1;)r=o,o=t,t=m,m=g.plus(S.times(t)),g=t,t=i,i=c.minus(S.times(t)),c=t;return t=ot(n.minus(r),o,0,1,1),g=g.plus(t.times(m)),r=r.plus(t.times(o)),g.s=m.s=D.s,A=ot(m,o,a,1).minus(D).abs().cmp(ot(g,r,a,1).minus(D).abs())<1?[m,o]:[g,r],L.precision=M,Y=!0,A};I.toHexadecimal=I.toHex=function(n,i){return Ri(this,16,n,i)};I.toNearest=function(n,i){var r=this,o=r.constructor;if(r=new o(r),n==null){if(!r.d)return r;n=new o(1),i=o.rounding}else{if(n=new o(n),i===void 0?i=o.rounding:ee(i,0,8),!r.d)return n.s?r:n;if(!n.d)return n.s&&(n.s=r.s),n}return n.d[0]?(Y=!1,r=ot(r,n,0,i,1).times(n),Y=!0,z(r)):(n.s=r.s,r=n),r};I.toNumber=function(){return+this};I.toOctal=function(n,i){return Ri(this,8,n,i)};I.toPower=I.pow=function(n){var i,r,o,t,a,d,c=this,g=c.constructor,m=+(n=new g(n));if(!c.d||!n.d||!c.d[0]||!n.d[0])return new g(Zt(+c,m));if(c=new g(c),c.eq(1))return c;if(o=g.precision,a=g.rounding,n.eq(1))return z(c,o,a);if(i=Xt(n.e/H),i>=n.d.length-1&&(r=m<0?-m:m)<=Gr)return t=mr(g,c,r,o),n.s<0?new g(1).div(t):z(t,o,a);if(d=c.s,d<0){if(i<n.d.length-1)return new g(NaN);if((n.d[i]&1)==0&&(d=1),c.e==0&&c.d[0]==1&&c.d.length==1)return c.s=d,c}return r=Zt(+c,m),i=r==0||!isFinite(r)?Xt(m*(Math.log("0."+Ht(c.d))/Math.LN10+c.e+1)):new g(r+"").e,i>g.maxE+1||i<g.minE-1?new g(i>0?d/0:0):(Y=!1,g.rounding=c.s=1,r=Math.min(12,(i+"").length),t=Oi(n.times(we(c,o+r)),o),t.d&&(t=z(t,o+5,1),Ce(t.d,o,a)&&(i=o+10,t=z(Oi(n.times(we(c,i+r)),i),i+5,1),+Ht(t.d).slice(o+1,o+15)+1==1e14&&(t=z(t,o+1,0)))),t.s=d,Y=!0,g.rounding=a,z(t,o,a))};I.toPrecision=function(n,i){var r,o=this,t=o.constructor;return n===void 0?r=ce(o,o.e<=t.toExpNeg||o.e>=t.toExpPos):(ee(n,1,Me),i===void 0?i=t.rounding:ee(i,0,8),o=z(new t(o),n,i),r=ce(o,n<=o.e||o.e<=t.toExpNeg,n)),o.isNeg()&&!o.isZero()?"-"+r:r};I.toSignificantDigits=I.toSD=function(n,i){var r=this,o=r.constructor;return n===void 0?(n=o.precision,i=o.rounding):(ee(n,1,Me),i===void 0?i=o.rounding:ee(i,0,8)),z(new o(r),n,i)};I.toString=function(){var n=this,i=n.constructor,r=ce(n,n.e<=i.toExpNeg||n.e>=i.toExpPos);return n.isNeg()&&!n.isZero()?"-"+r:r};I.truncated=I.trunc=function(){return z(new this.constructor(this),this.e+1,1)};I.valueOf=I.toJSON=function(){var n=this,i=n.constructor,r=ce(n,n.e<=i.toExpNeg||n.e>=i.toExpPos);return n.isNeg()?"-"+r:r};function Ht(n){var i,r,o,t=n.length-1,a="",d=n[0];if(t>0){for(a+=d,i=1;i<t;i++)o=n[i]+"",r=H-o.length,r&&(a+=_e(r)),a+=o;d=n[i],o=d+"",r=H-o.length,r&&(a+=_e(r))}else if(d===0)return"0";for(;d%10===0;)d/=10;return a+d}function ee(n,i,r){if(n!==~~n||n<i||n>r)throw Error(ve+n)}function Ce(n,i,r,o){var t,a,d,c;for(a=n[0];a>=10;a/=10)--i;return--i<0?(i+=H,t=0):(t=Math.ceil((i+1)/H),i%=H),a=Zt(10,H-i),c=n[t]%a|0,o==null?i<3?(i==0?c=c/100|0:i==1&&(c=c/10|0),d=r<4&&c==99999||r>3&&c==49999||c==5e4||c==0):d=(r<4&&c+1==a||r>3&&c+1==a/2)&&(n[t+1]/a/100|0)==Zt(10,i-2)-1||(c==a/2||c==0)&&(n[t+1]/a/100|0)==0:i<4?(i==0?c=c/1e3|0:i==1?c=c/100|0:i==2&&(c=c/10|0),d=(o||r<4)&&c==9999||!o&&r>3&&c==4999):d=((o||r<4)&&c+1==a||!o&&r>3&&c+1==a/2)&&(n[t+1]/a/1e3|0)==Zt(10,i-3)-1,d}function je(n,i,r){for(var o,t=[0],a,d=0,c=n.length;d<c;){for(a=t.length;a--;)t[a]*=i;for(t[0]+=xi.indexOf(n.charAt(d++)),o=0;o<t.length;o++)t[o]>r-1&&(t[o+1]===void 0&&(t[o+1]=0),t[o+1]+=t[o]/r|0,t[o]%=r)}return t.reverse()}function Vr(n,i){var r,o,t;if(i.isZero())return i;o=i.d.length,o<32?(r=Math.ceil(o/3),t=(1/He(4,r)).toString()):(r=16,t="2.3283064365386962890625e-10"),n.precision+=r,i=Pe(n,1,i.times(t),new n(1));for(var a=r;a--;){var d=i.times(i);i=d.times(d).minus(d).times(8).plus(1)}return n.precision-=r,i}var ot=(function(){function n(o,t,a){var d,c=0,g=o.length;for(o=o.slice();g--;)d=o[g]*t+c,o[g]=d%a|0,c=d/a|0;return c&&o.unshift(c),o}function i(o,t,a,d){var c,g;if(a!=d)g=a>d?1:-1;else for(c=g=0;c<a;c++)if(o[c]!=t[c]){g=o[c]>t[c]?1:-1;break}return g}function r(o,t,a,d){for(var c=0;a--;)o[a]-=c,c=o[a]<t[a]?1:0,o[a]=c*d+o[a]-t[a];for(;!o[0]&&o.length>1;)o.shift()}return function(o,t,a,d,c,g){var m,M,S,A,D,O,L,E,N,R,B,F,W,j,Z,w,b,k,x,C,p=o.constructor,e=o.s==t.s?1:-1,s=o.d,u=t.d;if(!s||!s[0]||!u||!u[0])return new p(!o.s||!t.s||(s?u&&s[0]==u[0]:!u)?NaN:s&&s[0]==0||!u?e*0:e/0);for(g?(D=1,M=o.e-t.e):(g=le,D=H,M=Xt(o.e/D)-Xt(t.e/D)),x=u.length,b=s.length,N=new p(e),R=N.d=[],S=0;u[S]==(s[S]||0);S++);if(u[S]>(s[S]||0)&&M--,a==null?(j=a=p.precision,d=p.rounding):c?j=a+(o.e-t.e)+1:j=a,j<0)R.push(1),O=!0;else{if(j=j/D+2|0,S=0,x==1){for(A=0,u=u[0],j++;(S<b||A)&&j--;S++)Z=A*g+(s[S]||0),R[S]=Z/u|0,A=Z%u|0;O=A||S<b}else{for(A=g/(u[0]+1)|0,A>1&&(u=n(u,A,g),s=n(s,A,g),x=u.length,b=s.length),w=x,B=s.slice(0,x),F=B.length;F<x;)B[F++]=0;C=u.slice(),C.unshift(0),k=u[0],u[1]>=g/2&&++k;do A=0,m=i(u,B,x,F),m<0?(W=B[0],x!=F&&(W=W*g+(B[1]||0)),A=W/k|0,A>1?(A>=g&&(A=g-1),L=n(u,A,g),E=L.length,F=B.length,m=i(L,B,E,F),m==1&&(A--,r(L,x<E?C:u,E,g))):(A==0&&(m=A=1),L=u.slice()),E=L.length,E<F&&L.unshift(0),r(B,L,F,g),m==-1&&(F=B.length,m=i(u,B,x,F),m<1&&(A++,r(B,x<F?C:u,F,g))),F=B.length):m===0&&(A++,B=[0]),R[S++]=A,m&&B[0]?B[F++]=s[w]||0:(B=[s[w]],F=1);while((w++<b||B[0]!==void 0)&&j--);O=B[0]!==void 0}R[0]||R.shift()}if(D==1)N.e=M,ur=O;else{for(S=1,A=R[0];A>=10;A/=10)S++;N.e=S+M*D-1,z(N,c?a+N.e+1:a,d,O)}return N}})();function z(n,i,r,o){var t,a,d,c,g,m,M,S,A,D=n.constructor;t:if(i!=null){if(S=n.d,!S)return n;for(t=1,c=S[0];c>=10;c/=10)t++;if(a=i-t,a<0)a+=H,d=i,M=S[A=0],g=M/Zt(10,t-d-1)%10|0;else if(A=Math.ceil((a+1)/H),c=S.length,A>=c)if(o){for(;c++<=A;)S.push(0);M=g=0,t=1,a%=H,d=a-H+1}else break t;else{for(M=c=S[A],t=1;c>=10;c/=10)t++;a%=H,d=a-H+t,g=d<0?0:M/Zt(10,t-d-1)%10|0}if(o=o||i<0||S[A+1]!==void 0||(d<0?M:M%Zt(10,t-d-1)),m=r<4?(g||o)&&(r==0||r==(n.s<0?3:2)):g>5||g==5&&(r==4||o||r==6&&(a>0?d>0?M/Zt(10,t-d):0:S[A-1])%10&1||r==(n.s<0?8:7)),i<1||!S[0])return S.length=0,m?(i-=n.e+1,S[0]=Zt(10,(H-i%H)%H),n.e=-i||0):S[0]=n.e=0,n;if(a==0?(S.length=A,c=1,A--):(S.length=A+1,c=Zt(10,H-a),S[A]=d>0?(M/Zt(10,t-d)%Zt(10,d)|0)*c:0),m)for(;;)if(A==0){for(a=1,d=S[0];d>=10;d/=10)a++;for(d=S[0]+=c,c=1;d>=10;d/=10)c++;a!=c&&(n.e++,S[0]==le&&(S[0]=1));break}else{if(S[A]+=c,S[A]!=le)break;S[A--]=0,c=1}for(a=S.length;S[--a]===0;)S.pop()}return Y&&(n.e>D.maxE?(n.d=null,n.e=NaN):n.e<D.minE&&(n.e=0,n.d=[0])),n}function ce(n,i,r){if(!n.isFinite())return _r(n);var o,t=n.e,a=Ht(n.d),d=a.length;return i?(r&&(o=r-d)>0?a=a.charAt(0)+"."+a.slice(1)+_e(o):d>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(n.e<0?"e":"e+")+n.e):t<0?(a="0."+_e(-t-1)+a,r&&(o=r-d)>0&&(a+=_e(o))):t>=d?(a+=_e(t+1-d),r&&(o=r-t-1)>0&&(a=a+"."+_e(o))):((o=t+1)<d&&(a=a.slice(0,o)+"."+a.slice(o)),r&&(o=r-d)>0&&(t+1===d&&(a+="."),a+=_e(o))),a}function Ge(n,i){var r=n[0];for(i*=H;r>=10;r/=10)i++;return i}function Ke(n,i,r){if(i>Hr)throw Y=!0,r&&(n.precision=r),Error(cr);return z(new n(We),i,1,!0)}function ue(n,i,r){if(i>Di)throw Error(cr);return z(new n(Ze),i,r,!0)}function pr(n){var i=n.length-1,r=i*H+1;if(i=n[i],i){for(;i%10==0;i/=10)r--;for(i=n[0];i>=10;i/=10)r++}return r}function _e(n){for(var i="";n--;)i+="0";return i}function mr(n,i,r,o){var t,a=new n(1),d=Math.ceil(o/H+4);for(Y=!1;;){if(r%2&&(a=a.times(i),ar(a.d,d)&&(t=!0)),r=Xt(r/2),r===0){r=a.d.length-1,t&&a.d[r]===0&&++a.d[r];break}i=i.times(i),ar(i.d,d)}return Y=!0,a}function sr(n){return n.d[n.d.length-1]&1}function gr(n,i,r){for(var o,t,a=new n(i[0]),d=0;++d<i.length;){if(t=new n(i[d]),!t.s){a=t;break}o=a.cmp(t),(o===r||o===0&&a.s===r)&&(a=t)}return a}function Oi(n,i){var r,o,t,a,d,c,g,m=0,M=0,S=0,A=n.constructor,D=A.rounding,O=A.precision;if(!n.d||!n.d[0]||n.e>17)return new A(n.d?n.d[0]?n.s<0?0:1/0:1:n.s?n.s<0?0:n:NaN);for(i==null?(Y=!1,g=O):g=i,c=new A(.03125);n.e>-2;)n=n.times(c),S+=5;for(o=Math.log(Zt(2,S))/Math.LN10*2+5|0,g+=o,r=a=d=new A(1),A.precision=g;;){if(a=z(a.times(n),g,1),r=r.times(++M),c=d.plus(ot(a,r,g,1)),Ht(c.d).slice(0,g)===Ht(d.d).slice(0,g)){for(t=S;t--;)d=z(d.times(d),g,1);if(i==null)if(m<3&&Ce(d.d,g-o,D,m))A.precision=g+=10,r=a=c=new A(1),M=0,m++;else return z(d,A.precision=O,D,Y=!0);else return A.precision=O,d}d=c}}function we(n,i){var r,o,t,a,d,c,g,m,M,S,A,D=1,O=10,L=n,E=L.d,N=L.constructor,R=N.rounding,B=N.precision;if(L.s<0||!E||!E[0]||!L.e&&E[0]==1&&E.length==1)return new N(E&&!E[0]?-1/0:L.s!=1?NaN:E?0:L);if(i==null?(Y=!1,M=B):M=i,N.precision=M+=O,r=Ht(E),o=r.charAt(0),Math.abs(a=L.e)<15e14){for(;o<7&&o!=1||o==1&&r.charAt(1)>3;)L=L.times(n),r=Ht(L.d),o=r.charAt(0),D++;a=L.e,o>1?(L=new N("0."+r),a++):L=new N(o+"."+r.slice(1))}else return m=Ke(N,M+2,B).times(a+""),L=we(new N(o+"."+r.slice(1)),M-O).plus(m),N.precision=B,i==null?z(L,B,R,Y=!0):L;for(S=L,g=d=L=ot(L.minus(1),L.plus(1),M,1),A=z(L.times(L),M,1),t=3;;){if(d=z(d.times(A),M,1),m=g.plus(ot(d,new N(t),M,1)),Ht(m.d).slice(0,M)===Ht(g.d).slice(0,M))if(g=g.times(2),a!==0&&(g=g.plus(Ke(N,M+2,B).times(a+""))),g=ot(g,new N(D),M,1),i==null)if(Ce(g.d,M-O,R,c))N.precision=M+=O,m=d=L=ot(S.minus(1),S.plus(1),M,1),A=z(L.times(L),M,1),t=c=1;else return z(g,N.precision=B,R,Y=!0);else return N.precision=B,g;g=m,t+=2}}function _r(n){return String(n.s*n.s/0)}function $e(n,i){var r,o,t;for((r=i.indexOf("."))>-1&&(i=i.replace(".","")),(o=i.search(/e/i))>0?(r<0&&(r=o),r+=+i.slice(o+1),i=i.substring(0,o)):r<0&&(r=i.length),o=0;i.charCodeAt(o)===48;o++);for(t=i.length;i.charCodeAt(t-1)===48;--t);if(i=i.slice(o,t),i){if(t-=o,n.e=r=r-o-1,n.d=[],o=(r+1)%H,r<0&&(o+=H),o<t){for(o&&n.d.push(+i.slice(0,o)),t-=H;o<t;)n.d.push(+i.slice(o,o+=H));i=i.slice(o),o=H-i.length}else o-=t;for(;o--;)i+="0";n.d.push(+i),Y&&(n.e>n.constructor.maxE?(n.d=null,n.e=NaN):n.e<n.constructor.minE&&(n.e=0,n.d=[0]))}else n.e=0,n.d=[0];return n}function Xr(n,i){var r,o,t,a,d,c,g,m,M;if(i.indexOf("_")>-1){if(i=i.replace(/(\d)_(?=\d)/g,"$1"),hr.test(i))return $e(n,i)}else if(i==="Infinity"||i==="NaN")return+i||(n.s=NaN),n.e=NaN,n.d=null,n;if(Kr.test(i))r=16,i=i.toLowerCase();else if(Zr.test(i))r=2;else if(zr.test(i))r=8;else throw Error(ve+i);for(a=i.search(/p/i),a>0?(g=+i.slice(a+1),i=i.substring(2,a)):i=i.slice(2),a=i.indexOf("."),d=a>=0,o=n.constructor,d&&(i=i.replace(".",""),c=i.length,a=c-a,t=mr(o,new o(r),a,a*2)),m=je(i,r,le),M=m.length-1,a=M;m[a]===0;--a)m.pop();return a<0?new o(n.s*0):(n.e=Ge(m,M),n.d=m,Y=!1,d&&(n=ot(n,t,c*4)),g&&(n=n.times(Math.abs(g)<54?Zt(2,g):xe.pow(2,g))),Y=!0,n)}function Jr(n,i){var r,o=i.d.length;if(o<3)return i.isZero()?i:Pe(n,2,i,i);r=1.4*Math.sqrt(o),r=r>16?16:r|0,i=i.times(1/He(5,r)),i=Pe(n,2,i,i);for(var t,a=new n(5),d=new n(16),c=new n(20);r--;)t=i.times(i),i=i.times(a.plus(t.times(d.times(t).minus(c))));return i}function Pe(n,i,r,o,t){var a,d,c,g,m=1,M=n.precision,S=Math.ceil(M/H);for(Y=!1,g=r.times(r),c=new n(o);;){if(d=ot(c.times(g),new n(i++*i++),M,1),c=t?o.plus(d):o.minus(d),o=ot(d.times(g),new n(i++*i++),M,1),d=c.plus(o),d.d[S]!==void 0){for(a=S;d.d[a]===c.d[a]&&a--;);if(a==-1)break}a=c,c=o,o=d,d=a,m++}return Y=!0,d.d.length=S+1,d}function He(n,i){for(var r=n;--i;)r*=n;return r}function wr(n,i){var r,o=i.s<0,t=ue(n,n.precision,1),a=t.times(.5);if(i=i.abs(),i.lte(a))return pe=o?4:1,i;if(r=i.divToInt(t),r.isZero())pe=o?3:2;else{if(i=i.minus(r.times(t)),i.lte(a))return pe=sr(r)?o?2:3:o?4:1,i;pe=sr(r)?o?1:4:o?3:2}return i.minus(t).abs()}function Ri(n,i,r,o){var t,a,d,c,g,m,M,S,A,D=n.constructor,O=r!==void 0;if(O?(ee(r,1,Me),o===void 0?o=D.rounding:ee(o,0,8)):(r=D.precision,o=D.rounding),!n.isFinite())M=_r(n);else{for(M=ce(n),d=M.indexOf("."),O?(t=2,i==16?r=r*4-3:i==8&&(r=r*3-2)):t=i,d>=0&&(M=M.replace(".",""),A=new D(1),A.e=M.length-d,A.d=je(ce(A),10,t),A.e=A.d.length),S=je(M,10,t),a=g=S.length;S[--g]==0;)S.pop();if(!S[0])M=O?"0p+0":"0";else{if(d<0?a--:(n=new D(n),n.d=S,n.e=a,n=ot(n,A,r,o,0,t),S=n.d,a=n.e,m=ur),d=S[r],c=t/2,m=m||S[r+1]!==void 0,m=o<4?(d!==void 0||m)&&(o===0||o===(n.s<0?3:2)):d>c||d===c&&(o===4||m||o===6&&S[r-1]&1||o===(n.s<0?8:7)),S.length=r,m)for(;++S[--r]>t-1;)S[r]=0,r||(++a,S.unshift(1));for(g=S.length;!S[g-1];--g);for(d=0,M="";d<g;d++)M+=xi.charAt(S[d]);if(O){if(g>1)if(i==16||i==8){for(d=i==16?4:3,--g;g%d;g++)M+="0";for(S=je(M,t,i),g=S.length;!S[g-1];--g);for(d=1,M="1.";d<g;d++)M+=xi.charAt(S[d])}else M=M.charAt(0)+"."+M.slice(1);M=M+(a<0?"p":"p+")+a}else if(a<0){for(;++a;)M="0"+M;M="0."+M}else if(++a>g)for(a-=g;a--;)M+="0";else a<g&&(M=M.slice(0,a)+"."+M.slice(a))}M=(i==16?"0x":i==2?"0b":i==8?"0o":"")+M}return n.s<0?"-"+M:M}function ar(n,i){if(n.length>i)return n.length=i,!0}function Yr(n){return new this(n).abs()}function Qr(n){return new this(n).acos()}function tn(n){return new this(n).acosh()}function en(n,i){return new this(n).plus(i)}function rn(n){return new this(n).asin()}function nn(n){return new this(n).asinh()}function on(n){return new this(n).atan()}function sn(n){return new this(n).atanh()}function an(n,i){n=new this(n),i=new this(i);var r,o=this.precision,t=this.rounding,a=o+4;return!n.s||!i.s?r=new this(NaN):!n.d&&!i.d?(r=ue(this,a,1).times(i.s>0?.25:.75),r.s=n.s):!i.d||n.isZero()?(r=i.s<0?ue(this,o,t):new this(0),r.s=n.s):!n.d||i.isZero()?(r=ue(this,a,1).times(.5),r.s=n.s):i.s<0?(this.precision=a,this.rounding=1,r=this.atan(ot(n,i,a,1)),i=ue(this,a,1),this.precision=o,this.rounding=t,r=n.s<0?r.minus(i):r.plus(i)):r=this.atan(ot(n,i,a,1)),r}function ln(n){return new this(n).cbrt()}function un(n){return z(n=new this(n),n.e+1,2)}function cn(n,i,r){return new this(n).clamp(i,r)}function fn(n){if(!n||typeof n!="object")throw Error(ze+"Object expected");var i,r,o,t=n.defaults===!0,a=["precision",1,Me,"rounding",0,8,"toExpNeg",-Se,0,"toExpPos",0,Se,"maxE",0,Se,"minE",-Se,0,"modulo",0,9];for(i=0;i<a.length;i+=3)if(r=a[i],t&&(this[r]=Ti[r]),(o=n[r])!==void 0)if(Xt(o)===o&&o>=a[i+1]&&o<=a[i+2])this[r]=o;else throw Error(ve+r+": "+o);if(r="crypto",t&&(this[r]=Ti[r]),(o=n[r])!==void 0)if(o===!0||o===!1||o===0||o===1)if(o)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(fr);else this[r]=!1;else throw Error(ve+r+": "+o);return this}function dn(n){return new this(n).cos()}function hn(n){return new this(n).cosh()}function vr(n){var i,r,o;function t(a){var d,c,g,m=this;if(!(m instanceof t))return new t(a);if(m.constructor=t,lr(a)){m.s=a.s,Y?!a.d||a.e>t.maxE?(m.e=NaN,m.d=null):a.e<t.minE?(m.e=0,m.d=[0]):(m.e=a.e,m.d=a.d.slice()):(m.e=a.e,m.d=a.d?a.d.slice():a.d);return}if(g=typeof a,g==="number"){if(a===0){m.s=1/a<0?-1:1,m.e=0,m.d=[0];return}if(a<0?(a=-a,m.s=-1):m.s=1,a===~~a&&a<1e7){for(d=0,c=a;c>=10;c/=10)d++;Y?d>t.maxE?(m.e=NaN,m.d=null):d<t.minE?(m.e=0,m.d=[0]):(m.e=d,m.d=[a]):(m.e=d,m.d=[a]);return}if(a*0!==0){a||(m.s=NaN),m.e=NaN,m.d=null;return}return $e(m,a.toString())}if(g==="string")return(c=a.charCodeAt(0))===45?(a=a.slice(1),m.s=-1):(c===43&&(a=a.slice(1)),m.s=1),hr.test(a)?$e(m,a):Xr(m,a);if(g==="bigint")return a<0?(a=-a,m.s=-1):m.s=1,$e(m,a.toString());throw Error(ve+a)}if(t.prototype=I,t.ROUND_UP=0,t.ROUND_DOWN=1,t.ROUND_CEIL=2,t.ROUND_FLOOR=3,t.ROUND_HALF_UP=4,t.ROUND_HALF_DOWN=5,t.ROUND_HALF_EVEN=6,t.ROUND_HALF_CEIL=7,t.ROUND_HALF_FLOOR=8,t.EUCLID=9,t.config=t.set=fn,t.clone=vr,t.isDecimal=lr,t.abs=Yr,t.acos=Qr,t.acosh=tn,t.add=en,t.asin=rn,t.asinh=nn,t.atan=on,t.atanh=sn,t.atan2=an,t.cbrt=ln,t.ceil=un,t.clamp=cn,t.cos=dn,t.cosh=hn,t.div=pn,t.exp=mn,t.floor=gn,t.hypot=_n,t.ln=wn,t.log=vn,t.log10=bn,t.log2=Mn,t.max=yn,t.min=kn,t.mod=Sn,t.mul=Pn,t.pow=An,t.random=Cn,t.round=xn,t.sign=Tn,t.sin=Dn,t.sinh=On,t.sqrt=Rn,t.sub=Ln,t.sum=Nn,t.tan=En,t.tanh=In,t.trunc=Bn,n===void 0&&(n={}),n&&n.defaults!==!0)for(o=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],i=0;i<o.length;)n.hasOwnProperty(r=o[i++])||(n[r]=this[r]);return t.config(n),t}function pn(n,i){return new this(n).div(i)}function mn(n){return new this(n).exp()}function gn(n){return z(n=new this(n),n.e+1,3)}function _n(){var n,i,r=new this(0);for(Y=!1,n=0;n<arguments.length;)if(i=new this(arguments[n++]),i.d)r.d&&(r=r.plus(i.times(i)));else{if(i.s)return Y=!0,new this(1/0);r=i}return Y=!0,r.sqrt()}function lr(n){return n instanceof xe||n&&n.toStringTag===dr||!1}function wn(n){return new this(n).ln()}function vn(n,i){return new this(n).log(i)}function Mn(n){return new this(n).log(2)}function bn(n){return new this(n).log(10)}function yn(){return gr(this,arguments,-1)}function kn(){return gr(this,arguments,1)}function Sn(n,i){return new this(n).mod(i)}function Pn(n,i){return new this(n).mul(i)}function An(n,i){return new this(n).pow(i)}function Cn(n){var i,r,o,t,a=0,d=new this(1),c=[];if(n===void 0?n=this.precision:ee(n,1,Me),o=Math.ceil(n/H),this.crypto)if(crypto.getRandomValues)for(i=crypto.getRandomValues(new Uint32Array(o));a<o;)t=i[a],t>=429e7?i[a]=crypto.getRandomValues(new Uint32Array(1))[0]:c[a++]=t%1e7;else if(crypto.randomBytes){for(i=crypto.randomBytes(o*=4);a<o;)t=i[a]+(i[a+1]<<8)+(i[a+2]<<16)+((i[a+3]&127)<<24),t>=214e7?crypto.randomBytes(4).copy(i,a):(c.push(t%1e7),a+=4);a=o/4}else throw Error(fr);else for(;a<o;)c[a++]=Math.random()*1e7|0;for(o=c[--a],n%=H,o&&n&&(t=Zt(10,H-n),c[a]=(o/t|0)*t);c[a]===0;a--)c.pop();if(a<0)r=0,c=[0];else{for(r=-1;c[0]===0;r-=H)c.shift();for(o=1,t=c[0];t>=10;t/=10)o++;o<H&&(r-=H-o)}return d.e=r,d.d=c,d}function xn(n){return z(n=new this(n),n.e+1,this.rounding)}function Tn(n){return n=new this(n),n.d?n.d[0]?n.s:0*n.s:n.s||NaN}function Dn(n){return new this(n).sin()}function On(n){return new this(n).sinh()}function Rn(n){return new this(n).sqrt()}function Ln(n,i){return new this(n).sub(i)}function Nn(){var n=0,i=arguments,r=new this(i[n]);for(Y=!1;r.s&&++n<i.length;)r=r.plus(i[n]);return Y=!0,z(r,this.precision,this.rounding)}function En(n){return new this(n).tan()}function In(n){return new this(n).tanh()}function Bn(n){return z(n=new this(n),n.e+1,1)}I[Symbol.for("nodejs.util.inspect.custom")]=I.toString;I[Symbol.toStringTag]="Decimal";var xe=I.constructor=vr(Ti);We=new xe(We);Ze=new xe(Ze);var gt=xe;var Mr=require("@suilend/sdk");var Ve=class{constructor(i){this.getPositionList=async(i=this._sdk.getSenderAddress(),r=!1)=>{let{lending_market_id:o,lending_market_type:t}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend);try{let a=`cap_to_position_mapping_${i}`,d=this._sdk.getCache(a,r),c=await this._sdk.FullClient.getOwnedObjectsByPage(i,{options:{showType:!0,showContent:!0,showOwner:!0},filter:{MatchAny:[{StructType:`${this._sdk.sdkOptions.margin_trading.package_id}::position::PositionCap`}]}});if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:42 ~ PositionModules ~ ownerRes.data.length:",c.data.length),c.data.length===0)return Yt("PositionNotFound","Position not found"),[];let g=await this._sdk.SuiLendModule.getSuilendClient(o,t);console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:48 ~ PositionModules ~ suiLendClient:",g);let{allLendingMarketData:m,lstAprPercentMap:M}=await this._sdk.SuiLendModule.getLendingMarketData();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:50 ~ PositionModules ~ allLendingMarketData:",m);let S=m[o].reserveMap;d||(d=new Map);let A=[];for(let E=0;E<c.data.length;E++){let N=(0,T.getObjectFields)(c.data[E]);N.position_id&&A.push(N.position_id),N.id.id&&d.set(N.id.id,N.position_id)}await this._sdk.updateCache(a,d,T.CACHE_TIME_24H);let D=await this._sdk.FullClient.batchGetObjects(A,{showContent:!0});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:73 ~ PositionModules ~ positionRes:",D);let O=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:m,lstAprPercentMap:M},!0);console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:75 ~ PositionModules ~ obligations:",O);let L=[];for(let E=0;E<D.length;E++){let N=A[E],R="";for(let[Z,w]of d.entries())if(w===N){R=Z;break}let B=Le(D[E],R),F=await g.getObligation(B.obligation_owner_cap),W=Ne(B,F,S||{},M||{},O[o].rewardMap),j=this.getObligationRewardsInfo(F,Object.values(S));L.push({...W,claimable_rewards:j})}return L}catch(a){return Yt("FetchError",a),[]}};this.getPositionInfo=async(i,r=this._sdk.getSenderAddress(),o=!0)=>{let t=`cap_to_position_mapping_${r}`,a=this._sdk.getCache(t,o);a||(a=new Map);let d=this.getCapIdByPositionId(i,r)||"";if(!d){let F=await this._sdk.FullClient.getOwnedObjectsByPage(r,{options:{showType:!0,showContent:!0,showOwner:!0},filter:{MatchAny:[{StructType:`${this._sdk.sdkOptions.margin_trading.package_id}::position::PositionCap`}]}});for(let W=0;W<F.data.length;W++){let j=(0,T.getObjectFields)(F.data[W]);j.id.id&&a.set(j.id.id,j.position_id),j.position_id===i&&(d=j.id.id)}}let c=await this._sdk.FullClient.batchGetObjects([i],{showContent:!0}),g=Le(c[0],d||""),{lending_market_id:m,lending_market_type:M}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),S=await this._sdk.SuiLendModule.getSuilendClient(m,M),{allLendingMarketData:A,lstAprPercentMap:D}=await this._sdk.SuiLendModule.getLendingMarketData(),O=A[m].reserveMap,L=await this._sdk.SuiLendModule.getInitializeObligations({allLendingMarketData:A,lstAprPercentMap:D},!0),E=await S.getObligation(g.obligation_owner_cap),N=this.getObligationRewardsInfo(E,Object.values(O));return{...Ne(g,E,O||{},D||{},L[m].rewardMap),claimable_rewards:N}};this.getCapIdByPositionId=(i,r=this._sdk.getSenderAddress())=>{let o=`cap_to_position_mapping_${r}`,t=this._sdk.getCache(o,!1);if(!t)return"";for(let[a,d]of t.entries())if(d===i)return a;return""};this.repay=i=>{let{margin_trading:r}=this._sdk.sdkOptions,{lending_market_id:o,lending_market_type:t}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:a,versioned_id:d}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{txb:c,repay_amount:g,repay_coin_type:m,repay_coin:M,repay_reserve_array_index:S,market_id:A,position_cap_id:D,margin_trading_context:O}=i,L=c||new oe.Transaction,E=M||T.CoinAssist.buildCoinWithBalance(BigInt(g.toString()),m,L);L.moveCall({target:`${r.published_at}::router::repay`,typeArguments:[t,m],arguments:[O,L.object(a),L.object(o),L.object(A),L.object(D),E,L.pure.u64(S.toString()),L.object(T.CLOCK_ADDRESS),L.object(d)]})};this.withdrawAsset=(i,r)=>{let{margin_trading:o}=this._sdk.sdkOptions,{lending_market_id:t,lending_market_type:a}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:d,versioned_id:c}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{package_id:g}=this._sdk.sdkOptions.suilend,{market_id:m,withdraw_amount:M,withdraw_reserve_array_index:S,withdraw_coin_type:A,position_cap_id:D,margin_trading_context:O}=i,[L]=r.moveCall({target:"0x1::option::none",typeArguments:[`${g}::lending_market::RateLimiterExemption<${a}, ${A}>`],arguments:[]});return r.moveCall({target:`${o.published_at}::router::withdraw`,typeArguments:[a,A],arguments:[O,r.object(d),r.object(t),r.object(m),r.object(D),r.object(L),r.pure.u64(M),r.pure.u64(S),r.object(T.SUI_SYSTEM_STATE_OBJECT_ID),r.object(T.CLOCK_ADDRESS),r.object(c)]})};this.borrowAsset=(i,r)=>{let{reserve_array_index:o,borrow_amount:t,base_token:a,quote_token:d,lending_market_id:c,is_long:g,market_id:m,position_cap_id:M,position_cap:S,margin_trading_context:A}=i,{margin_trading:D}=this._sdk.sdkOptions,{lending_market_type:O}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:L,versioned_id:E}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);return r.moveCall({target:`${D.published_at}::router::borrow`,typeArguments:[O,g?d:a],arguments:[A,r.object(L),r.object(c),r.object(m),M?r.object(M):S,r.pure.u64(o),r.pure.u64(t.toString()),r.object(T.SUI_SYSTEM_STATE_OBJECT_ID),r.object(T.CLOCK_ADDRESS),r.object(E)]})};this.createMarginTradingContext=(i,r)=>{let{published_at:o}=this._sdk.sdkOptions.margin_trading,{market_id:t,position_cap_id:a,action:d,coin_type:c,amount:g}=i;return r.moveCall({target:`${o}::router::create_margin_trading_context`,arguments:[r.object(t),r.object(a),r.pure.string(d),r.pure.u64(g)],typeArguments:[c]})};this.marginTradingContextConfirm=(i,r)=>{let{published_at:o}=this._sdk.sdkOptions.margin_trading;return r.moveCall({target:`${o}::router::confirm`,arguments:[i],typeArguments:[]}),r};this.openPosition=async i=>{let{is_quote:r,is_long:o,amount:t,swap_clmm_pool:a="",slippage:d,leverage:c,market_id:g}=i,{lending_market_id:m}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),M=new oe.Transaction,{base_token:S,quote_token:A}=await this._sdk.MarketModules.getMarketInfo(g),{flash_amount:D,flash_loan_coin:O,is_flash_a:L,borrow_amount:E,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R,clmm_pool:B,base_reserve_array_index:F,quote_reserve_array_index:W,reserve:j,has_swap:Z,routers:w}=await this.calculatePositionDeposit({is_long:o,is_quote:r,amount:t,swap_clmm_pool:a,leverage:c,slippage:d,market_id:g,base_token:S,quote_token:A,is_submit:!0});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:492 ~ PositionModules ~ routers:",w),await this._sdk.SuiLendModule.refreshReservePrices(M,j);let{balance_a:b,balance_b:k,receipt:x}=this._sdk.SwapModules.flashLoan({amount:D,clmm_pool:B,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R,flash_loan_coin:O,tx:M}),C=o?A:S,p=o?S:A,e=T.CoinAssist.buildCoinWithBalance(BigInt(t),r?A:S,M),s=T.CoinAssist.fromBalance(b,N,M),u=T.CoinAssist.fromBalance(k,R,M);Z&&(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:515 ~ PositionModules ~ is_flash_a:",L),M.mergeCoins(e,[L?s:u])),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:521 ~ PositionModules ~ d(flash_amount).add(amount).toString():",(0,T.d)(D).add(t).toString(),C,p);let f=await this._sdk.SwapModules.handleSwap({from:C,to:p,amount:Z?(0,T.d)(D).add(t).toString():D,input_coin:Z?e:L?s:u,swap_clmm_pool:a,slippage:d,tx:M}),{position_cap:h,margin_trading_context:v}=this.createLeveragePosition({leverage:c,market_id:g,base_token:S,quote_token:A,is_long:o,init_deposit_amount:(0,T.d)(t).toString(),init_coin_type:r?A:S,tx:M}),P=o?F:W;f.swap_out_coin&&!Z&&M.mergeCoins(f.swap_out_coin,[e]),await this.depositToLeveragePosition({is_long:o,market_id:g,position_cap:h,deposit_reserve_array_index:P,input_coin:f.swap_out_coin,margin_trading_context:v,base_token:S,quote_token:A},M),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:580 ~ PositionModules ~ borrow_amount:",E);let _=this.borrowAsset({position_cap:h,reserve_array_index:o?W:F,borrow_amount:E,base_token:S,quote_token:A,is_long:o,lending_market_id:m,market_id:g,margin_trading_context:v},M),l=T.CoinAssist.mintBalanceZero(L?R:N,M);return this._sdk.SwapModules.repayFlashLoan({tx:M,clmm_pool:B,repay_base:L?T.CoinAssist.intoBalance(_,N,M):l,repay_quote:L?l:T.CoinAssist.intoBalance(_,R,M),receipt:x,clmm_pool_coin_type_a:N,clmm_pool_coin_type_b:R}),M.transferObjects([h],M.pure.address(this._sdk.getSenderAddress())),T.CoinAssist.destroyBalanceZero(L?T.CoinAssist.intoBalance(u,R,M):T.CoinAssist.intoBalance(s,N,M),L?R:N,M),this.marginTradingContextConfirm(v,M),M};this.positionDeposit=async i=>{let{position_id:r,swap_clmm_pool:o="",is_quote:t,amount:a,slippage:d,leverage:c,txb:g}=i,{lending_market_id:m}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{is_long:M,deposits:S,borrows:A,position_cap_id:D,market_id:O}=await this.getPositionInfo(r),{base_token:L,quote_token:E}=await this._sdk.MarketModules.getMarketInfo(O),N=g||new oe.Transaction,R=this.createMarginTradingContext({market_id:O,position_cap_id:D,action:"increase_size",coin_type:t?E:L,amount:a.toString()},N),B=S[0].reserveArrayIndex.toString(),F=A[0].reserveArrayIndex.toString(),{flash_amount:W,flash_loan_coin:j,is_flash_a:Z,borrow_amount:w,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k,clmm_pool:x,reserve:C,has_swap:p}=await this.calculatePositionDeposit({market_id:O,is_long:M,is_quote:t,amount:a,swap_clmm_pool:o,leverage:c,slippage:d,base_token:L,quote_token:E,position_id:r,is_open:!1});console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:603 ~ PositionModules ~ flash_amount:",W),await this._sdk.SuiLendModule.refreshReservePrices(N,C);let{balance_a:e,balance_b:s,receipt:u}=this._sdk.SwapModules.flashLoan({amount:W,clmm_pool:x,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k,flash_loan_coin:j,tx:N}),f=M?E:L,h=M?L:E,v=T.CoinAssist.buildCoinWithBalance(BigInt(a),t?E:L,N),P=T.CoinAssist.fromBalance(e,b,N),_=T.CoinAssist.fromBalance(s,k,N);p&&N.mergeCoins(v,[Z?P:_]);let l=await this._sdk.SwapModules.handleSwap({from:f,to:h,amount:p?(0,T.d)(W).add(a).toString():W,input_coin:p?v:Z?P:_,swap_clmm_pool:o,slippage:d,tx:N});l.swap_out_coin&&!p&&N.mergeCoins(l.swap_out_coin,[v]),await this.depositToLeveragePosition({is_long:M,market_id:O,position_cap_id:D,deposit_reserve_array_index:B,input_coin:l.swap_out_coin,margin_trading_context:R,base_token:L,quote_token:E},N);let y=await this.borrowAsset({position_cap_id:D,reserve_array_index:F,borrow_amount:w,base_token:L,quote_token:E,is_long:M,lending_market_id:m,market_id:O,margin_trading_context:R},N),U=T.CoinAssist.mintBalanceZero(Z?k:b,N);return this._sdk.SwapModules.repayFlashLoan({tx:N,clmm_pool:x,repay_base:Z?T.CoinAssist.intoBalance(y,b,N):U,repay_quote:Z?U:T.CoinAssist.intoBalance(y,k,N),receipt:u,clmm_pool_coin_type_a:b,clmm_pool_coin_type_b:k}),T.CoinAssist.destroyBalanceZero(Z?T.CoinAssist.intoBalance(_,k,N):T.CoinAssist.intoBalance(P,b,N),Z?k:b,N),await this.marginTradingContextConfirm(R,N),N};this.positionWithdraw=async i=>{let{amount:r,is_quote:o,txb:t,swap_clmm_pool:a="",slippage:d,position_id:c,leverage:g}=i,m=t||new oe.Transaction,{withdraw_ctoken_amount:M,repay_amount:S,is_close:A,deposits:D,borrows:O,reserve:L,base_token:E,quote_token:N,clmm_pool:R,clmm_pool_coin_type_a:B,clmm_pool_coin_type_b:F,position_cap_id:W,market_id:j,is_long:Z,swap_convert_all:w,flash_loan_amount:b,routers:k,repay_flash_loan_amount:x="0",partial_amount_in:C,withdraw_amount:p,has_flash_loan:e}=await this.calculatePositionWithdraw({position_id:c,is_quote:o,swap_clmm_pool:a,amount:r,leverage:g,slippage:d});if(A)return this.positionClose({position_id:c,is_quote:o,leverage:g,slippage:d,swap_clmm_pool:a});let s=this.createMarginTradingContext({market_id:j,position_cap_id:W,action:"decrease_size",coin_type:o?N:E,amount:r.toString()},m);await this._sdk.SuiLendModule.refreshReservePrices(m,L);let u,f;if(e){let{balance_a:_,balance_b:l,receipt:y,is_loan_a:U}=this._sdk.SwapModules.flashLoan({tx:m,amount:b,flash_loan_coin:O[0].reserve.coinType,clmm_pool:R,clmm_pool_coin_type_a:B,clmm_pool_coin_type_b:F});u=y,f=U,T.CoinAssist.destroyBalanceZero(f?l:_,f?F:B,m);let q=U?T.CoinAssist.fromBalance(_,B,m):T.CoinAssist.fromBalance(l,F,m);this.repay({txb:m,position_cap_id:W,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:q,repay_coin_type:Z?N:E,repay_amount:"0",market_id:j,margin_trading_context:s}),m.transferObjects([q],this._sdk.getSenderAddress())}let h=this.withdrawAsset({market_id:j,position_cap_id:W,withdraw_amount:M.toString(),withdraw_reserve_array_index:D[0].reserveArrayIndex.toString(),withdraw_coin_type:Z?E:N,margin_trading_context:s},m);for(let _=1;_<D.length;_++){let l=this.withdrawAsset({market_id:j,position_cap_id:W,withdraw_amount:T.U64_MAX.toString(),withdraw_reserve_array_index:D[_].reserveArrayIndex.toString(),withdraw_coin_type:D[_].coinType,margin_trading_context:s},m);m.transferObjects([l],this._sdk.getSenderAddress())}let v;if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:778 ~ PositionModules ~ swap_convert_all:",{swap_convert_all:w,has_flash_loan:e}),w)v=await this._sdk.SwapModules.routerSwap({router:k?.route_obj,input_coin:h,slippage:d,txb:m});else{let _=m.splitCoins(h,[m.pure.u64(C?.toString()||"0")]);v=await this._sdk.SwapModules.routerSwap({router:k?.route_obj,input_coin:_,slippage:d,txb:m})}let P;if(v&&e&&(P=m.splitCoins(v,[m.pure.u64(x.toString())])),P&&e){let _=T.CoinAssist.mintBalanceZero(f?F:B,m);this._sdk.SwapModules.repayFlashLoan({tx:m,clmm_pool:R,repay_base:f?T.CoinAssist.intoBalance(P,B,m):_,repay_quote:f?_:T.CoinAssist.intoBalance(P,F,m),clmm_pool_coin_type_a:B,clmm_pool_coin_type_b:F,receipt:u})}else if(v){let _=m.splitCoins(v,[m.pure.u64(x.toString())]);this.repay({txb:m,position_cap_id:W,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:_,repay_coin_type:Z?N:E,repay_amount:"0",market_id:j,margin_trading_context:s}),m.transferObjects([_],this._sdk.getSenderAddress())}return v&&m.transferObjects([v],this._sdk.getSenderAddress()),w||m.transferObjects([h],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(s,m),m};this.positionClose=async i=>{let{position_id:r,is_quote:o,slippage:t,leverage:a,swap_clmm_pool:d=""}=i,{margin_trading:c}=this._sdk.sdkOptions,{global_config_id:g,versioned_id:m}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),{lending_market_type:M,lending_market_id:S}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),A=new oe.Transaction,{deposits:D,borrows:O,base_token:L,quote_token:E,clmm_pool:N,clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:B,position_cap_id:F,market_id:W,swap_convert_all:j,routers:Z,partial_amount_in:w,is_long:b,flash_loan_amount:k,reserve:x,repay_flash_loan_amount:C="0",claimable_rewards:p}=await this.calculatePositionWithdraw({position_id:r,is_quote:o,swap_clmm_pool:d,amount:T.U64_MAX.toString(),leverage:a,slippage:t}),e=this.createMarginTradingContext({market_id:W,position_cap_id:F,action:"close_position",coin_type:o?E:L,amount:"0"},A);await this._sdk.SuiLendModule.refreshReservePrices(A,x);let s,u;if((0,T.d)(k).gt(0)){let{balance_a:v,balance_b:P,receipt:_,is_loan_a:l}=this._sdk.SwapModules.flashLoan({tx:A,amount:k,flash_loan_coin:b?E:L,clmm_pool:N,clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:B});s=_,u=l,T.CoinAssist.destroyBalanceZero(u?P:v,u?B:R,A);let y=u?T.CoinAssist.fromBalance(v,R,A):T.CoinAssist.fromBalance(P,B,A);this.repay({txb:A,position_cap_id:F,repay_reserve_array_index:O[0].reserveArrayIndex.toString(),repay_coin:y,repay_coin_type:O[0].reserve.coinType,repay_amount:"0",market_id:W,margin_trading_context:e}),A.transferObjects([y],this._sdk.getSenderAddress())}let f=this.withdrawAsset({market_id:W,position_cap_id:F,withdraw_amount:T.U64_MAX.toString(),withdraw_reserve_array_index:D[0].reserveArrayIndex.toString(),withdraw_coin_type:b?L:E,margin_trading_context:e},A);await this.buildClaimRewardsMoveCall(p,W,F,A);let h;if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:895 ~ PositionModules ~ swap_convert_all:",j),j)h=await this._sdk.SwapModules.routerSwap({router:Z?.route_obj,input_coin:f,slippage:t,txb:A});else if(w&&(0,T.d)(w).gt(0)){let v=A.splitCoins(f,[A.pure.u64(w?.toString()||"0")]);h=await this._sdk.SwapModules.routerSwap({router:Z?.route_obj,input_coin:v,slippage:t,txb:A})}if(h&&s){let v=T.CoinAssist.mintBalanceZero(u?B:R,A),P=A.splitCoins(h,[A.pure.u64(C?.toString()||"0")]);this._sdk.SwapModules.repayFlashLoan({tx:A,clmm_pool:N,repay_base:u?T.CoinAssist.intoBalance(P,R,A):v,repay_quote:u?v:T.CoinAssist.intoBalance(P,B,A),clmm_pool_coin_type_a:R,clmm_pool_coin_type_b:B,receipt:s})}return A.moveCall({target:`${c.published_at}::router::close_position`,typeArguments:[M],arguments:[e,A.object(g),A.object(S),A.object(W),A.object(F),A.object(T.CLOCK_ADDRESS),A.object(m)]}),h&&A.transferObjects([h],this._sdk.getSenderAddress()),j||A.transferObjects([f],this._sdk.getSenderAddress()),this.marginTradingContextConfirm(e,A),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:951 ~ PositionModules ~ tx:",A),A};this.positionLeverageIncrease=async i=>{let{current_leverage:r,target_leverage:o,swap_clmm_pool:t="",slippage:a,position_id:d}=i,{lending_market_id:c}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),g=new oe.Transaction,{flash_loan_amount:m,quote_token:M,base_token:S,reserve:A,deposits:D,borrow_amount:O,routers:L,position_cap_id:E,is_long:N,market_id:R,is_flash_loan:B}=await this.calculatePositionLeverage({position_id:d,current_leverage:r,target_leverage:o,swap_clmm_pool:t,slippage:a}),F=N?M:S,W=this.createMarginTradingContext({market_id:R,position_cap_id:E,action:"increase_leverage",coin_type:N?S:M,amount:"0"},g);if(await this._sdk.SuiLendModule.refreshReservePrices(g,A),B){let{clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z,clmm_pool:w}=await this._sdk.SwapModules.getFlashLoanPool(F,m?.toString()||""),{balance_a:b,balance_b:k,receipt:x,is_loan_a:C}=this._sdk.SwapModules.flashLoan({tx:g,amount:m?.toString()||"0",clmm_pool:w,clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z,flash_loan_coin:F}),p=await this._sdk.SwapModules.routerSwap({router:L?.route_obj,input_coin:C?T.CoinAssist.fromBalance(b,j,g):T.CoinAssist.fromBalance(k,Z,g),slippage:a,txb:g});this.depositToLeveragePosition({is_long:N,market_id:R,position_cap_id:E,deposit_reserve_array_index:D[0].reserveArrayIndex.toString(),input_coin:p,margin_trading_context:W,base_token:S,quote_token:M},g);let e=this.borrowAsset({position_cap_id:E,reserve_array_index:N?A[1].arrayIndex.toString():A[0].arrayIndex.toString(),borrow_amount:O,base_token:S,quote_token:M,is_long:N,lending_market_id:c,market_id:R,margin_trading_context:W},g),s=T.CoinAssist.mintBalanceZero(C?Z:j,g);this._sdk.SwapModules.repayFlashLoan({tx:g,clmm_pool:w,repay_base:C?T.CoinAssist.intoBalance(e,j,g):s,repay_quote:C?s:T.CoinAssist.intoBalance(e,Z,g),receipt:x,clmm_pool_coin_type_a:j,clmm_pool_coin_type_b:Z}),T.CoinAssist.destroyBalanceZero(C?k:b,C?Z:j,g)}else{let j=this.borrowAsset({position_cap_id:E,reserve_array_index:N?A[1].arrayIndex.toString():A[0].arrayIndex.toString(),borrow_amount:O,base_token:S,quote_token:M,is_long:N,lending_market_id:c,market_id:R,margin_trading_context:W},g),Z=await this._sdk.SwapModules.routerSwap({router:L?.route_obj,input_coin:j,slippage:a,txb:g});this.depositToLeveragePosition({is_long:N,market_id:R,position_cap_id:E,deposit_reserve_array_index:D[0].reserveArrayIndex.toString(),input_coin:Z,margin_trading_context:W,base_token:S,quote_token:M},g)}return await this.marginTradingContextConfirm(W,g),g};this.positionLeverageDecrease=async i=>{let{current_leverage:r,target_leverage:o,swap_clmm_pool:t="",slippage:a,position_id:d}=i,{deposits:c,borrows:g,position_cap_id:m,market_id:M,is_long:S}=await this.getPositionInfo(d),{base_token:A,quote_token:D}=await this._sdk.MarketModules.getMarketInfo(M),O=new oe.Transaction,{withdraw_ctoken_amount:L,routers:E,reserve:N,is_flash_loan:R}=await this.calculatePositionLeverage({position_id:d,current_leverage:r,target_leverage:o,swap_clmm_pool:t,slippage:a}),B=this.createMarginTradingContext({market_id:M,position_cap_id:m,action:"decrease_leverage",coin_type:S?A:D,amount:"0"},O);if(await this._sdk.SuiLendModule.refreshReservePrices(O,N),R){let{clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:W,clmm_pool:j,clmm_fee_tier:Z}=await this._sdk.SwapModules.getFlashLoanPool(c[0].reserve.coinType,L.toString()),{balance_a:w,balance_b:b,receipt:k,is_loan_a:x}=this._sdk.SwapModules.flashLoan({tx:O,amount:L,clmm_pool:j,clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:W,flash_loan_coin:c[0].reserve.coinType}),C=await this._sdk.SwapModules.routerSwap({router:E?.route_obj,input_coin:x?T.CoinAssist.fromBalance(w,F,O):T.CoinAssist.fromBalance(b,W,O),slippage:a,txb:O});this.repay({txb:O,market_id:M,position_cap_id:m,repay_reserve_array_index:g[0].reserveArrayIndex.toString(),repay_coin:C,repay_coin_type:S?D:A,repay_amount:"0",margin_trading_context:B}),C&&O.transferObjects([C],this._sdk.getSenderAddress());let p=(0,T.d)(L).mul(Z).toString(),e=(0,T.d)(L).add(p).toDP(0,gt.ROUND_UP),s=this.withdrawAsset({market_id:M,position_cap_id:m,withdraw_amount:e.toString(),withdraw_reserve_array_index:c[0].reserveArrayIndex.toString(),withdraw_coin_type:S?A:D,margin_trading_context:B},O),u=O.splitCoins(s,[e.toString()]);this._sdk.SwapModules.repayFlashLoan({tx:O,clmm_pool:j,repay_base:x?T.CoinAssist.intoBalance(u,F,O):w,repay_quote:x?b:T.CoinAssist.intoBalance(u,W,O),receipt:k,clmm_pool_coin_type_a:F,clmm_pool_coin_type_b:W}),O.transferObjects([s],this._sdk.getSenderAddress())}else{let F=this.withdrawAsset({market_id:M,position_cap_id:m,withdraw_amount:L.toString(),withdraw_reserve_array_index:c[0].reserveArrayIndex.toString(),withdraw_coin_type:S?A:D,margin_trading_context:B},O);O.transferObjects([F],this._sdk.getSenderAddress())}return await this.marginTradingContextConfirm(B,O),O};this.positionRepay=async i=>{let{position_id:r,amount:o,is_quote:t,slippage:a}=i,{routers:d,repay_coin_type:c,base_token:g,quote_token:m,borrows:M,deposits:S,market_id:A,position_cap_id:D}=await this.calculatePositionRepay({position_id:r,amount:o,is_quote:t}),O=this.extractOtherTokenTypes(S,M,g,m),{reserve:L}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(g,m,void 0,O),E=new oe.Transaction;await this._sdk.SuiLendModule.refreshReservePrices(E,L);let N=t?m!==c:g!==c,R,B=this.createMarginTradingContext({market_id:A,position_cap_id:D,action:"repay_debt",coin_type:t?m:g,amount:o.toString()},E);if(N){let F=T.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),t?m:g,E);R=await this._sdk.SwapModules.routerSwap({router:d?.route_obj,input_coin:F,slippage:a,txb:E})}else R=T.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),t?m:g,E);return this.repay({txb:E,position_cap_id:D,repay_reserve_array_index:M[0].reserveArrayIndex.toString(),repay_coin:R,repay_coin_type:c,repay_amount:"0",market_id:A,margin_trading_context:B}),E.transferObjects([R],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(B,E),E};this.positionTopUpCToken=async i=>{let{position_id:r,amount:o,is_quote:t,swap_clmm_pool:a="",slippage:d}=i,c=new oe.Transaction,{is_long:g,market_id:m,position_cap_id:M,deposits:S,borrows:A}=await this.getPositionInfo(r),{base_token:D,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(m),L=g&&t||!g&&!t,E=await this.createMarginTradingContext({market_id:m,position_cap_id:M,action:"top_up_collateral",coin_type:t?O:D,amount:o.toString()},c),N=this.extractOtherTokenTypes(S,A,D,O),{base_reserve_array_index:R,quote_reserve_array_index:B,reserve:F}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(D,O,void 0,N);await this._sdk.SuiLendModule.refreshReservePrices(c,F);let W;if(L){let j=await this._sdk.SwapModules.findRouters(t?O:D,t?D:O,o,!0,[a]),Z=T.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),t?O:D,c);W=await this._sdk.SwapModules.routerSwap({router:j?.route_obj,input_coin:Z,slippage:d,txb:c})}else W=T.CoinAssist.buildCoinWithBalance(BigInt(o.toString()),t?O:D,c);return await this.depositToLeveragePosition({is_long:g,market_id:m,position_cap_id:M,deposit_reserve_array_index:g?R:B,input_coin:W,margin_trading_context:E,base_token:D,quote_token:O},c),await this.marginTradingContextConfirm(E,c),c};this.positionWithdrawCToken=async i=>{let{position_id:r,amount:o,is_quote:t,swap_clmm_pool:a="",slippage:d}=i,c=new oe.Transaction,{is_long:g,market_id:m,position_cap_id:M,deposits:S,borrows:A}=await this.getPositionInfo(r),{base_token:D,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(m),L=g&&t||!g&&!t,E=await this.createMarginTradingContext({market_id:m,position_cap_id:M,action:"withdraw_collateral",coin_type:t?O:D,amount:o.toString()},c),N=this.extractOtherTokenTypes(S,A,D,O),{base_reserve_array_index:R,quote_reserve_array_index:B,reserve:F}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(D,O,void 0,N);await this._sdk.SuiLendModule.refreshReservePrices(c,F);let W=await this._sdk.SuiLendModule.getLatestPriceFeeds(F,!0),j=W[(0,T.removeHexPrefix)(O)]?.price,Z=W[(0,T.removeHexPrefix)(D)]?.price,w=g?(0,T.d)(j).div((0,T.d)(Z)).toString():(0,T.d)(Z).div((0,T.d)(j)).toString(),b=F[0].mintDecimals,k=F[1].mintDecimals,x=L?(0,T.d)(o).mul(w).div(10**(t?k:b)).mul(10**(g?b:k)).toDP(0,gt.ROUND_DOWN).toString():o.toString(),C=this.withdrawAsset({market_id:m,position_cap_id:M,withdraw_amount:x,withdraw_reserve_array_index:g?R:B,withdraw_coin_type:g?D:O,margin_trading_context:E},c);if(L){let p=await this._sdk.SwapModules.findRouters(g?D:O,t?O:D,x,!0,[a]),e=await this._sdk.SwapModules.routerSwap({router:p?.route_obj,input_coin:C,slippage:d,txb:c});e&&c.transferObjects([e],this._sdk.getSenderAddress())}else c.transferObjects([C],this._sdk.getSenderAddress());return await this.marginTradingContextConfirm(E,c),c};this.positionClaim=async i=>{let r=new oe.Transaction,{position_cap_id:o,obligation_owner_cap:t,market_id:a,claimable_rewards:d}=await this.getPositionInfo(i);return console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1650 ~ PositionModules ~ claimable_rewards:",d),await this.buildClaimRewardsMoveCall(d,a,o,r),r};this.calculatePositionDeposit=async i=>{let{is_quote:r,is_long:o,amount:t,swap_clmm_pool:a="",leverage:d,by_amount_in:c=!0,base_token:g,quote_token:m,is_submit:M=!1,is_open:S=!0,position_id:A}=i,D=[],O=[],L=[];if(!S&&A){let{deposits:rt,borrows:V}=await this.getPositionInfo(A);O=rt,L=V,D=this.extractOtherTokenTypes(O,L,g,m)}let{reserve:E,base_reserve_array_index:N,quote_reserve_array_index:R}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(g,m,void 0,D),B=E[0].mintDecimals,F=E[1].mintDecimals,W=t.toString(),j=o&&r||!o&&!r,Z=await this._sdk.SuiLendModule.getLatestPriceFeedsByCoinTypes([g,m]),w=Z&&Z[m]?.price,b=Z&&Z[g]?.price;if(!w||!b)throw Yt("PriceNotFound","Price not found");if(j&&M){let rt=o?(0,T.d)(w).div((0,T.d)(b)).toString():(0,T.d)(b).div((0,T.d)(w)).toString();W=(0,T.d)(t).mul(rt).div(10**(r?F:B)).mul(10**(o?B:F)).toString(),console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:492 ~ PositionModules ~ initDepositAmount:",{initDepositAmount:W,rate:rt})}else if(j&&!M){let rt=o?m:g,V=o?g:m;W=(await this._sdk.SwapModules.findRouters(rt,V,W,!0,[a]))?.amount_out.toString()}else W=t;let{base_price:k,quote_price:x,flash_amount:C,flash_loan_fee:p,flash_loan_coin:e,is_flash_a:s,clmm_pool:u,clmm_fee_tier:f,clmm_pool_coin_type_a:h,clmm_pool_coin_type_b:v}=await this._sdk.SwapModules.calculateFlashLoan({is_long:o,leverage:d,base_token:g,quote_token:m,deposit_amount:W,reserve:E,base_token_decimal:B,quote_token_decimal:F}),P=await this._sdk.SwapModules.findRouters(o?m:g,o?g:m,C.toString(),!0,[a]),_=(0,T.d)(W).add((0,T.d)(P?.amount_out.toString())).toDP(0,gt.ROUND_DOWN).toString(),l=(0,T.d)(_).mul(o?k:x).toString(),y=(0,T.d)(C).add(p).toDP(0,gt.ROUND_UP).toString(),U=(0,T.d)(y).mul(o?x:k).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1575 ~ PositionModules ~ depositAmount:",{depositAmount:_,borrowAmount:y});let q=r?(0,T.d)(t).div(10**(r?F:B)).mul(10**B).mul(d).div(k).toDP(0,gt.ROUND_DOWN).toString():(0,T.d)(t).mul(d).toDP(0,gt.ROUND_DOWN).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1583 ~ PositionModules ~ leverageDepositAmount:",q);let $="0",K="0",G="0",J="0";return!S&&A&&(L&&L.length>0&&($=(0,T.d)(L[0].borrowedAmount.toString()).mul(o?10**F:10**B).add((0,T.d)(y)).toString(),K=(0,T.d)($).mul(o?w:b).toString()),G=(0,T.d)(O[0].depositedAmount.toString()).mul(o?10**B:10**F).add((0,T.d)(_)).toString(),J=(0,T.d)(G).mul(o?b:w).toString()),{routers:P,leverage_deposit_amount:q,quote_price:x,base_price:k,clmm_fee_tier:f,flash_loan_fee:p,flash_loan_coin:e,deposit_amount:_,borrow_amount:y,deposit_amount_usd:l,borrow_amount_usd:U,after_borrow_amount:$,after_borrow_amount_usd:K,after_deposit_amount:G,after_deposit_amount_usd:J,flash_amount:C,is_flash_a:s,init_deposit_amount:W,clmm_pool_coin_type_a:h,clmm_pool_coin_type_b:v,clmm_pool:u,base_reserve_array_index:N,quote_reserve_array_index:R,reserve:E,has_swap:j}};this.calculatePositionWithdraw=async i=>{let{position_id:r,is_quote:o,swap_clmm_pool:t="",amount:a,leverage:d,slippage:c,withdraw_max:g}=i,{deposits:m,borrows:M,origin_obligation:S,position_cap_id:A,market_id:D,is_long:O,claimable_rewards:L}=await this.getPositionInfo(r),{base_token:E,quote_token:N}=await this._sdk.MarketModules.getMarketInfo(D),R=r?this.extractOtherTokenTypes(m,M,E,N):[],{reserve:B,base_reserve_map_info:F,quote_reserve_map_info:W}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(E,N,void 0,R),j=B[0].mintDecimals,Z=B[1].mintDecimals,w=O?F.cTokenExchangeRate:W.cTokenExchangeRate,b=await this._sdk.SuiLendModule.getLatestPriceFeeds(B,!0),k=b[(0,T.removeHexPrefix)(N)]?.price,x=b[(0,T.removeHexPrefix)(E)]?.price,C=(0,T.d)(0),p;O?(C=(0,T.d)(o?(0,T.d)(a).mul(k).toString():(0,T.d)(a).mul(x).toString()).div(o?10**Z:10**j),p=o?(0,T.d)(a).div(x).div(10**Z).mul(10**j).toString():(0,T.d)(a)):(C=(0,T.d)(o?(0,T.d)(a).mul(k).toString():(0,T.d)(a).mul(x).toString()).div(o?10**Z:10**j),p=o?(0,T.d)(a):(0,T.d)(a).mul(x).div(10**j).mul(10**Z).toString());let e=(0,T.d)(m[0].depositedAmountUsd.toString()).sub((0,T.d)(M&&M.length>0?M[0].borrowedAmountUsd.toString():"0")).toString(),s=C.div((0,T.d)(e)),u=g||(0,T.d)(s).gte(1),f,h=new gt(0);S&&S.borrows&&S.borrows.length>0&&(f=(0,Mr.compoundDebt)(S.borrows[0],O?B[1]:B[0]),h=(0,T.d)(f.borrowedAmount.value.toString()).div(10**18).toDP(0,gt.ROUND_UP));let v=h.mul(u?1:s).toDP(0,gt.ROUND_UP).toString(),P=v.toString(),_,l,y,U,q,$;if((0,T.d)(v).gt(0)){let{clmm_pool_coin_type_a:nt,clmm_pool_coin_type_b:at,clmm_fee_tier:de,clmm_pool:pt}=await this._sdk.SwapModules.getFlashLoanPool(O?N:E,P);q=nt||"",$=at||"",y=de||0,U=pt||"",_=(0,T.d)(P).mul(de).toString(),l=(0,T.d)(P).mul((0,T.d)(1).add(de)).toDP(0,gt.ROUND_UP).toString()}let K=O&&o||!O&&!o,G,J;if(K){let nt=(0,T.d)(m[0].depositedAmount.toString()).mul(10**(O?j:Z)).mul(u?1:s).toDP(0,gt.ROUND_DOWN).toString();G=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,O?N:E,nt,!0,[t])}else{let nt=m[0].reserve.coinType==="0x0041f9f9344cac094454cd574e333c4fdb132d7bcc9379bcd4aab485b2a63942::wbtc::WBTC"?.01:.0025;J=(0,T.d)(v).mul(O?k:x).div(10**(O?Z:j)).mul(10**(O?j:Z)).div(O?x:k).mul((0,T.d)(1).add(nt)).toDP(0,gt.ROUND_DOWN).toString(),G=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,O?N:E,J.toString(),!0,[t]),u||(v=(0,T.d)(G?.amount_out.toString()).mul((0,T.d)(1).sub(c)).toDP(0,gt.ROUND_DOWN).toString())}p=(0,T.d)(p).mul(d).toDP(0,gt.ROUND_DOWN).toString(),C=(0,T.d)(C).mul(d);let rt=h.mul((0,T.d)(1).sub(s)).toString(),V=(0,T.d)(rt).mul(O?k:x).toString(),et=(0,T.d)(m[0].depositedAmount.toString()).mul(O?10**j:10**Z).sub((0,T.d)(p)).toString(),ft=(0,T.d)(et).mul(O?x:k).toString(),tt=(0,T.d)(G?.amount_in.toString()).toString(),X=(0,T.d)(G?.amount_out.toString()).toString(),me=(0,T.d)(p).div(w.toString()).toDP(0,gt.ROUND_DOWN).toString(),dt=(0,T.d)(V).div((0,T.d)(10**(O?Z:j))),st=(0,T.d)(ft).div((0,T.d)(10**(O?j:Z))),ke=!0;if(M.length>0){let nt=(0,T.d)(M[0].borrowedAmountUsd.toString()),at=nt.div(st).toString(),de=(0,T.d)(m[0].reserve.config.openLtvPct).mul((0,T.d)(.95)).div(100).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ positionModules.ts:1459 ~ PositionModules ~ afterLTV:",{afterLTV:at,ltv:de,afterDepositAmount:et,afterDepositAmountUSD:st,afterBorrowAmount:rt,afterBorrowAmountUSD:dt,withdrawAmount:p,currentBorrowAmountUSD:nt}),(0,T.d)(at).lte(de)&&(ke=!1)}return{amount_in:tt,amount_out:X,from:m[0].reserve.coinType,to:O?E:N,after_borrow_amount:rt,after_borrow_amount_usd:V,after_deposit_amount:et,after_deposit_amount_usd:ft,flash_loan_fee:_,clmm_fee_tier:y,withdraw_amount:p,withdraw_ctoken_amount:me,repay_amount:v,ratio:s,is_close:u,is_long:O,deposits:m,borrows:M,reserve:B,base_token:E,quote_token:N,clmm_pool:U,clmm_pool_coin_type_a:q,clmm_pool_coin_type_b:$,position_cap_id:A,market_id:D,swap_convert_all:K,flash_loan_amount:P,routers:G,repay_flash_loan_amount:l,partial_amount_in:J,has_flash_loan:ke,claimable_rewards:L}};this.calculatePositionLeverage=async i=>{let{position_id:r,current_leverage:o,target_leverage:t,swap_clmm_pool:a=""}=i,d=(0,T.d)(t).sub((0,T.d)(o)),c=d.gt(0),{borrows:g,deposits:m,is_long:M,position_cap_id:S,market_id:A}=await this.getPositionInfo(r),{base_token:D,quote_token:O}=await this._sdk.MarketModules.getMarketInfo(A),L=this.extractOtherTokenTypes(m,g,D,O),{reserve:E}=await this._sdk.SuiLendModule.getSuiLendReserveInfo(D,O,void 0,L),N=E[0].mintDecimals,R=E[1].mintDecimals,B=await this._sdk.SuiLendModule.getLatestPriceFeeds(E,!0),F=B[(0,T.removeHexPrefix)(O)]?.price,W=B[(0,T.removeHexPrefix)(D)]?.price,j=g.length>0,Z=m[0].depositedAmountUsd.toString(),w=m[0].depositedAmount.toString(),b=j?(0,T.d)(g[0].borrowedAmount.toString()).mul(10**(M?R:N)):(0,T.d)(0),k=j?g[0].borrowedAmountUsd.toString():(0,T.d)(0),x=j?(0,T.d)(g[0].reserve.config.borrowWeightBps.toString()).div(1e4).toString():"1",C=(0,T.d)(m[0].reserve.config.openLtvPct).mul((0,T.d)(.95)).div(100).div(x).toString(),p=(0,T.d)(Z).sub((0,T.d)(k)).mul(C).toString();if(c){let e=(0,T.d)(Z).div(o).mul(d),s=e.add(k).div(Z).toString(),u=e.div(M?F:W).mul(10**(M?R:N)).toDP(0,gt.ROUND_UP),f=(0,T.d)(s).gt(C),h=u,v=M?O:D,P=M?D:O,_=await this._sdk.SwapModules.findRouters(v,P,h.toString(),!0,[a]),l=(0,T.d)(_?.amount_out.toString()).toString(),y=(0,T.d)(l).mul(M?W:F).toString(),U,q,$,K,G,J="0",rt="0";if(f){let{clmm_pool_coin_type_a:X,clmm_pool_coin_type_b:me,clmm_pool:dt,clmm_fee_tier:st}=await this._sdk.SwapModules.getFlashLoanPool(v,h.toString());$=st,K=X,G=me,U=h.mul($).toString(),q=M?K==O:G==D,J=(0,T.d)(h).add(U).toDP(0,gt.ROUND_UP).toString(),rt=(0,T.d)(J).mul(M?F:W).toString()}else J=u.toString(),rt=e.toString();let V=(0,T.d)(w).add((0,T.d)(l).div(10**(M?N:R))).toString(),et=(0,T.d)(V).mul(M?W:F).toString(),ft=(0,T.d)(b).add((0,T.d)(J)).div(10**(M?R:N)).toString(),tt=(0,T.d)(ft).mul(M?F:W).toString();return{amount_in:_?.amount_in.toString(),amount_out:_?.amount_out.toString(),flash_loan_fee:U,deposit_amount:l,borrow_amount:J,deposit_amount_usd:y,borrow_amount_usd:rt,flash_loan_amount:h,base_token:D,quote_token:O,reserve:E,deposits:m,borrows:g,clmm_fee_tier:$,is_flash_loan:f,is_loan_a:q,clmm_pool_coin_type_a:K,clmm_pool_coin_type_b:G,after_deposit_amount:V,after_borrow_amount:ft,after_deposit_amount_usd:et,after_borrow_amount_usd:tt,position_cap_id:S,market_id:A,is_long:M,routers:_}}else{let s=(0,T.d)(Z).div(o).mul(d.abs()).div(M?F:W).mul(10**(M?R:N)).toDP(0,gt.ROUND_UP),u=await this._sdk.SwapModules.findRouters(m[0].reserve.coinType,g[0].reserve.coinType,s.toString(),!1,[a]),f=u?.amount_in.toString(),h=(0,T.d)(f).mul(M?W:F).div(10**(M?N:R)).toString(),v=(0,T.d)(Z).mul(C).toString(),P=(0,T.d)(k).div((0,T.d)(Z).sub((0,T.d)(h))).toString(),_=(0,T.d)(P).gt(C),l=s.toString(),y=(0,T.d)(l).mul(M?F:W).toString(),U=f,q=(0,T.d)(U).mul(M?W:F).toString(),$,K="",G="";if(_){let{clmm_pool_coin_type_a:ft,clmm_pool_coin_type_b:tt,clmm_pool:X,clmm_fee_tier:me}=await this._sdk.SwapModules.getFlashLoanPool(g[0].reserve.coinType,l.toString());$=me,K=ft,G=tt}let J=(0,T.d)(w).sub((0,T.d)(U).div(10**(M?N:R))).toString(),rt=(0,T.d)(J).mul(M?W:F).toString(),V=(0,T.d)(b).sub((0,T.d)(l)).div(10**(M?R:N)).toString(),et=(0,T.d)(V).mul(M?F:W).toString();return{amount_in:u?.amount_in.toString(),amount_out:u?.amount_out.toString(),deposit_amount:U,borrow_amount:l,deposit_amount_usd:q,borrow_amount_usd:y,base_token:D,quote_token:O,reserve:E,deposits:m,borrows:g,clmm_fee_tier:$,withdraw_ctoken_amount:f,is_flash_loan:_,clmm_pool_coin_type_a:K,clmm_pool_coin_type_b:G,after_deposit_amount:J,after_borrow_amount:V,after_deposit_amount_usd:rt,after_borrow_amount_usd:et,position_cap_id:S,market_id:A,is_long:M,routers:u}}};this.calculatePositionRepay=async i=>{let{position_id:r,amount:o,is_quote:t}=i,{borrows:a,deposits:d,is_long:c,market_id:g,position_cap_id:m}=await this._sdk.PositionModules.getPositionInfo(r),M=a[0].reserve.coinType,S=c?d[0].reserve.coinType:a[0].reserve.coinType,A=c?a[0].reserve.coinType:d[0].reserve.coinType,D,O=c?!t:t;return O&&(D=await this._sdk.SwapModules.findRouters(t?A:S,M,o,!0,[])),{routers:D,repay_coin_type:M,base_token:S,quote_token:A,is_long:c,borrows:a,deposits:d,market_id:g,position_cap_id:m,has_swap:O}};this._sdk=i}getObligationRewardsInfo(i,r){let o=[],t=new ct(10).pow(18),a={},d=Date.now();for(let g of r){let m=g.coinType,M=g.arrayIndex.toString(),S=g.depositsPoolRewardManager.poolRewards||[];for(let D of S){if(!D)continue;let O=D.id,L=D.coinType,E=parseInt(D.startTimeMs),N=parseInt(D.endTimeMs),R=d>=E&&d<N,B=D.mintDecimals,F=ct(D.cumulativeRewardsPerShare).times(10**B);a[O]={coinType:L,mintDecimals:B,isActive:R,reserveType:"deposit",reserveArrayIndex:M,reserveCoinType:m,globalCumulativePerShare:F,rewardIndex:D.rewardIndex,reserve:g}}let A=g.borrowsPoolRewardManager.poolRewards||[];for(let D of A){if(!D)continue;let O=D.id,L=D.coinType,E=parseInt(D.startTimeMs),N=parseInt(D.endTimeMs),R=d>=E&&d<N,B=D.mintDecimals,F=ct(D.cumulativeRewardsPerShare).times(10**B);a[O]={coinType:L,mintDecimals:B,isActive:R,reserveType:"borrow",reserveCoinType:m,reserveArrayIndex:M,rewardIndex:D.rewardIndex,globalCumulativePerShare:F,reserve:g}}}let c=i.userRewardManagers;for(let g of c)for(let m=0;m<g.rewards.length;m++){let M=g.rewards[m];if(!M)continue;let S=a[M.poolRewardId];if(!S)continue;let A=S.globalCumulativePerShare,D=new ct(M.cumulativeRewardsPerShare.value.toString()).div(t),O=new ct(g.share).times(A.minus(D)),L=new ct(M.earnedRewards.value).div(t),E=new ct(L).plus(O),N=S.reserve.price,R=E.div(10**S.mintDecimals),B=N?R.times(N).toFixed(12):0;(0,T.d)(B).gt(0)&&o.push({poolRewardId:M.poolRewardId,coinType:S.coinType,earnedRewards:E.toString(),earnedRewardsUsd:B,earnedRewardsFormatted:R.toFixed(12),isActive:S.isActive,reserveType:S.reserveType,reserveCoinType:S.reserveCoinType,reserveArrayIndex:S.reserveArrayIndex,rewardIndex:S.rewardIndex,rewardInfo:S})}return o}createLeveragePosition(i){let{lending_market_id:r,lending_market_type:o}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{global_config_id:t,versioned_id:a}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading),d=this._sdk.sdkOptions.margin_trading,{leverage:c,market_id:g,base_token:m,quote_token:M,is_long:S,init_deposit_amount:A,tx:D,init_coin_type:O}=i,[L,E]=D.moveCall({target:`${d.published_at}::router::open_position`,arguments:[D.object(t),D.object(g),D.object(r),D.pure.u64(A),D.pure.u64((0,T.d)(c).mul(1e4).toString()),D.object(T.CLOCK_ADDRESS),D.object(a)],typeArguments:[o,S?m:M,O]});return{position_cap:L,margin_trading_context:E}}async depositToLeveragePosition(i,r){let{margin_trading:o}=this._sdk.sdkOptions,{lending_market_type:t,lending_market_id:a}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.suilend),{is_long:d,market_id:c,position_cap_id:g,position_cap:m,deposit_reserve_array_index:M,input_coin:S,margin_trading_context:A,base_token:D,quote_token:O}=i,{global_config_id:L,versioned_id:E}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);return r.moveCall({target:`${o.published_at}::router::deposit`,typeArguments:[t,d?D:O],arguments:[A,r.object(L),r.object(a),r.object(c),g?r.object(g):m,S,r.pure.u64(M),r.object(T.CLOCK_ADDRESS),r.object(E)]}),r}extractOtherTokenTypes(i,r,o,t){let a=[];return i.forEach(d=>{d.reserve.coinType!==o&&d.reserve.coinType!==t&&a.push(d.reserve.coinType)}),r.forEach(d=>{d.reserve.coinType!==o&&d.reserve.coinType!==t&&a.push(d.reserve.coinType)}),a}async buildClaimRewardsMoveCall(i,r,o,t){let{suilend:a,margin_trading:d}=this._sdk.sdkOptions,c=(0,T.getPackagerConfigs)(a).lending_market_id,g=(0,T.getPackagerConfigs)(a).lending_market_type,{global_config_id:m,versioned_id:M}=(0,T.getPackagerConfigs)(this._sdk.sdkOptions.margin_trading);for(let S=0;S<i.length;S++){let A=await this.createMarginTradingContext({market_id:r,position_cap_id:o,action:"claim_reward",coin_type:i[S].coinType,amount:(0,T.d)(i[S].earnedRewards).toFixed(0)},t),D=t.moveCall({target:`${d.published_at}::router::claim_rewards`,arguments:[A,t.object(m),t.object(c),t.object(r),t.object(o),t.pure.u64(i[S].reserveArrayIndex.toString()),t.pure.u64(i[S].rewardIndex.toString()),t.pure.bool(i[S].reserveType==="deposit"),t.object(T.CLOCK_ADDRESS),t.object(M)],typeArguments:[g,i[S].coinType]});t.transferObjects([D],this._sdk.getSenderAddress()),await this.marginTradingContextConfirm(A,t)}}};var Pr=require("@suilend/sdk/client"),it=require("@suilend/sdk");var fe=require("@suilend/sdk"),be=require("@suilend/sui-fe");var br=yi(require("crypto")),Je=new Uint8Array(256),Xe=Je.length;function Li(){return Xe>Je.length-16&&(br.default.randomFillSync(Je),Xe=0),Je.slice(Xe,Xe+=16)}var Vt=[];for(let n=0;n<256;++n)Vt.push((n+256).toString(16).slice(1));function yr(n,i=0){return Vt[n[i+0]]+Vt[n[i+1]]+Vt[n[i+2]]+Vt[n[i+3]]+"-"+Vt[n[i+4]]+Vt[n[i+5]]+"-"+Vt[n[i+6]]+Vt[n[i+7]]+"-"+Vt[n[i+8]]+Vt[n[i+9]]+"-"+Vt[n[i+10]]+Vt[n[i+11]]+Vt[n[i+12]]+Vt[n[i+13]]+Vt[n[i+14]]+Vt[n[i+15]]}var kr=yi(require("crypto")),Ni={randomUUID:kr.default.randomUUID};function qn(n,i,r){if(Ni.randomUUID&&!i&&!n)return Ni.randomUUID();n=n||{};let o=n.random||(n.rng||Li)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,i){r=r||0;for(let t=0;t<16;++t)i[r+t]=o[t];return i}return yr(o)}var Ye=qn;var Sr=require("@cetusprotocol/common-sdk"),Qe=10n;function Ei(n){return n.depositedAmount.eq(0)?new ct(0):n.borrowedAmount.div(n.depositedAmount).times(100)}function ti(n){let i=Ei(n);if(!i.gt(100))return(0,fe.linearlyInterpolate)(n.config.interestRate,"utilPercent","aprPercent",i)}function Ii(n){let i=Ei(n),r=ti(n);if(!(r===void 0||i.gt(100)))return new ct(i.div(100)).times(r.div(100)).times(1-n.config.spreadFeeBps/1e4).times(100)}function Fn(n,i,r,o){let{api_url:t}=(0,Sr.getPackagerConfigs)(o.sdkOptions.suilend);n===fe.Side.DEPOSIT&&([be.NORMALIZED_flSUI_COINTYPE,be.NORMALIZED_jugSUI_COINTYPE].includes(i.coinType)&&r.push({stats:{id:Ye(),isActive:!0,rewardIndex:-1,reserve:i,rewardCoinType:"LIQ_AG",mintDecimals:0,symbol:"LiqAg Points",iconUrl:`${t}/partners/LiqAg.png`,perDay:new ct(.036),side:fe.Side.DEPOSIT},obligationClaims:{}}),i.coinType===be.NORMALIZED_LBTC_COINTYPE&&r.push({stats:{id:Ye(),isActive:!0,rewardIndex:-1,reserve:i,rewardCoinType:"LOMBARD",mintDecimals:0,symbol:"3x Lombard Lux",iconUrl:`${t}/partners/Lombard Lux.png`,perDay:new ct(0),side:fe.Side.DEPOSIT},obligationClaims:{}}))}function Un(n,i,r){return{...n,depositedAmount:i===fe.Side.DEPOSIT?ct.max(n.depositedAmount.plus(r),0):n.depositedAmount,borrowedAmount:i===fe.Side.BORROW?ct.max(n.borrowedAmount.plus(r),0):n.borrowedAmount}}function jn(n,i,r){let o=n===fe.Side.DEPOSIT?i.depositedAmount:i.borrowedAmount,t=n===fe.Side.DEPOSIT?r.depositedAmount:r.borrowedAmount,a=t.eq(0)?new ct(-1):o.div(t);return{multiplier:a,isValid:!a.eq(-1)}}function $n(n,i,r,o){let t=n.map(d=>({...d,stats:{...d.stats,perDay:o?d.stats.perDay.times(r):void 0}})),a=i.map(d=>({...d,stats:{...d.stats,aprPercent:o?d.stats.aprPercent.times(r):void 0}}));return{newPerDayRewards:t,newAprRewards:a}}function Bi(n,i){if(!Qe)throw new Error("oraclePriceMultiplierDecimal is required");if(n===0n)throw new Error("Invalid oracle price");if(i<0n){let r=10n**(Qe- -i);return n*r}return n/10n**(i+Qe)}function Wn(n){return(0,be.formatLtvPercent)(new ct(n))}var Jt=require("@cetusprotocol/common-sdk"),qi=require("@mysten/sui/utils");var ei=class{constructor(i){this.getCoinAprByAmount=async(i,r,o)=>{let t=new ct(r.toString()),{allLendingMarketData:a,lstAprPercentMap:d}=await this.getLendingMarketData(!1);if(await this.getInitializeObligations({allLendingMarketData:a,lstAprPercentMap:d},!0),!a||!d)throw new Error("lendingMarketCache is not initialized");let c=Object.values(a??{})[0],g=c.lendingMarket.reserves.find(w=>w.coinType===i);if(!g)throw new Error("reserve not found");let M=(this.obligationsCache?.[c.lendingMarket.id]).rewardMap[g.token.coinType]?.[o]??[],S=(0,it.getFilteredRewards)(M),A=(0,it.getStakingYieldAprPercent)(o,g.coinType,d),D=o===it.Side.DEPOSIT?g.depositAprPercent:g.borrowAprPercent,O=D,L=new ct(1),E=!0;if(o!==void 0&&t!==void 0&&t.gt(0)){let w={...g,depositedAmount:o===it.Side.DEPOSIT?ct.max(g.depositedAmount.plus(o===it.Side.DEPOSIT?t:t.negated()),0):g.depositedAmount,borrowedAmount:o===it.Side.BORROW?ct.max(g.borrowedAmount.plus(o===it.Side.BORROW?t:t.negated()),0):g.borrowedAmount};O=o===it.Side.DEPOSIT?Ii(w):ti(w);let b=o===it.Side.DEPOSIT?g.depositedAmount:g.borrowedAmount,k=o===it.Side.DEPOSIT?w.depositedAmount:w.borrowedAmount;L=k.eq(0)?new ct(-1):b.div(k),E=!L.eq(-1)}let B=(0,it.getDedupedPerDayRewards)(S).map(w=>({...w,stats:{...w.stats,perDay:E?w.stats.perDay.times(L):void 0}})),W=(0,it.getDedupedAprRewards)(S).map(w=>({...w,stats:{...w.stats,aprPercent:E?w.stats.aprPercent.times(L):void 0}})),j=(0,it.getTotalAprPercent)(o,D,S,A),Z=O===void 0||W.some(w=>w.stats.aprPercent===void 0)?void 0:(0,it.getTotalAprPercent)(o,O,W,A);return console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:315 ~ SuiLendModule ~ newTotalAprPercent:",Z?.toString()),{new_total_apr_percent:Z?.toString(),total_apr_percent:j.toString()}};this.refreshReservePrice=async(i,r,o)=>{let{lending_market_id:t,lending_market_type:a}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),d=`${t}_${a}`;if(!this.suilendClientCache)throw new Error("suilendClientCache is not initialized");let c=await this.suilendClientCache[d].pythClient.getPriceFeedObjectId(r);this.suilendClientCache[d].refreshReservePrices(i,c,o)};this.getLatestPriceFeeds=async(i,r=!1)=>{let{lending_market_id:o,lending_market_type:t}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),a={},d=[];if(i.forEach(M=>{let S=this.sdk.getCache(`getLatestPrice_${M.coinType.name}`,r);S&&this.priceCheck(S,60)?a[M.coinType.name]=S:d.push(M.coinType.name)}),d.length==0)return a;let c=`${o}_${t}`;if(!this.suilendClientCache)throw new Error("suilendClient is not initialized");let g=Array.from(new Set(i.map(M=>M?.priceIdentifier?.bytes?(0,qi.toHEX)(new Uint8Array(M.priceIdentifier.bytes)):(0,Jt.removeHexPrefix)(M.priceIdentifier.toString()))));return(await this.suilendClientCache[c].pythConnection.getLatestPriceFeeds(g))?.forEach((M,S)=>{let A=M.getPriceUnchecked(),D=i[S];if(A){let{price:O,expo:L}=A,E=(0,Jt.d)(O).mul((0,Jt.d)(10).pow((0,Jt.d)(L))).toString(),N={coin_type:D.coinType.name||D.coinType,price:E,oracle_price:0n,last_update_time:A.publishTime};N.oracle_price=Bi(BigInt(O),BigInt(L)),a[D.coinType.name||D.coinType]=N,this.sdk.updateCache(`getLatestPrice_${N.coin_type}`,N)}}),a};this.getLatestPriceFeedsByCoinTypes=async(i,r=!1)=>{try{let{lending_market_id:o}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),{allLendingMarketData:t}=await this.getLendingMarketData(!1),a=[];return i.forEach(c=>{let g=t[o].reserveMap[c];a.push(g)}),await this.getLatestPriceFeeds(a,r)}catch(o){Yt("FetchError",o);return}};this.getSuiLendReserveInfo=async(i,r,o,t)=>{let{lending_market_id:a}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend);o||(o=(await this.getLendingMarketData(!1)).allLendingMarketData);let d=o[a].reserveMap[i],c=o[a].reserveMap[r],g=o[a].refreshedRawReserves.filter(D=>D.coinType.name==(0,Jt.removeHexPrefix)(i)),m=o[a].refreshedRawReserves.filter(D=>D.coinType.name==(0,Jt.removeHexPrefix)(r)),M=o[a].reserveMap[i],S=o[a].reserveMap[r],A=[];return t&&t.forEach(D=>{let O=o[a].refreshedRawReserves.filter(L=>L.coinType.name==(0,Jt.removeHexPrefix)(D));A.push(...O)}),{base_reserve_array_index:d.arrayIndex.toString(),quote_reserve_array_index:c.arrayIndex.toString(),reserve:[g[0],m[0],...A],base_reserve_map_info:M,quote_reserve_map_info:S}};this.refreshReservePrices=async(i,r)=>{for(let o=0;o<r.length;o++){let t=(0,qi.toHEX)(new Uint8Array(r[o].priceIdentifier.bytes));await this.refreshReservePrice(i,t,BigInt(r[o].arrayIndex))}};this.refreshReservePricesV2=async(i,r)=>{for(let o=0;o<r.length;o++){let t=r[o].priceIdentifier.toString();await this.refreshReservePrice(i,t,BigInt(r[o].arrayIndex))}};this.sdk=i}async getSuilendClient(i,r){let o=`${i}_${r}`;return this.suilendClientCache||(this.suilendClientCache={}),this.suilendClientCache[o]||(this.suilendClientCache[o]=await Pr.SuilendClient.initialize(i,r,this.sdk.FullClient,!0)),this.suilendClientCache[o]}async getLendingMarketData(i=!0){let r="lendingMarketData",o=this.sdk.getCache(r,i);if(o)return o;let t=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend)?.lending_market||[];if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:67 ~ SuiLendModule ~ getLendingMarketData ~ lendingMarkets:",t),!t.length)return console.warn("\u26A0\uFE0F No lending markets configured."),{};try{let[a,d]=await Promise.all([(async()=>Object.fromEntries(await Promise.all(t.map(async g=>{let m=await this.getSuilendClient(g.id,g.type),{lendingMarket:M,coinMetadataMap:S,refreshedRawReserves:A,reserveMap:D,reserveCoinTypes:O,reserveCoinMetadataMap:L,rewardCoinTypes:E,activeRewardCoinTypes:N,rewardCoinMetadataMap:R}=await(0,it.initializeSuilend)(this.sdk.FullClient,m),{rewardPriceMap:B}=await(0,it.initializeSuilendRewards)(D,N);return[g.id,{suilendClient:m,lendingMarket:M,coinMetadataMap:S,refreshedRawReserves:A,reserveMap:D,reserveCoinTypes:O,reserveCoinMetadataMap:L,rewardPriceMap:B,rewardCoinTypes:E,activeRewardCoinTypes:N,rewardCoinMetadataMap:R}]}))))(),(async()=>{try{let c=await fetch(`${this.sdk.sdkOptions?.suilend?.config?.api_url}/springsui/apy`),g=await c.json();if(c?.statusCode===500)throw new Error("Failed to fetch SpringSui LST APRs");return Object.fromEntries(Object.entries(g).map(([m,M])=>[m,new ct(M)]))}catch(c){return console.error(c),{}}})()]);return this.sdk.updateCache(r,{allLendingMarketData:a,lstAprPercentMap:d},30*1e3),{allLendingMarketData:a,lstAprPercentMap:d}}catch(a){throw console.log("\u{1F680} getLendingMarketData error:",a),a}}async getInitializeObligations(i,r=!1){if(!r&&this.obligationsCache)return this.obligationsCache;i||(i=await this.getLendingMarketData(!1));let o={};for(let t of Object.values(i.allLendingMarketData)){let{obligationOwnerCaps:a,obligations:d}=await(0,it.initializeObligations)(this.sdk.FullClient,t.suilendClient,t.refreshedRawReserves,t.reserveMap,this.sdk.senderAddress);d.length>0&&console.log("\u{1F680}\u{1F680}\u{1F680} ~ suilendModule.ts:181 ~ SuiLendModule ~ getInitializeObligations ~ obligations:",d[0].original.allowedBorrowValueUsd.value.toString());let c=(0,it.formatRewards)(t.reserveMap,t.rewardCoinMetadataMap,t.rewardPriceMap,d);o[t.lendingMarket.id]={obligationOwnerCaps:a,obligations:d,rewardMap:c}}return this.obligationsCache=o,this.obligationsCache}async getSuiLendUserData(i,r=!1){let{allLendingMarketData:o,lstAprPercentMap:t}=await this.getLendingMarketData(!1),a=await this.getInitializeObligations({allLendingMarketData:o,lstAprPercentMap:t},!1),{lending_market_id:d}=(0,Jt.getPackagerConfigs)(this.sdk.sdkOptions?.suilend),c=a[d];if(!c)throw new Error(`No user data found for lending market: ${d}`);let g=c.obligations.find(M=>M.id===i);if(!g)throw new Error(`Obligation not found: ${i}`);let m=(0,it.getNetAprPercent)(g,c.rewardMap,t??{});return{obligation:g,netAprPercent:m,deposits:g.deposits,borrowedAmount:g.borrowedAmount,depositedAmount:g.depositedAmount,netValueUsd:g.netValueUsd,rewardMap:c.rewardMap}}priceCheck(i,r=60){let o=Math.floor(Date.now()/1e3);if(!(Math.abs(o-i.last_update_time)>r))return i}};var xr=require("@mysten/sui/transactions"),Ui=yi(Cr()),lt=require("@cetusprotocol/common-sdk");var ii=class{constructor(i){this.routerSwap=async i=>{let{slippage:r,txb:o,input_coin:t,router:a}=i,d=o||new xr.Transaction;if(a)return await this._sdk.AggregatorClient.routerSwap({router:a,inputCoin:t,slippage:r,txb:d})};this.flashLoan=i=>{console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:183 ~ SwapModules ~ params:",i);let{clmm_pool:r}=this._sdk.ClmmSDK.sdkOptions,{global_config_id:o}=(0,lt.getPackagerConfigs)(this._sdk.ClmmSDK.sdkOptions.clmm_pool),{amount:t,clmm_pool:a,clmm_pool_coin_type_a:d,clmm_pool_coin_type_b:c,flash_loan_coin:g,tx:m}=i,M=(0,lt.addHexPrefix)(d)===g;console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:188 ~ SwapModules ~ isLoanA:",M);let[S,A,D]=m.moveCall({target:`${r.published_at}::pool::flash_loan`,arguments:[m.object(o),m.object(a),m.pure.bool(M),m.pure.u64(t.toString())],typeArguments:[d,c]});return{balance_a:S,balance_b:A,receipt:D,is_loan_a:M,loan_coin_type:M?d:c}};this.getFlashLoanPool=async(i,r)=>{console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:201 ~ SwapModules ~ flash_amount:",r,i);try{let o=await fetch(`https://api-sui.cetus.zone/v3/sui/margin_trading/pools?coin_type=${i}&min_amount=${r}`),{data:t}=await o.json();return console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:206 ~ SwapModules ~ data:",t),t&&t.length>0?{clmm_pool_coin_type_a:t[0].coin_type_a,clmm_pool_coin_type_b:t[0].coin_type_b,clmm_pool:t[0].pool_id,clmm_fee_tier:(0,lt.d)(t[0].fee_rate).div(1e6).toString()}:(Yt("FlashLoanPoolNotFound","FlashLoanPoolNotFound"),{clmm_pool_coin_type_a:"",clmm_pool_coin_type_b:"",clmm_pool:"",clmm_fee_tier:""})}catch(o){return Yt("FetchError",o),{clmm_pool_coin_type_a:"",clmm_pool_coin_type_b:"",clmm_pool:"",clmm_fee_tier:""}}};this.repayFlashLoan=i=>{let{clmm_pool:r}=this._sdk.ClmmSDK.sdkOptions,{global_config_id:o}=(0,lt.getPackagerConfigs)(this._sdk.ClmmSDK.sdkOptions.clmm_pool),{tx:t,repay_base:a,repay_quote:d,receipt:c,clmm_pool:g,clmm_pool_coin_type_a:m,clmm_pool_coin_type_b:M}=i;return t.moveCall({target:`${r.published_at}::pool::repay_flash_loan`,arguments:[t.object(o),t.object(g),a,d,c],typeArguments:[m,M]}),t};this._sdk=i}async findRouters(i,r,o,t,a){try{let d={from:i,target:r,amount:new Ui.default((0,lt.d)(o).toFixed(0).toString()),byAmountIn:t,depth:3},c=await this._sdk.AggregatorClient.findRouters(d);if(c?.error?.code===10001)return{...c,is_exceed:c.insufficientLiquidity};if(c?.insufficientLiquidity)return{...c,is_exceed:c.insufficientLiquidity};if(!c?.paths||c?.paths?.length===0)throw Error("Aggregator no router");return{amount_in:c.amountIn.toString(),amount_out:c.amountOut.toString(),is_exceed:c.insufficientLiquidity,route_obj:c,by_amount_in:!0,origin_res:c}}catch{try{if(a){let c=await this._sdk.AggregatorClient.swapInPools({from:i,target:r,amount:new Ui.default((0,lt.d)(o).toFixed(0).toString()),byAmountIn:t,pools:a});return c?{amount_in:c.routeData.amountIn.toString(),amount_out:c.routeData.amountOut.toString(),is_exceed:c.isExceed,route_obj:c.routeData,by_amount_in:!0,origin_res:c}:null}return null}catch{return null}}}async handleSwapLogic(i){let{is_long:r,is_quote:o,amount:t,base_token:a,quote_token:d,swap_clmm_pool:c="",slippage:g,tx:m}=i,M=r&&o||!r&&!o,S,A,D=t;if(M){let O=r&&o?d:a,L=r&&o?a:d,E=await this.findRouters(O,L,t,!0,[c]);if(D=E?.amount_out.toString(),E){let N=lt.CoinAssist.buildCoinWithBalance(BigInt(t),O,m);A=await this.routerSwap({router:E.route_obj,slippage:g,input_coin:N,txb:m}),S=A}}else S=lt.CoinAssist.buildCoinWithBalance(BigInt(t.toString()),o?d:a,m);return{has_swap:M,input_coin:S,init_deposit_amount:D}}async handleSwap(i){let{swap_clmm_pool:r="",slippage:o,amount:t,from:a,to:d,tx:c,input_coin:g}=i,m=await this.findRouters(a,d,t,!0,[r]),M=m.amount_out.toString();return{swap_out_coin:await this.routerSwap({router:m.route_obj,slippage:o,input_coin:g||lt.CoinAssist.buildCoinWithBalance(BigInt(t),a,c),txb:c}),amount_out:M}}async calculateFlashLoan(i){let{is_long:r,leverage:o,base_token:t,quote_token:a,deposit_amount:d,reserve:c,base_token_decimal:g,quote_token_decimal:m}=i,M=await this._sdk.SuiLendModule.getLatestPriceFeeds(c),S=M&&M[(0,lt.removeHexPrefix)(a)]?.price,A=M&&M[(0,lt.removeHexPrefix)(t)]?.price,D=r?(0,lt.d)(A).div((0,lt.d)(S)).toString():(0,lt.d)(S).div((0,lt.d)(A)).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:267 ~ SwapModules ~ calculateFlashLoan ~ deposit_amount:",d,D,g,m);let O=(0,lt.d)(d).mul((0,lt.d)(o).sub(1)).mul(D).div(10**(r?g:m)).mul(10**(r?m:g)).toDP(0,gt.ROUND_UP).toString();console.log("\u{1F680}\u{1F680}\u{1F680} ~ swapModules.ts:274 ~ SwapModules ~ calculateFlashLoan ~ flashAmount:",(0,lt.d)(d).mul((0,lt.d)(o).sub(1)).mul(D).div(10**(r?g:m)).mul(10**(r?m:g)).toString(),O);let L=r?a:t,{clmm_pool_coin_type_a:E,clmm_fee_tier:N,clmm_pool:R,clmm_pool_coin_type_b:B}=await this.getFlashLoanPool(L,O),F=E===L,W=(0,lt.d)(O).mul(N).toString();return{flash_amount:O,rate:D,quote_price:S,base_price:A,flash_loan_coin:L,is_flash_a:F,flash_loan_fee:W,clmm_pool:R,clmm_pool_coin_type_a:E,clmm_pool_coin_type_b:B,clmm_fee_tier:N}}};var De=class n extends Rr.SdkWrapper{constructor(i,r){super(i),this._suilendModule=new ei(this),this._permissionModules=new qe(this),this._marketModules=new Be(this),this._positionModules=new Ve(this),this._swapModules=new ii(this),this._aggregatorClient=new Te.AggregatorClient({signer:(0,Dr.normalizeSuiAddress)("0x0"),client:i.sui_client||new Tr.SuiClient({url:i.full_rpc_url}),env:i.env==="testnet"?Te.Env.Testnet:Te.Env.Mainnet}),this._clmmSDK=r||Lr.CetusClmmSDK.createSDK({env:i.env,full_rpc_url:i.full_rpc_url}),this._pythConnection=new Or.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:30*1e3})}get SuiLendModule(){return this._suilendModule}get PermissionModules(){return this._permissionModules}get MarketModules(){return this._marketModules}get PositionModules(){return this._positionModules}get SwapModules(){return this._swapModules}get AggregatorClient(){return this._aggregatorClient}get ClmmSDK(){return this._clmmSDK}get PythConnection(){return this._pythConnection}static createSDK(i){return n.createCustomSDK({...ki,...i})}static createCustomSDK(i){return new n(i)}};var Zn=De;0&&(module.exports={CetusMarginTradingSDK,appendExtraRewards,calculateBorrowAprPercent,calculateDepositAprPercent,calculateUtilizationPercent,formatLtvPercentValue,getPriceWithFormattedDecimals,getRewardsAprMultiplier,getUpdatedReserve,margin_trading_mainnet,mergePositionData,oraclePriceMultiplierDecimal,updateRewardsWithMultiplier,wrapMarketInfo,wrapMarketPermissions,wrapPosition});
2
2
  /*! Bundled license information:
3
3
 
4
4
  decimal.js/decimal.mjs: