@bsv/sdk 1.2.15 → 1.2.18
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/cjs/package.json +2 -2
- package/dist/cjs/src/primitives/BigNumber.js +85 -89
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +5 -2
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +3 -2
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +71 -62
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +0 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +61 -49
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +75 -73
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +4 -4
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +70 -96
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/primitives/BigNumber.js +85 -89
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +5 -2
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +2 -2
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +70 -61
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/totp/totp.js +0 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +60 -48
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +1 -1
- package/dist/esm/src/transaction/BeefTx.js +76 -74
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +4 -4
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +71 -97
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts +24 -22
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +17 -17
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +17 -14
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -2
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts +2 -2
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +6 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/compat.md +13 -11
- package/docs/primitives.md +152 -188
- package/docs/transaction.md +87 -79
- package/docs/wallet-substrates.md +1410 -1
- package/package.json +2 -2
- package/src/primitives/BigNumber.ts +111 -111
- package/src/primitives/PublicKey.ts +5 -2
- package/src/primitives/Random.ts +2 -2
- package/src/primitives/utils.ts +92 -77
- package/src/totp/totp.ts +0 -1
- package/src/transaction/Beef.ts +60 -42
- package/src/transaction/BeefParty.ts +1 -1
- package/src/transaction/BeefTx.ts +89 -57
- package/src/transaction/MerklePath.ts +4 -4
- package/src/transaction/Transaction.ts +77 -100
- package/src/transaction/__tests/Beef.test.ts +32 -13
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +1 -1
- package/src/transaction/__tests/Transaction.test.ts +3 -3
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +2 -2
package/dist/umd/bundle.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.bsv=e():t.bsv=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var i in r)t.o(r,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:r[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{ARC:()=>Le,BSM:()=>o,Beef:()=>Qe,BeefParty:()=>rr,BeefTx:()=>je,BigNumber:()=>c,CachedKeyDeriver:()=>Er,Certificate:()=>Fr,Curve:()=>Kt,DEFAULT_SLAP_TRACKERS:()=>Lr,ECDSA:()=>n,ECIES:()=>Ir,EncryptedMessage:()=>a,FetchHttpClient:()=>De,HD:()=>fr,HTTPSOverlayBroadcastFacilitator:()=>Wr,HTTPSOverlayLookupFacilitator:()=>qr,HTTPWalletWire:()=>Cr,Hash:()=>r,KeyDeriver:()=>Nr,KeyShares:()=>Jt,LockingScript:()=>Ee,LookupResolver:()=>zr,MerklePath:()=>Ce,Mnemonic:()=>br,NodejsHttpClient:()=>He,OP:()=>Se,OverlayAdminTokenTemplate:()=>Kr,P2PKH:()=>Fe,Point:()=>Dt,PointInFiniteField:()=>Zt,Polynomial:()=>Qt,PrivateKey:()=>te,ProtoWallet:()=>_r,PublicKey:()=>$t,PushDrop:()=>Be,RPuzzle:()=>Ve,Random:()=>Yt,SHIPBroadcaster:()=>jr,SatoshisPerKilobyte:()=>Re,Schnorr:()=>Pe,Script:()=>Ne,SecurityLevels:()=>Or,Signature:()=>Lt,SignedMessage:()=>s,Spend:()=>Te,SymmetricKey:()=>ve,TOTP:()=>kr,Transaction:()=>Je,TransactionSignature:()=>ke,UnlockingScript:()=>Ae,Utils:()=>i,WalletClient:()=>Dr,WalletError:()=>Ar,WalletErrors:()=>xr,WalletWireProcessor:()=>Ur,WalletWireTransceiver:()=>Rr,WhatsOnChain:()=>ze,WhatsOnChainBroadcaster:()=>ir,WindowCWISubstrate:()=>Mr,XDM:()=>Tr,defaultBroadcaster:()=>qe,defaultChainTracker:()=>We,defaultHttpClient:()=>Ue,fromUtxo:()=>vr,isBroadcastFailure:()=>er,isBroadcastResponse:()=>tr});var r={};t.r(r),t.d(r,{RIPEMD160:()=>Z,SHA1:()=>J,SHA1HMAC:()=>pt,SHA256:()=>Q,SHA256HMAC:()=>ft,SHA512:()=>tt,SHA512HMAC:()=>bt,hash160:()=>vt,hash256:()=>It,pbkdf2:()=>Ot,ripemd160:()=>mt,sha1:()=>wt,sha256:()=>gt,sha256hmac:()=>kt,sha512:()=>yt,sha512hmac:()=>Pt,toArray:()=>g});var i={};t.r(i),t.d(i,{Reader:()=>Ct,Writer:()=>Rt,encode:()=>xt,fromBase58:()=>Tt,fromBase58Check:()=>Bt,minimallyEncode:()=>Ht,toArray:()=>Et,toBase58:()=>Ft,toBase58Check:()=>Vt,toBase64:()=>_t,toHex:()=>Nt,toUTF8:()=>At,zero2:()=>St});var n={};t.r(n),t.d(n,{sign:()=>Wt,verify:()=>jt});var s={};t.r(s),t.d(s,{sign:()=>sr,verify:()=>ar});var a={};t.r(a),t.d(a,{decrypt:()=>hr,encrypt:()=>cr});var o={};t.r(o),t.d(o,{magicHash:()=>ur,sign:()=>dr,verify:()=>lr});class c{static zeros=["","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"];static groupSizes=[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];static groupBases=[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];static wordSize=26;negative;words;length;red;static isBN(t){return t instanceof c||null!==t&&"object"==typeof t&&t.constructor.wordSize===c.wordSize&&Array.isArray(t.words)}static max(t,e){return t.cmp(e)>0?t:e}static min(t,e){return t.cmp(e)<0?t:e}constructor(t=0,e=10,r="be"){if(this.negative=0,this.words=[],this.length=0,this.red=null,null!==t){if("le"!==e&&"be"!==e||(r=e,e=10),"number"==typeof t)return this.initNumber(t,e,r);if("object"==typeof t)return this.initArray(t,r);"hex"===e&&(e=16),this.assert(e===(0|e)&&e>=2&&e<=36);let i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i<t.length&&(16===e?this.parseHex(t,i,r):(this.parseBase(t,e,i),"le"===r&&this.initArray(this.toArray(),r)))}}assert(t,e="Assertion failed"){if(!t)throw new Error(e)}initNumber(t,e,r){return t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(this.assert(t<9007199254740992,"The number is larger than 2 ^ 53 (unsafe)"),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"!==r||this.initArray(this.toArray(),r),this}initArray(t,e){if(this.assert("number"==typeof t.length,"The number must have a length"),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);let r,i,n=0;for(;n<this.length;n++)this.words[n]=0;let s=0;if("be"===e)for(n=t.length-1,r=0;n>=0;n-=3)i=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[r]|=i<<s&67108863,this.words[r+1]=i>>>26-s&67108863,s+=24,s>=26&&(s-=26,r++);else if("le"===e)for(n=0,r=0;n<t.length;n+=3)i=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[r]|=i<<s&67108863,this.words[r+1]=i>>>26-s&67108863,s+=24,s>=26&&(s-=26,r++);return this.strip()}parseHex4Bits(t,e){const r=t.charCodeAt(e);if(r>=48&&r<=57)return r-48;if(r>=65&&r<=70)return r-55;if(r>=97&&r<=102)return r-87;throw new Error("Invalid character in "+t)}parseHexByte(t,e,r){let i=this.parseHex4Bits(t,r);return r-1>=e&&(i|=this.parseHex4Bits(t,r-1)<<4),i}parseHex(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);let i=0;for(;i<this.length;i++)this.words[i]=0;let n,s=0,a=0;if("be"===r)for(i=t.length-1;i>=e;i-=2)n=this.parseHexByte(t,e,i)<<s,this.words[a]|=67108863&n,s>=18?(s-=18,a+=1,this.words[a]|=n>>>26):s+=8;else for(i=(t.length-e)%2==0?e+1:e;i<t.length;i+=2)n=this.parseHexByte(t,e,i)<<s,this.words[a]|=67108863&n,s>=18?(s-=18,a+=1,this.words[a]|=n>>>26):s+=8;return this.strip()}parseBaseWord(t,e,r,i){let n=0,s=0;const a=Math.min(t.length,r);for(let r=e;r<a;r++){const e=t.charCodeAt(r)-48;n*=i,s=e>=49?e-49+10:e>=17?e-17+10:e,this.assert(e>=0&&s<i,"Invalid character"),n+=s}return n}parseBase(t,e,r){this.words=[0],this.length=1;let i=0,n=1;for(;n<=67108863;n*=e)i++;i--,n=n/e|0;const s=t.length-r,a=s%i,o=Math.min(s,s-a)+r;let c=0,h=r;for(;h<o;h+=i)c=this.parseBaseWord(t,h,h+i,e),this.imuln(n),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==a){let r=1;for(c=this.parseBaseWord(t,h,t.length,e),h=0;h<a;h++)r*=e;this.imuln(r),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}return this.strip()}copy(t){t.words=new Array(this.length);for(let e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red}static move(t,e){t.words=e.words,t.length=e.length,t.negative=e.negative,t.red=e.red}clone(){const t=new c;return this.copy(t),t}expand(t){for(;this.length<t;)this.words[this.length++]=0;return this}strip(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this.normSign()}normSign(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this}inspect(){return(null!==this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}toString(t=10,e=1){let r;if(16===t||"hex"===t){r="";let t=0,i=0;for(let e=0;e<this.length;e++){const n=this.words[e],s=(16777215&(n<<t|i)).toString(16);i=n>>>24-t&16777215,t+=2,t>=26&&(t-=26,e--),r=0!==i||e!==this.length-1?c.zeros[6-s.length]+s+r:s+r}if(0!==i&&(r=i.toString(16)+r),0===e&&"0"===r)return"";for(;r.length%e!=0&&0!==e;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){const i=c.groupSizes[t],n=c.groupBases[t];r="";let s=this.clone();for(s.negative=0;!s.isZero();){const e=s.modrn(n).toString(t);s=s.idivn(n),r=s.isZero()?e+r:c.zeros[i-e.length]+e+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}throw new Error("Base should be between 2 and 36")}toNumber(){let t=this.words[0];if(2===this.length)t+=67108864*this.words[1];else if(3===this.length&&1===this.words[2])t+=4503599627370496+67108864*this.words[1];else if(this.length>2)throw new Error("Number can only safely store up to 53 bits");return 0!==this.negative?-t:t}toJSON(){return this.toString(16)}toArrayLikeLE(t,e){let r=0,i=0;for(let e=0,n=0;e<this.length;e++){const s=this.words[e]<<n|i;t[r++]=255&s,r<t.length&&(t[r++]=s>>8&255),r<t.length&&(t[r++]=s>>16&255),6===n?(r<t.length&&(t[r++]=s>>24&255),i=0,n=0):(i=s>>>24,n+=2)}if(r<t.length)for(t[r++]=i;r<t.length;)t[r++]=0}toArrayLikeBE(t,e){let r=t.length-1,i=0;for(let e=0,n=0;e<this.length;e++){const s=this.words[e]<<n|i;t[r--]=255&s,r>=0&&(t[r--]=s>>8&255),r>=0&&(t[r--]=s>>16&255),6===n?(r>=0&&(t[r--]=s>>24&255),i=0,n=0):(i=s>>>24,n+=2)}if(r>=0)for(t[r--]=i;r>=0;)t[r--]=0}toArray(t="be",e){this.strip();const r=this.byteLength(),i=e??Math.max(1,r);this.assert(r<=i,"byte array longer than desired length"),this.assert(i>0,"Requested array length <= 0");const n=new Array(i);return"le"===t?this.toArrayLikeLE(n,r):this.toArrayLikeBE(n,r),n}countWordBits(t){if("function"==typeof Math.clz32)return 32-Math.clz32(t);let e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e}zeroWordBits(t){if(0===t)return 26;let e=t,r=0;return 8191&e||(r+=13,e>>>=13),127&e||(r+=7,e>>>=7),15&e||(r+=4,e>>>=4),3&e||(r+=2,e>>>=2),1&e||r++,r}bitLength(){const t=this.words[this.length-1],e=this.countWordBits(t);return 26*(this.length-1)+e}static toBitArray(t){const e=new Array(t.bitLength());for(let r=0;r<e.length;r++){const i=r/26|0,n=r%26;e[r]=t.words[i]>>>n&1}return e}toBitArray(){return c.toBitArray(this)}zeroBits(){if(this.isZero())return 0;let t=0;for(let e=0;e<this.length;e++){const r=this.zeroWordBits(this.words[e]);if(t+=r,26!==r)break}return t}byteLength(){return Math.ceil(this.bitLength()/8)}toTwos(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()}fromTwos(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()}isNeg(){return 0!==this.negative}neg(){return this.clone().ineg()}ineg(){return this.isZero()||(this.negative^=1),this}iuor(t){for(;this.length<t.length;)this.words[this.length++]=0;for(let e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()}ior(t){return this.assert(!(this.negative|t.negative)),this.iuor(t)}or(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)}uor(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)}iuand(t){const e=Math.min(this.length,t.length);for(let r=0;r<e;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e,this.strip()}iand(t){return this.assert(!(this.negative|t.negative)),this.iuand(t)}and(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)}uand(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)}iuxor(t){if(this.length>t.length)for(let e=0;e<t.length;e++)this.words[e]=this.words[e]^t.words[e];else{for(let e=0;e<this.length;e++)this.words[e]=this.words[e]^t.words[e];for(let e=this.length;e<t.length;e++)this.words[e]=t.words[e];this.length=t.length}return this.strip()}ixor(t){return this.assert(!(this.negative|t.negative),"Neither number can be negative"),this.iuxor(t)}xor(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)}uxor(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)}inotn(t){this.assert("number"==typeof t&&t>=0,"The width needs to be a number greater than zero");let e=0|Math.ceil(t/26);const r=t%26;this.expand(e),r>0&&e--;let i=0;for(;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()}notn(t){return this.clone().inotn(t)}setn(t,e){this.assert("number"==typeof t&&t>=0);const r=t/26|0,i=t%26;return this.expand(r+1),this.words[r]=1===e||!0===e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()}iadd(t){let e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this.normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e.normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);let n=0,s=0;for(;s<i.length;s++)e=(0|r.words[s])+(0|i.words[s])+n,this.words[s]=67108863&e,n=e>>>26;for(;0!==n&&s<r.length;s++)e=(0|r.words[s])+n,this.words[s]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this}add(t){let e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)}isub(t){let e;if(0!==t.negative)return t.negative=0,e=this.iadd(t),t.negative=1,e.normSign();if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this.normSign();const r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;let i,n;r>0?(i=this,n=t):(i=t,n=this);let s=0,a=0;for(;a<n.length;a++)e=(0|i.words[a])-(0|n.words[a])+s,s=e>>26,this.words[a]=67108863&e;for(;0!==s&&a<i.length;a++)e=(0|i.words[a])+s,s=e>>26,this.words[a]=67108863&e;if(0===s&&a<i.length&&i!==this)for(;a<i.length;a++)this.words[a]=i.words[a];return this.length=Math.max(this.length,a),i!==this&&(this.negative=1),this.strip()}sub(t){return this.clone().isub(t)}smallMulTo(t,e,r){r.negative=e.negative^t.negative;let i=t.length+e.length|0;r.length=i,i=i-1|0;let n=0|t.words[0],s=0|e.words[0],a=n*s;const o=67108863&a;let c=a/67108864|0;r.words[0]=o;let h=1;for(;h<i;h++){let i=c>>>26,o=67108863&c;const u=Math.min(h,e.length-1);for(let r=Math.max(0,h-t.length+1);r<=u;r++){const c=h-r|0;n=0|t.words[c],s=0|e.words[r],a=n*s+o,i+=a/67108864|0,o=67108863&a}r.words[h]=0|o,c=0|i}return 0!==c?r.words[h]=0|c:r.length--,r.strip()}comb10MulTo(t,e,r){const i=t.words,n=e.words,s=r.words;let a,o,c,h=0;const u=0|i[0],d=8191&u,l=u>>>13,f=0|i[1],p=8191&f,b=f>>>13,m=0|i[2],w=8191&m,g=m>>>13,y=0|i[3],I=8191&y,v=y>>>13,k=0|i[4],P=8191&k,O=k>>>13,S=0|i[5],N=8191&S,E=S>>>13,A=0|i[6],x=8191&A,_=A>>>13,M=0|i[7],T=8191&M,F=M>>>13,V=0|i[8],B=8191&V,R=V>>>13,C=0|i[9],H=8191&C,D=C>>>13,U=0|n[0],K=8191&U,L=U>>>13,q=0|n[1],z=8191&q,W=q>>>13,j=0|n[2],$=8191&j,X=j>>>13,G=0|n[3],Y=8191&G,Z=G>>>13,Q=0|n[4],J=8191&Q,tt=Q>>>13,et=0|n[5],rt=8191&et,it=et>>>13,nt=0|n[6],st=8191&nt,at=nt>>>13,ot=0|n[7],ct=8191&ot,ht=ot>>>13,ut=0|n[8],dt=8191&ut,lt=ut>>>13,ft=0|n[9],pt=8191&ft,bt=ft>>>13;r.negative=t.negative^e.negative,r.length=19,a=Math.imul(d,K),o=Math.imul(d,L),o=o+Math.imul(l,K)|0,c=Math.imul(l,L);let mt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(mt>>>26)|0,mt&=67108863,a=Math.imul(p,K),o=Math.imul(p,L),o=o+Math.imul(b,K)|0,c=Math.imul(b,L),a=a+Math.imul(d,z)|0,o=o+Math.imul(d,W)|0,o=o+Math.imul(l,z)|0,c=c+Math.imul(l,W)|0;let wt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,a=Math.imul(w,K),o=Math.imul(w,L),o=o+Math.imul(g,K)|0,c=Math.imul(g,L),a=a+Math.imul(p,z)|0,o=o+Math.imul(p,W)|0,o=o+Math.imul(b,z)|0,c=c+Math.imul(b,W)|0,a=a+Math.imul(d,$)|0,o=o+Math.imul(d,X)|0,o=o+Math.imul(l,$)|0,c=c+Math.imul(l,X)|0;let gt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(gt>>>26)|0,gt&=67108863,a=Math.imul(I,K),o=Math.imul(I,L),o=o+Math.imul(v,K)|0,c=Math.imul(v,L),a=a+Math.imul(w,z)|0,o=o+Math.imul(w,W)|0,o=o+Math.imul(g,z)|0,c=c+Math.imul(g,W)|0,a=a+Math.imul(p,$)|0,o=o+Math.imul(p,X)|0,o=o+Math.imul(b,$)|0,c=c+Math.imul(b,X)|0,a=a+Math.imul(d,Y)|0,o=o+Math.imul(d,Z)|0,o=o+Math.imul(l,Y)|0,c=c+Math.imul(l,Z)|0;let yt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,a=Math.imul(P,K),o=Math.imul(P,L),o=o+Math.imul(O,K)|0,c=Math.imul(O,L),a=a+Math.imul(I,z)|0,o=o+Math.imul(I,W)|0,o=o+Math.imul(v,z)|0,c=c+Math.imul(v,W)|0,a=a+Math.imul(w,$)|0,o=o+Math.imul(w,X)|0,o=o+Math.imul(g,$)|0,c=c+Math.imul(g,X)|0,a=a+Math.imul(p,Y)|0,o=o+Math.imul(p,Z)|0,o=o+Math.imul(b,Y)|0,c=c+Math.imul(b,Z)|0,a=a+Math.imul(d,J)|0,o=o+Math.imul(d,tt)|0,o=o+Math.imul(l,J)|0,c=c+Math.imul(l,tt)|0;let It=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(It>>>26)|0,It&=67108863,a=Math.imul(N,K),o=Math.imul(N,L),o=o+Math.imul(E,K)|0,c=Math.imul(E,L),a=a+Math.imul(P,z)|0,o=o+Math.imul(P,W)|0,o=o+Math.imul(O,z)|0,c=c+Math.imul(O,W)|0,a=a+Math.imul(I,$)|0,o=o+Math.imul(I,X)|0,o=o+Math.imul(v,$)|0,c=c+Math.imul(v,X)|0,a=a+Math.imul(w,Y)|0,o=o+Math.imul(w,Z)|0,o=o+Math.imul(g,Y)|0,c=c+Math.imul(g,Z)|0,a=a+Math.imul(p,J)|0,o=o+Math.imul(p,tt)|0,o=o+Math.imul(b,J)|0,c=c+Math.imul(b,tt)|0,a=a+Math.imul(d,rt)|0,o=o+Math.imul(d,it)|0,o=o+Math.imul(l,rt)|0,c=c+Math.imul(l,it)|0;let vt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,a=Math.imul(x,K),o=Math.imul(x,L),o=o+Math.imul(_,K)|0,c=Math.imul(_,L),a=a+Math.imul(N,z)|0,o=o+Math.imul(N,W)|0,o=o+Math.imul(E,z)|0,c=c+Math.imul(E,W)|0,a=a+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,o=o+Math.imul(O,$)|0,c=c+Math.imul(O,X)|0,a=a+Math.imul(I,Y)|0,o=o+Math.imul(I,Z)|0,o=o+Math.imul(v,Y)|0,c=c+Math.imul(v,Z)|0,a=a+Math.imul(w,J)|0,o=o+Math.imul(w,tt)|0,o=o+Math.imul(g,J)|0,c=c+Math.imul(g,tt)|0,a=a+Math.imul(p,rt)|0,o=o+Math.imul(p,it)|0,o=o+Math.imul(b,rt)|0,c=c+Math.imul(b,it)|0,a=a+Math.imul(d,st)|0,o=o+Math.imul(d,at)|0,o=o+Math.imul(l,st)|0,c=c+Math.imul(l,at)|0;let kt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,a=Math.imul(T,K),o=Math.imul(T,L),o=o+Math.imul(F,K)|0,c=Math.imul(F,L),a=a+Math.imul(x,z)|0,o=o+Math.imul(x,W)|0,o=o+Math.imul(_,z)|0,c=c+Math.imul(_,W)|0,a=a+Math.imul(N,$)|0,o=o+Math.imul(N,X)|0,o=o+Math.imul(E,$)|0,c=c+Math.imul(E,X)|0,a=a+Math.imul(P,Y)|0,o=o+Math.imul(P,Z)|0,o=o+Math.imul(O,Y)|0,c=c+Math.imul(O,Z)|0,a=a+Math.imul(I,J)|0,o=o+Math.imul(I,tt)|0,o=o+Math.imul(v,J)|0,c=c+Math.imul(v,tt)|0,a=a+Math.imul(w,rt)|0,o=o+Math.imul(w,it)|0,o=o+Math.imul(g,rt)|0,c=c+Math.imul(g,it)|0,a=a+Math.imul(p,st)|0,o=o+Math.imul(p,at)|0,o=o+Math.imul(b,st)|0,c=c+Math.imul(b,at)|0,a=a+Math.imul(d,ct)|0,o=o+Math.imul(d,ht)|0,o=o+Math.imul(l,ct)|0,c=c+Math.imul(l,ht)|0;let Pt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,a=Math.imul(B,K),o=Math.imul(B,L),o=o+Math.imul(R,K)|0,c=Math.imul(R,L),a=a+Math.imul(T,z)|0,o=o+Math.imul(T,W)|0,o=o+Math.imul(F,z)|0,c=c+Math.imul(F,W)|0,a=a+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,o=o+Math.imul(_,$)|0,c=c+Math.imul(_,X)|0,a=a+Math.imul(N,Y)|0,o=o+Math.imul(N,Z)|0,o=o+Math.imul(E,Y)|0,c=c+Math.imul(E,Z)|0,a=a+Math.imul(P,J)|0,o=o+Math.imul(P,tt)|0,o=o+Math.imul(O,J)|0,c=c+Math.imul(O,tt)|0,a=a+Math.imul(I,rt)|0,o=o+Math.imul(I,it)|0,o=o+Math.imul(v,rt)|0,c=c+Math.imul(v,it)|0,a=a+Math.imul(w,st)|0,o=o+Math.imul(w,at)|0,o=o+Math.imul(g,st)|0,c=c+Math.imul(g,at)|0,a=a+Math.imul(p,ct)|0,o=o+Math.imul(p,ht)|0,o=o+Math.imul(b,ct)|0,c=c+Math.imul(b,ht)|0,a=a+Math.imul(d,dt)|0,o=o+Math.imul(d,lt)|0,o=o+Math.imul(l,dt)|0,c=c+Math.imul(l,lt)|0;let Ot=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,a=Math.imul(H,K),o=Math.imul(H,L),o=o+Math.imul(D,K)|0,c=Math.imul(D,L),a=a+Math.imul(B,z)|0,o=o+Math.imul(B,W)|0,o=o+Math.imul(R,z)|0,c=c+Math.imul(R,W)|0,a=a+Math.imul(T,$)|0,o=o+Math.imul(T,X)|0,o=o+Math.imul(F,$)|0,c=c+Math.imul(F,X)|0,a=a+Math.imul(x,Y)|0,o=o+Math.imul(x,Z)|0,o=o+Math.imul(_,Y)|0,c=c+Math.imul(_,Z)|0,a=a+Math.imul(N,J)|0,o=o+Math.imul(N,tt)|0,o=o+Math.imul(E,J)|0,c=c+Math.imul(E,tt)|0,a=a+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,o=o+Math.imul(O,rt)|0,c=c+Math.imul(O,it)|0,a=a+Math.imul(I,st)|0,o=o+Math.imul(I,at)|0,o=o+Math.imul(v,st)|0,c=c+Math.imul(v,at)|0,a=a+Math.imul(w,ct)|0,o=o+Math.imul(w,ht)|0,o=o+Math.imul(g,ct)|0,c=c+Math.imul(g,ht)|0,a=a+Math.imul(p,dt)|0,o=o+Math.imul(p,lt)|0,o=o+Math.imul(b,dt)|0,c=c+Math.imul(b,lt)|0,a=a+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0,o=o+Math.imul(l,pt)|0,c=c+Math.imul(l,bt)|0;let St=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(St>>>26)|0,St&=67108863,a=Math.imul(H,z),o=Math.imul(H,W),o=o+Math.imul(D,z)|0,c=Math.imul(D,W),a=a+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,o=o+Math.imul(R,$)|0,c=c+Math.imul(R,X)|0,a=a+Math.imul(T,Y)|0,o=o+Math.imul(T,Z)|0,o=o+Math.imul(F,Y)|0,c=c+Math.imul(F,Z)|0,a=a+Math.imul(x,J)|0,o=o+Math.imul(x,tt)|0,o=o+Math.imul(_,J)|0,c=c+Math.imul(_,tt)|0,a=a+Math.imul(N,rt)|0,o=o+Math.imul(N,it)|0,o=o+Math.imul(E,rt)|0,c=c+Math.imul(E,it)|0,a=a+Math.imul(P,st)|0,o=o+Math.imul(P,at)|0,o=o+Math.imul(O,st)|0,c=c+Math.imul(O,at)|0,a=a+Math.imul(I,ct)|0,o=o+Math.imul(I,ht)|0,o=o+Math.imul(v,ct)|0,c=c+Math.imul(v,ht)|0,a=a+Math.imul(w,dt)|0,o=o+Math.imul(w,lt)|0,o=o+Math.imul(g,dt)|0,c=c+Math.imul(g,lt)|0,a=a+Math.imul(p,pt)|0,o=o+Math.imul(p,bt)|0,o=o+Math.imul(b,pt)|0,c=c+Math.imul(b,bt)|0;let Nt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Nt>>>26)|0,Nt&=67108863,a=Math.imul(H,$),o=Math.imul(H,X),o=o+Math.imul(D,$)|0,c=Math.imul(D,X),a=a+Math.imul(B,Y)|0,o=o+Math.imul(B,Z)|0,o=o+Math.imul(R,Y)|0,c=c+Math.imul(R,Z)|0,a=a+Math.imul(T,J)|0,o=o+Math.imul(T,tt)|0,o=o+Math.imul(F,J)|0,c=c+Math.imul(F,tt)|0,a=a+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,o=o+Math.imul(_,rt)|0,c=c+Math.imul(_,it)|0,a=a+Math.imul(N,st)|0,o=o+Math.imul(N,at)|0,o=o+Math.imul(E,st)|0,c=c+Math.imul(E,at)|0,a=a+Math.imul(P,ct)|0,o=o+Math.imul(P,ht)|0,o=o+Math.imul(O,ct)|0,c=c+Math.imul(O,ht)|0,a=a+Math.imul(I,dt)|0,o=o+Math.imul(I,lt)|0,o=o+Math.imul(v,dt)|0,c=c+Math.imul(v,lt)|0,a=a+Math.imul(w,pt)|0,o=o+Math.imul(w,bt)|0,o=o+Math.imul(g,pt)|0,c=c+Math.imul(g,bt)|0;let Et=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,a=Math.imul(H,Y),o=Math.imul(H,Z),o=o+Math.imul(D,Y)|0,c=Math.imul(D,Z),a=a+Math.imul(B,J)|0,o=o+Math.imul(B,tt)|0,o=o+Math.imul(R,J)|0,c=c+Math.imul(R,tt)|0,a=a+Math.imul(T,rt)|0,o=o+Math.imul(T,it)|0,o=o+Math.imul(F,rt)|0,c=c+Math.imul(F,it)|0,a=a+Math.imul(x,st)|0,o=o+Math.imul(x,at)|0,o=o+Math.imul(_,st)|0,c=c+Math.imul(_,at)|0,a=a+Math.imul(N,ct)|0,o=o+Math.imul(N,ht)|0,o=o+Math.imul(E,ct)|0,c=c+Math.imul(E,ht)|0,a=a+Math.imul(P,dt)|0,o=o+Math.imul(P,lt)|0,o=o+Math.imul(O,dt)|0,c=c+Math.imul(O,lt)|0,a=a+Math.imul(I,pt)|0,o=o+Math.imul(I,bt)|0,o=o+Math.imul(v,pt)|0,c=c+Math.imul(v,bt)|0;let At=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(At>>>26)|0,At&=67108863,a=Math.imul(H,J),o=Math.imul(H,tt),o=o+Math.imul(D,J)|0,c=Math.imul(D,tt),a=a+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,o=o+Math.imul(R,rt)|0,c=c+Math.imul(R,it)|0,a=a+Math.imul(T,st)|0,o=o+Math.imul(T,at)|0,o=o+Math.imul(F,st)|0,c=c+Math.imul(F,at)|0,a=a+Math.imul(x,ct)|0,o=o+Math.imul(x,ht)|0,o=o+Math.imul(_,ct)|0,c=c+Math.imul(_,ht)|0,a=a+Math.imul(N,dt)|0,o=o+Math.imul(N,lt)|0,o=o+Math.imul(E,dt)|0,c=c+Math.imul(E,lt)|0,a=a+Math.imul(P,pt)|0,o=o+Math.imul(P,bt)|0,o=o+Math.imul(O,pt)|0,c=c+Math.imul(O,bt)|0;let xt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,a=Math.imul(H,rt),o=Math.imul(H,it),o=o+Math.imul(D,rt)|0,c=Math.imul(D,it),a=a+Math.imul(B,st)|0,o=o+Math.imul(B,at)|0,o=o+Math.imul(R,st)|0,c=c+Math.imul(R,at)|0,a=a+Math.imul(T,ct)|0,o=o+Math.imul(T,ht)|0,o=o+Math.imul(F,ct)|0,c=c+Math.imul(F,ht)|0,a=a+Math.imul(x,dt)|0,o=o+Math.imul(x,lt)|0,o=o+Math.imul(_,dt)|0,c=c+Math.imul(_,lt)|0,a=a+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0,o=o+Math.imul(E,pt)|0,c=c+Math.imul(E,bt)|0;let _t=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,a=Math.imul(H,st),o=Math.imul(H,at),o=o+Math.imul(D,st)|0,c=Math.imul(D,at),a=a+Math.imul(B,ct)|0,o=o+Math.imul(B,ht)|0,o=o+Math.imul(R,ct)|0,c=c+Math.imul(R,ht)|0,a=a+Math.imul(T,dt)|0,o=o+Math.imul(T,lt)|0,o=o+Math.imul(F,dt)|0,c=c+Math.imul(F,lt)|0,a=a+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0,o=o+Math.imul(_,pt)|0,c=c+Math.imul(_,bt)|0;let Mt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,a=Math.imul(H,ct),o=Math.imul(H,ht),o=o+Math.imul(D,ct)|0,c=Math.imul(D,ht),a=a+Math.imul(B,dt)|0,o=o+Math.imul(B,lt)|0,o=o+Math.imul(R,dt)|0,c=c+Math.imul(R,lt)|0,a=a+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0,o=o+Math.imul(F,pt)|0,c=c+Math.imul(F,bt)|0;let Tt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,a=Math.imul(H,dt),o=Math.imul(H,lt),o=o+Math.imul(D,dt)|0,c=Math.imul(D,lt),a=a+Math.imul(B,pt)|0,o=o+Math.imul(B,bt)|0,o=o+Math.imul(R,pt)|0,c=c+Math.imul(R,bt)|0;let Ft=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Ft>>>26)|0,Ft&=67108863,a=Math.imul(H,pt),o=Math.imul(H,bt),o=o+Math.imul(D,pt)|0,c=Math.imul(D,bt);let Vt=(h+a|0)+((8191&o)<<13)|0;return h=(c+(o>>>13)|0)+(Vt>>>26)|0,Vt&=67108863,s[0]=mt,s[1]=wt,s[2]=gt,s[3]=yt,s[4]=It,s[5]=vt,s[6]=kt,s[7]=Pt,s[8]=Ot,s[9]=St,s[10]=Nt,s[11]=Et,s[12]=At,s[13]=xt,s[14]=_t,s[15]=Mt,s[16]=Tt,s[17]=Ft,s[18]=Vt,0!==h&&(s[19]=h,r.length++),r}bigMulTo(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;let i=0,n=0,s=0;for(;s<r.length-1;s++){let a=n;n=0;let o=67108863&i;const c=Math.min(s,e.length-1);for(let r=Math.max(0,s-t.length+1);r<=c;r++){const i=s-r,c=(0|t.words[i])*(0|e.words[r]);let h=67108863&c;a=a+(c/67108864|0)|0,h=h+o|0,o=67108863&h,a=a+(h>>>26)|0,n+=a>>>26,a&=67108863}r.words[s]=o,i=a,a=n}return 0!==i?r.words[s]=i:r.length--,r.strip()}mulTo(t,e){let r;const i=this.length+t.length;return r=10===this.length&&10===t.length?this.comb10MulTo(this,t,e):i<63?this.smallMulTo(this,t,e):this.bigMulTo(this,t,e),r}mul(t){const e=new c;return e.words=new Array(this.length+t.length),this.mulTo(t,e)}imul(t){return this.clone().mulTo(t,this)}imuln(t){const e=t<0;e&&(t=-t),this.assert("number"==typeof t),this.assert(t<67108864);let r=0,i=0;for(;i<this.length;i++){const e=(0|this.words[i])*t,n=(67108863&e)+(67108863&r);r>>=26,r+=e/67108864|0,r+=n>>>26,this.words[i]=67108863&n}return 0!==r&&(this.words[i]=r,this.length++),e?this.ineg():this}muln(t){return this.clone().imuln(t)}sqr(){return this.mul(this)}isqr(){return this.imul(this.clone())}pow(t){const e=c.toBitArray(t);if(0===e.length)return new c(1);let r=this,i=0;for(;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(let t=r.sqr();i<e.length;i++,t=t.sqr())0!==e[i]&&(r=r.mul(t));return r}iushln(t){this.assert("number"==typeof t&&t>=0);const e=t%26,r=(t-e)/26,i=67108863>>>26-e<<26-e;let n;if(0!==e){let t=0;for(n=0;n<this.length;n++){const r=this.words[n]&i,s=(0|this.words[n])-r<<e;this.words[n]=s|t,t=r>>>26-e}0!==t&&(this.words[n]=t,this.length++)}if(0!==r){for(n=this.length-1;n>=0;n--)this.words[n+r]=this.words[n];for(n=0;n<r;n++)this.words[n]=0;this.length+=r}return this.strip()}ishln(t){return this.assert(0===this.negative),this.iushln(t)}iushrn(t,e,r){let i;this.assert("number"==typeof t&&t>=0),i="number"==typeof e&&0!==e?(e-e%26)/26:0;const n=t%26,s=Math.min((t-n)/26,this.length),a=67108863^67108863>>>n<<n,o=r;i-=s,i=Math.max(0,i);let c=0;if(void 0!==o){for(;c<s;c++)o.words[c]=this.words[c];o.length=s}if(0===s);else if(this.length>s)for(this.length-=s,c=0;c<this.length;c++)this.words[c]=this.words[c+s];else this.words[0]=0,this.length=1;let h=0;for(c=this.length-1;c>=0&&(0!==h||c>=i);c--){const t=0|this.words[c];this.words[c]=h<<26-n|t>>>n,h=t&a}return null!=o&&0!==h&&(o.words[o.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()}ishrn(t,e,r){return this.assert(0===this.negative),this.iushrn(t,e,r)}shln(t){return this.clone().ishln(t)}ushln(t){return this.clone().iushln(t)}shrn(t){return this.clone().ishrn(t)}ushrn(t){return this.clone().iushrn(t)}testn(t){this.assert("number"==typeof t&&t>=0);const e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;const n=this.words[r];return Boolean(n&i)}imaskn(t){this.assert("number"==typeof t&&t>=0);const e=t%26;let r=(t-e)/26;if(this.assert(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){const t=67108863^67108863>>>e<<e;this.words[this.length-1]&=t}return this.strip()}maskn(t){return this.clone().imaskn(t)}iaddn(t){return this.assert("number"==typeof t),this.assert(t<67108864,"num is too large"),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<=t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)}_iaddn(t){this.words[0]+=t;let e=0;for(;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this}isubn(t){if(this.assert("number"==typeof t),this.assert(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(let t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()}addn(t){return this.clone().iaddn(t)}subn(t){return this.clone().isubn(t)}iabs(){return this.negative=0,this}abs(){return this.clone().iabs()}_ishlnsubmul(t,e,r){const i=t.length+r;let n,s;this.expand(i);let a=0;for(n=0;n<t.length;n++){s=(0|this.words[n+r])+a;const i=(0|t.words[n])*e;s-=67108863&i,a=(s>>26)-(i/67108864|0),this.words[n+r]=67108863&s}for(;n<this.length-r;n++)s=(0|this.words[n+r])+a,a=s>>26,this.words[n+r]=67108863&s;if(0===a)return this.strip();for(this.assert(-1===a,"carry must be -1"),a=0,n=0;n<this.length;n++)s=-(0|this.words[n])+a,a=s>>26,this.words[n]=67108863&s;return this.negative=1,this.strip()}wordDiv(t,e){let r=this.length-t.length,i=this.clone(),n=t,s=0|n.words[n.length-1];r=26-this.countWordBits(s),0!==r&&(n=n.ushln(r),i.iushln(r),s=0|n.words[n.length-1]);const a=i.length-n.length;let o;if("mod"!==e){o=new c,o.length=a+1,o.words=new Array(o.length);for(let t=0;t<o.length;t++)o.words[t]=0}const h=i.clone()._ishlnsubmul(n,1,a);0===h.negative&&(i=h,void 0!==o&&(o.words[a]=1));for(let t=a-1;t>=0;t--){let e=67108864*(0|i.words[n.length+t])+(0|i.words[n.length+t-1]);for(e=Math.min(e/s|0,67108863),i._ishlnsubmul(n,e,t);0!==i.negative;)e--,i.negative=0,i._ishlnsubmul(n,1,t),i.isZero()||(i.negative^=1);void 0!==o&&(o.words[t]=e)}return void 0!==o&&o.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:o??null,mod:i}}divmod(t,e,r){if(this.assert(!t.isZero()),this.isZero())return{div:new c(0),mod:new c(0)};let i,n,s;return 0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(n=s.mod.neg(),r&&0!==n.negative&&n.iadd(t)),{div:i,mod:n}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):this.negative&t.negative?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(n=s.mod.neg(),r&&0!==n.negative&&n.isub(t)),{div:s.div,mod:n}):t.length>this.length||this.cmp(t)<0?{div:new c(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new c(this.modrn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new c(this.modrn(t.words[0]))}:this.wordDiv(t,e)}div(t){return this.divmod(t,"div",!1).div}mod(t){return this.divmod(t,"mod",!1).mod}umod(t){return this.divmod(t,"mod",!0).mod}divRound(t){const e=this.divmod(t);if(e.mod.isZero())return e.div;const r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),s=r.cmp(i);return s<0||1===n&&0===s?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)}modrn(t){const e=t<0;e&&(t=-t),this.assert(t<=67108863);const r=(1<<26)%t;let i=0;for(let e=this.length-1;e>=0;e--)i=(r*i+(0|this.words[e]))%t;return e?-i:i}idivn(t){const e=t<0;e&&(t=-t),this.assert(t<=67108863);let r=0;for(let e=this.length-1;e>=0;e--){const i=(0|this.words[e])+67108864*r;this.words[e]=i/t|0,r=i%t}return this.strip(),e?this.ineg():this}divn(t){return this.clone().idivn(t)}egcd(t){this.assert(0===t.negative,"p must not be negative"),this.assert(!t.isZero(),"p must not be zero");let e=this;const r=t.clone();e=0!==e.negative?e.umod(t):e.clone();const i=new c(1),n=new c(0),s=new c(0),a=new c(1);let o=0;for(;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++o;const h=r.clone(),u=e.clone();for(;!e.isZero();){let t=0,o=1;for(;!(e.words[0]&o)&&t<26;++t,o<<=1);if(t>0)for(e.iushrn(t);t-- >0;)(i.isOdd()||n.isOdd())&&(i.iadd(h),n.isub(u)),i.iushrn(1),n.iushrn(1);let c=0,d=1;for(;!(r.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(r.iushrn(c);c-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(h),a.isub(u)),s.iushrn(1),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),n.isub(a)):(r.isub(e),s.isub(i),a.isub(n))}return{a:s,b:a,gcd:r.iushln(o)}}_invmp(t){this.assert(0===t.negative,"p must not be negative"),this.assert(!t.isZero(),"p must not be zero");let e=this;const r=t.clone();e=0!==e.negative?e.umod(t):e.clone();const i=new c(1),n=new c(0),s=r.clone();for(;e.cmpn(1)>0&&r.cmpn(1)>0;){let t=0,a=1;for(;!(e.words[0]&a)&&t<26;++t,a<<=1);if(t>0)for(e.iushrn(t);t-- >0;)i.isOdd()&&i.iadd(s),i.iushrn(1);let o=0,c=1;for(;!(r.words[0]&c)&&o<26;++o,c<<=1);if(o>0)for(r.iushrn(o);o-- >0;)n.isOdd()&&n.iadd(s),n.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(n)):(r.isub(e),n.isub(i))}let a;return a=0===e.cmpn(1)?i:n,a.cmpn(0)<0&&a.iadd(t),a}gcd(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();let e=this.clone(),r=t.clone();e.negative=0,r.negative=0;let i=0;for(;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);const t=e.cmp(r);if(t<0){const t=e;e=r,r=t}else if(0===t||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)}invm(t){return this.egcd(t).a.umod(t)}isEven(){return!(1&this.words[0])}isOdd(){return!(1&~this.words[0])}andln(t){return this.words[0]&t}bincn(t){this.assert("number"==typeof t);const e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this.expand(r+1),this.words[r]|=i,this;let n=i,s=r;for(;0!==n&&s<this.length;s++){let t=0|this.words[s];t+=n,n=t>>>26,t&=67108863,this.words[s]=t}return 0!==n&&(this.words[s]=n,this.length++),this}isZero(){return 1===this.length&&0===this.words[0]}cmpn(t){const e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;let r;if(this.strip(),this.length>1)r=1;else{e&&(t=-t),this.assert(t<=67108863,"Number is too big");const i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r}cmp(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;const e=this.ucmp(t);return 0!==this.negative?0|-e:e}ucmp(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;let e=0;for(let r=this.length-1;r>=0;r--){const i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e}gtn(t){return 1===this.cmpn(t)}gt(t){return 1===this.cmp(t)}gten(t){return this.cmpn(t)>=0}gte(t){return this.cmp(t)>=0}ltn(t){return-1===this.cmpn(t)}lt(t){return-1===this.cmp(t)}lten(t){return this.cmpn(t)<=0}lte(t){return this.cmp(t)<=0}eqn(t){return 0===this.cmpn(t)}eq(t){return 0===this.cmp(t)}toRed(t){return this.assert(null==this.red,"Already a number in reduction context"),this.assert(0===this.negative,"red works only with positives"),t.convertTo(this).forceRed(t)}fromRed(){return this.assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)}forceRed(t){return this.red=t,this}redAdd(t){return this.assert(this.red,"redAdd works only with red numbers"),this.red.add(this,t)}redIAdd(t){return this.assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)}redSub(t){return this.assert(this.red,"redSub works only with red numbers"),this.red.sub(this,t)}redISub(t){return this.assert(this.red,"redISub works only with red numbers"),this.red.isub(this,t)}redShl(t){return this.assert(this.red,"redShl works only with red numbers"),this.red.shl(this,t)}redMul(t){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,t),this.red.mul(this,t)}redIMul(t){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,t),this.red.imul(this,t)}redSqr(){return this.assert(this.red,"redSqr works only with red numbers"),this.red.verify1(this),this.red.sqr(this)}redISqr(){return this.assert(this.red,"redISqr works only with red numbers"),this.red.verify1(this),this.red.isqr(this)}redSqrt(){return this.assert(this.red,"redSqrt works only with red numbers"),this.red.verify1(this),this.red.sqrt(this)}redInvm(){return this.assert(this.red,"redInvm works only with red numbers"),this.red.verify1(this),this.red.invm(this)}redNeg(){return this.assert(this.red,"redNeg works only with red numbers"),this.red.verify1(this),this.red.neg(this)}redPow(t){return this.assert(null!=this.red&&null==t.red,"redPow(normalNum)"),this.red.verify1(this),this.red.pow(this,t)}static fromHex(t,e){return"big"===e?new c(t,16):new c(t,16,"le")}toHex(t=0){return this.toString("hex",2*t)}static fromJSON(t){return new c(t)}static fromNumber(t){return new c(t)}static fromString(t,e){return new c(t,e)}static fromSm(t,e="big"){let r=t;return 0===t.length?new c(0):("little"===e&&(r=[...r],r=r.reverse()),128&r[0]?(r=[...r],r[0]=127&r[0],new c(r).neg()):new c(r))}toSm(t="big"){let e;return-1===this.cmpn(0)?(e=this.neg().toArray(),128&e[0]?e=[128,...e]:e[0]=128|e[0]):(e=this.toArray(),128&e[0]&&(e=[0,...e])),1===e.length&&0===e[0]&&(e=[]),"little"===t&&(e=e.reverse()),e}static fromBits(t,e=!1){if(t=2147483648&t?t-4294967296:t,e&&8388608&t)throw new Error("negative bit set");const r=t>>24,i=8388607&t;let n=[i>>24&255,i>>16&255,i>>8&255,255&i];if(r<=3)n=n.slice(1,1+r);else for(let t=0;t<r-3;t++)n.push(0);return 8388608&t?new c(n).neg():new c(n)}toBits(){let t;for(t=this.ltn(0)?this.neg().toArray("be"):this.toArray("be");t.length<4;)t.unshift(0);if(t.every((t=>0===t)))return 0;for(;0===t[0];)t.shift();let e=t.length,r=t.slice(0,3).reduce(((t,e)=>256*t+e),0);8388608&r&&(t.unshift(0),e+=1,r>>>=8);let i=e<<24|r;return this.ltn(0)&&(i|=8388608),i>>>0}static fromScriptNum(t,e,r){if(void 0===r&&(r=Number.MAX_SAFE_INTEGER),t.length>r)throw new Error("script number overflow");if(e&&t.length>0&&!(127&t[t.length-1]||!(t.length<=1)&&128&t[t.length-2]))throw new Error("non-minimally encoded script number");return c.fromSm(t,"little")}toScriptNum(){return this.toSm("little")}}class h{name;p;k;n;tmp;constructor(t,e){this.name=t,this.p=new c(e,16),this.n=this.p.bitLength(),this.k=new c(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}_tmp(){const t=new c;return t.words=new Array(Math.ceil(this.n/13)),t}ireduce(t){let e,r=t;do{this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength()}while(e>this.n);const i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):(r.strip,r.strip()),r}split(t,e){t.iushrn(this.n,0,e)}imulK(t){return t.imul(this.k)}}class u extends h{constructor(){super("k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}split(t,e){const r=4194303,i=Math.min(t.length,9);let n=0;for(;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);let s=t.words[9];for(e.words[e.length++]=s&r,n=10;n<t.length;n++){const e=0|t.words[n];t.words[n-10]=(e&r)<<4|s>>>22,s=e}s>>>=22,t.words[n-10]=s,0===s&&t.length>10?t.length-=10:t.length-=9}imulK(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;let e=0;for(let r=0;r<t.length;r++){const i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t}}class d{prime;m;constructor(t){if("k256"===t){const t=new u;this.m=t.p,this.prime=t}else this.assert(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}assert(t,e="Assertion failed"){if(!t)throw new Error(e)}verify1(t){this.assert(0===t.negative,"red works only with positives"),this.assert(t.red,"red works only with red numbers")}verify2(t,e){this.assert(!(t.negative|e.negative),"red works only with positives"),this.assert(null!=t.red&&t.red===e.red,"red works only with red numbers")}imod(t){return null!=this.prime?this.prime.ireduce(t).forceRed(this):(c.move(t,t.umod(this.m).forceRed(this)),t)}neg(t){return t.isZero()?t.clone():this.m.sub(t).forceRed(this)}add(t,e){this.verify2(t,e);const r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r.forceRed(this)}iadd(t,e){this.verify2(t,e);const r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r}sub(t,e){this.verify2(t,e);const r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r.forceRed(this)}isub(t,e){this.verify2(t,e);const r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r}shl(t,e){return this.verify1(t),this.imod(t.ushln(e))}imul(t,e){return this.verify2(t,e),this.imod(t.imul(e))}mul(t,e){return this.verify2(t,e),this.imod(t.mul(e))}isqr(t){return this.imul(t,t.clone())}sqr(t){return this.mul(t,t)}sqrt(t){if(t.isZero())return t.clone();const e=this.m.andln(3);if(this.assert(e%2==1),3===e){const e=this.m.add(new c(1)).iushrn(2);return this.pow(t,e)}const r=this.m.subn(1);let i=0;for(;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);this.assert(!r.isZero());const n=new c(1).toRed(this),s=n.redNeg(),a=this.m.subn(1).iushrn(1),o=this.m.bitLength(),h=new c(2*o*o).toRed(this);for(;0!==this.pow(h,a).cmp(s);)h.redIAdd(s);let u=this.pow(h,r),d=this.pow(t,r.addn(1).iushrn(1)),l=this.pow(t,r),f=i;for(;0!==l.cmp(n);){let t=l,e=0;for(;0!==t.cmp(n);e++)t=t.redSqr();this.assert(e<f);const r=this.pow(u,new c(1).iushln(f-e-1));d=d.redMul(r),u=r.redSqr(),l=l.redMul(u),f=e}return d}invm(t){const e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)}pow(t,e){if(e.isZero())return new c(1).toRed(this);if(0===e.cmpn(1))return t.clone();const r=new Array(16);r[0]=new c(1).toRed(this),r[1]=t;let i=2;for(;i<r.length;i++)r[i]=this.mul(r[i-1],t);let n=r[0],s=0,a=0,o=e.bitLength()%26;for(0===o&&(o=26),i=e.length-1;i>=0;i--){const t=e.words[i];for(let e=o-1;e>=0;e--){const o=t>>e&1;n!==r[0]&&(n=this.sqr(n)),0!==o||0!==s?(s<<=1,s|=o,a++,(4===a||0===i&&0===e)&&(n=this.mul(n,r[s]),a=0,s=0)):a=0}o=26}return n}convertTo(t){const e=t.umod(this.m);return e===t?e.clone():e}convertFrom(t){const e=t.clone();return e.red=null,e}}class l extends d{shift;r;r2;rinv;minv;constructor(t){super(t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new c(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)}convertTo(t){return this.imod(t.ushln(this.shift))}convertFrom(t){const e=this.imod(t.mul(this.rinv));return e.red=null,e}imul(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;const r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}mul(t,e){if(t.isZero()||e.isZero())return new c(0).forceRed(this);const r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}invm(t){return this.imod(t._invmp(this.m).mul(this.r2)).forceRed(this)}}class f{curve;type;precomputed;constructor(t){this.curve=new Kt,this.type=t,this.precomputed=null}}class p extends f{x;y;z;zOne;constructor(t,e,r){super("jacobian"),null===t&&null===e&&null===r?(this.x=this.curve.one,this.y=this.curve.one,this.z=new c(0)):(c.isBN(t)||(t=new c(t,16)),this.x=t,c.isBN(e)||(e=new c(e,16)),this.y=e,c.isBN(r)||(r=new c(r,16)),this.z=r),null==this.x.red&&(this.x=this.x.toRed(this.curve.red)),null==this.y.red&&(this.y=this.y.toRed(this.curve.red)),null==this.z.red&&(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}toP(){if(this.isInfinity())return new Dt(null,null);const t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),i=this.y.redMul(e).redMul(t);return new Dt(r,i)}neg(){return new p(this.x,this.y.redNeg(),this.z)}add(t){if(this.isInfinity())return t;if(t.isInfinity())return this;const e=t.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(e),n=t.x.redMul(r),s=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),o=i.redSub(n),c=s.redSub(a);if(0===o.cmpn(0))return 0!==c.cmpn(0)?new p(null,null,null):this.dbl();const h=o.redSqr(),u=h.redMul(o),d=i.redMul(h),l=c.redSqr().redIAdd(u).redISub(d).redISub(d),f=c.redMul(d.redISub(l)).redISub(s.redMul(u)),b=this.z.redMul(t.z).redMul(o);return new p(l,f,b)}mixedAdd(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;const e=this.z.redSqr(),r=this.x,i=t.x.redMul(e),n=this.y,s=t.y.redMul(e).redMul(this.z),a=r.redSub(i),o=n.redSub(s);if(0===a.cmpn(0))return 0!==o.cmpn(0)?new p(null,null,null):this.dbl();const c=a.redSqr(),h=c.redMul(a),u=r.redMul(c),d=o.redSqr().redIAdd(h).redISub(u).redISub(u),l=o.redMul(u.redISub(d)).redISub(n.redMul(h)),f=this.z.redMul(a);return new p(d,l,f)}dblp(t){if(0===t)return this;if(this.isInfinity())return this;if(void 0===t)return this.dbl();let e=this;for(let r=0;r<t;r++)e=e.dbl();return e}dbl(){if(this.isInfinity())return this;let t,e,r;if(this.zOne){const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(a).redISub(a);let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),t=c,e=o.redMul(a.redISub(c)).redISub(h),r=this.y.redAdd(this.y)}else{const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr();let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),t=c.redISub(a).redISub(a),e=o.redMul(a.redISub(t)).redISub(h),r=this.y.redMul(this.z),r=r.redIAdd(r)}return new p(t,e,r)}eq(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;const e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;const i=e.redMul(this.z),n=r.redMul(t.z);return 0===this.y.redMul(n).redISub(t.y.redMul(i)).cmpn(0)}eqXToP(t){const e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;const i=t.clone(),n=this.curve.redN.redMul(e);for(;;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}}inspect(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"}isInfinity(){return 0===this.z.cmpn(0)}}const b=(t,e="Hash assertion failed")=>{if(!t)throw new Error(e)};class m{pending;pendingTotal;blockSize;outSize;endian;_delta8;_delta32;padLength;hmacStrength;constructor(t,e,r,i){this.pending=null,this.pendingTotal=0,this.blockSize=t,this.outSize=e,this.hmacStrength=r,this.padLength=i/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}_update(t,e){throw new Error("Not implemented")}_digest(){throw new Error("Not implemented")}_digestHex(){throw new Error("Not implemented")}update(t,e){if(t=g(t,e),null==this.pending?this.pending=t:this.pending=this.pending.concat(t),this.pendingTotal+=t.length,this.pending.length>=this._delta8){const e=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-e,t.length),0===this.pending.length&&(this.pending=null),t=function(t,e,r,i){const n=r-0;b(n%4==0);const s=new Array(n/4);for(let e=0,r=0;e<s.length;e++,r+=4){let n;n="big"===i?t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]:t[r+3]<<24|t[r+2]<<16|t[r+1]<<8|t[r],s[e]=n>>>0}return s}(t,0,t.length-e,this.endian);for(let e=0;e<t.length;e+=this._delta32)this._update(t,e)}return this}digest(){return this.update(this._pad()),b(null===this.pending),this._digest()}digestHex(){return this.update(this._pad()),b(null===this.pending),this._digestHex()}_pad(){let t=this.pendingTotal;const e=this._delta8,r=e-(t+this.padLength)%e,i=new Array(r+this.padLength);let n,s;for(i[0]=128,n=1;n<r;n++)i[n]=0;if(t<<=3,"big"===this.endian){for(s=8;s<this.padLength;s++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=t>>>24&255,i[n++]=t>>>16&255,i[n++]=t>>>8&255,i[n++]=255&t}else for(i[n++]=255&t,i[n++]=t>>>8&255,i[n++]=t>>>16&255,i[n++]=t>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,s=8;s<this.padLength;s++)i[n++]=0;return i}}function w(t,e){return 55296==(64512&t.charCodeAt(e))&&!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1))}function g(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];const r=[];if("string"==typeof t)if("hex"!==e){let e=0;for(let i=0;i<t.length;i++){let n=t.charCodeAt(i);n<128?r[e++]=n:n<2048?(r[e++]=n>>6|192,r[e++]=63&n|128):w(t,i)?(n=65536+((1023&n)<<10)+(1023&t.charCodeAt(++i)),r[e++]=n>>18|240,r[e++]=n>>12&63|128,r[e++]=n>>6&63|128,r[e++]=63&n|128):(r[e++]=n>>12|224,r[e++]=n>>6&63|128,r[e++]=63&n|128)}}else{(t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t);for(let e=0;e<t.length;e+=2)r.push(parseInt(t[e]+t[e+1],16))}else for(let e=0;e<t.length;e++)r[e]=0|t[e];return r}function y(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function I(t,e){let r="";for(let n=0;n<t.length;n++){let s=t[n];"little"===e&&(s=y(s)),r+=7===(i=s.toString(16)).length?"0"+i:6===i.length?"00"+i:5===i.length?"000"+i:4===i.length?"0000"+i:3===i.length?"00000"+i:2===i.length?"000000"+i:1===i.length?"0000000"+i:i}var i;return r}function v(t,e){const r=new Array(4*t.length);for(let i=0,n=0;i<t.length;i++,n+=4){const s=t[i];"big"===e?(r[n]=s>>>24,r[n+1]=s>>>16&255,r[n+2]=s>>>8&255,r[n+3]=255&s):(r[n+3]=s>>>24,r[n+2]=s>>>16&255,r[n+1]=s>>>8&255,r[n]=255&s)}return r}function k(t,e){return t>>>e|t<<32-e}function P(t,e){return t<<e|t>>>32-e}function O(t,e){return t+e>>>0}function S(t,e,r){return t+e+r>>>0}function N(t,e,r,i){return t+e+r+i>>>0}function E(t,e,r,i,n){return t+e+r+i+n>>>0}function A(t,e,r,i){return 0===t?x(e,r,i):1===t||3===t?function(t,e,r){return t^e^r}(e,r,i):2===t?_(e,r,i):void 0}function x(t,e,r){return t&e^~t&r}function _(t,e,r){return t&e^t&r^e&r}function M(t){return k(t,2)^k(t,13)^k(t,22)}function T(t){return k(t,6)^k(t,11)^k(t,25)}function F(t){return k(t,7)^k(t,18)^t>>>3}const V=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],B=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],R=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],C=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];function H(t,e,r,i){return t<=15?e^r^i:t<=31?e&r|~e&i:t<=47?(e|~r)^i:t<=63?e&i|r&~i:e^(r|~i)}function D(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function U(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}function K(t,e,r,i){const n=t[e],s=i+t[e+1]>>>0,a=(s<i?1:0)+r+n;t[e]=a>>>0,t[e+1]=s}function L(t,e,r,i){return(e+i>>>0<e?1:0)+t+r>>>0}function q(t,e,r,i){return e+i>>>0}function z(t,e,r,i,n,s,a,o){let c=0,h=e;return h=h+i>>>0,c+=h<e?1:0,h=h+s>>>0,c+=h<s?1:0,h=h+o>>>0,c+=h<o?1:0,t+r+n+a+c>>>0}function W(t,e,r,i,n,s,a,o,c,h){let u=0,d=e;return d=d+i>>>0,u+=d<e?1:0,d=d+s>>>0,u+=d<s?1:0,d=d+o>>>0,u+=d<o?1:0,d=d+h>>>0,u+=d<h?1:0,t+r+n+a+c+u>>>0}function j(t,e,r,i,n,s,a,o,c,h){return e+i+s+o+h>>>0}function $(t,e,r){return(e<<32-r|t>>>r)>>>0}function X(t,e,r){return(t<<32-r|e>>>r)>>>0}function G(t,e,r){return t>>>r}function Y(t,e,r){return(t<<32-r|e>>>r)>>>0}class Z extends m{h;constructor(){super(512,160,192,64),this.endian="little",this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}_update(t,e){let r,i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=i,h=n,u=s,d=a,l=o;for(let f=0;f<80;f++)r=O(P(N(i,H(f,n,s,a),t[V[f]+e],D(f)),R[f]),o),i=o,o=a,a=P(s,10),s=n,n=r,r=O(P(N(c,H(79-f,h,u,d),t[B[f]+e],U(f)),C[f]),l),c=l,l=d,d=P(u,10),u=h,h=r;r=S(this.h[1],s,d),this.h[1]=S(this.h[2],a,l),this.h[2]=S(this.h[3],o,c),this.h[3]=S(this.h[4],i,h),this.h[4]=S(this.h[0],n,u),this.h[0]=r}_digest(){return v(this.h,"little")}_digestHex(){return I(this.h,"little")}}class Q extends m{h;W;k;constructor(){super(512,256,192,64),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],this.W=new Array(64)}_update(t,e){const r=this.W;let i;for(i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=N(k(n=r[i-2],17)^k(n,19)^n>>>10,r[i-7],F(r[i-15]),r[i-16]);var n;let s=this.h[0],a=this.h[1],o=this.h[2],c=this.h[3],h=this.h[4],u=this.h[5],d=this.h[6],l=this.h[7];for(b(this.k.length===r.length),i=0;i<r.length;i++){const t=E(l,T(h),x(h,u,d),this.k[i],r[i]),e=O(M(s),_(s,a,o));l=d,d=u,u=h,h=O(c,t),c=o,o=a,a=s,s=O(t,e)}this.h[0]=O(this.h[0],s),this.h[1]=O(this.h[1],a),this.h[2]=O(this.h[2],o),this.h[3]=O(this.h[3],c),this.h[4]=O(this.h[4],h),this.h[5]=O(this.h[5],u),this.h[6]=O(this.h[6],d),this.h[7]=O(this.h[7],l)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}class J extends m{h;W;k;constructor(){super(512,160,80,64),this.k=[1518500249,1859775393,2400959708,3395469782],this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}_update(t,e){const r=this.W;let i;for(i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=P(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);let n=this.h[0],s=this.h[1],a=this.h[2],o=this.h[3],c=this.h[4];for(i=0;i<r.length;i++){const t=~~(i/20),e=E(P(n,5),A(t,s,a,o),c,r[i],this.k[t]);c=o,o=a,a=P(s,30),s=n,n=e}this.h[0]=O(this.h[0],n),this.h[1]=O(this.h[1],s),this.h[2]=O(this.h[2],a),this.h[3]=O(this.h[3],o),this.h[4]=O(this.h[4],c)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}class tt extends m{h;W;k;constructor(){super(1024,512,192,128),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],this.W=new Array(160)}_prepareBlock(t,e){const r=this.W;let i;for(i=0;i<32;i++)r[i]=t[e+i];for(;i<r.length;i+=2){const t=dt(r[i-4],r[i-3]),e=lt(r[i-4],r[i-3]),n=r[i-14],s=r[i-13],a=ht(r[i-30],r[i-29]),o=ut(r[i-30],r[i-29]),c=r[i-32],h=r[i-31];r[i]=z(t,e,n,s,a,o,c,h),r[i+1]=e+s+o+h>>>0}}_update(t,e){this._prepareBlock(t,e);const r=this.W;let i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=this.h[5],h=this.h[6],u=this.h[7],d=this.h[8],l=this.h[9],f=this.h[10],p=this.h[11],m=this.h[12],w=this.h[13],g=this.h[14],y=this.h[15];b(this.k.length===r.length);for(let t=0;t<r.length;t+=2){let e=g,b=y,I=ot(d,l),v=ct(d,l);const k=et(d,0,f,0,m),P=rt(0,l,0,p,0,w),O=this.k[t],S=this.k[t+1],N=r[t],E=r[t+1],A=W(e,b,I,v,k,P,O,S,N,E),x=j(0,b,0,v,0,P,0,S,0,E);e=st(i,n),b=at(i,n),I=it(i,0,s,0,o),v=nt(0,n,0,a,0,c);const _=L(e,b,I,v),M=q(0,b,0,v);g=m,y=w,m=f,w=p,f=d,p=l,d=L(h,u,A,x),l=q(0,u,0,x),h=o,u=c,o=s,c=a,s=i,a=n,i=L(A,x,_,M),n=q(0,x,0,M)}K(this.h,0,i,n),K(this.h,2,s,a),K(this.h,4,o,c),K(this.h,6,h,u),K(this.h,8,d,l),K(this.h,10,f,p),K(this.h,12,m,w),K(this.h,14,g,y)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}function et(t,e,r,i,n,s){let a=t&r^~t&n;return a<0&&(a+=4294967296),a}function rt(t,e,r,i,n,s){let a=e&i^~e&s;return a<0&&(a+=4294967296),a}function it(t,e,r,i,n,s){let a=t&r^t&n^r&n;return a<0&&(a+=4294967296),a}function nt(t,e,r,i,n,s){let a=e&i^e&s^i&s;return a<0&&(a+=4294967296),a}function st(t,e){let r=$(t,e,28)^$(e,t,2)^$(e,t,7);return r<0&&(r+=4294967296),r}function at(t,e){let r=X(t,e,28)^X(e,t,2)^X(e,t,7);return r<0&&(r+=4294967296),r}function ot(t,e){let r=$(t,e,14)^$(t,e,18)^$(e,t,9);return r<0&&(r+=4294967296),r}function ct(t,e){let r=X(t,e,14)^X(t,e,18)^X(e,t,9);return r<0&&(r+=4294967296),r}function ht(t,e){let r=$(t,e,1)^$(t,e,8)^G(t,0,7);return r<0&&(r+=4294967296),r}function ut(t,e){let r=X(t,e,1)^X(t,e,8)^Y(t,e,7);return r<0&&(r+=4294967296),r}function dt(t,e){let r=$(t,e,19)^$(e,t,29)^G(t,0,6);return r<0&&(r+=4294967296),r}function lt(t,e){let r=X(t,e,19)^X(e,t,29)^Y(t,e,6);return r<0&&(r+=4294967296),r}class ft{inner;outer;blockSize=64;outSize=32;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new Q).update(t).digest()),b(t.length<=this.blockSize),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new Q).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new Q).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class pt{inner;outer;blockSize=64;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new J).update(t).digest()),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new J).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new J).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class bt{inner;outer;blockSize=128;outSize=32;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new tt).update(t).digest()),b(t.length<=this.blockSize),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new tt).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new tt).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}const mt=(t,e)=>(new Z).update(t,e).digest(),wt=(t,e)=>(new J).update(t,e).digest(),gt=(t,e)=>(new Q).update(t,e).digest(),yt=(t,e)=>(new tt).update(t,e).digest(),It=(t,e)=>{const r=(new Q).update(t,e).digest();return(new Q).update(r).digest()},vt=(t,e)=>{const r=(new Q).update(t,e).digest();return(new Z).update(r).digest()},kt=(t,e,r)=>new ft(t).update(e,r).digest(),Pt=(t,e,r)=>new bt(t).update(e,r).digest();function Ot(t,e,r,i,n="sha512"){if("sha512"!==n)throw new Error("Only sha512 is supported in this PBKDF2 implementation");const s=new Array(i),a=[...e,0,0,0,0];let o=0;const c=Math.ceil(i/64);for(let i=1;i<=c;i++){a[e.length]=i>>24&255,a[e.length+1]=i>>16&255,a[e.length+2]=i>>8&255,a[e.length+3]=255&i;const n=Pt(t,a);let c=n;for(let e=1;e<r;e++){c=Pt(t,c);for(let t=0;t<64;t++)n[t]^=c[t]}for(let t=0;t<n.length;t++)s[o+t]=n[t];o+=64}return s.slice(0,i)}const St=t=>t.length%2==1?"0"+t:t,Nt=t=>{let e="";for(let r=0;r<t.length;r++)e+=St(t[r].toString(16));return e},Et=(t,e)=>{if(Array.isArray(t))return t.slice();if(!t)return[];const r=[];if("string"!=typeof t){for(let e=0;e<t.length;e++)r[e]=0|t[e];return r}if("hex"===e){(t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t);for(let e=0;e<t.length;e+=2)r.push(parseInt(t[e]+t[e+1],16))}else{if("base64"===e){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=[];let i=0,n=0;for(const s of t.replace(/=+$/,""))i=i<<6|e.indexOf(s),n+=6,n>=8&&(n-=8,r.push(i>>n&255),i&=(1<<n)-1);return r}for(let e=0;e<t.length;e++){const i=t.charCodeAt(e),n=i>>8,s=255&i;n?r.push(n,s):r.push(s)}}return r},At=t=>{let e="";for(let r=0;r<t.length;r++){const i=t[r];if(i<=127)e+=String.fromCharCode(i);else if(i>=192&&i<=223){const n=(31&i)<<6|63&t[++r];e+=String.fromCharCode(n)}else if(i>=224&&i<=239){const n=(15&i)<<12|(63&t[++r])<<6|63&t[++r];e+=String.fromCharCode(n)}else if(i>=240&&i<=247){const n=(7&i)<<18|(63&t[++r])<<12|(63&t[++r])<<6|63&t[++r],s=55296+(n-65536>>10),a=56320+(n-65536&1023);e+=String.fromCharCode(s,a)}}return e},xt=(t,e)=>{switch(e){case"hex":return Nt(t);case"utf8":return At(t);default:return t}};function _t(t){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let r,i="";for(r=0;r<t.length;r+=3){const n=t[r],s=r+1<t.length?t[r+1]:0,a=r+2<t.length?t[r+2]:0,o=(3&n)<<4|s>>4,c=(15&s)<<2|a>>6,h=63&a;i+=e.charAt(n>>2)+e.charAt(o),i+=r+1<t.length?e.charAt(c):"=",i+=r+2<t.length?e.charAt(h):"="}return i}const Mt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Tt=t=>{if(!t||"string"!=typeof t)throw new Error(`Expected base58 string but got “${t}”`);if(t.match(/[IOl0]/gmu))throw new Error(`Invalid base58 character “${t.match(/[IOl0]/gmu)}”`);const e=t.match(/^1+/gmu),r=e?e[0].length:0,i=(t.length-r)*(Math.log(58)/Math.log(256))+1>>>0;var n;return[...new Uint8Array([...new Uint8Array(r),...t.match(/.{1}/gmu).map((t=>Mt.indexOf(t))).reduce(((t,e)=>t.map((t=>{const r=58*t+e;return e=r>>8,r}))),new Uint8Array(i)).reverse().filter((n=!1,t=>n=n||t))])]},Ft=t=>{const e=Array(256).fill(-1);for(let t=0;t<58;++t)e[Mt.charCodeAt(t)]=t;const r=[];for(const i of t){let t=i;for(let i=0;i<r.length;++i){const n=(e[r[i]]<<8)+t;r[i]=Mt.charCodeAt(n%58),t=n/58|0}for(;t;)r.push(Mt.charCodeAt(t%58)),t=t/58|0}for(const e of t){if(e)break;r.push("1".charCodeAt(0))}return r.reverse(),String.fromCharCode(...r)},Vt=(t,e=[0])=>{let r=It([...e,...t]);return r=[...e,...t,...r.slice(0,4)],Ft(r)},Bt=(t,e,r=1)=>{const i=Tt(t);let n=i.slice(0,r),s=i.slice(r,-4),a=[...n,...s];return a=It(a),i.slice(-4).forEach(((t,e)=>{if(t!==a[e])throw new Error("Invalid checksum")})),"hex"===e&&(n=Nt(n),s=Nt(s)),{prefix:n,data:s}};class Rt{bufs;constructor(t){this.bufs=t||[]}getLength(){let t=0;for(const e of this.bufs)t+=e.length;return t}toArray(){const t=this.getLength(),e=new Array(t);let r=0;for(const t of this.bufs)for(let i=0;i<t.length;i++)e[r++]=t[i];return e}write(t){return this.bufs.push(t),this}writeReverse(t){const e=new Array(t.length);for(let r=0;r<e.length;r++)e[r]=t[t.length-1-r];return this.bufs.push(e),this}writeUInt8(t){const e=new Array(1);return e[0]=t,this.write(e),this}writeInt8(t){const e=new Array(1);return e[0]=255&t,this.write(e),this}writeUInt16BE(t){return this.bufs.push([t>>8&255,255&t]),this}writeInt16BE(t){return this.writeUInt16BE(65535&t)}writeUInt16LE(t){return this.bufs.push([255&t,t>>8&255]),this}writeInt16LE(t){return this.writeUInt16LE(65535&t)}writeUInt32BE(t){return this.bufs.push([t>>24&255,t>>16&255,t>>8&255,255&t]),this}writeInt32BE(t){return this.writeUInt32BE(t>>>0)}writeUInt32LE(t){return this.bufs.push([255&t,t>>8&255,t>>16&255,t>>24&255]),this}writeInt32LE(t){return this.writeUInt32LE(t>>>0)}writeUInt64BEBn(t){const e=t.toArray("be",8);return this.write(e),this}writeUInt64LEBn(t){const e=t.toArray("be",8);return this.writeReverse(e),this}writeUInt64LE(t){const e=new c(t).toArray("be",8);return this.writeReverse(e),this}writeVarIntNum(t){const e=Rt.varIntNum(t);return this.write(e),this}writeVarIntBn(t){const e=Rt.varIntBn(t);return this.write(e),this}static varIntNum(t){let e;if(t<253)e=[t];else if(t<65536)e=[253,255&t,t>>8&255];else if(t<4294967296)e=[254,255&t,t>>8&255,t>>16&255,t>>24&255];else{const r=4294967295&t,i=4294967295&Math.floor(t/4294967296);e=[255,255&r,r>>8&255,r>>16&255,r>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]}return e}static varIntBn(t){let e;if(t.ltn(253))e=[t.toNumber()];else if(t.ltn(65536)){const r=t.toNumber();e=[253,255&r,r>>8&255]}else if(t.lt(new c(4294967296))){const r=t.toNumber();e=[254,255&r,r>>8&255,r>>16&255,r>>24&255]}else{const r=new Rt;r.writeUInt8(255),r.writeUInt64LEBn(t),e=r.toArray()}return e}}class Ct{bin;pos;constructor(t=[],e=0){this.bin=t,this.pos=e}eof(){return this.pos>=this.bin.length}read(t=this.bin.length){const e=this.pos,r=this.pos+t;return this.pos=r,this.bin.slice(e,r)}readReverse(t=this.bin.length){const e=new Array(t);for(let r=0;r<t;r++)e[r]=this.bin[this.pos+t-1-r];return this.pos+=t,e}readUInt8(){const t=this.bin[this.pos];return this.pos+=1,t}readInt8(){const t=this.bin[this.pos];return this.pos+=1,128&t?t-256:t}readUInt16BE(){const t=this.bin[this.pos]<<8|this.bin[this.pos+1];return this.pos+=2,t}readInt16BE(){const t=this.readUInt16BE();return 32768&t?t-65536:t}readUInt16LE(){const t=this.bin[this.pos]|this.bin[this.pos+1]<<8;return this.pos+=2,t}readInt16LE(){const t=this.readUInt16LE();return 32768&t?t-65536:t}readUInt32BE(){const t=16777216*this.bin[this.pos]+(this.bin[this.pos+1]<<16|this.bin[this.pos+2]<<8|this.bin[this.pos+3]);return this.pos+=4,t}readInt32BE(){const t=this.readUInt32BE();return 2147483648&t?t-4294967296:t}readUInt32LE(){const t=(this.bin[this.pos]|this.bin[this.pos+1]<<8|this.bin[this.pos+2]<<16|this.bin[this.pos+3]<<24)>>>0;return this.pos+=4,t}readInt32LE(){const t=this.readUInt32LE();return 2147483648&t?t-4294967296:t}readUInt64BEBn(){const t=this.bin.slice(this.pos,this.pos+8),e=new c(t);return this.pos=this.pos+8,e}readUInt64LEBn(){const t=this.readReverse(8);return new c(t)}readVarIntNum(){const t=this.readUInt8();let e;switch(t){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:if(e=this.readUInt64LEBn(),e.lte(new c(2).pow(new c(53))))return e.toNumber();throw new Error("number too large to retain precision - use readVarIntBn");default:return t}}readVarInt(){switch(this.bin[this.pos]){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}}readVarIntBn(){const t=this.readUInt8();switch(t){case 253:return new c(this.readUInt16LE());case 254:return new c(this.readUInt32LE());case 255:return this.readUInt64LEBn();default:return new c(t)}}}const Ht=t=>{if(0===t.length)return t;const e=t[t.length-1];if(127&e)return t;if(1===t.length)return[];if(128&t[t.length-2])return t;for(let r=t.length-1;r>0;r--)if(0!==t[r-1])return 128&t[r-1]?t[r++]=e:t[r-1]|=e,t.slice(0,r);return[]};class Dt extends f{static red=new d("k256");static a=new c(0).toRed(Dt.red);static b=new c(7).toRed(Dt.red);static zero=new c(0).toRed(Dt.red);x;y;inf;static fromDER(t){if((4===t[0]||6===t[0]||7===t[0])&&t.length-1==64){if(6===t[0]){if(t[t.length-1]%2!=0)throw new Error("Point string value is wrong length")}else if(7===t[0]&&t[t.length-1]%2!=1)throw new Error("Point string value is wrong length");return new Dt(t.slice(1,33),t.slice(33,65))}if((2===t[0]||3===t[0])&&t.length-1==32)return Dt.fromX(t.slice(1,33),3===t[0]);throw new Error("Unknown point format")}static fromString(t){const e=Et(t,"hex");return Dt.fromDER(e)}static redSqrtOptimized(t){const e=Dt.red.m.addn(1).iushrn(2);return t.redPow(e)}static fromX(t,e){if("function"==typeof BigInt){function r(t,e){return(t%e+e)%e}function i(t,e,i){let n=BigInt(1);for(t=r(t,i);e>BigInt(0);)(e&BigInt(1))===BigInt(1)&&(n=r(n*t,i)),e>>=BigInt(1),t=r(t*t,i);return n}function n(t,e){const n=i(t,e+BigInt(1)>>BigInt(2),e);return r(n*n,e)===r(t,e)?n:null}const s=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),a=(BigInt(0),BigInt(7));let o;if(t instanceof c)o=BigInt("0x"+t.toString(16));else if("string"==typeof t)o=BigInt("0x"+t);else if(Array.isArray(t))o=BigInt("0x"+Buffer.from(t).toString("hex").padStart(64,"0"));else{if("number"!=typeof t)throw new Error("Invalid x-coordinate type");o=BigInt(t)}o=r(o,s);let h=n(r(i(o,BigInt(3),s)+a,s),s);if(null===h)throw new Error("Invalid point");const u=h%BigInt(2)===BigInt(1);(e&&!u||!e&&u)&&(h=s-h);const l=new c(o.toString(16),16),f=new c(h.toString(16),16);return new Dt(l,f)}{const p=new d("k256"),b=new c(0).toRed(p),m=new c(7).toRed(p),w=new c(0).toRed(p);c.isBN(t)||(t=new c(t,16)),null==t.red&&(t=t.toRed(p));const g=t.redSqr().redMul(t).redIAdd(t.redMul(b)).redIAdd(m);let y=g.redSqrt();if(0!==y.redSqr().redSub(g).cmp(w))throw new Error("invalid point");const I=y.fromRed().isOdd();return(e&&!I||!e&&I)&&(y=y.redNeg()),new Dt(t,y)}}static fromJSON(t,e){"string"==typeof t&&(t=JSON.parse(t));const r=new Dt(t[0],t[1],e);if("object"!=typeof t[2])return r;const i=t=>new Dt(t[0],t[1],e),n=t[2];return r.precomputed={beta:null,doubles:"object"==typeof n.doubles&&null!==n.doubles?{step:n.doubles.step,points:[r].concat(n.doubles.points.map(i))}:void 0,naf:"object"==typeof n.naf&&null!==n.naf?{wnd:n.naf.wnd,points:[r].concat(n.naf.points.map(i))}:void 0},r}constructor(t,e,r=!0){super("affine"),this.precomputed=null,null===t&&null===e?(this.x=null,this.y=null,this.inf=!0):(c.isBN(t)||(t=new c(t,16)),this.x=t,c.isBN(e)||(e=new c(e,16)),this.y=e,r&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),null===this.x.red&&(this.x=this.x.toRed(this.curve.red)),null===this.y.red&&(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}validate(){return this.curve.validate(this)}encode(t=!0,e){const r=this.curve.p.byteLength(),i=this.getX().toArray("be",r);let n;return n=t?[this.getY().isEven()?2:3].concat(i):[4].concat(i,this.getY().toArray("be",r)),"hex"!==e?n:Nt(n)}toString(){return this.encode(!0,"hex")}toJSON(){return null==this.precomputed?[this.x,this.y]:[this.x,this.y,"object"==typeof this.precomputed&&null!==this.precomputed?{doubles:null!=this.precomputed.doubles?{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)}:void 0,naf:null!=this.precomputed.naf?{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}:void 0}:void 0]}inspect(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"}isInfinity(){return this.inf}add(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return new Dt(null,null);if(0===this.x.cmp(t.x))return new Dt(null,null);let e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));const r=e.redSqr().redISub(this.x).redISub(t.x),i=e.redMul(this.x.redSub(r)).redISub(this.y);return new Dt(r,i)}dbl(){if(this.inf)return this;const t=this.y.redAdd(this.y);if(0===t.cmpn(0))return new Dt(null,null);const e=this.curve.a,r=this.x.redSqr(),i=t.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(i),s=n.redSqr().redISub(this.x.redAdd(this.x)),a=n.redMul(this.x.redSub(s)).redISub(this.y);return new Dt(s,a)}getX(){return this.x.fromRed()}getY(){return this.y.fromRed()}mul(t){return c.isBN(t)||(t=new c(t,16)),this.isInfinity()?this:this._hasDoubles(t)?this._fixedNafMul(t):this._endoWnafMulAdd([this],[t])}mulAdd(t,e,r){const i=[this,e],n=[t,r];return this._endoWnafMulAdd(i,n)}jmulAdd(t,e,r){const i=[this,e],n=[t,r];return this._endoWnafMulAdd(i,n,!0)}eq(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))}neg(t){if(this.inf)return this;const e=new Dt(this.x,this.y.redNeg());if(t&&null!=this.precomputed){const t=this.precomputed,r=t=>t.neg();e.precomputed={naf:null!=t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(r)},doubles:null!=t.doubles&&{step:t.doubles.step,points:t.doubles.points.map((t=>t.neg()))},beta:void 0}}return e}dblp(t){let e=this;for(let r=0;r<t;r++)e=e.dbl();return e}toJ(){return this.inf?new p(null,null,null):new p(this.x,this.y,this.curve.one)}_getBeta(){if("object"!=typeof this.curve.endo)return;const t=this.precomputed;if("object"==typeof t&&null!==t&&"object"==typeof t.beta&&null!==t.beta)return t.beta;const e=new Dt(this.x.redMul(this.curve.endo.beta),this.y);if(null!=t){const r=this.curve,i=t=>new Dt(t.x.redMul(r.endo.beta),t.y);t.beta=e,e.precomputed={beta:null,naf:null!=t.naf?{wnd:t.naf.wnd,points:t.naf.points.map(i)}:void 0,doubles:null!=t.doubles?{step:t.doubles.step,points:t.doubles.points.map(i)}:void 0}}return e}_fixedNafMul(t){if("object"!=typeof this.precomputed||null===this.precomputed)throw new Error("_fixedNafMul requires precomputed values for the point");const e=this._getDoubles(),r=this.curve.getNAF(t,1,this.curve._bitLength);let i=(1<<e.step+1)-(e.step%2==0?2:1);i/=3;const n=[];for(let t=0;t<r.length;t+=e.step){let i=0;for(let n=t+e.step-1;n>=t;n--)i=(i<<1)+r[n];n.push(i)}let s=new p(null,null,null),a=new p(null,null,null);for(let t=i;t>0;t--){for(let r=0;r<n.length;r++){const i=n[r];i===t?a=a.mixedAdd(e.points[r]):i===-t&&(a=a.mixedAdd(e.points[r].neg()))}s=s.add(a)}return s.toP()}_wnafMulAdd(t,e,r,i,n){const s=this.curve._wnafT1,a=this.curve._wnafT2,o=this.curve._wnafT3;let c=0;for(let r=0;r<i;r++){const i=e[r]._getNAFPoints(t);s[r]=i.wnd,a[r]=i.points}for(let t=i-1;t>=1;t-=2){const i=t-1,n=t;if(1!==s[i]||1!==s[n]){o[i]=this.curve.getNAF(r[i],s[i],this.curve._bitLength),o[n]=this.curve.getNAF(r[n],s[n],this.curve._bitLength),c=Math.max(o[i].length,c),c=Math.max(o[n].length,c);continue}const h=[e[i],null,null,e[n]];0===e[i].y.cmp(e[n].y)?(h[1]=e[i].add(e[n]),h[2]=e[i].toJ().mixedAdd(e[n].neg())):0===e[i].y.cmp(e[n].y.redNeg())?(h[1]=e[i].toJ().mixedAdd(e[n]),h[2]=e[i].add(e[n].neg())):(h[1]=e[i].toJ().mixedAdd(e[n]),h[2]=e[i].toJ().mixedAdd(e[n].neg()));const u=[-3,-1,-5,-7,0,7,5,1,3],d=this.curve.getJSF(r[i],r[n]);c=Math.max(d[0].length,c),o[i]=new Array(c),o[n]=new Array(c);for(let t=0;t<c;t++){const e=0|d[0][t],r=0|d[1][t];o[i][t]=u[3*(e+1)+(r+1)],o[n][t]=0,a[i]=h}}let h=new p(null,null,null);const u=this.curve._wnafT4;for(let t=c;t>=0;t--){let e=0;for(;t>=0;){let r=!0;for(let e=0;e<i;e++)u[e]=0|o[e][t],0!==u[e]&&(r=!1);if(!r)break;e++,t--}if(t>=0&&e++,h=h.dblp(e),t<0)break;for(let t=0;t<i;t++){const e=u[t];let r;0!==e&&(e>0?r=a[t][e-1>>1]:e<0&&(r=a[t][-e-1>>1].neg()),h="affine"===r.type?h.mixedAdd(r):h.add(r))}}for(let t=0;t<i;t++)a[t]=null;return n?h:h.toP()}_endoWnafMulAdd(t,e,r){const i=this.curve._endoWnafT1,n=this.curve._endoWnafT2;let s;for(s=0;s<t.length;s++){const r=this.curve._endoSplit(e[s]);let a=t[s],o=a._getBeta();0!==r.k1.negative&&(r.k1.ineg(),a=a.neg(!0)),0!==r.k2.negative&&(r.k2.ineg(),o=o.neg(!0)),i[2*s]=a,i[2*s+1]=o,n[2*s]=r.k1,n[2*s+1]=r.k2}const a=this._wnafMulAdd(1,i,n,2*s,r);for(let t=0;t<2*s;t++)i[t]=null,n[t]=null;return a}_hasDoubles(t){if(null==this.precomputed)return!1;const e=this.precomputed.doubles;return"object"==typeof e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)}_getDoubles(t,e){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.doubles&&null!==this.precomputed.doubles)return this.precomputed.doubles;const r=[this];let i=this;for(let n=0;n<e;n+=t){for(let e=0;e<t;e++)i=i.dbl();r.push(i)}return{step:t,points:r}}_getNAFPoints(t){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.naf&&null!==this.precomputed.naf)return this.precomputed.naf;const e=[this],r=(1<<t)-1,i=1===r?null:this.dbl();for(let t=1;t<r;t++)e[t]=e[t-1].add(i);return{wnd:t,points:e}}}let Ut;class Kt{p;red;redN;zero;one;two;g;n;a;b;tinv;zeroA;threeA;endo;_endoWnafT1;_endoWnafT2;_wnafT1;_wnafT2;_wnafT3;_wnafT4;_bitLength;static assert(t,e="Elliptic curve assertion failed"){if(!t)throw new Error(e)}getNAF(t,e,r){const i=new Array(Math.max(t.bitLength(),r)+1);i.fill(0);const n=1<<e+1,s=t.clone();for(let t=0;t<i.length;t++){let e;const r=s.andln(n-1);s.isOdd()?(e=r>(n>>1)-1?(n>>1)-r:r,s.isubn(e)):e=0,i[t]=e,s.iushrn(1)}return i}getJSF(t,e){const r=[[],[]];t=t.clone(),e=e.clone();let i=0,n=0;for(;t.cmpn(-i)>0||e.cmpn(-n)>0;){let s,a,o=t.andln(3)+i&3,c=e.andln(3)+n&3;if(3===o&&(o=-1),3===c&&(c=-1),1&o){const e=t.andln(7)+i&7;s=3!==e&&5!==e||2!==c?o:-o}else s=0;if(r[0].push(s),1&c){const t=e.andln(7)+n&7;a=3!==t&&5!==t||2!==o?c:-c}else a=0;r[1].push(a),2*i===s+1&&(i=1-i),2*n===a+1&&(n=1-n),t.iushrn(1),e.iushrn(1)}return r}static cachedProperty(t,e,r){const i="_"+e;t.prototype[e]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}}static parseBytes(t){return"string"==typeof t?Et(t,"hex"):t}static intFromLE(t){return new c(t,"hex","le")}constructor(){if(void 0!==Ut)return Ut;Ut=this;const t={prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",{doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}]};this.p=new c(t.p,16),this.red=new d(t.prime),this.zero=new c(0).toRed(this.red),this.one=new c(1).toRed(this.red),this.two=new c(2).toRed(this.red),this.n=new c(t.n,16),this.g=Dt.fromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n.bitLength(),this.redN=this.n.toRed(this.red),this.a=new c(t.a,16).toRed(this.red),this.b=new c(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}_getEndomorphism(t){if(!this.zeroA||1!==this.p.modrn(3))return;let e,r,i;if(void 0!==t.beta)e=new c(t.beta,16).toRed(this.red);else{const t=this._getEndoRoots(this.p);e=t[0].cmp(t[1])<0?t[0]:t[1],e=e.toRed(this.red)}if(void 0!==t.lambda)r=new c(t.lambda,16);else{const t=this._getEndoRoots(this.n);0===this.g.mul(t[0]).x.cmp(this.g.x.redMul(e))?r=t[0]:(r=t[1],Kt.assert(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return i="object"==typeof t.basis&&null!==t.basis?t.basis.map((function(t){return{a:new c(t.a,16),b:new c(t.b,16)}})):this._getEndoBasis(r),{beta:e,lambda:r,basis:i}}_getEndoRoots(t){const e=t===this.p?this.red:new l(t),r=new c(2).toRed(e).redInvm(),i=r.redNeg(),n=new c(3).toRed(e).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]}_getEndoBasis(t){const e=this.n.ushrn(Math.floor(this.n.bitLength()/2));let r,i,n,s,a,o,h,u,d,l=t,f=this.n.clone(),p=new c(1),b=new c(0),m=new c(0),w=new c(1),g=0;for(;0!==l.cmpn(0);){const t=f.div(l);u=f.sub(t.mul(l)),d=m.sub(t.mul(p));const a=w.sub(t.mul(b));if("object"!=typeof n&&u.cmp(e)<0)r=h.neg(),i=p,n=u.neg(),s=d;else if("object"==typeof n&&2==++g)break;h=u,f=l,l=u,m=p,p=d,w=b,b=a}a=u.neg(),o=d;const y=n.sqr().add(s.sqr());return a.sqr().add(o.sqr()).cmp(y)>=0&&(a=r,o=i),0!==n.negative&&(n=n.neg(),s=s.neg()),0!==a.negative&&(a=a.neg(),o=o.neg()),[{a:n,b:s},{a,b:o}]}_endoSplit(t){const e=this.endo.basis,r=e[0],i=e[1],n=i.b.mul(t).divRound(this.n),s=r.b.neg().mul(t).divRound(this.n),a=n.mul(r.a),o=s.mul(i.a),c=n.mul(r.b),h=s.mul(i.b);return{k1:t.sub(a).sub(o),k2:c.add(h).neg()}}validate(t){if(t.inf)return!0;const e=t.x,r=t.y,i=this.a.redMul(e),n=e.redSqr().redMul(e).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)}}class Lt{r;s;static fromDER(t,e){const r=(t,e)=>{const r=t[e.place++];if(128&r)throw new Error("Invalid DER entity length");return r};t=Et(t,e);const i=new class{place;constructor(){this.place=0}};if(48!==t[i.place++])throw new Error("Signature DER must start with 0x30");if(r(t,i)+i.place!==t.length)throw new Error("Signature DER invalid");if(2!==t[i.place++])throw new Error("Signature DER invalid");const n=r(t,i);let s=t.slice(i.place,n+i.place);if(i.place+=n,2!==t[i.place++])throw new Error("Signature DER invalid");const a=r(t,i);if(t.length!==a+i.place)throw new Error("Invalid R-length in signature DER");let o=t.slice(i.place,a+i.place);if(0===s[0]){if(!(128&s[1]))throw new Error("Invalid R-value in signature DER");s=s.slice(1)}if(0===o[0]){if(!(128&o[1]))throw new Error("Invalid S-value in signature DER");o=o.slice(1)}return new Lt(new c(s),new c(o))}static fromCompact(t,e){if(65!==(t=Et(t,e)).length)throw new Error("Invalid Compact Signature");const r=t[0];if(r<27||r>=35)throw new Error("Invalid Compact Byte");return new Lt(new c(t.slice(1,33)),new c(t.slice(33,65)))}constructor(t,e){this.r=t,this.s=e}verify(t,e,r){const i=new c(gt(t,r),16);return jt(i,this,e)}toString(t){return this.toDER(t)}toDER(t){const e=(t,e)=>{if(!(e<128))throw new Error("len must be < 0x80");t.push(e)},r=t=>{let e=0;const r=t.length-1;for(;0===t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)};let i=this.r.toArray(),n=this.s.toArray();for(128&i[0]&&(i=[0].concat(i)),128&n[0]&&(n=[0].concat(n)),i=r(i),n=r(n);0===n[0]&&!(128&n[1]);)n=n.slice(1);let s=[2];e(s,i.length),s=s.concat(i),s.push(2),e(s,n.length);const a=s.concat(n);let o=[48];return e(o,a.length),o=o.concat(a),"hex"===t?Nt(o):"base64"===t?_t(o):o}toCompact(t,e,r){if(t<0||t>3)throw new Error("Invalid recovery param");if("boolean"!=typeof e)throw new Error("Invalid compressed param");let i=27+t;e&&(i+=4);let n=[i];return n=n.concat(this.r.toArray("be",32)),n=n.concat(this.s.toArray("be",32)),"hex"===r?Nt(n):"base64"===r?_t(n):n}RecoverPublicKey(t,e){const r=this.r,i=this.s,n=!!(1&t),s=t>>1,a=new Kt,o=a.n,c=a.g,h=s?r.add(o):r,u=Dt.fromX(h,n);if(!u.mul(o).isInfinity())throw new Error("nR is not at infinity");const d=e.neg().umod(o),l=r.invm(o),f=l.mul(i).umod(o),p=l.mul(d).umod(o),b=c.mul(p).add(u.mul(f)),m=new $t(b);return m.validate(),m}CalculateRecoveryFactor(t,e){for(let r=0;r<4;r++){let i;try{i=this.RecoverPublicKey(r,e)}catch(t){continue}if(t.eq(i))return r}throw new Error("Unable to find valid recovery factor")}}class qt{K;V;constructor(t,e){if(t=Et(t,"hex"),e=Et(e,"hex"),t.length<32)throw new Error("Not enough entropy. Minimum is 256 bits");const r=t.concat(e);this.K=new Array(32),this.V=new Array(32);for(let t=0;t<32;t++)this.K[t]=0,this.V[t]=1;this.update(r)}hmac(){return new ft(this.K)}update(t){let e=this.hmac().update(this.V).update([0]);void 0!==t&&(e=e.update(t)),this.K=e.digest(),this.V=this.hmac().update(this.V).digest(),void 0!==t&&(this.K=this.hmac().update(this.V).update([1]).update(t).digest(),this.V=this.hmac().update(this.V).digest())}generate(t){let e=[];for(;e.length<t;)this.V=this.hmac().update(this.V).digest(),e=e.concat(this.V);const r=e.slice(0,t);return this.update(),Nt(r)}}function zt(t,e,r=new Kt){const i=8*t.byteLength()-r.n.bitLength();return i>0&&t.iushrn(i),!e&&t.cmp(r.n)>=0?t.sub(r.n):t}const Wt=(t,e,r=!1,i)=>{if("function"==typeof BigInt){const n=BigInt(0),s=BigInt(1),a=BigInt(2),o=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"),h=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),u={x:BigInt("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),y:BigInt("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")},d=BigInt("0x"+t.toString(16)),l=BigInt("0x"+e.toString(16));if(l<=n||l>=o)throw new Error("Invalid private key");function f(t,e){const r=t.toString(16).padStart(2*e,"0"),i=new Uint8Array(e);for(let t=0;t<e;t++)i[t]=parseInt(r.substr(2*t,2),16);return i}const p=32,b=f(l,p),m=f(d,p),w=new qt(Array.from(b),Array.from(m)),g=o-s;let y=0;function I(t,e,r=!0){const i=t.toString(2).length-e.toString(2).length;return i>0&&(t>>=BigInt(i)),!r&&t>=e?t-e:t}function v(){if("function"==typeof i){const t=i(y).toString(16);return BigInt("0x"+t)}if(c.isBN(i)){const t=i.toString(16);return BigInt("0x"+t)}{const t=w.generate(p);return BigInt("0x"+t)}}function k(t,e){return(t%e+e)%e}function P(t,e){let r=s,i=n,a=k(t,e),o=e;for(;a>s;){const t=o/a,e=i-r*t,n=o-a*t;i=r,r=e,o=a,a=n}return k(r,e)}function O(t,e){if(null===t)return e;if(null===e)return t;if(t.x===e.x&&t.y===k(-e.y,h))return null;let r;if(t.x===e.x&&t.y===e.y){if(t.y===n)return null;const e=k(BigInt(3)*t.x*t.x,h);r=k(e*P(a*t.y,h),h)}else{const i=k(e.y-t.y,h);r=k(i*P(e.x-t.x,h),h)}const i=k(r*r-t.x-e.x,h);return{x:i,y:k(r*(t.x-i)-t.y,h)}}function S(t,e){let r=e,i=null;for(;t>n;)t%a===s&&(i=O(i,r)),r=O(r,r),t>>=s;return i}for(;;){let N=v();if(y+=1,N=I(N,o,!0),N<=s||N>=g){if(i instanceof c)throw new Error("Invalid fixed custom K value (must be more than 1 and less than N-1)");continue}const E=S(N,u);if(null===E){if(i instanceof c)throw new Error("Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)");continue}const A=k(E.x,o);if(A===n){if(i instanceof c)throw new Error("Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)");continue}const x=P(N,o),_=k(A*l,o);let M=k(x*(d+_),o);if(M===n){if(i instanceof c)throw new Error("Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)");continue}r&&M>o/a&&(M=o-M);const T=new c(A.toString(16),16),F=new c(M.toString(16),16);return new Lt(T,F)}}else{const V=new Kt;t=zt(t);const B=V.n.byteLength(),R=e.toArray("be",B),C=t.toArray("be",B),H=new qt(R,C),D=V.n.subn(1);for(let U=0;;U++){let K="function"==typeof i?i(U):c.isBN(i)?i:new c(H.generate(B),16);if(K=zt(K,!0),K.cmpn(1)<=0||K.cmp(D)>=0){if(c.isBN(i))throw new Error("Invalid fixed custom K value (must be more than 1 and less than N-1)");continue}const L=V.g.mul(K);if(L.isInfinity()){if(c.isBN(i))throw new Error("Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)");continue}const q=L.getX().umod(V.n);if(0===q.cmpn(0)){if(c.isBN(i))throw new Error("Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)");continue}let z=K.invm(V.n).mul(q.mul(e).iadd(t));if(z=z.umod(V.n),0!==z.cmpn(0))return r&&z.cmp(V.n.ushrn(1))>0&&(z=V.n.sub(z)),new Lt(q,z);if(c.isBN(i))throw new Error("Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)")}}},jt=(t,e,r)=>{if("function"==typeof BigInt){const i=BigInt(0),n=BigInt(1),s=BigInt(2),a=BigInt(3),o=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),c=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"),h={x:BigInt("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),y:BigInt("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")},u=(t,e)=>(t%e+e)%e,d=(t,e)=>{let[r,s]=[t,e],[a,o]=[BigInt(1),BigInt(0)];for(;s!==i;){const t=r/s;[r,s]=[s,r-t*s],[a,o]=[o,a-t*o]}return r>n?i:u(a,e)},l=(t,e,r)=>u(t*e,r),f=(t,e,r)=>u(t-e,r),p=BigInt(4),b=BigInt(8),m=t=>{const{X:e,Y:r,Z:c}=t;if(r===i)return{X:i,Y:n,Z:i};const h=l(r,r,o),u=l(p,l(e,h,o),o),d=l(a,l(e,e,o),o),m=f(l(d,d,o),l(s,u,o),o);return{X:m,Y:f(l(d,f(u,m,o),o),l(b,l(h,h,o),o),o),Z:l(s,l(r,c,o),o)}},w=(t,e)=>{if(t.Z===i)return e;if(e.Z===i)return t;const r=l(t.Z,t.Z,o),a=l(e.Z,e.Z,o),c=l(t.X,a,o),h=l(e.X,r,o),u=l(t.Y,l(a,e.Z,o),o),d=l(e.Y,l(r,t.Z,o),o),p=f(h,c,o),b=f(d,u,o);if(p===i)return b===i?m(t):{X:i,Y:n,Z:i};const w=l(p,p,o),g=l(p,w,o),y=l(c,w,o),I=f(f(l(b,b,o),g,o),l(s,y,o),o);return{X:I,Y:f(l(b,f(y,I,o),o),l(u,g,o),o),Z:l(p,l(t.Z,e.Z,o),o)}},g=(t,e)=>{const r={X:e.x,Y:e.y,Z:n};let s={X:i,Y:n,Z:i};const a=t.toString(2);for(let t=0;t<a.length;t++)s=m(s),"1"===a[t]&&(s=w(s,r));return s},y=(t,e,r)=>{const{r:n,s}=r,a=t;if(n<=i||n>=c||s<=i||s>=c)return!1;const f=d(s,c);if(f===i)return!1;const p=l(a,f,c),b=l(n,f,c),m=g(p,h),y=g(b,e),I=w(m,y);if(I.Z===i)return!1;const v=d(I.Z,o);if(v===i)return!1;const k=l(v,v,o),P=l(I.X,k,o);return u(P,c)===n};return y(BigInt("0x"+t.toString(16)),{x:BigInt("0x"+r.x.toString(16)),y:BigInt("0x"+r.y.toString(16))},{r:BigInt("0x"+e.r.toString(16)),s:BigInt("0x"+e.s.toString(16))})}{const i=new Kt;t=zt(t);const n=e.r,s=e.s;if(n.cmpn(1)<0||n.cmp(i.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(i.n)>=0)return!1;const a=s.invm(i.n),o=a.mul(t).umod(i.n),c=a.mul(n).umod(i.n),h=i.g.jmulAdd(o,r,c);return!h.isInfinity()&&h.eqXToP(n)}};class $t extends Dt{static fromPrivateKey(t){const e=(new Kt).g.mul(t);return new $t(e.x,e.y)}static fromString(t){const e=Dt.fromString(t);return new $t(e.x,e.y)}static fromDER(t){const e=Dt.fromDER(t);return new $t(e.x,e.y)}constructor(t,e=null,r=!0){if(t instanceof Dt)super(t.getX(),t.getY());else{if(null===e&&r&&"string"==typeof t&&(66===t.length||130===t.length))throw new Error('You are using the "new PublicKey()" constructor with a DER hex string. You need to use "PublicKey.fromString()" instead.');super(t,e,r)}}deriveSharedSecret(t){if(!this.validate())throw new Error("Public key not valid for ECDH secret derivation");return this.mul(t)}verify(t,e,r){const i=new c(gt(t,r),16);return jt(i,e,this)}toDER(t){return"hex"===t?this.encode(!0,t):this.encode(!0)}toHash(t){const e=vt(this.encode(!0));return"hex"===t?Nt(e):e}toAddress(t=[0]){if("string"==typeof t)if("testnet"===t||"test"===t)t=[111];else{if("mainnet"!==t&&"main"!==t)throw new Error(`Invalid prefix ${t}`);t=[0]}return Vt(this.toHash(),t)}deriveChild(t,e){const r=this.deriveSharedSecret(t),i=Et(e,"utf8"),n=kt(r.encode(!0),i),s=(new Kt).g.mul(new c(n)),a=this.add(s);return new $t(a.x,a.y)}static fromMsgHashAndCompactSignature(t,e,r){const i=Et(e,r);if(65!==i.length)throw new Error("Invalid Compact Signature");const n=i[0];if(n<27||n>=35)throw new Error("Invalid Compact Byte");let s=i[0]-27,a=!1;return s>3&&(!0,s-=4),new Lt(new c(i.slice(1,33)),new c(i.slice(33,65))).RecoverPublicKey(s,t)}}class Xt{_rand;constructor(){const t=()=>{throw new Error("No secure random number generator is available in this environment.")};if("object"==typeof self)self.crypto&&self.crypto.getRandomValues?this._rand=t=>{const e=new Uint8Array(t);return self.crypto.getRandomValues(e),[...e]}:this._rand=t;else try{const t=require("crypto");"function"==typeof t.randomBytes&&(this._rand=e=>[...t.randomBytes(e)])}catch(e){this._rand=t}}generate(t){return this._rand(t)}}let Gt=null;const Yt=t=>(null==Gt&&(Gt=new Xt),Gt.generate(t));class Zt{x;y;constructor(t,e){const r=(new Kt).p;this.x=t.umod(r),this.y=e.umod(r)}toString(){return Ft(this.x.toArray())+"."+Ft(this.y.toArray())}static fromString(t){const[e,r]=t.split(".");return new Zt(new c(Tt(e)),new c(Tt(r)))}}class Qt{points;threshold;constructor(t,e){this.points=t,this.threshold=e||t.length}static fromPrivateKey(t,e){const r=(new Kt).p,i=[new Zt(new c(0),new c(t.toArray()))];for(let t=1;t<e;t++){const t=new c(Yt(32)).umod(r),e=new c(Yt(32)).umod(r);i.push(new Zt(t,e))}return new Qt(i)}valueAt(t){const e=(new Kt).p;let r=new c(0);for(let i=0;i<this.threshold;i++){let n=this.points[i].y;for(let r=0;r<this.threshold;r++)if(i!==r){const s=this.points[r].x,a=this.points[i].x,o=t.sub(s).umod(e),c=a.sub(s).umod(e).invm(e),h=o.mul(c).umod(e);n=n.mul(h).umod(e)}r=r.add(n).umod(e)}return r}}class Jt{points;threshold;integrity;constructor(t,e,r){this.points=t,this.threshold=e,this.integrity=r}static fromBackupFormat(t){let e=0,r="";const i=t.map(((t,i)=>{const n=t.split(".");if(4!==n.length)throw Error("Invalid share format in share "+i+'. Expected format: "x.y.t.i" - received '+t);const[s,a,o,c]=n;if(!o)throw Error("Threshold not found in share "+i);if(!c)throw Error("Integrity not found in share "+i);const h=parseInt(o);if(0!==i&&e!==h)throw Error("Threshold mismatch in share "+i);if(0!==i&&r!==c)throw Error("Integrity mismatch in share "+i);return e=h,r=c,Zt.fromString([s,a].join("."))}));return new Jt(i,e,r)}toBackupFormat(){return this.points.map((t=>t.toString()+"."+this.threshold+"."+this.integrity))}}class te extends c{static fromRandom(){return new te(Yt(32))}static fromString(t,e="hex"){return new te(super.fromString(t,e).toArray())}static fromHex(t){return new te(super.fromHex(t,"big"))}static fromWif(t,e=1){const r=Bt(t,null,e);if(33!==r.data.length)throw new Error("Invalid WIF length");if(1!==r.data[32])throw new Error("Invalid WIF padding");return new te(r.data.slice(0,32))}constructor(t=0,e=10,r="be",i="apply"){if(t instanceof c?(super(),t.copy(this)):super(t,e,r),"nocheck"!==i){const t=this.checkInField();if(!t.inField){if("error"===i)throw new Error("Input is out of field");c.move(this,t.modN)}}}checkInField(){const t=new Kt,e=this.mod(t.n);return{inField:0===this.cmp(e),modN:e}}isValid(){return this.checkInField().inField}sign(t,e,r=!0,i){const n=new c(gt(t,e),16);return Wt(n,this,r,i)}verify(t,e,r){const i=new c(gt(t,r),16);return jt(i,e,this.toPublicKey())}toPublicKey(){const t=(new Kt).g.mul(this);return new $t(t.x,t.y)}toWif(t=[128]){if(!this.isValid())throw new Error("Value is out of field");return Vt([...this.toArray("be",32),1],t)}toAddress(t=[0]){return this.toPublicKey().toAddress(t)}toHex(){return super.toHex(32)}toString(t="hex",e=64){return super.toString(t,e)}deriveSharedSecret(t){if(!t.validate())throw new Error("Public key not valid for ECDH secret derivation");return t.mul(this)}deriveChild(t,e){const r=this.deriveSharedSecret(t),i=Et(e,"utf8"),n=kt(r.encode(!0),i),s=new Kt;return new te(this.add(new c(n)).mod(s.n).toArray())}toKeyShares(t,e){if("number"!=typeof t||"number"!=typeof e)throw new Error("threshold and totalShares must be numbers");if(t<2)throw new Error("threshold must be at least 2");if(e<2)throw new Error("totalShares must be at least 2");if(t>e)throw new Error("threshold should be less than or equal to totalShares");const r=Qt.fromPrivateKey(this,t),i=[];for(let t=0;t<e;t++){const t=new c(te.fromRandom().toArray()),e=r.valueAt(t);i.push(new Zt(t,e))}const n=this.toPublicKey().toHash("hex").slice(0,8);return new Jt(i,t,n)}toBackupShares(t,e){return this.toKeyShares(t,e).toBackupFormat()}static fromBackupShares(t){return te.fromKeyShares(Jt.fromBackupFormat(t))}static fromKeyShares(t){const{points:e,threshold:r,integrity:i}=t;if(r<2)throw new Error("threshold must be at least 2");if(e.length<r)throw new Error(`At least ${r} shares are required to reconstruct the private key`);for(let t=0;t<r;t++)for(let i=t+1;i<r;i++)if(e[t].x.eq(e[i].x))throw new Error("Duplicate share detected, each must be unique.");const n=new Qt(e,r),s=new te(n.valueAt(new c(0)).toArray());if(s.toPublicKey().toHash("hex").slice(0,8)!==i)throw new Error("Integrity hash mismatch");return s}}const ee=[[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118],[202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192],[183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21],[4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117],[9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132],[83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207],[208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168],[81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210],[205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115],[96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219],[224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121],[231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8],[186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138],[112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158],[225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223],[140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]],re=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];function ie(t,e,r){let i,n;for(i=0;i<4;i++)for(n=0;n<4;n++)t[i][n]=t[i][n]^e[r+n][i]}function ne(t){let e,r;for(e=0;e<4;e++)for(r=0;r<4;r++)t[e][r]=ee[(240&t[e][r])>>4][15&t[e][r]]}function se(t){let e;for(e=0;e<4;e++)t[e]=ee[(240&t[e])>>4][15&t[e]]}function ae(t){const e=t[0];t[0]=t[1],t[1]=t[2],t[2]=t[3],t[3]=e}function oe(t){let e,r,i,n,s;for(e=1;e<4;e++)for(r=0;r<(e-1)%2+1;r++){for(s=t[e][r],i=r;n=i+e,n>=4&&(n-=4),n!==r;)t[e][i]=t[e][n],i=n;t[e][i]=s}}function ce(t,e){let r,i=0;for(r=0;r<8;r++)1&e&&(i^=t),128&t?(t<<=1,t^=283):t<<=1,e>>=1;return i}function he(t){let e,r;const i=[[],[],[],[]];for(e=0;e<4;e++)i[0][e]=ce(2,t[0][e])^ce(3,t[1][e])^t[2][e]^t[3][e],i[1][e]=t[0][e]^ce(2,t[1][e])^ce(3,t[2][e])^t[3][e],i[2][e]=t[0][e]^t[1][e]^ce(2,t[2][e])^ce(3,t[3][e]),i[3][e]=ce(3,t[0][e])^t[1][e]^t[2][e]^ce(2,t[3][e]);for(e=0;e<4;e++)for(r=0;r<4;r++)t[e][r]=i[e][r]}function ue(t,e){let r,i,n,s;const a=[[],[],[],[]],o=[],c=Array.from(e);if(c.length<=16){for(;c.length<16;)c.unshift(0);s=11}else if(c.length<=24){for(;c.length<24;)c.unshift(0);s=13}else{if(!(e.length<=32))throw new Error("Illegal key length: "+String(e.length));for(;c.length<32;)c.unshift(0);s=15}const h=function(t,e){let r,i;const n=parseInt(String(e.length/4)),s=[];for(r=0;r<e.length;r++)r%4==0&&s.push([]),s[parseInt(String(r/4))].push(e[r]);for(r=n;r<4*t;r++){s[r]=[];const t=s[r-1].slice();if(r%n==0)for(ae(t),se(t),i=0;i<4;i++)t[i]=t[i]^re[parseInt(String(r/n))][i];else n>6&&r%n==4&&se(t);for(i=0;i<4;i++)s[r][i]=s[r-n][i]^t[i]}return s}(s,c);for(r=0;r<15;r++)a[parseInt(String(r/4))].push(t[4*r%15]);for(a[3].push(t[15]),ie(a,h,0),n=1;n<s;n++)ne(a),oe(a),n+1<s&&he(a),ie(a,h,4*n);for(r=0;r<4;r++)for(i=0;i<4;i++)o.push(a[i][r]);return o}const de=function(t,e,r){return t[e]&1<<r?1:0},le=function(t){return[(4278190080&t)>>>24,(16711680&t)>>16,(65280&t)>>8,255&t]},fe=function(t){let e;const r=[];for(e=0;e<t;e++)r.push(0);return r},pe=[225].concat(fe(15)),be=function(t,e){let r;const i=[];for(r=0;r<t.length;r++)i[r]=t[r]^e[r];return i},me=function(t){let e,r=0,i=0;for(e=0;e<t.length;e++)i=r,r=1&t[e],t[e]=t[e]>>1,0!==i&&(t[e]=128|t[e]);return t},we=function(t,e){let r,i,n=e.slice(),s=fe(16);for(r=0;r<16;r++)for(i=7;-1!==i;i--)0!==de(t,r,i)&&(s=be(s,n)),n=0!==de(n,15,0)?be(me(n),pe):me(n);return s},ge=function(t){let e;const r=t.slice();for(e=15;11!==e&&(r[e]=r[e]+1,256===r[e]);e--)r[e]=0;return r};function ye(t,e){let r,i=fe(16);for(r=0;r<t.length;r+=16)i=we(be(i,t.slice(r,Math.min(r+16,t.length))),e);return i}function Ie(t,e,r){let i,n,s,a=e;const o=[];if(0===t.length)return t;const c=Math.ceil(t.length/16);for(i=0;i<c;i++){for(s=be(t.slice(16*i,Math.min(16*(i+1),t.length)),ue(a,r)),n=0;n<s.length;n++)o.push(s[n]);i+1<c&&(a=ge(a))}return o}class ve extends c{static fromRandom(){return new ve(Yt(32))}encrypt(t,e){const r=Yt(32);t=Et(t,e);const{result:i,authenticationTag:n}=function(t,e,r,i){let n,s;const a=ue(fe(16),i);n=[...r],12===r.length?n=n.concat(fe(3)).concat([1]):(r.length%16!=0&&(n=n.concat(fe(16-r.length%16))),n=n.concat(fe(8)),n=ye(n.concat(fe(4)).concat(le(8*r.length)),a));const o=Ie(t,ge(n),i);return s=e.slice(),0===e.length?s=s.concat(fe(16)):e.length%16!=0&&(s=s.concat(fe(16-e.length%16))),s=s.concat(o),0===o.length?s=s.concat(fe(16)):o.length%16!=0&&(s=s.concat(fe(16-o.length%16))),s=s.concat(fe(4)).concat(le(8*e.length)).concat(fe(4)).concat(le(8*o.length)),{result:o,authenticationTag:Ie(ye(s,a),n,i)}}(t,[],r,this.toArray("be",32));return xt([...r,...i,...n],e)}decrypt(t,e){const r=(t=Et(t,e)).slice(0,32),i=t.slice(32),n=i.slice(-16),s=function(t,e,r,i,n){let s,a;const o=ue(fe(16),n);s=[...r],12===r.length?s=s.concat(fe(3)).concat([1]):(r.length%16!=0&&(s=s.concat(fe(16-r.length%16))),s=s.concat(fe(8)),s=ye(s.concat(fe(4)).concat(le(8*r.length)),o));const c=Ie(t,ge(s),n);return a=e.slice(),0===e.length?a=a.concat(fe(16)):e.length%16!=0&&(a=a.concat(fe(16-e.length%16))),a=a.concat(t),0===t.length?a=a.concat(fe(16)):t.length%16!=0&&(a=a.concat(fe(16-t.length%16))),a=a.concat(fe(4)).concat(le(8*e.length)).concat(fe(4)).concat(le(8*t.length)),Ie(ye(a,o),s,n).join()!==i.join()?null:c}(i.slice(0,-16),[],r,n,this.toArray());if(null===s)throw new Error("Decryption failed!");return xt(s,e)}}class ke extends Lt{static SIGHASH_ALL=1;static SIGHASH_NONE=2;static SIGHASH_SINGLE=3;static SIGHASH_FORKID=64;static SIGHASH_ANYONECANPAY=128;scope;static format(t){const e={sourceTXID:t.sourceTXID,sourceOutputIndex:t.sourceOutputIndex,sequence:t.inputSequence},r=[...t.otherInputs];function i(e){const r=new Rt;if(void 0===e){let e;for(const i of t.outputs)r.writeUInt64LE(i.satoshis),e=i.lockingScript.toBinary(),r.writeVarIntNum(e.length),r.write(e)}else{const i=t.outputs[e];r.writeUInt64LE(i.satoshis);const n=i.lockingScript.toBinary();r.writeVarIntNum(n.length),r.write(n)}const i=r.toArray();return It(i)}r.splice(t.inputIndex,0,e);let n=new Array(32).fill(0),s=new Array(32).fill(0),a=new Array(32).fill(0);t.scope&ke.SIGHASH_ANYONECANPAY||(n=(()=>{const t=new Rt;for(const e of r)void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.writeReverse(Et(e.sourceTXID,"hex")),t.writeUInt32LE(e.sourceOutputIndex);const e=t.toArray();return It(e)})()),t.scope&ke.SIGHASH_ANYONECANPAY||(31&t.scope)===ke.SIGHASH_SINGLE||(31&t.scope)===ke.SIGHASH_NONE||(s=(()=>{const t=new Rt;for(const e of r)t.writeUInt32LE(e.sequence);const e=t.toArray();return It(e)})()),(31&t.scope)!==ke.SIGHASH_SINGLE&&(31&t.scope)!==ke.SIGHASH_NONE?a=i():(31&t.scope)===ke.SIGHASH_SINGLE&&t.inputIndex<t.outputs.length&&(a=i(t.inputIndex));const o=new Rt;o.writeInt32LE(t.transactionVersion),o.write(n),o.write(s),o.writeReverse(Et(t.sourceTXID,"hex")),o.writeUInt32LE(t.sourceOutputIndex);const c=t.subscript.toBinary();o.writeVarIntNum(c.length),o.write(c),o.writeUInt64LE(t.sourceSatoshis);const h=e.sequence;return o.writeUInt32LE(h),o.write(a),o.writeUInt32LE(t.lockTime),o.writeUInt32LE(t.scope>>>0),o.toArray()}static fromChecksigFormat(t){if(0===t.length){const t=new c(1),e=new c(1);return new ke(t,e,1)}const e=t[t.length-1],r=t.slice(0,t.length-1),i=Lt.fromDER(r);return new ke(i.r,i.s,e)}constructor(t,e,r){super(t,e),this.scope=r}hasLowS(){return!this.s.ltn(1)&&!this.s.gt(new c("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex"))}toChecksigFormat(){return[...this.toDER(),this.scope]}}class Pe{curve;constructor(){this.curve=new Kt}generateProof(t,e,r,i){const n=te.fromRandom(),s=n.toPublicKey(),a=r.mul(n),o=this.computeChallenge(e,r,i,a,s);return{R:s,SPrime:a,z:n.add(o.mul(t)).umod(this.curve.n)}}verifyProof(t,e,r,i){const{R:n,SPrime:s,z:a}=i,o=this.computeChallenge(t,e,r,s,n),c=this.curve.g.mul(a),h=n.add(t.mul(o));if(!c.eq(h))return!1;const u=e.mul(a),d=s.add(r.mul(o));return!!u.eq(d)}computeChallenge(t,e,r,i,n){const s=[...t.encode(!0),...e.encode(!0),...r.encode(!0),...i.encode(!0),...n.encode(!0)],a=gt(s);return new c(a).umod(this.curve.n)}}const Oe={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_SPLIT:127,OP_LEFT:128,OP_NUM2BIN:128,OP_RIGHT:129,OP_BIN2NUM:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_NOP11:186,OP_NOP12:187,OP_NOP13:188,OP_NOP14:189,OP_NOP15:190,OP_NOP16:191,OP_NOP17:192,OP_NOP18:193,OP_NOP19:194,OP_NOP20:195,OP_NOP21:196,OP_NOP22:197,OP_NOP23:198,OP_NOP24:199,OP_NOP25:200,OP_NOP26:201,OP_NOP27:202,OP_NOP28:203,OP_NOP29:204,OP_NOP30:205,OP_NOP31:206,OP_NOP32:207,OP_NOP33:208,OP_NOP34:209,OP_NOP35:210,OP_NOP36:211,OP_NOP37:212,OP_NOP38:213,OP_NOP39:214,OP_NOP40:215,OP_NOP41:216,OP_NOP42:217,OP_NOP43:218,OP_NOP44:219,OP_NOP45:220,OP_NOP46:221,OP_NOP47:222,OP_NOP48:223,OP_NOP49:224,OP_NOP50:225,OP_NOP51:226,OP_NOP52:227,OP_NOP53:228,OP_NOP54:229,OP_NOP55:230,OP_NOP56:231,OP_NOP57:232,OP_NOP58:233,OP_NOP59:234,OP_NOP60:235,OP_NOP61:236,OP_NOP62:237,OP_NOP63:238,OP_NOP64:239,OP_NOP65:240,OP_NOP66:241,OP_NOP67:242,OP_NOP68:243,OP_NOP69:244,OP_NOP70:245,OP_NOP71:246,OP_NOP72:247,OP_NOP73:248,OP_NOP77:252,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255};for(const t in Oe)Oe[Oe[t]]=t;const Se=Oe;class Ne{chunks;static fromASM(t){const e=[],r=t.split(" ");let i=0;for(;i<r.length;){const t=r[i];let n,s;if(t.startsWith("OP_")&&void 0!==Se[t]&&(n=t,s=Se[t]),"0"===t)s=0,e.push({op:s}),i+=1;else if("-1"===t)s=Se.OP_1NEGATE,e.push({op:s}),i+=1;else if(void 0===n){let t=r[i];t.length%2!=0&&(t="0"+t);const n=Et(t,"hex");if(xt(n,"hex")!==t)throw new Error("invalid hex string in script");const a=n.length;a>=0&&a<Se.OP_PUSHDATA1?s=a:a<Math.pow(2,8)?s=Se.OP_PUSHDATA1:a<Math.pow(2,16)?s=Se.OP_PUSHDATA2:a<Math.pow(2,32)&&(s=Se.OP_PUSHDATA4),e.push({data:n,op:s}),i+=1}else s===Se.OP_PUSHDATA1||s===Se.OP_PUSHDATA2||s===Se.OP_PUSHDATA4?(e.push({data:Et(r[i+2],"hex"),op:s}),i+=3):(e.push({op:s}),i+=1)}return new Ne(e)}static fromHex(t){if(0===t.length)return Ne.fromBinary([]);if(t.length%2!=0)throw new Error("There is an uneven number of characters in the string which suggests it is not hex encoded.");if(!/^[0-9a-fA-F]+$/.test(t))throw new Error("Some elements in this string are not hex encoded.");return Ne.fromBinary(Et(t,"hex"))}static fromBinary(t){t=[...t];const e=[],r=new Ct(t);for(;!r.eof();){const t=r.readUInt8();let i=0,n=[];if(t>0&&t<Se.OP_PUSHDATA1)i=t,e.push({data:r.read(i),op:t});else if(t===Se.OP_PUSHDATA1){try{i=r.readUInt8(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else if(t===Se.OP_PUSHDATA2){try{i=r.readUInt16LE(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else if(t===Se.OP_PUSHDATA4){try{i=r.readUInt32LE(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else e.push({op:t})}return new Ne(e)}constructor(t=[]){this.chunks=t}toASM(){let t="";for(let e=0;e<this.chunks.length;e++){const r=this.chunks[e];t+=this._chunkToString(r)}return t.slice(1)}toHex(){return xt(this.toBinary(),"hex")}toBinary(){const t=new Rt;for(let e=0;e<this.chunks.length;e++){const r=this.chunks[e],i=r.op;t.writeUInt8(i),r.data&&(i<Se.OP_PUSHDATA1?t.write(r.data):i===Se.OP_PUSHDATA1?(t.writeUInt8(r.data.length),t.write(r.data)):i===Se.OP_PUSHDATA2?(t.writeUInt16LE(r.data.length),t.write(r.data)):i===Se.OP_PUSHDATA4&&(t.writeUInt32LE(r.data.length),t.write(r.data)))}return t.toArray()}writeScript(t){return this.chunks=this.chunks.concat(t.chunks),this}writeOpCode(t){return this.chunks.push({op:t}),this}setChunkOpCode(t,e){return this.chunks[t]={op:e},this}writeBn(t){if(t.cmpn(0)===Se.OP_0)this.chunks.push({op:Se.OP_0});else if(0===t.cmpn(-1))this.chunks.push({op:Se.OP_1NEGATE});else if(t.cmpn(1)>=0&&t.cmpn(16)<=0)this.chunks.push({op:t.toNumber()+Se.OP_1-1});else{const e=t.toSm("little");this.writeBin(e)}return this}writeBin(t){let e;if(t.length>0&&t.length<Se.OP_PUSHDATA1)e=t.length;else if(0===t.length)e=Se.OP_0;else if(t.length<Math.pow(2,8))e=Se.OP_PUSHDATA1;else if(t.length<Math.pow(2,16))e=Se.OP_PUSHDATA2;else{if(!(t.length<Math.pow(2,32)))throw new Error("You can't push that much data");e=Se.OP_PUSHDATA4}return this.chunks.push({data:t,op:e}),this}writeNumber(t){return this.writeBn(new c(t)),this}removeCodeseparators(){const t=[];for(let e=0;e<this.chunks.length;e++)this.chunks[e].op!==Se.OP_CODESEPARATOR&&t.push(this.chunks[e]);return this.chunks=t,this}findAndDelete(t){const e=t.toHex();for(let t=0;t<this.chunks.length;t++)e===new Ne([this.chunks[t]]).toHex()&&this.chunks.splice(t,1);return this}isPushOnly(){for(let t=0;t<this.chunks.length;t++)if(this.chunks[t].op>Se.OP_16)return!1;return!0}isLockingScript(){throw new Error("Not implemented")}isUnlockingScript(){throw new Error("Not implemented")}_chunkToString(t){const e=t.op;let r="";return r=void 0===t.data?`${r} ${Se[e]}`:`${r} ${Nt(t.data)}`,r}}class Ee extends Ne{isLockingScript(){return!0}isUnlockingScript(){return!1}}class Ae extends Ne{isLockingScript(){return!1}isUnlockingScript(){return!0}}const xe=1073741824,_e=Math.pow(2,31)-1,Me=!0;class Te{sourceTXID;sourceOutputIndex;sourceSatoshis;lockingScript;transactionVersion;otherInputs;outputs;inputIndex;unlockingScript;inputSequence;lockTime;context;programCounter;lastCodeSeparator;stack;altStack;ifStack;constructor(t){this.sourceTXID=t.sourceTXID,this.sourceOutputIndex=t.sourceOutputIndex,this.sourceSatoshis=t.sourceSatoshis,this.lockingScript=t.lockingScript,this.transactionVersion=t.transactionVersion,this.otherInputs=t.otherInputs,this.outputs=t.outputs,this.inputIndex=t.inputIndex,this.unlockingScript=t.unlockingScript,this.inputSequence=t.inputSequence,this.lockTime=t.lockTime,this.reset()}reset(){this.context="UnlockingScript",this.programCounter=0,this.lastCodeSeparator=null,this.stack=[],this.altStack=[],this.ifStack=[]}step(){let t;"UnlockingScript"===this.context&&this.programCounter>=this.unlockingScript.chunks.length&&(this.context="LockingScript",this.programCounter=0),t="UnlockingScript"===this.context?this.unlockingScript.chunks[this.programCounter]:this.lockingScript.chunks[this.programCounter];const e=t=>{if(0===t.length)return!0;(t=>{if(t.length<9)return!1;if(t.length>73)return!1;if(48!==t[0])return!1;if(t[1]!==t.length-3)return!1;const e=t[3];if(5+e>=t.length)return!1;const r=t[5+e];if(e+r+7!==t.length)return!1;const i=t.slice(4);if(2!==t[2])return!1;if(0===e)return!1;if(128&i[0])return!1;if(e>1&&0===i[0]&&!(128&i[1]))return!1;const n=t.slice(6+e);return!(2!==t[6+e-2]||0===r||128&n[0]||r>1&&0===n[0]&&!(128&n[1]))})(t)||this.scriptEvaluationError("The signature format is invalid.");const e=ke.fromChecksigFormat(t);return e.hasLowS()||this.scriptEvaluationError("The signature must have a low S value."),!!(e.scope&ke.SIGHASH_FORKID)||(this.scriptEvaluationError("The signature must use SIGHASH_FORKID."),!1)},r=t=>(t.length<33&&this.scriptEvaluationError("The public key is too short, it must be at least 33 bytes."),4===t[0]?65!==t.length&&this.scriptEvaluationError("The non-compressed public key must be 65 bytes."):2===t[0]||3===t[0]?33!==t.length&&this.scriptEvaluationError("The compressed public key must be 33 bytes."):this.scriptEvaluationError("The public key is in an unknown format."),!0),i=(t,e,r)=>{const i=ke.format({sourceTXID:this.sourceTXID,sourceOutputIndex:this.sourceOutputIndex,sourceSatoshis:this.sourceSatoshis,transactionVersion:this.transactionVersion,otherInputs:this.otherInputs,outputs:this.outputs,inputIndex:this.inputIndex,subscript:r,inputSequence:this.inputSequence,lockTime:this.lockTime,scope:t.scope}),n=new c(It(i));return jt(n,t,e)},n=!this.ifStack.includes(!1);let s,a,o,h,u,d,l,f,p,b,m,w,g,y,I,v,k,P,O,S,N,E,A,x,_,M,T,F,V,B,R,C,H;const D=t.op;var U;if(void 0===D&&this.scriptEvaluationError(`An opcode is missing in this chunk of the ${this.context}!`),Array.isArray(t.data)&&t.data.length>xe&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),n&&((U=D)===Se.OP_2MUL||U===Se.OP_2DIV||U===Se.OP_VERIF||U===Se.OP_VERNOTIF||U===Se.OP_VER)&&this.scriptEvaluationError("This opcode is currently disabled."),n&&D>=0&&D<=Se.OP_PUSHDATA4)(t=>{const e=t.data,r=t.op;return!(Array.isArray(e)&&(0===e.length?r!==Se.OP_0:1===e.length&&e[0]>=1&&e[0]<=16?r!==Se.OP_1+(e[0]-1):1===e.length&&129===e[0]?r!==Se.OP_1NEGATE:e.length<=75?r!==e.length:e.length<=255?r!==Se.OP_PUSHDATA1:e.length<=65535&&r!==Se.OP_PUSHDATA2))})(t)||this.scriptEvaluationError("This data is not minimally-encoded."),Array.isArray(t.data)?this.stack.push(t.data):this.stack.push([]);else if(n||Se.OP_IF<=D&&D<=Se.OP_ENDIF)switch(D){case Se.OP_1NEGATE:case Se.OP_1:case Se.OP_2:case Se.OP_3:case Se.OP_4:case Se.OP_5:case Se.OP_6:case Se.OP_7:case Se.OP_8:case Se.OP_9:case Se.OP_10:case Se.OP_11:case Se.OP_12:case Se.OP_13:case Se.OP_14:case Se.OP_15:case Se.OP_16:d=D-(Se.OP_1-1),s=new c(d).toScriptNum(),this.stack.push(s);break;case Se.OP_NOP:case Se.OP_NOP2:case Se.OP_NOP3:case Se.OP_NOP1:case Se.OP_NOP4:case Se.OP_NOP5:case Se.OP_NOP6:case Se.OP_NOP7:case Se.OP_NOP8:case Se.OP_NOP9:case Se.OP_NOP10:case Se.OP_NOP11:case Se.OP_NOP12:case Se.OP_NOP13:case Se.OP_NOP14:case Se.OP_NOP15:case Se.OP_NOP16:case Se.OP_NOP17:case Se.OP_NOP18:case Se.OP_NOP19:case Se.OP_NOP20:case Se.OP_NOP21:case Se.OP_NOP22:case Se.OP_NOP23:case Se.OP_NOP24:case Se.OP_NOP25:case Se.OP_NOP26:case Se.OP_NOP27:case Se.OP_NOP28:case Se.OP_NOP29:case Se.OP_NOP30:case Se.OP_NOP31:case Se.OP_NOP32:case Se.OP_NOP33:case Se.OP_NOP34:case Se.OP_NOP35:case Se.OP_NOP36:case Se.OP_NOP37:case Se.OP_NOP38:case Se.OP_NOP39:case Se.OP_NOP40:case Se.OP_NOP41:case Se.OP_NOP42:case Se.OP_NOP43:case Se.OP_NOP44:case Se.OP_NOP45:case Se.OP_NOP46:case Se.OP_NOP47:case Se.OP_NOP48:case Se.OP_NOP49:case Se.OP_NOP50:case Se.OP_NOP51:case Se.OP_NOP52:case Se.OP_NOP53:case Se.OP_NOP54:case Se.OP_NOP55:case Se.OP_NOP56:case Se.OP_NOP57:case Se.OP_NOP58:case Se.OP_NOP59:case Se.OP_NOP60:case Se.OP_NOP61:case Se.OP_NOP62:case Se.OP_NOP63:case Se.OP_NOP64:case Se.OP_NOP65:case Se.OP_NOP66:case Se.OP_NOP67:case Se.OP_NOP68:case Se.OP_NOP69:case Se.OP_NOP70:case Se.OP_NOP71:case Se.OP_NOP72:case Se.OP_NOP73:case Se.OP_NOP77:break;case Se.OP_IF:case Se.OP_NOTIF:R=!1,n&&(this.stack.length<1&&this.scriptEvaluationError("OP_IF and OP_NOTIF require at least one item on the stack when they are used!"),s=this.stacktop(-1),R=this.castToBool(s),D===Se.OP_NOTIF&&(R=!R),this.stack.pop()),this.ifStack.push(R);break;case Se.OP_ELSE:0===this.ifStack.length&&this.scriptEvaluationError("OP_ELSE requires a preceeding OP_IF."),this.ifStack[this.ifStack.length-1]=!this.ifStack[this.ifStack.length-1];break;case Se.OP_ENDIF:0===this.ifStack.length&&this.scriptEvaluationError("OP_ENDIF requires a preceeding OP_IF."),this.ifStack.pop();break;case Se.OP_VERIFY:this.stack.length<1&&this.scriptEvaluationError("OP_VERIFY requires at least one item to be on the stack."),s=this.stacktop(-1),R=this.castToBool(s),R?this.stack.pop():this.scriptEvaluationError("OP_VERIFY requires the top stack value to be truthy.");break;case Se.OP_RETURN:"UnlockingScript"===this.context?this.programCounter=this.unlockingScript.chunks.length:this.programCounter=this.lockingScript.chunks.length,this.ifStack=[];break;case Se.OP_TOALTSTACK:this.stack.length<1&&this.scriptEvaluationError("OP_TOALTSTACK requires at oeast one item to be on the stack."),this.altStack.push(this.stack.pop());break;case Se.OP_FROMALTSTACK:this.altStack.length<1&&this.scriptEvaluationError("OP_FROMALTSTACK requires at least one item to be on the stack."),this.stack.push(this.altStack.pop());break;case Se.OP_2DROP:this.stack.length<2&&this.scriptEvaluationError("OP_2DROP requires at least two items to be on the stack."),this.stack.pop(),this.stack.pop();break;case Se.OP_2DUP:this.stack.length<2&&this.scriptEvaluationError("OP_2DUP requires at least two items to be on the stack."),a=this.stacktop(-2),o=this.stacktop(-1),this.stack.push([...a]),this.stack.push([...o]);break;case Se.OP_3DUP:this.stack.length<3&&this.scriptEvaluationError("OP_3DUP requires at least three items to be on the stack."),a=this.stacktop(-3),o=this.stacktop(-2),h=this.stacktop(-1),this.stack.push([...a]),this.stack.push([...o]),this.stack.push([...h]);break;case Se.OP_2OVER:this.stack.length<4&&this.scriptEvaluationError("OP_2OVER requires at least four items to be on the stack."),a=this.stacktop(-4),o=this.stacktop(-3),this.stack.push([...a]),this.stack.push([...o]);break;case Se.OP_2ROT:this.stack.length<6&&this.scriptEvaluationError("OP_2ROT requires at least six items to be on the stack."),u=this.stack.splice(this.stack.length-6,2),this.stack.push(u[0]),this.stack.push(u[1]);break;case Se.OP_2SWAP:this.stack.length<4&&this.scriptEvaluationError("OP_2SWAP requires at least four items to be on the stack."),u=this.stack.splice(this.stack.length-4,2),this.stack.push(u[0]),this.stack.push(u[1]);break;case Se.OP_IFDUP:this.stack.length<1&&this.scriptEvaluationError("OP_IFDUP requires at least one item to be on the stack."),s=this.stacktop(-1),R=this.castToBool(s),R&&this.stack.push([...s]);break;case Se.OP_DEPTH:s=new c(this.stack.length).toScriptNum(),this.stack.push(s);break;case Se.OP_DROP:this.stack.length<1&&this.scriptEvaluationError("OP_DROP requires at least one item to be on the stack."),this.stack.pop();break;case Se.OP_DUP:this.stack.length<1&&this.scriptEvaluationError("OP_DUP requires at least one item to be on the stack."),this.stack.push([...this.stacktop(-1)]);break;case Se.OP_NIP:this.stack.length<2&&this.scriptEvaluationError("OP_NIP requires at least two items to be on the stack."),this.stack.splice(this.stack.length-2,1);break;case Se.OP_OVER:this.stack.length<2&&this.scriptEvaluationError("OP_OVER requires at least two items to be on the stack."),this.stack.push([...this.stacktop(-2)]);break;case Se.OP_PICK:case Se.OP_ROLL:this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least two items to be on the stack.`),s=this.stacktop(-1),y=c.fromScriptNum(s,Me),d=y.toNumber(),this.stack.pop(),(d<0||d>=this.stack.length)&&this.scriptEvaluationError(`${Se[D]} requires the top stack element to be 0 or a positive number less than the current size of the stack.`),s=this.stacktop(-d-1),D===Se.OP_ROLL&&this.stack.splice(this.stack.length-d-1,1),this.stack.push([...s]);break;case Se.OP_ROT:this.stack.length<3&&this.scriptEvaluationError("OP_ROT requires at least three items to be on the stack."),m=this.stacktop(-3),w=this.stacktop(-2),g=this.stacktop(-1),this.stack[this.stack.length-3]=w,this.stack[this.stack.length-2]=g,this.stack[this.stack.length-1]=m;break;case Se.OP_SWAP:this.stack.length<2&&this.scriptEvaluationError("OP_SWAP requires at least two items to be on the stack."),m=this.stacktop(-2),w=this.stacktop(-1),this.stack[this.stack.length-2]=w,this.stack[this.stack.length-1]=m;break;case Se.OP_TUCK:this.stack.length<2&&this.scriptEvaluationError("OP_TUCK requires at least two items to be on the stack."),this.stack.splice(this.stack.length-2,0,[...this.stacktop(-1)]);break;case Se.OP_SIZE:this.stack.length<1&&this.scriptEvaluationError("OP_SIZE requires at least one item to be on the stack."),y=new c(this.stacktop(-1).length),this.stack.push(y.toScriptNum());break;case Se.OP_AND:case Se.OP_OR:case Se.OP_XOR:switch(this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least one item to be on the stack.`),a=this.stacktop(-2),o=this.stacktop(-1),a.length!==o.length&&this.scriptEvaluationError(`${Se[D]} requires the top two stack items to be the same size.`),D){case Se.OP_AND:for(let t=0;t<a.length;t++)a[t]&=o[t];break;case Se.OP_OR:for(let t=0;t<a.length;t++)a[t]|=o[t];break;case Se.OP_XOR:for(let t=0;t<a.length;t++)a[t]^=o[t]}this.stack.pop();break;case Se.OP_INVERT:this.stack.length<1&&this.scriptEvaluationError("OP_INVERT requires at least one item to be on the stack."),s=this.stacktop(-1);for(let t=0;t<s.length;t++)s[t]=~s[t];break;case Se.OP_LSHIFT:case Se.OP_RSHIFT:if(this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least two items to be on the stack.`),a=this.stacktop(-2),0===a.length)this.stack.pop();else{let t;I=new c(a),v=c.fromScriptNum(this.stacktop(-1),Me),d=v.toNumber(),d<0&&this.scriptEvaluationError(`${Se[D]} requires the top item on the stack not to be negative.`),this.stack.pop(),this.stack.pop(),D===Se.OP_LSHIFT&&(t=I.ushln(d)),D===Se.OP_RSHIFT&&(t=I.ushrn(d));const e=((t,e)=>{const r=t;for(;r.length<e;)r.unshift(0);return r})(t.toArray().slice(-1*a.length),a.length);this.stack.push(e)}break;case Se.OP_EQUAL:case Se.OP_EQUALVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least two items to be on the stack.`),a=this.stacktop(-2),o=this.stacktop(-1),C=Nt(a)===Nt(o),this.stack.pop(),this.stack.pop(),this.stack.push(C?[1]:[]),D===Se.OP_EQUALVERIFY&&(C?this.stack.pop():this.scriptEvaluationError("OP_EQUALVERIFY requires the top two stack items to be equal."));break;case Se.OP_1ADD:case Se.OP_1SUB:case Se.OP_NEGATE:case Se.OP_ABS:case Se.OP_NOT:case Se.OP_0NOTEQUAL:switch(this.stack.length<1&&this.scriptEvaluationError(`${Se[D]} requires at least one items to be on the stack.`),s=this.stacktop(-1),y=c.fromScriptNum(s,Me),D){case Se.OP_1ADD:y=y.addn(1);break;case Se.OP_1SUB:y=y.subn(1);break;case Se.OP_NEGATE:y=y.neg();break;case Se.OP_ABS:y.cmpn(0)<0&&(y=y.neg());break;case Se.OP_NOT:y=new c(0===y.cmpn(0)?1:0);break;case Se.OP_0NOTEQUAL:y=new c(0!==y.cmpn(0)?1:0)}this.stack.pop(),this.stack.push(y.toScriptNum());break;case Se.OP_ADD:case Se.OP_SUB:case Se.OP_MUL:case Se.OP_MOD:case Se.OP_DIV:case Se.OP_BOOLAND:case Se.OP_BOOLOR:case Se.OP_NUMEQUAL:case Se.OP_NUMEQUALVERIFY:case Se.OP_NUMNOTEQUAL:case Se.OP_LESSTHAN:case Se.OP_GREATERTHAN:case Se.OP_LESSTHANOREQUAL:case Se.OP_GREATERTHANOREQUAL:case Se.OP_MIN:case Se.OP_MAX:switch(this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least two items to be on the stack.`),I=c.fromScriptNum(this.stacktop(-2),Me),v=c.fromScriptNum(this.stacktop(-1),Me),y=new c(0),D){case Se.OP_ADD:y=I.add(v);break;case Se.OP_SUB:y=I.sub(v);break;case Se.OP_MUL:y=I.mul(v);break;case Se.OP_DIV:0===v.cmpn(0)&&this.scriptEvaluationError("OP_DIV cannot divide by zero!"),y=I.div(v);break;case Se.OP_MOD:0===v.cmpn(0)&&this.scriptEvaluationError("OP_MOD cannot divide by zero!"),y=I.mod(v);break;case Se.OP_BOOLAND:y=new c(0!==I.cmpn(0)&&0!==v.cmpn(0)?1:0);break;case Se.OP_BOOLOR:y=new c(0!==I.cmpn(0)||0!==v.cmpn(0)?1:0);break;case Se.OP_NUMEQUAL:case Se.OP_NUMEQUALVERIFY:y=new c(0===I.cmp(v)?1:0);break;case Se.OP_NUMNOTEQUAL:y=new c(0!==I.cmp(v)?1:0);break;case Se.OP_LESSTHAN:y=new c(I.cmp(v)<0?1:0);break;case Se.OP_GREATERTHAN:y=new c(I.cmp(v)>0?1:0);break;case Se.OP_LESSTHANOREQUAL:y=new c(I.cmp(v)<=0?1:0);break;case Se.OP_GREATERTHANOREQUAL:y=new c(I.cmp(v)>=0?1:0);break;case Se.OP_MIN:y=I.cmp(v)<0?I:v;break;case Se.OP_MAX:y=I.cmp(v)>0?I:v}this.stack.pop(),this.stack.pop(),this.stack.push(y.toScriptNum()),D===Se.OP_NUMEQUALVERIFY&&(this.castToBool(this.stacktop(-1))?this.stack.pop():this.scriptEvaluationError("OP_NUMEQUALVERIFY requires the top stack item to be truthy."));break;case Se.OP_WITHIN:this.stack.length<3&&this.scriptEvaluationError("OP_WITHIN requires at least three items to be on the stack."),I=c.fromScriptNum(this.stacktop(-3),Me),v=c.fromScriptNum(this.stacktop(-2),Me),k=c.fromScriptNum(this.stacktop(-1),Me),R=v.cmp(I)<=0&&I.cmp(k)<0,this.stack.pop(),this.stack.pop(),this.stack.pop(),this.stack.push(R?[1]:[]);break;case Se.OP_RIPEMD160:case Se.OP_SHA1:case Se.OP_SHA256:case Se.OP_HASH160:case Se.OP_HASH256:this.stack.length<1&&this.scriptEvaluationError(`${Se[D]} requires at least one item to be on the stack.`),s=this.stacktop(-1),D===Se.OP_RIPEMD160?N=mt(s):D===Se.OP_SHA1?N=wt(s):D===Se.OP_SHA256?N=gt(s):D===Se.OP_HASH160?N=vt(s):D===Se.OP_HASH256&&(N=It(s)),this.stack.pop(),this.stack.push(N);break;case Se.OP_CODESEPARATOR:this.lastCodeSeparator=this.programCounter;break;case Se.OP_CHECKSIG:case Se.OP_CHECKSIGVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${Se[D]} requires at least two items to be on the stack.`),P=this.stacktop(-2),O=this.stacktop(-1),e(P)&&r(O)||this.scriptEvaluationError(`${Se[D]} requires correct encoding for the public key and signature.`),S="UnlockingScript"===this.context?new Ne(this.unlockingScript.chunks.slice(this.lastCodeSeparator)):new Ne(this.lockingScript.chunks.slice(this.lastCodeSeparator)),S.findAndDelete((new Ne).writeBin(P));try{E=ke.fromChecksigFormat(P),A=$t.fromDER(O),H=i(E,A,S)}catch(t){H=!1}!H&&P.length>0&&this.scriptEvaluationError(`${Se[D]} failed to verify the signature, and requires an empty signature when verification fails.`),this.stack.pop(),this.stack.pop(),this.stack.push(H?[1]:[]),D===Se.OP_CHECKSIGVERIFY&&(H?this.stack.pop():this.scriptEvaluationError("OP_CHECKSIGVERIFY requires that a valid signature is provided."));break;case Se.OP_CHECKMULTISIG:case Se.OP_CHECKMULTISIGVERIFY:x=1,this.stack.length<x&&this.scriptEvaluationError(`${Se[D]} requires at least 1 item to be on the stack.`),M=c.fromScriptNum(this.stacktop(-x),Me).toNumber(),(M<0||M>_e)&&this.scriptEvaluationError(`${Se[D]} requires a key count between 0 and ${_e}.`),T=++x,x+=M,F=M+2,this.stack.length<x&&this.scriptEvaluationError(`${Se[D]} requires the number of stack items not to be less than the number of keys used.`),V=c.fromScriptNum(this.stacktop(-x),Me).toNumber(),(V<0||V>M)&&this.scriptEvaluationError(`${Se[D]} requires the number of signatures to be no greater than the number of keys.`),B=++x,x+=V,this.stack.length<x&&this.scriptEvaluationError(`${Se[D]} requires the number of stack items not to be less than the number of signatures provided.`),S="UnlockingScript"===this.context?new Ne(this.unlockingScript.chunks.slice(this.lastCodeSeparator)):new Ne(this.lockingScript.chunks.slice(this.lastCodeSeparator));for(let t=0;t<V;t++)P=this.stacktop(-B-t),S.findAndDelete((new Ne).writeBin(P));for(H=!0;H&&V>0;){P=this.stacktop(-B),O=this.stacktop(-T),e(P)&&r(O)||this.scriptEvaluationError(`${Se[D]} requires correct encoding for the public key and signature.`);try{E=ke.fromChecksigFormat(P),A=$t.fromString(Nt(O)),_=i(E,A,S)}catch(t){_=!1}_&&(B++,V--),T++,M--,V>M&&(H=!1)}for(;x-- >1;)!H&&!F&&this.stacktop(-1).length>0&&this.scriptEvaluationError(`${Se[D]} failed to verify a signature, and requires an empty signature when verification fails.`),F>0&&F--,this.stack.pop();this.stack.length<1&&this.scriptEvaluationError(`${Se[D]} requires an extra item to be on the stack.`),this.stacktop(-1).length>0&&this.scriptEvaluationError(`${Se[D]} requires the extra stack item to be empty.`),this.stack.pop(),this.stack.push(H?[1]:[]),D===Se.OP_CHECKMULTISIGVERIFY&&(H?this.stack.pop():this.scriptEvaluationError("OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided."));break;case Se.OP_CAT:this.stack.length<2&&this.scriptEvaluationError("OP_CAT requires at least two items to be on the stack."),a=this.stacktop(-2),o=this.stacktop(-1),a.length+o.length>xe&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.stack[this.stack.length-2]=[...a,...o],this.stack.pop();break;case Se.OP_SPLIT:this.stack.length<2&&this.scriptEvaluationError("OP_SPLIT requires at least two items to be on the stack."),a=this.stacktop(-2),d=c.fromScriptNum(this.stacktop(-1),Me).toNumber(),(d<0||d>a.length)&&this.scriptEvaluationError("OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item."),o=[...a],this.stack[this.stack.length-2]=o.slice(0,d),this.stack[this.stack.length-1]=o.slice(d);break;case Se.OP_NUM2BIN:if(this.stack.length<2&&this.scriptEvaluationError("OP_NUM2BIN requires at least two items to be on the stack."),l=c.fromScriptNum(this.stacktop(-1),Me).toNumber(),l>xe&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.stack.pop(),f=this.stacktop(-1),f=Ht(f),f.length>l&&this.scriptEvaluationError("OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item."),f.length===l){this.stack[this.stack.length-1]=f;break}for(b=0,f.length>0&&(b=128&f[f.length-1],f[f.length-1]&=127),p=new Array(l),p.fill(0),d=0;d<l;d++)p[d]=f[d];for(d=f.length-1;d++<l-2;)p[d]=0;p[d]=b,this.stack[this.stack.length-1]=p;break;case Se.OP_BIN2NUM:this.stack.length<1&&this.scriptEvaluationError("OP_BIN2NUM requires at least one item to be on the stack."),a=this.stacktop(-1),o=Ht(a),this.stack[this.stack.length-1]=o,((t,e=Number.MAX_SAFE_INTEGER)=>!(t.length>e||t.length>0&&!(127&t[t.length-1]||!(t.length<=1)&&128&t[t.length-2])))(o)||this.scriptEvaluationError("OP_BIN2NUM requires that the resulting number is valid.");break;default:this.scriptEvaluationError("Invalid opcode!")}this.programCounter++}validate(){for(this.unlockingScript.isPushOnly()||this.scriptEvaluationError("Unlocking scripts can only contain push operations, and no other opcodes.");this.step(),!("LockingScript"===this.context&&this.programCounter>=this.lockingScript.chunks.length););return this.ifStack.length>0&&this.scriptEvaluationError("Every OP_IF must be terminated prior to the end of the script."),1!==this.stack.length&&this.scriptEvaluationError("The clean stack rule requires exactly one item to be on the stack after script execution."),this.castToBool(this.stacktop(-1))||this.scriptEvaluationError("The top stack element must be truthy after script evaluation."),!0}stacktop(t){return this.stack[this.stack.length+t]}castToBool(t){for(let e=0;e<t.length;e++)if(0!==t[e])return e!==t.length-1||128!==t[e];return!1}scriptEvaluationError(t){throw new Error(`Script evaluation error: ${t}\n\nSource TXID: ${this.sourceTXID}\nSource output index: ${this.sourceOutputIndex}\nContext: ${this.context}\nProgram counter: ${this.programCounter}\nStack size: ${this.stack.length}\nAlt stack size: ${this.altStack.length}`)}}class Fe{lock(t){let e;if("string"==typeof t){const r=Bt(t);if(0!==r.prefix[0]&&111!==r.prefix[0])throw new Error("only P2PKH is supported");e=r.data}else e=t;if(20!==e.length)throw new Error("P2PKH hash length must be 20 bytes");return new Ee([{op:Se.OP_DUP},{op:Se.OP_HASH160},{op:e.length,data:e},{op:Se.OP_EQUALVERIFY},{op:Se.OP_CHECKSIG}])}unlock(t,e="all",r=!1,i,n){return{sign:async(s,a)=>{let o=ke.SIGHASH_FORKID;"all"===e&&(o|=ke.SIGHASH_ALL),"none"===e&&(o|=ke.SIGHASH_NONE),"single"===e&&(o|=ke.SIGHASH_SINGLE),r&&(o|=ke.SIGHASH_ANYONECANPAY);const c=s.inputs[a],h=s.inputs.filter(((t,e)=>e!==a)),u=c.sourceTXID?c.sourceTXID:c.sourceTransaction?.id("hex");if(!u)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(i||=c.sourceTransaction?.outputs[c.sourceOutputIndex].satoshis,!i)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(n||=c.sourceTransaction?.outputs[c.sourceOutputIndex].lockingScript,!n)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const d=ke.format({sourceTXID:u,sourceOutputIndex:c.sourceOutputIndex,sourceSatoshis:i,transactionVersion:s.version,otherInputs:h,inputIndex:a,outputs:s.outputs,inputSequence:c.sequence,subscript:n,lockTime:s.lockTime,scope:o}),l=t.sign(gt(d)),f=new ke(l.r,l.s,o).toChecksigFormat(),p=t.toPublicKey().encode(!0);return new Ae([{op:f.length,data:f},{op:p.length,data:p}])},estimateLength:async()=>108}}}class Ve{type="raw";constructor(t="raw"){this.type=t}lock(t){const e=[{op:Se.OP_OVER},{op:Se.OP_3},{op:Se.OP_SPLIT},{op:Se.OP_NIP},{op:Se.OP_1},{op:Se.OP_SPLIT},{op:Se.OP_SWAP},{op:Se.OP_SPLIT},{op:Se.OP_DROP}];return"raw"!==this.type&&e.push({op:Se["OP_"+this.type]}),e.push({op:t.length,data:t}),e.push({op:Se.OP_EQUALVERIFY}),e.push({op:Se.OP_CHECKSIG}),new Ee(e)}unlock(t,e,r="all",i=!1){return{sign:async(n,s)=>{void 0===e&&(e=te.fromRandom());let a=ke.SIGHASH_FORKID;"all"===r&&(a|=ke.SIGHASH_ALL),"none"===r&&(a|=ke.SIGHASH_NONE),"single"===r&&(a|=ke.SIGHASH_SINGLE),i&&(a|=ke.SIGHASH_ANYONECANPAY);const o=[...n.inputs],[c]=o.splice(s,1);if("object"!=typeof c.sourceTransaction)throw new Error("The source transaction is needed for transaction signing.");const h=ke.format({sourceTXID:c.sourceTransaction.id("hex"),sourceOutputIndex:c.sourceOutputIndex,sourceSatoshis:c.sourceTransaction.outputs[c.sourceOutputIndex].satoshis,transactionVersion:n.version,otherInputs:o,inputIndex:s,outputs:n.outputs,inputSequence:c.sequence,subscript:c.sourceTransaction.outputs[c.sourceOutputIndex].lockingScript,lockTime:n.lockTime,scope:a}),u=e.sign(gt(h),void 0,!0,t),d=new ke(u.r,u.s,a).toChecksigFormat(),l=e.toPublicKey().encode(!0);return new Ae([{op:d.length,data:d},{op:l.length,data:l}])},estimateLength:async()=>108}}}class Be{wallet;static decode(t){const e=$t.fromString(Nt(t.chunks[0].data)),r=[];for(let e=2;e<t.chunks.length;e++){const i=t.chunks[e+1].op;let n=t.chunks[e].data;if(n||(t.chunks[e].op>=80&&t.chunks[e].op<=95?n=[t.chunks[e].op-80]:0===t.chunks[e].op?n=[0]:79===t.chunks[e].op&&(n=[129])),r.push(n),i===Se.OP_DROP||i===Se.OP_2DROP)break}return{fields:r,lockingPublicKey:e}}constructor(t){this.wallet=t}async lock(t,e,r,i,n=!1,s=!0,a="before"){const{publicKey:o}=await this.wallet.getPublicKey({protocolID:e,keyID:r,counterparty:i,forSelf:n}),c=[],h=[];if(c.push({op:o.length/2,data:Et(o,"hex")}),c.push({op:Se.OP_CHECKSIG}),s){const n=t.reduce(((t,e)=>[...t,...e]),[]),{signature:s}=await this.wallet.createSignature({data:n,protocolID:e,keyID:r,counterparty:i});t.push(s)}for(const e of t)h.push(0===(u=e).length||1===u.length&&0===u[0]?{op:0}:1===u.length&&u[0]>0&&u[0]<=16?{op:80+u[0]}:1===u.length&&129===u[0]?{op:79}:u.length<=75?{op:u.length,data:u}:u.length<=255?{op:76,data:u}:u.length<=65535?{op:77,data:u}:{op:78,data:u});var u;let d=t.length;for(;d>1;)h.push({op:Se.OP_2DROP}),d-=2;return d&&h.push({op:Se.OP_DROP}),new Ee("before"===a?[...c,...h]:[...h,...c])}unlock(t,e,r,i="all",n=!1,s,a){return{sign:async(o,c)=>{let h=ke.SIGHASH_FORKID;"all"===i&&(h|=ke.SIGHASH_ALL),"none"===i&&(h|=ke.SIGHASH_NONE),"single"===i&&(h|=ke.SIGHASH_SINGLE),n&&(h|=ke.SIGHASH_ANYONECANPAY);const u=o.inputs[c],d=o.inputs.filter(((t,e)=>e!==c)),l=u.sourceTXID?u.sourceTXID:u.sourceTransaction?.id("hex");if(!l)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(s||=u.sourceTransaction?.outputs[u.sourceOutputIndex].satoshis,!s)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(a||=u.sourceTransaction?.outputs[u.sourceOutputIndex].lockingScript,!a)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const f=ke.format({sourceTXID:l,sourceOutputIndex:u.sourceOutputIndex,sourceSatoshis:s,transactionVersion:o.version,otherInputs:d,inputIndex:c,outputs:o.outputs,inputSequence:u.sequence,subscript:a,lockTime:o.lockTime,scope:h}),p=gt(f),{signature:b}=await this.wallet.createSignature({data:p,protocolID:t,keyID:e,counterparty:r}),m=Lt.fromDER([...b]),w=new ke(m.r,m.s,h).toChecksigFormat();return new Ae([{op:w.length,data:w}])},estimateLength:async()=>73}}}class Re{value;constructor(t){this.value=t}async computeFee(t){const e=t=>t>2**32?9:t>65536?5:t>253?3:1;let r=4;r+=e(t.inputs.length);for(let i=0;i<t.inputs.length;i++){const n=t.inputs[i];let s;if(r+=40,"object"==typeof n.unlockingScript)s=n.unlockingScript.toBinary().length;else{if("object"!=typeof n.unlockingScriptTemplate)throw new Error("All inputs must have an unlocking script or an unlocking script template for sat/kb fee computation.");s=await n.unlockingScriptTemplate.estimateLength(t,i)}r+=e(s),r+=s}r+=e(t.outputs.length);for(const i of t.outputs){r+=8;const t=i.lockingScript.toBinary().length;r+=e(t),r+=t}return r+=4,Math.ceil(r/1e3*this.value)}}class Ce{blockHeight;path;static fromHex(t){return Ce.fromBinary(Et(t,"hex"))}static fromReader(t){const e=t.readVarIntNum(),r=t.readUInt8(),i=Array(r).fill(0).map((()=>[]));let n,s,a;for(let e=0;e<r;e++){for(a=t.readVarIntNum();a;){s=t.readVarIntNum(),n=t.readUInt8();const r={offset:s};1&n?r.duplicate=!0:(2&n&&(r.txid=!0),r.hash=Nt(t.read(32).reverse())),i[e].push(r),a--}i[e].sort(((t,e)=>t.offset-e.offset))}return new Ce(e,i)}static fromBinary(t){const e=new Ct(t);return Ce.fromReader(e)}static fromCoinbaseTxidAndHeight(t,e){return new Ce(e,[[{offset:0,hash:t,txid:!0}]])}constructor(t,e){this.blockHeight=t,this.path=e;const r=Array(this.path.length).fill(0).map((()=>new Set));let i;this.path.map(((t,e)=>{if(0===t.length&&0===e)throw new Error(`Empty level at height: ${e}`);const i=new Set;t.map((t=>{if(i.has(t.offset))throw new Error(`Duplicate offset: ${t.offset}, at height: ${e}`);if(i.add(t.offset),0===e){if(!t.duplicate)for(let e=1;e<this.path.length;e++)r[e].add(t.offset>>e^1)}else if(!r[e].has(t.offset))throw new Error(`Invalid offset: ${t.offset}, at height: ${e}, with legal offsets: ${Array.from(r[e]).join(", ")}`)}))})),this.path[0].map(((t,e)=>{if(0===e&&(i=this.computeRoot(t.hash)),i!==this.computeRoot(t.hash))throw new Error("Mismatched roots")}))}toBinary(){const t=new Rt;t.writeVarIntNum(this.blockHeight);const e=this.path.length;t.writeUInt8(e);for(let r=0;r<e;r++){const e=Object.keys(this.path[r]).length;t.writeVarIntNum(e);for(const e of this.path[r]){t.writeVarIntNum(e.offset);let r=0;e?.duplicate&&(r|=1),e?.txid&&(r|=2),t.writeUInt8(r),1&r||t.write(Et(e.hash,"hex").reverse())}}return t.toArray()}toHex(){return Nt(this.toBinary())}computeRoot(t){"string"!=typeof t&&(t=this.path[0].find((t=>Boolean(t?.hash))).hash);const e=this.path[0].find((e=>e.hash===t)).offset;if("number"!=typeof e)throw new Error(`This proof does not contain the txid: ${t}`);const r=t=>Nt(It(Et(t,"hex").reverse()).reverse());let i=t;if(1===this.path.length&&1===this.path[0].length)return i;for(let t=0;t<this.path.length;t++){this.path[t];const n=e>>t^1,s=this.findOrComputeLeaf(t,n);if("object"!=typeof s)throw new Error(`Missing hash for index ${e} at height ${t}`);i=s.duplicate?r(i+i):r(n%2!=0?s.hash+i:i+s.hash)}return i}findOrComputeLeaf(t,e){const r=t=>Nt(It(Et(t,"hex").reverse()).reverse());let i=this.path[t].find((t=>t.offset===e));if(i)return i;if(0===t)return;const n=t-1,s=e<<1,a=this.findOrComputeLeaf(n,s);if(!a||!a.hash)return;const o=this.findOrComputeLeaf(n,s+1);if(!o)return;let c;return c=o.duplicate?r(a.hash+a.hash):r(o.hash+a.hash),i={offset:e,hash:c},i}async verify(t,e){const r=this.computeRoot(t);return await e.isValidRootForHeight(r,this.blockHeight)}combine(t){if(this.blockHeight!==t.blockHeight)throw new Error("You cannot combine paths which do not have the same block height.");if(this.computeRoot()!==t.computeRoot())throw new Error("You cannot combine paths which do not have the same root.");const e=[];for(let r=0;r<this.path.length;r++){e.push([]);for(let t=0;t<this.path[r].length;t++)e[r].push(this.path[r][t]);for(let i=0;i<t.path[r].length;i++)e[r].find((e=>e.offset===t.path[r][i].offset))?t.path[r][i]?.txid&&(e[r].find((e=>e.offset===t.path[r][i].offset)).txid=!0):e[r].push(t.path[r][i])}this.path=e,this.trim()}trim(){const t=(t,e)=>{0!==e.length&&e.slice(-1)[0]===t||e.push(t)},e=(t,e)=>{for(let r=t.length;r>=0;r--){const i=this.path[e].findIndex((e=>e.offset===t[r]));i>=0&&this.path[e].splice(i,1)}},r=e=>{const r=[];for(const i of e)t(i>>1,r);return r};let i=[],n=[];for(let t=0;t<this.path.length;t++)this.path[t].sort(((t,e)=>t.offset-e.offset));for(let e=0;e<this.path[0].length;e++){const r=this.path[0][e];if(r.txid)t(r.offset>>1,i);else{const i=r.offset%2==1,s=this.path[0][e+(i?-1:1)];s.txid||t(s.offset,n)}}e(n,0);for(let t=1;t<this.path.length;t++)n=i,i=r(i),e(n,t)}}class He{https;constructor(t){this.https=t}async request(t,e){return await new Promise(((r,i)=>{const n=this.https.request(t,e,(t=>{let e="";t.on("data",(t=>{e+=t})),t.on("end",(()=>{const i=t.statusCode>=200&&t.statusCode<=299,n=t.headers["content-type"],s=e&&n.startsWith("application/json")?JSON.parse(e):e;r({status:t.statusCode,statusText:t.statusMessage,ok:i,data:s})}))}));n.on("error",(t=>{i(t)})),e.data&&n.write(JSON.stringify(e.data)),n.end()}))}}class De{fetch;constructor(t){this.fetch=t}async request(t,e){const r={method:e.method,headers:e.headers,body:JSON.stringify(e.data)},i=await this.fetch(t,r),n=i.headers.get("Content-Type").startsWith("application/json")?await i.json():await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:n}}}function Ue(){const t={async request(...t){throw new Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new De(window.fetch.bind(window));if("undefined"==typeof require)return t;try{const t=require("https");return new He(t)}catch(e){return t}}function Ke(){return`ts-sdk-${Nt(Yt(16))}`}class Le{URL;apiKey;deploymentId;callbackUrl;callbackToken;headers;httpClient;constructor(t,e){if(this.URL=t,"string"==typeof e)this.apiKey=e,this.httpClient=Ue(),this.deploymentId=Ke(),this.callbackToken=void 0,this.callbackUrl=void 0;else{const{apiKey:t,deploymentId:r,httpClient:i,callbackToken:n,callbackUrl:s,headers:a}=e??{};this.apiKey=t,this.httpClient=i??Ue(),this.deploymentId=r??Ke(),this.callbackToken=n,this.callbackUrl=s,this.headers=a}}requestHeaders(){const t={"Content-Type":"application/json","XDeployment-ID":this.deploymentId};if(this.apiKey&&(t.Authorization=`Bearer ${this.apiKey}`),this.callbackUrl&&(t["X-CallbackUrl"]=this.callbackUrl),this.callbackToken&&(t["X-CallbackToken"]=this.callbackToken),this.headers)for(const e in this.headers)t[e]=this.headers[e];return t}async broadcast(t){let e;try{e=t.toHexEF()}catch(r){if("All inputs must have source transactions when serializing to EF format"!==r.message)throw r;e=t.toHex()}const r={method:"POST",headers:this.requestHeaders(),data:{rawTx:e}};try{const t=await this.httpClient.request(`${this.URL}/v1/tx`,r);if(t.ok){const{txid:e,extraInfo:r,txStatus:i,competingTxs:n}=t.data;let s={status:"success",txid:e,message:`${i} ${r}`};return n&&(s.competingTxs=n),s}{const e=typeof t.status,r={status:"error",code:"number"===e||"string"===e?t.status.toString():"ERR_UNKNOWN",description:"Unknown error"};let i=t.data;if("string"==typeof i)try{i=JSON.parse(t.data)}catch{}return"object"==typeof i&&(r.more=i,"string"==typeof i.txid&&(r.txid=i.txid),"string"==typeof i.detail&&(r.description=i.detail)),r}}catch(t){return{status:"error",code:"500",description:"string"==typeof t.message?t.message:"Internal Server Error"}}}async broadcastMany(t){const e=t.map((t=>{try{return{rawTx:t.toHexEF()}}catch(e){if("All inputs must have source transactions when serializing to EF format"===e.message)return{rawTx:t.toHex()};throw e}})),r={method:"POST",headers:this.requestHeaders(),data:e};try{return(await this.httpClient.request(`${this.URL}/v1/txs`,r)).data}catch(e){const r={status:"error",code:"500",description:e.message||"Internal Server Error"};return t.map((()=>r))}}}function qe(t=!1,e={}){return new Le(t?"https://arc-test.taal.com":"https://arc.taal.com",e)}class ze{network;apiKey;URL;httpClient;constructor(t="main",e={}){const{apiKey:r,httpClient:i}=e;this.network=t,this.URL=`https://api.whatsonchain.com/v1/bsv/${t}`,this.httpClient=i??Ue(),this.apiKey=r}async isValidRootForHeight(t,e){const r={method:"GET",headers:this.getHeaders()},i=await this.httpClient.request(`${this.URL}/block/${e}/header`,r);if(i.ok){const{merkleroot:e}=i.data;return e===t}if(404===i.status)return!1;throw new Error(`Failed to verify merkleroot for height ${e} because of an error: ${JSON.stringify(i.data)} `)}getHeaders(){const t={Accept:"application/json"};return this.apiKey&&(t.Authorization=this.apiKey),t}}function We(){return new ze}class je{_bumpIndex;_tx;_rawTx;_txid;inputTxids=[];isValid=void 0;get bumpIndex(){return this._bumpIndex}set bumpIndex(t){this._bumpIndex=t,this.updateInputTxids()}get hasProof(){return void 0!==this._bumpIndex}get isTxidOnly(){return!!this._txid&&!this._rawTx&&!this._tx}get txid(){if(this._txid)return this._txid;if(this._tx)return this._txid=this._tx.id("hex");if(this._rawTx)return this._txid=Nt(It(this._rawTx));throw new Error("Internal")}get tx(){return this._tx?this._tx:this._rawTx?this._tx=Je.fromBinary(this._rawTx):void 0}get rawTx(){return this._rawTx?this._rawTx:this._tx?this._rawTx=this._tx.toBinary():void 0}constructor(t,e){"string"==typeof t?this._txid=t:Array.isArray(t)?this._rawTx=t:this._tx=t,this.bumpIndex=e,this.updateInputTxids()}updateInputTxids(){if(this.hasProof||!this.tx)this.inputTxids=[];else{const t={};for(const e of this.tx.inputs)t[e.sourceTXID]=!0;this.inputTxids=Object.keys(t)}}toWriter(t,e){if(e===$e){if(this.isTxidOnly)t.writeUInt32LE(Ge),t.writeReverse(Et(this._txid,"hex"));else if(this._rawTx)t.write(this._rawTx);else{if(!this._tx)throw new Error("a valid serialized Transaction is expected");t.write(this._tx.toBinary())}void 0===this.bumpIndex?t.writeUInt8(0):(t.writeUInt8(1),t.writeVarIntNum(this.bumpIndex))}else if(this.isTxidOnly)t.writeUInt8(2),t.writeReverse(Et(this._txid,"hex"));else if(void 0===this.bumpIndex?t.writeUInt8(0):(t.writeUInt8(1),t.writeVarIntNum(this.bumpIndex)),this._rawTx)t.write(this._rawTx);else{if(!this._tx)throw new Error("a valid serialized Transaction is expected");t.write(this._tx.toBinary())}}static fromReader(t,e){let r,i;if(e===$e)t.readUInt32LE()===Ge?r=Nt(t.readReverse(32)):(t.pos-=4,r=Je.fromReader(t)),i=t.readUInt8()?t.readVarIntNum():void 0;else{const e=t.readUInt8();2===e?r=Nt(t.readReverse(32)):(1===e&&(i=t.readVarIntNum()),r=Je.fromReader(t))}return new je(r,i)}}const $e=4022206465,Xe=4022206466,Ge=4022206465,Ye=16843009;class Ze{bumps=[];txs=[];version=void 0;atomicTxid=void 0;constructor(t){this.version=t}get magic(){return"V1"===this.version?$e:"V2"===this.version||this.txs.findIndex((t=>t.isTxidOnly))>-1?Xe:$e}findTxid(t){return this.txs.find((e=>e.txid===t))}makeTxidOnly(t){const e=this.txs.findIndex((e=>e.txid===t));if(-1===e)return;let r=this.txs[e];return r.isTxidOnly||(this.txs.slice(e,e+1),r=this.mergeTxidOnly(t)),r}findBump(t){return this.bumps.find((e=>e.path[0].find((e=>e.hash===t))))}findTransactionForSigning(t){const e=this.findTxid(t);if(e){for(const t of e.tx.inputs)if(!t.sourceTransaction){const e=this.findTxid(t.sourceTXID);e&&(t.sourceTransaction=e.tx)}return e.tx}}findAtomicTransaction(t){const e=this.findTxid(t);if(!e)return;const r=(t,e)=>{const i=t.findBump(e.id("hex"));if(i)e.merklePath=i;else for(const i of e.inputs){if(!i.sourceTransaction){const e=t.findTxid(i.sourceTXID);e&&(i.sourceTransaction=e.tx)}if(i.sourceTransaction){const e=t.findBump(i.sourceTransaction.id("hex"));e?i.sourceTransaction.merklePath=e:r(t,i.sourceTransaction)}}};return r(this,e.tx),e.tx}mergeBump(t){let e;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r];if(i===t)return r;if(i.blockHeight===t.blockHeight&&i.computeRoot()===t.computeRoot()){i.combine(t),e=r;break}}void 0===e&&(e=this.bumps.length,this.bumps.push(t));const r=this.bumps[e];for(const t of this.txs){const i=t.txid;if(!t.bumpIndex)for(const n of r.path[0])if(n.hash===i){t.bumpIndex=e,n.txid=!0;break}}return e}mergeRawTx(t,e){const r=new je(t,e);return this.removeExistingTxid(r.txid),this.txs.push(r),this.tryToValidateBumpIndex(r),r}mergeTransaction(t){const e=t.id("hex");let r;this.removeExistingTxid(e),t.merklePath&&(r=this.mergeBump(t.merklePath));const i=new je(t,r);if(this.txs.push(i),this.tryToValidateBumpIndex(i),r=i.bumpIndex,void 0===r)for(const e of t.inputs)e.sourceTransaction&&this.mergeTransaction(e.sourceTransaction);return i}removeExistingTxid(t){const e=this.txs.findIndex((e=>e.txid===t));e>=0&&this.txs.splice(e,1)}mergeTxidOnly(t){if("V1"===this.version)throw new Error("BEEF V1 format does not support txid only transactions.");let e=this.txs.find((e=>e.txid===t));return e||(e=new je(t),this.txs.push(e),this.tryToValidateBumpIndex(e)),e}mergeBeefTx(t){let e=this.findTxid(t.txid);return!e&&t.isTxidOnly?e=this.mergeTxidOnly(t.txid):e&&!e.isTxidOnly||(e=t._tx?this.mergeTransaction(t._tx):this.mergeRawTx(t._rawTx)),e}mergeBeef(t){const e=Array.isArray(t)?Ze.fromBinary(t):t;for(const t of e.bumps)this.mergeBump(t);for(const t of e.txs)this.mergeBeefTx(t)}isValid(t){return this.verifyValid(t).valid}async verify(t,e){const r=this.verifyValid(e);if(!r.valid)return!1;for(const e of Object.keys(r.roots))if(!await t.isValidRootForHeight(r.roots[e],Number(e)))return!1;return!0}verifyValid(t){const e={valid:!1,roots:{}};this.sortTxs();const r={};for(const i of this.txs)if(i.isTxidOnly){if(!t)return e;r[i.txid]=!0}const i=(t,r)=>{const i=t.computeRoot(r);return e.roots[t.blockHeight]||(e.roots[t.blockHeight]=i),e.roots[t.blockHeight]===i};for(const t of this.bumps)for(const n of t.path[0])if(n.txid&&n.hash&&(r[n.hash]=!0,!i(t,n.hash)))return e;for(const t of this.txs){for(const i of t.inputTxids)if(!r[i])return e;r[t.txid]=!0}return e.valid=!0,e}toWriter(t){t.writeUInt32LE(this.magic),t.writeVarIntNum(this.bumps.length);for(const e of this.bumps)t.write(e.toBinary());t.writeVarIntNum(this.txs.length);for(const e of this.txs)e.toWriter(t,this.magic)}toBinary(){const t=new Rt;return this.toWriter(t),t.toArray()}toBinaryAtomic(t){this.sortTxs();const e=this.findTxid(t);if(!e)throw new Error(`${t} does not exist in this Beef`);if(this.txs[this.txs.length-1]!==e)throw new Error(`${t} is not the last transaction in this Beef`);const r=new Rt;return r.writeUInt32LE(Ye),r.write(Et(t,"hex")),this.toWriter(r),r.toArray()}toHex(){return Nt(this.toBinary())}static fromReader(t){let e,r=t.readUInt32LE();if(r===Ye&&(e=Nt(t.read(32)),r=t.readUInt32LE()),r!==$e&&r!==Xe)throw new Error(`Serialized BEEF must start with ${$e} or 4022206466 but starts with ${r}`);const i=new Ze(r===Xe?"V2":void 0),n=t.readVarIntNum();for(let e=0;e<n;e++){const e=Ce.fromReader(t);i.bumps.push(e)}const s=t.readVarIntNum();for(let e=0;e<s;e++){const e=je.fromReader(t,r);i.txs.push(e)}return i.atomicTxid=e,i}static fromBinary(t){const e=new Ct(t);return Ze.fromReader(e)}static fromString(t,e){e||="hex";const r=Et(t,e),i=new Ct(r);return Ze.fromReader(i)}tryToValidateBumpIndex(t){if(void 0!==t.bumpIndex)return!0;const e=t.txid;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r].path[0].findIndex((t=>t.hash===e));if(i>=0)return t.bumpIndex=r,this.bumps[r].path[0][i].txid=!0,!0}return!1}sortTxs(){const t={},e={};let r=[];const i=[],n=[];for(const s of this.txs)e[s.txid]=s,s.isValid=s.hasProof,s.isValid?(t[s.txid]=!0,i.push(s)):s.isTxidOnly&&0===s.inputTxids.length?(t[s.txid]=!0,n.push(s)):r.push(s);const s={},a=[],o=r;r=[];for(const t of o){let i=!1;for(const r of t.inputTxids)e[r]||(s[r]=!0,i=!0);i?a.push(t):r.push(t)}for(;r.length>0;){const e=r;r=[];for(const n of e)n.inputTxids.every((e=>t[e]))?(t[n.txid]=!0,i.push(n)):r.push(n);if(e.length===r.length)break}const c=r;return this.txs=a.concat(c).concat(n).concat(i),{missingInputs:Object.keys(s),notValid:c.map((t=>t.txid)),valid:Object.keys(t),withMissingInputs:a.map((t=>t.txid)),txidOnly:n.map((t=>t.txid))}}clone(){const t=new Ze;return t.bumps=Array.from(this.bumps),t.txs=Array.from(this.txs),t}trimKnownTxids(t){for(let e=0;e<this.txs.length;){const r=this.txs[e];r.isTxidOnly&&t.includes(r.txid)?this.txs.splice(e,1):e++}}getValidTxids(){return this.sortTxs().valid}toLogString(){let t="";t+=`BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`;let e=-1;for(const r of this.bumps)e++,t+=` BUMP ${e}\n block: ${r.blockHeight}\n txids: [\n${r.path[0].filter((t=>!!t.txid)).map((t=>` '${t.hash}'`)).join(",\n")}\n ]\n`;e=-1;for(const r of this.txs)e++,t+=` TX ${e}\n txid: ${r.txid}\n`,void 0!==r.bumpIndex&&(t+=` bumpIndex: ${r.bumpIndex}\n`),r.isTxidOnly?t+=" txidOnly\n":t+=` rawTx length=${r.rawTx.length}\n`,r.inputTxids.length>0&&(t+=` inputs: [\n${r.inputTxids.map((t=>` '${t}'`)).join(",\n")}\n ]\n`);return t}}const Qe=Ze;class Je{version;inputs;outputs;lockTime;metadata;merklePath;cachedHash;static fromBEEF(t,e){const r=new Ct(t),{transactions:i,BUMPs:n}=Je.parseBEEFData(r),s=Object.keys(i),a=s[s.length-1],o=e||a;if(!i[o])throw new Error(`Transaction with TXID ${o} not found in BEEF data.`);const c=t=>{if("number"==typeof t.pathIndex){const e=n[t.pathIndex];if("object"!=typeof e)throw new Error("Invalid merkle path index found in BEEF!");t.tx.merklePath=e}else for(let e=0;e<t.tx.inputs.length;e++){const r=t.tx.inputs[e],n=i[r.sourceTXID];if("object"!=typeof n)throw new Error(`Reference to unknown TXID in BEEF: ${r.sourceTXID}`);r.sourceTransaction=n.tx,c(n)}};return c(i[o]),i[o].tx}static fromAtomicBEEF(t){const e=new Ct(t),r=e.readUInt32LE();if(r!==Ye)throw new Error(`Invalid Atomic BEEF prefix. Expected 0x01010101, received 0x${r.toString(16)}.`);const i=e.read(32),n=Nt(i),s=new Ct(e.read()),{transactions:a,BUMPs:o}=Je.parseBEEFData(s);if(!a[n])throw new Error(`Subject transaction with TXID ${n} not found in Atomic BEEF data.`);const c=new Set;for(const t of o)for(const e of t.path[0])e.hash&&c.add(e.hash);const h=new Set;for(const t of Object.keys(a))h.add(t);const u=t=>{if(h.delete(t),c.has(t))return;c.add(t);const e=a[t].tx;for(const t of e.inputs){const e=t.sourceTXID;if(!a[e])throw new Error(`Input transaction with TXID ${e} is missing in Atomic BEEF data.`);u(e)}};u(n);for(const t of h)throw new Error(`Unrelated transaction with TXID ${t} found in Atomic BEEF data.`);const d=t=>{if("number"==typeof t.pathIndex){const e=o[t.pathIndex];if("object"!=typeof e)throw new Error("Invalid merkle path index found in BEEF!");t.tx.merklePath=e}else for(let e=0;e<t.tx.inputs.length;e++){const r=t.tx.inputs[e],i=a[r.sourceTXID];if("object"!=typeof i)throw new Error(`Reference to unknown TXID in BEEF: ${r.sourceTXID}`);r.sourceTransaction=i.tx,d(i)}};return d(a[n]),a[n].tx}static parseBEEFData(t){const e=t.readUInt32LE();if(e!==$e)throw new Error(`Invalid BEEF version. Expected ${$e}, received ${e}.`);const r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++)i.push(Ce.fromReader(t));const n=t.readVarIntNum(),s={};for(let e=0;e<n;e++){const e=Je.fromReader(t),r={tx:e},i=e.id("hex");Boolean(t.readUInt8())&&(r.pathIndex=t.readVarIntNum()),s[i]=r}return{transactions:s,BUMPs:i}}static fromEF(t){const e=new Ct(t),r=e.readUInt32LE();if("0000000000ef"!==Nt(e.read(6)))throw new Error("Invalid EF marker");const i=e.readVarIntNum(),n=[];for(let t=0;t<i;t++){const t=Nt(e.readReverse(32)),r=e.readUInt32LE(),i=e.readVarIntNum(),s=e.read(i),a=Ae.fromBinary(s),o=e.readUInt32LE(),c=e.readUInt64LEBn().toNumber(),h=e.readVarIntNum(),u=e.read(h),d=Ee.fromBinary(u),l=new Je(null,[],[],null);l.outputs=Array(r+1).fill(null),l.outputs[r]={satoshis:c,lockingScript:d},n.push({sourceTransaction:l,sourceTXID:t,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const s=e.readVarIntNum(),a=[];for(let t=0;t<s;t++){const t=e.readUInt64LEBn().toNumber(),r=e.readVarIntNum(),i=e.read(r),n=Ee.fromBinary(i);a.push({satoshis:t,lockingScript:n})}const o=e.readUInt32LE();return new Je(r,n,a,o)}static parseScriptOffsets(t){const e=new Ct(t),r=[],i=[];e.pos+=4;const n=e.readVarIntNum();for(let t=0;t<n;t++){e.pos+=36;const i=e.readVarIntNum();r.push({vin:t,offset:e.pos,length:i}),e.pos+=i+4}const s=e.readVarIntNum();for(let t=0;t<s;t++){e.pos+=8;const r=e.readVarIntNum();i.push({vout:t,offset:e.pos,length:r}),e.pos+=r}return{inputs:r,outputs:i}}static fromReader(t){const e=t.readUInt32LE(),r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++){const e=Nt(t.readReverse(32)),r=t.readUInt32LE(),n=t.readVarIntNum(),s=t.read(n),a=Ae.fromBinary(s),o=t.readUInt32LE();i.push({sourceTXID:e,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const n=t.readVarIntNum(),s=[];for(let e=0;e<n;e++){const e=t.readUInt64LEBn().toNumber(),r=t.readVarIntNum(),i=t.read(r),n=Ee.fromBinary(i);s.push({satoshis:e,lockingScript:n})}const a=t.readUInt32LE();return new Je(e,i,s,a)}static fromBinary(t){const e=new Ct(t);return Je.fromReader(e)}static fromHex(t){return Je.fromBinary(Et(t,"hex"))}static fromHexEF(t){return Je.fromEF(Et(t,"hex"))}static fromHexBEEF(t,e){return Je.fromBEEF(Et(t,"hex"),e)}constructor(t=1,e=[],r=[],i=0,n={},s){this.version=t,this.inputs=e,this.outputs=r,this.lockTime=i,this.metadata=n,this.merklePath=s}addInput(t){if(void 0===t.sourceTXID&&void 0===t.sourceTransaction)throw new Error("A reference to an an input transaction is required. If the input transaction itself cannot be referenced, its TXID must still be provided.");void 0===t.sequence&&(t.sequence=4294967295),this.cachedHash=void 0,this.inputs.push(t)}addOutput(t){if(this.cachedHash=void 0,!t.change){if(void 0===t.satoshis)throw new Error("either satoshis must be defined or change must be set to true");if(t.satoshis<=0)throw new Error("satoshis must be a positive integer or zero")}if(!t.lockingScript)throw new Error("lockingScript must be defined");this.outputs.push(t)}addP2PKHOutput(t,e){const r=(new Fe).lock(t);if(void 0===e)return this.addOutput({lockingScript:r,change:!0});this.addOutput({lockingScript:r,satoshis:e})}updateMetadata(t){this.metadata={...this.metadata,...t}}async fee(t=new Re(10),e="equal"){if(this.cachedHash=void 0,"number"==typeof t){const e=t;t={computeFee:async()=>e}}const r=await t.computeFee(this);let i=0;for(const t of this.inputs){if("object"!=typeof t.sourceTransaction)throw new Error("Source transactions are required for all inputs during fee computation");i+=t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis}i-=r;let n=0;for(const t of this.outputs)t.change?n++:i-=t.satoshis;if(i<=n){for(let t=0;t<this.outputs.length;t++)this.outputs[t].change&&(this.outputs.splice(t,1),t--);return}let s=0;if("random"===e){const t=this.outputs.filter((t=>t.change));let e=i;const r=(t,e)=>{const r=Math.floor(9*Math.random())+1;return Math.floor(t+(e-t)*Math.log10(1+1/r)/Math.log10(10))},n=Array(t.length).fill(1);e-=t.length,s+=t.length;for(let i=0;i<t.length-1;i++){const t=r(0,e);n[i]+=t,s+=t,e-=t}for(let t=0;t<this.outputs.length;t++)if(this.outputs[t].change){const e=n.shift();this.outputs[t].satoshis=e}}else if("equal"===e){const t=Math.floor(i/n);for(const e of this.outputs)e.change&&(s+=t,e.satoshis=t)}s<i&&(this.outputs[this.outputs.length-1].satoshis+=i-s)}getFee(){let t=0;for(const e of this.inputs){if("object"!=typeof e.sourceTransaction)throw new Error("Source transactions or sourceSatoshis are required for all inputs to calculate fee");t+=e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis}let e=0;for(const t of this.outputs)e+=t.satoshis||0;return t-e}async sign(){this.cachedHash=void 0;for(const t of this.outputs)if(void 0===t.satoshis)throw t.change?new Error("There are still change outputs with uncomputed amounts. Use the fee() method to compute the change amounts and transaction fees prior to signing."):new Error("One or more transaction outputs is missing an amount. Ensure all output amounts are provided before signing.");const t=await Promise.all(this.inputs.map((async(t,e)=>"object"==typeof this.inputs[e].unlockingScriptTemplate?await this.inputs[e].unlockingScriptTemplate.sign(this,e):await Promise.resolve(void 0))));for(let e=0,r=this.inputs.length;e<r;e++)"object"==typeof this.inputs[e].unlockingScriptTemplate&&(this.inputs[e].unlockingScript=t[e])}async broadcast(t=qe()){return await t.broadcast(this)}toBinary(){const t=new Rt;t.writeUInt32LE(this.version),t.writeVarIntNum(this.inputs.length);for(const e of this.inputs){void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.writeReverse(Et(e.sourceTXID,"hex")),t.writeUInt32LE(e.sourceOutputIndex);const r=e.unlockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r),t.writeUInt32LE(e.sequence)}t.writeVarIntNum(this.outputs.length);for(const e of this.outputs){t.writeUInt64LE(e.satoshis);const r=e.lockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r)}return t.writeUInt32LE(this.lockTime),t.toArray()}toEF(){const t=new Rt;t.writeUInt32LE(this.version),t.write([0,0,0,0,0,239]),t.writeVarIntNum(this.inputs.length);for(const e of this.inputs){if(void 0===e.sourceTransaction)throw new Error("All inputs must have source transactions when serializing to EF format");void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.write(Et(e.sourceTXID,"hex").reverse()),t.writeUInt32LE(e.sourceOutputIndex);const r=e.unlockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r),t.writeUInt32LE(e.sequence),t.writeUInt64LE(e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis);const i=e.sourceTransaction.outputs[e.sourceOutputIndex].lockingScript.toBinary();t.writeVarIntNum(i.length),t.write(i)}t.writeVarIntNum(this.outputs.length);for(const e of this.outputs){t.writeUInt64LE(e.satoshis);const r=e.lockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r)}return t.writeUInt32LE(this.lockTime),t.toArray()}toHexEF(){return Nt(this.toEF())}toHex(){return Nt(this.toBinary())}toHexBEEF(){return Nt(this.toBEEF())}toHexAtomicBEEF(){return Nt(this.toAtomicBEEF())}hash(t){let e;return this.cachedHash?e=this.cachedHash:(e=It(this.toBinary()),this.cachedHash=e),"hex"===t?Nt(e):e}id(t){const e=[...this.hash()];return e.reverse(),"hex"===t?Nt(e):e}async verify(t=We(),e){const r=new Set,i=[this];for(;i.length>0;){const n=i.shift(),s=n.id("hex");if(r.has(s))continue;if("object"==typeof n.merklePath){if("scripts only"===t){r.add(s);continue}if(await n.merklePath.verify(s,t)){r.add(s);continue}}if(void 0!==e){const t=Je.fromEF(n.toEF());if(delete t.outputs[0].satoshis,t.outputs[0].change=!0,await t.fee(e),n.getFee()<t.getFee())throw new Error(`Verification failed because the transaction ${s} has an insufficient fee and has not been mined.`)}let a=0;for(let t=0;t<n.inputs.length;t++){const e=n.inputs[t];if("object"!=typeof e.sourceTransaction)throw new Error(`Verification failed because the input at index ${t} of transaction ${s} is missing an associated source transaction. This source transaction is required for transaction verification because there is no merkle proof for the transaction spending a UTXO it contains.`);if("object"!=typeof e.unlockingScript)throw new Error(`Verification failed because the input at index ${t} of transaction ${s} is missing an associated unlocking script. This script is required for transaction verification because there is no merkle proof for the transaction spending the UTXO.`);const o=e.sourceTransaction.outputs[e.sourceOutputIndex];a+=o.satoshis;const c=e.sourceTransaction.id("hex");r.has(c)||i.push(e.sourceTransaction);const h=n.inputs.filter(((e,r)=>r!==t));if(void 0===e.sourceTXID&&(e.sourceTXID=c),!new Te({sourceTXID:e.sourceTXID,sourceOutputIndex:e.sourceOutputIndex,lockingScript:o.lockingScript,sourceSatoshis:o.satoshis,transactionVersion:n.version,otherInputs:h,unlockingScript:e.unlockingScript,inputSequence:e.sequence,inputIndex:t,outputs:n.outputs,lockTime:n.lockTime}).validate())return!1}let o=0;for(const t of n.outputs){if("number"!=typeof t.satoshis)throw new Error("Every output must have a defined amount during transaction verification.");o+=t.satoshis}if(o>a)return!1;r.add(s)}return!0}toBEEF(t){this.outputs.length;const e=new Rt;e.writeUInt32LE(4022206465);const r=[],i=[],n=e=>{const s={tx:e},a="object"==typeof e.merklePath;if(a){let t=!1;for(let i=0;i<r.length;i++){if(r[i]===e.merklePath){s.pathIndex=i,t=!0;break}if(r[i].blockHeight===e.merklePath.blockHeight&&r[i].computeRoot()===e.merklePath.computeRoot()){r[i].combine(e.merklePath),s.pathIndex=i,t=!0;break}}t||(s.pathIndex=r.length,r.push(e.merklePath))}if(i.some((t=>t.tx.id("hex")===e.id("hex")))||i.unshift(s),!a)for(let r=0;r<e.inputs.length;r++){const i=e.inputs[r];if("object"==typeof i.sourceTransaction)n(i.sourceTransaction);else if(!t)throw new Error("A required source transaction is missing!")}};n(this),e.writeVarIntNum(r.length);for(const t of r)e.write(t.toBinary());e.writeVarIntNum(i.length);for(const t of i)e.write(t.tx.toBinary()),"number"==typeof t.pathIndex?(e.writeUInt8(1),e.writeVarIntNum(t.pathIndex)):e.writeUInt8(0);return e.toArray()}toAtomicBEEF(t){const e=new Rt;e.writeUInt32LE(16843009),e.write(this.id());const r=this.toBEEF(t);return e.write(r),e.toArray()}}function tr(t){return"success"===t.status}function er(t){return"error"===t.status}const rr=class extends Ze{knownTo={};constructor(t){if(super(),t)for(const e of t)this.addParty(e)}isParty(t){return Object.keys(this.knownTo).includes(t)}addParty(t){if(this.isParty(t))throw new Error(`Party ${t} already exists.`);this.knownTo[t]={}}getKnownTxidsForParty(t){const e=this.knownTo[t];if(!e)throw new Error(`Party ${t} is unknown.`);return Object.keys(e)}getTrimmedBeefForParty(t){const e=this.getKnownTxidsForParty(t),r=this.clone();return r.trimKnownTxids(e),r}addKnownTxidsForParty(t,e){this.isParty(t)||this.addParty(t);const r=this.knownTo[t];for(const t of e)r[t]=!0,this.mergeTxidOnly(t)}mergeBeefFromParty(t,e){const r=Array.isArray(e)?Ze.fromBinary(e):e,i=r.getValidTxids();this.mergeBeef(r),this.addKnownTxidsForParty(t,i)}};class ir{network;URL;httpClient;constructor(t="main",e=Ue()){this.network=t,this.URL=`https://api.whatsonchain.com/v1/bsv/${t}/tx/raw`,this.httpClient=e}async broadcast(t){const e={method:"POST",headers:{"Content-Type":"application/json",Accept:"text/plain"},data:{txhex:t.toHex()}};try{const t=await this.httpClient.request(this.URL,e);return t.ok?{status:"success",txid:t.data,message:"broadcast successful"}:{status:"error",code:t.status.toString()??"ERR_UNKNOWN",description:t.data??"Unknown error"}}catch(t){return{status:"error",code:"500",description:"string"==typeof t.message?t.message:"Internal Server Error"}}}}const nr="42423301",sr=(t,e,r)=>{const i="object"!=typeof r;if(i){const t=new Kt,e=new te(1),i=t.g.mul(e);r=new $t(i.x,i.y)}const n=Yt(32),s=`2-message signing-${_t(n)}`,a=e.deriveChild(r,s).sign(t).toDER(),o=e.toPublicKey().encode(!0);return[...Et(nr,"hex"),...o,...i?[0]:r.encode(!0),...n,...a]},ar=(t,e,r)=>{const i=new Ct(e),n=Nt(i.read(4));if(n!==nr)throw new Error(`Message version mismatch: Expected ${nr}, received ${n}`);const s=$t.fromString(Nt(i.read(33))),[a]=i.read(1);if(0===a)r=new te(1);else{const t=i.read(32),e=Nt([a,...t]);if("object"!=typeof r)throw new Error(`This signature can only be verified with knowledge of a specific private key. The associated public key is: ${e}`);const n=r.toPublicKey().encode(!0,"hex");if(e!==n)throw new Error(`The recipient public key is ${n} but the signature requres the recipient to have public key ${e}`)}const o=_t(i.read(32)),c=Nt(i.read(i.bin.length-i.pos)),h=Lt.fromDER(c,"hex"),u=`2-message signing-${o}`;return s.deriveChild(r,u).verify(t,h)},or="42421033",cr=(t,e,r)=>{const i=Yt(32),n=`2-message encryption-${_t(i)}`,s=e.deriveChild(r,n),a=r.deriveChild(e,n),o=s.deriveSharedSecret(a),c=new ve(o.encode(!0).slice(1)).encrypt(t),h=e.toPublicKey().encode(!0);return[...Et(or,"hex"),...h,...r.encode(!0),...i,...c]},hr=(t,e)=>{const r=new Ct(t),i=Nt(r.read(4));if(i!==or)throw new Error(`Message version mismatch: Expected ${or}, received ${i}`);const n=$t.fromString(Nt(r.read(33))),s=Nt(r.read(33)),a=e.toPublicKey().encode(!0,"hex");if(s!==a)throw new Error(`The encrypted message expects a recipient public key of ${s}, but the provided key is ${a}`);const o=_t(r.read(32)),c=r.read(r.bin.length-r.pos),h=`2-message encryption-${o}`,u=n.deriveChild(e,h),d=e.deriveChild(n,h),l=u.deriveSharedSecret(d);return new ve(l.encode(!0).slice(1)).decrypt(c)},ur=t=>{const e=new Rt;e.writeVarIntNum(24),e.write(Et("Bitcoin Signed Message:\n","utf8")),e.writeVarIntNum(t.length),e.write(t);const r=e.toArray();return It(r)},dr=(t,e,r="base64")=>{const i=ur(t),n=Wt(new c(i),e,!0);if("raw"===r)return n;const s=new c(i),a=n.CalculateRecoveryFactor(e.toPublicKey(),s);return n.toCompact(a,!0,"base64")},lr=(t,e,r)=>{const i=ur(t);return jt(new c(i),e,r)};class fr{versionBytesNum;depth;parentFingerPrint;childIndex;chainCode;privKey;pubKey;constants={pubKey:76067358,privKey:76066276};constructor(t,e,r,i,n,s,a){this.versionBytesNum=t,this.depth=e,this.parentFingerPrint=r,this.childIndex=i,this.chainCode=n,this.privKey=s,this.pubKey=a}fromRandom(){return this.versionBytesNum=this.constants.privKey,this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=Yt(32),this.privKey=te.fromRandom(),this.pubKey=this.privKey.toPublicKey(),this}static fromRandom(){return(new this).fromRandom()}static fromString(t){return(new this).fromString(t)}fromString(t){const e=Bt(t);return this.fromBinary([...e.prefix,...e.data])}static fromSeed(t){return(new this).fromSeed(t)}fromSeed(t){if(t.length<16)throw new Error("Need more than 128 bits of entropy");if(t.length>64)throw new Error("More than 512 bits of entropy is nonstandard");const e=Pt(Et("Bitcoin seed","utf8"),t);return this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=e.slice(32,64),this.versionBytesNum=this.constants.privKey,this.privKey=new te(e.slice(0,32)),this.pubKey=this.privKey.toPublicKey(),this}static fromBinary(t){return(new this).fromBinary(t)}fromBinary(t){if(78!==t.length)throw new Error("incorrect bip32 data length");const e=new Ct(t);this.versionBytesNum=e.readUInt32BE(),this.depth=e.readUInt8(),this.parentFingerPrint=e.read(4),this.childIndex=e.readUInt32BE(),this.chainCode=e.read(32);const r=e.read(33),i=this.versionBytesNum===this.constants.privKey,n=this.versionBytesNum===this.constants.pubKey;if(i&&0===r[0])this.privKey=new te(r.slice(1,33)),this.pubKey=this.privKey.toPublicKey();else{if(!n||2!==r[0]&&3!==r[0])throw new Error("Invalid key");this.pubKey=$t.fromString(Nt(r))}return this}toString(){const t=this.toBinary();return Vt(t,[])}derive(t){if("m"===t)return this;const e=t.split("/");let r=this;for(const t in e){const i=e[t];if("0"===t){if("m"!==i)throw new Error("invalid path");continue}if(parseInt(i.replace("'",""),10).toString()!==i.replace("'",""))throw new Error("invalid path");const n=i.length>1&&"'"===i[i.length-1];let s=2147483647&parseInt(n?i.slice(0,i.length-1):i,10);n&&(s+=2147483648),r=r.deriveChild(s)}return r}deriveChild(t){if("number"!=typeof t)throw new Error("i must be a number");const e=[];e.push(t>>24&255),e.push(t>>16&255),e.push(t>>8&255),e.push(255&t);const r=[...e],i=!!(2147483648&t),n=this.versionBytesNum===this.constants.privKey;if(i&&(!this.privKey||!n))throw new Error("Cannot do private key derivation without private key");let s=null;if(this.privKey){let t=null;t=i?[0,...this.privKey.toArray("be",32),...r]:[...this.pubKey.encode(!0),...r];const e=Pt(this.chainCode,t),n=new c(e.slice(0,32)),a=e.slice(32,64),o=n.add(this.privKey).mod((new Kt).n);s=new fr,s.chainCode=a,s.privKey=new te(o.toArray()),s.pubKey=s.privKey.toPublicKey()}else{const t=[...this.pubKey.encode(!0),...r],e=Pt(this.chainCode,t),i=new c(e.slice(0,32)),n=e.slice(32,64),a=(new Kt).g.mul(i),o=this.pubKey,h=a.add(o),u=new $t(h.x,h.y);s=new fr,s.chainCode=n,s.pubKey=u}s.childIndex=t;const a=vt(this.pubKey.encode(!0));return s.parentFingerPrint=a.slice(0,4),s.versionBytesNum=this.versionBytesNum,s.depth=this.depth+1,s}toPublic(){const t=new fr(this.versionBytesNum,this.depth,this.parentFingerPrint,this.childIndex,this.chainCode,this.privKey,this.pubKey);return t.versionBytesNum=this.constants.pubKey,t.privKey=void 0,t}toBinary(){const t=this.versionBytesNum===this.constants.privKey,e=this.versionBytesNum===this.constants.pubKey;if(t)return(new Rt).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).writeUInt8(0).write(this.privKey.toArray("be",32)).toArray();if(e)return(new Rt).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).write(this.pubKey.encode(!0)).toArray();throw new Error("bip32: invalid versionBytesNum byte")}isPrivate(){return this.versionBytesNum===this.constants.privKey}}const pr={value:["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],space:" "};class br{mnemonic;seed;Wordlist;constructor(t,e,r=pr){this.mnemonic=t,this.seed=e,this.Wordlist=r}toBinary(){const t=new Rt;if(this.mnemonic){const e=Et(this.mnemonic,"utf8");t.writeVarIntNum(e.length),t.write(e)}else t.writeVarIntNum(0);return this.seed?(t.writeVarIntNum(this.seed.length),t.write(this.seed)):t.writeVarIntNum(0),t.toArray()}fromBinary(t){const e=new Ct(t),r=e.readVarIntNum();r>0&&(this.mnemonic=xt(e.read(r),"utf8"));const i=e.readVarIntNum();return i>0&&(this.seed=e.read(i)),this}fromRandom(t){if(t||(t=128),t%32!=0)throw new Error("bits must be multiple of 32");if(t<128)throw new Error("bits must be at least 128");const e=Yt(t/8);return this.entropy2Mnemonic(e),this.mnemonic2Seed(),this}static fromRandom(t){return(new this).fromRandom(t)}fromEntropy(t){return this.entropy2Mnemonic(t),this}static fromEntropy(t){return(new this).fromEntropy(t)}fromString(t){return this.mnemonic=t,this}static fromString(t){return(new this).fromString(t)}toString(){return this.mnemonic}toSeed(t){return this.mnemonic2Seed(t),this.seed}entropy2Mnemonic(t){if(t.length<16)throw new Error("Entropy is less than 128 bits. It must be 128 bits or more.");const e=gt(t);let r="";const i=8*t.length;for(let e=0;e<t.length;e++)r+=("00000000"+t[e].toString(2)).slice(-8);let n=e[0].toString(2);if(n=("00000000"+n).slice(-8).slice(0,i/32),r+=n,r.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+r.length);let s="";for(let t=0;t<r.length/11;t++){""!==s&&(s+=this.Wordlist.space);const e=parseInt(r.slice(11*t,11*(t+1)),2);s+=this.Wordlist.value[e]}return this.mnemonic=s,this}check(){const t=this.mnemonic.split(this.Wordlist.space);let e="";for(let r=0;r<t.length;r++){const i=this.Wordlist.value.indexOf(t[r]);if(i<0)return!1;e+=("00000000000"+i.toString(2)).slice(-11)}if(e.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+e.length);const r=e.length/33,i=e.slice(-r),n=e.slice(0,e.length-r),s=[];for(let t=0;t<n.length/8;t++)s.push(parseInt(e.slice(8*t,8*(t+1)),2));let a=gt(s.slice(0,n.length/8))[0].toString(2);return a=("00000000"+a).slice(-8).slice(0,r),a===i}mnemonic2Seed(t=""){let e=this.mnemonic;if(!this.check())throw new Error("Mnemonic does not pass the check - was the mnemonic typed incorrectly? Are there extra spaces?");if("string"!=typeof t)throw new Error("passphrase must be a string or undefined");e=e.normalize("NFKD"),t=t.normalize("NFKD");const r=Et(e,"utf8"),i=[...Et("mnemonic","utf8"),...Et(t,"utf8")];return this.seed=Ot(r,i,2048,64,"sha512"),this}isValid(t=""){let e;try{e=!!this.mnemonic2Seed(t)}catch(t){e=!1}return e}static isValid(t,e=""){return new br(t).isValid(e)}}function mr(t){let e,r,i;this._tables[0][0][0]||this._precompute();const n=this._tables[0][4],s=this._tables[1],a=t.length;let o=1;if(4!==a&&6!==a&&8!==a)throw new Error("invalid aes key size");this._key=[r=t.slice(0),i=[]];for(var c=a;c<4*a+28;c++)e=r[c-1],(c%a==0||8===a&&c%a==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],c%a==0&&(e=e<<8^e>>>24^o<<24,o=o<<1^283*(o>>7))),r[c]=r[c-a]^e;for(let t=0;c;t++,c--)e=r[3&t?c:c-4],i[t]=c<=4||t<4?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}mr.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)]],_precompute:function(){const t=this._tables[0],e=this._tables[1],r=t[4],i=e[4];let n,s,a;const o=new Uint8Array(256),c=new Uint8Array(256);let h,u,d,l,f,p;for(n=0;n<256;n++)c[(o[n]=n<<1^283*(n>>7))^n]=n;for(s=a=0;!r[s];s^=h||1,a=c[a]||1)for(l=a^a<<1^a<<2^a<<3^a<<4,l=l>>8^255&l^99,r[s]=l,i[l]=s,d=o[u=o[h=o[s]]],p=16843009*d^65537*u^257*h^16843008*s,f=257*o[l]^16843008*l,n=0;n<4;n++)t[n][s]=f=f<<24^f>>>8,e[n][l]=p=p<<24^p>>>8},_crypt:function(t,e){if(4!==t.length)throw new Error("invalid aes block size");const r=this._key[e];let i,n,s,a=t[0]^r[0],o=t[e?3:1]^r[1],c=t[2]^r[2],h=t[e?1:3]^r[3];const u=r.length/4-2;let d,l=4;const f=new Uint32Array(4),p=this._tables[e],b=p[0],m=p[1],w=p[2],g=p[3],y=p[4];for(d=0;d<u;d++)i=b[a>>>24]^m[o>>16&255]^w[c>>8&255]^g[255&h]^r[l],n=b[o>>>24]^m[c>>16&255]^w[h>>8&255]^g[255&a]^r[l+1],s=b[c>>>24]^m[h>>16&255]^w[a>>8&255]^g[255&o]^r[l+2],h=b[h>>>24]^m[a>>16&255]^w[o>>8&255]^g[255&c]^r[l+3],l+=4,a=i,o=n,c=s;for(d=0;d<4;d++)f[e?3&-d:d]=y[a>>>24]<<24^y[o>>16&255]<<16^y[c>>8&255]<<8^y[255&h]^r[l++],i=a,a=o,o=c,c=h,h=i;return f}};class wr{static encrypt(t,e){const r=wr.buf2Words(e),i=wr.buf2Words(t),n=new mr(r).encrypt(i);return wr.words2Buf(n)}static decrypt(t,e){const r=wr.buf2Words(t),i=new mr(wr.buf2Words(e)).decrypt(r);return wr.words2Buf(i)}static buf2Words(t){if(t.length%4)throw new Error("buf length must be a multiple of 4");const e=[];for(let r=0;r<t.length/4;r++){const i=16777216*t[4*r]+(t[4*r+1]<<16|t[4*r+2]<<8|t[4*r+3]);e.push(i)}return e}static words2Buf(t){const e=new Array(4*t.length);for(let r=0;r<t.length;r++){const i=t[r];e[4*r]=i>>>24&255,e[4*r+1]=i>>>16&255,e[4*r+2]=i>>>8&255,e[4*r+3]=255&i}return e}}class gr{static buf2BlocksBuf(t,e){const r=e/8,i=[];for(let n=0;n<=t.length/r;n++){let s=t.slice(n*r,n*r+r);s.length<e&&(s=gr.pkcs7Pad(s,e)),i.push(s)}return i}static blockBufs2Buf(t){let e=t[t.length-1];return e=gr.pkcs7Unpad(e),t[t.length-1]=e,t.flat()}static encrypt(t,e,r,i){const n=8*e.length,s=gr.buf2BlocksBuf(t,n);return gr.encryptBlocks(s,e,r,i).flat()}static decrypt(t,e,r,i){const n=e.length,s=[];for(let e=0;e<t.length/n;e++)s.push(t.slice(e*n,e*n+n));const a=gr.decryptBlocks(s,e,r,i);return gr.blockBufs2Buf(a)}static encryptBlock(t,e,r,i){const n=gr.xorBufs(t,e);return r.encrypt(n,i)}static decryptBlock(t,e,r,i){const n=r.decrypt(t,i);return gr.xorBufs(n,e)}static encryptBlocks(t,e,r,i){const n=[];for(let s=0;s<t.length;s++){const a=t[s],o=gr.encryptBlock(a,e,r,i);n.push(o),e=o}return n}static decryptBlocks(t,e,r,i){const n=[];for(let s=0;s<t.length;s++){const a=t[s],o=gr.decryptBlock(a,e,r,i);n.push(o),e=a}return n}static pkcs7Pad(t,e){const r=e/8-t.length,i=new Array(r);return i.fill(r),[...t,...i]}static pkcs7Unpad(t){const e=t[t.length-1],r=t.slice(t.length-e,t.length),i=new Array(e);if(i.fill(e),Nt(r)!==Nt(i))throw new Error("invalid padding");return t.slice(0,t.length-e)}static xorBufs(t,e){if(t.length!==e.length)throw new Error("bufs must have the same length");const r=new Array(t.length);for(let i=0;i<t.length;i++)r[i]=t[i]^e[i];return r}}class yr{static encrypt(t,e,r,i=!0){r=r||new Array(16).fill(0)||Yt(16);const n=gr.encrypt(t,r,wr,e);return i?[...r,...n]:[...n]}static decrypt(t,e,r){if(r){const i=t;return gr.decrypt(i,r,wr,e)}{r=t.slice(0,16);const i=t.slice(16);return gr.decrypt(i,r,wr,e)}}}class Ir{static ivkEkM(t,e){const r=t,i=e.mul(r),n=new $t(i.x,i.y).encode(!0),s=yt(n);return{iv:s.slice(0,16),kE:s.slice(16,32),kM:s.slice(32,64)}}static electrumEncrypt(t,e,r,i=!1){let n;r||(r=te.fromRandom()),i||(n=r.toPublicKey().encode(!0));const{iv:s,kE:a,kM:o}=Ir.ivkEkM(r,e),c=yr.encrypt(t,a,s,!1),h=Et("BIE1","utf8");let u;u=n?[...h,...n,...c]:[...h,...c];const d=kt(o,u);return[...u,...d]}static electrumDecrypt(t,e,r){const i=t.slice(0,4);if("BIE1"!==xt(i,"utf8"))throw new Error("Invalid Magic");let n=4,s=null;if(t.length-n-32>=33){const e=t[n];2===e||3===e?(s=t.slice(n,n+33),n+=33):4===e&&(s=t.slice(n,n+65),n+=65)}if(s)r||(r=$t.fromString(Nt(s)));else if(!r)throw new Error("Sender public key is required");const{iv:a,kE:o,kM:c}=Ir.ivkEkM(e,r),h=t.slice(n,t.length-32),u=t.slice(t.length-32,t.length),d=kt(c,t.slice(0,t.length-32));if(Nt(u)!==Nt(d))throw new Error("Invalid checksum");return yr.decrypt(h,o,a)}static bitcoreEncrypt(t,e,r,i){r||(r=te.fromRandom());const n=r,s=r.toPublicKey().encode(!0),a=e.mul(n).getX().toArray("be",32),o=yt(a),c=o.slice(0,32),h=o.slice(32,64),u=yr.encrypt(t,c,i),d=kt(h,[...u]);return[...s,...u,...d]}static bitcoreDecrypt(t,e){const r=e,i=$t.fromString(Nt(t.slice(0,33))).mul(r);if(i.eq(new Dt(0,0)))throw new Error("P equals 0");const n=i.getX().toArray("be",32),s=yt(n),a=s.slice(0,32),o=s.slice(32,64),c=t.slice(33,t.length-32),h=t.slice(t.length-32,t.length),u=kt(o,c);if(Nt(h)!==Nt(u))throw new Error("Invalid checksum");return[...yr.decrypt(c,a)]}}function vr(t,e){const r=new Je(0,[],[],0);return r.outputs=Array(t.vout+1).fill(null),r.outputs[t.vout]={satoshis:t.satoshis,lockingScript:Ee.fromHex(t.script)},{sourceTransaction:r,sourceTXID:t.txid,sourceOutputIndex:t.vout,unlockingScriptTemplate:e,sequence:4294967295}}class kr{static generate(t,e){const r=this.withDefaultOptions(e);return Pr(t,this.getCounter(r.timestamp,r.period),r)}static validate(t,e,r){const i=this.withDefaultValidateOptions(r);if((e=e.trim()).length!=i.digits)return!1;const n=this.getCounter(i.timestamp,i.period),s=[n];for(let t=1;t<=i.skew;t++)s.push(n+t),s.push(n-t);for(const r of s)if(e===Pr(t,r,i))return!0;return!1}static getCounter(t,e){const r=Math.floor(t/1e3);return Math.floor(r/e)}static withDefaultOptions(t){return{digits:2,algorithm:"SHA-1",period:30,timestamp:Date.now(),...t}}static withDefaultValidateOptions(t){return{skew:1,...this.withDefaultOptions(t)}}}function Pr(t,e,r){const i=function(t,e,r){switch(r){case"SHA-1":return new pt(t).update(e);case"SHA-256":return new ft(t).update(e);case"SHA-512":return new bt(t).update(e);default:throw new Error("unsupported HMAC algorithm")}}(t,new c(e).toArray("be",8),r.algorithm),n=i.digest(),s=15&n[n.length-1],a=n.slice(s,s+4);return(2147483647&new c(a).toNumber()).toString().slice(-r.digits)}var Or,Sr;!function(t){t[t.Silent=0]="Silent",t[t.App=1]="App",t[t.Counterparty=2]="Counterparty"}(Or||(Or={}));class Nr{rootKey;constructor(t){this.rootKey="anyone"===t?new te(1):t}derivePublicKey(t,e,r,i=!1){return r=this.normalizeCounterparty(r),i?this.rootKey.deriveChild(r,this.computeInvoiceNumber(t,e)).toPublicKey():r.deriveChild(this.rootKey,this.computeInvoiceNumber(t,e))}derivePrivateKey(t,e,r){return r=this.normalizeCounterparty(r),this.rootKey.deriveChild(r,this.computeInvoiceNumber(t,e))}deriveSymmetricKey(t,e,r){if("anyone"===r)throw new Error("Symmetric keys (such as encryption keys or HMAC keys) should not be derivable by everyone, because messages would be decryptable by anyone who knows the identity public key of the user, and HMACs would be similarly forgeable.");r=this.normalizeCounterparty(r);const i=this.derivePublicKey(t,e,r),n=this.derivePrivateKey(t,e,r);return new ve(n.deriveSharedSecret(i).x.toArray())}revealCounterpartySecret(t){if("self"===t)throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");t=this.normalizeCounterparty(t);const e=this.rootKey.toPublicKey();if(this.rootKey.deriveChild(e,"test").toHex()===this.rootKey.deriveChild(t,"test").toHex())throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");return this.rootKey.deriveSharedSecret(t).encode(!0)}revealSpecificSecret(t,e,r){t=this.normalizeCounterparty(t);const i=this.rootKey.deriveSharedSecret(t),n=Et(this.computeInvoiceNumber(e,r),"utf8");return kt(i.encode(!0),n)}normalizeCounterparty(t){if(t)return"self"===t?this.rootKey.toPublicKey():"anyone"===t?new te(1).toPublicKey():"string"==typeof t?$t.fromString(t):t;throw new Error("counterparty must be self, anyone or a public key!")}computeInvoiceNumber(t,e){const r=t[0];if(!Number.isInteger(r)||r<0||r>2)throw new Error("Protocol security level must be 0, 1, or 2");const i=t[1].toLowerCase().trim();if(e.length>800)throw new Error("Key IDs must be 800 characters or less");if(e.length<1)throw new Error("Key IDs must be 1 character or more");if(i.length>400){if(!i.startsWith("specific linkage revelation "))throw new Error("Protocol names must be 400 characters or less");if(i.length>430)throw new Error("Specific linkage revelation protocol names must be 430 characters or less")}if(i.length<5)throw new Error("Protocol names must be 5 characters or more");if(i.includes(" "))throw new Error('Protocol names cannot contain multiple consecutive spaces (" ")');if(!/^[a-z0-9 ]+$/g.test(i))throw new Error("Protocol names can only contain letters, numbers and spaces");if(i.endsWith(" protocol"))throw new Error('No need to end your protocol name with " protocol"');return`${r}-${i}-${e}`}}class Er{keyDeriver;cache;maxCacheSize;constructor(t,e){this.keyDeriver=new Nr(t),this.cache=new Map,this.maxCacheSize=e?.maxCacheSize||1e3}derivePublicKey(t,e,r,i=!1){const n=this.generateCacheKey("derivePublicKey",t,e,r,i);if(this.cache.has(n))return this.cacheGet(n);{const s=this.keyDeriver.derivePublicKey(t,e,r,i);return this.cacheSet(n,s),s}}derivePrivateKey(t,e,r){const i=this.generateCacheKey("derivePrivateKey",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.derivePrivateKey(t,e,r);return this.cacheSet(i,n),n}}deriveSymmetricKey(t,e,r){const i=this.generateCacheKey("deriveSymmetricKey",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.deriveSymmetricKey(t,e,r);return this.cacheSet(i,n),n}}revealCounterpartySecret(t){const e=this.generateCacheKey("revealCounterpartySecret",t);if(this.cache.has(e))return this.cacheGet(e);{const r=this.keyDeriver.revealCounterpartySecret(t);return this.cacheSet(e,r),r}}revealSpecificSecret(t,e,r){const i=this.generateCacheKey("revealSpecificSecret",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.revealSpecificSecret(t,e,r);return this.cacheSet(i,n),n}}generateCacheKey(t,...e){return`${t}|${e.map((t=>this.serializeArgument(t))).join("|")}`}serializeArgument(t){return t instanceof $t||t instanceof te?t.toString():Array.isArray(t)?t.map((t=>this.serializeArgument(t))).join(","):"object"==typeof t&&null!==t?JSON.stringify(t):String(t)}cacheGet(t){const e=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,e),e}cacheSet(t,e){if(this.cache.size>=this.maxCacheSize){const t=this.cache.keys().next().value;this.cache.delete(t)}this.cache.set(t,e)}}class Ar extends Error{code;isError=!0;constructor(t,e=1,r){super(t),this.code=e,this.name=this.constructor.name,r?this.stack=r:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}!function(t){t[t.unknownError=1]="unknownError",t[t.unsupportedAction=2]="unsupportedAction",t[t.invalidHmac=3]="invalidHmac",t[t.invalidSignature=4]="invalidSignature"}(Sr||(Sr={}));const xr=Sr;class _r{keyDeriver;privilegedError="ProtoWallet is a single-keyring wallet, operating without context about whether its configured keyring is privileged.";constructor(t,e=Nr){this.keyDeriver=new e(t)}async createAction(t,e){throw new Ar("ProtoWallet does not support creating transactions.",xr.unsupportedAction)}async signAction(t,e){throw new Ar("ProtoWallet does not support creating transactions.",xr.unsupportedAction)}async abortAction(t,e){throw new Ar("ProtoWallet does not support aborting transactions.",xr.unsupportedAction)}async listActions(t,e){throw new Ar("ProtoWallet does not support retrieving transactions.",xr.unsupportedAction)}async internalizeAction(t,e){throw new Ar("ProtoWallet does not support internalizing transactions.",xr.unsupportedAction)}async listOutputs(t,e){throw new Ar("ProtoWallet does not support retrieving outputs.",xr.unsupportedAction)}async relinquishOutput(t,e){throw new Ar("ProtoWallet does not support deleting outputs.",xr.unsupportedAction)}async getPublicKey(t,e){if(t.privileged)throw new Ar(this.privilegedError);return t.identityKey?{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}:{publicKey:this.keyDeriver.derivePublicKey(t.protocolID,t.keyID,t.counterparty||"self",t.forSelf).toString()}}async revealCounterpartyKeyLinkage(t,e){if(t.privileged)throw new Ar(this.privilegedError);const{publicKey:r}=await this.getPublicKey({identityKey:!0}),i=this.keyDeriver.revealCounterpartySecret(t.counterparty),n=(new Pe).generateProof(this.keyDeriver.rootKey,this.keyDeriver.rootKey.toPublicKey(),$t.fromString(t.counterparty),Dt.fromDER(i)),s=[...n.R.encode(!0),...n.SPrime.encode(!0),...n.z.toArray()],a=(new Date).toISOString(),{ciphertext:o}=await this.encrypt({plaintext:i,protocolID:[2,"counterparty linkage revelation"],keyID:a,counterparty:t.verifier}),{ciphertext:c}=await this.encrypt({plaintext:s,protocolID:[2,"counterparty linkage revelation"],keyID:a,counterparty:t.verifier});return{prover:r,verifier:t.verifier,counterparty:t.counterparty,revelationTime:a,encryptedLinkage:o,encryptedLinkageProof:c}}async revealSpecificKeyLinkage(t,e){if(t.privileged)throw new Ar(this.privilegedError);const{publicKey:r}=await this.getPublicKey({identityKey:!0}),i=this.keyDeriver.revealSpecificSecret(t.counterparty,t.protocolID,t.keyID),{ciphertext:n}=await this.encrypt({plaintext:i,protocolID:[2,`specific linkage revelation ${t.protocolID[0]} ${t.protocolID[1]}`],keyID:t.keyID,counterparty:t.verifier}),{ciphertext:s}=await this.encrypt({plaintext:[0],protocolID:[2,`specific linkage revelation ${t.protocolID[0]} ${t.protocolID[1]}`],keyID:t.keyID,counterparty:t.verifier});return{prover:r,verifier:t.verifier,counterparty:t.counterparty,protocolID:t.protocolID,keyID:t.keyID,encryptedLinkage:n,encryptedLinkageProof:s,proofType:0}}async encrypt(t,e){if(t.privileged)throw new Ar(this.privilegedError);return{ciphertext:this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self").encrypt(t.plaintext)}}async decrypt(t,e){if(t.privileged)throw new Ar(this.privilegedError);return{plaintext:this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self").decrypt(t.ciphertext)}}async createHmac(t,e){if(t.privileged)throw new Ar(this.privilegedError);const r=this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self");return{hmac:kt(r.toArray(),t.data)}}async verifyHmac(t,e){if(t.privileged)throw new Ar(this.privilegedError);const r=this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self"),i=kt(r.toArray(),t.data).toString()===t.hmac.toString();if(!i)throw new Ar("HMAC is not valid",xr.invalidHmac);return{valid:i}}async createSignature(t,e){if(t.privileged)throw new Ar(this.privilegedError);let r=t.hashToDirectlySign;r||(r=gt(t.data));const i=this.keyDeriver.derivePrivateKey(t.protocolID,t.keyID,t.counterparty||"anyone");return{signature:Wt(new c(r),i,!0).toDER()}}async verifySignature(t,e){if(t.privileged)throw new Ar(this.privilegedError);let r=t.hashToDirectlyVerify;r||(r=gt(t.data));const i=this.keyDeriver.derivePublicKey(t.protocolID,t.keyID,t.counterparty||"self",t.forSelf),n=jt(new c(r),Lt.fromDER(t.signature),i);if(!n)throw new Ar("Signature is not valid",xr.invalidSignature);return{valid:n}}async acquireCertificate(t,e){throw new Ar("ProtoWallet does not support acquiring certificates.",xr.unsupportedAction)}async listCertificates(t,e){throw new Ar("ProtoWallet does not support retrieving certificates.",xr.unsupportedAction)}async proveCertificate(t,e){throw new Ar("ProtoWallet does not support proving certificates.",xr.unsupportedAction)}async relinquishCertificate(t,e){throw new Ar("ProtoWallet does not support deleting certificates.",xr.unsupportedAction)}async discoverByIdentityKey(t,e){throw new Ar("ProtoWallet does not support resolving identities.",xr.unsupportedAction)}async discoverByAttributes(t,e){throw new Ar("ProtoWallet does not support resolving identities.",xr.unsupportedAction)}async isAuthenticated(t,e){return{authenticated:!0}}async waitForAuthentication(t,e){return{authenticated:!0}}async getHeight(t,e){throw new Ar("ProtoWallet does not support blockchain tracking.",xr.unsupportedAction)}async getHeaderForHeight(t,e){throw new Ar("ProtoWallet does not support blockchain tracking.",xr.unsupportedAction)}async getNetwork(t,e){return{network:"mainnet"}}async getVersion(t,e){return{version:"proto-1.0.0"}}}class Mr{CWI;constructor(){if("object"!=typeof window)throw new Error("The window.CWI substrate requires a global window object.");if("object"!=typeof window.CWI)throw new Error("The window.CWI interface does not appear to be bound to the window object.");this.CWI=window.CWI}async createAction(t,e){return this.CWI.createAction(t,e)}async signAction(t,e){return this.CWI.signAction(t,e)}async abortAction(t,e){return this.CWI.abortAction(t,e)}async listActions(t,e){return this.CWI.listActions(t,e)}async internalizeAction(t,e){return this.CWI.internalizeAction(t,e)}async listOutputs(t,e){return this.CWI.listOutputs(t,e)}async relinquishOutput(t,e){return this.CWI.relinquishOutput(t,e)}async getPublicKey(t,e){return this.CWI.getPublicKey(t,e)}async revealCounterpartyKeyLinkage(t,e){return this.CWI.revealCounterpartyKeyLinkage(t,e)}async revealSpecificKeyLinkage(t,e){return this.CWI.revealSpecificKeyLinkage(t,e)}async encrypt(t,e){return this.CWI.encrypt(t,e)}async decrypt(t,e){return this.CWI.decrypt(t,e)}async createHmac(t,e){return this.CWI.createHmac(t,e)}async verifyHmac(t,e){return this.CWI.verifyHmac(t,e)}async createSignature(t,e){return this.CWI.createSignature(t,e)}async verifySignature(t,e){return this.CWI.verifySignature(t,e)}async acquireCertificate(t,e){return this.CWI.acquireCertificate(t,e)}async listCertificates(t,e){return this.CWI.listCertificates(t,e)}async proveCertificate(t,e){return this.CWI.proveCertificate(t,e)}async relinquishCertificate(t,e){return this.CWI.relinquishCertificate(t,e)}async discoverByIdentityKey(t,e){return this.CWI.discoverByIdentityKey(t,e)}async discoverByAttributes(t,e){return this.CWI.discoverByAttributes(t,e)}async isAuthenticated(t,e){return this.CWI.isAuthenticated(t,e)}async waitForAuthentication(t,e){return this.CWI.waitForAuthentication(t,e)}async getHeight(t,e){return this.CWI.getHeight(t,e)}async getHeaderForHeight(t,e){return this.CWI.getHeaderForHeight(t,e)}async getNetwork(t,e){return this.CWI.getNetwork(t,e)}async getVersion(t,e){return this.CWI.getVersion(t,e)}}class Tr{domain;constructor(t="*"){if("object"!=typeof window)throw new Error("The XDM substrate requires a global window object.");if("function"!=typeof window.postMessage)throw new Error("The window object does not seem to support postMessage calls.");this.domain=t}async invoke(t,e){return await new Promise(((r,i)=>{const n=_t(Yt(12)),s=async t=>{if("CWI"===t.data.type&&t.isTrusted&&t.data.id===n&&!t.data.isInvocation)if("function"==typeof window.removeEventListener&&window.removeEventListener("message",s),"error"===t.data.status){const e=new Ar(t.data.description,t.data.code);i(e)}else r(t.data.result)};window.addEventListener("message",s),window.parent.postMessage({type:"CWI",isInvocation:!0,id:n,call:t,args:e},this.domain)}))}async createAction(t){return await this.invoke("createAction",t)}async signAction(t){return await this.invoke("signAction",t)}async abortAction(t){return await this.invoke("abortAction",t)}async listActions(t){return await this.invoke("listActions",t)}async internalizeAction(t){return await this.invoke("internalizeAction",t)}async listOutputs(t){return await this.invoke("listOutputs",t)}async relinquishOutput(t){return await this.invoke("relinquishOutput",t)}async getPublicKey(t){return await this.invoke("getPublicKey",t)}async revealCounterpartyKeyLinkage(t){return await this.invoke("revealCounterpartyKeyLinkage",t)}async revealSpecificKeyLinkage(t){return await this.invoke("revealSpecificKeyLinkage",t)}async encrypt(t){return await this.invoke("encrypt",t)}async decrypt(t){return await this.invoke("decrypt",t)}async createHmac(t){return await this.invoke("createHmac",t)}async verifyHmac(t){return await this.invoke("verifyHmac",t)}async createSignature(t){return await this.invoke("createSignature",t)}async verifySignature(t){return await this.invoke("verifySignature",t)}async acquireCertificate(t){return await this.invoke("acquireCertificate",t)}async listCertificates(t){return await this.invoke("listCertificates",t)}async proveCertificate(t){return await this.invoke("proveCertificate",t)}async relinquishCertificate(t){return await this.invoke("relinquishCertificate",t)}async discoverByIdentityKey(t){return await this.invoke("discoverByIdentityKey",t)}async discoverByAttributes(t){return await this.invoke("discoverByAttributes",t)}async isAuthenticated(t){return await this.invoke("isAuthenticated",t)}async waitForAuthentication(t){return await this.invoke("waitForAuthentication",t)}async getHeight(t){return await this.invoke("getHeight",t)}async getHeaderForHeight(t){return await this.invoke("getHeaderForHeight",t)}async getNetwork(t){return await this.invoke("getNetwork",t)}async getVersion(t){return await this.invoke("getVersion",t)}}class Fr{type;serialNumber;subject;certifier;revocationOutpoint;fields;signature;constructor(t,e,r,i,n,s,a){this.type=t,this.serialNumber=e,this.subject=r,this.certifier=i,this.revocationOutpoint=n,this.fields=s,this.signature=a}toBin(t=!0){const e=new Rt,r=Et(this.type,"base64");e.write(r);const i=Et(this.serialNumber,"base64");e.write(i);const n=Et(this.subject,"hex");e.write(n);const s=Et(this.certifier,"hex");e.write(s);const[a,o]=this.revocationOutpoint.split("."),c=Et(a,"hex");e.write(c),e.writeVarIntNum(Number(o));const h=Object.entries(this.fields);e.writeVarIntNum(h.length);for(const[t,r]of h){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"utf8");e.writeVarIntNum(n.length),e.write(n)}if(t&&this.signature&&this.signature.length>0){const t=Et(this.signature,"hex");e.writeVarIntNum(t.length),e.write(t)}return e.toArray()}static fromBin(t){const e=new Ct(t),r=_t(e.read(32)),i=_t(e.read(32)),n=e.read(33),s=Nt(n),a=e.read(33),o=Nt(a),c=e.read(32),h=`${Nt(c)}.${e.readVarIntNum()}`,u=e.readVarIntNum(),d={};for(let t=0;t<u;t++){const t=e.readVarIntNum(),r=e.read(t),i=At(r),n=e.readVarIntNum(),s=e.read(n),a=At(s);d[i]=a}let l;if(!e.eof()){const t=e.readVarIntNum(),r=e.read(t);l=Nt(r)}return new Fr(r,i,s,o,h,d,l)}async verify(){const t=new _r("anyone"),e=this.toBin(!1),{valid:r}=await t.verifySignature({signature:Et(this.signature,"hex"),data:e,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`,counterparty:this.certifier});return r}async sign(t){const e=this.toBin(!1),{signature:r}=await t.createSignature({data:e,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`});this.signature=Nt(r)}}var Vr;!function(t){t[t.createAction=1]="createAction",t[t.signAction=2]="signAction",t[t.abortAction=3]="abortAction",t[t.listActions=4]="listActions",t[t.internalizeAction=5]="internalizeAction",t[t.listOutputs=6]="listOutputs",t[t.relinquishOutput=7]="relinquishOutput",t[t.getPublicKey=8]="getPublicKey",t[t.revealCounterpartyKeyLinkage=9]="revealCounterpartyKeyLinkage",t[t.revealSpecificKeyLinkage=10]="revealSpecificKeyLinkage",t[t.encrypt=11]="encrypt",t[t.decrypt=12]="decrypt",t[t.createHmac=13]="createHmac",t[t.verifyHmac=14]="verifyHmac",t[t.createSignature=15]="createSignature",t[t.verifySignature=16]="verifySignature",t[t.acquireCertificate=17]="acquireCertificate",t[t.listCertificates=18]="listCertificates",t[t.proveCertificate=19]="proveCertificate",t[t.relinquishCertificate=20]="relinquishCertificate",t[t.discoverByIdentityKey=21]="discoverByIdentityKey",t[t.discoverByAttributes=22]="discoverByAttributes",t[t.isAuthenticated=23]="isAuthenticated",t[t.waitForAuthentication=24]="waitForAuthentication",t[t.getHeight=25]="getHeight",t[t.getHeaderForHeight=26]="getHeaderForHeight",t[t.getNetwork=27]="getNetwork",t[t.getVersion=28]="getVersion"}(Vr||(Vr={}));const Br=Vr;class Rr{wire;constructor(t){this.wire=t}async transmit(t,e="",r=[]){const i=new Rt;i.writeUInt8(Br[t]);const n=Et(e,"utf8");i.writeUInt8(n.length),i.write(n),r.length>0&&i.write(r);const s=i.toArray(),a=await this.wire.transmitToWallet(s),o=new Ct(a),c=o.readUInt8();if(0===c)return o.read();{const t=o.readVarIntNum(),e=o.read(t),r=At(e),i=o.readVarIntNum(),n=o.read(i),s=At(n);throw new Ar(r,c,s)}}async createAction(t,e){const r=new Rt,i=Et(t.description,"utf8");if(r.writeVarIntNum(i.length),r.write(i),t.inputBEEF?(r.writeVarIntNum(t.inputBEEF.length),r.write(t.inputBEEF)):r.writeVarIntNum(-1),t.inputs){r.writeVarIntNum(t.inputs.length);for(const e of t.inputs){if(r.write(this.encodeOutpoint(e.outpoint)),e.unlockingScript){const t=Et(e.unlockingScript,"hex");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1),r.writeVarIntNum(e.unlockingScriptLength);const t=Et(e.inputDescription,"utf8");r.writeVarIntNum(t.length),r.write(t),"number"==typeof e.sequenceNumber?r.writeVarIntNum(e.sequenceNumber):r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if(t.outputs){r.writeVarIntNum(t.outputs.length);for(const e of t.outputs){const t=Et(e.lockingScript,"hex");r.writeVarIntNum(t.length),r.write(t),r.writeVarIntNum(e.satoshis);const i=Et(e.outputDescription,"utf8");if(r.writeVarIntNum(i.length),r.write(i),e.basket){const t=Et(e.basket,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1);if(e.customInstructions){const t=Et(e.customInstructions,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1);if(e.tags){r.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Et(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if("number"==typeof t.lockTime?r.writeVarIntNum(t.lockTime):r.writeVarIntNum(-1),"number"==typeof t.version?r.writeVarIntNum(t.version):r.writeVarIntNum(-1),t.labels){r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(-1);if(t.options){if(r.writeInt8(1),"boolean"==typeof t.options.signAndProcess?r.writeInt8(t.options.signAndProcess?1:0):r.writeInt8(-1),"boolean"==typeof t.options.acceptDelayedBroadcast?r.writeInt8(t.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"known"===t.options.trustSelf?r.writeInt8(1):r.writeInt8(-1),t.options.knownTxids){r.writeVarIntNum(t.options.knownTxids.length);for(const e of t.options.knownTxids){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);if("boolean"==typeof t.options.returnTXIDOnly?r.writeInt8(t.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof t.options.noSend?r.writeInt8(t.options.noSend?1:0):r.writeInt8(-1),t.options.noSendChange){r.writeVarIntNum(t.options.noSendChange.length);for(const e of t.options.noSendChange)r.write(this.encodeOutpoint(e))}else r.writeVarIntNum(-1);if(t.options.sendWith){r.writeVarIntNum(t.options.sendWith.length);for(const e of t.options.sendWith){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);"boolean"==typeof t.options.randomizeOutputs?r.writeInt8(t.options.randomizeOutputs?1:0):r.writeInt8(-1)}else r.writeInt8(0);const n=await this.transmit("createAction",e,r.toArray()),s=new Ct(n),a={};if(1===s.readInt8()){const t=s.read(32);a.txid=Nt(t)}if(1===s.readInt8()){const t=s.readVarIntNum();a.tx=s.read(t)}const o=s.readVarIntNum();if(o>=0){a.noSendChange=[];for(let t=0;t<o;t++){const t=this.readOutpoint(s);a.noSendChange.push(t)}}const c=s.readVarIntNum();if(c>=0){a.sendWithResults=[];for(let t=0;t<c;t++){const t=s.read(32),e=Nt(t),r=s.readInt8();let i;1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),a.sendWithResults.push({txid:e,status:i})}}if(1===s.readInt8()){const t=s.readVarIntNum(),e=s.read(t),r=s.readVarIntNum(),i=s.read(r);a.signableTransaction={tx:e,reference:_t(i)}}return a}async signAction(t,e){const r=new Rt,i=Object.keys(t.spends);r.writeVarIntNum(i.length);for(const e of i){r.writeVarIntNum(Number(e));const i=t.spends[Number(e)],n=Et(i.unlockingScript,"hex");r.writeVarIntNum(n.length),r.write(n),"number"==typeof i.sequenceNumber?r.writeVarIntNum(i.sequenceNumber):r.writeVarIntNum(-1)}const n=Et(t.reference,"base64");if(r.writeVarIntNum(n.length),r.write(n),t.options)if(r.writeInt8(1),"boolean"==typeof t.options.acceptDelayedBroadcast?r.writeInt8(t.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"boolean"==typeof t.options.returnTXIDOnly?r.writeInt8(t.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof t.options.noSend?r.writeInt8(t.options.noSend?1:0):r.writeInt8(-1),t.options.sendWith){r.writeVarIntNum(t.options.sendWith.length);for(const e of t.options.sendWith){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);else r.writeInt8(0);const s=await this.transmit("signAction",e,r.toArray()),a=new Ct(s),o={};if(1===a.readInt8()){const t=a.read(32);o.txid=Nt(t)}if(1===a.readInt8()){const t=a.readVarIntNum();o.tx=a.read(t)}const c=a.readVarIntNum();if(c>=0){o.sendWithResults=[];for(let t=0;t<c;t++){const t=a.read(32),e=Nt(t),r=a.readInt8();let i;1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),o.sendWithResults.push({txid:e,status:i})}}return o}async abortAction(t,e){return await this.transmit("abortAction",e,Et(t.reference,"base64")),{aborted:!0}}async listActions(t,e){const r=new Rt;r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}"any"===t.labelQueryMode?r.writeInt8(1):"all"===t.labelQueryMode?r.writeInt8(2):r.writeInt8(-1);const i=[t.includeLabels,t.includeInputs,t.includeInputSourceLockingScripts,t.includeInputUnlockingScripts,t.includeOutputs,t.includeOutputLockingScripts];for(const t of i)"boolean"==typeof t?r.writeInt8(t?1:0):r.writeInt8(-1);"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("listActions",e,r.toArray()),s=new Ct(n),a=s.readVarIntNum(),o=[];for(let t=0;t<a;t++){const t=s.read(32),e=Nt(t),r=s.readVarIntNum(),i=s.readInt8();let n;switch(i){case 1:n="completed";break;case 2:n="unprocessed";break;case 3:n="sending";break;case 4:n="unproven";break;case 5:n="unsigned";break;case 6:n="nosend";break;case 7:n="nonfinal";break;default:throw new Error(`Unknown status code: ${i}`)}const a=1===s.readInt8(),c=s.readVarIntNum(),h=s.read(c),u={txid:e,satoshis:r,status:n,isOutgoing:a,description:At(h),version:0,lockTime:0},d=s.readVarIntNum();if(d>=0){u.labels=[];for(let t=0;t<d;t++){const t=s.readVarIntNum(),e=s.read(t);u.labels.push(At(e))}}u.version=s.readVarIntNum(),u.lockTime=s.readVarIntNum();const l=s.readVarIntNum();if(l>=0){u.inputs=[];for(let t=0;t<l;t++){const t=this.readOutpoint(s),e=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const t=s.read(r);i=Nt(t)}const n=s.readVarIntNum();let a;if(n>=0){const t=s.read(n);a=Nt(t)}const o=s.readVarIntNum(),c=s.read(o),h=At(c),d=s.readVarIntNum();u.inputs.push({sourceOutpoint:t,sourceSatoshis:e,sourceLockingScript:i,unlockingScript:a,inputDescription:h,sequenceNumber:d})}}const f=s.readVarIntNum();if(f>=0){u.outputs=[];for(let t=0;t<f;t++){const t=s.readVarIntNum(),e=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const t=s.read(r);i=Nt(t)}const n=1===s.readInt8(),a=s.readVarIntNum(),o=s.read(a),c=At(o),h=s.readVarIntNum();let d;if(h>=0){const t=s.read(h);d=At(t)}const l=s.readVarIntNum(),f=[];if(l>=0)for(let t=0;t<l;t++){const t=s.readVarIntNum(),e=s.read(t);f.push(At(e))}const p=s.readVarIntNum();let b;if(p>=0){const t=s.read(p);b=At(t)}u.outputs.push({outputIndex:t,satoshis:e,lockingScript:i,spendable:n,outputDescription:c,basket:d,tags:f,customInstructions:b})}}o.push(u)}return{totalActions:a,actions:o}}async internalizeAction(t,e){const r=new Rt;r.writeVarIntNum(t.tx.length),r.write(t.tx),r.writeVarIntNum(t.outputs.length);for(const e of t.outputs)if(r.writeVarIntNum(e.outputIndex),"wallet payment"===e.protocol){r.writeUInt8(1),r.write(Et(e.paymentRemittance.senderIdentityKey,"hex"));const t=Et(e.paymentRemittance.derivationPrefix,"base64");r.writeVarIntNum(t.length),r.write(t);const i=Et(e.paymentRemittance.derivationSuffix,"base64");r.writeVarIntNum(i.length),r.write(i)}else{r.writeUInt8(2);const t=Et(e.insertionRemittance.basket,"utf8");r.writeVarIntNum(t.length),r.write(t),e.insertionRemittance.customInstructions;{const t=Et(e.insertionRemittance.customInstructions,"utf8");r.writeVarIntNum(t.length),r.write(t)}if("object"==typeof e.insertionRemittance.tags){r.writeVarIntNum(e.insertionRemittance.tags.length);for(const t of e.insertionRemittance.tags){const e=Et(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(0)}if("object"==typeof t.labels){r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(-1);const i=Et(t.description);return r.writeVarIntNum(i.length),r.write(i),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("internalizeAction",e,r.toArray()),{accepted:!0}}async listOutputs(t,e){const r=new Rt,i=Et(t.basket,"utf8");if(r.writeVarIntNum(i.length),r.write(i),"object"==typeof t.tags){r.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(0);"all"===t.tagQueryMode?r.writeInt8(1):"any"===t.tagQueryMode?r.writeInt8(2):r.writeInt8(-1),"locking scripts"===t.include?r.writeInt8(1):"entire transactions"===t.include?r.writeInt8(2):r.writeInt8(-1),"boolean"==typeof t.includeCustomInstructions?r.writeInt8(t.includeCustomInstructions?1:0):r.writeInt8(-1),"boolean"==typeof t.includeTags?r.writeInt8(t.includeTags?1:0):r.writeInt8(-1),"boolean"==typeof t.includeLabels?r.writeInt8(t.includeLabels?1:0):r.writeInt8(-1),"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("listOutputs",e,r.toArray()),s=new Ct(n),a=s.readVarIntNum(),o=s.readVarIntNum();let c;o>=0&&(c=s.read(o));const h=[];for(let t=0;t<a;t++){const t={spendable:!0,outpoint:this.readOutpoint(s),satoshis:s.readVarIntNum()},e=s.readVarIntNum();e>=0&&(t.lockingScript=Nt(s.read(e)));const r=s.readVarIntNum();r>=0&&(t.customInstructions=At(s.read(r)));const i=s.readVarIntNum();if(-1!==i){const e=[];for(let t=0;t<i;t++){const t=s.readVarIntNum();e.push(At(s.read(t)))}t.tags=e}const n=s.readVarIntNum();if(-1!==n){const e=[];for(let t=0;t<n;t++){const t=s.readVarIntNum();e.push(At(s.read(t)))}t.labels=e}h.push(t)}return{totalOutputs:a,BEEF:c,outputs:h}}async relinquishOutput(t,e){const r=new Rt,i=Et(t.basket,"utf8");return r.writeVarIntNum(i.length),r.write(i),r.write(this.encodeOutpoint(t.output)),await this.transmit("relinquishOutput",e,r.toArray()),{relinquished:!0}}encodeOutpoint(t){const e=new Rt,[r,i]=t.split(".");return e.write(Et(r,"hex")),e.writeVarIntNum(Number(i)),e.toArray()}readOutpoint(t){return`${Nt(t.read(32))}.${t.readVarIntNum()}`}async getPublicKey(t,e){const r=new Rt;r.writeUInt8(t.identityKey?1:0),t.identityKey?r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)):(r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"boolean"==typeof t.forSelf?r.writeInt8(t.forSelf?1:0):r.writeInt8(-1)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const i=await this.transmit("getPublicKey",e,r.toArray());return{publicKey:Nt(i)}}async revealCounterpartyKeyLinkage(t,e){const r=new Rt;r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)),r.write(Et(t.counterparty,"hex")),r.write(Et(t.verifier,"hex"));const i=await this.transmit("revealCounterpartyKeyLinkage",e,r.toArray()),n=new Ct(i),s=Nt(n.read(33)),a=Nt(n.read(33)),o=Nt(n.read(33)),c=n.readVarIntNum(),h=At(n.read(c)),u=n.readVarIntNum(),d=n.read(u),l=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,revelationTime:h,encryptedLinkage:d,encryptedLinkageProof:n.read(l)}}async revealSpecificKeyLinkage(t,e){const r=new Rt;r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.write(Et(t.verifier,"hex"));const i=await this.transmit("revealSpecificKeyLinkage",e,r.toArray()),n=new Ct(i),s=Nt(n.read(33)),a=Nt(n.read(33)),o=Nt(n.read(33)),c=n.readUInt8(),h=n.readVarIntNum(),u=At(n.read(h)),d=n.readVarIntNum(),l=At(n.read(d)),f=n.readVarIntNum(),p=n.read(f),b=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,protocolID:[c,u],keyID:l,encryptedLinkage:p,encryptedLinkageProof:n.read(b),proofType:n.readUInt8()}}async encrypt(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.plaintext.length),r.write(t.plaintext),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{ciphertext:await this.transmit("encrypt",e,r.toArray())}}async decrypt(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.ciphertext.length),r.write(t.ciphertext),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{plaintext:await this.transmit("decrypt",e,r.toArray())}}async createHmac(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.data.length),r.write(t.data),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{hmac:await this.transmit("createHmac",e,r.toArray())}}async verifyHmac(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.write(t.hmac),r.writeVarIntNum(t.data.length),r.write(t.data),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("verifyHmac",e,r.toArray()),{valid:!0}}async createSignature(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"object"==typeof t.data?(r.writeUInt8(1),r.writeVarIntNum(t.data.length),r.write(t.data)):(r.writeUInt8(2),r.write(t.hashToDirectlySign)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{signature:await this.transmit("createSignature",e,r.toArray())}}async verifySignature(t,e){const r=new Rt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"boolean"==typeof t.forSelf?r.writeInt8(t.forSelf?1:0):r.writeInt8(-1),r.writeVarIntNum(t.signature.length),r.write(t.signature),"object"==typeof t.data?(r.writeUInt8(1),r.writeVarIntNum(t.data.length),r.write(t.data)):(r.writeUInt8(2),r.write(t.hashToDirectlyVerify)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("verifySignature",e,r.toArray()),{valid:!0}}encodeKeyRelatedParams(t,e,r,i,n){const s=new Rt;s.writeUInt8(t[0]);const a=Et(t[1],"utf8");s.writeVarIntNum(a.length),s.write(a);const o=Et(e,"utf8");return s.writeVarIntNum(o.length),s.write(o),"string"!=typeof r?s.writeUInt8(0):"self"===r?s.writeUInt8(11):"anyone"===r?s.writeUInt8(12):s.write(Et(r,"hex")),s.write(this.encodePrivilegedParams(i,n)),s.toArray()}async acquireCertificate(t,e){const r=new Rt;r.write(Et(t.type,"base64")),r.write(Et(t.certifier,"hex"));const i=Object.entries(t.fields);r.writeVarIntNum(i.length);for(const[t,e]of i){const i=Et(t,"utf8"),n=Et(e,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}if(r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)),r.writeUInt8("direct"===t.acquisitionProtocol?1:2),"direct"===t.acquisitionProtocol){r.write(Et(t.serialNumber,"base64")),r.write(this.encodeOutpoint(t.revocationOutpoint));const e=Et(t.signature,"hex");r.writeVarIntNum(e.length),r.write(e);const i="certifier"!==t.keyringRevealer?Et(t.keyringRevealer,"hex"):[11];r.write(i);const n=Object.keys(t.keyringForSubject);r.writeVarIntNum(n.length);for(let e=0;e<n.length;e++){const i=Et(n[e],"utf8");r.writeVarIntNum(i.length),r.write(i);const s=Et(t.keyringForSubject[n[e]],"base64");r.writeVarIntNum(s.length),r.write(s)}}else{const e=Et(t.certifierUrl,"utf8");r.writeVarIntNum(e.length),r.write(e)}const n=await this.transmit("acquireCertificate",e,r.toArray()),s=Fr.fromBin(n);return{...s,signature:s.signature}}encodePrivilegedParams(t,e){const r=new Rt;if("boolean"==typeof t?r.writeInt8(t?1:0):r.writeInt8(-1),"string"==typeof e){const t=Et(e,"utf8");r.writeInt8(t.length),r.write(t)}else r.writeInt8(-1);return r.toArray()}async listCertificates(t,e){const r=new Rt;r.writeVarIntNum(t.certifiers.length);for(let e=0;e<t.certifiers.length;e++)r.write(Et(t.certifiers[e],"hex"));r.writeVarIntNum(t.types.length);for(let e=0;e<t.types.length;e++)r.write(Et(t.types[e],"base64"));"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason));const i=await this.transmit("listCertificates",e,r.toArray()),n=new Ct(i),s=n.readVarIntNum(),a=[];for(let t=0;t<s;t++){const t=n.readVarIntNum(),e=n.read(t),r=Fr.fromBin(e);a.push({...r,signature:r.signature})}return{totalCertificates:s,certificates:a}}async proveCertificate(t,e){const r=new Rt,i=Et(t.certificate.type,"base64");r.write(i);const n=Et(t.certificate.subject,"hex");r.write(n);const s=Et(t.certificate.serialNumber,"base64");r.write(s);const a=Et(t.certificate.certifier,"hex");r.write(a);const o=this.encodeOutpoint(t.certificate.revocationOutpoint);r.write(o);const c=Et(t.certificate.signature,"hex");r.writeVarIntNum(c.length),r.write(c);const h=Object.entries(t.certificate.fields);r.writeVarIntNum(h.length);for(const[t,e]of h){const i=Et(t,"utf8"),n=Et(e,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}r.writeVarIntNum(t.fieldsToReveal.length);for(const e of t.fieldsToReveal){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}r.write(Et(t.verifier,"hex")),r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason));const u=await this.transmit("proveCertificate",e,r.toArray()),d=new Ct(u),l=d.readVarIntNum(),f={};for(let t=0;t<l;t++){const t=d.readVarIntNum(),e=At(d.read(t)),r=d.readVarIntNum();f[e]=_t(d.read(r))}return{keyringForVerifier:f}}async relinquishCertificate(t,e){const r=new Rt,i=Et(t.type,"base64");r.write(i);const n=Et(t.serialNumber,"base64");r.write(n);const s=Et(t.certifier,"hex");return r.write(s),await this.transmit("relinquishCertificate",e,r.toArray()),{relinquished:!0}}parseDiscoveryResult(t){const e=new Ct(t),r=e.readVarIntNum(),i=[];for(let t=0;t<r;t++){const t=e.readVarIntNum(),r=e.read(t),n=Fr.fromBin(r),s=e.readVarIntNum(),a=At(e.read(s)),o=e.readVarIntNum(),c=At(e.read(o)),h=e.readVarIntNum(),u=At(e.read(h)),d=e.readUInt8(),l={},f=e.readVarIntNum();for(let t=0;t<f;t++){const t=e.readVarIntNum(),r=At(e.read(t)),i=e.readVarIntNum();l[r]=e.read(i)}const p={},b=e.readVarIntNum();for(let t=0;t<b;t++){const t=e.readVarIntNum(),r=At(e.read(t)),i=e.readVarIntNum();p[r]=At(e.read(i))}i.push({...n,signature:n.signature,certifierInfo:{iconUrl:c,name:a,description:u,trust:d},publiclyRevealedKeyring:l,decryptedFields:p})}return{totalCertificates:r,certificates:i}}async discoverByIdentityKey(t,e){const r=new Rt;r.write(Et(t.identityKey,"hex")),"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const i=await this.transmit("discoverByIdentityKey",e,r.toArray());return this.parseDiscoveryResult(i)}async discoverByAttributes(t,e){const r=new Rt,i=Object.keys(t.attributes);r.writeVarIntNum(i.length);for(let e=0;e<i.length;e++)r.writeVarIntNum(i[e].length),r.write(Et(i[e],"utf8")),r.writeVarIntNum(t.attributes[i[e]].length),r.write(Et(t.attributes[i[e]],"utf8"));"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("discoverByAttributes",e,r.toArray());return this.parseDiscoveryResult(n)}async isAuthenticated(t,e){return{authenticated:!!(await this.transmit("isAuthenticated",e))[0]}}async waitForAuthentication(t,e){return await this.transmit("waitForAuthentication",e),{authenticated:!0}}async getHeight(t,e){const r=await this.transmit("getHeight",e);return{height:new Ct(r).readVarIntNum()}}async getHeaderForHeight(t,e){const r=new Rt;r.writeVarIntNum(t.height);const i=await this.transmit("getHeaderForHeight",e,r.toArray());return{header:Nt(i)}}async getNetwork(t,e){return{network:0===(await this.transmit("getNetwork",e))[0]?"mainnet":"testnet"}}async getVersion(t,e){const r=await this.transmit("getVersion",e);return{version:At(r)}}}class Cr{baseUrl;httpClient;originator;constructor(t,e="http://localhost:3301",r=fetch){this.baseUrl=e,this.httpClient=r,this.originator=t}async transmitToWallet(t){const e=new Ct(t),r=e.readUInt8(),i=Br[r];if(!i)throw new Error(`Invalid call code: ${r}`);const n=e.readUInt8();let s;if(n>0){const t=e.read(n);s=At(t)}const a=e.read(),o=await fetch(`${this.baseUrl}/${i}`,{method:"POST",headers:{"Content-Type":"application/octet-stream",Origin:s},body:new Uint8Array(a)}),c=await o.arrayBuffer();return Array.from(new Uint8Array(c))}}class Hr{baseUrl;httpClient;originator;api;constructor(t,e="http://localhost:3321",r=fetch){this.baseUrl=e,this.originator=t,this.httpClient=r,this.api=async(t,e)=>{try{return await(await r(`${this.baseUrl}/${t}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Originator:this.originator},body:JSON.stringify(e)})).json()}catch(r){throw console.log({HTTPWalletJSON:{call:t,args:e,error:r}}),r}}}async createAction(t){return await this.api("createAction",t)}async signAction(t){return await this.api("signAction",t)}async abortAction(t){return await this.api("abortAction",t)}async listActions(t){return await this.api("listActions",t)}async internalizeAction(t){return await this.api("internalizeAction",t)}async listOutputs(t){return await this.api("listOutputs",t)}async relinquishOutput(t){return await this.api("relinquishOutput",t)}async getPublicKey(t){return await this.api("getPublicKey",t)}async revealCounterpartyKeyLinkage(t){return await this.api("revealCounterpartyKeyLinkage",t)}async revealSpecificKeyLinkage(t){return await this.api("revealSpecificKeyLinkage",t)}async encrypt(t){return await this.api("encrypt",t)}async decrypt(t){return await this.api("decrypt",t)}async createHmac(t){return await this.api("createHmac",t)}async verifyHmac(t){return await this.api("verifyHmac",t)}async createSignature(t){return await this.api("createSignature",t)}async verifySignature(t){return await this.api("verifySignature",t)}async acquireCertificate(t){return await this.api("acquireCertificate",t)}async listCertificates(t){return await this.api("listCertificates",t)}async proveCertificate(t){return await this.api("proveCertificate",t)}async relinquishCertificate(t){return await this.api("relinquishCertificate",t)}async discoverByIdentityKey(t){return await this.api("discoverByIdentityKey",t)}async discoverByAttributes(t){return await this.api("discoverByAttributes",t)}async isAuthenticated(t){return await this.api("isAuthenticated",t)}async waitForAuthentication(t){return await this.api("waitForAuthentication",t)}async getHeight(t){return await this.api("getHeight",t)}async getHeaderForHeight(t){return await this.api("getHeaderForHeight",t)}async getNetwork(t){return await this.api("getNetwork",t)}async getVersion(t){return await this.api("getVersion",t)}}class Dr{substrate;originator;constructor(t="auto",e){"Cicada"===t&&(t=new Rr(new Cr(e))),"window.CWI"===t&&(t=new Mr),"XDM"===t&&(t=new Tr),"json-api"===t&&(t=new Hr(e)),this.substrate=t,this.originator=e}async connectToSubstrate(){if("object"==typeof this.substrate)return;let t;const e=async e=>{let r;if(r="number"==typeof e?await Promise.race([t.getVersion({}),new Promise(((t,r)=>setTimeout((()=>r(new Error("Timed out."))),e)))]):await t.getVersion({}),"object"!=typeof r||"string"!=typeof r.version)throw new Error("Failed to use substrate.")};try{t=new Mr,await e(),this.substrate=t}catch(r){try{t=new Tr,await e(200),this.substrate=t}catch(r){try{t=new Rr(new Cr(this.originator)),await e(),this.substrate=t}catch(r){try{t=new Hr(this.originator),await e(),this.substrate=t}catch(t){throw new Error("No wallet available over any communication substrate. Install a BSV wallet today!")}}}}}async createAction(t){return await this.connectToSubstrate(),await this.substrate.createAction(t,this.originator)}async signAction(t){return await this.connectToSubstrate(),await this.substrate.signAction(t,this.originator)}async abortAction(t){return await this.connectToSubstrate(),await this.substrate.abortAction(t,this.originator)}async listActions(t){return await this.connectToSubstrate(),await this.substrate.listActions(t,this.originator)}async internalizeAction(t){return await this.connectToSubstrate(),await this.substrate.internalizeAction(t,this.originator)}async listOutputs(t){return await this.connectToSubstrate(),await this.substrate.listOutputs(t,this.originator)}async relinquishOutput(t){return await this.connectToSubstrate(),await this.substrate.relinquishOutput(t,this.originator)}async getPublicKey(t){return await this.connectToSubstrate(),await this.substrate.getPublicKey(t,this.originator)}async revealCounterpartyKeyLinkage(t){return await this.connectToSubstrate(),await this.substrate.revealCounterpartyKeyLinkage(t,this.originator)}async revealSpecificKeyLinkage(t){return await this.connectToSubstrate(),await this.substrate.revealSpecificKeyLinkage(t,this.originator)}async encrypt(t){return await this.connectToSubstrate(),await this.substrate.encrypt(t,this.originator)}async decrypt(t){return await this.substrate.decrypt(t,this.originator)}async createHmac(t){return await this.connectToSubstrate(),await this.substrate.createHmac(t,this.originator)}async verifyHmac(t){return await this.connectToSubstrate(),await this.substrate.verifyHmac(t,this.originator)}async createSignature(t){return await this.connectToSubstrate(),await this.substrate.createSignature(t,this.originator)}async verifySignature(t){return await this.connectToSubstrate(),await this.substrate.verifySignature(t,this.originator)}async acquireCertificate(t){return await this.connectToSubstrate(),await this.substrate.acquireCertificate(t,this.originator)}async listCertificates(t){return await this.connectToSubstrate(),await this.substrate.listCertificates(t,this.originator)}async proveCertificate(t){return await this.connectToSubstrate(),await this.substrate.proveCertificate(t,this.originator)}async relinquishCertificate(t){return await this.connectToSubstrate(),await this.substrate.relinquishCertificate(t,this.originator)}async discoverByIdentityKey(t){return await this.connectToSubstrate(),await this.substrate.discoverByIdentityKey(t,this.originator)}async discoverByAttributes(t){return await this.connectToSubstrate(),await this.substrate.discoverByAttributes(t,this.originator)}async isAuthenticated(t={}){return await this.connectToSubstrate(),await this.substrate.isAuthenticated(t,this.originator)}async waitForAuthentication(t={}){return await this.connectToSubstrate(),await this.substrate.waitForAuthentication(t,this.originator)}async getHeight(t={}){return await this.connectToSubstrate(),await this.substrate.getHeight(t,this.originator)}async getHeaderForHeight(t){return await this.connectToSubstrate(),await this.substrate.getHeaderForHeight(t,this.originator)}async getNetwork(t={}){return await this.connectToSubstrate(),await this.substrate.getNetwork(t,this.originator)}async getVersion(t={}){return await this.connectToSubstrate(),await this.substrate.getVersion(t,this.originator)}}class Ur{wallet;constructor(t){this.wallet=t}decodeOutpoint(t){const e=t.read(32);return`${Nt(e)}.${t.readVarIntNum()}`}encodeOutpoint(t){const e=new Rt,[r,i]=t.split(".");return e.write(Et(r,"hex")),e.writeVarIntNum(Number(i)),e.toArray()}async transmitToWallet(t){const e=new Ct(t);try{const t=e.readUInt8(),r=Br[t];if(!r)throw new Error(`Invalid call code: ${t}`);const i=e.readUInt8(),n=e.read(i),s=At(n),a=e;switch(r){case"createAction":const t={},e=a.readVarIntNum(),i=a.read(e);t.description=At(i);const n=a.readVarIntNum();t.inputBEEF=n>=0?a.read(n):void 0;const o=a.readVarIntNum();if(o>=0){t.inputs=[];for(let e=0;e<o;e++){const e={};e.outpoint=this.decodeOutpoint(a);const r=a.readVarIntNum();if(r>=0){const t=a.read(r);e.unlockingScript=Nt(t)}else{e.unlockingScript=void 0;const t=a.readVarIntNum();e.unlockingScriptLength=t}const i=a.readVarIntNum(),n=a.read(i);e.inputDescription=At(n);const s=a.readVarIntNum();e.sequenceNumber=s>=0?s:void 0,t.inputs.push(e)}}else t.inputs=void 0;const c=a.readVarIntNum();if(c>=0){t.outputs=[];for(let e=0;e<c;e++){const e={},r=a.readVarIntNum(),i=a.read(r);e.lockingScript=Nt(i),e.satoshis=a.readVarIntNum();const n=a.readVarIntNum(),s=a.read(n);e.outputDescription=At(s);const o=a.readVarIntNum();if(o>=0){const t=a.read(o);e.basket=At(t)}else e.basket=void 0;const c=a.readVarIntNum();if(c>=0){const t=a.read(c);e.customInstructions=At(t)}else e.customInstructions=void 0;const h=a.readVarIntNum();if(h>=0){e.tags=[];for(let t=0;t<h;t++){const t=a.readVarIntNum(),r=a.read(t),i=At(r);e.tags.push(i)}}else e.tags=void 0;t.outputs.push(e)}}else t.outputs=void 0;const h=a.readVarIntNum();t.lockTime=h>=0?h:void 0;const u=a.readVarIntNum();t.version=u>=0?u:void 0;const d=a.readVarIntNum();if(d>=0){t.labels=[];for(let e=0;e<d;e++){const e=a.readVarIntNum(),r=a.read(e),i=At(r);t.labels.push(i)}}else t.labels=void 0;if(1===a.readInt8()){t.options={};const e=a.readInt8();t.options.signAndProcess=-1===e?void 0:1===e;const r=a.readInt8();t.options.acceptDelayedBroadcast=-1===r?void 0:1===r;const i=a.readInt8();-1===i?t.options.trustSelf=void 0:1===i&&(t.options.trustSelf="known");const n=a.readVarIntNum();if(n>=0){t.options.knownTxids=[];for(let e=0;e<n;e++){const e=a.read(32),r=Nt(e);t.options.knownTxids.push(r)}}else t.options.knownTxids=void 0;const s=a.readInt8();t.options.returnTXIDOnly=-1===s?void 0:1===s;const o=a.readInt8();t.options.noSend=-1===o?void 0:1===o;const c=a.readVarIntNum();if(c>=0){t.options.noSendChange=[];for(let e=0;e<c;e++){const e=this.decodeOutpoint(a);t.options.noSendChange.push(e)}}else t.options.noSendChange=void 0;const h=a.readVarIntNum();if(h>=0){t.options.sendWith=[];for(let e=0;e<h;e++){const e=a.read(32),r=Nt(e);t.options.sendWith.push(r)}}else t.options.sendWith=void 0;const u=a.readInt8();t.options.randomizeOutputs=-1===u?void 0:1===u}else t.options=void 0;const l=await this.wallet.createAction(t,s),f=new Rt;if(l.txid?(f.writeInt8(1),f.write(Et(l.txid,"hex"))):f.writeInt8(0),l.tx?(f.writeInt8(1),f.writeVarIntNum(l.tx.length),f.write(l.tx)):f.writeInt8(0),l.noSendChange){f.writeVarIntNum(l.noSendChange.length);for(const t of l.noSendChange)f.write(this.encodeOutpoint(t))}else f.writeVarIntNum(-1);if(l.sendWithResults){f.writeVarIntNum(l.sendWithResults.length);for(const t of l.sendWithResults){let e;f.write(Et(t.txid,"hex")),"unproven"===t.status?e=1:"sending"===t.status?e=2:"failed"===t.status&&(e=3),f.writeInt8(e)}}else f.writeVarIntNum(-1);if(l.signableTransaction){f.writeInt8(1),f.writeVarIntNum(l.signableTransaction.tx.length),f.write(l.signableTransaction.tx);const t=Et(l.signableTransaction.reference,"base64");f.writeVarIntNum(t.length),f.write(t)}else f.writeInt8(0);const p=new Rt;return p.writeUInt8(0),p.write(f.toArray()),p.toArray();case"signAction":{const t={},e=a.readVarIntNum();t.spends={};for(let r=0;r<e;r++){const e=a.readVarIntNum(),r={},i=a.readVarIntNum(),n=a.read(i);r.unlockingScript=Nt(n);const s=a.readVarIntNum();r.sequenceNumber=s>=0?s:void 0,t.spends[e]=r}const r=a.readVarIntNum(),i=a.read(r);if(t.reference=_t(i),1===a.readInt8()){t.options={};const e=a.readInt8();t.options.acceptDelayedBroadcast=-1===e?void 0:1===e;const r=a.readInt8();t.options.returnTXIDOnly=-1===r?void 0:1===r;const i=a.readInt8();t.options.noSend=-1===i?void 0:1===i;const n=a.readVarIntNum();if(n>=0){t.options.sendWith=[];for(let e=0;e<n;e++){const e=a.read(32),r=Nt(e);t.options.sendWith.push(r)}}else t.options.sendWith=void 0}else t.options=void 0;const n=await this.wallet.signAction(t,s),o=new Rt;if(n.txid?(o.writeInt8(1),o.write(Et(n.txid,"hex"))):o.writeInt8(0),n.tx?(o.writeInt8(1),o.writeVarIntNum(n.tx.length),o.write(n.tx)):o.writeInt8(0),n.sendWithResults){o.writeVarIntNum(n.sendWithResults.length);for(const t of n.sendWithResults){let e;o.write(Et(t.txid,"hex")),"unproven"===t.status?e=1:"sending"===t.status?e=2:"failed"===t.status&&(e=3),o.writeInt8(e)}}else o.writeVarIntNum(-1);const c=new Rt;return c.writeUInt8(0),c.write(o.toArray()),c.toArray()}case"abortAction":{const t=_t(a.read());await this.wallet.abortAction({reference:t},s);const e=new Rt;return e.writeUInt8(0),e.toArray()}case"listActions":{const t={},e=a.readVarIntNum();t.labels=[];for(let r=0;r<e;r++){const e=a.readVarIntNum(),r=a.read(e);t.labels.push(At(r))}const r=a.readInt8();-1===r?t.labelQueryMode=void 0:1===r?t.labelQueryMode="any":2===r&&(t.labelQueryMode="all");const i=["includeLabels","includeInputs","includeInputSourceLockingScripts","includeInputUnlockingScripts","includeOutputs","includeOutputLockingScripts"];for(const e of i){const r=a.readInt8();t[e]=-1===r?void 0:1===r}const n=a.readVarIntNum();t.limit=n>=0?n:void 0;const o=a.readVarIntNum();t.offset=o>=0?o:void 0;const c=a.readInt8();t.seekPermission=c>=0?1===c:void 0;const h=await this.wallet.listActions(t,s),u=new Rt;u.writeVarIntNum(h.totalActions);for(const t of h.actions){let e;switch(u.write(Et(t.txid,"hex")),u.writeVarIntNum(t.satoshis),t.status){case"completed":e=1;break;case"unprocessed":e=2;break;case"sending":e=3;break;case"unproven":e=4;break;case"unsigned":e=5;break;case"nosend":e=6;break;case"nonfinal":e=7;break;default:e=-1}u.writeInt8(e),u.writeInt8(t.isOutgoing?1:0);const r=Et(t.description,"utf8");if(u.writeVarIntNum(r.length),u.write(r),void 0!==t.labels){u.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");u.writeVarIntNum(t.length),u.write(t)}}else u.writeVarIntNum(-1);if(u.writeVarIntNum(t.version),u.writeVarIntNum(t.lockTime),void 0!==t.inputs){u.writeVarIntNum(t.inputs.length);for(const e of t.inputs){if(u.write(this.encodeOutpoint(e.sourceOutpoint)),u.writeVarIntNum(e.sourceSatoshis),void 0!==e.sourceLockingScript){const t=Et(e.sourceLockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);if(void 0!==e.unlockingScript){const t=Et(e.unlockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);const t=Et(e.inputDescription,"utf8");u.writeVarIntNum(t.length),u.write(t),u.writeVarIntNum(e.sequenceNumber)}}else u.writeVarIntNum(-1);if(void 0!==t.outputs){u.writeVarIntNum(t.outputs.length);for(const e of t.outputs){if(u.writeVarIntNum(e.outputIndex),u.writeVarIntNum(e.satoshis),void 0!==e.lockingScript){const t=Et(e.lockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);u.writeInt8(e.spendable?1:0);const t=Et(e.outputDescription,"utf8");if(u.writeVarIntNum(t.length),u.write(t),void 0!==e.basket){const t=Et(e.basket,"utf8");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);if(void 0!==e.tags){u.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Et(t,"utf8");u.writeVarIntNum(e.length),u.write(e)}}else u.writeVarIntNum(-1);if(void 0!==e.customInstructions){const t=Et(e.customInstructions,"utf8");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1)}}else u.writeVarIntNum(-1)}const d=new Rt;return d.writeUInt8(0),d.write(u.toArray()),d.toArray()}case"internalizeAction":{const t={},e=a.readVarIntNum();t.tx=a.read(e);const r=a.readVarIntNum();t.outputs=[];for(let e=0;e<r;e++){const e={};e.outputIndex=a.readVarIntNum();const r=a.readUInt8();if(1===r){e.protocol="wallet payment",e.paymentRemittance={};const t=a.read(33);e.paymentRemittance.senderIdentityKey=Nt(t);const r=a.readVarIntNum(),i=a.read(r);e.paymentRemittance.derivationPrefix=_t(i);const n=a.readVarIntNum(),s=a.read(n);e.paymentRemittance.derivationSuffix=_t(s)}else if(2===r){e.protocol="basket insertion",e.insertionRemittance={};const t=a.readVarIntNum(),r=a.read(t);e.insertionRemittance.basket=At(r);const i=a.readVarIntNum();if(i>=0){const t=a.read(i);e.insertionRemittance.customInstructions=At(t)}const n=a.readVarIntNum();if(n>0){e.insertionRemittance.tags=[];for(let t=0;t<n;t++){const t=a.readVarIntNum(),r=a.read(t);e.insertionRemittance.tags.push(At(r))}}else e.insertionRemittance.tags=[]}t.outputs.push(e)}const i=a.readVarIntNum();if(i>=0){t.labels=[];for(let e=0;e<i;e++){const e=a.readVarIntNum();t.labels.push(At(a.read(e)))}}const n=a.readVarIntNum();t.description=At(a.read(n));const o=a.readInt8();t.seekPermission=o>=0?1===o:void 0,await this.wallet.internalizeAction(t,s);const c=new Rt;return c.writeUInt8(0),c.toArray()}case"listOutputs":{const t={},e=a.readVarIntNum(),r=a.read(e);t.basket=At(r);const i=a.readVarIntNum();if(i>0){t.tags=[];for(let e=0;e<i;e++){const e=a.readVarIntNum(),r=a.read(e);t.tags.push(At(r))}}else t.tags=void 0;const n=a.readInt8();t.tagQueryMode=1===n?"all":2===n?"any":void 0;const o=a.readInt8();t.include=1===o?"locking scripts":2===o?"entire transactions":void 0;const c=a.readInt8();t.includeCustomInstructions=-1===c?void 0:1===c;const h=a.readInt8();t.includeTags=-1===h?void 0:1===h;const u=a.readInt8();t.includeLabels=-1===u?void 0:1===u;const d=a.readVarIntNum();t.limit=d>=0?d:void 0;const l=a.readVarIntNum();t.offset=l>=0?l:void 0;const f=a.readInt8();t.seekPermission=f>=0?1===f:void 0;const p=await this.wallet.listOutputs(t,s),b=new Rt;b.writeVarIntNum(p.totalOutputs),p.BEEF?(b.writeVarIntNum(p.BEEF.length),b.write(p.BEEF)):b.writeVarIntNum(-1);for(const t of p.outputs){if(b.write(this.encodeOutpoint(t.outpoint)),b.writeVarIntNum(t.satoshis),void 0!==t.lockingScript){const e=Et(t.lockingScript,"hex");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1);if(void 0!==t.customInstructions){const e=Et(t.customInstructions,"utf8");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1);if(void 0!==t.tags){b.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Et(e,"utf8");b.writeVarIntNum(t.length),b.write(t)}}else b.writeVarIntNum(-1);if(void 0!==t.labels){b.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");b.writeVarIntNum(t.length),b.write(t)}}else b.writeVarIntNum(-1)}const m=new Rt;return m.writeUInt8(0),m.write(b.toArray()),m.toArray()}case"relinquishOutput":{const t={},e=a.readVarIntNum(),r=a.read(e);t.basket=At(r),t.output=this.decodeOutpoint(a),await this.wallet.relinquishOutput(t,s);const i=new Rt;return i.writeUInt8(0),i.toArray()}case"getPublicKey":{const t={},e=a.readUInt8();if(t.identityKey=1===e,t.identityKey){const e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1!==r){const e=a.read(r);t.privilegedReason=At(e)}else t.privilegedReason=void 0}else{t.protocolID=this.decodeProtocolID(a),t.keyID=this.decodeString(a),t.counterparty=this.decodeCounterparty(a);const e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1!==r){const e=a.read(r);t.privilegedReason=At(e)}else t.privilegedReason=void 0;const i=a.readInt8();t.forSelf=-1===i?void 0:1===i}const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.getPublicKey(t,s),n=new Rt;n.writeUInt8(0);const o=Et(i.publicKey,"hex");return n.write(o),n.toArray()}case"encrypt":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.plaintext=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.encrypt(t,s),n=new Rt;return n.writeUInt8(0),n.write(i.ciphertext),n.toArray()}case"decrypt":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.ciphertext=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.decrypt(t,s),n=new Rt;return n.writeUInt8(0),n.write(i.plaintext),n.toArray()}case"createHmac":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.data=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createHmac(t,s),n=new Rt;return n.writeUInt8(0),n.write(i.hmac),n.toArray()}case"verifyHmac":{const t=this.decodeKeyRelatedParams(a);t.hmac=a.read(32);const e=a.readVarIntNum();t.data=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0,await this.wallet.verifyHmac(t,s);const i=new Rt;return i.writeUInt8(0),i.toArray()}case"createSignature":{const t=this.decodeKeyRelatedParams(a),e=a.readUInt8();if(1===e){const e=a.readVarIntNum();t.data=a.read(e)}else 2===e&&(t.hashToDirectlySign=a.read(32));const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createSignature(t,s),n=new Rt;return n.writeUInt8(0),n.write(i.signature),n.toArray()}case"verifySignature":{const t=this.decodeKeyRelatedParams(a),e=a.readInt8();t.forSelf=-1===e?void 0:1===e;const r=a.readVarIntNum();t.signature=a.read(r);const i=a.readUInt8();if(1===i){const e=a.readVarIntNum();t.data=a.read(e)}else 2===i&&(t.hashToDirectlyVerify=a.read(32));const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0,await this.wallet.verifySignature(t,s);const o=new Rt;return o.writeUInt8(0),o.toArray()}case"isAuthenticated":{const t=await this.wallet.isAuthenticated({},s),e=new Rt;return e.writeUInt8(0),e.writeUInt8(t.authenticated?1:0),e.toArray()}case"waitForAuthentication":{await this.wallet.waitForAuthentication({},s);const t=new Rt;return t.writeUInt8(0),t.toArray()}case"getHeight":{const t=await this.wallet.getHeight({},s),e=new Rt;return e.writeUInt8(0),e.writeVarIntNum(t.height),e.toArray()}case"getHeaderForHeight":{const t={};t.height=a.readVarIntNum();const e=await this.wallet.getHeaderForHeight(t,s),r=new Rt;r.writeUInt8(0);const i=Et(e.header,"hex");return r.write(i),r.toArray()}case"getNetwork":{const t=await this.wallet.getNetwork({},s),e=new Rt;return e.writeUInt8(0),e.writeUInt8("mainnet"===t.network?0:1),e.toArray()}case"getVersion":{const t=await this.wallet.getVersion({},s),e=new Rt;e.writeUInt8(0);const r=Et(t.version,"utf8");return e.write(r),e.toArray()}case"revealCounterpartyKeyLinkage":{const t={},e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1===r)t.privilegedReason=void 0;else{const e=a.read(r);t.privilegedReason=At(e)}const i=a.read(33);t.counterparty=Nt(i);const n=a.read(33);t.verifier=Nt(n);const o=await this.wallet.revealCounterpartyKeyLinkage(t,s),c=new Rt;c.write(Et(o.prover,"hex")),c.write(Et(o.verifier,"hex")),c.write(Et(o.counterparty,"hex"));const h=Et(o.revelationTime,"utf8");c.writeVarIntNum(h.length),c.write(h),c.writeVarIntNum(o.encryptedLinkage.length),c.write(o.encryptedLinkage),c.writeVarIntNum(o.encryptedLinkageProof.length),c.write(o.encryptedLinkageProof);const u=new Rt;return u.writeUInt8(0),u.write(c.toArray()),u.toArray()}case"revealSpecificKeyLinkage":{const t=this.decodeKeyRelatedParams(a),e=a.read(33);t.verifier=Nt(e);const r=await this.wallet.revealSpecificKeyLinkage(t,s),i=new Rt;i.write(Et(r.prover,"hex")),i.write(Et(r.verifier,"hex")),i.write(Et(r.counterparty,"hex")),i.writeUInt8(r.protocolID[0]);const n=Et(r.protocolID[1],"utf8");i.writeVarIntNum(n.length),i.write(n);const o=Et(r.keyID,"utf8");i.writeVarIntNum(o.length),i.write(o),i.writeVarIntNum(r.encryptedLinkage.length),i.write(r.encryptedLinkage),i.writeVarIntNum(r.encryptedLinkageProof.length),i.write(r.encryptedLinkageProof),i.writeUInt8(r.proofType);const c=new Rt;return c.writeUInt8(0),c.write(i.toArray()),c.toArray()}case"acquireCertificate":{const t={},e=a.read(32);t.type=_t(e);const r=a.read(33);t.certifier=Nt(r);const i=a.readVarIntNum();t.fields={};for(let e=0;e<i;e++){const e=a.readVarIntNum(),r=a.read(e),i=At(r),n=a.readVarIntNum(),s=a.read(n),o=At(s);t.fields[i]=o}const n=a.readInt8();t.privileged=-1===n?void 0:1===n;const o=a.readInt8();if(-1===o)t.privilegedReason=void 0;else{const e=a.read(o);t.privilegedReason=At(e)}const c=a.readUInt8();if(t.acquisitionProtocol=1===c?"direct":"issuance","direct"===t.acquisitionProtocol){const e=a.read(32);t.serialNumber=_t(e),t.revocationOutpoint=this.decodeOutpoint(a);const r=a.readVarIntNum(),i=a.read(r);t.signature=Nt(i);const n=a.readUInt8();if(11===n)t.keyringRevealer="certifier";else{const e=[n].concat(a.read(32));t.keyringRevealer=Nt(e)}const s=a.readVarIntNum();t.keyringForSubject={};for(let e=0;e<s;e++){const e=a.readVarIntNum(),r=a.read(e),i=At(r),n=a.readVarIntNum(),s=_t(a.read(n));t.keyringForSubject[i]=s}}else{const e=a.readVarIntNum(),r=a.read(e);t.certifierUrl=At(r)}const h=await this.wallet.acquireCertificate(t,s),u=new Fr(h.type,h.serialNumber,h.subject,h.certifier,h.revocationOutpoint,h.fields,h.signature).toBin(),d=new Rt;return d.writeUInt8(0),d.write(u),d.toArray()}case"listCertificates":{const t={},e=a.readVarIntNum();t.certifiers=[];for(let r=0;r<e;r++){const e=a.read(33);t.certifiers.push(Nt(e))}const r=a.readVarIntNum();t.types=[];for(let e=0;e<r;e++){const e=a.read(32);t.types.push(_t(e))}const i=a.readVarIntNum();t.limit=i>=0?i:void 0;const n=a.readVarIntNum();t.offset=n>=0?n:void 0;const o=a.readInt8();t.privileged=-1===o?void 0:1===o;const c=a.readInt8();if(-1===c)t.privilegedReason=void 0;else{const e=a.read(c);t.privilegedReason=At(e)}const h=await this.wallet.listCertificates(t,s),u=new Rt;u.writeVarIntNum(h.totalCertificates);for(const t of h.certificates){const e=new Fr(t.type,t.serialNumber,t.subject,t.certifier,t.revocationOutpoint,t.fields,t.signature).toBin();u.writeVarIntNum(e.length),u.write(e)}const d=new Rt;return d.writeUInt8(0),d.write(u.toArray()),d.toArray()}case"proveCertificate":{const t={},e={},r=a.read(32);e.type=_t(r);const i=a.read(33);e.subject=Nt(i);const n=a.read(32);e.serialNumber=_t(n);const o=a.read(33);e.certifier=Nt(o),e.revocationOutpoint=this.decodeOutpoint(a);const c=a.readVarIntNum(),h=a.read(c);e.signature=Nt(h);const u=a.readVarIntNum();e.fields={};for(let t=0;t<u;t++){const t=a.readVarIntNum(),r=a.read(t),i=At(r),n=a.readVarIntNum(),s=a.read(n),o=At(s);e.fields[i]=o}t.certificate=e;const d=a.readVarIntNum();t.fieldsToReveal=[];for(let e=0;e<d;e++){const e=a.readVarIntNum(),r=a.read(e),i=At(r);t.fieldsToReveal.push(i)}const l=a.read(33);t.verifier=Nt(l);const f=a.readInt8();t.privileged=-1===f?void 0:1===f;const p=a.readInt8();if(-1===p)t.privilegedReason=void 0;else{const e=a.read(p);t.privilegedReason=At(e)}const b=await this.wallet.proveCertificate(t,s),m=new Rt,w=Object.entries(b.keyringForVerifier);m.writeVarIntNum(w.length);for(const[t,e]of w){const r=Et(t,"utf8");m.writeVarIntNum(r.length),m.write(r);const i=Et(e,"base64");m.writeVarIntNum(i.length),m.write(i)}const g=new Rt;return g.writeUInt8(0),g.write(m.toArray()),g.toArray()}case"relinquishCertificate":{const t={},e=a.read(32);t.type=_t(e);const r=a.read(32);t.serialNumber=_t(r);const i=a.read(33);t.certifier=Nt(i),await this.wallet.relinquishCertificate(t,s);const n=new Rt;return n.writeUInt8(0),n.toArray()}case"discoverByIdentityKey":{const t={},e=a.read(33);t.identityKey=Nt(e);const r=a.readVarIntNum();t.limit=r>=0?r:void 0;const i=a.readVarIntNum();t.offset=i>=0?i:void 0;const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByIdentityKey(t,s),c=this.serializeDiscoveryResult(o),h=new Rt;return h.writeUInt8(0),h.write(c),h.toArray()}case"discoverByAttributes":{const t={},e=a.readVarIntNum();t.attributes={};for(let r=0;r<e;r++){const e=a.readVarIntNum(),r=a.read(e),i=At(r),n=a.readVarIntNum(),s=a.read(n),o=At(s);t.attributes[i]=o}const r=a.readVarIntNum();t.limit=r>=0?r:void 0;const i=a.readVarIntNum();t.offset=i>=0?i:void 0;const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByAttributes(t,s),c=this.serializeDiscoveryResult(o),h=new Rt;return h.writeUInt8(0),h.write(c),h.toArray()}default:throw new Error(`Method ${r} not implemented`)}}catch(t){const e=new Rt;e.writeUInt8(t.code||1);const r=t.message||"Unknown error",i=Et(r,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=t.stack||"",s=Et(n,"utf8");return e.writeVarIntNum(s.length),e.write(s),e.toArray()}}decodeProtocolID(t){const e=t.readUInt8(),r=t.readVarIntNum(),i=t.read(r);return[e,At(i)]}decodeString(t){const e=t.readVarIntNum(),r=t.read(e);return At(r)}decodeCounterparty(t){const e=t.readUInt8();if(11===e)return"self";if(12===e)return"anyone";if(0!==e){const r=t.read(32);return Nt([e,...r])}}serializeDiscoveryResult(t){const e=new Rt;e.writeVarIntNum(t.totalCertificates);for(const r of t.certificates){const t=new Fr(r.type,r.serialNumber,r.subject,r.certifier,r.revocationOutpoint,r.fields,r.signaturre).toBin();e.writeVarIntNum(t.length),e.write(t);const i=Et(r.certifierInfo.name,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r.certifierInfo.iconUrl,"utf8");e.writeVarIntNum(n.length),e.write(n);const s=Et(r.certifierInfo.description,"utf8");e.writeVarIntNum(s.length),e.write(s),e.writeUInt8(r.certifierInfo.trust);const a=Object.entries(r.publiclyRevealedKeyring);e.writeVarIntNum(a.length);for(const[t,r]of a){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"base64");e.writeVarIntNum(n.length),e.write(n)}const o=Object.entries(r.decryptedFields);e.writeVarIntNum(o.length);for(const[t,r]of o){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"utf8");e.writeVarIntNum(n.length),e.write(n)}}return e.toArray()}decodeKeyRelatedParams(t){const e={};e.protocolID=this.decodeProtocolID(t);const r=t.readVarIntNum(),i=t.read(r);e.keyID=At(i),e.counterparty=this.decodeCounterparty(t);const n=t.readInt8();e.privileged=-1===n?void 0:1===n;const s=t.readInt8();if(-1===s)e.privilegedReason=void 0;else{const r=t.read(s);e.privilegedReason=At(r)}return e}}class Kr{pushDrop;static decode(t){const e=Be.decode(t);if(e.fields.length<4)throw new Error("Invalid SHIP/SLAP advertisement!");const r=At(e.fields[0]);if("SHIP"!==r&&"SLAP"!==r)throw new Error("Invalid protocol type!");return{protocol:r,identityKey:Nt(e.fields[1]),domain:At(e.fields[2]),topicOrService:At(e.fields[3])}}constructor(t){this.pushDrop=new Be(t)}async lock(t,e,r){const{publicKey:i}=await this.pushDrop.wallet.getPublicKey({identityKey:!0});return await this.pushDrop.lock([Et(t,"utf8"),Et(i,"hex"),Et(e,"utf8"),Et(r,"utf8")],[2,"SHIP"===t?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}unlock(t){return this.pushDrop.unlock([2,"SHIP"===t?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}}const Lr=["https://overlay.babbage.systems","https://overlay-example.babbage.systems","https://office.babbage.systems"];class qr{fetchClient;constructor(t=fetch){this.fetchClient=t}async lookup(t,e,r=5e3){if(!t.startsWith("https:"))throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const i=new Promise(((t,e)=>setTimeout((()=>e(new Error("Request timed out"))),r))),n=fetch(`${t}/lookup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({service:e.service,query:e.query})}),s=await Promise.race([n,i]);if(s.ok)return await s.json();throw new Error("Failed to facilitate lookup")}}class zr{facilitator;slapTrackers;hostOverrides;additionalHosts;constructor(t){const{facilitator:e,slapTrackers:r,hostOverrides:i,additionalHosts:n}=t??{};this.facilitator=e??new qr,this.slapTrackers=r??Lr,this.hostOverrides=i??{},this.additionalHosts=n??{}}async query(t,e){let r=[];if(r="ls_slap"===t.service?this.slapTrackers:this.hostOverrides[t.service]?this.hostOverrides[t.service]:await this.findCompetentHosts(t.service),this.additionalHosts[t.service]&&(r=[...r,...this.additionalHosts[t.service]]),r.length<1)throw new Error(`No competent hosts found by the SLAP trackers for lookup service: ${t.service}`);const i=(await Promise.allSettled(r.map((async r=>await this.facilitator.lookup(r,t,e))))).filter((t=>"fulfilled"===t.status)).map((t=>t.value));if(0===i.length)throw new Error("No successful responses from any hosts");if("freeform"===i[0].type)return i[0];{const t=new Map;for(const e of i)if("output-list"===e.type)try{for(const r of e.outputs)try{const e=`${Je.fromBEEF(r.beef).id("hex")}.${r.outputIndex}`;t.set(e,r)}catch(t){continue}}catch(t){continue}return{type:"output-list",outputs:Array.from(t.values())}}}async findCompetentHosts(t){const e={service:"ls_slap",query:{service:t}},r=await Promise.allSettled(this.slapTrackers.map((async t=>await this.facilitator.lookup(t,e,1e3)))),i=new Set;for(const e of r)if("fulfilled"===e.status){const r=e.value;if("output-list"!==r.type)continue;for(const e of r.outputs)try{const r=Je.fromBEEF(e.beef).outputs[e.outputIndex].lockingScript,n=Kr.decode(r);if(n.topicOrService!==t||"SLAP"!==n.protocol)continue;i.add(n.domain)}catch(t){continue}}return[...i]}}class Wr{httpClient;constructor(t=fetch){this.httpClient=t}async send(t,e){if(!t.startsWith("https:"))throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const r=await fetch(`${t}/submit`,{method:"POST",headers:{"Content-Type":"application/octet-stream","X-Topics":JSON.stringify(e.topics)},body:new Uint8Array(e.beef)});if(r.ok)return await r.json();throw new Error("Failed to facilitate broadcast")}}class jr{topics;facilitator;resolver;requireAcknowledgmentFromAllHostsForTopics;requireAcknowledgmentFromAnyHostForTopics;requireAcknowledgmentFromSpecificHostsForTopics;constructor(t,e){if(0===t.length)throw new Error("At least one topic is required for broadcast.");if(t.some((t=>!t.startsWith("tm_"))))throw new Error('Every topic must start with "tm_".');this.topics=t;const{facilitator:r,resolver:i,requireAcknowledgmentFromAllHostsForTopics:n,requireAcknowledgmentFromAnyHostForTopics:s,requireAcknowledgmentFromSpecificHostsForTopics:a}=e??{};this.facilitator=r??new Wr,this.resolver=i??new zr,this.requireAcknowledgmentFromAllHostsForTopics=n??[],this.requireAcknowledgmentFromAnyHostForTopics=s??"all",this.requireAcknowledgmentFromSpecificHostsForTopics=a??{}}async broadcast(t){let e;try{e=t.toBEEF()}catch(t){throw new Error("Transactions sent via SHIP to Overlay Services must be serializable to BEEF format.")}const r=await this.findInterestedHosts();if(0===Object.keys(r).length)return{status:"error",code:"ERR_NO_HOSTS_INTERESTED",description:"No hosts are interested in receiving this transaction."};const i=Object.entries(r).map((async([t,r])=>{try{const i=await this.facilitator.send(t,{beef:e,topics:[...r]});if(!i||0===Object.keys(i).length)throw new Error("Steak has no topics.");return{host:t,success:!0,steak:i}}catch(e){return{host:t,success:!1,error:e}}})),n=(await Promise.all(i)).filter((t=>t.success));if(0===n.length)return{status:"error",code:"ERR_ALL_HOSTS_REJECTED",description:"All SHIP hosts have rejected the transaction."};const s={};for(const t of n){const e=t.host,r=t.steak,i=new Set;for(const[t,e]of Object.entries(r)){const r=e.outputsToAdmit,n=e.coinsToRetain,s=e.coinsRemoved;(r?.length>0||n?.length>0||s?.length>0)&&i.add(t)}s[e]=i}let a,o,c,h;return"all"===this.requireAcknowledgmentFromAllHostsForTopics?(a=this.topics,o="all"):"any"===this.requireAcknowledgmentFromAllHostsForTopics?(a=this.topics,o="any"):Array.isArray(this.requireAcknowledgmentFromAllHostsForTopics)?(a=this.requireAcknowledgmentFromAllHostsForTopics,o="all"):(a=this.topics,o="all"),a.length>0&&!this.checkAcknowledgmentFromAllHosts(s,a,o)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ALL_HOSTS_FAILED",description:"Not all hosts acknowledged the required topics."}:("all"===this.requireAcknowledgmentFromAnyHostForTopics?(c=this.topics,h="all"):"any"===this.requireAcknowledgmentFromAnyHostForTopics?(c=this.topics,h="any"):Array.isArray(this.requireAcknowledgmentFromAnyHostForTopics)?(c=this.requireAcknowledgmentFromAnyHostForTopics,h="all"):(c=[],h="all"),c.length>0&&!this.checkAcknowledgmentFromAnyHost(s,c,h)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ANY_HOST_FAILED",description:"No host acknowledged the required topics."}:Object.keys(this.requireAcknowledgmentFromSpecificHostsForTopics).length>0&&!this.checkAcknowledgmentFromSpecificHosts(s,this.requireAcknowledgmentFromSpecificHostsForTopics)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_SPECIFIC_HOSTS_FAILED",description:"Specific hosts did not acknowledge the required topics."}:{status:"success",txid:t.id("hex"),message:`Sent to ${n.length} Overlay Services ${1===n.length?"host":"hosts"}.`})}checkAcknowledgmentFromAllHosts(t,e,r){for(const i of Object.values(t))if("all"===r){for(const t of e)if(!i.has(t))return!1}else if("any"===r){let t=!1;for(const r of e)if(i.has(r)){t=!0;break}if(!t)return!1}return!0}checkAcknowledgmentFromAnyHost(t,e,r){if("all"===r){for(const r of Object.values(t)){let t=!0;for(const i of e)if(!r.has(i)){t=!1;break}if(t)return!0}return!1}for(const r of Object.values(t))for(const t of e)if(r.has(t))return!0;return!1}checkAcknowledgmentFromSpecificHosts(t,e){for(const[r,i]of Object.entries(e)){const e=t[r];if(!e)return!1;let n,s;if("all"===i||"any"===i)s=i,n=this.topics;else{if(!Array.isArray(i))continue;n=i,s="all"}if("all"===s){for(const t of n)if(!e.has(t))return!1}else if("any"===s){let t=!1;for(const r of n)if(e.has(r)){t=!0;break}if(!t)return!1}}return!0}async findInterestedHosts(){const t={},e=await this.resolver.query({service:"ls_ship",query:{topics:this.topics}},1e3);if("output-list"!==e.type)throw new Error("SHIP answer is not an output list.");for(const r of e.outputs)try{const e=Je.fromBEEF(r.beef).outputs[r.outputIndex].lockingScript,i=Kr.decode(e);if(!this.topics.includes(i.topicOrService)||"SHIP"!==i.protocol)continue;t[i.domain]||(t[i.domain]=new Set),t[i.domain].add(i.topicOrService)}catch(t){continue}return t}}return e})()));
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.bsv=e():t.bsv=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var i in r)t.o(r,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:r[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{ARC:()=>We,BSM:()=>o,Beef:()=>er,BeefParty:()=>sr,BeefTx:()=>Ge,BigNumber:()=>c,CachedKeyDeriver:()=>_r,Certificate:()=>Rr,Curve:()=>zt,DEFAULT_SLAP_TRACKERS:()=>Wr,ECDSA:()=>n,ECIES:()=>Pr,EncryptedMessage:()=>a,FetchHttpClient:()=>Ke,HD:()=>mr,HTTPSOverlayBroadcastFacilitator:()=>Xr,HTTPSOverlayLookupFacilitator:()=>jr,HTTPWalletWire:()=>Ur,Hash:()=>r,KeyDeriver:()=>xr,KeyShares:()=>re,LockingScript:()=>_e,LookupResolver:()=>$r,MerklePath:()=>Ue,Mnemonic:()=>gr,NodejsHttpClient:()=>Le,OP:()=>Ae,OverlayAdminTokenTemplate:()=>zr,P2PKH:()=>Re,Point:()=>Kt,PointInFiniteField:()=>te,Polynomial:()=>ee,PrivateKey:()=>ie,ProtoWallet:()=>Fr,PublicKey:()=>Yt,PushDrop:()=>He,RPuzzle:()=>Ce,Random:()=>Jt,SHIPBroadcaster:()=>Gr,SatoshisPerKilobyte:()=>De,Schnorr:()=>Ne,Script:()=>xe,SecurityLevels:()=>Er,Signature:()=>Wt,SignedMessage:()=>s,Spend:()=>Be,SymmetricKey:()=>Oe,TOTP:()=>Sr,Transaction:()=>rr,TransactionSignature:()=>Se,UnlockingScript:()=>Me,Utils:()=>i,WalletClient:()=>Kr,WalletError:()=>Mr,WalletErrors:()=>Tr,WalletWireProcessor:()=>qr,WalletWireTransceiver:()=>Dr,WhatsOnChain:()=>$e,WhatsOnChainBroadcaster:()=>ar,WindowCWISubstrate:()=>Vr,XDM:()=>Br,defaultBroadcaster:()=>je,defaultChainTracker:()=>Xe,defaultHttpClient:()=>qe,fromUtxo:()=>Or,isBroadcastFailure:()=>nr,isBroadcastResponse:()=>ir});var r={};t.r(r),t.d(r,{RIPEMD160:()=>Z,SHA1:()=>J,SHA1HMAC:()=>pt,SHA256:()=>Q,SHA256HMAC:()=>ft,SHA512:()=>tt,SHA512HMAC:()=>bt,hash160:()=>vt,hash256:()=>It,pbkdf2:()=>Ot,ripemd160:()=>mt,sha1:()=>wt,sha256:()=>gt,sha256hmac:()=>kt,sha512:()=>yt,sha512hmac:()=>Pt,toArray:()=>g});var i={};t.r(i),t.d(i,{Reader:()=>Ut,Writer:()=>Dt,encode:()=>Tt,fromBase58:()=>Bt,fromBase58Check:()=>Ht,minimallyEncode:()=>Lt,toArray:()=>Et,toBase58:()=>Rt,toBase58Check:()=>Ct,toBase64:()=>Ft,toHex:()=>Nt,toUTF8:()=>Mt,zero2:()=>St});var n={};t.r(n),t.d(n,{sign:()=>Xt,verify:()=>Gt});var s={};t.r(s),t.d(s,{sign:()=>cr,verify:()=>hr});var a={};t.r(a),t.d(a,{decrypt:()=>lr,encrypt:()=>dr});var o={};t.r(o),t.d(o,{magicHash:()=>fr,sign:()=>pr,verify:()=>br});class c{static zeros=["","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"];static groupSizes=[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];static groupBases=[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];static wordSize=26;negative;words;length;red;static isBN(t){return t instanceof c||null!==t&&"object"==typeof t&&t.constructor.wordSize===c.wordSize&&Array.isArray(t.words)}static max(t,e){return t.cmp(e)>0?t:e}static min(t,e){return t.cmp(e)<0?t:e}constructor(t=0,e=10,r="be"){if(this.negative=0,this.words=[],this.length=0,this.red=null,null!==t){if("le"!==e&&"be"!==e||(r=e,e=10),"number"==typeof t)return void this.initNumber(t,e,r);if("object"==typeof t)return void this.initArray(t,r);"hex"===e&&(e=16),this.assert(e===(0|e)&&e>=2&&e<=36);let i=0;(t=t.toString().replace(/\s+/g,"")).startsWith("-")&&(i++,this.negative=1),i<t.length&&(16===e?this.parseHex(t,i,r):(this.parseBase(t,e,i),"le"===r&&this.initArray(this.toArray(),r)))}}assert(t,e="Assertion failed"){if(!t)throw new Error(e)}initNumber(t,e,r){return t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(this.assert(t<=9007199254740991,"The number is larger than 2 ^ 53 (unsafe)"),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"!==r||this.initArray(this.toArray(),r),this}initArray(t,e){if(this.assert("number"==typeof t.length,"The number must have a length"),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);let r,i,n=0;for(;n<this.length;n++)this.words[n]=0;let s=0;if("be"===e)for(n=t.length-1,r=0;n>=0;n-=3)i=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[r]|=i<<s&67108863,this.words[r+1]=i>>>26-s&67108863,s+=24,s>=26&&(s-=26,r++);else if("le"===e)for(n=0,r=0;n<t.length;n+=3)i=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[r]|=i<<s&67108863,this.words[r+1]=i>>>26-s&67108863,s+=24,s>=26&&(s-=26,r++);return this.strip()}parseHex4Bits(t,e){const r=t.charCodeAt(e);if(r>=48&&r<=57)return r-48;if(r>=65&&r<=70)return r-55;if(r>=97&&r<=102)return r-87;throw new Error("Invalid character in "+t)}parseHexByte(t,e,r){let i=this.parseHex4Bits(t,r);return r-1>=e&&(i|=this.parseHex4Bits(t,r-1)<<4),i}parseHex(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length).fill(0);let i=0,n=0;const s=r=>{const s=this.parseHexByte(t,e,r)<<i;this.words[n]|=67108863&s,i>=18?(i-=18,n+=1,this.words[n]|=s>>>26):i+=8};if("be"===r)for(let r=t.length-1;r>=e;r-=2)s(r);else for(let r=(t.length-e)%2==0?e+1:e;r<t.length;r+=2)s(r);return this.strip()}parseBaseWord(t,e,r,i){let n=0,s=0;const a=Math.min(t.length,r);for(let r=e;r<a;r++){const e=t.charCodeAt(r)-48;n*=i,s=e>=49?e-49+10:e>=17?e-17+10:e,this.assert(e>=0&&s<i,"Invalid character"),n+=s}return n}parseBase(t,e,r){this.words=[0],this.length=1;let i=0,n=1;for(;n<=67108863;n*=e)i++;i--,n=n/e|0;const s=t.length-r,a=s%i,o=Math.min(s,s-a)+r;let c=0,h=r;for(;h<o;h+=i)c=this.parseBaseWord(t,h,h+i,e),this.imuln(n),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==a){let r=1;for(c=this.parseBaseWord(t,h,t.length,e),h=0;h<a;h++)r*=e;this.imuln(r),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}return this.strip()}copy(t){t.words=new Array(this.length);for(let e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red}static move(t,e){t.words=e.words,t.length=e.length,t.negative=e.negative,t.red=e.red}clone(){const t=new c;return this.copy(t),t}expand(t){for(;this.length<t;)this.words[this.length++]=0;return this}strip(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this.normSign()}normSign(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this}inspect(){return(null!==this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}toString(t=10,e=1){if(16===t||"hex"===t)return this.toHexString(e);if(t===(0|t)&&t>=2&&t<=36)return this.toBaseString(t,e);throw new Error("Base should be between 2 and 36")}toHexString(t){let e="",r=0,i=0;for(let t=0;t<this.length;t++){const n=this.words[t],s=(16777215&(n<<r|i)).toString(16);i=n>>>24-r&16777215,r+=2,r>=26&&(r-=26,t--),e=0!==i||t!==this.length-1?c.zeros[6-s.length]+s+e:s+e}if(0!==i&&(e=i.toString(16)+e),0===t&&"0"===e)return"";for(;e.length%t!=0&&0!==t;)e="0"+e;return 0!==this.negative&&(e="-"+e),e}toBaseString(t,e){const r=c.groupSizes[t],i=c.groupBases[t];let n="",s=this.clone();for(s.negative=0;!s.isZero();){const e=s.modrn(i).toString(t);s=s.idivn(i),n=s.isZero()?e+n:c.zeros[r-e.length]+e+n}for(this.isZero()&&(n="0"+n);n.length%e!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}toNumber(){let t=this.words[0];if(2===this.length)t+=67108864*this.words[1];else if(3===this.length&&1===this.words[2])t+=4503599627370496+67108864*this.words[1];else if(this.length>2)throw new Error("Number can only safely store up to 53 bits");return 0!==this.negative?-t:t}toJSON(){return this.toString(16)}toArrayLikeLE(t,e){let r=0,i=0;for(let e=0,n=0;e<this.length;e++){const s=this.words[e]<<n|i;t[r++]=255&s,r<t.length&&(t[r++]=s>>8&255),r<t.length&&(t[r++]=s>>16&255),6===n?(r<t.length&&(t[r++]=s>>24&255),i=0,n=0):(i=s>>>24,n+=2)}if(r<t.length)for(t[r++]=i;r<t.length;)t[r++]=0}toArrayLikeBE(t,e){let r=t.length-1,i=0;for(let e=0,n=0;e<this.length;e++){const s=this.words[e]<<n|i;t[r--]=255&s,r>=0&&(t[r--]=s>>8&255),r>=0&&(t[r--]=s>>16&255),6===n?(r>=0&&(t[r--]=s>>24&255),i=0,n=0):(i=s>>>24,n+=2)}if(r>=0)for(t[r--]=i;r>=0;)t[r--]=0}toArray(t="be",e){this.strip();const r=this.byteLength(),i=e??Math.max(1,r);this.assert(r<=i,"byte array longer than desired length"),this.assert(i>0,"Requested array length <= 0");const n=new Array(i);return"le"===t?this.toArrayLikeLE(n,r):this.toArrayLikeBE(n,r),n}countWordBits(t){if("function"==typeof Math.clz32)return 32-Math.clz32(t);let e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e}zeroWordBits(t){if(0===t)return 26;let e=t,r=0;return 8191&e||(r+=13,e>>>=13),127&e||(r+=7,e>>>=7),15&e||(r+=4,e>>>=4),3&e||(r+=2,e>>>=2),1&e||r++,r}bitLength(){const t=this.words[this.length-1],e=this.countWordBits(t);return 26*(this.length-1)+e}static toBitArray(t){const e=new Array(t.bitLength());for(let r=0;r<e.length;r++){const i=r/26|0,n=r%26;e[r]=t.words[i]>>>n&1}return e}toBitArray(){return c.toBitArray(this)}zeroBits(){if(this.isZero())return 0;let t=0;for(let e=0;e<this.length;e++){const r=this.zeroWordBits(this.words[e]);if(t+=r,26!==r)break}return t}byteLength(){return Math.ceil(this.bitLength()/8)}toTwos(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()}fromTwos(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()}isNeg(){return 0!==this.negative}neg(){return this.clone().ineg()}ineg(){return this.isZero()||(this.negative^=1),this}iuor(t){for(;this.length<t.length;)this.words[this.length++]=0;for(let e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()}ior(t){return this.assert(!(this.negative|t.negative)),this.iuor(t)}or(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)}uor(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)}iuand(t){const e=Math.min(this.length,t.length);for(let r=0;r<e;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e,this.strip()}iand(t){return this.assert(!(this.negative|t.negative)),this.iuand(t)}and(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)}uand(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)}iuxor(t){if(this.length>t.length)for(let e=0;e<t.length;e++)this.words[e]=this.words[e]^t.words[e];else{for(let e=0;e<this.length;e++)this.words[e]=this.words[e]^t.words[e];for(let e=this.length;e<t.length;e++)this.words[e]=t.words[e];this.length=t.length}return this.strip()}ixor(t){return this.assert(!(this.negative|t.negative),"Neither number can be negative"),this.iuxor(t)}xor(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)}uxor(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)}inotn(t){this.assert("number"==typeof t&&t>=0,"The width needs to be a number greater than zero");let e=0|Math.ceil(t/26);const r=t%26;this.expand(e),r>0&&e--;let i=0;for(;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()}notn(t){return this.clone().inotn(t)}setn(t,e){this.assert("number"==typeof t&&t>=0);const r=t/26|0,i=t%26;return this.expand(r+1),this.words[r]=1===e||!0===e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()}iadd(t){let e,r,i;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this.normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e.normSign();this.length>t.length?(r=this,i=t):(r=t,i=this);let n=0,s=0;for(;s<i.length;s++)e=(0|r.words[s])+(0|i.words[s])+n,this.words[s]=67108863&e,n=e>>>26;for(;0!==n&&s<r.length;s++)e=(0|r.words[s])+n,this.words[s]=67108863&e,n=e>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this}add(t){let e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)}isub(t){let e;if(0!==t.negative)return t.negative=0,e=this.iadd(t),t.negative=1,e.normSign();if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this.normSign();const r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;let i,n;r>0?(i=this,n=t):(i=t,n=this);let s=0,a=0;for(;a<n.length;a++)e=(0|i.words[a])-(0|n.words[a])+s,s=e>>26,this.words[a]=67108863&e;for(;0!==s&&a<i.length;a++)e=(0|i.words[a])+s,s=e>>26,this.words[a]=67108863&e;if(0===s&&a<i.length&&i!==this)for(;a<i.length;a++)this.words[a]=i.words[a];return this.length=Math.max(this.length,a),i!==this&&(this.negative=1),this.strip()}sub(t){return this.clone().isub(t)}smallMulTo(t,e,r){r.negative=e.negative^t.negative;let i=t.length+e.length|0;r.length=i,i=i-1|0;let n=0|t.words[0],s=0|e.words[0],a=n*s;const o=67108863&a;let c=a/67108864|0;r.words[0]=o;let h=1;for(;h<i;h++){let i=c>>>26,o=67108863&c;const u=Math.min(h,e.length-1);for(let r=Math.max(0,h-t.length+1);r<=u;r++){const c=h-r|0;n=0|t.words[c],s=0|e.words[r],a=n*s+o,i+=a/67108864|0,o=67108863&a}r.words[h]=0|o,c=0|i}return 0!==c?r.words[h]=0|c:r.length--,r.strip()}comb10MulTo(t,e,r){const i=t.words,n=e.words,s=r.words;let a,o,c,h=0;const u=0|i[0],d=8191&u,l=u>>>13,f=0|i[1],p=8191&f,b=f>>>13,m=0|i[2],w=8191&m,g=m>>>13,y=0|i[3],I=8191&y,v=y>>>13,k=0|i[4],P=8191&k,O=k>>>13,S=0|i[5],N=8191&S,E=S>>>13,A=0|i[6],x=8191&A,_=A>>>13,M=0|i[7],T=8191&M,F=M>>>13,V=0|i[8],B=8191&V,R=V>>>13,C=0|i[9],H=8191&C,D=C>>>13,U=0|n[0],L=8191&U,K=U>>>13,q=0|n[1],z=8191&q,W=q>>>13,j=0|n[2],$=8191&j,X=j>>>13,G=0|n[3],Y=8191&G,Z=G>>>13,Q=0|n[4],J=8191&Q,tt=Q>>>13,et=0|n[5],rt=8191&et,it=et>>>13,nt=0|n[6],st=8191&nt,at=nt>>>13,ot=0|n[7],ct=8191&ot,ht=ot>>>13,ut=0|n[8],dt=8191&ut,lt=ut>>>13,ft=0|n[9],pt=8191&ft,bt=ft>>>13;r.negative=t.negative^e.negative,r.length=19,a=Math.imul(d,L),o=Math.imul(d,K),o=o+Math.imul(l,L)|0,c=Math.imul(l,K);let mt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(mt>>>26)|0,mt&=67108863,a=Math.imul(p,L),o=Math.imul(p,K),o=o+Math.imul(b,L)|0,c=Math.imul(b,K),a=a+Math.imul(d,z)|0,o=o+Math.imul(d,W)|0,o=o+Math.imul(l,z)|0,c=c+Math.imul(l,W)|0;let wt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,a=Math.imul(w,L),o=Math.imul(w,K),o=o+Math.imul(g,L)|0,c=Math.imul(g,K),a=a+Math.imul(p,z)|0,o=o+Math.imul(p,W)|0,o=o+Math.imul(b,z)|0,c=c+Math.imul(b,W)|0,a=a+Math.imul(d,$)|0,o=o+Math.imul(d,X)|0,o=o+Math.imul(l,$)|0,c=c+Math.imul(l,X)|0;let gt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(gt>>>26)|0,gt&=67108863,a=Math.imul(I,L),o=Math.imul(I,K),o=o+Math.imul(v,L)|0,c=Math.imul(v,K),a=a+Math.imul(w,z)|0,o=o+Math.imul(w,W)|0,o=o+Math.imul(g,z)|0,c=c+Math.imul(g,W)|0,a=a+Math.imul(p,$)|0,o=o+Math.imul(p,X)|0,o=o+Math.imul(b,$)|0,c=c+Math.imul(b,X)|0,a=a+Math.imul(d,Y)|0,o=o+Math.imul(d,Z)|0,o=o+Math.imul(l,Y)|0,c=c+Math.imul(l,Z)|0;let yt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,a=Math.imul(P,L),o=Math.imul(P,K),o=o+Math.imul(O,L)|0,c=Math.imul(O,K),a=a+Math.imul(I,z)|0,o=o+Math.imul(I,W)|0,o=o+Math.imul(v,z)|0,c=c+Math.imul(v,W)|0,a=a+Math.imul(w,$)|0,o=o+Math.imul(w,X)|0,o=o+Math.imul(g,$)|0,c=c+Math.imul(g,X)|0,a=a+Math.imul(p,Y)|0,o=o+Math.imul(p,Z)|0,o=o+Math.imul(b,Y)|0,c=c+Math.imul(b,Z)|0,a=a+Math.imul(d,J)|0,o=o+Math.imul(d,tt)|0,o=o+Math.imul(l,J)|0,c=c+Math.imul(l,tt)|0;let It=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(It>>>26)|0,It&=67108863,a=Math.imul(N,L),o=Math.imul(N,K),o=o+Math.imul(E,L)|0,c=Math.imul(E,K),a=a+Math.imul(P,z)|0,o=o+Math.imul(P,W)|0,o=o+Math.imul(O,z)|0,c=c+Math.imul(O,W)|0,a=a+Math.imul(I,$)|0,o=o+Math.imul(I,X)|0,o=o+Math.imul(v,$)|0,c=c+Math.imul(v,X)|0,a=a+Math.imul(w,Y)|0,o=o+Math.imul(w,Z)|0,o=o+Math.imul(g,Y)|0,c=c+Math.imul(g,Z)|0,a=a+Math.imul(p,J)|0,o=o+Math.imul(p,tt)|0,o=o+Math.imul(b,J)|0,c=c+Math.imul(b,tt)|0,a=a+Math.imul(d,rt)|0,o=o+Math.imul(d,it)|0,o=o+Math.imul(l,rt)|0,c=c+Math.imul(l,it)|0;let vt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,a=Math.imul(x,L),o=Math.imul(x,K),o=o+Math.imul(_,L)|0,c=Math.imul(_,K),a=a+Math.imul(N,z)|0,o=o+Math.imul(N,W)|0,o=o+Math.imul(E,z)|0,c=c+Math.imul(E,W)|0,a=a+Math.imul(P,$)|0,o=o+Math.imul(P,X)|0,o=o+Math.imul(O,$)|0,c=c+Math.imul(O,X)|0,a=a+Math.imul(I,Y)|0,o=o+Math.imul(I,Z)|0,o=o+Math.imul(v,Y)|0,c=c+Math.imul(v,Z)|0,a=a+Math.imul(w,J)|0,o=o+Math.imul(w,tt)|0,o=o+Math.imul(g,J)|0,c=c+Math.imul(g,tt)|0,a=a+Math.imul(p,rt)|0,o=o+Math.imul(p,it)|0,o=o+Math.imul(b,rt)|0,c=c+Math.imul(b,it)|0,a=a+Math.imul(d,st)|0,o=o+Math.imul(d,at)|0,o=o+Math.imul(l,st)|0,c=c+Math.imul(l,at)|0;let kt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,a=Math.imul(T,L),o=Math.imul(T,K),o=o+Math.imul(F,L)|0,c=Math.imul(F,K),a=a+Math.imul(x,z)|0,o=o+Math.imul(x,W)|0,o=o+Math.imul(_,z)|0,c=c+Math.imul(_,W)|0,a=a+Math.imul(N,$)|0,o=o+Math.imul(N,X)|0,o=o+Math.imul(E,$)|0,c=c+Math.imul(E,X)|0,a=a+Math.imul(P,Y)|0,o=o+Math.imul(P,Z)|0,o=o+Math.imul(O,Y)|0,c=c+Math.imul(O,Z)|0,a=a+Math.imul(I,J)|0,o=o+Math.imul(I,tt)|0,o=o+Math.imul(v,J)|0,c=c+Math.imul(v,tt)|0,a=a+Math.imul(w,rt)|0,o=o+Math.imul(w,it)|0,o=o+Math.imul(g,rt)|0,c=c+Math.imul(g,it)|0,a=a+Math.imul(p,st)|0,o=o+Math.imul(p,at)|0,o=o+Math.imul(b,st)|0,c=c+Math.imul(b,at)|0,a=a+Math.imul(d,ct)|0,o=o+Math.imul(d,ht)|0,o=o+Math.imul(l,ct)|0,c=c+Math.imul(l,ht)|0;let Pt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,a=Math.imul(B,L),o=Math.imul(B,K),o=o+Math.imul(R,L)|0,c=Math.imul(R,K),a=a+Math.imul(T,z)|0,o=o+Math.imul(T,W)|0,o=o+Math.imul(F,z)|0,c=c+Math.imul(F,W)|0,a=a+Math.imul(x,$)|0,o=o+Math.imul(x,X)|0,o=o+Math.imul(_,$)|0,c=c+Math.imul(_,X)|0,a=a+Math.imul(N,Y)|0,o=o+Math.imul(N,Z)|0,o=o+Math.imul(E,Y)|0,c=c+Math.imul(E,Z)|0,a=a+Math.imul(P,J)|0,o=o+Math.imul(P,tt)|0,o=o+Math.imul(O,J)|0,c=c+Math.imul(O,tt)|0,a=a+Math.imul(I,rt)|0,o=o+Math.imul(I,it)|0,o=o+Math.imul(v,rt)|0,c=c+Math.imul(v,it)|0,a=a+Math.imul(w,st)|0,o=o+Math.imul(w,at)|0,o=o+Math.imul(g,st)|0,c=c+Math.imul(g,at)|0,a=a+Math.imul(p,ct)|0,o=o+Math.imul(p,ht)|0,o=o+Math.imul(b,ct)|0,c=c+Math.imul(b,ht)|0,a=a+Math.imul(d,dt)|0,o=o+Math.imul(d,lt)|0,o=o+Math.imul(l,dt)|0,c=c+Math.imul(l,lt)|0;let Ot=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,a=Math.imul(H,L),o=Math.imul(H,K),o=o+Math.imul(D,L)|0,c=Math.imul(D,K),a=a+Math.imul(B,z)|0,o=o+Math.imul(B,W)|0,o=o+Math.imul(R,z)|0,c=c+Math.imul(R,W)|0,a=a+Math.imul(T,$)|0,o=o+Math.imul(T,X)|0,o=o+Math.imul(F,$)|0,c=c+Math.imul(F,X)|0,a=a+Math.imul(x,Y)|0,o=o+Math.imul(x,Z)|0,o=o+Math.imul(_,Y)|0,c=c+Math.imul(_,Z)|0,a=a+Math.imul(N,J)|0,o=o+Math.imul(N,tt)|0,o=o+Math.imul(E,J)|0,c=c+Math.imul(E,tt)|0,a=a+Math.imul(P,rt)|0,o=o+Math.imul(P,it)|0,o=o+Math.imul(O,rt)|0,c=c+Math.imul(O,it)|0,a=a+Math.imul(I,st)|0,o=o+Math.imul(I,at)|0,o=o+Math.imul(v,st)|0,c=c+Math.imul(v,at)|0,a=a+Math.imul(w,ct)|0,o=o+Math.imul(w,ht)|0,o=o+Math.imul(g,ct)|0,c=c+Math.imul(g,ht)|0,a=a+Math.imul(p,dt)|0,o=o+Math.imul(p,lt)|0,o=o+Math.imul(b,dt)|0,c=c+Math.imul(b,lt)|0,a=a+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0,o=o+Math.imul(l,pt)|0,c=c+Math.imul(l,bt)|0;let St=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(St>>>26)|0,St&=67108863,a=Math.imul(H,z),o=Math.imul(H,W),o=o+Math.imul(D,z)|0,c=Math.imul(D,W),a=a+Math.imul(B,$)|0,o=o+Math.imul(B,X)|0,o=o+Math.imul(R,$)|0,c=c+Math.imul(R,X)|0,a=a+Math.imul(T,Y)|0,o=o+Math.imul(T,Z)|0,o=o+Math.imul(F,Y)|0,c=c+Math.imul(F,Z)|0,a=a+Math.imul(x,J)|0,o=o+Math.imul(x,tt)|0,o=o+Math.imul(_,J)|0,c=c+Math.imul(_,tt)|0,a=a+Math.imul(N,rt)|0,o=o+Math.imul(N,it)|0,o=o+Math.imul(E,rt)|0,c=c+Math.imul(E,it)|0,a=a+Math.imul(P,st)|0,o=o+Math.imul(P,at)|0,o=o+Math.imul(O,st)|0,c=c+Math.imul(O,at)|0,a=a+Math.imul(I,ct)|0,o=o+Math.imul(I,ht)|0,o=o+Math.imul(v,ct)|0,c=c+Math.imul(v,ht)|0,a=a+Math.imul(w,dt)|0,o=o+Math.imul(w,lt)|0,o=o+Math.imul(g,dt)|0,c=c+Math.imul(g,lt)|0,a=a+Math.imul(p,pt)|0,o=o+Math.imul(p,bt)|0,o=o+Math.imul(b,pt)|0,c=c+Math.imul(b,bt)|0;let Nt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Nt>>>26)|0,Nt&=67108863,a=Math.imul(H,$),o=Math.imul(H,X),o=o+Math.imul(D,$)|0,c=Math.imul(D,X),a=a+Math.imul(B,Y)|0,o=o+Math.imul(B,Z)|0,o=o+Math.imul(R,Y)|0,c=c+Math.imul(R,Z)|0,a=a+Math.imul(T,J)|0,o=o+Math.imul(T,tt)|0,o=o+Math.imul(F,J)|0,c=c+Math.imul(F,tt)|0,a=a+Math.imul(x,rt)|0,o=o+Math.imul(x,it)|0,o=o+Math.imul(_,rt)|0,c=c+Math.imul(_,it)|0,a=a+Math.imul(N,st)|0,o=o+Math.imul(N,at)|0,o=o+Math.imul(E,st)|0,c=c+Math.imul(E,at)|0,a=a+Math.imul(P,ct)|0,o=o+Math.imul(P,ht)|0,o=o+Math.imul(O,ct)|0,c=c+Math.imul(O,ht)|0,a=a+Math.imul(I,dt)|0,o=o+Math.imul(I,lt)|0,o=o+Math.imul(v,dt)|0,c=c+Math.imul(v,lt)|0,a=a+Math.imul(w,pt)|0,o=o+Math.imul(w,bt)|0,o=o+Math.imul(g,pt)|0,c=c+Math.imul(g,bt)|0;let Et=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,a=Math.imul(H,Y),o=Math.imul(H,Z),o=o+Math.imul(D,Y)|0,c=Math.imul(D,Z),a=a+Math.imul(B,J)|0,o=o+Math.imul(B,tt)|0,o=o+Math.imul(R,J)|0,c=c+Math.imul(R,tt)|0,a=a+Math.imul(T,rt)|0,o=o+Math.imul(T,it)|0,o=o+Math.imul(F,rt)|0,c=c+Math.imul(F,it)|0,a=a+Math.imul(x,st)|0,o=o+Math.imul(x,at)|0,o=o+Math.imul(_,st)|0,c=c+Math.imul(_,at)|0,a=a+Math.imul(N,ct)|0,o=o+Math.imul(N,ht)|0,o=o+Math.imul(E,ct)|0,c=c+Math.imul(E,ht)|0,a=a+Math.imul(P,dt)|0,o=o+Math.imul(P,lt)|0,o=o+Math.imul(O,dt)|0,c=c+Math.imul(O,lt)|0,a=a+Math.imul(I,pt)|0,o=o+Math.imul(I,bt)|0,o=o+Math.imul(v,pt)|0,c=c+Math.imul(v,bt)|0;let At=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(At>>>26)|0,At&=67108863,a=Math.imul(H,J),o=Math.imul(H,tt),o=o+Math.imul(D,J)|0,c=Math.imul(D,tt),a=a+Math.imul(B,rt)|0,o=o+Math.imul(B,it)|0,o=o+Math.imul(R,rt)|0,c=c+Math.imul(R,it)|0,a=a+Math.imul(T,st)|0,o=o+Math.imul(T,at)|0,o=o+Math.imul(F,st)|0,c=c+Math.imul(F,at)|0,a=a+Math.imul(x,ct)|0,o=o+Math.imul(x,ht)|0,o=o+Math.imul(_,ct)|0,c=c+Math.imul(_,ht)|0,a=a+Math.imul(N,dt)|0,o=o+Math.imul(N,lt)|0,o=o+Math.imul(E,dt)|0,c=c+Math.imul(E,lt)|0,a=a+Math.imul(P,pt)|0,o=o+Math.imul(P,bt)|0,o=o+Math.imul(O,pt)|0,c=c+Math.imul(O,bt)|0;let xt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,a=Math.imul(H,rt),o=Math.imul(H,it),o=o+Math.imul(D,rt)|0,c=Math.imul(D,it),a=a+Math.imul(B,st)|0,o=o+Math.imul(B,at)|0,o=o+Math.imul(R,st)|0,c=c+Math.imul(R,at)|0,a=a+Math.imul(T,ct)|0,o=o+Math.imul(T,ht)|0,o=o+Math.imul(F,ct)|0,c=c+Math.imul(F,ht)|0,a=a+Math.imul(x,dt)|0,o=o+Math.imul(x,lt)|0,o=o+Math.imul(_,dt)|0,c=c+Math.imul(_,lt)|0,a=a+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0,o=o+Math.imul(E,pt)|0,c=c+Math.imul(E,bt)|0;let _t=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,a=Math.imul(H,st),o=Math.imul(H,at),o=o+Math.imul(D,st)|0,c=Math.imul(D,at),a=a+Math.imul(B,ct)|0,o=o+Math.imul(B,ht)|0,o=o+Math.imul(R,ct)|0,c=c+Math.imul(R,ht)|0,a=a+Math.imul(T,dt)|0,o=o+Math.imul(T,lt)|0,o=o+Math.imul(F,dt)|0,c=c+Math.imul(F,lt)|0,a=a+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0,o=o+Math.imul(_,pt)|0,c=c+Math.imul(_,bt)|0;let Mt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,a=Math.imul(H,ct),o=Math.imul(H,ht),o=o+Math.imul(D,ct)|0,c=Math.imul(D,ht),a=a+Math.imul(B,dt)|0,o=o+Math.imul(B,lt)|0,o=o+Math.imul(R,dt)|0,c=c+Math.imul(R,lt)|0,a=a+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0,o=o+Math.imul(F,pt)|0,c=c+Math.imul(F,bt)|0;let Tt=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,a=Math.imul(H,dt),o=Math.imul(H,lt),o=o+Math.imul(D,dt)|0,c=Math.imul(D,lt),a=a+Math.imul(B,pt)|0,o=o+Math.imul(B,bt)|0,o=o+Math.imul(R,pt)|0,c=c+Math.imul(R,bt)|0;let Ft=(h+a|0)+((8191&o)<<13)|0;h=(c+(o>>>13)|0)+(Ft>>>26)|0,Ft&=67108863,a=Math.imul(H,pt),o=Math.imul(H,bt),o=o+Math.imul(D,pt)|0,c=Math.imul(D,bt);let Vt=(h+a|0)+((8191&o)<<13)|0;return h=(c+(o>>>13)|0)+(Vt>>>26)|0,Vt&=67108863,s[0]=mt,s[1]=wt,s[2]=gt,s[3]=yt,s[4]=It,s[5]=vt,s[6]=kt,s[7]=Pt,s[8]=Ot,s[9]=St,s[10]=Nt,s[11]=Et,s[12]=At,s[13]=xt,s[14]=_t,s[15]=Mt,s[16]=Tt,s[17]=Ft,s[18]=Vt,0!==h&&(s[19]=h,r.length++),r}bigMulTo(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;let i=0,n=0,s=0;for(;s<r.length-1;s++){let a=n;n=0;let o=67108863&i;const c=Math.min(s,e.length-1);for(let r=Math.max(0,s-t.length+1);r<=c;r++){const i=s-r,c=(0|t.words[i])*(0|e.words[r]);let h=67108863&c;a=a+(c/67108864|0)|0,h=h+o|0,o=67108863&h,a=a+(h>>>26)|0,n+=a>>>26,a&=67108863}r.words[s]=o,i=a,a=n}return 0!==i?r.words[s]=i:r.length--,r.strip()}mulTo(t,e){let r;const i=this.length+t.length;return r=10===this.length&&10===t.length?this.comb10MulTo(this,t,e):i<63?this.smallMulTo(this,t,e):this.bigMulTo(this,t,e),r}mul(t){const e=new c;return e.words=new Array(this.length+t.length),this.mulTo(t,e)}imul(t){return this.clone().mulTo(t,this)}imuln(t){const e=t<0;e&&(t=-t),this.assert("number"==typeof t),this.assert(t<67108864);let r=0,i=0;for(;i<this.length;i++){const e=(0|this.words[i])*t,n=(67108863&e)+(67108863&r);r>>=26,r+=e/67108864|0,r+=n>>>26,this.words[i]=67108863&n}return 0!==r&&(this.words[i]=r,this.length++),e?this.ineg():this}muln(t){return this.clone().imuln(t)}sqr(){return this.mul(this)}isqr(){return this.imul(this.clone())}pow(t){const e=c.toBitArray(t);if(0===e.length)return new c(1);let r=this,i=0;for(;i<e.length&&0===e[i];i++,r=r.sqr());if(++i<e.length)for(let t=r.sqr();i<e.length;i++,t=t.sqr())0!==e[i]&&(r=r.mul(t));return r}iushln(t){this.assert("number"==typeof t&&t>=0);const e=t%26,r=(t-e)/26,i=67108863>>>26-e<<26-e;let n;if(0!==e){let t=0;for(n=0;n<this.length;n++){const r=this.words[n]&i,s=(0|this.words[n])-r<<e;this.words[n]=s|t,t=r>>>26-e}0!==t&&(this.words[n]=t,this.length++)}if(0!==r){for(n=this.length-1;n>=0;n--)this.words[n+r]=this.words[n];for(n=0;n<r;n++)this.words[n]=0;this.length+=r}return this.strip()}ishln(t){return this.assert(0===this.negative),this.iushln(t)}iushrn(t,e,r){let i;this.assert("number"==typeof t&&t>=0),i="number"==typeof e&&0!==e?(e-e%26)/26:0;const n=t%26,s=Math.min((t-n)/26,this.length),a=67108863^67108863>>>n<<n,o=r;i-=s,i=Math.max(0,i);let c=0;if(void 0!==o){for(;c<s;c++)o.words[c]=this.words[c];o.length=s}if(0===s);else if(this.length>s)for(this.length-=s,c=0;c<this.length;c++)this.words[c]=this.words[c+s];else this.words[0]=0,this.length=1;let h=0;for(c=this.length-1;c>=0&&(0!==h||c>=i);c--){const t=0|this.words[c];this.words[c]=h<<26-n|t>>>n,h=t&a}return null!=o&&0!==h&&(o.words[o.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()}ishrn(t,e,r){return this.assert(0===this.negative),this.iushrn(t,e,r)}shln(t){return this.clone().ishln(t)}ushln(t){return this.clone().iushln(t)}shrn(t){return this.clone().ishrn(t)}ushrn(t){return this.clone().iushrn(t)}testn(t){this.assert("number"==typeof t&&t>=0);const e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;const n=this.words[r];return Boolean(n&i)}imaskn(t){this.assert("number"==typeof t&&t>=0);const e=t%26;let r=(t-e)/26;if(this.assert(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){const t=67108863^67108863>>>e<<e;this.words[this.length-1]&=t}return this.strip()}maskn(t){return this.clone().imaskn(t)}iaddn(t){return this.assert("number"==typeof t),this.assert(t<67108864,"num is too large"),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<=t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)}_iaddn(t){this.words[0]+=t;let e=0;for(;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this}isubn(t){if(this.assert("number"==typeof t),this.assert(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(let t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()}addn(t){return this.clone().iaddn(t)}subn(t){return this.clone().isubn(t)}iabs(){return this.negative=0,this}abs(){return this.clone().iabs()}_ishlnsubmul(t,e,r){const i=t.length+r;let n,s;this.expand(i);let a=0;for(n=0;n<t.length;n++){s=(0|this.words[n+r])+a;const i=(0|t.words[n])*e;s-=67108863&i,a=(s>>26)-(i/67108864|0),this.words[n+r]=67108863&s}for(;n<this.length-r;n++)s=(0|this.words[n+r])+a,a=s>>26,this.words[n+r]=67108863&s;if(0===a)return this.strip();for(this.assert(-1===a,"carry must be -1"),a=0,n=0;n<this.length;n++)s=-(0|this.words[n])+a,a=s>>26,this.words[n]=67108863&s;return this.negative=1,this.strip()}wordDiv(t,e){let r=this.length-t.length,i=this.clone(),n=t,s=0|n.words[n.length-1];r=26-this.countWordBits(s),0!==r&&(n=n.ushln(r),i.iushln(r),s=0|n.words[n.length-1]);const a=i.length-n.length;let o;if("mod"!==e){o=new c,o.length=a+1,o.words=new Array(o.length);for(let t=0;t<o.length;t++)o.words[t]=0}const h=i.clone()._ishlnsubmul(n,1,a);0===h.negative&&(i=h,void 0!==o&&(o.words[a]=1));for(let t=a-1;t>=0;t--){let e=67108864*(0|i.words[n.length+t])+(0|i.words[n.length+t-1]);for(e=Math.min(e/s|0,67108863),i._ishlnsubmul(n,e,t);0!==i.negative;)e--,i.negative=0,i._ishlnsubmul(n,1,t),i.isZero()||(i.negative^=1);void 0!==o&&(o.words[t]=e)}return void 0!==o&&o.strip(),i.strip(),"div"!==e&&0!==r&&i.iushrn(r),{div:o??null,mod:i}}divmod(t,e,r){if(this.assert(!t.isZero()),this.isZero())return{div:new c(0),mod:new c(0)};let i,n,s;return 0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(n=s.mod.neg(),r&&0!==n.negative&&n.iadd(t)),{div:i,mod:n}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):this.negative&t.negative?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(n=s.mod.neg(),r&&0!==n.negative&&n.isub(t)),{div:s.div,mod:n}):t.length>this.length||this.cmp(t)<0?{div:new c(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new c(this.modrn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new c(this.modrn(t.words[0]))}:this.wordDiv(t,e)}div(t){return this.divmod(t,"div",!1).div}mod(t){return this.divmod(t,"mod",!1).mod}umod(t){return this.divmod(t,"mod",!0).mod}divRound(t){const e=this.divmod(t);if(e.mod.isZero())return e.div;const r=0!==e.div.negative?e.mod.isub(t):e.mod,i=t.ushrn(1),n=t.andln(1),s=r.cmp(i);return s<0||1===n&&0===s?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)}modrn(t){const e=t<0;e&&(t=-t),this.assert(t<=67108863);const r=(1<<26)%t;let i=0;for(let e=this.length-1;e>=0;e--)i=(r*i+(0|this.words[e]))%t;return e?-i:i}idivn(t){const e=t<0;e&&(t=-t),this.assert(t<=67108863);let r=0;for(let e=this.length-1;e>=0;e--){const i=(0|this.words[e])+67108864*r;this.words[e]=i/t|0,r=i%t}return this.strip(),e?this.ineg():this}divn(t){return this.clone().idivn(t)}egcd(t){this.assert(0===t.negative,"p must not be negative"),this.assert(!t.isZero(),"p must not be zero");let e=this;const r=t.clone();e=0!==e.negative?e.umod(t):e.clone();const i=new c(1),n=new c(0),s=new c(0),a=new c(1);let o=0;for(;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++o;const h=r.clone(),u=e.clone();for(;!e.isZero();){let t=0,o=1;for(;!(e.words[0]&o)&&t<26;++t,o<<=1);if(t>0)for(e.iushrn(t);t-- >0;)(i.isOdd()||n.isOdd())&&(i.iadd(h),n.isub(u)),i.iushrn(1),n.iushrn(1);let c=0,d=1;for(;!(r.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(r.iushrn(c);c-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(h),a.isub(u)),s.iushrn(1),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),n.isub(a)):(r.isub(e),s.isub(i),a.isub(n))}return{a:s,b:a,gcd:r.iushln(o)}}_invmp(t){this.assert(0===t.negative,"p must not be negative"),this.assert(!t.isZero(),"p must not be zero");let e=this;const r=t.clone();e=0!==e.negative?e.umod(t):e.clone();const i=new c(1),n=new c(0),s=r.clone();for(;e.cmpn(1)>0&&r.cmpn(1)>0;){let t=0,a=1;for(;!(e.words[0]&a)&&t<26;++t,a<<=1);if(t>0)for(e.iushrn(t);t-- >0;)i.isOdd()&&i.iadd(s),i.iushrn(1);let o=0,c=1;for(;!(r.words[0]&c)&&o<26;++o,c<<=1);if(o>0)for(r.iushrn(o);o-- >0;)n.isOdd()&&n.iadd(s),n.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(n)):(r.isub(e),n.isub(i))}let a;return a=0===e.cmpn(1)?i:n,a.cmpn(0)<0&&a.iadd(t),a}gcd(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();let e=this.clone(),r=t.clone();e.negative=0,r.negative=0;let i=0;for(;e.isEven()&&r.isEven();i++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);const t=e.cmp(r);if(t<0){const t=e;e=r,r=t}else if(0===t||0===r.cmpn(1))break;e.isub(r)}return r.iushln(i)}invm(t){return this.egcd(t).a.umod(t)}isEven(){return!(1&this.words[0])}isOdd(){return!(1&~this.words[0])}andln(t){return this.words[0]&t}bincn(t){this.assert("number"==typeof t);const e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this.expand(r+1),this.words[r]|=i,this;let n=i,s=r;for(;0!==n&&s<this.length;s++){let t=0|this.words[s];t+=n,n=t>>>26,t&=67108863,this.words[s]=t}return 0!==n&&(this.words[s]=n,this.length++),this}isZero(){return 1===this.length&&0===this.words[0]}cmpn(t){const e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;let r;if(this.strip(),this.length>1)r=1;else{e&&(t=-t),this.assert(t<=67108863,"Number is too big");const i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r}cmp(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;const e=this.ucmp(t);return 0!==this.negative?0|-e:e}ucmp(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;let e=0;for(let r=this.length-1;r>=0;r--){const i=0|this.words[r],n=0|t.words[r];if(i!==n){i<n?e=-1:i>n&&(e=1);break}}return e}gtn(t){return 1===this.cmpn(t)}gt(t){return 1===this.cmp(t)}gten(t){return this.cmpn(t)>=0}gte(t){return this.cmp(t)>=0}ltn(t){return-1===this.cmpn(t)}lt(t){return-1===this.cmp(t)}lten(t){return this.cmpn(t)<=0}lte(t){return this.cmp(t)<=0}eqn(t){return 0===this.cmpn(t)}eq(t){return 0===this.cmp(t)}toRed(t){return this.assert(null==this.red,"Already a number in reduction context"),this.assert(0===this.negative,"red works only with positives"),t.convertTo(this).forceRed(t)}fromRed(){return this.assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)}forceRed(t){return this.red=t,this}redAdd(t){return this.assert(this.red,"redAdd works only with red numbers"),this.red.add(this,t)}redIAdd(t){return this.assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)}redSub(t){return this.assert(this.red,"redSub works only with red numbers"),this.red.sub(this,t)}redISub(t){return this.assert(this.red,"redISub works only with red numbers"),this.red.isub(this,t)}redShl(t){return this.assert(this.red,"redShl works only with red numbers"),this.red.shl(this,t)}redMul(t){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,t),this.red.mul(this,t)}redIMul(t){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,t),this.red.imul(this,t)}redSqr(){return this.assert(this.red,"redSqr works only with red numbers"),this.red.verify1(this),this.red.sqr(this)}redISqr(){return this.assert(this.red,"redISqr works only with red numbers"),this.red.verify1(this),this.red.isqr(this)}redSqrt(){return this.assert(this.red,"redSqrt works only with red numbers"),this.red.verify1(this),this.red.sqrt(this)}redInvm(){return this.assert(this.red,"redInvm works only with red numbers"),this.red.verify1(this),this.red.invm(this)}redNeg(){return this.assert(this.red,"redNeg works only with red numbers"),this.red.verify1(this),this.red.neg(this)}redPow(t){return this.assert(null!=this.red&&null==t.red,"redPow(normalNum)"),this.red.verify1(this),this.red.pow(this,t)}static fromHex(t,e){return"big"===e?new c(t,16):new c(t,16,"le")}toHex(t=0){return this.toString("hex",2*t)}static fromJSON(t){return new c(t)}static fromNumber(t){return new c(t)}static fromString(t,e){return new c(t,e)}static fromSm(t,e="big"){let r=t;return 0===t.length?new c(0):("little"===e&&(r=[...r],r=r.reverse()),128&r[0]?(r=[...r],r[0]=127&r[0],new c(r).neg()):new c(r))}toSm(t="big"){let e;return-1===this.cmpn(0)?(e=this.neg().toArray(),128&e[0]?e=[128,...e]:e[0]=128|e[0]):(e=this.toArray(),128&e[0]&&(e=[0,...e])),1===e.length&&0===e[0]&&(e=[]),"little"===t&&(e=e.reverse()),e}static fromBits(t,e=!1){if(t=2147483648&t?t-4294967296:t,e&&8388608&t)throw new Error("negative bit set");const r=t>>24,i=8388607&t;let n=[i>>24&255,i>>16&255,i>>8&255,255&i];if(r<=3)n=n.slice(1,1+r);else for(let t=0;t<r-3;t++)n.push(0);return 8388608&t?new c(n).neg():new c(n)}toBits(){let t;for(t=this.ltn(0)?this.neg().toArray("be"):this.toArray("be");t.length<4;)t.unshift(0);if(t.every((t=>0===t)))return 0;for(;0===t[0];)t.shift();let e=t.length,r=t.slice(0,3).reduce(((t,e)=>256*t+e),0);8388608&r&&(t.unshift(0),e+=1,r>>>=8);let i=e<<24|r;return this.ltn(0)&&(i|=8388608),i>>>0}static fromScriptNum(t,e,r){if(void 0===r&&(r=Number.MAX_SAFE_INTEGER),t.length>r)throw new Error("script number overflow");if(e&&t.length>0&&!(127&t[t.length-1]||!(t.length<=1)&&128&t[t.length-2]))throw new Error("non-minimally encoded script number");return c.fromSm(t,"little")}toScriptNum(){return this.toSm("little")}}class h{name;p;k;n;tmp;constructor(t,e){this.name=t,this.p=new c(e,16),this.n=this.p.bitLength(),this.k=new c(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}_tmp(){const t=new c;return t.words=new Array(Math.ceil(this.n/13)),t}ireduce(t){let e,r=t;do{this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength()}while(e>this.n);const i=e<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):(r.strip,r.strip()),r}split(t,e){t.iushrn(this.n,0,e)}imulK(t){return t.imul(this.k)}}class u extends h{constructor(){super("k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}split(t,e){const r=4194303,i=Math.min(t.length,9);let n=0;for(;n<i;n++)e.words[n]=t.words[n];if(e.length=i,t.length<=9)return t.words[0]=0,void(t.length=1);let s=t.words[9];for(e.words[e.length++]=s&r,n=10;n<t.length;n++){const e=0|t.words[n];t.words[n-10]=(e&r)<<4|s>>>22,s=e}s>>>=22,t.words[n-10]=s,0===s&&t.length>10?t.length-=10:t.length-=9}imulK(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;let e=0;for(let r=0;r<t.length;r++){const i=0|t.words[r];e+=977*i,t.words[r]=67108863&e,e=64*i+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t}}class d{prime;m;constructor(t){if("k256"===t){const t=new u;this.m=t.p,this.prime=t}else this.assert(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}assert(t,e="Assertion failed"){if(!t)throw new Error(e)}verify1(t){this.assert(0===t.negative,"red works only with positives"),this.assert(t.red,"red works only with red numbers")}verify2(t,e){this.assert(!(t.negative|e.negative),"red works only with positives"),this.assert(null!=t.red&&t.red===e.red,"red works only with red numbers")}imod(t){return null!=this.prime?this.prime.ireduce(t).forceRed(this):(c.move(t,t.umod(this.m).forceRed(this)),t)}neg(t){return t.isZero()?t.clone():this.m.sub(t).forceRed(this)}add(t,e){this.verify2(t,e);const r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r.forceRed(this)}iadd(t,e){this.verify2(t,e);const r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r}sub(t,e){this.verify2(t,e);const r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r.forceRed(this)}isub(t,e){this.verify2(t,e);const r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r}shl(t,e){return this.verify1(t),this.imod(t.ushln(e))}imul(t,e){return this.verify2(t,e),this.imod(t.imul(e))}mul(t,e){return this.verify2(t,e),this.imod(t.mul(e))}isqr(t){return this.imul(t,t.clone())}sqr(t){return this.mul(t,t)}sqrt(t){if(t.isZero())return t.clone();const e=this.m.andln(3);if(this.assert(e%2==1),3===e){const e=this.m.add(new c(1)).iushrn(2);return this.pow(t,e)}const r=this.m.subn(1);let i=0;for(;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);this.assert(!r.isZero());const n=new c(1).toRed(this),s=n.redNeg(),a=this.m.subn(1).iushrn(1),o=this.m.bitLength(),h=new c(2*o*o).toRed(this);for(;0!==this.pow(h,a).cmp(s);)h.redIAdd(s);let u=this.pow(h,r),d=this.pow(t,r.addn(1).iushrn(1)),l=this.pow(t,r),f=i;for(;0!==l.cmp(n);){let t=l,e=0;for(;0!==t.cmp(n);e++)t=t.redSqr();this.assert(e<f);const r=this.pow(u,new c(1).iushln(f-e-1));d=d.redMul(r),u=r.redSqr(),l=l.redMul(u),f=e}return d}invm(t){const e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)}pow(t,e){if(e.isZero())return new c(1).toRed(this);if(0===e.cmpn(1))return t.clone();const r=new Array(16);r[0]=new c(1).toRed(this),r[1]=t;let i=2;for(;i<r.length;i++)r[i]=this.mul(r[i-1],t);let n=r[0],s=0,a=0,o=e.bitLength()%26;for(0===o&&(o=26),i=e.length-1;i>=0;i--){const t=e.words[i];for(let e=o-1;e>=0;e--){const o=t>>e&1;n!==r[0]&&(n=this.sqr(n)),0!==o||0!==s?(s<<=1,s|=o,a++,(4===a||0===i&&0===e)&&(n=this.mul(n,r[s]),a=0,s=0)):a=0}o=26}return n}convertTo(t){const e=t.umod(this.m);return e===t?e.clone():e}convertFrom(t){const e=t.clone();return e.red=null,e}}class l extends d{shift;r;r2;rinv;minv;constructor(t){super(t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new c(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)}convertTo(t){return this.imod(t.ushln(this.shift))}convertFrom(t){const e=this.imod(t.mul(this.rinv));return e.red=null,e}imul(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;const r=t.imul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}mul(t,e){if(t.isZero()||e.isZero())return new c(0).forceRed(this);const r=t.mul(e),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}invm(t){return this.imod(t._invmp(this.m).mul(this.r2)).forceRed(this)}}class f{curve;type;precomputed;constructor(t){this.curve=new zt,this.type=t,this.precomputed=null}}class p extends f{x;y;z;zOne;constructor(t,e,r){super("jacobian"),null===t&&null===e&&null===r?(this.x=this.curve.one,this.y=this.curve.one,this.z=new c(0)):(c.isBN(t)||(t=new c(t,16)),this.x=t,c.isBN(e)||(e=new c(e,16)),this.y=e,c.isBN(r)||(r=new c(r,16)),this.z=r),null==this.x.red&&(this.x=this.x.toRed(this.curve.red)),null==this.y.red&&(this.y=this.y.toRed(this.curve.red)),null==this.z.red&&(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}toP(){if(this.isInfinity())return new Kt(null,null);const t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),i=this.y.redMul(e).redMul(t);return new Kt(r,i)}neg(){return new p(this.x,this.y.redNeg(),this.z)}add(t){if(this.isInfinity())return t;if(t.isInfinity())return this;const e=t.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(e),n=t.x.redMul(r),s=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),o=i.redSub(n),c=s.redSub(a);if(0===o.cmpn(0))return 0!==c.cmpn(0)?new p(null,null,null):this.dbl();const h=o.redSqr(),u=h.redMul(o),d=i.redMul(h),l=c.redSqr().redIAdd(u).redISub(d).redISub(d),f=c.redMul(d.redISub(l)).redISub(s.redMul(u)),b=this.z.redMul(t.z).redMul(o);return new p(l,f,b)}mixedAdd(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;const e=this.z.redSqr(),r=this.x,i=t.x.redMul(e),n=this.y,s=t.y.redMul(e).redMul(this.z),a=r.redSub(i),o=n.redSub(s);if(0===a.cmpn(0))return 0!==o.cmpn(0)?new p(null,null,null):this.dbl();const c=a.redSqr(),h=c.redMul(a),u=r.redMul(c),d=o.redSqr().redIAdd(h).redISub(u).redISub(u),l=o.redMul(u.redISub(d)).redISub(n.redMul(h)),f=this.z.redMul(a);return new p(d,l,f)}dblp(t){if(0===t)return this;if(this.isInfinity())return this;if(void 0===t)return this.dbl();let e=this;for(let r=0;r<t;r++)e=e.dbl();return e}dbl(){if(this.isInfinity())return this;let t,e,r;if(this.zOne){const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(a).redISub(a);let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),t=c,e=o.redMul(a.redISub(c)).redISub(h),r=this.y.redAdd(this.y)}else{const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr();let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),t=c.redISub(a).redISub(a),e=o.redMul(a.redISub(t)).redISub(h),r=this.y.redMul(this.z),r=r.redIAdd(r)}return new p(t,e,r)}eq(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;const e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;const i=e.redMul(this.z),n=r.redMul(t.z);return 0===this.y.redMul(n).redISub(t.y.redMul(i)).cmpn(0)}eqXToP(t){const e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;const i=t.clone(),n=this.curve.redN.redMul(e);for(;;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}}inspect(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"}isInfinity(){return 0===this.z.cmpn(0)}}const b=(t,e="Hash assertion failed")=>{if(!t)throw new Error(e)};class m{pending;pendingTotal;blockSize;outSize;endian;_delta8;_delta32;padLength;hmacStrength;constructor(t,e,r,i){this.pending=null,this.pendingTotal=0,this.blockSize=t,this.outSize=e,this.hmacStrength=r,this.padLength=i/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}_update(t,e){throw new Error("Not implemented")}_digest(){throw new Error("Not implemented")}_digestHex(){throw new Error("Not implemented")}update(t,e){if(t=g(t,e),null==this.pending?this.pending=t:this.pending=this.pending.concat(t),this.pendingTotal+=t.length,this.pending.length>=this._delta8){const e=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-e,t.length),0===this.pending.length&&(this.pending=null),t=function(t,e,r,i){const n=r-0;b(n%4==0);const s=new Array(n/4);for(let e=0,r=0;e<s.length;e++,r+=4){let n;n="big"===i?t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]:t[r+3]<<24|t[r+2]<<16|t[r+1]<<8|t[r],s[e]=n>>>0}return s}(t,0,t.length-e,this.endian);for(let e=0;e<t.length;e+=this._delta32)this._update(t,e)}return this}digest(){return this.update(this._pad()),b(null===this.pending),this._digest()}digestHex(){return this.update(this._pad()),b(null===this.pending),this._digestHex()}_pad(){let t=this.pendingTotal;const e=this._delta8,r=e-(t+this.padLength)%e,i=new Array(r+this.padLength);let n,s;for(i[0]=128,n=1;n<r;n++)i[n]=0;if(t<<=3,"big"===this.endian){for(s=8;s<this.padLength;s++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=t>>>24&255,i[n++]=t>>>16&255,i[n++]=t>>>8&255,i[n++]=255&t}else for(i[n++]=255&t,i[n++]=t>>>8&255,i[n++]=t>>>16&255,i[n++]=t>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,s=8;s<this.padLength;s++)i[n++]=0;return i}}function w(t,e){return 55296==(64512&t.charCodeAt(e))&&!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1))}function g(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];const r=[];if("string"==typeof t)if("hex"!==e){let e=0;for(let i=0;i<t.length;i++){let n=t.charCodeAt(i);n<128?r[e++]=n:n<2048?(r[e++]=n>>6|192,r[e++]=63&n|128):w(t,i)?(n=65536+((1023&n)<<10)+(1023&t.charCodeAt(++i)),r[e++]=n>>18|240,r[e++]=n>>12&63|128,r[e++]=n>>6&63|128,r[e++]=63&n|128):(r[e++]=n>>12|224,r[e++]=n>>6&63|128,r[e++]=63&n|128)}}else{(t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t);for(let e=0;e<t.length;e+=2)r.push(parseInt(t[e]+t[e+1],16))}else for(let e=0;e<t.length;e++)r[e]=0|t[e];return r}function y(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function I(t,e){let r="";for(let n=0;n<t.length;n++){let s=t[n];"little"===e&&(s=y(s)),r+=7===(i=s.toString(16)).length?"0"+i:6===i.length?"00"+i:5===i.length?"000"+i:4===i.length?"0000"+i:3===i.length?"00000"+i:2===i.length?"000000"+i:1===i.length?"0000000"+i:i}var i;return r}function v(t,e){const r=new Array(4*t.length);for(let i=0,n=0;i<t.length;i++,n+=4){const s=t[i];"big"===e?(r[n]=s>>>24,r[n+1]=s>>>16&255,r[n+2]=s>>>8&255,r[n+3]=255&s):(r[n+3]=s>>>24,r[n+2]=s>>>16&255,r[n+1]=s>>>8&255,r[n]=255&s)}return r}function k(t,e){return t>>>e|t<<32-e}function P(t,e){return t<<e|t>>>32-e}function O(t,e){return t+e>>>0}function S(t,e,r){return t+e+r>>>0}function N(t,e,r,i){return t+e+r+i>>>0}function E(t,e,r,i,n){return t+e+r+i+n>>>0}function A(t,e,r,i){return 0===t?x(e,r,i):1===t||3===t?function(t,e,r){return t^e^r}(e,r,i):2===t?_(e,r,i):void 0}function x(t,e,r){return t&e^~t&r}function _(t,e,r){return t&e^t&r^e&r}function M(t){return k(t,2)^k(t,13)^k(t,22)}function T(t){return k(t,6)^k(t,11)^k(t,25)}function F(t){return k(t,7)^k(t,18)^t>>>3}const V=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],B=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],R=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],C=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];function H(t,e,r,i){return t<=15?e^r^i:t<=31?e&r|~e&i:t<=47?(e|~r)^i:t<=63?e&i|r&~i:e^(r|~i)}function D(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function U(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}function L(t,e,r,i){const n=t[e],s=i+t[e+1]>>>0,a=(s<i?1:0)+r+n;t[e]=a>>>0,t[e+1]=s}function K(t,e,r,i){return(e+i>>>0<e?1:0)+t+r>>>0}function q(t,e,r,i){return e+i>>>0}function z(t,e,r,i,n,s,a,o){let c=0,h=e;return h=h+i>>>0,c+=h<e?1:0,h=h+s>>>0,c+=h<s?1:0,h=h+o>>>0,c+=h<o?1:0,t+r+n+a+c>>>0}function W(t,e,r,i,n,s,a,o,c,h){let u=0,d=e;return d=d+i>>>0,u+=d<e?1:0,d=d+s>>>0,u+=d<s?1:0,d=d+o>>>0,u+=d<o?1:0,d=d+h>>>0,u+=d<h?1:0,t+r+n+a+c+u>>>0}function j(t,e,r,i,n,s,a,o,c,h){return e+i+s+o+h>>>0}function $(t,e,r){return(e<<32-r|t>>>r)>>>0}function X(t,e,r){return(t<<32-r|e>>>r)>>>0}function G(t,e,r){return t>>>r}function Y(t,e,r){return(t<<32-r|e>>>r)>>>0}class Z extends m{h;constructor(){super(512,160,192,64),this.endian="little",this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}_update(t,e){let r,i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=i,h=n,u=s,d=a,l=o;for(let f=0;f<80;f++)r=O(P(N(i,H(f,n,s,a),t[V[f]+e],D(f)),R[f]),o),i=o,o=a,a=P(s,10),s=n,n=r,r=O(P(N(c,H(79-f,h,u,d),t[B[f]+e],U(f)),C[f]),l),c=l,l=d,d=P(u,10),u=h,h=r;r=S(this.h[1],s,d),this.h[1]=S(this.h[2],a,l),this.h[2]=S(this.h[3],o,c),this.h[3]=S(this.h[4],i,h),this.h[4]=S(this.h[0],n,u),this.h[0]=r}_digest(){return v(this.h,"little")}_digestHex(){return I(this.h,"little")}}class Q extends m{h;W;k;constructor(){super(512,256,192,64),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],this.W=new Array(64)}_update(t,e){const r=this.W;let i;for(i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=N(k(n=r[i-2],17)^k(n,19)^n>>>10,r[i-7],F(r[i-15]),r[i-16]);var n;let s=this.h[0],a=this.h[1],o=this.h[2],c=this.h[3],h=this.h[4],u=this.h[5],d=this.h[6],l=this.h[7];for(b(this.k.length===r.length),i=0;i<r.length;i++){const t=E(l,T(h),x(h,u,d),this.k[i],r[i]),e=O(M(s),_(s,a,o));l=d,d=u,u=h,h=O(c,t),c=o,o=a,a=s,s=O(t,e)}this.h[0]=O(this.h[0],s),this.h[1]=O(this.h[1],a),this.h[2]=O(this.h[2],o),this.h[3]=O(this.h[3],c),this.h[4]=O(this.h[4],h),this.h[5]=O(this.h[5],u),this.h[6]=O(this.h[6],d),this.h[7]=O(this.h[7],l)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}class J extends m{h;W;k;constructor(){super(512,160,80,64),this.k=[1518500249,1859775393,2400959708,3395469782],this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}_update(t,e){const r=this.W;let i;for(i=0;i<16;i++)r[i]=t[e+i];for(;i<r.length;i++)r[i]=P(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);let n=this.h[0],s=this.h[1],a=this.h[2],o=this.h[3],c=this.h[4];for(i=0;i<r.length;i++){const t=~~(i/20),e=E(P(n,5),A(t,s,a,o),c,r[i],this.k[t]);c=o,o=a,a=P(s,30),s=n,n=e}this.h[0]=O(this.h[0],n),this.h[1]=O(this.h[1],s),this.h[2]=O(this.h[2],a),this.h[3]=O(this.h[3],o),this.h[4]=O(this.h[4],c)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}class tt extends m{h;W;k;constructor(){super(1024,512,192,128),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],this.W=new Array(160)}_prepareBlock(t,e){const r=this.W;let i;for(i=0;i<32;i++)r[i]=t[e+i];for(;i<r.length;i+=2){const t=dt(r[i-4],r[i-3]),e=lt(r[i-4],r[i-3]),n=r[i-14],s=r[i-13],a=ht(r[i-30],r[i-29]),o=ut(r[i-30],r[i-29]),c=r[i-32],h=r[i-31];r[i]=z(t,e,n,s,a,o,c,h),r[i+1]=e+s+o+h>>>0}}_update(t,e){this._prepareBlock(t,e);const r=this.W;let i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=this.h[5],h=this.h[6],u=this.h[7],d=this.h[8],l=this.h[9],f=this.h[10],p=this.h[11],m=this.h[12],w=this.h[13],g=this.h[14],y=this.h[15];b(this.k.length===r.length);for(let t=0;t<r.length;t+=2){let e=g,b=y,I=ot(d,l),v=ct(d,l);const k=et(d,0,f,0,m),P=rt(0,l,0,p,0,w),O=this.k[t],S=this.k[t+1],N=r[t],E=r[t+1],A=W(e,b,I,v,k,P,O,S,N,E),x=j(0,b,0,v,0,P,0,S,0,E);e=st(i,n),b=at(i,n),I=it(i,0,s,0,o),v=nt(0,n,0,a,0,c);const _=K(e,b,I,v),M=q(0,b,0,v);g=m,y=w,m=f,w=p,f=d,p=l,d=K(h,u,A,x),l=q(0,u,0,x),h=o,u=c,o=s,c=a,s=i,a=n,i=K(A,x,_,M),n=q(0,x,0,M)}L(this.h,0,i,n),L(this.h,2,s,a),L(this.h,4,o,c),L(this.h,6,h,u),L(this.h,8,d,l),L(this.h,10,f,p),L(this.h,12,m,w),L(this.h,14,g,y)}_digest(){return v(this.h,"big")}_digestHex(){return I(this.h,"big")}}function et(t,e,r,i,n,s){let a=t&r^~t&n;return a<0&&(a+=4294967296),a}function rt(t,e,r,i,n,s){let a=e&i^~e&s;return a<0&&(a+=4294967296),a}function it(t,e,r,i,n,s){let a=t&r^t&n^r&n;return a<0&&(a+=4294967296),a}function nt(t,e,r,i,n,s){let a=e&i^e&s^i&s;return a<0&&(a+=4294967296),a}function st(t,e){let r=$(t,e,28)^$(e,t,2)^$(e,t,7);return r<0&&(r+=4294967296),r}function at(t,e){let r=X(t,e,28)^X(e,t,2)^X(e,t,7);return r<0&&(r+=4294967296),r}function ot(t,e){let r=$(t,e,14)^$(t,e,18)^$(e,t,9);return r<0&&(r+=4294967296),r}function ct(t,e){let r=X(t,e,14)^X(t,e,18)^X(e,t,9);return r<0&&(r+=4294967296),r}function ht(t,e){let r=$(t,e,1)^$(t,e,8)^G(t,0,7);return r<0&&(r+=4294967296),r}function ut(t,e){let r=X(t,e,1)^X(t,e,8)^Y(t,e,7);return r<0&&(r+=4294967296),r}function dt(t,e){let r=$(t,e,19)^$(e,t,29)^G(t,0,6);return r<0&&(r+=4294967296),r}function lt(t,e){let r=X(t,e,19)^X(e,t,29)^Y(t,e,6);return r<0&&(r+=4294967296),r}class ft{inner;outer;blockSize=64;outSize=32;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new Q).update(t).digest()),b(t.length<=this.blockSize),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new Q).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new Q).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class pt{inner;outer;blockSize=64;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new J).update(t).digest()),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new J).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new J).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class bt{inner;outer;blockSize=128;outSize=32;constructor(t){let e;for((t=g(t,"hex")).length>this.blockSize&&(t=(new tt).update(t).digest()),b(t.length<=this.blockSize),e=t.length;e<this.blockSize;e++)t.push(0);for(e=0;e<t.length;e++)t[e]^=54;for(this.inner=(new tt).update(t),e=0;e<t.length;e++)t[e]^=106;this.outer=(new tt).update(t)}update(t,e){return this.inner.update(t,e),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}const mt=(t,e)=>(new Z).update(t,e).digest(),wt=(t,e)=>(new J).update(t,e).digest(),gt=(t,e)=>(new Q).update(t,e).digest(),yt=(t,e)=>(new tt).update(t,e).digest(),It=(t,e)=>{const r=(new Q).update(t,e).digest();return(new Q).update(r).digest()},vt=(t,e)=>{const r=(new Q).update(t,e).digest();return(new Z).update(r).digest()},kt=(t,e,r)=>new ft(t).update(e,r).digest(),Pt=(t,e,r)=>new bt(t).update(e,r).digest();function Ot(t,e,r,i,n="sha512"){if("sha512"!==n)throw new Error("Only sha512 is supported in this PBKDF2 implementation");const s=new Array(i),a=[...e,0,0,0,0];let o=0;const c=Math.ceil(i/64);for(let i=1;i<=c;i++){a[e.length]=i>>24&255,a[e.length+1]=i>>16&255,a[e.length+2]=i>>8&255,a[e.length+3]=255&i;const n=Pt(t,a);let c=n;for(let e=1;e<r;e++){c=Pt(t,c);for(let t=0;t<64;t++)n[t]^=c[t]}for(let t=0;t<n.length;t++)s[o+t]=n[t];o+=64}return s.slice(0,i)}const St=t=>t.length%2==1?"0"+t:t,Nt=t=>{let e="";for(const r of t)e+=St(r.toString(16));return e},Et=(t,e)=>{if(Array.isArray(t))return t.slice();if(!t)return[];if("string"!=typeof t)return Array.from(t,(t=>0|t));switch(e){case"hex":return At(t);case"base64":return xt(t);default:return _t(t)}},At=t=>{(t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t);const e=[];for(let r=0;r<t.length;r+=2)e.push(parseInt(t[r]+t[r+1],16));return e},xt=t=>{const e=[];let r=0,i=0;for(const n of t.replace(/=+$/,""))r=r<<6|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(n),i+=6,i>=8&&(i-=8,e.push(r>>i&255),r&=(1<<i)-1);return e},_t=t=>{const e=[];for(let r=0;r<t.length;r++){const i=t.charCodeAt(r),n=i>>8,s=255&i;n?e.push(n,s):e.push(s)}return e},Mt=t=>{let e="",r=0;for(let i=0;i<t.length;i++){const n=t[i];if(r>0)r--;else if(n<=127)e+=String.fromCharCode(n);else if(n>=192&&n<=223){r=1;const s=(31&n)<<6|63&t[i+1];e+=String.fromCharCode(s)}else if(n>=224&&n<=239){r=2;const s=(15&n)<<12|(63&t[i+1])<<6|63&t[i+2];e+=String.fromCharCode(s)}else if(n>=240&&n<=247){r=3;const s=(7&n)<<18|(63&t[i+1])<<12|(63&t[i+2])<<6|63&t[i+3],a=55296+(s-65536>>10),o=56320+(s-65536&1023);e+=String.fromCharCode(a,o)}}return e},Tt=(t,e)=>{switch(e){case"hex":return Nt(t);case"utf8":return Mt(t);default:return t}};function Ft(t){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let r,i="";for(r=0;r<t.length;r+=3){const n=t[r],s=r+1<t.length?t[r+1]:0,a=r+2<t.length?t[r+2]:0,o=(3&n)<<4|s>>4,c=(15&s)<<2|a>>6,h=63&a;i+=e.charAt(n>>2)+e.charAt(o),i+=r+1<t.length?e.charAt(c):"=",i+=r+2<t.length?e.charAt(h):"="}return i}const Vt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Bt=t=>{if(!t||"string"!=typeof t)throw new Error(`Expected base58 string but got “${t}”`);if(t.match(/[IOl0]/gmu))throw new Error(`Invalid base58 character “${t.match(/[IOl0]/gmu)}”`);const e=t.match(/^1+/gmu),r=e?e[0].length:0,i=(t.length-r)*(Math.log(58)/Math.log(256))+1>>>0;var n;return[...new Uint8Array([...new Uint8Array(r),...t.match(/./gmu).map((t=>Vt.indexOf(t))).reduce(((t,e)=>t.map((t=>{const r=58*t+e;return e=r>>8,r}))),new Uint8Array(i)).reverse().filter((n=!1,t=>n=n||t))])]},Rt=t=>{const e=Array(256).fill(-1);for(let t=0;t<58;++t)e[Vt.charCodeAt(t)]=t;const r=[];for(const i of t){let t=i;for(let i=0;i<r.length;++i){const n=(e[r[i]]<<8)+t;r[i]=Vt.charCodeAt(n%58),t=n/58|0}for(;t;)r.push(Vt.charCodeAt(t%58)),t=t/58|0}for(const e of t){if(e)break;r.push("1".charCodeAt(0))}return r.reverse(),String.fromCharCode(...r)},Ct=(t,e=[0])=>{let r=It([...e,...t]);return r=[...e,...t,...r.slice(0,4)],Rt(r)},Ht=(t,e,r=1)=>{const i=Bt(t);let n=i.slice(0,r),s=i.slice(r,-4),a=[...n,...s];return a=It(a),i.slice(-4).forEach(((t,e)=>{if(t!==a[e])throw new Error("Invalid checksum")})),"hex"===e&&(n=Nt(n),s=Nt(s)),{prefix:n,data:s}};class Dt{bufs;constructor(t){this.bufs=t||[]}getLength(){let t=0;for(const e of this.bufs)t+=e.length;return t}toArray(){const t=this.getLength(),e=new Array(t);let r=0;for(const t of this.bufs)for(const i of t)e[r++]=i;return e}write(t){return this.bufs.push(t),this}writeReverse(t){const e=new Array(t.length);for(let r=0;r<e.length;r++)e[r]=t[t.length-1-r];return this.bufs.push(e),this}writeUInt8(t){const e=new Array(1);return e[0]=t,this.write(e),this}writeInt8(t){const e=new Array(1);return e[0]=255&t,this.write(e),this}writeUInt16BE(t){return this.bufs.push([t>>8&255,255&t]),this}writeInt16BE(t){return this.writeUInt16BE(65535&t)}writeUInt16LE(t){return this.bufs.push([255&t,t>>8&255]),this}writeInt16LE(t){return this.writeUInt16LE(65535&t)}writeUInt32BE(t){return this.bufs.push([t>>24&255,t>>16&255,t>>8&255,255&t]),this}writeInt32BE(t){return this.writeUInt32BE(t>>>0)}writeUInt32LE(t){return this.bufs.push([255&t,t>>8&255,t>>16&255,t>>24&255]),this}writeInt32LE(t){return this.writeUInt32LE(t>>>0)}writeUInt64BEBn(t){const e=t.toArray("be",8);return this.write(e),this}writeUInt64LEBn(t){const e=t.toArray("be",8);return this.writeReverse(e),this}writeUInt64LE(t){const e=new c(t).toArray("be",8);return this.writeReverse(e),this}writeVarIntNum(t){const e=Dt.varIntNum(t);return this.write(e),this}writeVarIntBn(t){const e=Dt.varIntBn(t);return this.write(e),this}static varIntNum(t){let e;if(t<253)e=[t];else if(t<65536)e=[253,255&t,t>>8&255];else if(t<4294967296)e=[254,255&t,t>>8&255,t>>16&255,t>>24&255];else{const r=4294967295&t,i=4294967295&Math.floor(t/4294967296);e=[255,255&r,r>>8&255,r>>16&255,r>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]}return e}static varIntBn(t){let e;if(t.ltn(253))e=[t.toNumber()];else if(t.ltn(65536)){const r=t.toNumber();e=[253,255&r,r>>8&255]}else if(t.lt(new c(4294967296))){const r=t.toNumber();e=[254,255&r,r>>8&255,r>>16&255,r>>24&255]}else{const r=new Dt;r.writeUInt8(255),r.writeUInt64LEBn(t),e=r.toArray()}return e}}class Ut{bin;pos;constructor(t=[],e=0){this.bin=t,this.pos=e}eof(){return this.pos>=this.bin.length}read(t=this.bin.length){const e=this.pos,r=this.pos+t;return this.pos=r,this.bin.slice(e,r)}readReverse(t=this.bin.length){const e=new Array(t);for(let r=0;r<t;r++)e[r]=this.bin[this.pos+t-1-r];return this.pos+=t,e}readUInt8(){const t=this.bin[this.pos];return this.pos+=1,t}readInt8(){const t=this.bin[this.pos];return this.pos+=1,128&t?t-256:t}readUInt16BE(){const t=this.bin[this.pos]<<8|this.bin[this.pos+1];return this.pos+=2,t}readInt16BE(){const t=this.readUInt16BE();return 32768&t?t-65536:t}readUInt16LE(){const t=this.bin[this.pos]|this.bin[this.pos+1]<<8;return this.pos+=2,t}readInt16LE(){const t=this.readUInt16LE();return 32768&t?t-65536:t}readUInt32BE(){const t=16777216*this.bin[this.pos]+(this.bin[this.pos+1]<<16|this.bin[this.pos+2]<<8|this.bin[this.pos+3]);return this.pos+=4,t}readInt32BE(){const t=this.readUInt32BE();return 2147483648&t?t-4294967296:t}readUInt32LE(){const t=(this.bin[this.pos]|this.bin[this.pos+1]<<8|this.bin[this.pos+2]<<16|this.bin[this.pos+3]<<24)>>>0;return this.pos+=4,t}readInt32LE(){const t=this.readUInt32LE();return 2147483648&t?t-4294967296:t}readUInt64BEBn(){const t=this.bin.slice(this.pos,this.pos+8),e=new c(t);return this.pos=this.pos+8,e}readUInt64LEBn(){const t=this.readReverse(8);return new c(t)}readVarIntNum(){const t=this.readUInt8();let e;switch(t){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:if(e=this.readUInt64LEBn(),e.lte(new c(2).pow(new c(53))))return e.toNumber();throw new Error("number too large to retain precision - use readVarIntBn");default:return t}}readVarInt(){switch(this.bin[this.pos]){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}}readVarIntBn(){const t=this.readUInt8();switch(t){case 253:return new c(this.readUInt16LE());case 254:return new c(this.readUInt32LE());case 255:return this.readUInt64LEBn();default:return new c(t)}}}const Lt=t=>{if(0===t.length)return t;const e=t[t.length-1];if(127&e)return t;if(1===t.length)return[];if(128&t[t.length-2])return t;for(let r=t.length-1;r>0;r--)if(0!==t[r-1])return 128&t[r-1]?(t[r]=e,t.slice(0,r+1)):(t[r-1]|=e,t.slice(0,r));return[]};class Kt extends f{static red=new d("k256");static a=new c(0).toRed(Kt.red);static b=new c(7).toRed(Kt.red);static zero=new c(0).toRed(Kt.red);x;y;inf;static fromDER(t){if((4===t[0]||6===t[0]||7===t[0])&&t.length-1==64){if(6===t[0]){if(t[t.length-1]%2!=0)throw new Error("Point string value is wrong length")}else if(7===t[0]&&t[t.length-1]%2!=1)throw new Error("Point string value is wrong length");return new Kt(t.slice(1,33),t.slice(33,65))}if((2===t[0]||3===t[0])&&t.length-1==32)return Kt.fromX(t.slice(1,33),3===t[0]);throw new Error("Unknown point format")}static fromString(t){const e=Et(t,"hex");return Kt.fromDER(e)}static redSqrtOptimized(t){const e=Kt.red.m.addn(1).iushrn(2);return t.redPow(e)}static fromX(t,e){if("function"==typeof BigInt){function r(t,e){return(t%e+e)%e}function i(t,e,i){let n=BigInt(1);for(t=r(t,i);e>BigInt(0);)(e&BigInt(1))===BigInt(1)&&(n=r(n*t,i)),e>>=BigInt(1),t=r(t*t,i);return n}function n(t,e){const n=i(t,e+BigInt(1)>>BigInt(2),e);return r(n*n,e)===r(t,e)?n:null}const s=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),a=(BigInt(0),BigInt(7));let o;if(t instanceof c)o=BigInt("0x"+t.toString(16));else if("string"==typeof t)o=BigInt("0x"+t);else if(Array.isArray(t))o=BigInt("0x"+Buffer.from(t).toString("hex").padStart(64,"0"));else{if("number"!=typeof t)throw new Error("Invalid x-coordinate type");o=BigInt(t)}o=r(o,s);let h=n(r(i(o,BigInt(3),s)+a,s),s);if(null===h)throw new Error("Invalid point");const u=h%BigInt(2)===BigInt(1);(e&&!u||!e&&u)&&(h=s-h);const l=new c(o.toString(16),16),f=new c(h.toString(16),16);return new Kt(l,f)}{const p=new d("k256"),b=new c(0).toRed(p),m=new c(7).toRed(p),w=new c(0).toRed(p);c.isBN(t)||(t=new c(t,16)),null==t.red&&(t=t.toRed(p));const g=t.redSqr().redMul(t).redIAdd(t.redMul(b)).redIAdd(m);let y=g.redSqrt();if(0!==y.redSqr().redSub(g).cmp(w))throw new Error("invalid point");const I=y.fromRed().isOdd();return(e&&!I||!e&&I)&&(y=y.redNeg()),new Kt(t,y)}}static fromJSON(t,e){"string"==typeof t&&(t=JSON.parse(t));const r=new Kt(t[0],t[1],e);if("object"!=typeof t[2])return r;const i=t=>new Kt(t[0],t[1],e),n=t[2];return r.precomputed={beta:null,doubles:"object"==typeof n.doubles&&null!==n.doubles?{step:n.doubles.step,points:[r].concat(n.doubles.points.map(i))}:void 0,naf:"object"==typeof n.naf&&null!==n.naf?{wnd:n.naf.wnd,points:[r].concat(n.naf.points.map(i))}:void 0},r}constructor(t,e,r=!0){super("affine"),this.precomputed=null,null===t&&null===e?(this.x=null,this.y=null,this.inf=!0):(c.isBN(t)||(t=new c(t,16)),this.x=t,c.isBN(e)||(e=new c(e,16)),this.y=e,r&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),null===this.x.red&&(this.x=this.x.toRed(this.curve.red)),null===this.y.red&&(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}validate(){return this.curve.validate(this)}encode(t=!0,e){const r=this.curve.p.byteLength(),i=this.getX().toArray("be",r);let n;return n=t?[this.getY().isEven()?2:3].concat(i):[4].concat(i,this.getY().toArray("be",r)),"hex"!==e?n:Nt(n)}toString(){return this.encode(!0,"hex")}toJSON(){return null==this.precomputed?[this.x,this.y]:[this.x,this.y,"object"==typeof this.precomputed&&null!==this.precomputed?{doubles:null!=this.precomputed.doubles?{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)}:void 0,naf:null!=this.precomputed.naf?{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}:void 0}:void 0]}inspect(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"}isInfinity(){return this.inf}add(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return new Kt(null,null);if(0===this.x.cmp(t.x))return new Kt(null,null);let e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));const r=e.redSqr().redISub(this.x).redISub(t.x),i=e.redMul(this.x.redSub(r)).redISub(this.y);return new Kt(r,i)}dbl(){if(this.inf)return this;const t=this.y.redAdd(this.y);if(0===t.cmpn(0))return new Kt(null,null);const e=this.curve.a,r=this.x.redSqr(),i=t.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(i),s=n.redSqr().redISub(this.x.redAdd(this.x)),a=n.redMul(this.x.redSub(s)).redISub(this.y);return new Kt(s,a)}getX(){return this.x.fromRed()}getY(){return this.y.fromRed()}mul(t){return c.isBN(t)||(t=new c(t,16)),this.isInfinity()?this:this._hasDoubles(t)?this._fixedNafMul(t):this._endoWnafMulAdd([this],[t])}mulAdd(t,e,r){const i=[this,e],n=[t,r];return this._endoWnafMulAdd(i,n)}jmulAdd(t,e,r){const i=[this,e],n=[t,r];return this._endoWnafMulAdd(i,n,!0)}eq(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))}neg(t){if(this.inf)return this;const e=new Kt(this.x,this.y.redNeg());if(t&&null!=this.precomputed){const t=this.precomputed,r=t=>t.neg();e.precomputed={naf:null!=t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(r)},doubles:null!=t.doubles&&{step:t.doubles.step,points:t.doubles.points.map((t=>t.neg()))},beta:void 0}}return e}dblp(t){let e=this;for(let r=0;r<t;r++)e=e.dbl();return e}toJ(){return this.inf?new p(null,null,null):new p(this.x,this.y,this.curve.one)}_getBeta(){if("object"!=typeof this.curve.endo)return;const t=this.precomputed;if("object"==typeof t&&null!==t&&"object"==typeof t.beta&&null!==t.beta)return t.beta;const e=new Kt(this.x.redMul(this.curve.endo.beta),this.y);if(null!=t){const r=this.curve,i=t=>new Kt(t.x.redMul(r.endo.beta),t.y);t.beta=e,e.precomputed={beta:null,naf:null!=t.naf?{wnd:t.naf.wnd,points:t.naf.points.map(i)}:void 0,doubles:null!=t.doubles?{step:t.doubles.step,points:t.doubles.points.map(i)}:void 0}}return e}_fixedNafMul(t){if("object"!=typeof this.precomputed||null===this.precomputed)throw new Error("_fixedNafMul requires precomputed values for the point");const e=this._getDoubles(),r=this.curve.getNAF(t,1,this.curve._bitLength);let i=(1<<e.step+1)-(e.step%2==0?2:1);i/=3;const n=[];for(let t=0;t<r.length;t+=e.step){let i=0;for(let n=t+e.step-1;n>=t;n--)i=(i<<1)+r[n];n.push(i)}let s=new p(null,null,null),a=new p(null,null,null);for(let t=i;t>0;t--){for(let r=0;r<n.length;r++){const i=n[r];i===t?a=a.mixedAdd(e.points[r]):i===-t&&(a=a.mixedAdd(e.points[r].neg()))}s=s.add(a)}return s.toP()}_wnafMulAdd(t,e,r,i,n){const s=this.curve._wnafT1,a=this.curve._wnafT2,o=this.curve._wnafT3;let c=0;for(let r=0;r<i;r++){const i=e[r]._getNAFPoints(t);s[r]=i.wnd,a[r]=i.points}for(let t=i-1;t>=1;t-=2){const i=t-1,n=t;if(1!==s[i]||1!==s[n]){o[i]=this.curve.getNAF(r[i],s[i],this.curve._bitLength),o[n]=this.curve.getNAF(r[n],s[n],this.curve._bitLength),c=Math.max(o[i].length,c),c=Math.max(o[n].length,c);continue}const h=[e[i],null,null,e[n]];0===e[i].y.cmp(e[n].y)?(h[1]=e[i].add(e[n]),h[2]=e[i].toJ().mixedAdd(e[n].neg())):0===e[i].y.cmp(e[n].y.redNeg())?(h[1]=e[i].toJ().mixedAdd(e[n]),h[2]=e[i].add(e[n].neg())):(h[1]=e[i].toJ().mixedAdd(e[n]),h[2]=e[i].toJ().mixedAdd(e[n].neg()));const u=[-3,-1,-5,-7,0,7,5,1,3],d=this.curve.getJSF(r[i],r[n]);c=Math.max(d[0].length,c),o[i]=new Array(c),o[n]=new Array(c);for(let t=0;t<c;t++){const e=0|d[0][t],r=0|d[1][t];o[i][t]=u[3*(e+1)+(r+1)],o[n][t]=0,a[i]=h}}let h=new p(null,null,null);const u=this.curve._wnafT4;for(let t=c;t>=0;t--){let e=0;for(;t>=0;){let r=!0;for(let e=0;e<i;e++)u[e]=0|o[e][t],0!==u[e]&&(r=!1);if(!r)break;e++,t--}if(t>=0&&e++,h=h.dblp(e),t<0)break;for(let t=0;t<i;t++){const e=u[t];let r;0!==e&&(e>0?r=a[t][e-1>>1]:e<0&&(r=a[t][-e-1>>1].neg()),h="affine"===r.type?h.mixedAdd(r):h.add(r))}}for(let t=0;t<i;t++)a[t]=null;return n?h:h.toP()}_endoWnafMulAdd(t,e,r){const i=this.curve._endoWnafT1,n=this.curve._endoWnafT2;let s;for(s=0;s<t.length;s++){const r=this.curve._endoSplit(e[s]);let a=t[s],o=a._getBeta();0!==r.k1.negative&&(r.k1.ineg(),a=a.neg(!0)),0!==r.k2.negative&&(r.k2.ineg(),o=o.neg(!0)),i[2*s]=a,i[2*s+1]=o,n[2*s]=r.k1,n[2*s+1]=r.k2}const a=this._wnafMulAdd(1,i,n,2*s,r);for(let t=0;t<2*s;t++)i[t]=null,n[t]=null;return a}_hasDoubles(t){if(null==this.precomputed)return!1;const e=this.precomputed.doubles;return"object"==typeof e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)}_getDoubles(t,e){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.doubles&&null!==this.precomputed.doubles)return this.precomputed.doubles;const r=[this];let i=this;for(let n=0;n<e;n+=t){for(let e=0;e<t;e++)i=i.dbl();r.push(i)}return{step:t,points:r}}_getNAFPoints(t){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.naf&&null!==this.precomputed.naf)return this.precomputed.naf;const e=[this],r=(1<<t)-1,i=1===r?null:this.dbl();for(let t=1;t<r;t++)e[t]=e[t-1].add(i);return{wnd:t,points:e}}}let qt;class zt{p;red;redN;zero;one;two;g;n;a;b;tinv;zeroA;threeA;endo;_endoWnafT1;_endoWnafT2;_wnafT1;_wnafT2;_wnafT3;_wnafT4;_bitLength;static assert(t,e="Elliptic curve assertion failed"){if(!t)throw new Error(e)}getNAF(t,e,r){const i=new Array(Math.max(t.bitLength(),r)+1);i.fill(0);const n=1<<e+1,s=t.clone();for(let t=0;t<i.length;t++){let e;const r=s.andln(n-1);s.isOdd()?(e=r>(n>>1)-1?(n>>1)-r:r,s.isubn(e)):e=0,i[t]=e,s.iushrn(1)}return i}getJSF(t,e){const r=[[],[]];t=t.clone(),e=e.clone();let i=0,n=0;for(;t.cmpn(-i)>0||e.cmpn(-n)>0;){let s,a,o=t.andln(3)+i&3,c=e.andln(3)+n&3;if(3===o&&(o=-1),3===c&&(c=-1),1&o){const e=t.andln(7)+i&7;s=3!==e&&5!==e||2!==c?o:-o}else s=0;if(r[0].push(s),1&c){const t=e.andln(7)+n&7;a=3!==t&&5!==t||2!==o?c:-c}else a=0;r[1].push(a),2*i===s+1&&(i=1-i),2*n===a+1&&(n=1-n),t.iushrn(1),e.iushrn(1)}return r}static cachedProperty(t,e,r){const i="_"+e;t.prototype[e]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}}static parseBytes(t){return"string"==typeof t?Et(t,"hex"):t}static intFromLE(t){return new c(t,"hex","le")}constructor(){if(void 0!==qt)return qt;qt=this;const t={prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",{doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}]};this.p=new c(t.p,16),this.red=new d(t.prime),this.zero=new c(0).toRed(this.red),this.one=new c(1).toRed(this.red),this.two=new c(2).toRed(this.red),this.n=new c(t.n,16),this.g=Kt.fromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n.bitLength(),this.redN=this.n.toRed(this.red),this.a=new c(t.a,16).toRed(this.red),this.b=new c(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}_getEndomorphism(t){if(!this.zeroA||1!==this.p.modrn(3))return;let e,r,i;if(void 0!==t.beta)e=new c(t.beta,16).toRed(this.red);else{const t=this._getEndoRoots(this.p);e=t[0].cmp(t[1])<0?t[0]:t[1],e=e.toRed(this.red)}if(void 0!==t.lambda)r=new c(t.lambda,16);else{const t=this._getEndoRoots(this.n);0===this.g.mul(t[0]).x.cmp(this.g.x.redMul(e))?r=t[0]:(r=t[1],zt.assert(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return i="object"==typeof t.basis&&null!==t.basis?t.basis.map((function(t){return{a:new c(t.a,16),b:new c(t.b,16)}})):this._getEndoBasis(r),{beta:e,lambda:r,basis:i}}_getEndoRoots(t){const e=t===this.p?this.red:new l(t),r=new c(2).toRed(e).redInvm(),i=r.redNeg(),n=new c(3).toRed(e).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]}_getEndoBasis(t){const e=this.n.ushrn(Math.floor(this.n.bitLength()/2));let r,i,n,s,a,o,h,u,d,l=t,f=this.n.clone(),p=new c(1),b=new c(0),m=new c(0),w=new c(1),g=0;for(;0!==l.cmpn(0);){const t=f.div(l);u=f.sub(t.mul(l)),d=m.sub(t.mul(p));const a=w.sub(t.mul(b));if("object"!=typeof n&&u.cmp(e)<0)r=h.neg(),i=p,n=u.neg(),s=d;else if("object"==typeof n&&2==++g)break;h=u,f=l,l=u,m=p,p=d,w=b,b=a}a=u.neg(),o=d;const y=n.sqr().add(s.sqr());return a.sqr().add(o.sqr()).cmp(y)>=0&&(a=r,o=i),0!==n.negative&&(n=n.neg(),s=s.neg()),0!==a.negative&&(a=a.neg(),o=o.neg()),[{a:n,b:s},{a,b:o}]}_endoSplit(t){const e=this.endo.basis,r=e[0],i=e[1],n=i.b.mul(t).divRound(this.n),s=r.b.neg().mul(t).divRound(this.n),a=n.mul(r.a),o=s.mul(i.a),c=n.mul(r.b),h=s.mul(i.b);return{k1:t.sub(a).sub(o),k2:c.add(h).neg()}}validate(t){if(t.inf)return!0;const e=t.x,r=t.y,i=this.a.redMul(e),n=e.redSqr().redMul(e).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)}}class Wt{r;s;static fromDER(t,e){const r=(t,e)=>{const r=t[e.place++];if(128&r)throw new Error("Invalid DER entity length");return r};t=Et(t,e);const i=new class{place;constructor(){this.place=0}};if(48!==t[i.place++])throw new Error("Signature DER must start with 0x30");if(r(t,i)+i.place!==t.length)throw new Error("Signature DER invalid");if(2!==t[i.place++])throw new Error("Signature DER invalid");const n=r(t,i);let s=t.slice(i.place,n+i.place);if(i.place+=n,2!==t[i.place++])throw new Error("Signature DER invalid");const a=r(t,i);if(t.length!==a+i.place)throw new Error("Invalid R-length in signature DER");let o=t.slice(i.place,a+i.place);if(0===s[0]){if(!(128&s[1]))throw new Error("Invalid R-value in signature DER");s=s.slice(1)}if(0===o[0]){if(!(128&o[1]))throw new Error("Invalid S-value in signature DER");o=o.slice(1)}return new Wt(new c(s),new c(o))}static fromCompact(t,e){if(65!==(t=Et(t,e)).length)throw new Error("Invalid Compact Signature");const r=t[0];if(r<27||r>=35)throw new Error("Invalid Compact Byte");return new Wt(new c(t.slice(1,33)),new c(t.slice(33,65)))}constructor(t,e){this.r=t,this.s=e}verify(t,e,r){const i=new c(gt(t,r),16);return Gt(i,this,e)}toString(t){return this.toDER(t)}toDER(t){const e=(t,e)=>{if(!(e<128))throw new Error("len must be < 0x80");t.push(e)},r=t=>{let e=0;const r=t.length-1;for(;0===t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)};let i=this.r.toArray(),n=this.s.toArray();for(128&i[0]&&(i=[0].concat(i)),128&n[0]&&(n=[0].concat(n)),i=r(i),n=r(n);0===n[0]&&!(128&n[1]);)n=n.slice(1);let s=[2];e(s,i.length),s=s.concat(i),s.push(2),e(s,n.length);const a=s.concat(n);let o=[48];return e(o,a.length),o=o.concat(a),"hex"===t?Nt(o):"base64"===t?Ft(o):o}toCompact(t,e,r){if(t<0||t>3)throw new Error("Invalid recovery param");if("boolean"!=typeof e)throw new Error("Invalid compressed param");let i=27+t;e&&(i+=4);let n=[i];return n=n.concat(this.r.toArray("be",32)),n=n.concat(this.s.toArray("be",32)),"hex"===r?Nt(n):"base64"===r?Ft(n):n}RecoverPublicKey(t,e){const r=this.r,i=this.s,n=!!(1&t),s=t>>1,a=new zt,o=a.n,c=a.g,h=s?r.add(o):r,u=Kt.fromX(h,n);if(!u.mul(o).isInfinity())throw new Error("nR is not at infinity");const d=e.neg().umod(o),l=r.invm(o),f=l.mul(i).umod(o),p=l.mul(d).umod(o),b=c.mul(p).add(u.mul(f)),m=new Yt(b);return m.validate(),m}CalculateRecoveryFactor(t,e){for(let r=0;r<4;r++){let i;try{i=this.RecoverPublicKey(r,e)}catch(t){continue}if(t.eq(i))return r}throw new Error("Unable to find valid recovery factor")}}class jt{K;V;constructor(t,e){if(t=Et(t,"hex"),e=Et(e,"hex"),t.length<32)throw new Error("Not enough entropy. Minimum is 256 bits");const r=t.concat(e);this.K=new Array(32),this.V=new Array(32);for(let t=0;t<32;t++)this.K[t]=0,this.V[t]=1;this.update(r)}hmac(){return new ft(this.K)}update(t){let e=this.hmac().update(this.V).update([0]);void 0!==t&&(e=e.update(t)),this.K=e.digest(),this.V=this.hmac().update(this.V).digest(),void 0!==t&&(this.K=this.hmac().update(this.V).update([1]).update(t).digest(),this.V=this.hmac().update(this.V).digest())}generate(t){let e=[];for(;e.length<t;)this.V=this.hmac().update(this.V).digest(),e=e.concat(this.V);const r=e.slice(0,t);return this.update(),Nt(r)}}function $t(t,e,r=new zt){const i=8*t.byteLength()-r.n.bitLength();return i>0&&t.iushrn(i),!e&&t.cmp(r.n)>=0?t.sub(r.n):t}const Xt=(t,e,r=!1,i)=>{if("function"==typeof BigInt){const n=BigInt(0),s=BigInt(1),a=BigInt(2),o=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"),h=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),u={x:BigInt("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),y:BigInt("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")},d=BigInt("0x"+t.toString(16)),l=BigInt("0x"+e.toString(16));if(l<=n||l>=o)throw new Error("Invalid private key");function f(t,e){const r=t.toString(16).padStart(2*e,"0"),i=new Uint8Array(e);for(let t=0;t<e;t++)i[t]=parseInt(r.substr(2*t,2),16);return i}const p=32,b=f(l,p),m=f(d,p),w=new jt(Array.from(b),Array.from(m)),g=o-s;let y=0;function I(t,e,r=!0){const i=t.toString(2).length-e.toString(2).length;return i>0&&(t>>=BigInt(i)),!r&&t>=e?t-e:t}function v(){if("function"==typeof i){const t=i(y).toString(16);return BigInt("0x"+t)}if(c.isBN(i)){const t=i.toString(16);return BigInt("0x"+t)}{const t=w.generate(p);return BigInt("0x"+t)}}function k(t,e){return(t%e+e)%e}function P(t,e){let r=s,i=n,a=k(t,e),o=e;for(;a>s;){const t=o/a,e=i-r*t,n=o-a*t;i=r,r=e,o=a,a=n}return k(r,e)}function O(t,e){if(null===t)return e;if(null===e)return t;if(t.x===e.x&&t.y===k(-e.y,h))return null;let r;if(t.x===e.x&&t.y===e.y){if(t.y===n)return null;const e=k(BigInt(3)*t.x*t.x,h);r=k(e*P(a*t.y,h),h)}else{const i=k(e.y-t.y,h);r=k(i*P(e.x-t.x,h),h)}const i=k(r*r-t.x-e.x,h);return{x:i,y:k(r*(t.x-i)-t.y,h)}}function S(t,e){let r=e,i=null;for(;t>n;)t%a===s&&(i=O(i,r)),r=O(r,r),t>>=s;return i}for(;;){let N=v();if(y+=1,N=I(N,o,!0),N<=s||N>=g){if(i instanceof c)throw new Error("Invalid fixed custom K value (must be more than 1 and less than N-1)");continue}const E=S(N,u);if(null===E){if(i instanceof c)throw new Error("Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)");continue}const A=k(E.x,o);if(A===n){if(i instanceof c)throw new Error("Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)");continue}const x=P(N,o),_=k(A*l,o);let M=k(x*(d+_),o);if(M===n){if(i instanceof c)throw new Error("Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)");continue}r&&M>o/a&&(M=o-M);const T=new c(A.toString(16),16),F=new c(M.toString(16),16);return new Wt(T,F)}}else{const V=new zt;t=$t(t);const B=V.n.byteLength(),R=e.toArray("be",B),C=t.toArray("be",B),H=new jt(R,C),D=V.n.subn(1);for(let U=0;;U++){let L="function"==typeof i?i(U):c.isBN(i)?i:new c(H.generate(B),16);if(L=$t(L,!0),L.cmpn(1)<=0||L.cmp(D)>=0){if(c.isBN(i))throw new Error("Invalid fixed custom K value (must be more than 1 and less than N-1)");continue}const K=V.g.mul(L);if(K.isInfinity()){if(c.isBN(i))throw new Error("Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)");continue}const q=K.getX().umod(V.n);if(0===q.cmpn(0)){if(c.isBN(i))throw new Error("Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)");continue}let z=L.invm(V.n).mul(q.mul(e).iadd(t));if(z=z.umod(V.n),0!==z.cmpn(0))return r&&z.cmp(V.n.ushrn(1))>0&&(z=V.n.sub(z)),new Wt(q,z);if(c.isBN(i))throw new Error("Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)")}}},Gt=(t,e,r)=>{if("function"==typeof BigInt){const i=BigInt(0),n=BigInt(1),s=BigInt(2),a=BigInt(3),o=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),c=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"),h={x:BigInt("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),y:BigInt("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")},u=(t,e)=>(t%e+e)%e,d=(t,e)=>{let[r,s]=[t,e],[a,o]=[BigInt(1),BigInt(0)];for(;s!==i;){const t=r/s;[r,s]=[s,r-t*s],[a,o]=[o,a-t*o]}return r>n?i:u(a,e)},l=(t,e,r)=>u(t*e,r),f=(t,e,r)=>u(t-e,r),p=BigInt(4),b=BigInt(8),m=t=>{const{X:e,Y:r,Z:c}=t;if(r===i)return{X:i,Y:n,Z:i};const h=l(r,r,o),u=l(p,l(e,h,o),o),d=l(a,l(e,e,o),o),m=f(l(d,d,o),l(s,u,o),o);return{X:m,Y:f(l(d,f(u,m,o),o),l(b,l(h,h,o),o),o),Z:l(s,l(r,c,o),o)}},w=(t,e)=>{if(t.Z===i)return e;if(e.Z===i)return t;const r=l(t.Z,t.Z,o),a=l(e.Z,e.Z,o),c=l(t.X,a,o),h=l(e.X,r,o),u=l(t.Y,l(a,e.Z,o),o),d=l(e.Y,l(r,t.Z,o),o),p=f(h,c,o),b=f(d,u,o);if(p===i)return b===i?m(t):{X:i,Y:n,Z:i};const w=l(p,p,o),g=l(p,w,o),y=l(c,w,o),I=f(f(l(b,b,o),g,o),l(s,y,o),o);return{X:I,Y:f(l(b,f(y,I,o),o),l(u,g,o),o),Z:l(p,l(t.Z,e.Z,o),o)}},g=(t,e)=>{const r={X:e.x,Y:e.y,Z:n};let s={X:i,Y:n,Z:i};const a=t.toString(2);for(let t=0;t<a.length;t++)s=m(s),"1"===a[t]&&(s=w(s,r));return s},y=(t,e,r)=>{const{r:n,s}=r,a=t;if(n<=i||n>=c||s<=i||s>=c)return!1;const f=d(s,c);if(f===i)return!1;const p=l(a,f,c),b=l(n,f,c),m=g(p,h),y=g(b,e),I=w(m,y);if(I.Z===i)return!1;const v=d(I.Z,o);if(v===i)return!1;const k=l(v,v,o),P=l(I.X,k,o);return u(P,c)===n};return y(BigInt("0x"+t.toString(16)),{x:BigInt("0x"+r.x.toString(16)),y:BigInt("0x"+r.y.toString(16))},{r:BigInt("0x"+e.r.toString(16)),s:BigInt("0x"+e.s.toString(16))})}{const i=new zt;t=$t(t);const n=e.r,s=e.s;if(n.cmpn(1)<0||n.cmp(i.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(i.n)>=0)return!1;const a=s.invm(i.n),o=a.mul(t).umod(i.n),c=a.mul(n).umod(i.n),h=i.g.jmulAdd(o,r,c);return!h.isInfinity()&&h.eqXToP(n)}};class Yt extends Kt{static fromPrivateKey(t){const e=(new zt).g.mul(t);return new Yt(e.x,e.y)}static fromString(t){const e=Kt.fromString(t);return new Yt(e.x,e.y)}static fromDER(t){const e=Kt.fromDER(t);return new Yt(e.x,e.y)}constructor(t,e=null,r=!0){if(t instanceof Kt)super(t.getX(),t.getY());else{if(null===e&&r&&"string"==typeof t&&(66===t.length||130===t.length))throw new Error('You are using the "new PublicKey()" constructor with a DER hex string. You need to use "PublicKey.fromString()" instead.');super(t,e,r)}}deriveSharedSecret(t){if(!this.validate())throw new Error("Public key not valid for ECDH secret derivation");return this.mul(t)}verify(t,e,r){const i=new c(gt(t,r),16);return Gt(i,e,this)}toDER(t){return"hex"===t?this.encode(!0,t):this.encode(!0)}toHash(t){const e=vt(this.encode(!0));return"hex"===t?Nt(e):e}toAddress(t=[0]){if("string"==typeof t)if("testnet"===t||"test"===t)t=[111];else{if("mainnet"!==t&&"main"!==t)throw new Error(`Invalid prefix ${t}`);t=[0]}return Ct(this.toHash(),t)}deriveChild(t,e){const r=this.deriveSharedSecret(t),i=Et(e,"utf8"),n=kt(r.encode(!0),i),s=(new zt).g.mul(new c(n)),a=this.add(s);return new Yt(a.x,a.y)}static fromMsgHashAndCompactSignature(t,e,r){const i=Et(e,r);if(65!==i.length)throw new Error("Invalid Compact Signature");const n=i[0];if(n<27||n>=35)throw new Error("Invalid Compact Byte");let s=i[0]-27;return s>3&&(s-=4),new Wt(new c(i.slice(1,33)),new c(i.slice(33,65))).RecoverPublicKey(s,t)}}class Zt{_rand;constructor(){const t=()=>{throw new Error("No secure random number generator is available in this environment.")};if("object"==typeof self)self.crypto?.getRandomValues?this._rand=t=>{const e=new Uint8Array(t);return self.crypto.getRandomValues(e),[...e]}:this._rand=t;else try{const t=require("crypto");"function"==typeof t.randomBytes&&(this._rand=e=>[...t.randomBytes(e)])}catch(e){this._rand=t}}generate(t){return this._rand(t)}}let Qt=null;const Jt=t=>(null==Qt&&(Qt=new Zt),Qt.generate(t));class te{x;y;constructor(t,e){const r=(new zt).p;this.x=t.umod(r),this.y=e.umod(r)}toString(){return Rt(this.x.toArray())+"."+Rt(this.y.toArray())}static fromString(t){const[e,r]=t.split(".");return new te(new c(Bt(e)),new c(Bt(r)))}}class ee{points;threshold;constructor(t,e){this.points=t,this.threshold=e||t.length}static fromPrivateKey(t,e){const r=(new zt).p,i=[new te(new c(0),new c(t.toArray()))];for(let t=1;t<e;t++){const t=new c(Jt(32)).umod(r),e=new c(Jt(32)).umod(r);i.push(new te(t,e))}return new ee(i)}valueAt(t){const e=(new zt).p;let r=new c(0);for(let i=0;i<this.threshold;i++){let n=this.points[i].y;for(let r=0;r<this.threshold;r++)if(i!==r){const s=this.points[r].x,a=this.points[i].x,o=t.sub(s).umod(e),c=a.sub(s).umod(e).invm(e),h=o.mul(c).umod(e);n=n.mul(h).umod(e)}r=r.add(n).umod(e)}return r}}class re{points;threshold;integrity;constructor(t,e,r){this.points=t,this.threshold=e,this.integrity=r}static fromBackupFormat(t){let e=0,r="";const i=t.map(((t,i)=>{const n=t.split(".");if(4!==n.length)throw Error("Invalid share format in share "+i+'. Expected format: "x.y.t.i" - received '+t);const[s,a,o,c]=n;if(!o)throw Error("Threshold not found in share "+i);if(!c)throw Error("Integrity not found in share "+i);const h=parseInt(o);if(0!==i&&e!==h)throw Error("Threshold mismatch in share "+i);if(0!==i&&r!==c)throw Error("Integrity mismatch in share "+i);return e=h,r=c,te.fromString([s,a].join("."))}));return new re(i,e,r)}toBackupFormat(){return this.points.map((t=>t.toString()+"."+this.threshold+"."+this.integrity))}}class ie extends c{static fromRandom(){return new ie(Jt(32))}static fromString(t,e="hex"){return new ie(super.fromString(t,e).toArray())}static fromHex(t){return new ie(super.fromHex(t,"big"))}static fromWif(t,e=1){const r=Ht(t,null,e);if(33!==r.data.length)throw new Error("Invalid WIF length");if(1!==r.data[32])throw new Error("Invalid WIF padding");return new ie(r.data.slice(0,32))}constructor(t=0,e=10,r="be",i="apply"){if(t instanceof c?(super(),t.copy(this)):super(t,e,r),"nocheck"!==i){const t=this.checkInField();if(!t.inField){if("error"===i)throw new Error("Input is out of field");c.move(this,t.modN)}}}checkInField(){const t=new zt,e=this.mod(t.n);return{inField:0===this.cmp(e),modN:e}}isValid(){return this.checkInField().inField}sign(t,e,r=!0,i){const n=new c(gt(t,e),16);return Xt(n,this,r,i)}verify(t,e,r){const i=new c(gt(t,r),16);return Gt(i,e,this.toPublicKey())}toPublicKey(){const t=(new zt).g.mul(this);return new Yt(t.x,t.y)}toWif(t=[128]){if(!this.isValid())throw new Error("Value is out of field");return Ct([...this.toArray("be",32),1],t)}toAddress(t=[0]){return this.toPublicKey().toAddress(t)}toHex(){return super.toHex(32)}toString(t="hex",e=64){return super.toString(t,e)}deriveSharedSecret(t){if(!t.validate())throw new Error("Public key not valid for ECDH secret derivation");return t.mul(this)}deriveChild(t,e){const r=this.deriveSharedSecret(t),i=Et(e,"utf8"),n=kt(r.encode(!0),i),s=new zt;return new ie(this.add(new c(n)).mod(s.n).toArray())}toKeyShares(t,e){if("number"!=typeof t||"number"!=typeof e)throw new Error("threshold and totalShares must be numbers");if(t<2)throw new Error("threshold must be at least 2");if(e<2)throw new Error("totalShares must be at least 2");if(t>e)throw new Error("threshold should be less than or equal to totalShares");const r=ee.fromPrivateKey(this,t),i=[];for(let t=0;t<e;t++){const t=new c(ie.fromRandom().toArray()),e=r.valueAt(t);i.push(new te(t,e))}const n=this.toPublicKey().toHash("hex").slice(0,8);return new re(i,t,n)}toBackupShares(t,e){return this.toKeyShares(t,e).toBackupFormat()}static fromBackupShares(t){return ie.fromKeyShares(re.fromBackupFormat(t))}static fromKeyShares(t){const{points:e,threshold:r,integrity:i}=t;if(r<2)throw new Error("threshold must be at least 2");if(e.length<r)throw new Error(`At least ${r} shares are required to reconstruct the private key`);for(let t=0;t<r;t++)for(let i=t+1;i<r;i++)if(e[t].x.eq(e[i].x))throw new Error("Duplicate share detected, each must be unique.");const n=new ee(e,r),s=new ie(n.valueAt(new c(0)).toArray());if(s.toPublicKey().toHash("hex").slice(0,8)!==i)throw new Error("Integrity hash mismatch");return s}}const ne=[[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118],[202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192],[183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21],[4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117],[9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132],[83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207],[208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168],[81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210],[205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115],[96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219],[224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121],[231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8],[186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138],[112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158],[225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223],[140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]],se=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];function ae(t,e,r){let i,n;for(i=0;i<4;i++)for(n=0;n<4;n++)t[i][n]=t[i][n]^e[r+n][i]}function oe(t){let e,r;for(e=0;e<4;e++)for(r=0;r<4;r++)t[e][r]=ne[(240&t[e][r])>>4][15&t[e][r]]}function ce(t){let e;for(e=0;e<4;e++)t[e]=ne[(240&t[e])>>4][15&t[e]]}function he(t){const e=t[0];t[0]=t[1],t[1]=t[2],t[2]=t[3],t[3]=e}function ue(t){let e,r,i,n,s;for(e=1;e<4;e++)for(r=0;r<(e-1)%2+1;r++){for(s=t[e][r],i=r;n=i+e,n>=4&&(n-=4),n!==r;)t[e][i]=t[e][n],i=n;t[e][i]=s}}function de(t,e){let r,i=0;for(r=0;r<8;r++)1&e&&(i^=t),128&t?(t<<=1,t^=283):t<<=1,e>>=1;return i}function le(t){let e,r;const i=[[],[],[],[]];for(e=0;e<4;e++)i[0][e]=de(2,t[0][e])^de(3,t[1][e])^t[2][e]^t[3][e],i[1][e]=t[0][e]^de(2,t[1][e])^de(3,t[2][e])^t[3][e],i[2][e]=t[0][e]^t[1][e]^de(2,t[2][e])^de(3,t[3][e]),i[3][e]=de(3,t[0][e])^t[1][e]^t[2][e]^de(2,t[3][e]);for(e=0;e<4;e++)for(r=0;r<4;r++)t[e][r]=i[e][r]}function fe(t,e){let r,i,n,s;const a=[[],[],[],[]],o=[],c=Array.from(e);if(c.length<=16){for(;c.length<16;)c.unshift(0);s=11}else if(c.length<=24){for(;c.length<24;)c.unshift(0);s=13}else{if(!(e.length<=32))throw new Error("Illegal key length: "+String(e.length));for(;c.length<32;)c.unshift(0);s=15}const h=function(t,e){let r,i;const n=parseInt(String(e.length/4)),s=[];for(r=0;r<e.length;r++)r%4==0&&s.push([]),s[parseInt(String(r/4))].push(e[r]);for(r=n;r<4*t;r++){s[r]=[];const t=s[r-1].slice();if(r%n==0)for(he(t),ce(t),i=0;i<4;i++)t[i]=t[i]^se[parseInt(String(r/n))][i];else n>6&&r%n==4&&ce(t);for(i=0;i<4;i++)s[r][i]=s[r-n][i]^t[i]}return s}(s,c);for(r=0;r<15;r++)a[parseInt(String(r/4))].push(t[4*r%15]);for(a[3].push(t[15]),ae(a,h,0),n=1;n<s;n++)oe(a),ue(a),n+1<s&&le(a),ae(a,h,4*n);for(r=0;r<4;r++)for(i=0;i<4;i++)o.push(a[i][r]);return o}const pe=function(t,e,r){return t[e]&1<<r?1:0},be=function(t){return[(4278190080&t)>>>24,(16711680&t)>>16,(65280&t)>>8,255&t]},me=function(t){let e;const r=[];for(e=0;e<t;e++)r.push(0);return r},we=[225].concat(me(15)),ge=function(t,e){let r;const i=[];for(r=0;r<t.length;r++)i[r]=t[r]^e[r];return i},ye=function(t){let e,r=0,i=0;for(e=0;e<t.length;e++)i=r,r=1&t[e],t[e]=t[e]>>1,0!==i&&(t[e]=128|t[e]);return t},Ie=function(t,e){let r,i,n=e.slice(),s=me(16);for(r=0;r<16;r++)for(i=7;-1!==i;i--)0!==pe(t,r,i)&&(s=ge(s,n)),n=0!==pe(n,15,0)?ge(ye(n),we):ye(n);return s},ve=function(t){let e;const r=t.slice();for(e=15;11!==e&&(r[e]=r[e]+1,256===r[e]);e--)r[e]=0;return r};function ke(t,e){let r,i=me(16);for(r=0;r<t.length;r+=16)i=Ie(ge(i,t.slice(r,Math.min(r+16,t.length))),e);return i}function Pe(t,e,r){let i,n,s,a=e;const o=[];if(0===t.length)return t;const c=Math.ceil(t.length/16);for(i=0;i<c;i++){for(s=ge(t.slice(16*i,Math.min(16*(i+1),t.length)),fe(a,r)),n=0;n<s.length;n++)o.push(s[n]);i+1<c&&(a=ve(a))}return o}class Oe extends c{static fromRandom(){return new Oe(Jt(32))}encrypt(t,e){const r=Jt(32);t=Et(t,e);const{result:i,authenticationTag:n}=function(t,e,r,i){let n,s;const a=fe(me(16),i);n=[...r],12===r.length?n=n.concat(me(3)).concat([1]):(r.length%16!=0&&(n=n.concat(me(16-r.length%16))),n=n.concat(me(8)),n=ke(n.concat(me(4)).concat(be(8*r.length)),a));const o=Pe(t,ve(n),i);return s=e.slice(),0===e.length?s=s.concat(me(16)):e.length%16!=0&&(s=s.concat(me(16-e.length%16))),s=s.concat(o),0===o.length?s=s.concat(me(16)):o.length%16!=0&&(s=s.concat(me(16-o.length%16))),s=s.concat(me(4)).concat(be(8*e.length)).concat(me(4)).concat(be(8*o.length)),{result:o,authenticationTag:Pe(ke(s,a),n,i)}}(t,[],r,this.toArray("be",32));return Tt([...r,...i,...n],e)}decrypt(t,e){const r=(t=Et(t,e)).slice(0,32),i=t.slice(32),n=i.slice(-16),s=function(t,e,r,i,n){let s,a;const o=fe(me(16),n);s=[...r],12===r.length?s=s.concat(me(3)).concat([1]):(r.length%16!=0&&(s=s.concat(me(16-r.length%16))),s=s.concat(me(8)),s=ke(s.concat(me(4)).concat(be(8*r.length)),o));const c=Pe(t,ve(s),n);return a=e.slice(),0===e.length?a=a.concat(me(16)):e.length%16!=0&&(a=a.concat(me(16-e.length%16))),a=a.concat(t),0===t.length?a=a.concat(me(16)):t.length%16!=0&&(a=a.concat(me(16-t.length%16))),a=a.concat(me(4)).concat(be(8*e.length)).concat(me(4)).concat(be(8*t.length)),Pe(ke(a,o),s,n).join()!==i.join()?null:c}(i.slice(0,-16),[],r,n,this.toArray());if(null===s)throw new Error("Decryption failed!");return Tt(s,e)}}class Se extends Wt{static SIGHASH_ALL=1;static SIGHASH_NONE=2;static SIGHASH_SINGLE=3;static SIGHASH_FORKID=64;static SIGHASH_ANYONECANPAY=128;scope;static format(t){const e={sourceTXID:t.sourceTXID,sourceOutputIndex:t.sourceOutputIndex,sequence:t.inputSequence},r=[...t.otherInputs];function i(e){const r=new Dt;if(void 0===e){let e;for(const i of t.outputs)r.writeUInt64LE(i.satoshis),e=i.lockingScript.toBinary(),r.writeVarIntNum(e.length),r.write(e)}else{const i=t.outputs[e];r.writeUInt64LE(i.satoshis);const n=i.lockingScript.toBinary();r.writeVarIntNum(n.length),r.write(n)}const i=r.toArray();return It(i)}r.splice(t.inputIndex,0,e);let n=new Array(32).fill(0),s=new Array(32).fill(0),a=new Array(32).fill(0);t.scope&Se.SIGHASH_ANYONECANPAY||(n=(()=>{const t=new Dt;for(const e of r)void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.writeReverse(Et(e.sourceTXID,"hex")),t.writeUInt32LE(e.sourceOutputIndex);const e=t.toArray();return It(e)})()),t.scope&Se.SIGHASH_ANYONECANPAY||(31&t.scope)===Se.SIGHASH_SINGLE||(31&t.scope)===Se.SIGHASH_NONE||(s=(()=>{const t=new Dt;for(const e of r)t.writeUInt32LE(e.sequence);const e=t.toArray();return It(e)})()),(31&t.scope)!==Se.SIGHASH_SINGLE&&(31&t.scope)!==Se.SIGHASH_NONE?a=i():(31&t.scope)===Se.SIGHASH_SINGLE&&t.inputIndex<t.outputs.length&&(a=i(t.inputIndex));const o=new Dt;o.writeInt32LE(t.transactionVersion),o.write(n),o.write(s),o.writeReverse(Et(t.sourceTXID,"hex")),o.writeUInt32LE(t.sourceOutputIndex);const c=t.subscript.toBinary();o.writeVarIntNum(c.length),o.write(c),o.writeUInt64LE(t.sourceSatoshis);const h=e.sequence;return o.writeUInt32LE(h),o.write(a),o.writeUInt32LE(t.lockTime),o.writeUInt32LE(t.scope>>>0),o.toArray()}static fromChecksigFormat(t){if(0===t.length){const t=new c(1),e=new c(1);return new Se(t,e,1)}const e=t[t.length-1],r=t.slice(0,t.length-1),i=Wt.fromDER(r);return new Se(i.r,i.s,e)}constructor(t,e,r){super(t,e),this.scope=r}hasLowS(){return!this.s.ltn(1)&&!this.s.gt(new c("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex"))}toChecksigFormat(){return[...this.toDER(),this.scope]}}class Ne{curve;constructor(){this.curve=new zt}generateProof(t,e,r,i){const n=ie.fromRandom(),s=n.toPublicKey(),a=r.mul(n),o=this.computeChallenge(e,r,i,a,s);return{R:s,SPrime:a,z:n.add(o.mul(t)).umod(this.curve.n)}}verifyProof(t,e,r,i){const{R:n,SPrime:s,z:a}=i,o=this.computeChallenge(t,e,r,s,n),c=this.curve.g.mul(a),h=n.add(t.mul(o));if(!c.eq(h))return!1;const u=e.mul(a),d=s.add(r.mul(o));return!!u.eq(d)}computeChallenge(t,e,r,i,n){const s=[...t.encode(!0),...e.encode(!0),...r.encode(!0),...i.encode(!0),...n.encode(!0)],a=gt(s);return new c(a).umod(this.curve.n)}}const Ee={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_SPLIT:127,OP_LEFT:128,OP_NUM2BIN:128,OP_RIGHT:129,OP_BIN2NUM:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_NOP11:186,OP_NOP12:187,OP_NOP13:188,OP_NOP14:189,OP_NOP15:190,OP_NOP16:191,OP_NOP17:192,OP_NOP18:193,OP_NOP19:194,OP_NOP20:195,OP_NOP21:196,OP_NOP22:197,OP_NOP23:198,OP_NOP24:199,OP_NOP25:200,OP_NOP26:201,OP_NOP27:202,OP_NOP28:203,OP_NOP29:204,OP_NOP30:205,OP_NOP31:206,OP_NOP32:207,OP_NOP33:208,OP_NOP34:209,OP_NOP35:210,OP_NOP36:211,OP_NOP37:212,OP_NOP38:213,OP_NOP39:214,OP_NOP40:215,OP_NOP41:216,OP_NOP42:217,OP_NOP43:218,OP_NOP44:219,OP_NOP45:220,OP_NOP46:221,OP_NOP47:222,OP_NOP48:223,OP_NOP49:224,OP_NOP50:225,OP_NOP51:226,OP_NOP52:227,OP_NOP53:228,OP_NOP54:229,OP_NOP55:230,OP_NOP56:231,OP_NOP57:232,OP_NOP58:233,OP_NOP59:234,OP_NOP60:235,OP_NOP61:236,OP_NOP62:237,OP_NOP63:238,OP_NOP64:239,OP_NOP65:240,OP_NOP66:241,OP_NOP67:242,OP_NOP68:243,OP_NOP69:244,OP_NOP70:245,OP_NOP71:246,OP_NOP72:247,OP_NOP73:248,OP_NOP77:252,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255};for(const t in Ee)Ee[Ee[t]]=t;const Ae=Ee;class xe{chunks;static fromASM(t){const e=[],r=t.split(" ");let i=0;for(;i<r.length;){const t=r[i];let n,s;if(t.startsWith("OP_")&&void 0!==Ae[t]&&(n=t,s=Ae[t]),"0"===t)s=0,e.push({op:s}),i+=1;else if("-1"===t)s=Ae.OP_1NEGATE,e.push({op:s}),i+=1;else if(void 0===n){let t=r[i];t.length%2!=0&&(t="0"+t);const n=Et(t,"hex");if(Tt(n,"hex")!==t)throw new Error("invalid hex string in script");const a=n.length;a>=0&&a<Ae.OP_PUSHDATA1?s=a:a<Math.pow(2,8)?s=Ae.OP_PUSHDATA1:a<Math.pow(2,16)?s=Ae.OP_PUSHDATA2:a<Math.pow(2,32)&&(s=Ae.OP_PUSHDATA4),e.push({data:n,op:s}),i+=1}else s===Ae.OP_PUSHDATA1||s===Ae.OP_PUSHDATA2||s===Ae.OP_PUSHDATA4?(e.push({data:Et(r[i+2],"hex"),op:s}),i+=3):(e.push({op:s}),i+=1)}return new xe(e)}static fromHex(t){if(0===t.length)return xe.fromBinary([]);if(t.length%2!=0)throw new Error("There is an uneven number of characters in the string which suggests it is not hex encoded.");if(!/^[0-9a-fA-F]+$/.test(t))throw new Error("Some elements in this string are not hex encoded.");return xe.fromBinary(Et(t,"hex"))}static fromBinary(t){t=[...t];const e=[],r=new Ut(t);for(;!r.eof();){const t=r.readUInt8();let i=0,n=[];if(t>0&&t<Ae.OP_PUSHDATA1)i=t,e.push({data:r.read(i),op:t});else if(t===Ae.OP_PUSHDATA1){try{i=r.readUInt8(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else if(t===Ae.OP_PUSHDATA2){try{i=r.readUInt16LE(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else if(t===Ae.OP_PUSHDATA4){try{i=r.readUInt32LE(),n=r.read(i)}catch(t){r.read()}e.push({data:n,op:t})}else e.push({op:t})}return new xe(e)}constructor(t=[]){this.chunks=t}toASM(){let t="";for(let e=0;e<this.chunks.length;e++){const r=this.chunks[e];t+=this._chunkToString(r)}return t.slice(1)}toHex(){return Tt(this.toBinary(),"hex")}toBinary(){const t=new Dt;for(let e=0;e<this.chunks.length;e++){const r=this.chunks[e],i=r.op;t.writeUInt8(i),r.data&&(i<Ae.OP_PUSHDATA1?t.write(r.data):i===Ae.OP_PUSHDATA1?(t.writeUInt8(r.data.length),t.write(r.data)):i===Ae.OP_PUSHDATA2?(t.writeUInt16LE(r.data.length),t.write(r.data)):i===Ae.OP_PUSHDATA4&&(t.writeUInt32LE(r.data.length),t.write(r.data)))}return t.toArray()}writeScript(t){return this.chunks=this.chunks.concat(t.chunks),this}writeOpCode(t){return this.chunks.push({op:t}),this}setChunkOpCode(t,e){return this.chunks[t]={op:e},this}writeBn(t){if(t.cmpn(0)===Ae.OP_0)this.chunks.push({op:Ae.OP_0});else if(0===t.cmpn(-1))this.chunks.push({op:Ae.OP_1NEGATE});else if(t.cmpn(1)>=0&&t.cmpn(16)<=0)this.chunks.push({op:t.toNumber()+Ae.OP_1-1});else{const e=t.toSm("little");this.writeBin(e)}return this}writeBin(t){let e;if(t.length>0&&t.length<Ae.OP_PUSHDATA1)e=t.length;else if(0===t.length)e=Ae.OP_0;else if(t.length<Math.pow(2,8))e=Ae.OP_PUSHDATA1;else if(t.length<Math.pow(2,16))e=Ae.OP_PUSHDATA2;else{if(!(t.length<Math.pow(2,32)))throw new Error("You can't push that much data");e=Ae.OP_PUSHDATA4}return this.chunks.push({data:t,op:e}),this}writeNumber(t){return this.writeBn(new c(t)),this}removeCodeseparators(){const t=[];for(let e=0;e<this.chunks.length;e++)this.chunks[e].op!==Ae.OP_CODESEPARATOR&&t.push(this.chunks[e]);return this.chunks=t,this}findAndDelete(t){const e=t.toHex();for(let t=0;t<this.chunks.length;t++)e===new xe([this.chunks[t]]).toHex()&&this.chunks.splice(t,1);return this}isPushOnly(){for(let t=0;t<this.chunks.length;t++)if(this.chunks[t].op>Ae.OP_16)return!1;return!0}isLockingScript(){throw new Error("Not implemented")}isUnlockingScript(){throw new Error("Not implemented")}_chunkToString(t){const e=t.op;let r="";return r=void 0===t.data?`${r} ${Ae[e]}`:`${r} ${Nt(t.data)}`,r}}class _e extends xe{isLockingScript(){return!0}isUnlockingScript(){return!1}}class Me extends xe{isLockingScript(){return!1}isUnlockingScript(){return!0}}const Te=1073741824,Fe=Math.pow(2,31)-1,Ve=!0;class Be{sourceTXID;sourceOutputIndex;sourceSatoshis;lockingScript;transactionVersion;otherInputs;outputs;inputIndex;unlockingScript;inputSequence;lockTime;context;programCounter;lastCodeSeparator;stack;altStack;ifStack;constructor(t){this.sourceTXID=t.sourceTXID,this.sourceOutputIndex=t.sourceOutputIndex,this.sourceSatoshis=t.sourceSatoshis,this.lockingScript=t.lockingScript,this.transactionVersion=t.transactionVersion,this.otherInputs=t.otherInputs,this.outputs=t.outputs,this.inputIndex=t.inputIndex,this.unlockingScript=t.unlockingScript,this.inputSequence=t.inputSequence,this.lockTime=t.lockTime,this.reset()}reset(){this.context="UnlockingScript",this.programCounter=0,this.lastCodeSeparator=null,this.stack=[],this.altStack=[],this.ifStack=[]}step(){let t;"UnlockingScript"===this.context&&this.programCounter>=this.unlockingScript.chunks.length&&(this.context="LockingScript",this.programCounter=0),t="UnlockingScript"===this.context?this.unlockingScript.chunks[this.programCounter]:this.lockingScript.chunks[this.programCounter];const e=t=>{if(0===t.length)return!0;(t=>{if(t.length<9)return!1;if(t.length>73)return!1;if(48!==t[0])return!1;if(t[1]!==t.length-3)return!1;const e=t[3];if(5+e>=t.length)return!1;const r=t[5+e];if(e+r+7!==t.length)return!1;const i=t.slice(4);if(2!==t[2])return!1;if(0===e)return!1;if(128&i[0])return!1;if(e>1&&0===i[0]&&!(128&i[1]))return!1;const n=t.slice(6+e);return!(2!==t[6+e-2]||0===r||128&n[0]||r>1&&0===n[0]&&!(128&n[1]))})(t)||this.scriptEvaluationError("The signature format is invalid.");const e=Se.fromChecksigFormat(t);return e.hasLowS()||this.scriptEvaluationError("The signature must have a low S value."),!!(e.scope&Se.SIGHASH_FORKID)||(this.scriptEvaluationError("The signature must use SIGHASH_FORKID."),!1)},r=t=>(t.length<33&&this.scriptEvaluationError("The public key is too short, it must be at least 33 bytes."),4===t[0]?65!==t.length&&this.scriptEvaluationError("The non-compressed public key must be 65 bytes."):2===t[0]||3===t[0]?33!==t.length&&this.scriptEvaluationError("The compressed public key must be 33 bytes."):this.scriptEvaluationError("The public key is in an unknown format."),!0),i=(t,e,r)=>{const i=Se.format({sourceTXID:this.sourceTXID,sourceOutputIndex:this.sourceOutputIndex,sourceSatoshis:this.sourceSatoshis,transactionVersion:this.transactionVersion,otherInputs:this.otherInputs,outputs:this.outputs,inputIndex:this.inputIndex,subscript:r,inputSequence:this.inputSequence,lockTime:this.lockTime,scope:t.scope}),n=new c(It(i));return Gt(n,t,e)},n=!this.ifStack.includes(!1);let s,a,o,h,u,d,l,f,p,b,m,w,g,y,I,v,k,P,O,S,N,E,A,x,_,M,T,F,V,B,R,C,H;const D=t.op;var U;if(void 0===D&&this.scriptEvaluationError(`An opcode is missing in this chunk of the ${this.context}!`),Array.isArray(t.data)&&t.data.length>Te&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),n&&((U=D)===Ae.OP_2MUL||U===Ae.OP_2DIV||U===Ae.OP_VERIF||U===Ae.OP_VERNOTIF||U===Ae.OP_VER)&&this.scriptEvaluationError("This opcode is currently disabled."),n&&D>=0&&D<=Ae.OP_PUSHDATA4)(t=>{const e=t.data,r=t.op;return!(Array.isArray(e)&&(0===e.length?r!==Ae.OP_0:1===e.length&&e[0]>=1&&e[0]<=16?r!==Ae.OP_1+(e[0]-1):1===e.length&&129===e[0]?r!==Ae.OP_1NEGATE:e.length<=75?r!==e.length:e.length<=255?r!==Ae.OP_PUSHDATA1:e.length<=65535&&r!==Ae.OP_PUSHDATA2))})(t)||this.scriptEvaluationError("This data is not minimally-encoded."),Array.isArray(t.data)?this.stack.push(t.data):this.stack.push([]);else if(n||Ae.OP_IF<=D&&D<=Ae.OP_ENDIF)switch(D){case Ae.OP_1NEGATE:case Ae.OP_1:case Ae.OP_2:case Ae.OP_3:case Ae.OP_4:case Ae.OP_5:case Ae.OP_6:case Ae.OP_7:case Ae.OP_8:case Ae.OP_9:case Ae.OP_10:case Ae.OP_11:case Ae.OP_12:case Ae.OP_13:case Ae.OP_14:case Ae.OP_15:case Ae.OP_16:d=D-(Ae.OP_1-1),s=new c(d).toScriptNum(),this.stack.push(s);break;case Ae.OP_NOP:case Ae.OP_NOP2:case Ae.OP_NOP3:case Ae.OP_NOP1:case Ae.OP_NOP4:case Ae.OP_NOP5:case Ae.OP_NOP6:case Ae.OP_NOP7:case Ae.OP_NOP8:case Ae.OP_NOP9:case Ae.OP_NOP10:case Ae.OP_NOP11:case Ae.OP_NOP12:case Ae.OP_NOP13:case Ae.OP_NOP14:case Ae.OP_NOP15:case Ae.OP_NOP16:case Ae.OP_NOP17:case Ae.OP_NOP18:case Ae.OP_NOP19:case Ae.OP_NOP20:case Ae.OP_NOP21:case Ae.OP_NOP22:case Ae.OP_NOP23:case Ae.OP_NOP24:case Ae.OP_NOP25:case Ae.OP_NOP26:case Ae.OP_NOP27:case Ae.OP_NOP28:case Ae.OP_NOP29:case Ae.OP_NOP30:case Ae.OP_NOP31:case Ae.OP_NOP32:case Ae.OP_NOP33:case Ae.OP_NOP34:case Ae.OP_NOP35:case Ae.OP_NOP36:case Ae.OP_NOP37:case Ae.OP_NOP38:case Ae.OP_NOP39:case Ae.OP_NOP40:case Ae.OP_NOP41:case Ae.OP_NOP42:case Ae.OP_NOP43:case Ae.OP_NOP44:case Ae.OP_NOP45:case Ae.OP_NOP46:case Ae.OP_NOP47:case Ae.OP_NOP48:case Ae.OP_NOP49:case Ae.OP_NOP50:case Ae.OP_NOP51:case Ae.OP_NOP52:case Ae.OP_NOP53:case Ae.OP_NOP54:case Ae.OP_NOP55:case Ae.OP_NOP56:case Ae.OP_NOP57:case Ae.OP_NOP58:case Ae.OP_NOP59:case Ae.OP_NOP60:case Ae.OP_NOP61:case Ae.OP_NOP62:case Ae.OP_NOP63:case Ae.OP_NOP64:case Ae.OP_NOP65:case Ae.OP_NOP66:case Ae.OP_NOP67:case Ae.OP_NOP68:case Ae.OP_NOP69:case Ae.OP_NOP70:case Ae.OP_NOP71:case Ae.OP_NOP72:case Ae.OP_NOP73:case Ae.OP_NOP77:break;case Ae.OP_IF:case Ae.OP_NOTIF:R=!1,n&&(this.stack.length<1&&this.scriptEvaluationError("OP_IF and OP_NOTIF require at least one item on the stack when they are used!"),s=this.stacktop(-1),R=this.castToBool(s),D===Ae.OP_NOTIF&&(R=!R),this.stack.pop()),this.ifStack.push(R);break;case Ae.OP_ELSE:0===this.ifStack.length&&this.scriptEvaluationError("OP_ELSE requires a preceeding OP_IF."),this.ifStack[this.ifStack.length-1]=!this.ifStack[this.ifStack.length-1];break;case Ae.OP_ENDIF:0===this.ifStack.length&&this.scriptEvaluationError("OP_ENDIF requires a preceeding OP_IF."),this.ifStack.pop();break;case Ae.OP_VERIFY:this.stack.length<1&&this.scriptEvaluationError("OP_VERIFY requires at least one item to be on the stack."),s=this.stacktop(-1),R=this.castToBool(s),R?this.stack.pop():this.scriptEvaluationError("OP_VERIFY requires the top stack value to be truthy.");break;case Ae.OP_RETURN:"UnlockingScript"===this.context?this.programCounter=this.unlockingScript.chunks.length:this.programCounter=this.lockingScript.chunks.length,this.ifStack=[];break;case Ae.OP_TOALTSTACK:this.stack.length<1&&this.scriptEvaluationError("OP_TOALTSTACK requires at oeast one item to be on the stack."),this.altStack.push(this.stack.pop());break;case Ae.OP_FROMALTSTACK:this.altStack.length<1&&this.scriptEvaluationError("OP_FROMALTSTACK requires at least one item to be on the stack."),this.stack.push(this.altStack.pop());break;case Ae.OP_2DROP:this.stack.length<2&&this.scriptEvaluationError("OP_2DROP requires at least two items to be on the stack."),this.stack.pop(),this.stack.pop();break;case Ae.OP_2DUP:this.stack.length<2&&this.scriptEvaluationError("OP_2DUP requires at least two items to be on the stack."),a=this.stacktop(-2),o=this.stacktop(-1),this.stack.push([...a]),this.stack.push([...o]);break;case Ae.OP_3DUP:this.stack.length<3&&this.scriptEvaluationError("OP_3DUP requires at least three items to be on the stack."),a=this.stacktop(-3),o=this.stacktop(-2),h=this.stacktop(-1),this.stack.push([...a]),this.stack.push([...o]),this.stack.push([...h]);break;case Ae.OP_2OVER:this.stack.length<4&&this.scriptEvaluationError("OP_2OVER requires at least four items to be on the stack."),a=this.stacktop(-4),o=this.stacktop(-3),this.stack.push([...a]),this.stack.push([...o]);break;case Ae.OP_2ROT:this.stack.length<6&&this.scriptEvaluationError("OP_2ROT requires at least six items to be on the stack."),u=this.stack.splice(this.stack.length-6,2),this.stack.push(u[0]),this.stack.push(u[1]);break;case Ae.OP_2SWAP:this.stack.length<4&&this.scriptEvaluationError("OP_2SWAP requires at least four items to be on the stack."),u=this.stack.splice(this.stack.length-4,2),this.stack.push(u[0]),this.stack.push(u[1]);break;case Ae.OP_IFDUP:this.stack.length<1&&this.scriptEvaluationError("OP_IFDUP requires at least one item to be on the stack."),s=this.stacktop(-1),R=this.castToBool(s),R&&this.stack.push([...s]);break;case Ae.OP_DEPTH:s=new c(this.stack.length).toScriptNum(),this.stack.push(s);break;case Ae.OP_DROP:this.stack.length<1&&this.scriptEvaluationError("OP_DROP requires at least one item to be on the stack."),this.stack.pop();break;case Ae.OP_DUP:this.stack.length<1&&this.scriptEvaluationError("OP_DUP requires at least one item to be on the stack."),this.stack.push([...this.stacktop(-1)]);break;case Ae.OP_NIP:this.stack.length<2&&this.scriptEvaluationError("OP_NIP requires at least two items to be on the stack."),this.stack.splice(this.stack.length-2,1);break;case Ae.OP_OVER:this.stack.length<2&&this.scriptEvaluationError("OP_OVER requires at least two items to be on the stack."),this.stack.push([...this.stacktop(-2)]);break;case Ae.OP_PICK:case Ae.OP_ROLL:this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least two items to be on the stack.`),s=this.stacktop(-1),y=c.fromScriptNum(s,Ve),d=y.toNumber(),this.stack.pop(),(d<0||d>=this.stack.length)&&this.scriptEvaluationError(`${Ae[D]} requires the top stack element to be 0 or a positive number less than the current size of the stack.`),s=this.stacktop(-d-1),D===Ae.OP_ROLL&&this.stack.splice(this.stack.length-d-1,1),this.stack.push([...s]);break;case Ae.OP_ROT:this.stack.length<3&&this.scriptEvaluationError("OP_ROT requires at least three items to be on the stack."),m=this.stacktop(-3),w=this.stacktop(-2),g=this.stacktop(-1),this.stack[this.stack.length-3]=w,this.stack[this.stack.length-2]=g,this.stack[this.stack.length-1]=m;break;case Ae.OP_SWAP:this.stack.length<2&&this.scriptEvaluationError("OP_SWAP requires at least two items to be on the stack."),m=this.stacktop(-2),w=this.stacktop(-1),this.stack[this.stack.length-2]=w,this.stack[this.stack.length-1]=m;break;case Ae.OP_TUCK:this.stack.length<2&&this.scriptEvaluationError("OP_TUCK requires at least two items to be on the stack."),this.stack.splice(this.stack.length-2,0,[...this.stacktop(-1)]);break;case Ae.OP_SIZE:this.stack.length<1&&this.scriptEvaluationError("OP_SIZE requires at least one item to be on the stack."),y=new c(this.stacktop(-1).length),this.stack.push(y.toScriptNum());break;case Ae.OP_AND:case Ae.OP_OR:case Ae.OP_XOR:switch(this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least one item to be on the stack.`),a=this.stacktop(-2),o=this.stacktop(-1),a.length!==o.length&&this.scriptEvaluationError(`${Ae[D]} requires the top two stack items to be the same size.`),D){case Ae.OP_AND:for(let t=0;t<a.length;t++)a[t]&=o[t];break;case Ae.OP_OR:for(let t=0;t<a.length;t++)a[t]|=o[t];break;case Ae.OP_XOR:for(let t=0;t<a.length;t++)a[t]^=o[t]}this.stack.pop();break;case Ae.OP_INVERT:this.stack.length<1&&this.scriptEvaluationError("OP_INVERT requires at least one item to be on the stack."),s=this.stacktop(-1);for(let t=0;t<s.length;t++)s[t]=~s[t];break;case Ae.OP_LSHIFT:case Ae.OP_RSHIFT:if(this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least two items to be on the stack.`),a=this.stacktop(-2),0===a.length)this.stack.pop();else{let t;I=new c(a),v=c.fromScriptNum(this.stacktop(-1),Ve),d=v.toNumber(),d<0&&this.scriptEvaluationError(`${Ae[D]} requires the top item on the stack not to be negative.`),this.stack.pop(),this.stack.pop(),D===Ae.OP_LSHIFT&&(t=I.ushln(d)),D===Ae.OP_RSHIFT&&(t=I.ushrn(d));const e=((t,e)=>{const r=t;for(;r.length<e;)r.unshift(0);return r})(t.toArray().slice(-1*a.length),a.length);this.stack.push(e)}break;case Ae.OP_EQUAL:case Ae.OP_EQUALVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least two items to be on the stack.`),a=this.stacktop(-2),o=this.stacktop(-1),C=Nt(a)===Nt(o),this.stack.pop(),this.stack.pop(),this.stack.push(C?[1]:[]),D===Ae.OP_EQUALVERIFY&&(C?this.stack.pop():this.scriptEvaluationError("OP_EQUALVERIFY requires the top two stack items to be equal."));break;case Ae.OP_1ADD:case Ae.OP_1SUB:case Ae.OP_NEGATE:case Ae.OP_ABS:case Ae.OP_NOT:case Ae.OP_0NOTEQUAL:switch(this.stack.length<1&&this.scriptEvaluationError(`${Ae[D]} requires at least one items to be on the stack.`),s=this.stacktop(-1),y=c.fromScriptNum(s,Ve),D){case Ae.OP_1ADD:y=y.addn(1);break;case Ae.OP_1SUB:y=y.subn(1);break;case Ae.OP_NEGATE:y=y.neg();break;case Ae.OP_ABS:y.cmpn(0)<0&&(y=y.neg());break;case Ae.OP_NOT:y=new c(0===y.cmpn(0)?1:0);break;case Ae.OP_0NOTEQUAL:y=new c(0!==y.cmpn(0)?1:0)}this.stack.pop(),this.stack.push(y.toScriptNum());break;case Ae.OP_ADD:case Ae.OP_SUB:case Ae.OP_MUL:case Ae.OP_MOD:case Ae.OP_DIV:case Ae.OP_BOOLAND:case Ae.OP_BOOLOR:case Ae.OP_NUMEQUAL:case Ae.OP_NUMEQUALVERIFY:case Ae.OP_NUMNOTEQUAL:case Ae.OP_LESSTHAN:case Ae.OP_GREATERTHAN:case Ae.OP_LESSTHANOREQUAL:case Ae.OP_GREATERTHANOREQUAL:case Ae.OP_MIN:case Ae.OP_MAX:switch(this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least two items to be on the stack.`),I=c.fromScriptNum(this.stacktop(-2),Ve),v=c.fromScriptNum(this.stacktop(-1),Ve),y=new c(0),D){case Ae.OP_ADD:y=I.add(v);break;case Ae.OP_SUB:y=I.sub(v);break;case Ae.OP_MUL:y=I.mul(v);break;case Ae.OP_DIV:0===v.cmpn(0)&&this.scriptEvaluationError("OP_DIV cannot divide by zero!"),y=I.div(v);break;case Ae.OP_MOD:0===v.cmpn(0)&&this.scriptEvaluationError("OP_MOD cannot divide by zero!"),y=I.mod(v);break;case Ae.OP_BOOLAND:y=new c(0!==I.cmpn(0)&&0!==v.cmpn(0)?1:0);break;case Ae.OP_BOOLOR:y=new c(0!==I.cmpn(0)||0!==v.cmpn(0)?1:0);break;case Ae.OP_NUMEQUAL:case Ae.OP_NUMEQUALVERIFY:y=new c(0===I.cmp(v)?1:0);break;case Ae.OP_NUMNOTEQUAL:y=new c(0!==I.cmp(v)?1:0);break;case Ae.OP_LESSTHAN:y=new c(I.cmp(v)<0?1:0);break;case Ae.OP_GREATERTHAN:y=new c(I.cmp(v)>0?1:0);break;case Ae.OP_LESSTHANOREQUAL:y=new c(I.cmp(v)<=0?1:0);break;case Ae.OP_GREATERTHANOREQUAL:y=new c(I.cmp(v)>=0?1:0);break;case Ae.OP_MIN:y=I.cmp(v)<0?I:v;break;case Ae.OP_MAX:y=I.cmp(v)>0?I:v}this.stack.pop(),this.stack.pop(),this.stack.push(y.toScriptNum()),D===Ae.OP_NUMEQUALVERIFY&&(this.castToBool(this.stacktop(-1))?this.stack.pop():this.scriptEvaluationError("OP_NUMEQUALVERIFY requires the top stack item to be truthy."));break;case Ae.OP_WITHIN:this.stack.length<3&&this.scriptEvaluationError("OP_WITHIN requires at least three items to be on the stack."),I=c.fromScriptNum(this.stacktop(-3),Ve),v=c.fromScriptNum(this.stacktop(-2),Ve),k=c.fromScriptNum(this.stacktop(-1),Ve),R=v.cmp(I)<=0&&I.cmp(k)<0,this.stack.pop(),this.stack.pop(),this.stack.pop(),this.stack.push(R?[1]:[]);break;case Ae.OP_RIPEMD160:case Ae.OP_SHA1:case Ae.OP_SHA256:case Ae.OP_HASH160:case Ae.OP_HASH256:this.stack.length<1&&this.scriptEvaluationError(`${Ae[D]} requires at least one item to be on the stack.`),s=this.stacktop(-1),D===Ae.OP_RIPEMD160?N=mt(s):D===Ae.OP_SHA1?N=wt(s):D===Ae.OP_SHA256?N=gt(s):D===Ae.OP_HASH160?N=vt(s):D===Ae.OP_HASH256&&(N=It(s)),this.stack.pop(),this.stack.push(N);break;case Ae.OP_CODESEPARATOR:this.lastCodeSeparator=this.programCounter;break;case Ae.OP_CHECKSIG:case Ae.OP_CHECKSIGVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${Ae[D]} requires at least two items to be on the stack.`),P=this.stacktop(-2),O=this.stacktop(-1),e(P)&&r(O)||this.scriptEvaluationError(`${Ae[D]} requires correct encoding for the public key and signature.`),S="UnlockingScript"===this.context?new xe(this.unlockingScript.chunks.slice(this.lastCodeSeparator)):new xe(this.lockingScript.chunks.slice(this.lastCodeSeparator)),S.findAndDelete((new xe).writeBin(P));try{E=Se.fromChecksigFormat(P),A=Yt.fromDER(O),H=i(E,A,S)}catch(t){H=!1}!H&&P.length>0&&this.scriptEvaluationError(`${Ae[D]} failed to verify the signature, and requires an empty signature when verification fails.`),this.stack.pop(),this.stack.pop(),this.stack.push(H?[1]:[]),D===Ae.OP_CHECKSIGVERIFY&&(H?this.stack.pop():this.scriptEvaluationError("OP_CHECKSIGVERIFY requires that a valid signature is provided."));break;case Ae.OP_CHECKMULTISIG:case Ae.OP_CHECKMULTISIGVERIFY:x=1,this.stack.length<x&&this.scriptEvaluationError(`${Ae[D]} requires at least 1 item to be on the stack.`),M=c.fromScriptNum(this.stacktop(-x),Ve).toNumber(),(M<0||M>Fe)&&this.scriptEvaluationError(`${Ae[D]} requires a key count between 0 and ${Fe}.`),T=++x,x+=M,F=M+2,this.stack.length<x&&this.scriptEvaluationError(`${Ae[D]} requires the number of stack items not to be less than the number of keys used.`),V=c.fromScriptNum(this.stacktop(-x),Ve).toNumber(),(V<0||V>M)&&this.scriptEvaluationError(`${Ae[D]} requires the number of signatures to be no greater than the number of keys.`),B=++x,x+=V,this.stack.length<x&&this.scriptEvaluationError(`${Ae[D]} requires the number of stack items not to be less than the number of signatures provided.`),S="UnlockingScript"===this.context?new xe(this.unlockingScript.chunks.slice(this.lastCodeSeparator)):new xe(this.lockingScript.chunks.slice(this.lastCodeSeparator));for(let t=0;t<V;t++)P=this.stacktop(-B-t),S.findAndDelete((new xe).writeBin(P));for(H=!0;H&&V>0;){P=this.stacktop(-B),O=this.stacktop(-T),e(P)&&r(O)||this.scriptEvaluationError(`${Ae[D]} requires correct encoding for the public key and signature.`);try{E=Se.fromChecksigFormat(P),A=Yt.fromString(Nt(O)),_=i(E,A,S)}catch(t){_=!1}_&&(B++,V--),T++,M--,V>M&&(H=!1)}for(;x-- >1;)!H&&!F&&this.stacktop(-1).length>0&&this.scriptEvaluationError(`${Ae[D]} failed to verify a signature, and requires an empty signature when verification fails.`),F>0&&F--,this.stack.pop();this.stack.length<1&&this.scriptEvaluationError(`${Ae[D]} requires an extra item to be on the stack.`),this.stacktop(-1).length>0&&this.scriptEvaluationError(`${Ae[D]} requires the extra stack item to be empty.`),this.stack.pop(),this.stack.push(H?[1]:[]),D===Ae.OP_CHECKMULTISIGVERIFY&&(H?this.stack.pop():this.scriptEvaluationError("OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided."));break;case Ae.OP_CAT:this.stack.length<2&&this.scriptEvaluationError("OP_CAT requires at least two items to be on the stack."),a=this.stacktop(-2),o=this.stacktop(-1),a.length+o.length>Te&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.stack[this.stack.length-2]=[...a,...o],this.stack.pop();break;case Ae.OP_SPLIT:this.stack.length<2&&this.scriptEvaluationError("OP_SPLIT requires at least two items to be on the stack."),a=this.stacktop(-2),d=c.fromScriptNum(this.stacktop(-1),Ve).toNumber(),(d<0||d>a.length)&&this.scriptEvaluationError("OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item."),o=[...a],this.stack[this.stack.length-2]=o.slice(0,d),this.stack[this.stack.length-1]=o.slice(d);break;case Ae.OP_NUM2BIN:if(this.stack.length<2&&this.scriptEvaluationError("OP_NUM2BIN requires at least two items to be on the stack."),l=c.fromScriptNum(this.stacktop(-1),Ve).toNumber(),l>Te&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.stack.pop(),f=this.stacktop(-1),f=Lt(f),f.length>l&&this.scriptEvaluationError("OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item."),f.length===l){this.stack[this.stack.length-1]=f;break}for(b=0,f.length>0&&(b=128&f[f.length-1],f[f.length-1]&=127),p=new Array(l),p.fill(0),d=0;d<l;d++)p[d]=f[d];for(d=f.length-1;d++<l-2;)p[d]=0;p[d]=b,this.stack[this.stack.length-1]=p;break;case Ae.OP_BIN2NUM:this.stack.length<1&&this.scriptEvaluationError("OP_BIN2NUM requires at least one item to be on the stack."),a=this.stacktop(-1),o=Lt(a),this.stack[this.stack.length-1]=o,((t,e=Number.MAX_SAFE_INTEGER)=>!(t.length>e||t.length>0&&!(127&t[t.length-1]||!(t.length<=1)&&128&t[t.length-2])))(o)||this.scriptEvaluationError("OP_BIN2NUM requires that the resulting number is valid.");break;default:this.scriptEvaluationError("Invalid opcode!")}this.programCounter++}validate(){for(this.unlockingScript.isPushOnly()||this.scriptEvaluationError("Unlocking scripts can only contain push operations, and no other opcodes.");this.step(),!("LockingScript"===this.context&&this.programCounter>=this.lockingScript.chunks.length););return this.ifStack.length>0&&this.scriptEvaluationError("Every OP_IF must be terminated prior to the end of the script."),1!==this.stack.length&&this.scriptEvaluationError("The clean stack rule requires exactly one item to be on the stack after script execution."),this.castToBool(this.stacktop(-1))||this.scriptEvaluationError("The top stack element must be truthy after script evaluation."),!0}stacktop(t){return this.stack[this.stack.length+t]}castToBool(t){for(let e=0;e<t.length;e++)if(0!==t[e])return e!==t.length-1||128!==t[e];return!1}scriptEvaluationError(t){throw new Error(`Script evaluation error: ${t}\n\nSource TXID: ${this.sourceTXID}\nSource output index: ${this.sourceOutputIndex}\nContext: ${this.context}\nProgram counter: ${this.programCounter}\nStack size: ${this.stack.length}\nAlt stack size: ${this.altStack.length}`)}}class Re{lock(t){let e;if("string"==typeof t){const r=Ht(t);if(0!==r.prefix[0]&&111!==r.prefix[0])throw new Error("only P2PKH is supported");e=r.data}else e=t;if(20!==e.length)throw new Error("P2PKH hash length must be 20 bytes");return new _e([{op:Ae.OP_DUP},{op:Ae.OP_HASH160},{op:e.length,data:e},{op:Ae.OP_EQUALVERIFY},{op:Ae.OP_CHECKSIG}])}unlock(t,e="all",r=!1,i,n){return{sign:async(s,a)=>{let o=Se.SIGHASH_FORKID;"all"===e&&(o|=Se.SIGHASH_ALL),"none"===e&&(o|=Se.SIGHASH_NONE),"single"===e&&(o|=Se.SIGHASH_SINGLE),r&&(o|=Se.SIGHASH_ANYONECANPAY);const c=s.inputs[a],h=s.inputs.filter(((t,e)=>e!==a)),u=c.sourceTXID?c.sourceTXID:c.sourceTransaction?.id("hex");if(!u)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(i||=c.sourceTransaction?.outputs[c.sourceOutputIndex].satoshis,!i)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(n||=c.sourceTransaction?.outputs[c.sourceOutputIndex].lockingScript,!n)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const d=Se.format({sourceTXID:u,sourceOutputIndex:c.sourceOutputIndex,sourceSatoshis:i,transactionVersion:s.version,otherInputs:h,inputIndex:a,outputs:s.outputs,inputSequence:c.sequence,subscript:n,lockTime:s.lockTime,scope:o}),l=t.sign(gt(d)),f=new Se(l.r,l.s,o).toChecksigFormat(),p=t.toPublicKey().encode(!0);return new Me([{op:f.length,data:f},{op:p.length,data:p}])},estimateLength:async()=>108}}}class Ce{type="raw";constructor(t="raw"){this.type=t}lock(t){const e=[{op:Ae.OP_OVER},{op:Ae.OP_3},{op:Ae.OP_SPLIT},{op:Ae.OP_NIP},{op:Ae.OP_1},{op:Ae.OP_SPLIT},{op:Ae.OP_SWAP},{op:Ae.OP_SPLIT},{op:Ae.OP_DROP}];return"raw"!==this.type&&e.push({op:Ae["OP_"+this.type]}),e.push({op:t.length,data:t}),e.push({op:Ae.OP_EQUALVERIFY}),e.push({op:Ae.OP_CHECKSIG}),new _e(e)}unlock(t,e,r="all",i=!1){return{sign:async(n,s)=>{void 0===e&&(e=ie.fromRandom());let a=Se.SIGHASH_FORKID;"all"===r&&(a|=Se.SIGHASH_ALL),"none"===r&&(a|=Se.SIGHASH_NONE),"single"===r&&(a|=Se.SIGHASH_SINGLE),i&&(a|=Se.SIGHASH_ANYONECANPAY);const o=[...n.inputs],[c]=o.splice(s,1);if("object"!=typeof c.sourceTransaction)throw new Error("The source transaction is needed for transaction signing.");const h=Se.format({sourceTXID:c.sourceTransaction.id("hex"),sourceOutputIndex:c.sourceOutputIndex,sourceSatoshis:c.sourceTransaction.outputs[c.sourceOutputIndex].satoshis,transactionVersion:n.version,otherInputs:o,inputIndex:s,outputs:n.outputs,inputSequence:c.sequence,subscript:c.sourceTransaction.outputs[c.sourceOutputIndex].lockingScript,lockTime:n.lockTime,scope:a}),u=e.sign(gt(h),void 0,!0,t),d=new Se(u.r,u.s,a).toChecksigFormat(),l=e.toPublicKey().encode(!0);return new Me([{op:d.length,data:d},{op:l.length,data:l}])},estimateLength:async()=>108}}}class He{wallet;static decode(t){const e=Yt.fromString(Nt(t.chunks[0].data)),r=[];for(let e=2;e<t.chunks.length;e++){const i=t.chunks[e+1].op;let n=t.chunks[e].data;if(n||(t.chunks[e].op>=80&&t.chunks[e].op<=95?n=[t.chunks[e].op-80]:0===t.chunks[e].op?n=[0]:79===t.chunks[e].op&&(n=[129])),r.push(n),i===Ae.OP_DROP||i===Ae.OP_2DROP)break}return{fields:r,lockingPublicKey:e}}constructor(t){this.wallet=t}async lock(t,e,r,i,n=!1,s=!0,a="before"){const{publicKey:o}=await this.wallet.getPublicKey({protocolID:e,keyID:r,counterparty:i,forSelf:n}),c=[],h=[];if(c.push({op:o.length/2,data:Et(o,"hex")}),c.push({op:Ae.OP_CHECKSIG}),s){const n=t.reduce(((t,e)=>[...t,...e]),[]),{signature:s}=await this.wallet.createSignature({data:n,protocolID:e,keyID:r,counterparty:i});t.push(s)}for(const e of t)h.push(0===(u=e).length||1===u.length&&0===u[0]?{op:0}:1===u.length&&u[0]>0&&u[0]<=16?{op:80+u[0]}:1===u.length&&129===u[0]?{op:79}:u.length<=75?{op:u.length,data:u}:u.length<=255?{op:76,data:u}:u.length<=65535?{op:77,data:u}:{op:78,data:u});var u;let d=t.length;for(;d>1;)h.push({op:Ae.OP_2DROP}),d-=2;return d&&h.push({op:Ae.OP_DROP}),new _e("before"===a?[...c,...h]:[...h,...c])}unlock(t,e,r,i="all",n=!1,s,a){return{sign:async(o,c)=>{let h=Se.SIGHASH_FORKID;"all"===i&&(h|=Se.SIGHASH_ALL),"none"===i&&(h|=Se.SIGHASH_NONE),"single"===i&&(h|=Se.SIGHASH_SINGLE),n&&(h|=Se.SIGHASH_ANYONECANPAY);const u=o.inputs[c],d=o.inputs.filter(((t,e)=>e!==c)),l=u.sourceTXID?u.sourceTXID:u.sourceTransaction?.id("hex");if(!l)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(s||=u.sourceTransaction?.outputs[u.sourceOutputIndex].satoshis,!s)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(a||=u.sourceTransaction?.outputs[u.sourceOutputIndex].lockingScript,!a)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const f=Se.format({sourceTXID:l,sourceOutputIndex:u.sourceOutputIndex,sourceSatoshis:s,transactionVersion:o.version,otherInputs:d,inputIndex:c,outputs:o.outputs,inputSequence:u.sequence,subscript:a,lockTime:o.lockTime,scope:h}),p=gt(f),{signature:b}=await this.wallet.createSignature({data:p,protocolID:t,keyID:e,counterparty:r}),m=Wt.fromDER([...b]),w=new Se(m.r,m.s,h).toChecksigFormat();return new Me([{op:w.length,data:w}])},estimateLength:async()=>73}}}class De{value;constructor(t){this.value=t}async computeFee(t){const e=t=>t>2**32?9:t>65536?5:t>253?3:1;let r=4;r+=e(t.inputs.length);for(let i=0;i<t.inputs.length;i++){const n=t.inputs[i];let s;if(r+=40,"object"==typeof n.unlockingScript)s=n.unlockingScript.toBinary().length;else{if("object"!=typeof n.unlockingScriptTemplate)throw new Error("All inputs must have an unlocking script or an unlocking script template for sat/kb fee computation.");s=await n.unlockingScriptTemplate.estimateLength(t,i)}r+=e(s),r+=s}r+=e(t.outputs.length);for(const i of t.outputs){r+=8;const t=i.lockingScript.toBinary().length;r+=e(t),r+=t}return r+=4,Math.ceil(r/1e3*this.value)}}class Ue{blockHeight;path;static fromHex(t){return Ue.fromBinary(Et(t,"hex"))}static fromReader(t,e=!0){const r=t.readVarIntNum(),i=t.readUInt8(),n=Array(i).fill(0).map((()=>[]));let s,a,o;for(let e=0;e<i;e++){for(o=t.readVarIntNum();o;){a=t.readVarIntNum(),s=t.readUInt8();const r={offset:a};1&s?r.duplicate=!0:(2&s&&(r.txid=!0),r.hash=Nt(t.read(32).reverse())),n[e].push(r),o--}n[e].sort(((t,e)=>t.offset-e.offset))}return new Ue(r,n,e)}static fromBinary(t){const e=new Ut(t);return Ue.fromReader(e)}static fromCoinbaseTxidAndHeight(t,e){return new Ue(e,[[{offset:0,hash:t,txid:!0}]])}constructor(t,e,r=!0){this.blockHeight=t,this.path=e;const i=Array(this.path.length).fill(0).map((()=>new Set));let n;this.path.map(((t,e)=>{if(0===t.length&&0===e)throw new Error(`Empty level at height: ${e}`);const n=new Set;t.map((t=>{if(n.has(t.offset))throw new Error(`Duplicate offset: ${t.offset}, at height: ${e}`);if(n.add(t.offset),0===e){if(!t.duplicate)for(let e=1;e<this.path.length;e++)i[e].add(t.offset>>e^1)}else if(r&&!i[e].has(t.offset))throw new Error(`Invalid offset: ${t.offset}, at height: ${e}, with legal offsets: ${Array.from(i[e]).join(", ")}`)}))})),this.path[0].map(((t,e)=>{if(0===e&&(n=this.computeRoot(t.hash)),n!==this.computeRoot(t.hash))throw new Error("Mismatched roots")}))}toBinary(){const t=new Dt;t.writeVarIntNum(this.blockHeight);const e=this.path.length;t.writeUInt8(e);for(let r=0;r<e;r++){const e=Object.keys(this.path[r]).length;t.writeVarIntNum(e);for(const e of this.path[r]){t.writeVarIntNum(e.offset);let r=0;e?.duplicate&&(r|=1),e?.txid&&(r|=2),t.writeUInt8(r),1&r||t.write(Et(e.hash,"hex").reverse())}}return t.toArray()}toHex(){return Nt(this.toBinary())}computeRoot(t){"string"!=typeof t&&(t=this.path[0].find((t=>Boolean(t?.hash))).hash);const e=this.path[0].find((e=>e.hash===t)).offset;if("number"!=typeof e)throw new Error(`This proof does not contain the txid: ${t}`);const r=t=>Nt(It(Et(t,"hex").reverse()).reverse());let i=t;if(1===this.path.length&&1===this.path[0].length)return i;for(let t=0;t<this.path.length;t++){this.path[t];const n=e>>t^1,s=this.findOrComputeLeaf(t,n);if("object"!=typeof s)throw new Error(`Missing hash for index ${e} at height ${t}`);i=s.duplicate?r(i+i):r(n%2!=0?s.hash+i:i+s.hash)}return i}findOrComputeLeaf(t,e){const r=t=>Nt(It(Et(t,"hex").reverse()).reverse());let i=this.path[t].find((t=>t.offset===e));if(i)return i;if(0===t)return;const n=t-1,s=e<<1,a=this.findOrComputeLeaf(n,s);if(!a||!a.hash)return;const o=this.findOrComputeLeaf(n,s+1);if(!o)return;let c;return c=o.duplicate?r(a.hash+a.hash):r(o.hash+a.hash),i={offset:e,hash:c},i}async verify(t,e){const r=this.computeRoot(t);return await e.isValidRootForHeight(r,this.blockHeight)}combine(t){if(this.blockHeight!==t.blockHeight)throw new Error("You cannot combine paths which do not have the same block height.");if(this.computeRoot()!==t.computeRoot())throw new Error("You cannot combine paths which do not have the same root.");const e=[];for(let r=0;r<this.path.length;r++){e.push([]);for(let t=0;t<this.path[r].length;t++)e[r].push(this.path[r][t]);for(let i=0;i<t.path[r].length;i++)e[r].find((e=>e.offset===t.path[r][i].offset))?t.path[r][i]?.txid&&(e[r].find((e=>e.offset===t.path[r][i].offset)).txid=!0):e[r].push(t.path[r][i])}this.path=e,this.trim()}trim(){const t=(t,e)=>{0!==e.length&&e.slice(-1)[0]===t||e.push(t)},e=(t,e)=>{for(let r=t.length;r>=0;r--){const i=this.path[e].findIndex((e=>e.offset===t[r]));i>=0&&this.path[e].splice(i,1)}},r=e=>{const r=[];for(const i of e)t(i>>1,r);return r};let i=[],n=[];for(let t=0;t<this.path.length;t++)this.path[t].sort(((t,e)=>t.offset-e.offset));for(let e=0;e<this.path[0].length;e++){const r=this.path[0][e];if(r.txid)t(r.offset>>1,i);else{const i=r.offset%2==1,s=this.path[0][e+(i?-1:1)];s.txid||t(s.offset,n)}}e(n,0);for(let t=1;t<this.path.length;t++)n=i,i=r(i),e(n,t)}}class Le{https;constructor(t){this.https=t}async request(t,e){return await new Promise(((r,i)=>{const n=this.https.request(t,e,(t=>{let e="";t.on("data",(t=>{e+=t})),t.on("end",(()=>{const i=t.statusCode>=200&&t.statusCode<=299,n=t.headers["content-type"],s=e&&n.startsWith("application/json")?JSON.parse(e):e;r({status:t.statusCode,statusText:t.statusMessage,ok:i,data:s})}))}));n.on("error",(t=>{i(t)})),e.data&&n.write(JSON.stringify(e.data)),n.end()}))}}class Ke{fetch;constructor(t){this.fetch=t}async request(t,e){const r={method:e.method,headers:e.headers,body:JSON.stringify(e.data)},i=await this.fetch(t,r),n=i.headers.get("Content-Type").startsWith("application/json")?await i.json():await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:n}}}function qe(){const t={async request(...t){throw new Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new Ke(window.fetch.bind(window));if("undefined"==typeof require)return t;try{const t=require("https");return new Le(t)}catch(e){return t}}function ze(){return`ts-sdk-${Nt(Jt(16))}`}class We{URL;apiKey;deploymentId;callbackUrl;callbackToken;headers;httpClient;constructor(t,e){if(this.URL=t,"string"==typeof e)this.apiKey=e,this.httpClient=qe(),this.deploymentId=ze(),this.callbackToken=void 0,this.callbackUrl=void 0;else{const{apiKey:t,deploymentId:r,httpClient:i,callbackToken:n,callbackUrl:s,headers:a}=e??{};this.apiKey=t,this.httpClient=i??qe(),this.deploymentId=r??ze(),this.callbackToken=n,this.callbackUrl=s,this.headers=a}}requestHeaders(){const t={"Content-Type":"application/json","XDeployment-ID":this.deploymentId};if(this.apiKey&&(t.Authorization=`Bearer ${this.apiKey}`),this.callbackUrl&&(t["X-CallbackUrl"]=this.callbackUrl),this.callbackToken&&(t["X-CallbackToken"]=this.callbackToken),this.headers)for(const e in this.headers)t[e]=this.headers[e];return t}async broadcast(t){let e;try{e=t.toHexEF()}catch(r){if("All inputs must have source transactions when serializing to EF format"!==r.message)throw r;e=t.toHex()}const r={method:"POST",headers:this.requestHeaders(),data:{rawTx:e}};try{const t=await this.httpClient.request(`${this.URL}/v1/tx`,r);if(t.ok){const{txid:e,extraInfo:r,txStatus:i,competingTxs:n}=t.data;let s={status:"success",txid:e,message:`${i} ${r}`};return n&&(s.competingTxs=n),s}{const e=typeof t.status,r={status:"error",code:"number"===e||"string"===e?t.status.toString():"ERR_UNKNOWN",description:"Unknown error"};let i=t.data;if("string"==typeof i)try{i=JSON.parse(t.data)}catch{}return"object"==typeof i&&(r.more=i,"string"==typeof i.txid&&(r.txid=i.txid),"string"==typeof i.detail&&(r.description=i.detail)),r}}catch(t){return{status:"error",code:"500",description:"string"==typeof t.message?t.message:"Internal Server Error"}}}async broadcastMany(t){const e=t.map((t=>{try{return{rawTx:t.toHexEF()}}catch(e){if("All inputs must have source transactions when serializing to EF format"===e.message)return{rawTx:t.toHex()};throw e}})),r={method:"POST",headers:this.requestHeaders(),data:e};try{return(await this.httpClient.request(`${this.URL}/v1/txs`,r)).data}catch(e){const r={status:"error",code:"500",description:e.message||"Internal Server Error"};return t.map((()=>r))}}}function je(t=!1,e={}){return new We(t?"https://arc-test.taal.com":"https://arc.taal.com",e)}class $e{network;apiKey;URL;httpClient;constructor(t="main",e={}){const{apiKey:r,httpClient:i}=e;this.network=t,this.URL=`https://api.whatsonchain.com/v1/bsv/${t}`,this.httpClient=i??qe(),this.apiKey=r}async isValidRootForHeight(t,e){const r={method:"GET",headers:this.getHeaders()},i=await this.httpClient.request(`${this.URL}/block/${e}/header`,r);if(i.ok){const{merkleroot:e}=i.data;return e===t}if(404===i.status)return!1;throw new Error(`Failed to verify merkleroot for height ${e} because of an error: ${JSON.stringify(i.data)} `)}getHeaders(){const t={Accept:"application/json"};return this.apiKey&&(t.Authorization=this.apiKey),t}}function Xe(){return new $e}class Ge{_bumpIndex;_tx;_rawTx;_txid;inputTxids=[];isValid=void 0;get bumpIndex(){return this._bumpIndex}set bumpIndex(t){this._bumpIndex=t,this.updateInputTxids()}get hasProof(){return void 0!==this._bumpIndex}get isTxidOnly(){return!!this._txid&&!this._rawTx&&!this._tx}get txid(){if(this._txid)return this._txid;if(this._tx)return this._txid=this._tx.id("hex"),this._txid;if(this._rawTx)return this._txid=Nt(It(this._rawTx)),this._txid;throw new Error("Internal")}get tx(){return this._tx?this._tx:this._rawTx?(this._tx=rr.fromBinary(this._rawTx),this._tx):void 0}get rawTx(){return this._rawTx?this._rawTx:this._tx?(this._rawTx=this._tx.toBinary(),this._rawTx):void 0}constructor(t,e){"string"==typeof t?this._txid=t:Array.isArray(t)?this._rawTx=t:this._tx=t,this.bumpIndex=e,this.updateInputTxids()}static fromTx(t,e){return new Ge(t,e)}static fromRawTx(t,e){return new Ge(t,e)}static fromTxid(t,e){return new Ge(t,e)}updateInputTxids(){if(this.hasProof||!this.tx)this.inputTxids=[];else{const t={};for(const e of this.tx.inputs)t[e.sourceTXID]=!0;this.inputTxids=Object.keys(t)}}toWriter(t,e){const r=e=>{t.writeUInt8(e)},i=()=>{if(this._rawTx)t.write(this._rawTx);else{if(!this._tx)throw new Error("a valid serialized Transaction is expected");t.write(this._tx.toBinary())}};e===Ze?this.isTxidOnly?(r(Je.TXID_ONLY),(()=>{t.writeReverse(Et(this._txid,"hex"))})()):void 0!==this.bumpIndex?(r(Je.RAWTX_AND_BUMP_INDEX),t.writeVarIntNum(this.bumpIndex),i()):(r(Je.RAWTX),i()):(i(),(()=>{void 0===this.bumpIndex?r(Je.RAWTX):(r(Je.RAWTX_AND_BUMP_INDEX),t.writeVarIntNum(this.bumpIndex))})())}static fromReader(t,e){let r,i,n;if(e===Ze){const e=t.readUInt8();e===Je.TXID_ONLY?n=Ge.fromTxid(Nt(t.readReverse(32))):(e===Je.RAWTX_AND_BUMP_INDEX&&(i=t.readVarIntNum()),r=rr.fromReader(t),n=Ge.fromTx(r,i))}else r=rr.fromReader(t),i=t.readUInt8()?t.readVarIntNum():void 0,n=Ge.fromTx(r,i);return n}}const Ye=4022206465,Ze=4022206466,Qe=16843009;var Je;!function(t){t[t.RAWTX=0]="RAWTX",t[t.RAWTX_AND_BUMP_INDEX=1]="RAWTX_AND_BUMP_INDEX",t[t.TXID_ONLY=2]="TXID_ONLY"}(Je||(Je={}));class tr{bumps=[];txs=[];version=Ze;atomicTxid=void 0;constructor(t=Ze){this.version=t}findTxid(t){return this.txs.find((e=>e.txid===t))}makeTxidOnly(t){const e=this.txs.findIndex((e=>e.txid===t));if(-1===e)return;let r=this.txs[e];return r.isTxidOnly||(this.txs.splice(e,1),r=this.mergeTxidOnly(t)),r}findBump(t){return this.bumps.find((e=>e.path[0].find((e=>e.hash===t))))}findTransactionForSigning(t){const e=this.findTxid(t);if(e){for(const t of e.tx.inputs)if(!t.sourceTransaction){const e=this.findTxid(t.sourceTXID);e&&(t.sourceTransaction=e.tx)}return e.tx}}findAtomicTransaction(t){const e=this.findTxid(t);if(!e)return;const r=(t,e)=>{const i=t.findBump(e.id("hex"));if(i)e.merklePath=i;else for(const i of e.inputs){if(!i.sourceTransaction){const e=t.findTxid(i.sourceTXID);e&&(i.sourceTransaction=e.tx)}if(i.sourceTransaction){const e=t.findBump(i.sourceTransaction.id("hex"));e?i.sourceTransaction.merklePath=e:r(t,i.sourceTransaction)}}};return r(this,e.tx),e.tx}mergeBump(t){let e;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r];if(i===t)return r;if(i.blockHeight===t.blockHeight&&i.computeRoot()===t.computeRoot()){i.combine(t),e=r;break}}void 0===e&&(e=this.bumps.length,this.bumps.push(t));const r=this.bumps[e];for(const t of this.txs){const i=t.txid;if(!t.bumpIndex)for(const n of r.path[0])if(n.hash===i){t.bumpIndex=e,n.txid=!0;break}}return e}mergeRawTx(t,e){const r=new Ge(t,e);return this.removeExistingTxid(r.txid),this.txs.push(r),this.tryToValidateBumpIndex(r),r}mergeTransaction(t){const e=t.id("hex");let r;this.removeExistingTxid(e),t.merklePath&&(r=this.mergeBump(t.merklePath));const i=new Ge(t,r);if(this.txs.push(i),this.tryToValidateBumpIndex(i),r=i.bumpIndex,void 0===r)for(const e of t.inputs)e.sourceTransaction&&this.mergeTransaction(e.sourceTransaction);return i}removeExistingTxid(t){const e=this.txs.findIndex((e=>e.txid===t));e>=0&&this.txs.splice(e,1)}mergeTxidOnly(t){let e=this.txs.find((e=>e.txid===t));return e||(e=new Ge(t),this.txs.push(e),this.tryToValidateBumpIndex(e)),e}mergeBeefTx(t){let e=this.findTxid(t.txid);return t.isTxidOnly&&!e?e=this.mergeTxidOnly(t.txid):!t._tx||e&&!e.isTxidOnly?!t._rawTx||e&&!e.isTxidOnly||(e=this.mergeRawTx(t._rawTx)):e=this.mergeTransaction(t._tx),e}mergeBeef(t){const e=Array.isArray(t)?tr.fromBinary(t):t;for(const t of e.bumps)this.mergeBump(t);for(const t of e.txs)this.mergeBeefTx(t)}isValid(t){return this.verifyValid(t).valid}async verify(t,e){const r=this.verifyValid(e);if(!r.valid)return!1;for(const e of Object.keys(r.roots))if(!await t.isValidRootForHeight(r.roots[e],Number(e)))return!1;return!0}verifyValid(t){const e={valid:!1,roots:{}};this.sortTxs();const r={};for(const i of this.txs)if(i.isTxidOnly){if(!t)return e;r[i.txid]=!0}const i=(t,r)=>{const i=t.computeRoot(r);return e.roots[t.blockHeight]||(e.roots[t.blockHeight]=i),e.roots[t.blockHeight]===i};for(const t of this.bumps)for(const n of t.path[0])if(n.txid&&n.hash&&(r[n.hash]=!0,!i(t,n.hash)))return e;for(const t of this.txs){for(const i of t.inputTxids)if(!r[i])return e;r[t.txid]=!0}return e.valid=!0,e}toWriter(t){t.writeUInt32LE(this.version),t.writeVarIntNum(this.bumps.length);for(const e of this.bumps)t.write(e.toBinary());t.writeVarIntNum(this.txs.length);for(const e of this.txs)e.toWriter(t,this.version)}toBinary(){const t=new Dt;return this.toWriter(t),t.toArray()}toBinaryAtomic(t){this.sortTxs();const e=this.findTxid(t);if(!e)throw new Error(`${t} does not exist in this Beef`);let r=this;if(this.txs[this.txs.length-1]!==e){r=this.clone();const e=this.txs.findIndex((e=>e.txid===t));r.txs.splice(e+1)}const i=new Dt;return i.writeUInt32LE(Qe),i.write(Et(t,"hex")),r.toWriter(i),i.toArray()}toHex(){return Nt(this.toBinary())}static fromReader(t){let e,r=t.readUInt32LE();if(r===Qe&&(e=Nt(t.read(32)),r=t.readUInt32LE()),r!==Ye&&r!==Ze)throw new Error(`Serialized BEEF must start with 4022206465 or ${Ze} but starts with ${r}`);const i=new tr(r),n=t.readVarIntNum();for(let e=0;e<n;e++){const e=Ue.fromReader(t,!1);i.bumps.push(e)}const s=t.readVarIntNum();for(let e=0;e<s;e++){const e=Ge.fromReader(t,r);i.txs.push(e)}return i.atomicTxid=e,i}static fromBinary(t){const e=new Ut(t);return tr.fromReader(e)}static fromString(t,e="hex"){const r=Et(t,e),i=new Ut(r);return tr.fromReader(i)}tryToValidateBumpIndex(t){if(void 0!==t.bumpIndex)return!0;const e=t.txid;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r].path[0].findIndex((t=>t.hash===e));if(i>=0)return t.bumpIndex=r,this.bumps[r].path[0][i].txid=!0,!0}return!1}sortTxs(){const t={},e={};let r=[];const i=[],n=[];for(const s of this.txs)e[s.txid]=s,s.isValid=s.hasProof,s.isValid?(t[s.txid]=!0,i.push(s)):s.isTxidOnly&&0===s.inputTxids.length?(t[s.txid]=!0,n.push(s)):r.push(s);const s={},a=[],o=r;r=[];for(const t of o){let i=!1;for(const r of t.inputTxids)e[r]||(s[r]=!0,i=!0);i?a.push(t):r.push(t)}for(;r.length>0;){const e=r;r=[];for(const n of e)n.inputTxids.every((e=>t[e]))?(t[n.txid]=!0,i.push(n)):r.push(n);if(e.length===r.length)break}const c=r;return this.txs=a.concat(c).concat(n).concat(i),{missingInputs:Object.keys(s),notValid:c.map((t=>t.txid)),valid:Object.keys(t),withMissingInputs:a.map((t=>t.txid)),txidOnly:n.map((t=>t.txid))}}clone(){const t=new tr;return t.bumps=Array.from(this.bumps),t.txs=Array.from(this.txs),t}trimKnownTxids(t){for(let e=0;e<this.txs.length;){const r=this.txs[e];r.isTxidOnly&&t.includes(r.txid)?this.txs.splice(e,1):e++}}getValidTxids(){return this.sortTxs().valid}toLogString(){let t="";t+=`BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`;let e=-1;for(const r of this.bumps)e++,t+=` BUMP ${e}\n block: ${r.blockHeight}\n txids: [\n${r.path[0].filter((t=>!!t.txid)).map((t=>` '${t.hash}'`)).join(",\n")}\n ]\n`;e=-1;for(const r of this.txs)e++,t+=` TX ${e}\n txid: ${r.txid}\n`,void 0!==r.bumpIndex&&(t+=` bumpIndex: ${r.bumpIndex}\n`),r.isTxidOnly?t+=" txidOnly\n":t+=` rawTx length=${r.rawTx.length}\n`,r.inputTxids.length>0&&(t+=` inputs: [\n${r.inputTxids.map((t=>` '${t}'`)).join(",\n")}\n ]\n`);return t}addComputedLeaves(){const t=this;for(const r of t.bumps)for(let t=1;t<r.path.length;t++)for(const i of r.path[t-1])if(i.hash&&!(1&i.offset)){const n=r.path[t-1].find((t=>t.offset===i.offset+1)),s=i.offset>>1;n&&n.hash&&-1===r.path[t].findIndex((t=>t.offset===s))&&r.path[t].push({offset:s,hash:(e=n.hash+i.hash,Nt(It(Et(e,"hex").reverse()).reverse()))})}var e}}const er=tr;class rr{version;inputs;outputs;lockTime;metadata;merklePath;cachedHash;static addPathOrInputs(t,e,r){if("number"==typeof t.pathIndex){const e=r[t.pathIndex];if("object"!=typeof e)throw new Error("Invalid merkle path index found in BEEF!");t.tx.merklePath=e}else for(const i of t.tx.inputs){const t=e[i.sourceTXID];if("object"!=typeof t)throw new Error(`Reference to unknown TXID in BEEF: ${i.sourceTXID}`);i.sourceTransaction=t.tx,this.addPathOrInputs(t,e,r)}}static fromBEEF(t,e){const r=new Ut(t),{transactions:i,BUMPs:n}=rr.parseBEEFData(r),s=Object.keys(i),a=s[s.length-1],o=e||a;if(!i[o])throw new Error(`Transaction with TXID ${o} not found in BEEF data.`);return this.addPathOrInputs(i[o],i,n),i[o].tx}static fromAtomicBEEF(t){const e=new Ut(t),r=e.readUInt32LE();if(r!==Qe)throw new Error(`Invalid Atomic BEEF prefix. Expected 0x01010101, received 0x${r.toString(16)}.`);const i=e.read(32),n=Nt(i),s=new Ut(e.read()),{transactions:a,BUMPs:o}=rr.parseBEEFData(s);if(!a[n])throw new Error(`Subject transaction with TXID ${n} not found in Atomic BEEF data.`);const c=new Set;for(const t of o)for(const e of t.path[0])e.hash&&c.add(e.hash);const h=new Set;for(const t of Object.keys(a))h.add(t);const u=t=>{if(h.delete(t),c.has(t))return;c.add(t);const e=a[t].tx;for(const t of e.inputs){const e=t.sourceTXID;if(!a[e])throw new Error(`Input transaction with TXID ${e} is missing in Atomic BEEF data.`);u(e)}};u(n);for(const t of h)throw new Error(`Unrelated transaction with TXID ${t} found in Atomic BEEF data.`);return this.addPathOrInputs(a[n],a,o),a[n].tx}static parseBEEFData(t){const e=t.readUInt32LE();if(e!==Ye)throw new Error(`Invalid BEEF version. Expected 4022206465, received ${e}.`);const r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++)i.push(Ue.fromReader(t));const n=t.readVarIntNum(),s={};for(let e=0;e<n;e++){const e=rr.fromReader(t),r={tx:e},i=e.id("hex");Boolean(t.readUInt8())&&(r.pathIndex=t.readVarIntNum()),s[i]=r}return{transactions:s,BUMPs:i}}static fromEF(t){const e=new Ut(t),r=e.readUInt32LE();if("0000000000ef"!==Nt(e.read(6)))throw new Error("Invalid EF marker");const i=e.readVarIntNum(),n=[];for(let t=0;t<i;t++){const t=Nt(e.readReverse(32)),r=e.readUInt32LE(),i=e.readVarIntNum(),s=e.read(i),a=Me.fromBinary(s),o=e.readUInt32LE(),c=e.readUInt64LEBn().toNumber(),h=e.readVarIntNum(),u=e.read(h),d=_e.fromBinary(u),l=new rr(null,[],[],null);l.outputs=Array(r+1).fill(null),l.outputs[r]={satoshis:c,lockingScript:d},n.push({sourceTransaction:l,sourceTXID:t,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const s=e.readVarIntNum(),a=[];for(let t=0;t<s;t++){const t=e.readUInt64LEBn().toNumber(),r=e.readVarIntNum(),i=e.read(r),n=_e.fromBinary(i);a.push({satoshis:t,lockingScript:n})}const o=e.readUInt32LE();return new rr(r,n,a,o)}static parseScriptOffsets(t){const e=new Ut(t),r=[],i=[];e.pos+=4;const n=e.readVarIntNum();for(let t=0;t<n;t++){e.pos+=36;const i=e.readVarIntNum();r.push({vin:t,offset:e.pos,length:i}),e.pos+=i+4}const s=e.readVarIntNum();for(let t=0;t<s;t++){e.pos+=8;const r=e.readVarIntNum();i.push({vout:t,offset:e.pos,length:r}),e.pos+=r}return{inputs:r,outputs:i}}static fromReader(t){const e=t.readUInt32LE(),r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++){const e=Nt(t.readReverse(32)),r=t.readUInt32LE(),n=t.readVarIntNum(),s=t.read(n),a=Me.fromBinary(s),o=t.readUInt32LE();i.push({sourceTXID:e,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const n=t.readVarIntNum(),s=[];for(let e=0;e<n;e++){const e=t.readUInt64LEBn().toNumber(),r=t.readVarIntNum(),i=t.read(r),n=_e.fromBinary(i);s.push({satoshis:e,lockingScript:n})}const a=t.readUInt32LE();return new rr(e,i,s,a)}static fromBinary(t){const e=new Ut(t);return rr.fromReader(e)}static fromHex(t){return rr.fromBinary(Et(t,"hex"))}static fromHexEF(t){return rr.fromEF(Et(t,"hex"))}static fromHexBEEF(t,e){return rr.fromBEEF(Et(t,"hex"),e)}constructor(t=1,e=[],r=[],i=0,n={},s){this.version=t,this.inputs=e,this.outputs=r,this.lockTime=i,this.metadata=n,this.merklePath=s}addInput(t){if(void 0===t.sourceTXID&&void 0===t.sourceTransaction)throw new Error("A reference to an an input transaction is required. If the input transaction itself cannot be referenced, its TXID must still be provided.");void 0===t.sequence&&(t.sequence=4294967295),this.cachedHash=void 0,this.inputs.push(t)}addOutput(t){if(this.cachedHash=void 0,!t.change){if(void 0===t.satoshis)throw new Error("either satoshis must be defined or change must be set to true");if(t.satoshis<=0)throw new Error("satoshis must be a positive integer or zero")}if(!t.lockingScript)throw new Error("lockingScript must be defined");this.outputs.push(t)}addP2PKHOutput(t,e){const r=(new Re).lock(t);if(void 0===e)return this.addOutput({lockingScript:r,change:!0});this.addOutput({lockingScript:r,satoshis:e})}updateMetadata(t){this.metadata={...this.metadata,...t}}async fee(t=new De(10),e="equal"){if(this.cachedHash=void 0,"number"==typeof t){const e=t;t={computeFee:async()=>e}}const r=await t.computeFee(this),i=this.calculateChange(r);i<=0?this.outputs=this.outputs.filter((t=>!t.change)):this.distributeChange(i,e)}calculateChange(t){let e=0;for(const t of this.inputs){if("object"!=typeof t.sourceTransaction)throw new Error("Source transactions are required for all inputs during fee computation");e+=t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis}e-=t;for(const t of this.outputs)t.change||(e-=t.satoshis);return e}distributeChange(t,e){let r=0;const i=this.outputs.filter((t=>t.change));"random"===e?r=this.distributeRandomChange(t,i):"equal"===e&&(r=this.distributeEqualChange(t,i)),r<t&&(this.outputs[this.outputs.length-1].satoshis+=t-r)}distributeRandomChange(t,e){let r=0,i=t;const n=Array(e.length).fill(1);i-=e.length,r+=e.length;for(let t=0;t<e.length-1;t++){const e=this.benfordNumber(0,i);n[t]+=e,r+=e,i-=e}for(const t of this.outputs)t.change&&(t.satoshis=n.shift());return r}distributeEqualChange(t,e){let r=0;const i=Math.floor(t/e.length);for(const t of e)r+=i,t.satoshis=i;return r}benfordNumber(t,e){const r=Math.floor(9*Math.random())+1;return Math.floor(t+(e-t)*Math.log10(1+1/r)/Math.log10(10))}getFee(){let t=0;for(const e of this.inputs){if("object"!=typeof e.sourceTransaction)throw new Error("Source transactions or sourceSatoshis are required for all inputs to calculate fee");t+=e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis}let e=0;for(const t of this.outputs)e+=t.satoshis||0;return t-e}async sign(){this.cachedHash=void 0;for(const t of this.outputs)if(void 0===t.satoshis)throw t.change?new Error("There are still change outputs with uncomputed amounts. Use the fee() method to compute the change amounts and transaction fees prior to signing."):new Error("One or more transaction outputs is missing an amount. Ensure all output amounts are provided before signing.");const t=await Promise.all(this.inputs.map((async(t,e)=>"object"==typeof this.inputs[e].unlockingScriptTemplate?await this.inputs[e].unlockingScriptTemplate.sign(this,e):await Promise.resolve(void 0))));for(let e=0,r=this.inputs.length;e<r;e++)"object"==typeof this.inputs[e].unlockingScriptTemplate&&(this.inputs[e].unlockingScript=t[e])}async broadcast(t=je()){return await t.broadcast(this)}toBinary(){const t=new Dt;t.writeUInt32LE(this.version),t.writeVarIntNum(this.inputs.length);for(const e of this.inputs){void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.writeReverse(Et(e.sourceTXID,"hex")),t.writeUInt32LE(e.sourceOutputIndex);const r=e.unlockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r),t.writeUInt32LE(e.sequence)}t.writeVarIntNum(this.outputs.length);for(const e of this.outputs){t.writeUInt64LE(e.satoshis);const r=e.lockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r)}return t.writeUInt32LE(this.lockTime),t.toArray()}toEF(){const t=new Dt;t.writeUInt32LE(this.version),t.write([0,0,0,0,0,239]),t.writeVarIntNum(this.inputs.length);for(const e of this.inputs){if(void 0===e.sourceTransaction)throw new Error("All inputs must have source transactions when serializing to EF format");void 0===e.sourceTXID?t.write(e.sourceTransaction.hash()):t.write(Et(e.sourceTXID,"hex").reverse()),t.writeUInt32LE(e.sourceOutputIndex);const r=e.unlockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r),t.writeUInt32LE(e.sequence),t.writeUInt64LE(e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis);const i=e.sourceTransaction.outputs[e.sourceOutputIndex].lockingScript.toBinary();t.writeVarIntNum(i.length),t.write(i)}t.writeVarIntNum(this.outputs.length);for(const e of this.outputs){t.writeUInt64LE(e.satoshis);const r=e.lockingScript.toBinary();t.writeVarIntNum(r.length),t.write(r)}return t.writeUInt32LE(this.lockTime),t.toArray()}toHexEF(){return Nt(this.toEF())}toHex(){return Nt(this.toBinary())}toHexBEEF(){return Nt(this.toBEEF())}toHexAtomicBEEF(){return Nt(this.toAtomicBEEF())}hash(t){let e;return this.cachedHash?e=this.cachedHash:(e=It(this.toBinary()),this.cachedHash=e),"hex"===t?Nt(e):e}id(t){const e=[...this.hash()];return e.reverse(),"hex"===t?Nt(e):e}async verify(t=Xe(),e){const r=new Set,i=[this];for(;i.length>0;){const n=i.shift(),s=n.id("hex");if(r.has(s))continue;if("object"==typeof n.merklePath){if("scripts only"===t){r.add(s);continue}if(await n.merklePath.verify(s,t)){r.add(s);continue}}if(void 0!==e){const t=rr.fromEF(n.toEF());if(delete t.outputs[0].satoshis,t.outputs[0].change=!0,await t.fee(e),n.getFee()<t.getFee())throw new Error(`Verification failed because the transaction ${s} has an insufficient fee and has not been mined.`)}let a=0;for(let t=0;t<n.inputs.length;t++){const e=n.inputs[t];if("object"!=typeof e.sourceTransaction)throw new Error(`Verification failed because the input at index ${t} of transaction ${s} is missing an associated source transaction. This source transaction is required for transaction verification because there is no merkle proof for the transaction spending a UTXO it contains.`);if("object"!=typeof e.unlockingScript)throw new Error(`Verification failed because the input at index ${t} of transaction ${s} is missing an associated unlocking script. This script is required for transaction verification because there is no merkle proof for the transaction spending the UTXO.`);const o=e.sourceTransaction.outputs[e.sourceOutputIndex];a+=o.satoshis;const c=e.sourceTransaction.id("hex");r.has(c)||i.push(e.sourceTransaction);const h=n.inputs.filter(((e,r)=>r!==t));if(void 0===e.sourceTXID&&(e.sourceTXID=c),!new Be({sourceTXID:e.sourceTXID,sourceOutputIndex:e.sourceOutputIndex,lockingScript:o.lockingScript,sourceSatoshis:o.satoshis,transactionVersion:n.version,otherInputs:h,unlockingScript:e.unlockingScript,inputSequence:e.sequence,inputIndex:t,outputs:n.outputs,lockTime:n.lockTime}).validate())return!1}let o=0;for(const t of n.outputs){if("number"!=typeof t.satoshis)throw new Error("Every output must have a defined amount during transaction verification.");o+=t.satoshis}if(o>a)return!1;r.add(s)}return!0}toBEEF(t){const e=new Dt;e.writeUInt32LE(Ye);const r=[],i=[],n=e=>{const s={tx:e},a="object"==typeof e.merklePath;if(a){let t=!1;for(let i=0;i<r.length;i++){if(r[i]===e.merklePath){s.pathIndex=i,t=!0;break}if(r[i].blockHeight===e.merklePath.blockHeight&&r[i].computeRoot()===e.merklePath.computeRoot()){r[i].combine(e.merklePath),s.pathIndex=i,t=!0;break}}t||(s.pathIndex=r.length,r.push(e.merklePath))}if(i.some((t=>t.tx.id("hex")===e.id("hex")))||i.unshift(s),!a)for(let r=0;r<e.inputs.length;r++){const i=e.inputs[r];if("object"==typeof i.sourceTransaction)n(i.sourceTransaction);else if(!t)throw new Error("A required source transaction is missing!")}};n(this),e.writeVarIntNum(r.length);for(const t of r)e.write(t.toBinary());e.writeVarIntNum(i.length);for(const t of i)e.write(t.tx.toBinary()),"number"==typeof t.pathIndex?(e.writeUInt8(1),e.writeVarIntNum(t.pathIndex)):e.writeUInt8(0);return e.toArray()}toAtomicBEEF(t){const e=new Dt;e.writeUInt32LE(16843009),e.write(this.id());const r=this.toBEEF(t);return e.write(r),e.toArray()}}function ir(t){return"success"===t.status}function nr(t){return"error"===t.status}const sr=class extends tr{knownTo={};constructor(t){if(super(),t)for(const e of t)this.addParty(e)}isParty(t){return Object.keys(this.knownTo).includes(t)}addParty(t){if(this.isParty(t))throw new Error(`Party ${t} already exists.`);this.knownTo[t]={}}getKnownTxidsForParty(t){const e=this.knownTo[t];if(!e)throw new Error(`Party ${t} is unknown.`);return Object.keys(e)}getTrimmedBeefForParty(t){const e=this.getKnownTxidsForParty(t),r=this.clone();return r.trimKnownTxids(e),r}addKnownTxidsForParty(t,e){this.isParty(t)||this.addParty(t);const r=this.knownTo[t];for(const t of e)r[t]=!0,this.mergeTxidOnly(t)}mergeBeefFromParty(t,e){const r=Array.isArray(e)?tr.fromBinary(e):e,i=r.getValidTxids();this.mergeBeef(r),this.addKnownTxidsForParty(t,i)}};class ar{network;URL;httpClient;constructor(t="main",e=qe()){this.network=t,this.URL=`https://api.whatsonchain.com/v1/bsv/${t}/tx/raw`,this.httpClient=e}async broadcast(t){const e={method:"POST",headers:{"Content-Type":"application/json",Accept:"text/plain"},data:{txhex:t.toHex()}};try{const t=await this.httpClient.request(this.URL,e);return t.ok?{status:"success",txid:t.data,message:"broadcast successful"}:{status:"error",code:t.status.toString()??"ERR_UNKNOWN",description:t.data??"Unknown error"}}catch(t){return{status:"error",code:"500",description:"string"==typeof t.message?t.message:"Internal Server Error"}}}}const or="42423301",cr=(t,e,r)=>{const i="object"!=typeof r;if(i){const t=new zt,e=new ie(1),i=t.g.mul(e);r=new Yt(i.x,i.y)}const n=Jt(32),s=`2-message signing-${Ft(n)}`,a=e.deriveChild(r,s).sign(t).toDER(),o=e.toPublicKey().encode(!0);return[...Et(or,"hex"),...o,...i?[0]:r.encode(!0),...n,...a]},hr=(t,e,r)=>{const i=new Ut(e),n=Nt(i.read(4));if(n!==or)throw new Error(`Message version mismatch: Expected ${or}, received ${n}`);const s=Yt.fromString(Nt(i.read(33))),[a]=i.read(1);if(0===a)r=new ie(1);else{const t=i.read(32),e=Nt([a,...t]);if("object"!=typeof r)throw new Error(`This signature can only be verified with knowledge of a specific private key. The associated public key is: ${e}`);const n=r.toPublicKey().encode(!0,"hex");if(e!==n)throw new Error(`The recipient public key is ${n} but the signature requres the recipient to have public key ${e}`)}const o=Ft(i.read(32)),c=Nt(i.read(i.bin.length-i.pos)),h=Wt.fromDER(c,"hex"),u=`2-message signing-${o}`;return s.deriveChild(r,u).verify(t,h)},ur="42421033",dr=(t,e,r)=>{const i=Jt(32),n=`2-message encryption-${Ft(i)}`,s=e.deriveChild(r,n),a=r.deriveChild(e,n),o=s.deriveSharedSecret(a),c=new Oe(o.encode(!0).slice(1)).encrypt(t),h=e.toPublicKey().encode(!0);return[...Et(ur,"hex"),...h,...r.encode(!0),...i,...c]},lr=(t,e)=>{const r=new Ut(t),i=Nt(r.read(4));if(i!==ur)throw new Error(`Message version mismatch: Expected ${ur}, received ${i}`);const n=Yt.fromString(Nt(r.read(33))),s=Nt(r.read(33)),a=e.toPublicKey().encode(!0,"hex");if(s!==a)throw new Error(`The encrypted message expects a recipient public key of ${s}, but the provided key is ${a}`);const o=Ft(r.read(32)),c=r.read(r.bin.length-r.pos),h=`2-message encryption-${o}`,u=n.deriveChild(e,h),d=e.deriveChild(n,h),l=u.deriveSharedSecret(d);return new Oe(l.encode(!0).slice(1)).decrypt(c)},fr=t=>{const e=new Dt;e.writeVarIntNum(24),e.write(Et("Bitcoin Signed Message:\n","utf8")),e.writeVarIntNum(t.length),e.write(t);const r=e.toArray();return It(r)},pr=(t,e,r="base64")=>{const i=fr(t),n=Xt(new c(i),e,!0);if("raw"===r)return n;const s=new c(i),a=n.CalculateRecoveryFactor(e.toPublicKey(),s);return n.toCompact(a,!0,"base64")},br=(t,e,r)=>{const i=fr(t);return Gt(new c(i),e,r)};class mr{versionBytesNum;depth;parentFingerPrint;childIndex;chainCode;privKey;pubKey;constants={pubKey:76067358,privKey:76066276};constructor(t,e,r,i,n,s,a){this.versionBytesNum=t,this.depth=e,this.parentFingerPrint=r,this.childIndex=i,this.chainCode=n,this.privKey=s,this.pubKey=a}fromRandom(){return this.versionBytesNum=this.constants.privKey,this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=Jt(32),this.privKey=ie.fromRandom(),this.pubKey=this.privKey.toPublicKey(),this}static fromRandom(){return(new this).fromRandom()}static fromString(t){return(new this).fromString(t)}fromString(t){const e=Ht(t);return this.fromBinary([...e.prefix,...e.data])}static fromSeed(t){return(new this).fromSeed(t)}fromSeed(t){if(t.length<16)throw new Error("Need more than 128 bits of entropy");if(t.length>64)throw new Error("More than 512 bits of entropy is nonstandard");const e=Pt(Et("Bitcoin seed","utf8"),t);return this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=e.slice(32,64),this.versionBytesNum=this.constants.privKey,this.privKey=new ie(e.slice(0,32)),this.pubKey=this.privKey.toPublicKey(),this}static fromBinary(t){return(new this).fromBinary(t)}fromBinary(t){if(78!==t.length)throw new Error("incorrect bip32 data length");const e=new Ut(t);this.versionBytesNum=e.readUInt32BE(),this.depth=e.readUInt8(),this.parentFingerPrint=e.read(4),this.childIndex=e.readUInt32BE(),this.chainCode=e.read(32);const r=e.read(33),i=this.versionBytesNum===this.constants.privKey,n=this.versionBytesNum===this.constants.pubKey;if(i&&0===r[0])this.privKey=new ie(r.slice(1,33)),this.pubKey=this.privKey.toPublicKey();else{if(!n||2!==r[0]&&3!==r[0])throw new Error("Invalid key");this.pubKey=Yt.fromString(Nt(r))}return this}toString(){const t=this.toBinary();return Ct(t,[])}derive(t){if("m"===t)return this;const e=t.split("/");let r=this;for(const t in e){const i=e[t];if("0"===t){if("m"!==i)throw new Error("invalid path");continue}if(parseInt(i.replace("'",""),10).toString()!==i.replace("'",""))throw new Error("invalid path");const n=i.length>1&&"'"===i[i.length-1];let s=2147483647&parseInt(n?i.slice(0,i.length-1):i,10);n&&(s+=2147483648),r=r.deriveChild(s)}return r}deriveChild(t){if("number"!=typeof t)throw new Error("i must be a number");const e=[];e.push(t>>24&255),e.push(t>>16&255),e.push(t>>8&255),e.push(255&t);const r=[...e],i=!!(2147483648&t),n=this.versionBytesNum===this.constants.privKey;if(i&&(!this.privKey||!n))throw new Error("Cannot do private key derivation without private key");let s=null;if(this.privKey){let t=null;t=i?[0,...this.privKey.toArray("be",32),...r]:[...this.pubKey.encode(!0),...r];const e=Pt(this.chainCode,t),n=new c(e.slice(0,32)),a=e.slice(32,64),o=n.add(this.privKey).mod((new zt).n);s=new mr,s.chainCode=a,s.privKey=new ie(o.toArray()),s.pubKey=s.privKey.toPublicKey()}else{const t=[...this.pubKey.encode(!0),...r],e=Pt(this.chainCode,t),i=new c(e.slice(0,32)),n=e.slice(32,64),a=(new zt).g.mul(i),o=this.pubKey,h=a.add(o),u=new Yt(h.x,h.y);s=new mr,s.chainCode=n,s.pubKey=u}s.childIndex=t;const a=vt(this.pubKey.encode(!0));return s.parentFingerPrint=a.slice(0,4),s.versionBytesNum=this.versionBytesNum,s.depth=this.depth+1,s}toPublic(){const t=new mr(this.versionBytesNum,this.depth,this.parentFingerPrint,this.childIndex,this.chainCode,this.privKey,this.pubKey);return t.versionBytesNum=this.constants.pubKey,t.privKey=void 0,t}toBinary(){const t=this.versionBytesNum===this.constants.privKey,e=this.versionBytesNum===this.constants.pubKey;if(t)return(new Dt).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).writeUInt8(0).write(this.privKey.toArray("be",32)).toArray();if(e)return(new Dt).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).write(this.pubKey.encode(!0)).toArray();throw new Error("bip32: invalid versionBytesNum byte")}isPrivate(){return this.versionBytesNum===this.constants.privKey}}const wr={value:["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],space:" "};class gr{mnemonic;seed;Wordlist;constructor(t,e,r=wr){this.mnemonic=t,this.seed=e,this.Wordlist=r}toBinary(){const t=new Dt;if(this.mnemonic){const e=Et(this.mnemonic,"utf8");t.writeVarIntNum(e.length),t.write(e)}else t.writeVarIntNum(0);return this.seed?(t.writeVarIntNum(this.seed.length),t.write(this.seed)):t.writeVarIntNum(0),t.toArray()}fromBinary(t){const e=new Ut(t),r=e.readVarIntNum();r>0&&(this.mnemonic=Tt(e.read(r),"utf8"));const i=e.readVarIntNum();return i>0&&(this.seed=e.read(i)),this}fromRandom(t){if(t||(t=128),t%32!=0)throw new Error("bits must be multiple of 32");if(t<128)throw new Error("bits must be at least 128");const e=Jt(t/8);return this.entropy2Mnemonic(e),this.mnemonic2Seed(),this}static fromRandom(t){return(new this).fromRandom(t)}fromEntropy(t){return this.entropy2Mnemonic(t),this}static fromEntropy(t){return(new this).fromEntropy(t)}fromString(t){return this.mnemonic=t,this}static fromString(t){return(new this).fromString(t)}toString(){return this.mnemonic}toSeed(t){return this.mnemonic2Seed(t),this.seed}entropy2Mnemonic(t){if(t.length<16)throw new Error("Entropy is less than 128 bits. It must be 128 bits or more.");const e=gt(t);let r="";const i=8*t.length;for(let e=0;e<t.length;e++)r+=("00000000"+t[e].toString(2)).slice(-8);let n=e[0].toString(2);if(n=("00000000"+n).slice(-8).slice(0,i/32),r+=n,r.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+r.length);let s="";for(let t=0;t<r.length/11;t++){""!==s&&(s+=this.Wordlist.space);const e=parseInt(r.slice(11*t,11*(t+1)),2);s+=this.Wordlist.value[e]}return this.mnemonic=s,this}check(){const t=this.mnemonic.split(this.Wordlist.space);let e="";for(let r=0;r<t.length;r++){const i=this.Wordlist.value.indexOf(t[r]);if(i<0)return!1;e+=("00000000000"+i.toString(2)).slice(-11)}if(e.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+e.length);const r=e.length/33,i=e.slice(-r),n=e.slice(0,e.length-r),s=[];for(let t=0;t<n.length/8;t++)s.push(parseInt(e.slice(8*t,8*(t+1)),2));let a=gt(s.slice(0,n.length/8))[0].toString(2);return a=("00000000"+a).slice(-8).slice(0,r),a===i}mnemonic2Seed(t=""){let e=this.mnemonic;if(!this.check())throw new Error("Mnemonic does not pass the check - was the mnemonic typed incorrectly? Are there extra spaces?");if("string"!=typeof t)throw new Error("passphrase must be a string or undefined");e=e.normalize("NFKD"),t=t.normalize("NFKD");const r=Et(e,"utf8"),i=[...Et("mnemonic","utf8"),...Et(t,"utf8")];return this.seed=Ot(r,i,2048,64,"sha512"),this}isValid(t=""){let e;try{e=!!this.mnemonic2Seed(t)}catch(t){e=!1}return e}static isValid(t,e=""){return new gr(t).isValid(e)}}function yr(t){let e,r,i;this._tables[0][0][0]||this._precompute();const n=this._tables[0][4],s=this._tables[1],a=t.length;let o=1;if(4!==a&&6!==a&&8!==a)throw new Error("invalid aes key size");this._key=[r=t.slice(0),i=[]];for(var c=a;c<4*a+28;c++)e=r[c-1],(c%a==0||8===a&&c%a==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],c%a==0&&(e=e<<8^e>>>24^o<<24,o=o<<1^283*(o>>7))),r[c]=r[c-a]^e;for(let t=0;c;t++,c--)e=r[3&t?c:c-4],i[t]=c<=4||t<4?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}yr.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)]],_precompute:function(){const t=this._tables[0],e=this._tables[1],r=t[4],i=e[4];let n,s,a;const o=new Uint8Array(256),c=new Uint8Array(256);let h,u,d,l,f,p;for(n=0;n<256;n++)c[(o[n]=n<<1^283*(n>>7))^n]=n;for(s=a=0;!r[s];s^=h||1,a=c[a]||1)for(l=a^a<<1^a<<2^a<<3^a<<4,l=l>>8^255&l^99,r[s]=l,i[l]=s,d=o[u=o[h=o[s]]],p=16843009*d^65537*u^257*h^16843008*s,f=257*o[l]^16843008*l,n=0;n<4;n++)t[n][s]=f=f<<24^f>>>8,e[n][l]=p=p<<24^p>>>8},_crypt:function(t,e){if(4!==t.length)throw new Error("invalid aes block size");const r=this._key[e];let i,n,s,a=t[0]^r[0],o=t[e?3:1]^r[1],c=t[2]^r[2],h=t[e?1:3]^r[3];const u=r.length/4-2;let d,l=4;const f=new Uint32Array(4),p=this._tables[e],b=p[0],m=p[1],w=p[2],g=p[3],y=p[4];for(d=0;d<u;d++)i=b[a>>>24]^m[o>>16&255]^w[c>>8&255]^g[255&h]^r[l],n=b[o>>>24]^m[c>>16&255]^w[h>>8&255]^g[255&a]^r[l+1],s=b[c>>>24]^m[h>>16&255]^w[a>>8&255]^g[255&o]^r[l+2],h=b[h>>>24]^m[a>>16&255]^w[o>>8&255]^g[255&c]^r[l+3],l+=4,a=i,o=n,c=s;for(d=0;d<4;d++)f[e?3&-d:d]=y[a>>>24]<<24^y[o>>16&255]<<16^y[c>>8&255]<<8^y[255&h]^r[l++],i=a,a=o,o=c,c=h,h=i;return f}};class Ir{static encrypt(t,e){const r=Ir.buf2Words(e),i=Ir.buf2Words(t),n=new yr(r).encrypt(i);return Ir.words2Buf(n)}static decrypt(t,e){const r=Ir.buf2Words(t),i=new yr(Ir.buf2Words(e)).decrypt(r);return Ir.words2Buf(i)}static buf2Words(t){if(t.length%4)throw new Error("buf length must be a multiple of 4");const e=[];for(let r=0;r<t.length/4;r++){const i=16777216*t[4*r]+(t[4*r+1]<<16|t[4*r+2]<<8|t[4*r+3]);e.push(i)}return e}static words2Buf(t){const e=new Array(4*t.length);for(let r=0;r<t.length;r++){const i=t[r];e[4*r]=i>>>24&255,e[4*r+1]=i>>>16&255,e[4*r+2]=i>>>8&255,e[4*r+3]=255&i}return e}}class vr{static buf2BlocksBuf(t,e){const r=e/8,i=[];for(let n=0;n<=t.length/r;n++){let s=t.slice(n*r,n*r+r);s.length<e&&(s=vr.pkcs7Pad(s,e)),i.push(s)}return i}static blockBufs2Buf(t){let e=t[t.length-1];return e=vr.pkcs7Unpad(e),t[t.length-1]=e,t.flat()}static encrypt(t,e,r,i){const n=8*e.length,s=vr.buf2BlocksBuf(t,n);return vr.encryptBlocks(s,e,r,i).flat()}static decrypt(t,e,r,i){const n=e.length,s=[];for(let e=0;e<t.length/n;e++)s.push(t.slice(e*n,e*n+n));const a=vr.decryptBlocks(s,e,r,i);return vr.blockBufs2Buf(a)}static encryptBlock(t,e,r,i){const n=vr.xorBufs(t,e);return r.encrypt(n,i)}static decryptBlock(t,e,r,i){const n=r.decrypt(t,i);return vr.xorBufs(n,e)}static encryptBlocks(t,e,r,i){const n=[];for(let s=0;s<t.length;s++){const a=t[s],o=vr.encryptBlock(a,e,r,i);n.push(o),e=o}return n}static decryptBlocks(t,e,r,i){const n=[];for(let s=0;s<t.length;s++){const a=t[s],o=vr.decryptBlock(a,e,r,i);n.push(o),e=a}return n}static pkcs7Pad(t,e){const r=e/8-t.length,i=new Array(r);return i.fill(r),[...t,...i]}static pkcs7Unpad(t){const e=t[t.length-1],r=t.slice(t.length-e,t.length),i=new Array(e);if(i.fill(e),Nt(r)!==Nt(i))throw new Error("invalid padding");return t.slice(0,t.length-e)}static xorBufs(t,e){if(t.length!==e.length)throw new Error("bufs must have the same length");const r=new Array(t.length);for(let i=0;i<t.length;i++)r[i]=t[i]^e[i];return r}}class kr{static encrypt(t,e,r,i=!0){r=r||new Array(16).fill(0)||Jt(16);const n=vr.encrypt(t,r,Ir,e);return i?[...r,...n]:[...n]}static decrypt(t,e,r){if(r){const i=t;return vr.decrypt(i,r,Ir,e)}{r=t.slice(0,16);const i=t.slice(16);return vr.decrypt(i,r,Ir,e)}}}class Pr{static ivkEkM(t,e){const r=t,i=e.mul(r),n=new Yt(i.x,i.y).encode(!0),s=yt(n);return{iv:s.slice(0,16),kE:s.slice(16,32),kM:s.slice(32,64)}}static electrumEncrypt(t,e,r,i=!1){let n;r||(r=ie.fromRandom()),i||(n=r.toPublicKey().encode(!0));const{iv:s,kE:a,kM:o}=Pr.ivkEkM(r,e),c=kr.encrypt(t,a,s,!1),h=Et("BIE1","utf8");let u;u=n?[...h,...n,...c]:[...h,...c];const d=kt(o,u);return[...u,...d]}static electrumDecrypt(t,e,r){const i=t.slice(0,4);if("BIE1"!==Tt(i,"utf8"))throw new Error("Invalid Magic");let n=4,s=null;if(t.length-n-32>=33){const e=t[n];2===e||3===e?(s=t.slice(n,n+33),n+=33):4===e&&(s=t.slice(n,n+65),n+=65)}if(s)r||(r=Yt.fromString(Nt(s)));else if(!r)throw new Error("Sender public key is required");const{iv:a,kE:o,kM:c}=Pr.ivkEkM(e,r),h=t.slice(n,t.length-32),u=t.slice(t.length-32,t.length),d=kt(c,t.slice(0,t.length-32));if(Nt(u)!==Nt(d))throw new Error("Invalid checksum");return kr.decrypt(h,o,a)}static bitcoreEncrypt(t,e,r,i){r||(r=ie.fromRandom());const n=r,s=r.toPublicKey().encode(!0),a=e.mul(n).getX().toArray("be",32),o=yt(a),c=o.slice(0,32),h=o.slice(32,64),u=kr.encrypt(t,c,i),d=kt(h,[...u]);return[...s,...u,...d]}static bitcoreDecrypt(t,e){const r=e,i=Yt.fromString(Nt(t.slice(0,33))).mul(r);if(i.eq(new Kt(0,0)))throw new Error("P equals 0");const n=i.getX().toArray("be",32),s=yt(n),a=s.slice(0,32),o=s.slice(32,64),c=t.slice(33,t.length-32),h=t.slice(t.length-32,t.length),u=kt(o,c);if(Nt(h)!==Nt(u))throw new Error("Invalid checksum");return[...kr.decrypt(c,a)]}}function Or(t,e){const r=new rr(0,[],[],0);return r.outputs=Array(t.vout+1).fill(null),r.outputs[t.vout]={satoshis:t.satoshis,lockingScript:_e.fromHex(t.script)},{sourceTransaction:r,sourceTXID:t.txid,sourceOutputIndex:t.vout,unlockingScriptTemplate:e,sequence:4294967295}}class Sr{static generate(t,e){const r=this.withDefaultOptions(e);return Nr(t,this.getCounter(r.timestamp,r.period),r)}static validate(t,e,r){const i=this.withDefaultValidateOptions(r);if((e=e.trim()).length!=i.digits)return!1;const n=this.getCounter(i.timestamp,i.period),s=[n];for(let t=1;t<=i.skew;t++)s.push(n+t),s.push(n-t);for(const r of s)if(e===Nr(t,r,i))return!0;return!1}static getCounter(t,e){const r=Math.floor(t/1e3);return Math.floor(r/e)}static withDefaultOptions(t){return{digits:2,algorithm:"SHA-1",period:30,timestamp:Date.now(),...t}}static withDefaultValidateOptions(t){return{skew:1,...this.withDefaultOptions(t)}}}function Nr(t,e,r){const i=function(t,e,r){switch(r){case"SHA-1":return new pt(t).update(e);case"SHA-256":return new ft(t).update(e);case"SHA-512":return new bt(t).update(e);default:throw new Error("unsupported HMAC algorithm")}}(t,new c(e).toArray("be",8),r.algorithm),n=i.digest(),s=15&n[n.length-1],a=n.slice(s,s+4);return(2147483647&new c(a).toNumber()).toString().slice(-r.digits)}var Er,Ar;!function(t){t[t.Silent=0]="Silent",t[t.App=1]="App",t[t.Counterparty=2]="Counterparty"}(Er||(Er={}));class xr{rootKey;constructor(t){this.rootKey="anyone"===t?new ie(1):t}derivePublicKey(t,e,r,i=!1){return r=this.normalizeCounterparty(r),i?this.rootKey.deriveChild(r,this.computeInvoiceNumber(t,e)).toPublicKey():r.deriveChild(this.rootKey,this.computeInvoiceNumber(t,e))}derivePrivateKey(t,e,r){return r=this.normalizeCounterparty(r),this.rootKey.deriveChild(r,this.computeInvoiceNumber(t,e))}deriveSymmetricKey(t,e,r){if("anyone"===r)throw new Error("Symmetric keys (such as encryption keys or HMAC keys) should not be derivable by everyone, because messages would be decryptable by anyone who knows the identity public key of the user, and HMACs would be similarly forgeable.");r=this.normalizeCounterparty(r);const i=this.derivePublicKey(t,e,r),n=this.derivePrivateKey(t,e,r);return new Oe(n.deriveSharedSecret(i).x.toArray())}revealCounterpartySecret(t){if("self"===t)throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");t=this.normalizeCounterparty(t);const e=this.rootKey.toPublicKey();if(this.rootKey.deriveChild(e,"test").toHex()===this.rootKey.deriveChild(t,"test").toHex())throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");return this.rootKey.deriveSharedSecret(t).encode(!0)}revealSpecificSecret(t,e,r){t=this.normalizeCounterparty(t);const i=this.rootKey.deriveSharedSecret(t),n=Et(this.computeInvoiceNumber(e,r),"utf8");return kt(i.encode(!0),n)}normalizeCounterparty(t){if(t)return"self"===t?this.rootKey.toPublicKey():"anyone"===t?new ie(1).toPublicKey():"string"==typeof t?Yt.fromString(t):t;throw new Error("counterparty must be self, anyone or a public key!")}computeInvoiceNumber(t,e){const r=t[0];if(!Number.isInteger(r)||r<0||r>2)throw new Error("Protocol security level must be 0, 1, or 2");const i=t[1].toLowerCase().trim();if(e.length>800)throw new Error("Key IDs must be 800 characters or less");if(e.length<1)throw new Error("Key IDs must be 1 character or more");if(i.length>400){if(!i.startsWith("specific linkage revelation "))throw new Error("Protocol names must be 400 characters or less");if(i.length>430)throw new Error("Specific linkage revelation protocol names must be 430 characters or less")}if(i.length<5)throw new Error("Protocol names must be 5 characters or more");if(i.includes(" "))throw new Error('Protocol names cannot contain multiple consecutive spaces (" ")');if(!/^[a-z0-9 ]+$/g.test(i))throw new Error("Protocol names can only contain letters, numbers and spaces");if(i.endsWith(" protocol"))throw new Error('No need to end your protocol name with " protocol"');return`${r}-${i}-${e}`}}class _r{keyDeriver;cache;maxCacheSize;constructor(t,e){this.keyDeriver=new xr(t),this.cache=new Map,this.maxCacheSize=e?.maxCacheSize||1e3}derivePublicKey(t,e,r,i=!1){const n=this.generateCacheKey("derivePublicKey",t,e,r,i);if(this.cache.has(n))return this.cacheGet(n);{const s=this.keyDeriver.derivePublicKey(t,e,r,i);return this.cacheSet(n,s),s}}derivePrivateKey(t,e,r){const i=this.generateCacheKey("derivePrivateKey",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.derivePrivateKey(t,e,r);return this.cacheSet(i,n),n}}deriveSymmetricKey(t,e,r){const i=this.generateCacheKey("deriveSymmetricKey",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.deriveSymmetricKey(t,e,r);return this.cacheSet(i,n),n}}revealCounterpartySecret(t){const e=this.generateCacheKey("revealCounterpartySecret",t);if(this.cache.has(e))return this.cacheGet(e);{const r=this.keyDeriver.revealCounterpartySecret(t);return this.cacheSet(e,r),r}}revealSpecificSecret(t,e,r){const i=this.generateCacheKey("revealSpecificSecret",t,e,r);if(this.cache.has(i))return this.cacheGet(i);{const n=this.keyDeriver.revealSpecificSecret(t,e,r);return this.cacheSet(i,n),n}}generateCacheKey(t,...e){return`${t}|${e.map((t=>this.serializeArgument(t))).join("|")}`}serializeArgument(t){return t instanceof Yt||t instanceof ie?t.toString():Array.isArray(t)?t.map((t=>this.serializeArgument(t))).join(","):"object"==typeof t&&null!==t?JSON.stringify(t):String(t)}cacheGet(t){const e=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,e),e}cacheSet(t,e){if(this.cache.size>=this.maxCacheSize){const t=this.cache.keys().next().value;this.cache.delete(t)}this.cache.set(t,e)}}class Mr extends Error{code;isError=!0;constructor(t,e=1,r){super(t),this.code=e,this.name=this.constructor.name,r?this.stack=r:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}!function(t){t[t.unknownError=1]="unknownError",t[t.unsupportedAction=2]="unsupportedAction",t[t.invalidHmac=3]="invalidHmac",t[t.invalidSignature=4]="invalidSignature"}(Ar||(Ar={}));const Tr=Ar;class Fr{keyDeriver;privilegedError="ProtoWallet is a single-keyring wallet, operating without context about whether its configured keyring is privileged.";constructor(t,e=xr){this.keyDeriver=new e(t)}async createAction(t,e){throw new Mr("ProtoWallet does not support creating transactions.",Tr.unsupportedAction)}async signAction(t,e){throw new Mr("ProtoWallet does not support creating transactions.",Tr.unsupportedAction)}async abortAction(t,e){throw new Mr("ProtoWallet does not support aborting transactions.",Tr.unsupportedAction)}async listActions(t,e){throw new Mr("ProtoWallet does not support retrieving transactions.",Tr.unsupportedAction)}async internalizeAction(t,e){throw new Mr("ProtoWallet does not support internalizing transactions.",Tr.unsupportedAction)}async listOutputs(t,e){throw new Mr("ProtoWallet does not support retrieving outputs.",Tr.unsupportedAction)}async relinquishOutput(t,e){throw new Mr("ProtoWallet does not support deleting outputs.",Tr.unsupportedAction)}async getPublicKey(t,e){if(t.privileged)throw new Mr(this.privilegedError);return t.identityKey?{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}:{publicKey:this.keyDeriver.derivePublicKey(t.protocolID,t.keyID,t.counterparty||"self",t.forSelf).toString()}}async revealCounterpartyKeyLinkage(t,e){if(t.privileged)throw new Mr(this.privilegedError);const{publicKey:r}=await this.getPublicKey({identityKey:!0}),i=this.keyDeriver.revealCounterpartySecret(t.counterparty),n=(new Ne).generateProof(this.keyDeriver.rootKey,this.keyDeriver.rootKey.toPublicKey(),Yt.fromString(t.counterparty),Kt.fromDER(i)),s=[...n.R.encode(!0),...n.SPrime.encode(!0),...n.z.toArray()],a=(new Date).toISOString(),{ciphertext:o}=await this.encrypt({plaintext:i,protocolID:[2,"counterparty linkage revelation"],keyID:a,counterparty:t.verifier}),{ciphertext:c}=await this.encrypt({plaintext:s,protocolID:[2,"counterparty linkage revelation"],keyID:a,counterparty:t.verifier});return{prover:r,verifier:t.verifier,counterparty:t.counterparty,revelationTime:a,encryptedLinkage:o,encryptedLinkageProof:c}}async revealSpecificKeyLinkage(t,e){if(t.privileged)throw new Mr(this.privilegedError);const{publicKey:r}=await this.getPublicKey({identityKey:!0}),i=this.keyDeriver.revealSpecificSecret(t.counterparty,t.protocolID,t.keyID),{ciphertext:n}=await this.encrypt({plaintext:i,protocolID:[2,`specific linkage revelation ${t.protocolID[0]} ${t.protocolID[1]}`],keyID:t.keyID,counterparty:t.verifier}),{ciphertext:s}=await this.encrypt({plaintext:[0],protocolID:[2,`specific linkage revelation ${t.protocolID[0]} ${t.protocolID[1]}`],keyID:t.keyID,counterparty:t.verifier});return{prover:r,verifier:t.verifier,counterparty:t.counterparty,protocolID:t.protocolID,keyID:t.keyID,encryptedLinkage:n,encryptedLinkageProof:s,proofType:0}}async encrypt(t,e){if(t.privileged)throw new Mr(this.privilegedError);return{ciphertext:this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self").encrypt(t.plaintext)}}async decrypt(t,e){if(t.privileged)throw new Mr(this.privilegedError);return{plaintext:this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self").decrypt(t.ciphertext)}}async createHmac(t,e){if(t.privileged)throw new Mr(this.privilegedError);const r=this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self");return{hmac:kt(r.toArray(),t.data)}}async verifyHmac(t,e){if(t.privileged)throw new Mr(this.privilegedError);const r=this.keyDeriver.deriveSymmetricKey(t.protocolID,t.keyID,t.counterparty||"self"),i=kt(r.toArray(),t.data).toString()===t.hmac.toString();if(!i)throw new Mr("HMAC is not valid",Tr.invalidHmac);return{valid:i}}async createSignature(t,e){if(t.privileged)throw new Mr(this.privilegedError);let r=t.hashToDirectlySign;r||(r=gt(t.data));const i=this.keyDeriver.derivePrivateKey(t.protocolID,t.keyID,t.counterparty||"anyone");return{signature:Xt(new c(r),i,!0).toDER()}}async verifySignature(t,e){if(t.privileged)throw new Mr(this.privilegedError);let r=t.hashToDirectlyVerify;r||(r=gt(t.data));const i=this.keyDeriver.derivePublicKey(t.protocolID,t.keyID,t.counterparty||"self",t.forSelf),n=Gt(new c(r),Wt.fromDER(t.signature),i);if(!n)throw new Mr("Signature is not valid",Tr.invalidSignature);return{valid:n}}async acquireCertificate(t,e){throw new Mr("ProtoWallet does not support acquiring certificates.",Tr.unsupportedAction)}async listCertificates(t,e){throw new Mr("ProtoWallet does not support retrieving certificates.",Tr.unsupportedAction)}async proveCertificate(t,e){throw new Mr("ProtoWallet does not support proving certificates.",Tr.unsupportedAction)}async relinquishCertificate(t,e){throw new Mr("ProtoWallet does not support deleting certificates.",Tr.unsupportedAction)}async discoverByIdentityKey(t,e){throw new Mr("ProtoWallet does not support resolving identities.",Tr.unsupportedAction)}async discoverByAttributes(t,e){throw new Mr("ProtoWallet does not support resolving identities.",Tr.unsupportedAction)}async isAuthenticated(t,e){return{authenticated:!0}}async waitForAuthentication(t,e){return{authenticated:!0}}async getHeight(t,e){throw new Mr("ProtoWallet does not support blockchain tracking.",Tr.unsupportedAction)}async getHeaderForHeight(t,e){throw new Mr("ProtoWallet does not support blockchain tracking.",Tr.unsupportedAction)}async getNetwork(t,e){return{network:"mainnet"}}async getVersion(t,e){return{version:"proto-1.0.0"}}}class Vr{CWI;constructor(){if("object"!=typeof window)throw new Error("The window.CWI substrate requires a global window object.");if("object"!=typeof window.CWI)throw new Error("The window.CWI interface does not appear to be bound to the window object.");this.CWI=window.CWI}async createAction(t,e){return this.CWI.createAction(t,e)}async signAction(t,e){return this.CWI.signAction(t,e)}async abortAction(t,e){return this.CWI.abortAction(t,e)}async listActions(t,e){return this.CWI.listActions(t,e)}async internalizeAction(t,e){return this.CWI.internalizeAction(t,e)}async listOutputs(t,e){return this.CWI.listOutputs(t,e)}async relinquishOutput(t,e){return this.CWI.relinquishOutput(t,e)}async getPublicKey(t,e){return this.CWI.getPublicKey(t,e)}async revealCounterpartyKeyLinkage(t,e){return this.CWI.revealCounterpartyKeyLinkage(t,e)}async revealSpecificKeyLinkage(t,e){return this.CWI.revealSpecificKeyLinkage(t,e)}async encrypt(t,e){return this.CWI.encrypt(t,e)}async decrypt(t,e){return this.CWI.decrypt(t,e)}async createHmac(t,e){return this.CWI.createHmac(t,e)}async verifyHmac(t,e){return this.CWI.verifyHmac(t,e)}async createSignature(t,e){return this.CWI.createSignature(t,e)}async verifySignature(t,e){return this.CWI.verifySignature(t,e)}async acquireCertificate(t,e){return this.CWI.acquireCertificate(t,e)}async listCertificates(t,e){return this.CWI.listCertificates(t,e)}async proveCertificate(t,e){return this.CWI.proveCertificate(t,e)}async relinquishCertificate(t,e){return this.CWI.relinquishCertificate(t,e)}async discoverByIdentityKey(t,e){return this.CWI.discoverByIdentityKey(t,e)}async discoverByAttributes(t,e){return this.CWI.discoverByAttributes(t,e)}async isAuthenticated(t,e){return this.CWI.isAuthenticated(t,e)}async waitForAuthentication(t,e){return this.CWI.waitForAuthentication(t,e)}async getHeight(t,e){return this.CWI.getHeight(t,e)}async getHeaderForHeight(t,e){return this.CWI.getHeaderForHeight(t,e)}async getNetwork(t,e){return this.CWI.getNetwork(t,e)}async getVersion(t,e){return this.CWI.getVersion(t,e)}}class Br{domain;constructor(t="*"){if("object"!=typeof window)throw new Error("The XDM substrate requires a global window object.");if("function"!=typeof window.postMessage)throw new Error("The window object does not seem to support postMessage calls.");this.domain=t}async invoke(t,e){return await new Promise(((r,i)=>{const n=Ft(Jt(12)),s=async t=>{if("CWI"===t.data.type&&t.isTrusted&&t.data.id===n&&!t.data.isInvocation)if("function"==typeof window.removeEventListener&&window.removeEventListener("message",s),"error"===t.data.status){const e=new Mr(t.data.description,t.data.code);i(e)}else r(t.data.result)};window.addEventListener("message",s),window.parent.postMessage({type:"CWI",isInvocation:!0,id:n,call:t,args:e},this.domain)}))}async createAction(t){return await this.invoke("createAction",t)}async signAction(t){return await this.invoke("signAction",t)}async abortAction(t){return await this.invoke("abortAction",t)}async listActions(t){return await this.invoke("listActions",t)}async internalizeAction(t){return await this.invoke("internalizeAction",t)}async listOutputs(t){return await this.invoke("listOutputs",t)}async relinquishOutput(t){return await this.invoke("relinquishOutput",t)}async getPublicKey(t){return await this.invoke("getPublicKey",t)}async revealCounterpartyKeyLinkage(t){return await this.invoke("revealCounterpartyKeyLinkage",t)}async revealSpecificKeyLinkage(t){return await this.invoke("revealSpecificKeyLinkage",t)}async encrypt(t){return await this.invoke("encrypt",t)}async decrypt(t){return await this.invoke("decrypt",t)}async createHmac(t){return await this.invoke("createHmac",t)}async verifyHmac(t){return await this.invoke("verifyHmac",t)}async createSignature(t){return await this.invoke("createSignature",t)}async verifySignature(t){return await this.invoke("verifySignature",t)}async acquireCertificate(t){return await this.invoke("acquireCertificate",t)}async listCertificates(t){return await this.invoke("listCertificates",t)}async proveCertificate(t){return await this.invoke("proveCertificate",t)}async relinquishCertificate(t){return await this.invoke("relinquishCertificate",t)}async discoverByIdentityKey(t){return await this.invoke("discoverByIdentityKey",t)}async discoverByAttributes(t){return await this.invoke("discoverByAttributes",t)}async isAuthenticated(t){return await this.invoke("isAuthenticated",t)}async waitForAuthentication(t){return await this.invoke("waitForAuthentication",t)}async getHeight(t){return await this.invoke("getHeight",t)}async getHeaderForHeight(t){return await this.invoke("getHeaderForHeight",t)}async getNetwork(t){return await this.invoke("getNetwork",t)}async getVersion(t){return await this.invoke("getVersion",t)}}class Rr{type;serialNumber;subject;certifier;revocationOutpoint;fields;signature;constructor(t,e,r,i,n,s,a){this.type=t,this.serialNumber=e,this.subject=r,this.certifier=i,this.revocationOutpoint=n,this.fields=s,this.signature=a}toBin(t=!0){const e=new Dt,r=Et(this.type,"base64");e.write(r);const i=Et(this.serialNumber,"base64");e.write(i);const n=Et(this.subject,"hex");e.write(n);const s=Et(this.certifier,"hex");e.write(s);const[a,o]=this.revocationOutpoint.split("."),c=Et(a,"hex");e.write(c),e.writeVarIntNum(Number(o));const h=Object.entries(this.fields);e.writeVarIntNum(h.length);for(const[t,r]of h){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"utf8");e.writeVarIntNum(n.length),e.write(n)}if(t&&this.signature&&this.signature.length>0){const t=Et(this.signature,"hex");e.writeVarIntNum(t.length),e.write(t)}return e.toArray()}static fromBin(t){const e=new Ut(t),r=Ft(e.read(32)),i=Ft(e.read(32)),n=e.read(33),s=Nt(n),a=e.read(33),o=Nt(a),c=e.read(32),h=`${Nt(c)}.${e.readVarIntNum()}`,u=e.readVarIntNum(),d={};for(let t=0;t<u;t++){const t=e.readVarIntNum(),r=e.read(t),i=Mt(r),n=e.readVarIntNum(),s=e.read(n),a=Mt(s);d[i]=a}let l;if(!e.eof()){const t=e.readVarIntNum(),r=e.read(t);l=Nt(r)}return new Rr(r,i,s,o,h,d,l)}async verify(){const t=new Fr("anyone"),e=this.toBin(!1),{valid:r}=await t.verifySignature({signature:Et(this.signature,"hex"),data:e,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`,counterparty:this.certifier});return r}async sign(t){const e=this.toBin(!1),{signature:r}=await t.createSignature({data:e,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`});this.signature=Nt(r)}}var Cr;!function(t){t[t.createAction=1]="createAction",t[t.signAction=2]="signAction",t[t.abortAction=3]="abortAction",t[t.listActions=4]="listActions",t[t.internalizeAction=5]="internalizeAction",t[t.listOutputs=6]="listOutputs",t[t.relinquishOutput=7]="relinquishOutput",t[t.getPublicKey=8]="getPublicKey",t[t.revealCounterpartyKeyLinkage=9]="revealCounterpartyKeyLinkage",t[t.revealSpecificKeyLinkage=10]="revealSpecificKeyLinkage",t[t.encrypt=11]="encrypt",t[t.decrypt=12]="decrypt",t[t.createHmac=13]="createHmac",t[t.verifyHmac=14]="verifyHmac",t[t.createSignature=15]="createSignature",t[t.verifySignature=16]="verifySignature",t[t.acquireCertificate=17]="acquireCertificate",t[t.listCertificates=18]="listCertificates",t[t.proveCertificate=19]="proveCertificate",t[t.relinquishCertificate=20]="relinquishCertificate",t[t.discoverByIdentityKey=21]="discoverByIdentityKey",t[t.discoverByAttributes=22]="discoverByAttributes",t[t.isAuthenticated=23]="isAuthenticated",t[t.waitForAuthentication=24]="waitForAuthentication",t[t.getHeight=25]="getHeight",t[t.getHeaderForHeight=26]="getHeaderForHeight",t[t.getNetwork=27]="getNetwork",t[t.getVersion=28]="getVersion"}(Cr||(Cr={}));const Hr=Cr;class Dr{wire;constructor(t){this.wire=t}async transmit(t,e="",r=[]){const i=new Dt;i.writeUInt8(Hr[t]);const n=Et(e,"utf8");i.writeUInt8(n.length),i.write(n),r.length>0&&i.write(r);const s=i.toArray(),a=await this.wire.transmitToWallet(s),o=new Ut(a),c=o.readUInt8();if(0===c)return o.read();{const t=o.readVarIntNum(),e=o.read(t),r=Mt(e),i=o.readVarIntNum(),n=o.read(i),s=Mt(n);throw new Mr(r,c,s)}}async createAction(t,e){const r=new Dt,i=Et(t.description,"utf8");if(r.writeVarIntNum(i.length),r.write(i),t.inputBEEF?(r.writeVarIntNum(t.inputBEEF.length),r.write(t.inputBEEF)):r.writeVarIntNum(-1),t.inputs){r.writeVarIntNum(t.inputs.length);for(const e of t.inputs){if(r.write(this.encodeOutpoint(e.outpoint)),e.unlockingScript){const t=Et(e.unlockingScript,"hex");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1),r.writeVarIntNum(e.unlockingScriptLength);const t=Et(e.inputDescription,"utf8");r.writeVarIntNum(t.length),r.write(t),"number"==typeof e.sequenceNumber?r.writeVarIntNum(e.sequenceNumber):r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if(t.outputs){r.writeVarIntNum(t.outputs.length);for(const e of t.outputs){const t=Et(e.lockingScript,"hex");r.writeVarIntNum(t.length),r.write(t),r.writeVarIntNum(e.satoshis);const i=Et(e.outputDescription,"utf8");if(r.writeVarIntNum(i.length),r.write(i),e.basket){const t=Et(e.basket,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1);if(e.customInstructions){const t=Et(e.customInstructions,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1);if(e.tags){r.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Et(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if("number"==typeof t.lockTime?r.writeVarIntNum(t.lockTime):r.writeVarIntNum(-1),"number"==typeof t.version?r.writeVarIntNum(t.version):r.writeVarIntNum(-1),t.labels){r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(-1);if(t.options){if(r.writeInt8(1),"boolean"==typeof t.options.signAndProcess?r.writeInt8(t.options.signAndProcess?1:0):r.writeInt8(-1),"boolean"==typeof t.options.acceptDelayedBroadcast?r.writeInt8(t.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"known"===t.options.trustSelf?r.writeInt8(1):r.writeInt8(-1),t.options.knownTxids){r.writeVarIntNum(t.options.knownTxids.length);for(const e of t.options.knownTxids){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);if("boolean"==typeof t.options.returnTXIDOnly?r.writeInt8(t.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof t.options.noSend?r.writeInt8(t.options.noSend?1:0):r.writeInt8(-1),t.options.noSendChange){r.writeVarIntNum(t.options.noSendChange.length);for(const e of t.options.noSendChange)r.write(this.encodeOutpoint(e))}else r.writeVarIntNum(-1);if(t.options.sendWith){r.writeVarIntNum(t.options.sendWith.length);for(const e of t.options.sendWith){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);"boolean"==typeof t.options.randomizeOutputs?r.writeInt8(t.options.randomizeOutputs?1:0):r.writeInt8(-1)}else r.writeInt8(0);const n=await this.transmit("createAction",e,r.toArray()),s=new Ut(n),a={};if(1===s.readInt8()){const t=s.read(32);a.txid=Nt(t)}if(1===s.readInt8()){const t=s.readVarIntNum();a.tx=s.read(t)}const o=s.readVarIntNum();if(o>=0){a.noSendChange=[];for(let t=0;t<o;t++){const t=this.readOutpoint(s);a.noSendChange.push(t)}}const c=s.readVarIntNum();if(c>=0){a.sendWithResults=[];for(let t=0;t<c;t++){const t=s.read(32),e=Nt(t),r=s.readInt8();let i;1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),a.sendWithResults.push({txid:e,status:i})}}if(1===s.readInt8()){const t=s.readVarIntNum(),e=s.read(t),r=s.readVarIntNum(),i=s.read(r);a.signableTransaction={tx:e,reference:Ft(i)}}return a}async signAction(t,e){const r=new Dt,i=Object.keys(t.spends);r.writeVarIntNum(i.length);for(const e of i){r.writeVarIntNum(Number(e));const i=t.spends[Number(e)],n=Et(i.unlockingScript,"hex");r.writeVarIntNum(n.length),r.write(n),"number"==typeof i.sequenceNumber?r.writeVarIntNum(i.sequenceNumber):r.writeVarIntNum(-1)}const n=Et(t.reference,"base64");if(r.writeVarIntNum(n.length),r.write(n),t.options)if(r.writeInt8(1),"boolean"==typeof t.options.acceptDelayedBroadcast?r.writeInt8(t.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"boolean"==typeof t.options.returnTXIDOnly?r.writeInt8(t.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof t.options.noSend?r.writeInt8(t.options.noSend?1:0):r.writeInt8(-1),t.options.sendWith){r.writeVarIntNum(t.options.sendWith.length);for(const e of t.options.sendWith){const t=Et(e,"hex");r.write(t)}}else r.writeVarIntNum(-1);else r.writeInt8(0);const s=await this.transmit("signAction",e,r.toArray()),a=new Ut(s),o={};if(1===a.readInt8()){const t=a.read(32);o.txid=Nt(t)}if(1===a.readInt8()){const t=a.readVarIntNum();o.tx=a.read(t)}const c=a.readVarIntNum();if(c>=0){o.sendWithResults=[];for(let t=0;t<c;t++){const t=a.read(32),e=Nt(t),r=a.readInt8();let i;1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),o.sendWithResults.push({txid:e,status:i})}}return o}async abortAction(t,e){return await this.transmit("abortAction",e,Et(t.reference,"base64")),{aborted:!0}}async listActions(t,e){const r=new Dt;r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}"any"===t.labelQueryMode?r.writeInt8(1):"all"===t.labelQueryMode?r.writeInt8(2):r.writeInt8(-1);const i=[t.includeLabels,t.includeInputs,t.includeInputSourceLockingScripts,t.includeInputUnlockingScripts,t.includeOutputs,t.includeOutputLockingScripts];for(const t of i)"boolean"==typeof t?r.writeInt8(t?1:0):r.writeInt8(-1);"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("listActions",e,r.toArray()),s=new Ut(n),a=s.readVarIntNum(),o=[];for(let t=0;t<a;t++){const t=s.read(32),e=Nt(t),r=s.readVarIntNum(),i=s.readInt8();let n;switch(i){case 1:n="completed";break;case 2:n="unprocessed";break;case 3:n="sending";break;case 4:n="unproven";break;case 5:n="unsigned";break;case 6:n="nosend";break;case 7:n="nonfinal";break;default:throw new Error(`Unknown status code: ${i}`)}const a=1===s.readInt8(),c=s.readVarIntNum(),h=s.read(c),u={txid:e,satoshis:r,status:n,isOutgoing:a,description:Mt(h),version:0,lockTime:0},d=s.readVarIntNum();if(d>=0){u.labels=[];for(let t=0;t<d;t++){const t=s.readVarIntNum(),e=s.read(t);u.labels.push(Mt(e))}}u.version=s.readVarIntNum(),u.lockTime=s.readVarIntNum();const l=s.readVarIntNum();if(l>=0){u.inputs=[];for(let t=0;t<l;t++){const t=this.readOutpoint(s),e=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const t=s.read(r);i=Nt(t)}const n=s.readVarIntNum();let a;if(n>=0){const t=s.read(n);a=Nt(t)}const o=s.readVarIntNum(),c=s.read(o),h=Mt(c),d=s.readVarIntNum();u.inputs.push({sourceOutpoint:t,sourceSatoshis:e,sourceLockingScript:i,unlockingScript:a,inputDescription:h,sequenceNumber:d})}}const f=s.readVarIntNum();if(f>=0){u.outputs=[];for(let t=0;t<f;t++){const t=s.readVarIntNum(),e=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const t=s.read(r);i=Nt(t)}const n=1===s.readInt8(),a=s.readVarIntNum(),o=s.read(a),c=Mt(o),h=s.readVarIntNum();let d;if(h>=0){const t=s.read(h);d=Mt(t)}const l=s.readVarIntNum(),f=[];if(l>=0)for(let t=0;t<l;t++){const t=s.readVarIntNum(),e=s.read(t);f.push(Mt(e))}const p=s.readVarIntNum();let b;if(p>=0){const t=s.read(p);b=Mt(t)}u.outputs.push({outputIndex:t,satoshis:e,lockingScript:i,spendable:n,outputDescription:c,basket:d,tags:f,customInstructions:b})}}o.push(u)}return{totalActions:a,actions:o}}async internalizeAction(t,e){const r=new Dt;r.writeVarIntNum(t.tx.length),r.write(t.tx),r.writeVarIntNum(t.outputs.length);for(const e of t.outputs)if(r.writeVarIntNum(e.outputIndex),"wallet payment"===e.protocol){r.writeUInt8(1),r.write(Et(e.paymentRemittance.senderIdentityKey,"hex"));const t=Et(e.paymentRemittance.derivationPrefix,"base64");r.writeVarIntNum(t.length),r.write(t);const i=Et(e.paymentRemittance.derivationSuffix,"base64");r.writeVarIntNum(i.length),r.write(i)}else{r.writeUInt8(2);const t=Et(e.insertionRemittance.basket,"utf8");r.writeVarIntNum(t.length),r.write(t),e.insertionRemittance.customInstructions;{const t=Et(e.insertionRemittance.customInstructions,"utf8");r.writeVarIntNum(t.length),r.write(t)}if("object"==typeof e.insertionRemittance.tags){r.writeVarIntNum(e.insertionRemittance.tags.length);for(const t of e.insertionRemittance.tags){const e=Et(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(0)}if("object"==typeof t.labels){r.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(-1);const i=Et(t.description);return r.writeVarIntNum(i.length),r.write(i),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("internalizeAction",e,r.toArray()),{accepted:!0}}async listOutputs(t,e){const r=new Dt,i=Et(t.basket,"utf8");if(r.writeVarIntNum(i.length),r.write(i),"object"==typeof t.tags){r.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(0);"all"===t.tagQueryMode?r.writeInt8(1):"any"===t.tagQueryMode?r.writeInt8(2):r.writeInt8(-1),"locking scripts"===t.include?r.writeInt8(1):"entire transactions"===t.include?r.writeInt8(2):r.writeInt8(-1),"boolean"==typeof t.includeCustomInstructions?r.writeInt8(t.includeCustomInstructions?1:0):r.writeInt8(-1),"boolean"==typeof t.includeTags?r.writeInt8(t.includeTags?1:0):r.writeInt8(-1),"boolean"==typeof t.includeLabels?r.writeInt8(t.includeLabels?1:0):r.writeInt8(-1),"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("listOutputs",e,r.toArray()),s=new Ut(n),a=s.readVarIntNum(),o=s.readVarIntNum();let c;o>=0&&(c=s.read(o));const h=[];for(let t=0;t<a;t++){const t={spendable:!0,outpoint:this.readOutpoint(s),satoshis:s.readVarIntNum()},e=s.readVarIntNum();e>=0&&(t.lockingScript=Nt(s.read(e)));const r=s.readVarIntNum();r>=0&&(t.customInstructions=Mt(s.read(r)));const i=s.readVarIntNum();if(-1!==i){const e=[];for(let t=0;t<i;t++){const t=s.readVarIntNum();e.push(Mt(s.read(t)))}t.tags=e}const n=s.readVarIntNum();if(-1!==n){const e=[];for(let t=0;t<n;t++){const t=s.readVarIntNum();e.push(Mt(s.read(t)))}t.labels=e}h.push(t)}return{totalOutputs:a,BEEF:c,outputs:h}}async relinquishOutput(t,e){const r=new Dt,i=Et(t.basket,"utf8");return r.writeVarIntNum(i.length),r.write(i),r.write(this.encodeOutpoint(t.output)),await this.transmit("relinquishOutput",e,r.toArray()),{relinquished:!0}}encodeOutpoint(t){const e=new Dt,[r,i]=t.split(".");return e.write(Et(r,"hex")),e.writeVarIntNum(Number(i)),e.toArray()}readOutpoint(t){return`${Nt(t.read(32))}.${t.readVarIntNum()}`}async getPublicKey(t,e){const r=new Dt;r.writeUInt8(t.identityKey?1:0),t.identityKey?r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)):(r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"boolean"==typeof t.forSelf?r.writeInt8(t.forSelf?1:0):r.writeInt8(-1)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const i=await this.transmit("getPublicKey",e,r.toArray());return{publicKey:Nt(i)}}async revealCounterpartyKeyLinkage(t,e){const r=new Dt;r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)),r.write(Et(t.counterparty,"hex")),r.write(Et(t.verifier,"hex"));const i=await this.transmit("revealCounterpartyKeyLinkage",e,r.toArray()),n=new Ut(i),s=Nt(n.read(33)),a=Nt(n.read(33)),o=Nt(n.read(33)),c=n.readVarIntNum(),h=Mt(n.read(c)),u=n.readVarIntNum(),d=n.read(u),l=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,revelationTime:h,encryptedLinkage:d,encryptedLinkageProof:n.read(l)}}async revealSpecificKeyLinkage(t,e){const r=new Dt;r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.write(Et(t.verifier,"hex"));const i=await this.transmit("revealSpecificKeyLinkage",e,r.toArray()),n=new Ut(i),s=Nt(n.read(33)),a=Nt(n.read(33)),o=Nt(n.read(33)),c=n.readUInt8(),h=n.readVarIntNum(),u=Mt(n.read(h)),d=n.readVarIntNum(),l=Mt(n.read(d)),f=n.readVarIntNum(),p=n.read(f),b=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,protocolID:[c,u],keyID:l,encryptedLinkage:p,encryptedLinkageProof:n.read(b),proofType:n.readUInt8()}}async encrypt(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.plaintext.length),r.write(t.plaintext),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{ciphertext:await this.transmit("encrypt",e,r.toArray())}}async decrypt(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.ciphertext.length),r.write(t.ciphertext),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{plaintext:await this.transmit("decrypt",e,r.toArray())}}async createHmac(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.writeVarIntNum(t.data.length),r.write(t.data),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{hmac:await this.transmit("createHmac",e,r.toArray())}}async verifyHmac(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),r.write(t.hmac),r.writeVarIntNum(t.data.length),r.write(t.data),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("verifyHmac",e,r.toArray()),{valid:!0}}async createSignature(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"object"==typeof t.data?(r.writeUInt8(1),r.writeVarIntNum(t.data.length),r.write(t.data)):(r.writeUInt8(2),r.write(t.hashToDirectlySign)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),{signature:await this.transmit("createSignature",e,r.toArray())}}async verifySignature(t,e){const r=new Dt;return r.write(this.encodeKeyRelatedParams(t.protocolID,t.keyID,t.counterparty,t.privileged,t.privilegedReason)),"boolean"==typeof t.forSelf?r.writeInt8(t.forSelf?1:0):r.writeInt8(-1),r.writeVarIntNum(t.signature.length),r.write(t.signature),"object"==typeof t.data?(r.writeUInt8(1),r.writeVarIntNum(t.data.length),r.write(t.data)):(r.writeUInt8(2),r.write(t.hashToDirectlyVerify)),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1),await this.transmit("verifySignature",e,r.toArray()),{valid:!0}}encodeKeyRelatedParams(t,e,r,i,n){const s=new Dt;s.writeUInt8(t[0]);const a=Et(t[1],"utf8");s.writeVarIntNum(a.length),s.write(a);const o=Et(e,"utf8");return s.writeVarIntNum(o.length),s.write(o),"string"!=typeof r?s.writeUInt8(0):"self"===r?s.writeUInt8(11):"anyone"===r?s.writeUInt8(12):s.write(Et(r,"hex")),s.write(this.encodePrivilegedParams(i,n)),s.toArray()}async acquireCertificate(t,e){const r=new Dt;r.write(Et(t.type,"base64")),r.write(Et(t.certifier,"hex"));const i=Object.entries(t.fields);r.writeVarIntNum(i.length);for(const[t,e]of i){const i=Et(t,"utf8"),n=Et(e,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}if(r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason)),r.writeUInt8("direct"===t.acquisitionProtocol?1:2),"direct"===t.acquisitionProtocol){r.write(Et(t.serialNumber,"base64")),r.write(this.encodeOutpoint(t.revocationOutpoint));const e=Et(t.signature,"hex");r.writeVarIntNum(e.length),r.write(e);const i="certifier"!==t.keyringRevealer?Et(t.keyringRevealer,"hex"):[11];r.write(i);const n=Object.keys(t.keyringForSubject);r.writeVarIntNum(n.length);for(let e=0;e<n.length;e++){const i=Et(n[e],"utf8");r.writeVarIntNum(i.length),r.write(i);const s=Et(t.keyringForSubject[n[e]],"base64");r.writeVarIntNum(s.length),r.write(s)}}else{const e=Et(t.certifierUrl,"utf8");r.writeVarIntNum(e.length),r.write(e)}const n=await this.transmit("acquireCertificate",e,r.toArray()),s=Rr.fromBin(n);return{...s,signature:s.signature}}encodePrivilegedParams(t,e){const r=new Dt;if("boolean"==typeof t?r.writeInt8(t?1:0):r.writeInt8(-1),"string"==typeof e){const t=Et(e,"utf8");r.writeInt8(t.length),r.write(t)}else r.writeInt8(-1);return r.toArray()}async listCertificates(t,e){const r=new Dt;r.writeVarIntNum(t.certifiers.length);for(let e=0;e<t.certifiers.length;e++)r.write(Et(t.certifiers[e],"hex"));r.writeVarIntNum(t.types.length);for(let e=0;e<t.types.length;e++)r.write(Et(t.types[e],"base64"));"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason));const i=await this.transmit("listCertificates",e,r.toArray()),n=new Ut(i),s=n.readVarIntNum(),a=[];for(let t=0;t<s;t++){const t=n.readVarIntNum(),e=n.read(t),r=Rr.fromBin(e);a.push({...r,signature:r.signature})}return{totalCertificates:s,certificates:a}}async proveCertificate(t,e){const r=new Dt,i=Et(t.certificate.type,"base64");r.write(i);const n=Et(t.certificate.subject,"hex");r.write(n);const s=Et(t.certificate.serialNumber,"base64");r.write(s);const a=Et(t.certificate.certifier,"hex");r.write(a);const o=this.encodeOutpoint(t.certificate.revocationOutpoint);r.write(o);const c=Et(t.certificate.signature,"hex");r.writeVarIntNum(c.length),r.write(c);const h=Object.entries(t.certificate.fields);r.writeVarIntNum(h.length);for(const[t,e]of h){const i=Et(t,"utf8"),n=Et(e,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}r.writeVarIntNum(t.fieldsToReveal.length);for(const e of t.fieldsToReveal){const t=Et(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}r.write(Et(t.verifier,"hex")),r.write(this.encodePrivilegedParams(t.privileged,t.privilegedReason));const u=await this.transmit("proveCertificate",e,r.toArray()),d=new Ut(u),l=d.readVarIntNum(),f={};for(let t=0;t<l;t++){const t=d.readVarIntNum(),e=Mt(d.read(t)),r=d.readVarIntNum();f[e]=Ft(d.read(r))}return{keyringForVerifier:f}}async relinquishCertificate(t,e){const r=new Dt,i=Et(t.type,"base64");r.write(i);const n=Et(t.serialNumber,"base64");r.write(n);const s=Et(t.certifier,"hex");return r.write(s),await this.transmit("relinquishCertificate",e,r.toArray()),{relinquished:!0}}parseDiscoveryResult(t){const e=new Ut(t),r=e.readVarIntNum(),i=[];for(let t=0;t<r;t++){const t=e.readVarIntNum(),r=e.read(t),n=Rr.fromBin(r),s=e.readVarIntNum(),a=Mt(e.read(s)),o=e.readVarIntNum(),c=Mt(e.read(o)),h=e.readVarIntNum(),u=Mt(e.read(h)),d=e.readUInt8(),l={},f=e.readVarIntNum();for(let t=0;t<f;t++){const t=e.readVarIntNum(),r=Mt(e.read(t)),i=e.readVarIntNum();l[r]=e.read(i)}const p={},b=e.readVarIntNum();for(let t=0;t<b;t++){const t=e.readVarIntNum(),r=Mt(e.read(t)),i=e.readVarIntNum();p[r]=Mt(e.read(i))}i.push({...n,signature:n.signature,certifierInfo:{iconUrl:c,name:a,description:u,trust:d},publiclyRevealedKeyring:l,decryptedFields:p})}return{totalCertificates:r,certificates:i}}async discoverByIdentityKey(t,e){const r=new Dt;r.write(Et(t.identityKey,"hex")),"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const i=await this.transmit("discoverByIdentityKey",e,r.toArray());return this.parseDiscoveryResult(i)}async discoverByAttributes(t,e){const r=new Dt,i=Object.keys(t.attributes);r.writeVarIntNum(i.length);for(let e=0;e<i.length;e++)r.writeVarIntNum(i[e].length),r.write(Et(i[e],"utf8")),r.writeVarIntNum(t.attributes[i[e]].length),r.write(Et(t.attributes[i[e]],"utf8"));"number"==typeof t.limit?r.writeVarIntNum(t.limit):r.writeVarIntNum(-1),"number"==typeof t.offset?r.writeVarIntNum(t.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof t.seekPermission?t.seekPermission?1:0:-1);const n=await this.transmit("discoverByAttributes",e,r.toArray());return this.parseDiscoveryResult(n)}async isAuthenticated(t,e){return{authenticated:!!(await this.transmit("isAuthenticated",e))[0]}}async waitForAuthentication(t,e){return await this.transmit("waitForAuthentication",e),{authenticated:!0}}async getHeight(t,e){const r=await this.transmit("getHeight",e);return{height:new Ut(r).readVarIntNum()}}async getHeaderForHeight(t,e){const r=new Dt;r.writeVarIntNum(t.height);const i=await this.transmit("getHeaderForHeight",e,r.toArray());return{header:Nt(i)}}async getNetwork(t,e){return{network:0===(await this.transmit("getNetwork",e))[0]?"mainnet":"testnet"}}async getVersion(t,e){const r=await this.transmit("getVersion",e);return{version:Mt(r)}}}class Ur{baseUrl;httpClient;originator;constructor(t,e="http://localhost:3301",r=fetch){this.baseUrl=e,this.httpClient=r,this.originator=t}async transmitToWallet(t){const e=new Ut(t),r=e.readUInt8(),i=Hr[r];if(!i)throw new Error(`Invalid call code: ${r}`);const n=e.readUInt8();let s;if(n>0){const t=e.read(n);s=Mt(t)}const a=e.read(),o=await fetch(`${this.baseUrl}/${i}`,{method:"POST",headers:{"Content-Type":"application/octet-stream",Origin:s},body:new Uint8Array(a)}),c=await o.arrayBuffer();return Array.from(new Uint8Array(c))}}class Lr{baseUrl;httpClient;originator;api;constructor(t,e="http://localhost:3321",r=fetch){this.baseUrl=e,this.originator=t,this.httpClient=r,this.api=async(t,e)=>{try{return await(await r(`${this.baseUrl}/${t}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Originator:this.originator},body:JSON.stringify(e)})).json()}catch(r){throw console.log({HTTPWalletJSON:{call:t,args:e,error:r}}),r}}}async createAction(t){return await this.api("createAction",t)}async signAction(t){return await this.api("signAction",t)}async abortAction(t){return await this.api("abortAction",t)}async listActions(t){return await this.api("listActions",t)}async internalizeAction(t){return await this.api("internalizeAction",t)}async listOutputs(t){return await this.api("listOutputs",t)}async relinquishOutput(t){return await this.api("relinquishOutput",t)}async getPublicKey(t){return await this.api("getPublicKey",t)}async revealCounterpartyKeyLinkage(t){return await this.api("revealCounterpartyKeyLinkage",t)}async revealSpecificKeyLinkage(t){return await this.api("revealSpecificKeyLinkage",t)}async encrypt(t){return await this.api("encrypt",t)}async decrypt(t){return await this.api("decrypt",t)}async createHmac(t){return await this.api("createHmac",t)}async verifyHmac(t){return await this.api("verifyHmac",t)}async createSignature(t){return await this.api("createSignature",t)}async verifySignature(t){return await this.api("verifySignature",t)}async acquireCertificate(t){return await this.api("acquireCertificate",t)}async listCertificates(t){return await this.api("listCertificates",t)}async proveCertificate(t){return await this.api("proveCertificate",t)}async relinquishCertificate(t){return await this.api("relinquishCertificate",t)}async discoverByIdentityKey(t){return await this.api("discoverByIdentityKey",t)}async discoverByAttributes(t){return await this.api("discoverByAttributes",t)}async isAuthenticated(t){return await this.api("isAuthenticated",t)}async waitForAuthentication(t){return await this.api("waitForAuthentication",t)}async getHeight(t){return await this.api("getHeight",t)}async getHeaderForHeight(t){return await this.api("getHeaderForHeight",t)}async getNetwork(t){return await this.api("getNetwork",t)}async getVersion(t){return await this.api("getVersion",t)}}class Kr{substrate;originator;constructor(t="auto",e){"Cicada"===t&&(t=new Dr(new Ur(e))),"window.CWI"===t&&(t=new Vr),"XDM"===t&&(t=new Br),"json-api"===t&&(t=new Lr(e)),this.substrate=t,this.originator=e}async connectToSubstrate(){if("object"==typeof this.substrate)return;let t;const e=async e=>{let r;if(r="number"==typeof e?await Promise.race([t.getVersion({}),new Promise(((t,r)=>setTimeout((()=>r(new Error("Timed out."))),e)))]):await t.getVersion({}),"object"!=typeof r||"string"!=typeof r.version)throw new Error("Failed to use substrate.")};try{t=new Vr,await e(),this.substrate=t}catch(r){try{t=new Br,await e(200),this.substrate=t}catch(r){try{t=new Dr(new Ur(this.originator)),await e(),this.substrate=t}catch(r){try{t=new Lr(this.originator),await e(),this.substrate=t}catch(t){throw new Error("No wallet available over any communication substrate. Install a BSV wallet today!")}}}}}async createAction(t){return await this.connectToSubstrate(),await this.substrate.createAction(t,this.originator)}async signAction(t){return await this.connectToSubstrate(),await this.substrate.signAction(t,this.originator)}async abortAction(t){return await this.connectToSubstrate(),await this.substrate.abortAction(t,this.originator)}async listActions(t){return await this.connectToSubstrate(),await this.substrate.listActions(t,this.originator)}async internalizeAction(t){return await this.connectToSubstrate(),await this.substrate.internalizeAction(t,this.originator)}async listOutputs(t){return await this.connectToSubstrate(),await this.substrate.listOutputs(t,this.originator)}async relinquishOutput(t){return await this.connectToSubstrate(),await this.substrate.relinquishOutput(t,this.originator)}async getPublicKey(t){return await this.connectToSubstrate(),await this.substrate.getPublicKey(t,this.originator)}async revealCounterpartyKeyLinkage(t){return await this.connectToSubstrate(),await this.substrate.revealCounterpartyKeyLinkage(t,this.originator)}async revealSpecificKeyLinkage(t){return await this.connectToSubstrate(),await this.substrate.revealSpecificKeyLinkage(t,this.originator)}async encrypt(t){return await this.connectToSubstrate(),await this.substrate.encrypt(t,this.originator)}async decrypt(t){return await this.substrate.decrypt(t,this.originator)}async createHmac(t){return await this.connectToSubstrate(),await this.substrate.createHmac(t,this.originator)}async verifyHmac(t){return await this.connectToSubstrate(),await this.substrate.verifyHmac(t,this.originator)}async createSignature(t){return await this.connectToSubstrate(),await this.substrate.createSignature(t,this.originator)}async verifySignature(t){return await this.connectToSubstrate(),await this.substrate.verifySignature(t,this.originator)}async acquireCertificate(t){return await this.connectToSubstrate(),await this.substrate.acquireCertificate(t,this.originator)}async listCertificates(t){return await this.connectToSubstrate(),await this.substrate.listCertificates(t,this.originator)}async proveCertificate(t){return await this.connectToSubstrate(),await this.substrate.proveCertificate(t,this.originator)}async relinquishCertificate(t){return await this.connectToSubstrate(),await this.substrate.relinquishCertificate(t,this.originator)}async discoverByIdentityKey(t){return await this.connectToSubstrate(),await this.substrate.discoverByIdentityKey(t,this.originator)}async discoverByAttributes(t){return await this.connectToSubstrate(),await this.substrate.discoverByAttributes(t,this.originator)}async isAuthenticated(t={}){return await this.connectToSubstrate(),await this.substrate.isAuthenticated(t,this.originator)}async waitForAuthentication(t={}){return await this.connectToSubstrate(),await this.substrate.waitForAuthentication(t,this.originator)}async getHeight(t={}){return await this.connectToSubstrate(),await this.substrate.getHeight(t,this.originator)}async getHeaderForHeight(t){return await this.connectToSubstrate(),await this.substrate.getHeaderForHeight(t,this.originator)}async getNetwork(t={}){return await this.connectToSubstrate(),await this.substrate.getNetwork(t,this.originator)}async getVersion(t={}){return await this.connectToSubstrate(),await this.substrate.getVersion(t,this.originator)}}class qr{wallet;constructor(t){this.wallet=t}decodeOutpoint(t){const e=t.read(32);return`${Nt(e)}.${t.readVarIntNum()}`}encodeOutpoint(t){const e=new Dt,[r,i]=t.split(".");return e.write(Et(r,"hex")),e.writeVarIntNum(Number(i)),e.toArray()}async transmitToWallet(t){const e=new Ut(t);try{const t=e.readUInt8(),r=Hr[t];if(!r)throw new Error(`Invalid call code: ${t}`);const i=e.readUInt8(),n=e.read(i),s=Mt(n),a=e;switch(r){case"createAction":const t={},e=a.readVarIntNum(),i=a.read(e);t.description=Mt(i);const n=a.readVarIntNum();t.inputBEEF=n>=0?a.read(n):void 0;const o=a.readVarIntNum();if(o>=0){t.inputs=[];for(let e=0;e<o;e++){const e={};e.outpoint=this.decodeOutpoint(a);const r=a.readVarIntNum();if(r>=0){const t=a.read(r);e.unlockingScript=Nt(t)}else{e.unlockingScript=void 0;const t=a.readVarIntNum();e.unlockingScriptLength=t}const i=a.readVarIntNum(),n=a.read(i);e.inputDescription=Mt(n);const s=a.readVarIntNum();e.sequenceNumber=s>=0?s:void 0,t.inputs.push(e)}}else t.inputs=void 0;const c=a.readVarIntNum();if(c>=0){t.outputs=[];for(let e=0;e<c;e++){const e={},r=a.readVarIntNum(),i=a.read(r);e.lockingScript=Nt(i),e.satoshis=a.readVarIntNum();const n=a.readVarIntNum(),s=a.read(n);e.outputDescription=Mt(s);const o=a.readVarIntNum();if(o>=0){const t=a.read(o);e.basket=Mt(t)}else e.basket=void 0;const c=a.readVarIntNum();if(c>=0){const t=a.read(c);e.customInstructions=Mt(t)}else e.customInstructions=void 0;const h=a.readVarIntNum();if(h>=0){e.tags=[];for(let t=0;t<h;t++){const t=a.readVarIntNum(),r=a.read(t),i=Mt(r);e.tags.push(i)}}else e.tags=void 0;t.outputs.push(e)}}else t.outputs=void 0;const h=a.readVarIntNum();t.lockTime=h>=0?h:void 0;const u=a.readVarIntNum();t.version=u>=0?u:void 0;const d=a.readVarIntNum();if(d>=0){t.labels=[];for(let e=0;e<d;e++){const e=a.readVarIntNum(),r=a.read(e),i=Mt(r);t.labels.push(i)}}else t.labels=void 0;if(1===a.readInt8()){t.options={};const e=a.readInt8();t.options.signAndProcess=-1===e?void 0:1===e;const r=a.readInt8();t.options.acceptDelayedBroadcast=-1===r?void 0:1===r;const i=a.readInt8();-1===i?t.options.trustSelf=void 0:1===i&&(t.options.trustSelf="known");const n=a.readVarIntNum();if(n>=0){t.options.knownTxids=[];for(let e=0;e<n;e++){const e=a.read(32),r=Nt(e);t.options.knownTxids.push(r)}}else t.options.knownTxids=void 0;const s=a.readInt8();t.options.returnTXIDOnly=-1===s?void 0:1===s;const o=a.readInt8();t.options.noSend=-1===o?void 0:1===o;const c=a.readVarIntNum();if(c>=0){t.options.noSendChange=[];for(let e=0;e<c;e++){const e=this.decodeOutpoint(a);t.options.noSendChange.push(e)}}else t.options.noSendChange=void 0;const h=a.readVarIntNum();if(h>=0){t.options.sendWith=[];for(let e=0;e<h;e++){const e=a.read(32),r=Nt(e);t.options.sendWith.push(r)}}else t.options.sendWith=void 0;const u=a.readInt8();t.options.randomizeOutputs=-1===u?void 0:1===u}else t.options=void 0;const l=await this.wallet.createAction(t,s),f=new Dt;if(l.txid?(f.writeInt8(1),f.write(Et(l.txid,"hex"))):f.writeInt8(0),l.tx?(f.writeInt8(1),f.writeVarIntNum(l.tx.length),f.write(l.tx)):f.writeInt8(0),l.noSendChange){f.writeVarIntNum(l.noSendChange.length);for(const t of l.noSendChange)f.write(this.encodeOutpoint(t))}else f.writeVarIntNum(-1);if(l.sendWithResults){f.writeVarIntNum(l.sendWithResults.length);for(const t of l.sendWithResults){let e;f.write(Et(t.txid,"hex")),"unproven"===t.status?e=1:"sending"===t.status?e=2:"failed"===t.status&&(e=3),f.writeInt8(e)}}else f.writeVarIntNum(-1);if(l.signableTransaction){f.writeInt8(1),f.writeVarIntNum(l.signableTransaction.tx.length),f.write(l.signableTransaction.tx);const t=Et(l.signableTransaction.reference,"base64");f.writeVarIntNum(t.length),f.write(t)}else f.writeInt8(0);const p=new Dt;return p.writeUInt8(0),p.write(f.toArray()),p.toArray();case"signAction":{const t={},e=a.readVarIntNum();t.spends={};for(let r=0;r<e;r++){const e=a.readVarIntNum(),r={},i=a.readVarIntNum(),n=a.read(i);r.unlockingScript=Nt(n);const s=a.readVarIntNum();r.sequenceNumber=s>=0?s:void 0,t.spends[e]=r}const r=a.readVarIntNum(),i=a.read(r);if(t.reference=Ft(i),1===a.readInt8()){t.options={};const e=a.readInt8();t.options.acceptDelayedBroadcast=-1===e?void 0:1===e;const r=a.readInt8();t.options.returnTXIDOnly=-1===r?void 0:1===r;const i=a.readInt8();t.options.noSend=-1===i?void 0:1===i;const n=a.readVarIntNum();if(n>=0){t.options.sendWith=[];for(let e=0;e<n;e++){const e=a.read(32),r=Nt(e);t.options.sendWith.push(r)}}else t.options.sendWith=void 0}else t.options=void 0;const n=await this.wallet.signAction(t,s),o=new Dt;if(n.txid?(o.writeInt8(1),o.write(Et(n.txid,"hex"))):o.writeInt8(0),n.tx?(o.writeInt8(1),o.writeVarIntNum(n.tx.length),o.write(n.tx)):o.writeInt8(0),n.sendWithResults){o.writeVarIntNum(n.sendWithResults.length);for(const t of n.sendWithResults){let e;o.write(Et(t.txid,"hex")),"unproven"===t.status?e=1:"sending"===t.status?e=2:"failed"===t.status&&(e=3),o.writeInt8(e)}}else o.writeVarIntNum(-1);const c=new Dt;return c.writeUInt8(0),c.write(o.toArray()),c.toArray()}case"abortAction":{const t=Ft(a.read());await this.wallet.abortAction({reference:t},s);const e=new Dt;return e.writeUInt8(0),e.toArray()}case"listActions":{const t={},e=a.readVarIntNum();t.labels=[];for(let r=0;r<e;r++){const e=a.readVarIntNum(),r=a.read(e);t.labels.push(Mt(r))}const r=a.readInt8();-1===r?t.labelQueryMode=void 0:1===r?t.labelQueryMode="any":2===r&&(t.labelQueryMode="all");const i=["includeLabels","includeInputs","includeInputSourceLockingScripts","includeInputUnlockingScripts","includeOutputs","includeOutputLockingScripts"];for(const e of i){const r=a.readInt8();t[e]=-1===r?void 0:1===r}const n=a.readVarIntNum();t.limit=n>=0?n:void 0;const o=a.readVarIntNum();t.offset=o>=0?o:void 0;const c=a.readInt8();t.seekPermission=c>=0?1===c:void 0;const h=await this.wallet.listActions(t,s),u=new Dt;u.writeVarIntNum(h.totalActions);for(const t of h.actions){let e;switch(u.write(Et(t.txid,"hex")),u.writeVarIntNum(t.satoshis),t.status){case"completed":e=1;break;case"unprocessed":e=2;break;case"sending":e=3;break;case"unproven":e=4;break;case"unsigned":e=5;break;case"nosend":e=6;break;case"nonfinal":e=7;break;default:e=-1}u.writeInt8(e),u.writeInt8(t.isOutgoing?1:0);const r=Et(t.description,"utf8");if(u.writeVarIntNum(r.length),u.write(r),void 0!==t.labels){u.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");u.writeVarIntNum(t.length),u.write(t)}}else u.writeVarIntNum(-1);if(u.writeVarIntNum(t.version),u.writeVarIntNum(t.lockTime),void 0!==t.inputs){u.writeVarIntNum(t.inputs.length);for(const e of t.inputs){if(u.write(this.encodeOutpoint(e.sourceOutpoint)),u.writeVarIntNum(e.sourceSatoshis),void 0!==e.sourceLockingScript){const t=Et(e.sourceLockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);if(void 0!==e.unlockingScript){const t=Et(e.unlockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);const t=Et(e.inputDescription,"utf8");u.writeVarIntNum(t.length),u.write(t),u.writeVarIntNum(e.sequenceNumber)}}else u.writeVarIntNum(-1);if(void 0!==t.outputs){u.writeVarIntNum(t.outputs.length);for(const e of t.outputs){if(u.writeVarIntNum(e.outputIndex),u.writeVarIntNum(e.satoshis),void 0!==e.lockingScript){const t=Et(e.lockingScript,"hex");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);u.writeInt8(e.spendable?1:0);const t=Et(e.outputDescription,"utf8");if(u.writeVarIntNum(t.length),u.write(t),void 0!==e.basket){const t=Et(e.basket,"utf8");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1);if(void 0!==e.tags){u.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Et(t,"utf8");u.writeVarIntNum(e.length),u.write(e)}}else u.writeVarIntNum(-1);if(void 0!==e.customInstructions){const t=Et(e.customInstructions,"utf8");u.writeVarIntNum(t.length),u.write(t)}else u.writeVarIntNum(-1)}}else u.writeVarIntNum(-1)}const d=new Dt;return d.writeUInt8(0),d.write(u.toArray()),d.toArray()}case"internalizeAction":{const t={},e=a.readVarIntNum();t.tx=a.read(e);const r=a.readVarIntNum();t.outputs=[];for(let e=0;e<r;e++){const e={};e.outputIndex=a.readVarIntNum();const r=a.readUInt8();if(1===r){e.protocol="wallet payment",e.paymentRemittance={};const t=a.read(33);e.paymentRemittance.senderIdentityKey=Nt(t);const r=a.readVarIntNum(),i=a.read(r);e.paymentRemittance.derivationPrefix=Ft(i);const n=a.readVarIntNum(),s=a.read(n);e.paymentRemittance.derivationSuffix=Ft(s)}else if(2===r){e.protocol="basket insertion",e.insertionRemittance={};const t=a.readVarIntNum(),r=a.read(t);e.insertionRemittance.basket=Mt(r);const i=a.readVarIntNum();if(i>=0){const t=a.read(i);e.insertionRemittance.customInstructions=Mt(t)}const n=a.readVarIntNum();if(n>0){e.insertionRemittance.tags=[];for(let t=0;t<n;t++){const t=a.readVarIntNum(),r=a.read(t);e.insertionRemittance.tags.push(Mt(r))}}else e.insertionRemittance.tags=[]}t.outputs.push(e)}const i=a.readVarIntNum();if(i>=0){t.labels=[];for(let e=0;e<i;e++){const e=a.readVarIntNum();t.labels.push(Mt(a.read(e)))}}const n=a.readVarIntNum();t.description=Mt(a.read(n));const o=a.readInt8();t.seekPermission=o>=0?1===o:void 0,await this.wallet.internalizeAction(t,s);const c=new Dt;return c.writeUInt8(0),c.toArray()}case"listOutputs":{const t={},e=a.readVarIntNum(),r=a.read(e);t.basket=Mt(r);const i=a.readVarIntNum();if(i>0){t.tags=[];for(let e=0;e<i;e++){const e=a.readVarIntNum(),r=a.read(e);t.tags.push(Mt(r))}}else t.tags=void 0;const n=a.readInt8();t.tagQueryMode=1===n?"all":2===n?"any":void 0;const o=a.readInt8();t.include=1===o?"locking scripts":2===o?"entire transactions":void 0;const c=a.readInt8();t.includeCustomInstructions=-1===c?void 0:1===c;const h=a.readInt8();t.includeTags=-1===h?void 0:1===h;const u=a.readInt8();t.includeLabels=-1===u?void 0:1===u;const d=a.readVarIntNum();t.limit=d>=0?d:void 0;const l=a.readVarIntNum();t.offset=l>=0?l:void 0;const f=a.readInt8();t.seekPermission=f>=0?1===f:void 0;const p=await this.wallet.listOutputs(t,s),b=new Dt;b.writeVarIntNum(p.totalOutputs),p.BEEF?(b.writeVarIntNum(p.BEEF.length),b.write(p.BEEF)):b.writeVarIntNum(-1);for(const t of p.outputs){if(b.write(this.encodeOutpoint(t.outpoint)),b.writeVarIntNum(t.satoshis),void 0!==t.lockingScript){const e=Et(t.lockingScript,"hex");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1);if(void 0!==t.customInstructions){const e=Et(t.customInstructions,"utf8");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1);if(void 0!==t.tags){b.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Et(e,"utf8");b.writeVarIntNum(t.length),b.write(t)}}else b.writeVarIntNum(-1);if(void 0!==t.labels){b.writeVarIntNum(t.labels.length);for(const e of t.labels){const t=Et(e,"utf8");b.writeVarIntNum(t.length),b.write(t)}}else b.writeVarIntNum(-1)}const m=new Dt;return m.writeUInt8(0),m.write(b.toArray()),m.toArray()}case"relinquishOutput":{const t={},e=a.readVarIntNum(),r=a.read(e);t.basket=Mt(r),t.output=this.decodeOutpoint(a),await this.wallet.relinquishOutput(t,s);const i=new Dt;return i.writeUInt8(0),i.toArray()}case"getPublicKey":{const t={},e=a.readUInt8();if(t.identityKey=1===e,t.identityKey){const e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1!==r){const e=a.read(r);t.privilegedReason=Mt(e)}else t.privilegedReason=void 0}else{t.protocolID=this.decodeProtocolID(a),t.keyID=this.decodeString(a),t.counterparty=this.decodeCounterparty(a);const e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1!==r){const e=a.read(r);t.privilegedReason=Mt(e)}else t.privilegedReason=void 0;const i=a.readInt8();t.forSelf=-1===i?void 0:1===i}const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.getPublicKey(t,s),n=new Dt;n.writeUInt8(0);const o=Et(i.publicKey,"hex");return n.write(o),n.toArray()}case"encrypt":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.plaintext=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.encrypt(t,s),n=new Dt;return n.writeUInt8(0),n.write(i.ciphertext),n.toArray()}case"decrypt":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.ciphertext=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.decrypt(t,s),n=new Dt;return n.writeUInt8(0),n.write(i.plaintext),n.toArray()}case"createHmac":{const t=this.decodeKeyRelatedParams(a),e=a.readVarIntNum();t.data=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createHmac(t,s),n=new Dt;return n.writeUInt8(0),n.write(i.hmac),n.toArray()}case"verifyHmac":{const t=this.decodeKeyRelatedParams(a);t.hmac=a.read(32);const e=a.readVarIntNum();t.data=a.read(e);const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0,await this.wallet.verifyHmac(t,s);const i=new Dt;return i.writeUInt8(0),i.toArray()}case"createSignature":{const t=this.decodeKeyRelatedParams(a),e=a.readUInt8();if(1===e){const e=a.readVarIntNum();t.data=a.read(e)}else 2===e&&(t.hashToDirectlySign=a.read(32));const r=a.readInt8();t.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createSignature(t,s),n=new Dt;return n.writeUInt8(0),n.write(i.signature),n.toArray()}case"verifySignature":{const t=this.decodeKeyRelatedParams(a),e=a.readInt8();t.forSelf=-1===e?void 0:1===e;const r=a.readVarIntNum();t.signature=a.read(r);const i=a.readUInt8();if(1===i){const e=a.readVarIntNum();t.data=a.read(e)}else 2===i&&(t.hashToDirectlyVerify=a.read(32));const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0,await this.wallet.verifySignature(t,s);const o=new Dt;return o.writeUInt8(0),o.toArray()}case"isAuthenticated":{const t=await this.wallet.isAuthenticated({},s),e=new Dt;return e.writeUInt8(0),e.writeUInt8(t.authenticated?1:0),e.toArray()}case"waitForAuthentication":{await this.wallet.waitForAuthentication({},s);const t=new Dt;return t.writeUInt8(0),t.toArray()}case"getHeight":{const t=await this.wallet.getHeight({},s),e=new Dt;return e.writeUInt8(0),e.writeVarIntNum(t.height),e.toArray()}case"getHeaderForHeight":{const t={};t.height=a.readVarIntNum();const e=await this.wallet.getHeaderForHeight(t,s),r=new Dt;r.writeUInt8(0);const i=Et(e.header,"hex");return r.write(i),r.toArray()}case"getNetwork":{const t=await this.wallet.getNetwork({},s),e=new Dt;return e.writeUInt8(0),e.writeUInt8("mainnet"===t.network?0:1),e.toArray()}case"getVersion":{const t=await this.wallet.getVersion({},s),e=new Dt;e.writeUInt8(0);const r=Et(t.version,"utf8");return e.write(r),e.toArray()}case"revealCounterpartyKeyLinkage":{const t={},e=a.readInt8();t.privileged=-1===e?void 0:1===e;const r=a.readInt8();if(-1===r)t.privilegedReason=void 0;else{const e=a.read(r);t.privilegedReason=Mt(e)}const i=a.read(33);t.counterparty=Nt(i);const n=a.read(33);t.verifier=Nt(n);const o=await this.wallet.revealCounterpartyKeyLinkage(t,s),c=new Dt;c.write(Et(o.prover,"hex")),c.write(Et(o.verifier,"hex")),c.write(Et(o.counterparty,"hex"));const h=Et(o.revelationTime,"utf8");c.writeVarIntNum(h.length),c.write(h),c.writeVarIntNum(o.encryptedLinkage.length),c.write(o.encryptedLinkage),c.writeVarIntNum(o.encryptedLinkageProof.length),c.write(o.encryptedLinkageProof);const u=new Dt;return u.writeUInt8(0),u.write(c.toArray()),u.toArray()}case"revealSpecificKeyLinkage":{const t=this.decodeKeyRelatedParams(a),e=a.read(33);t.verifier=Nt(e);const r=await this.wallet.revealSpecificKeyLinkage(t,s),i=new Dt;i.write(Et(r.prover,"hex")),i.write(Et(r.verifier,"hex")),i.write(Et(r.counterparty,"hex")),i.writeUInt8(r.protocolID[0]);const n=Et(r.protocolID[1],"utf8");i.writeVarIntNum(n.length),i.write(n);const o=Et(r.keyID,"utf8");i.writeVarIntNum(o.length),i.write(o),i.writeVarIntNum(r.encryptedLinkage.length),i.write(r.encryptedLinkage),i.writeVarIntNum(r.encryptedLinkageProof.length),i.write(r.encryptedLinkageProof),i.writeUInt8(r.proofType);const c=new Dt;return c.writeUInt8(0),c.write(i.toArray()),c.toArray()}case"acquireCertificate":{const t={},e=a.read(32);t.type=Ft(e);const r=a.read(33);t.certifier=Nt(r);const i=a.readVarIntNum();t.fields={};for(let e=0;e<i;e++){const e=a.readVarIntNum(),r=a.read(e),i=Mt(r),n=a.readVarIntNum(),s=a.read(n),o=Mt(s);t.fields[i]=o}const n=a.readInt8();t.privileged=-1===n?void 0:1===n;const o=a.readInt8();if(-1===o)t.privilegedReason=void 0;else{const e=a.read(o);t.privilegedReason=Mt(e)}const c=a.readUInt8();if(t.acquisitionProtocol=1===c?"direct":"issuance","direct"===t.acquisitionProtocol){const e=a.read(32);t.serialNumber=Ft(e),t.revocationOutpoint=this.decodeOutpoint(a);const r=a.readVarIntNum(),i=a.read(r);t.signature=Nt(i);const n=a.readUInt8();if(11===n)t.keyringRevealer="certifier";else{const e=[n].concat(a.read(32));t.keyringRevealer=Nt(e)}const s=a.readVarIntNum();t.keyringForSubject={};for(let e=0;e<s;e++){const e=a.readVarIntNum(),r=a.read(e),i=Mt(r),n=a.readVarIntNum(),s=Ft(a.read(n));t.keyringForSubject[i]=s}}else{const e=a.readVarIntNum(),r=a.read(e);t.certifierUrl=Mt(r)}const h=await this.wallet.acquireCertificate(t,s),u=new Rr(h.type,h.serialNumber,h.subject,h.certifier,h.revocationOutpoint,h.fields,h.signature).toBin(),d=new Dt;return d.writeUInt8(0),d.write(u),d.toArray()}case"listCertificates":{const t={},e=a.readVarIntNum();t.certifiers=[];for(let r=0;r<e;r++){const e=a.read(33);t.certifiers.push(Nt(e))}const r=a.readVarIntNum();t.types=[];for(let e=0;e<r;e++){const e=a.read(32);t.types.push(Ft(e))}const i=a.readVarIntNum();t.limit=i>=0?i:void 0;const n=a.readVarIntNum();t.offset=n>=0?n:void 0;const o=a.readInt8();t.privileged=-1===o?void 0:1===o;const c=a.readInt8();if(-1===c)t.privilegedReason=void 0;else{const e=a.read(c);t.privilegedReason=Mt(e)}const h=await this.wallet.listCertificates(t,s),u=new Dt;u.writeVarIntNum(h.totalCertificates);for(const t of h.certificates){const e=new Rr(t.type,t.serialNumber,t.subject,t.certifier,t.revocationOutpoint,t.fields,t.signature).toBin();u.writeVarIntNum(e.length),u.write(e)}const d=new Dt;return d.writeUInt8(0),d.write(u.toArray()),d.toArray()}case"proveCertificate":{const t={},e={},r=a.read(32);e.type=Ft(r);const i=a.read(33);e.subject=Nt(i);const n=a.read(32);e.serialNumber=Ft(n);const o=a.read(33);e.certifier=Nt(o),e.revocationOutpoint=this.decodeOutpoint(a);const c=a.readVarIntNum(),h=a.read(c);e.signature=Nt(h);const u=a.readVarIntNum();e.fields={};for(let t=0;t<u;t++){const t=a.readVarIntNum(),r=a.read(t),i=Mt(r),n=a.readVarIntNum(),s=a.read(n),o=Mt(s);e.fields[i]=o}t.certificate=e;const d=a.readVarIntNum();t.fieldsToReveal=[];for(let e=0;e<d;e++){const e=a.readVarIntNum(),r=a.read(e),i=Mt(r);t.fieldsToReveal.push(i)}const l=a.read(33);t.verifier=Nt(l);const f=a.readInt8();t.privileged=-1===f?void 0:1===f;const p=a.readInt8();if(-1===p)t.privilegedReason=void 0;else{const e=a.read(p);t.privilegedReason=Mt(e)}const b=await this.wallet.proveCertificate(t,s),m=new Dt,w=Object.entries(b.keyringForVerifier);m.writeVarIntNum(w.length);for(const[t,e]of w){const r=Et(t,"utf8");m.writeVarIntNum(r.length),m.write(r);const i=Et(e,"base64");m.writeVarIntNum(i.length),m.write(i)}const g=new Dt;return g.writeUInt8(0),g.write(m.toArray()),g.toArray()}case"relinquishCertificate":{const t={},e=a.read(32);t.type=Ft(e);const r=a.read(32);t.serialNumber=Ft(r);const i=a.read(33);t.certifier=Nt(i),await this.wallet.relinquishCertificate(t,s);const n=new Dt;return n.writeUInt8(0),n.toArray()}case"discoverByIdentityKey":{const t={},e=a.read(33);t.identityKey=Nt(e);const r=a.readVarIntNum();t.limit=r>=0?r:void 0;const i=a.readVarIntNum();t.offset=i>=0?i:void 0;const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByIdentityKey(t,s),c=this.serializeDiscoveryResult(o),h=new Dt;return h.writeUInt8(0),h.write(c),h.toArray()}case"discoverByAttributes":{const t={},e=a.readVarIntNum();t.attributes={};for(let r=0;r<e;r++){const e=a.readVarIntNum(),r=a.read(e),i=Mt(r),n=a.readVarIntNum(),s=a.read(n),o=Mt(s);t.attributes[i]=o}const r=a.readVarIntNum();t.limit=r>=0?r:void 0;const i=a.readVarIntNum();t.offset=i>=0?i:void 0;const n=a.readInt8();t.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByAttributes(t,s),c=this.serializeDiscoveryResult(o),h=new Dt;return h.writeUInt8(0),h.write(c),h.toArray()}default:throw new Error(`Method ${r} not implemented`)}}catch(t){const e=new Dt;e.writeUInt8(t.code||1);const r=t.message||"Unknown error",i=Et(r,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=t.stack||"",s=Et(n,"utf8");return e.writeVarIntNum(s.length),e.write(s),e.toArray()}}decodeProtocolID(t){const e=t.readUInt8(),r=t.readVarIntNum(),i=t.read(r);return[e,Mt(i)]}decodeString(t){const e=t.readVarIntNum(),r=t.read(e);return Mt(r)}decodeCounterparty(t){const e=t.readUInt8();if(11===e)return"self";if(12===e)return"anyone";if(0!==e){const r=t.read(32);return Nt([e,...r])}}serializeDiscoveryResult(t){const e=new Dt;e.writeVarIntNum(t.totalCertificates);for(const r of t.certificates){const t=new Rr(r.type,r.serialNumber,r.subject,r.certifier,r.revocationOutpoint,r.fields,r.signaturre).toBin();e.writeVarIntNum(t.length),e.write(t);const i=Et(r.certifierInfo.name,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r.certifierInfo.iconUrl,"utf8");e.writeVarIntNum(n.length),e.write(n);const s=Et(r.certifierInfo.description,"utf8");e.writeVarIntNum(s.length),e.write(s),e.writeUInt8(r.certifierInfo.trust);const a=Object.entries(r.publiclyRevealedKeyring);e.writeVarIntNum(a.length);for(const[t,r]of a){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"base64");e.writeVarIntNum(n.length),e.write(n)}const o=Object.entries(r.decryptedFields);e.writeVarIntNum(o.length);for(const[t,r]of o){const i=Et(t,"utf8");e.writeVarIntNum(i.length),e.write(i);const n=Et(r,"utf8");e.writeVarIntNum(n.length),e.write(n)}}return e.toArray()}decodeKeyRelatedParams(t){const e={};e.protocolID=this.decodeProtocolID(t);const r=t.readVarIntNum(),i=t.read(r);e.keyID=Mt(i),e.counterparty=this.decodeCounterparty(t);const n=t.readInt8();e.privileged=-1===n?void 0:1===n;const s=t.readInt8();if(-1===s)e.privilegedReason=void 0;else{const r=t.read(s);e.privilegedReason=Mt(r)}return e}}class zr{pushDrop;static decode(t){const e=He.decode(t);if(e.fields.length<4)throw new Error("Invalid SHIP/SLAP advertisement!");const r=Mt(e.fields[0]);if("SHIP"!==r&&"SLAP"!==r)throw new Error("Invalid protocol type!");return{protocol:r,identityKey:Nt(e.fields[1]),domain:Mt(e.fields[2]),topicOrService:Mt(e.fields[3])}}constructor(t){this.pushDrop=new He(t)}async lock(t,e,r){const{publicKey:i}=await this.pushDrop.wallet.getPublicKey({identityKey:!0});return await this.pushDrop.lock([Et(t,"utf8"),Et(i,"hex"),Et(e,"utf8"),Et(r,"utf8")],[2,"SHIP"===t?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}unlock(t){return this.pushDrop.unlock([2,"SHIP"===t?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}}const Wr=["https://overlay.babbage.systems","https://overlay-example.babbage.systems","https://office.babbage.systems"];class jr{fetchClient;constructor(t=fetch){this.fetchClient=t}async lookup(t,e,r=5e3){if(!t.startsWith("https:"))throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const i=new Promise(((t,e)=>setTimeout((()=>e(new Error("Request timed out"))),r))),n=fetch(`${t}/lookup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({service:e.service,query:e.query})}),s=await Promise.race([n,i]);if(s.ok)return await s.json();throw new Error("Failed to facilitate lookup")}}class $r{facilitator;slapTrackers;hostOverrides;additionalHosts;constructor(t){const{facilitator:e,slapTrackers:r,hostOverrides:i,additionalHosts:n}=t??{};this.facilitator=e??new jr,this.slapTrackers=r??Wr,this.hostOverrides=i??{},this.additionalHosts=n??{}}async query(t,e){let r=[];if(r="ls_slap"===t.service?this.slapTrackers:this.hostOverrides[t.service]?this.hostOverrides[t.service]:await this.findCompetentHosts(t.service),this.additionalHosts[t.service]&&(r=[...r,...this.additionalHosts[t.service]]),r.length<1)throw new Error(`No competent hosts found by the SLAP trackers for lookup service: ${t.service}`);const i=(await Promise.allSettled(r.map((async r=>await this.facilitator.lookup(r,t,e))))).filter((t=>"fulfilled"===t.status)).map((t=>t.value));if(0===i.length)throw new Error("No successful responses from any hosts");if("freeform"===i[0].type)return i[0];{const t=new Map;for(const e of i)if("output-list"===e.type)try{for(const r of e.outputs)try{const e=`${rr.fromBEEF(r.beef).id("hex")}.${r.outputIndex}`;t.set(e,r)}catch(t){continue}}catch(t){continue}return{type:"output-list",outputs:Array.from(t.values())}}}async findCompetentHosts(t){const e={service:"ls_slap",query:{service:t}},r=await Promise.allSettled(this.slapTrackers.map((async t=>await this.facilitator.lookup(t,e,1e3)))),i=new Set;for(const e of r)if("fulfilled"===e.status){const r=e.value;if("output-list"!==r.type)continue;for(const e of r.outputs)try{const r=rr.fromBEEF(e.beef).outputs[e.outputIndex].lockingScript,n=zr.decode(r);if(n.topicOrService!==t||"SLAP"!==n.protocol)continue;i.add(n.domain)}catch(t){continue}}return[...i]}}class Xr{httpClient;constructor(t=fetch){this.httpClient=t}async send(t,e){if(!t.startsWith("https:"))throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const r=await fetch(`${t}/submit`,{method:"POST",headers:{"Content-Type":"application/octet-stream","X-Topics":JSON.stringify(e.topics)},body:new Uint8Array(e.beef)});if(r.ok)return await r.json();throw new Error("Failed to facilitate broadcast")}}class Gr{topics;facilitator;resolver;requireAcknowledgmentFromAllHostsForTopics;requireAcknowledgmentFromAnyHostForTopics;requireAcknowledgmentFromSpecificHostsForTopics;constructor(t,e){if(0===t.length)throw new Error("At least one topic is required for broadcast.");if(t.some((t=>!t.startsWith("tm_"))))throw new Error('Every topic must start with "tm_".');this.topics=t;const{facilitator:r,resolver:i,requireAcknowledgmentFromAllHostsForTopics:n,requireAcknowledgmentFromAnyHostForTopics:s,requireAcknowledgmentFromSpecificHostsForTopics:a}=e??{};this.facilitator=r??new Xr,this.resolver=i??new $r,this.requireAcknowledgmentFromAllHostsForTopics=n??[],this.requireAcknowledgmentFromAnyHostForTopics=s??"all",this.requireAcknowledgmentFromSpecificHostsForTopics=a??{}}async broadcast(t){let e;try{e=t.toBEEF()}catch(t){throw new Error("Transactions sent via SHIP to Overlay Services must be serializable to BEEF format.")}const r=await this.findInterestedHosts();if(0===Object.keys(r).length)return{status:"error",code:"ERR_NO_HOSTS_INTERESTED",description:"No hosts are interested in receiving this transaction."};const i=Object.entries(r).map((async([t,r])=>{try{const i=await this.facilitator.send(t,{beef:e,topics:[...r]});if(!i||0===Object.keys(i).length)throw new Error("Steak has no topics.");return{host:t,success:!0,steak:i}}catch(e){return{host:t,success:!1,error:e}}})),n=(await Promise.all(i)).filter((t=>t.success));if(0===n.length)return{status:"error",code:"ERR_ALL_HOSTS_REJECTED",description:"All SHIP hosts have rejected the transaction."};const s={};for(const t of n){const e=t.host,r=t.steak,i=new Set;for(const[t,e]of Object.entries(r)){const r=e.outputsToAdmit,n=e.coinsToRetain,s=e.coinsRemoved;(r?.length>0||n?.length>0||s?.length>0)&&i.add(t)}s[e]=i}let a,o,c,h;return"all"===this.requireAcknowledgmentFromAllHostsForTopics?(a=this.topics,o="all"):"any"===this.requireAcknowledgmentFromAllHostsForTopics?(a=this.topics,o="any"):Array.isArray(this.requireAcknowledgmentFromAllHostsForTopics)?(a=this.requireAcknowledgmentFromAllHostsForTopics,o="all"):(a=this.topics,o="all"),a.length>0&&!this.checkAcknowledgmentFromAllHosts(s,a,o)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ALL_HOSTS_FAILED",description:"Not all hosts acknowledged the required topics."}:("all"===this.requireAcknowledgmentFromAnyHostForTopics?(c=this.topics,h="all"):"any"===this.requireAcknowledgmentFromAnyHostForTopics?(c=this.topics,h="any"):Array.isArray(this.requireAcknowledgmentFromAnyHostForTopics)?(c=this.requireAcknowledgmentFromAnyHostForTopics,h="all"):(c=[],h="all"),c.length>0&&!this.checkAcknowledgmentFromAnyHost(s,c,h)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ANY_HOST_FAILED",description:"No host acknowledged the required topics."}:Object.keys(this.requireAcknowledgmentFromSpecificHostsForTopics).length>0&&!this.checkAcknowledgmentFromSpecificHosts(s,this.requireAcknowledgmentFromSpecificHostsForTopics)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_SPECIFIC_HOSTS_FAILED",description:"Specific hosts did not acknowledge the required topics."}:{status:"success",txid:t.id("hex"),message:`Sent to ${n.length} Overlay Services ${1===n.length?"host":"hosts"}.`})}checkAcknowledgmentFromAllHosts(t,e,r){for(const i of Object.values(t))if("all"===r){for(const t of e)if(!i.has(t))return!1}else if("any"===r){let t=!1;for(const r of e)if(i.has(r)){t=!0;break}if(!t)return!1}return!0}checkAcknowledgmentFromAnyHost(t,e,r){if("all"===r){for(const r of Object.values(t)){let t=!0;for(const i of e)if(!r.has(i)){t=!1;break}if(t)return!0}return!1}for(const r of Object.values(t))for(const t of e)if(r.has(t))return!0;return!1}checkAcknowledgmentFromSpecificHosts(t,e){for(const[r,i]of Object.entries(e)){const e=t[r];if(!e)return!1;let n,s;if("all"===i||"any"===i)s=i,n=this.topics;else{if(!Array.isArray(i))continue;n=i,s="all"}if("all"===s){for(const t of n)if(!e.has(t))return!1}else if("any"===s){let t=!1;for(const r of n)if(e.has(r)){t=!0;break}if(!t)return!1}}return!0}async findInterestedHosts(){const t={},e=await this.resolver.query({service:"ls_ship",query:{topics:this.topics}},1e3);if("output-list"!==e.type)throw new Error("SHIP answer is not an output list.");for(const r of e.outputs)try{const e=rr.fromBEEF(r.beef).outputs[r.outputIndex].lockingScript,i=zr.decode(e);if(!this.topics.includes(i.topicOrService)||"SHIP"!==i.protocol)continue;t[i.domain]||(t[i.domain]=new Set),t[i.domain].add(i.topicOrService)}catch(t){continue}return t}}return e})()));
|