{"version":3,"sources":["webpack:///./node_modules/@ethersproject/sha2/lib.esm/_version.js","webpack:///./node_modules/@ethersproject/sha2/lib.esm/sha2.js","webpack:///./node_modules/@ethersproject/signing-key/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/@ethersproject/strings/lib.esm/_version.js","webpack:///./node_modules/@ethersproject/strings/lib.esm/utf8.js","webpack:///./node_modules/@ethersproject/strings/lib.esm/bytes32.js","webpack:///./node_modules/@ethersproject/strings/lib.esm/idna.js","webpack:///./node_modules/@ethersproject/signing-key/lib.esm/_version.js","webpack:///./node_modules/@ethersproject/signing-key/lib.esm/index.js","webpack:///./node_modules/@ethersproject/signing-key/lib.esm/elliptic.js","webpack:///./node_modules/@ethersproject/sha2/lib.esm/types.js","webpack:///./node_modules/@ethersproject/solidity/lib.esm/_version.js","webpack:///./node_modules/@ethersproject/solidity/lib.esm/index.js"],"names":["logger","ripemd160","data","update","digest","sha256","sha512","computeHmac","algorithm","key","throwError","errors","UNSUPPORTED_OPERATION","operation","hmac","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","this","negative","words","length","red","_init","Buffer","module","exports","wordSize","window","r","e","parseHex4Bits","string","index","c","charCodeAt","parseHexByte","lowerBound","parseBase","str","start","end","mul","b","len","Math","min","i","move","dest","src","num","Array","isArray","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","toArray","ceil","j","w","off","_strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","_move","clone","_expand","size","_normSign","Symbol","for","inspect","zeros","groupSizes","groupBases","padding","out","carry","groupSize","groupBase","isZero","modrn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","smallMulTo","self","a","lo","k","ncarry","rword","maxJ","ArrayType","byteLength","reqLength","res","allocUnsafe","allocate","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","q","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","andln","acc","modn","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","K256","call","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","reason","offset","bytes","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","OVERRUN","Utf8ErrorFuncs","Object","freeze","error","throwArgumentError","ignore","OVERLONG","push","getUtf8CodePoints","onError","result","extraLength","overlongMask","nextChar","MISSING_CONTINUE","OUT_OF_RANGE","UTF16_SURROGATE","toUtf8Bytes","form","checkNormalize","normalize","c2","pair","escapeChar","value","hex","substring","_toEscapedUtf8String","map","codePoint","String","fromCharCode","join","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","formatBytes32String","text","slice","parseBytes32String","createTable","func","parseInt","forEach","comps","createRangeTable","v","matchMap","ranges","range","d","indexOf","Table_A_1_ranges","Table_B_1_flags","Table_B_2_ranges","Table_B_2_lut_abs","Table_B_2_lut_rel","Table_B_2_complex","Table_C_ranges","nameprep","match","toLowerCase","codes","values","reduce","accum","flatten","code","codesTableB2","codepoint","_nameprepTableB2","NFKC","_nameprepTableC","_nameprepTableA1","_curve","getCurve","privateKey","keyPair","keyFromPrivate","getPublic","_addPoint","other","p0","keyFromPublic","publicKey","p1","pub","encodeCompressed","signDigest","digestBytes","signature","sign","canonical","recoveryParam","computeSharedSecret","otherKey","otherKeyPair","computePublicKey","derive","static","_isSigningKey","recoverPublicKey","sig","rs","recoverPubKey","encode","compressed","signingKey","createCommonjsModule","fn","basedir","path","require","commonjsRequire","globalThis","global","minimalisticAssert","equal","utils_1","utils","zero2","toHex","enc","arr","utils_1$1","getNAF","naf","fill","getJSF","k1","k2","jsf","m8","d1","d2","u1","u2","m14","m24","cachedProperty","obj","computer","parseBytes","intFromLE","assert$1","BaseCurve","type","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","_encode","compact","getX","getY","concat","precompute","power","beta","_getBeta","_hasDoubles","dbl","inherits_browser","create","enumerable","writable","configurable","assert$2","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","short_1","Point","isRed","inf","JPoint","zOne","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","l2","prevR","aprxSqrt","floor","y1","y2","len1","_endoSplit","v1","v2","c1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","pre","endoMul","JSON","parse","obj2point","isInfinity","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","s1","s2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t1","t2","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","f","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","curve_1","short","edwards","curves_1","curves","PresetCurve","options","hash","defineCurve","defineProperty","get","sha384","crash","undefined","HmacDRBG","predResist","outSize","minEntropy","hmacStrength","_reseed","reseedInterval","K","V","entropy","entropyEnc","nonce","nonceEnc","pers","persEnc","hmacDrbg","seed","_update","_hmac","kmac","reseed","addEnc","generate","temp","assert$3","KeyPair","ec","priv","_importPrivate","privEnc","_importPublic","pubEnc","fromPublic","fromPrivate","getPrivate","verify","assert$4","Signature","_importDER","Position","place","getLength","buf","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","toDER","backHalf","rand","assert$5","EC","hasOwnProperty","nh","genKeyPair","drbg","ns2","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","signature$1","sinv","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","elliptic_1","elliptic","version","eddsa","EC$1","SupportedAlgorithm","regexBytes","RegExp","regexNumber","regexArray","Zeros","_pack","from","baseType","pack","types","tight","keccak256"],"mappings":"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","file":"js/chunk-vendors~4cd998c9.55fffbd9.js","sourcesContent":["export const version = \"sha2/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport hash from \"hash.js\";\n//const _ripemd160 = _hash.ripemd160;\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { SupportedAlgorithm } from \"./types\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport function ripemd160(data) {\n return \"0x\" + (hash.ripemd160().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha256(data) {\n return \"0x\" + (hash.sha256().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha512(data) {\n return \"0x\" + (hash.sha512().update(arrayify(data)).digest(\"hex\"));\n}\nexport function computeHmac(algorithm, key, data) {\n if (!SupportedAlgorithm[algorithm]) {\n logger.throwError(\"unsupported algorithm \" + algorithm, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"hmac\",\n algorithm: algorithm\n });\n }\n return \"0x\" + hash.hmac(hash[algorithm], arrayify(key)).update(arrayify(data)).digest(\"hex\");\n}\n//# sourceMappingURL=sha2.js.map","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","export const version = \"strings/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n bytes = arrayify(bytes);\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return arrayify(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","\"use strict\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([bytes, HashZero]).slice(0, 32));\n}\nexport function parseBytes32String(bytes) {\n const data = arrayify(bytes);\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","\"use strict\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, func) {\n if (!func) {\n func = function (value) { return [parseInt(value, 16)]; };\n }\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n let range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n return [codepoint + range.s];\n }\n let codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n let shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n let complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_PROHIBITED\");\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_UNASSIGNED\");\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n throw new Error(\"invalid hyphen\");\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","export const version = \"signing-key/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { EC } from \"./elliptic\";\nimport { arrayify, hexDataLength, hexlify, hexZeroPad, splitSignature } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nlet _curve = null;\nfunction getCurve() {\n if (!_curve) {\n _curve = new EC(\"secp256k1\");\n }\n return _curve;\n}\nexport class SigningKey {\n constructor(privateKey) {\n defineReadOnly(this, \"curve\", \"secp256k1\");\n defineReadOnly(this, \"privateKey\", hexlify(privateKey));\n if (hexDataLength(this.privateKey) !== 32) {\n logger.throwArgumentError(\"invalid private key\", \"privateKey\", \"[[ REDACTED ]]\");\n }\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n defineReadOnly(this, \"publicKey\", \"0x\" + keyPair.getPublic(false, \"hex\"));\n defineReadOnly(this, \"compressedPublicKey\", \"0x\" + keyPair.getPublic(true, \"hex\"));\n defineReadOnly(this, \"_isSigningKey\", true);\n }\n _addPoint(other) {\n const p0 = getCurve().keyFromPublic(arrayify(this.publicKey));\n const p1 = getCurve().keyFromPublic(arrayify(other));\n return \"0x\" + p0.pub.add(p1.pub).encodeCompressed(\"hex\");\n }\n signDigest(digest) {\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n const digestBytes = arrayify(digest);\n if (digestBytes.length !== 32) {\n logger.throwArgumentError(\"bad digest length\", \"digest\", digest);\n }\n const signature = keyPair.sign(digestBytes, { canonical: true });\n return splitSignature({\n recoveryParam: signature.recoveryParam,\n r: hexZeroPad(\"0x\" + signature.r.toString(16), 32),\n s: hexZeroPad(\"0x\" + signature.s.toString(16), 32),\n });\n }\n computeSharedSecret(otherKey) {\n const keyPair = getCurve().keyFromPrivate(arrayify(this.privateKey));\n const otherKeyPair = getCurve().keyFromPublic(arrayify(computePublicKey(otherKey)));\n return hexZeroPad(\"0x\" + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32);\n }\n static isSigningKey(value) {\n return !!(value && value._isSigningKey);\n }\n}\nexport function recoverPublicKey(digest, signature) {\n const sig = splitSignature(signature);\n const rs = { r: arrayify(sig.r), s: arrayify(sig.s) };\n return \"0x\" + getCurve().recoverPubKey(arrayify(digest), rs, sig.recoveryParam).encode(\"hex\", false);\n}\nexport function computePublicKey(key, compressed) {\n const bytes = arrayify(key);\n if (bytes.length === 32) {\n const signingKey = new SigningKey(bytes);\n if (compressed) {\n return \"0x\" + getCurve().keyFromPrivate(bytes).getPublic(true, \"hex\");\n }\n return signingKey.publicKey;\n }\n else if (bytes.length === 33) {\n if (compressed) {\n return hexlify(bytes);\n }\n return \"0x\" + getCurve().keyFromPublic(bytes).getPublic(false, \"hex\");\n }\n else if (bytes.length === 65) {\n if (!compressed) {\n return hexlify(bytes);\n }\n return \"0x\" + getCurve().keyFromPublic(bytes).getPublic(true, \"hex\");\n }\n return logger.throwArgumentError(\"invalid public or private key\", \"key\", \"[REDACTED]\");\n}\n//# sourceMappingURL=index.js.map","import BN from 'bn.js';\nimport hash from 'hash.js';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, basedir, module) {\n\treturn module = {\n\t\tpath: basedir,\n\t\texports: {},\n\t\trequire: function (path, base) {\n\t\t\treturn commonjsRequire(path, (base === undefined || base === null) ? module.path : base);\n\t\t}\n\t}, fn(module, module.exports), module.exports;\n}\n\nfunction getDefaultExportFromNamespaceIfPresent (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;\n}\n\nfunction getDefaultExportFromNamespaceIfNotNamed (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;\n}\n\nfunction getAugmentedNamespace(n) {\n\tif (n.__esModule) return n;\n\tvar a = Object.defineProperty({}, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');\n}\n\nvar minimalisticAssert = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\nvar utils_1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n});\n\nvar utils_1$1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nvar utils = exports;\n\n\n\n\nutils.assert = minimalisticAssert;\nutils.toArray = utils_1.toArray;\nutils.zero2 = utils_1.zero2;\nutils.toHex = utils_1.toHex;\nutils.encode = utils_1.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n});\n\n'use strict';\n\n\n\nvar getNAF = utils_1$1.getNAF;\nvar getJSF = utils_1$1.getJSF;\nvar assert$1 = utils_1$1.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nvar base = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert$1(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert$1(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils_1$1.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert$1(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert$1(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils_1$1.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n\nvar inherits_browser = createCommonjsModule(function (module) {\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n };\n}\n});\n\n'use strict';\n\n\n\n\n\n\nvar assert$2 = utils_1$1.assert;\n\nfunction ShortCurve(conf) {\n base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits_browser(ShortCurve, base);\nvar short_1 = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert$2(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits_browser(Point, base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits_browser(JPoint, base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nvar curve_1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nvar curve = exports;\n\ncurve.base = base;\ncurve.short = short_1;\ncurve.mont = /*RicMoo:ethers:require(./mont)*/(null);\ncurve.edwards = /*RicMoo:ethers:require(./edwards)*/(null);\n});\n\nvar curves_1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nvar curves = exports;\n\n\n\n\n\nvar assert = utils_1$1.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve_1.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve_1.edwards(options);\n else\n this.curve = new curve_1.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = /*RicMoo:ethers:require(./precomputed/secp256k1)*/(null).crash();\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n});\n\n'use strict';\n\n\n\n\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils_1.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils_1.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils_1.toArray(options.pers, options.persEnc || 'hex');\n minimalisticAssert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nvar hmacDrbg = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils_1.toArray(entropy, entropyEnc);\n add = utils_1.toArray(add, addEnc);\n\n minimalisticAssert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils_1.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils_1.encode(res, enc);\n};\n\n'use strict';\n\n\n\nvar assert$3 = utils_1$1.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nvar key = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert$3(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert$3(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert$3(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n\n'use strict';\n\n\n\n\nvar assert$4 = utils_1$1.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert$4(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nvar signature = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils_1$1.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils_1$1.encode(res, enc);\n};\n\n'use strict';\n\n\n\n\n\nvar rand = /*RicMoo:ethers:require(brorand)*/(function() { throw new Error('unsupported'); });\nvar assert$5 = utils_1$1.assert;\n\n\n\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert$5(Object.prototype.hasOwnProperty.call(curves_1, options),\n 'Unknown curve ' + options);\n\n options = curves_1[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves_1.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nvar ec = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new key(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return key.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return key.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new hmacDrbg({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new hmacDrbg({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature$1, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature$1 = new signature(signature$1, 'hex');\n\n // Perform primitive values validation\n var r = signature$1.r;\n var s = signature$1.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature$1, j, enc) {\n assert$5((3 & j) === j, 'The recovery param is more than two bits');\n signature$1 = new signature(signature$1, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature$1.r;\n var s = signature$1.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature$1.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature$1, Q, enc) {\n signature$1 = new signature(signature$1, enc);\n if (signature$1.recoveryParam !== null)\n return signature$1.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature$1, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n\nvar elliptic_1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = /*RicMoo:ethers*/{ version: \"6.5.4\" }.version;\nelliptic.utils = utils_1$1;\nelliptic.rand = /*RicMoo:ethers:require(brorand)*/(function() { throw new Error('unsupported'); });\nelliptic.curve = curve_1;\nelliptic.curves = curves_1;\n\n// Protocols\nelliptic.ec = ec;\nelliptic.eddsa = /*RicMoo:ethers:require(./elliptic/eddsa)*/(null);\n});\n\nvar EC$1 = elliptic_1.ec;\n\nexport { EC$1 as EC };\n//# sourceMappingURL=elliptic.js.map\n","export var SupportedAlgorithm;\n(function (SupportedAlgorithm) {\n SupportedAlgorithm[\"sha256\"] = \"sha256\";\n SupportedAlgorithm[\"sha512\"] = \"sha512\";\n})(SupportedAlgorithm || (SupportedAlgorithm = {}));\n;\n//# sourceMappingURL=types.js.map","export const version = \"solidity/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexlify, zeroPad } from \"@ethersproject/bytes\";\nimport { keccak256 as hashKeccak256 } from \"@ethersproject/keccak256\";\nimport { sha256 as hashSha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\nconst Zeros = \"0000000000000000000000000000000000000000000000000000000000000000\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction _pack(type, value, isArray) {\n switch (type) {\n case \"address\":\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n case \"string\":\n return toUtf8Bytes(value);\n case \"bytes\":\n return arrayify(value);\n case \"bool\":\n value = (value ? \"0x01\" : \"0x00\");\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n }\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || \"256\");\n if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) {\n logger.throwArgumentError(\"invalid number type\", \"type\", type);\n }\n if (isArray) {\n size = 256;\n }\n value = BigNumber.from(value).toTwos(size);\n return zeroPad(value, size / 8);\n }\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes type\", \"type\", type);\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${type}`, \"value\", value);\n }\n if (isArray) {\n return arrayify((value + Zeros).substring(0, 66));\n }\n return value;\n }\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(`invalid array length for ${type}`, \"value\", value);\n }\n const result = [];\n value.forEach(function (value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n}\n// @TODO: Array Enum\nexport function pack(types, values) {\n if (types.length != values.length) {\n logger.throwArgumentError(\"wrong number of values; expected ${ types.length }\", \"values\", values);\n }\n const tight = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\nexport function keccak256(types, values) {\n return hashKeccak256(pack(types, values));\n}\nexport function sha256(types, values) {\n return hashSha256(pack(types, values));\n}\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}