"use strict"; /* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ exports.id = "vendor-chunks/spark-md5"; exports.ids = ["vendor-chunks/spark-md5"]; exports.modules = { /***/ "(action-browser)/./node_modules/spark-md5/spark-md5.js": /*!*********************************************!*\ !*** ./node_modules/spark-md5/spark-md5.js ***! \*********************************************/ /***/ ((module) => { eval("\n(function(factory) {\n if (true) {\n // Node/CommonJS\n module.exports = factory();\n } else { var glob; }\n})(function(undefined) {\n \"use strict\";\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */ /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */ var add32 = function(a, b) {\n return a + b & 0xFFFFFFFF;\n }, hex_chr = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\"\n ];\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32(a << s | a >>> 32 - s, b);\n }\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i; /* Andy King said do it this way. */ \n for(i = 0; i < 64; i += 4){\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i; /* Andy King said do it this way. */ \n for(i = 0; i < 64; i += 4){\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ], i, length, tail, tmp, lo, hi;\n for(i = 64; i <= n; i += 64){\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ], i, length, tail, tmp, lo, hi;\n for(i = 64; i <= n; i += 64){\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for(j = 0; j < 4; j += 1){\n s += hex_chr[n >> j * 8 + 4 & 0x0F] + hex_chr[n >> j * 8 & 0x0F];\n }\n return s;\n }\n function hex(x) {\n var i;\n for(i = 0; i < x.length; i += 1){\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n // In some cases the fast add32 function cannot be used..\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") {\n add32 = function(x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xFFFF;\n };\n }\n // ---------------------------------------------------\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */ if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n // ---------------------------------------------------\n /**\n * Helpers.\n */ function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for(i = 0; i < length; i += 1){\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for(x = 0; x < length - 1; x += 2){\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n // ---------------------------------------------------\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */ function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.append = function(str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n return this;\n };\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for(i = 64; i <= length; i += 64){\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ], ret;\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ];\n return this;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */ SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */ SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */ SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.hash = function(str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n // ---------------------------------------------------\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */ SparkMD5.ArrayBuffer = function() {\n // call reset to init the instance\n this.reset();\n };\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for(i = 64; i <= length; i += 64){\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ], i, ret;\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ];\n return this;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */ SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */ SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9zcGFyay1tZDUvc3BhcmstbWQ1LmpzIiwibWFwcGluZ3MiOiI7QUFBQyxVQUFVQSxPQUFPO0lBQ2QsSUFBSSxJQUFtQixFQUFVO1FBQzdCLGdCQUFnQjtRQUNoQkUsT0FBT0QsT0FBTyxHQUFHRDtJQUNyQixPQUFPLGFBY047QUFDTCxHQUFFLFNBQVVVLFNBQVM7SUFFakI7SUFFQTs7Ozs7O0tBTUMsR0FFRDs7OztrQ0FJOEIsR0FDOUIsSUFBSUMsUUFBUSxTQUFVQyxDQUFDLEVBQUVDLENBQUM7UUFDdEIsT0FBTyxJQUFLQSxJQUFLO0lBQ3JCLEdBQ0lDLFVBQVU7UUFBQztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztLQUFJO0lBRzlGLFNBQVNDLElBQUlDLENBQUMsRUFBRUosQ0FBQyxFQUFFQyxDQUFDLEVBQUVJLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxDQUFDO1FBQ3pCUCxJQUFJRCxNQUFNQSxNQUFNQyxHQUFHSSxJQUFJTCxNQUFNTSxHQUFHRTtRQUNoQyxPQUFPUixNQUFNLEtBQU1PLElBQU1OLE1BQU8sS0FBS00sR0FBS0w7SUFDOUM7SUFFQSxTQUFTTyxTQUFTSCxDQUFDLEVBQUVJLENBQUM7UUFDbEIsSUFBSVQsSUFBSUssQ0FBQyxDQUFDLEVBQUUsRUFDUkosSUFBSUksQ0FBQyxDQUFDLEVBQUUsRUFDUkssSUFBSUwsQ0FBQyxDQUFDLEVBQUUsRUFDUk0sSUFBSU4sQ0FBQyxDQUFDLEVBQUU7UUFFWkwsS0FBSyxDQUFDQyxJQUFJUyxJQUFJLENBQUNULElBQUlVLENBQUFBLElBQUtGLENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWTtRQUMzQ1QsSUFBSyxDQUFDQSxLQUFLLElBQUlBLE1BQU0sRUFBQyxJQUFLQyxJQUFJO1FBQy9CVSxLQUFLLENBQUNYLElBQUlDLElBQUksQ0FBQ0QsSUFBSVUsQ0FBQUEs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QUFDLElBQUk7UUFFakQsNkJBQTZCO1FBQzdCM0UsTUFBTTRDLElBQUksR0FBR0Usb0JBQW9COUMsTUFBTTRDLElBQUk7UUFFM0MsT0FBTzVDO0lBQ1g7SUFFQTs7Ozs7O0tBTUMsR0FDRHZCLFNBQVMwQyxXQUFXLENBQUNDLFNBQVMsQ0FBQ21ELFFBQVEsR0FBRyxTQUFVdkUsS0FBSztRQUNyRCwyQkFBMkI7UUFDM0JBLE1BQU00QyxJQUFJLEdBQUdGLG9CQUFvQjFDLE1BQU00QyxJQUFJLEVBQUU7UUFFN0MsT0FBT25FLFNBQVMyQyxTQUFTLENBQUNtRCxRQUFRLENBQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUzRTtJQUNsRDtJQUVBdkIsU0FBUzBDLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDb0QsT0FBTyxHQUFHL0YsU0FBUzJDLFNBQVMsQ0FBQ29ELE9BQU87SUFFbkUvRixTQUFTMEMsV0FBVyxDQUFDQyxTQUFTLENBQUNnRCxPQUFPLEdBQUczRixTQUFTMkMsU0FBUyxDQUFDZ0QsT0FBTztJQUVuRTs7Ozs7OztLQU9DLEdBQ0QzRixTQUFTMEMsV0FBVyxDQUFDbUQsSUFBSSxHQUFHLFNBQVV6QixHQUFHLEVBQUVxQixHQUFHO1FBQzFDLElBQUlJLE9BQU83RCxXQUFXLElBQUlFLFdBQVdrQyxPQUNqQ3NCLE1BQU1yRCxJQUFJd0Q7UUFFZCxPQUFPSixNQUFNWCxrQkFBa0JZLE9BQU9BO0lBQzFDO0lBRUEsT0FBTzFGO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy9zcGFyay1tZDUvc3BhcmstbWQ1LmpzP2M1NTgiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBOb2RlL0NvbW1vbkpTXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRFxuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzICh3aXRoIHN1cHBvcnQgZm9yIHdlYiB3b3JrZXJzKVxuICAgICAgICB2YXIgZ2xvYjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2xvYiA9IHdpbmRvdztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZ2xvYiA9IHNlbGY7XG4gICAgICAgIH1cblxuICAgICAgICBnbG9iLlNwYXJrTUQ1ID0gZmFjdG9yeSgpO1xuICAgIH1cbn0oZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLypcbiAgICAgKiBGYXN0ZXN0IG1kNSBpbXBsZW1lbnRhdGlvbiBhcm91bmQgKEpLTSBtZDUpLlxuICAgICAqIENyZWRpdHM6IEpvc2VwaCBNeWVyc1xuICAgICAqXG4gICAgICogQHNlZSBodHRwOi8vd3d3Lm15ZXJzZGFpbHkub3JnL2pvc2VwaC9qYXZhc2NyaXB0L21kNS10ZXh0Lmh0bWxcbiAgICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL21kNS1zaG9vdG91dC83XG4gICAgICovXG5cbiAgICAvKiB0aGlzIGZ1bmN0aW9uIGlzIG11Y2ggZmFzdGVyLFxuICAgICAgc28gaWYgcG9zc2libGUgd2UgdXNlIGl0LiBTb21lIElFc1xuICAgICAgYXJlIHRoZSBvbmx5IG9uZXMgSSBrbm93IG9mIHRoYXRcbiAgICAgIG5lZWQgdGhlIGlkaW90aWMgc2Vjb25kIGZ1bmN0aW9uLFxuICAgICAgZ2VuZXJhdGVkIGJ5IGFuIGlmIGNsYXVzZS4gICovXG4gICAgdmFyIGFkZDMyID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhICsgYikgJiAweEZGRkZGRkZGO1xuICAgIH0sXG4gICAgICAgIGhleF9jaHIgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnXTtcblxuXG4gICAgZnVuY3Rpb24gY21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgICAgICAgYSA9IGFkZDMyKGFkZDMyKGEsIHEpLCBhZGQzMih4LCB0KSk7XG4gICAgICAgIHJldHVybiBhZGQzMigoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNWN5Y2xlKHgsIGspIHtcbiAgICAgICAgdmFyIGEgPSB4WzBdLFxuICAgICAgICAgICAgYiA9IHhbMV0sXG4gICAgICAgICAgICBjID0geFsyXSxcbiAgICAgICAgICAgIGQgPSB4WzNdO1xuXG4gICAgICAgIGEgKz0gKGIgJiBjIHwgfmIgJiBkKSArIGtbMF0gLSA2ODA4NzY5MzYgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGIgfCB+YSAmIGMpICsga1sxXSAtIDM4OTU2NDU4NiB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGEgfCB+ZCAmIGIpICsga1syXSArIDYwNjEwNTgxOSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGQgfCB+YyAmIGEpICsga1szXSAtIDEwNDQ1MjUzMzAgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGIgJiBjIHwgfmIgJiBkKSArIGtbNF0gLSAxNzY0MTg4OTcgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGIgfCB+YSAmIGMpICsga1s1XSArIDEyMDAwODA0MjYgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBhIHwgfmQgJiBiKSArIGtbNl0gLSAxNDczMjMxMzQxIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgZCB8IH5jICYgYSkgKyBrWzddIC0gNDU3MDU5ODMgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGIgJiBjIHwgfmIgJiBkKSArIGtbOF0gKyAxNzcwMDM1NDE2IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBiIHwgfmEgJiBjKSArIGtbOV0gLSAxOTU4NDE0NDE3IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYSB8IH5kICYgYikgKyBrWzEwXSAtIDQyMDYzIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgZCB8IH5jICYgYSkgKyBrWzExXSAtIDE5OTA0MDQxNjIgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGIgJiBjIHwgfmIgJiBkKSArIGtbMTJdICsgMTgwNDYwMzY4MiB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYiB8IH5hICYgYykgKyBrWzEzXSAtIDQwMzQxMTAxIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYSB8IH5kICYgYikgKyBrWzE0XSAtIDE1MDIwMDIyOTAgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgJiBkIHwgfmMgJiBhKSArIGtbMTVdICsgMTIzNjUzNTMyOSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjIgfCBiID4+PiAxMCkgKyBjIHwgMDtcblxuICAgICAgICBhICs9IChiICYgZCB8IGMgJiB+ZCkgKyBrWzFdIC0gMTY1Nzk2NTEwIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbNl0gLSAxMDY5NTAxNjMyIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBiIHwgYSAmIH5iKSArIGtbMTFdICsgNjQzNzE3NzEzIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzBdIC0gMzczODk3MzAyIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgZCB8IGMgJiB+ZCkgKyBrWzVdIC0gNzAxNTU4NjkxIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbMTBdICsgMzgwMTYwODMgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDkgfCBkID4+PiAyMykgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGIgfCBhICYgfmIpICsga1sxNV0gLSA2NjA0NzgzMzUgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE0IHwgYyA+Pj4gMTgpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgJiBhIHwgZCAmIH5hKSArIGtbNF0gLSA0MDU1Mzc4NDggfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIwIHwgYiA+Pj4gMTIpICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGIgJiBkIHwgYyAmIH5kKSArIGtbOV0gKyA1Njg0NDY0MzggfCAwO1xuICAgICAgICBhICA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGMgfCBiICYgfmMpICsga1sxNF0gLSAxMDE5ODAzNjkwIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBiIHwgYSAmIH5iKSArIGtbM10gLSAxODczNjM5NjEgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE0IHwgYyA+Pj4gMTgpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgJiBhIHwgZCAmIH5hKSArIGtbOF0gKyAxMTYzNTMxNTAxIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgZCB8IGMgJiB+ZCkgKyBrWzEzXSAtIDE0NDQ2ODE0NjcgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDUgfCBhID4+PiAyNykgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGMgfCBiICYgfmMpICsga1syXSAtIDUxNDAzNzg0IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBiIHwgYSAmIH5iKSArIGtbN10gKyAxNzM1MzI4NDczIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzEyXSAtIDE5MjY2MDc3MzQgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIwIHwgYiA+Pj4gMTIpICsgYyB8IDA7XG5cbiAgICAgICAgYSArPSAoYiBeIGMgXiBkKSArIGtbNV0gLSAzNzg1NTggfCAwO1xuICAgICAgICBhICA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSBeIGIgXiBjKSArIGtbOF0gLSAyMDIyNTc0NDYzIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkIF4gYSBeIGIpICsga1sxMV0gKyAxODM5MDMwNTYyIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjIF4gZCBeIGEpICsga1sxNF0gLSAzNTMwOTU1NiB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgfCAwO1xuICAgICAgICBhICs9IChiIF4gYyBeIGQpICsga1sxXSAtIDE1MzA5OTIwNjAgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSBeIGIgXiBjKSArIGtbNF0gKyAxMjcyODkzMzUzIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkIF4gYSBeIGIpICsga1s3XSAtIDE1NTQ5NzYzMiB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbMTBdIC0gMTA5NDczMDY0MCB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgfCAwO1xuICAgICAgICBhICs9IChiIF4gYyBeIGQpICsga1sxM10gKyA2ODEyNzkxNzQgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDQgfCBhID4+PiAyOCkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSBeIGIgXiBjKSArIGtbMF0gLSAzNTg1MzcyMjIgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgXiBhIF4gYikgKyBrWzNdIC0gNzIyNTIxOTc5IHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjIF4gZCBeIGEpICsga1s2XSArIDc2MDI5MTg5IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMyB8IGIgPj4+IDkpICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGIgXiBjIF4gZCkgKyBrWzldIC0gNjQwMzY0NDg3IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzEyXSAtIDQyMTgxNTgzNSB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCBeIGEgXiBiKSArIGtbMTVdICsgNTMwNzQyNTIwIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNiB8IGMgPj4+IDE2KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjIF4gZCBeIGEpICsga1syXSAtIDk5NTMzODY1MSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgfCAwO1xuXG4gICAgICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBrWzBdIC0gMTk4NjMwODQ0IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA2IHwgYSA+Pj4gMjYpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBrWzddICsgMTEyNjg5MTQxNSB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGtbMTRdIC0gMTQxNjM1NDkwNSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbNV0gLSA1NzQzNDA1NSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfGIgPj4+IDExKSArIGMgfCAwO1xuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1sxMl0gKyAxNzAwNDg1NTcxIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA2IHwgYSA+Pj4gMjYpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBrWzNdIC0gMTg5NDk4NjYwNiB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGtbMTBdIC0gMTA1MTUyMyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbMV0gLSAyMDU0OTIyNzk5IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMSB8YiA+Pj4gMTEpICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBrWzhdICsgMTg3MzMxMzM1OSB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1sxNV0gLSAzMDYxMTc0NCB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTAgfCBkID4+PiAyMikgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoYSBeIChkIHwgfmIpKSArIGtbNl0gLSAxNTYwMTk4MzgwIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgfCAwO1xuICAgICAgICBiICs9IChkIF4gKGMgfCB+YSkpICsga1sxM10gKyAxMzA5MTUxNjQ5IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMSB8YiA+Pj4gMTEpICsgYyB8IDA7XG4gICAgICAgIGEgKz0gKGMgXiAoYiB8IH5kKSkgKyBrWzRdIC0gMTQ1NTIzMDcwIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA2IHwgYSA+Pj4gMjYpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGIgXiAoYSB8IH5jKSkgKyBrWzExXSAtIDExMjAyMTAzNzkgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzJdICsgNzE4Nzg3MjU5IHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNSB8IGMgPj4+IDE3KSArIGQgfCAwO1xuICAgICAgICBiICs9IChkIF4gKGMgfCB+YSkpICsga1s5XSAtIDM0MzQ4NTU1MSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfCBiID4+PiAxMSkgKyBjIHwgMDtcblxuICAgICAgICB4WzBdID0gYSArIHhbMF0gfCAwO1xuICAgICAgICB4WzFdID0gYiArIHhbMV0gfCAwO1xuICAgICAgICB4WzJdID0gYyArIHhbMl0gfCAwO1xuICAgICAgICB4WzNdID0gZCArIHhbM10gfCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNWJsayhzKSB7XG4gICAgICAgIHZhciBtZDVibGtzID0gW10sXG4gICAgICAgICAgICBpOyAvKiBBbmR5IEtpbmcgc2FpZCBkbyBpdCB0aGlzIHdheS4gKi9cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkgKz0gNCkge1xuICAgICAgICAgICAgbWQ1Ymxrc1tpID4+IDJdID0gcy5jaGFyQ29kZUF0KGkpICsgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgKyAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCAxNikgKyAocy5jaGFyQ29kZUF0KGkgKyAzKSA8PCAyNCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1kNWJsa3M7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWQ1YmxrX2FycmF5KGEpIHtcbiAgICAgICAgdmFyIG1kNWJsa3MgPSBbXSxcbiAgICAgICAgICAgIGk7IC8qIEFuZHkgS2luZyBzYWlkIGRvIGl0IHRoaXMgd2F5LiAqL1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSArPSA0KSB7XG4gICAgICAgICAgICBtZDVibGtzW2kgPj4gMl0gPSBhW2ldICsgKGFbaSArIDFdIDw8IDgpICsgKGFbaSArIDJdIDw8IDE2KSArIChhW2kgKyAzXSA8PCAyNCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1kNWJsa3M7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWQ1MShzKSB7XG4gICAgICAgIHZhciBuID0gcy5sZW5ndGgsXG4gICAgICAgICAgICBzdGF0ZSA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICB0YWlsLFxuICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgbG8sXG4gICAgICAgICAgICBoaTtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBuOyBpICs9IDY0KSB7XG4gICAgICAgICAgICBtZDVjeWNsZShzdGF0ZSwgbWQ1YmxrKHMuc3Vic3RyaW5nKGkgLSA2NCwgaSkpKTtcbiAgICAgICAgfVxuICAgICAgICBzID0gcy5zdWJzdHJpbmcoaSAtIDY0KTtcbiAgICAgICAgbGVuZ3RoID0gcy5sZW5ndGg7XG4gICAgICAgIHRhaWwgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgdGFpbFtpID4+IDJdIHw9IHMuY2hhckNvZGVBdChpKSA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgfVxuICAgICAgICB0YWlsW2kgPj4gMl0gfD0gMHg4MCA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgaWYgKGkgPiA1NSkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICB0YWlsW2ldID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJld2FyZSB0aGF0IHRoZSBmaW5hbCBsZW5ndGggbWlnaHQgbm90IGZpdCBpbiAzMiBiaXRzIHNvIHdlIHRha2UgY2FyZSBvZiB0aGF0XG4gICAgICAgIHRtcCA9IG4gKiA4O1xuICAgICAgICB0bXAgPSB0bXAudG9TdHJpbmcoMTYpLm1hdGNoKC8oLio/KSguezAsOH0pJC8pO1xuICAgICAgICBsbyA9IHBhcnNlSW50KHRtcFsyXSwgMTYpO1xuICAgICAgICBoaSA9IHBhcnNlSW50KHRtcFsxXSwgMTYpIHx8IDA7XG5cbiAgICAgICAgdGFpbFsxNF0gPSBsbztcbiAgICAgICAgdGFpbFsxNV0gPSBoaTtcblxuICAgICAgICBtZDVjeWNsZShzdGF0ZSwgdGFpbCk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZDUxX2FycmF5KGEpIHtcbiAgICAgICAgdmFyIG4gPSBhLmxlbmd0aCxcbiAgICAgICAgICAgIHN0YXRlID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIHRhaWwsXG4gICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICBsbyxcbiAgICAgICAgICAgIGhpO1xuXG4gICAgICAgIGZvciAoaSA9IDY0OyBpIDw9IG47IGkgKz0gNjQpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHN0YXRlLCBtZDVibGtfYXJyYXkoYS5zdWJhcnJheShpIC0gNjQsIGkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3Qgc3VyZSBpZiBpdCBpcyBhIGJ1ZywgaG93ZXZlciBJRTEwIHdpbGwgYWx3YXlzIHByb2R1Y2UgYSBzdWIgYXJyYXkgb2YgbGVuZ3RoIDFcbiAgICAgICAgLy8gY29udGFpbmluZyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXJlbnQgYXJyYXkgaWYgdGhlIHN1YiBhcnJheSBzcGVjaWZpZWQgc3RhcnRzXG4gICAgICAgIC8vIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJlbnQgYXJyYXkgLSB3ZWlyZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy83NzE0NTIvdHlwZWQtYXJyYXktc3ViYXJyYXktaXNzdWVcbiAgICAgICAgYSA9IChpIC0gNjQpIDwgbiA/IGEuc3ViYXJyYXkoaSAtIDY0KSA6IG5ldyBVaW50OEFycmF5KDApO1xuXG4gICAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBhW2ldIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFpbFtpID4+IDJdIHw9IDB4ODAgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIGlmIChpID4gNTUpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHN0YXRlLCB0YWlsKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGFpbFtpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZXdhcmUgdGhhdCB0aGUgZmluYWwgbGVuZ3RoIG1pZ2h0IG5vdCBmaXQgaW4gMzIgYml0cyBzbyB3ZSB0YWtlIGNhcmUgb2YgdGhhdFxuICAgICAgICB0bXAgPSBuICogODtcbiAgICAgICAgdG1wID0gdG1wLnRvU3RyaW5nKDE2KS5tYXRjaCgvKC4qPykoLnswLDh9KSQvKTtcbiAgICAgICAgbG8gPSBwYXJzZUludCh0bXBbMl0sIDE2KTtcbiAgICAgICAgaGkgPSBwYXJzZUludCh0bXBbMV0sIDE2KSB8fCAwO1xuXG4gICAgICAgIHRhaWxbMTRdID0gbG87XG4gICAgICAgIHRhaWxbMTVdID0gaGk7XG5cbiAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaGV4KG4pIHtcbiAgICAgICAgdmFyIHMgPSAnJyxcbiAgICAgICAgICAgIGo7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCA0OyBqICs9IDEpIHtcbiAgICAgICAgICAgIHMgKz0gaGV4X2NoclsobiA+PiAoaiAqIDggKyA0KSkgJiAweDBGXSArIGhleF9jaHJbKG4gPj4gKGogKiA4KSkgJiAweDBGXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXgoeCkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHhbaV0gPSByaGV4KHhbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4LmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIEluIHNvbWUgY2FzZXMgdGhlIGZhc3QgYWRkMzIgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQuLlxuICAgIGlmIChoZXgobWQ1MSgnaGVsbG8nKSkgIT09ICc1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MicpIHtcbiAgICAgICAgYWRkMzIgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgICAgdmFyIGxzdyA9ICh4ICYgMHhGRkZGKSArICh5ICYgMHhGRkZGKSxcbiAgICAgICAgICAgICAgICBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgICAgICAgICAgIHJldHVybiAobXN3IDw8IDE2KSB8IChsc3cgJiAweEZGRkYpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogQXJyYXlCdWZmZXIgc2xpY2UgcG9seWZpbGwuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90dGF1YmVydC9ub2RlLWFycmF5YnVmZmVyLXNsaWNlXG4gICAgICovXG5cbiAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiAhQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKSB7XG4gICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFtcCh2YWwsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgfCAwKSB8fCAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCArIGxlbmd0aCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHZhbCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBjbGFtcChmcm9tLCBsZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBlbmQgPSBsZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIG51bSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQXJyYXk7XG5cbiAgICAgICAgICAgICAgICBpZiAodG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBjbGFtcCh0bywgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVnaW4gPiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBudW0gPSBlbmQgLSBiZWdpbjtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgQXJyYXlCdWZmZXIobnVtKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRBcnJheSA9IG5ldyBVaW50OEFycmF5KHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBzb3VyY2VBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMsIGJlZ2luLCBudW0pO1xuICAgICAgICAgICAgICAgIHRhcmdldEFycmF5LnNldChzb3VyY2VBcnJheSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlcnMuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiB0b1V0Zjgoc3RyKSB7XG4gICAgICAgIGlmICgvW1xcdTAwODAtXFx1RkZGRl0vLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgc3RyID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGY4U3RyMkFycmF5QnVmZmVyKHN0ciwgcmV0dXJuVUludDhBcnJheSkge1xuICAgICAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aCxcbiAgICAgICAgICAgYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpLFxuICAgICAgICAgICBhcnIgPSBuZXcgVWludDhBcnJheShidWZmKSxcbiAgICAgICAgICAgaTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGFycltpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldHVyblVJbnQ4QXJyYXkgPyBhcnIgOiBidWZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFycmF5QnVmZmVyMlV0ZjhTdHIoYnVmZikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheShidWZmKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnMoZmlyc3QsIHNlY29uZCwgcmV0dXJuVUludDhBcnJheSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QuYnl0ZUxlbmd0aCArIHNlY29uZC5ieXRlTGVuZ3RoKTtcblxuICAgICAgICByZXN1bHQuc2V0KG5ldyBVaW50OEFycmF5KGZpcnN0KSk7XG4gICAgICAgIHJlc3VsdC5zZXQobmV3IFVpbnQ4QXJyYXkoc2Vjb25kKSwgZmlyc3QuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIHJldHVyblVJbnQ4QXJyYXkgPyByZXN1bHQgOiByZXN1bHQuYnVmZmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhleFRvQmluYXJ5U3RyaW5nKGhleCkge1xuICAgICAgICB2YXIgYnl0ZXMgPSBbXSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGhleC5sZW5ndGgsXG4gICAgICAgICAgICB4O1xuXG4gICAgICAgIGZvciAoeCA9IDA7IHggPCBsZW5ndGggLSAxOyB4ICs9IDIpIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2gocGFyc2VJbnQoaGV4LnN1YnN0cih4LCAyKSwgMTYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgYnl0ZXMpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogU3BhcmtNRDUgT09QIGltcGxlbWVudGF0aW9uLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgY2xhc3MgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBtZDUsIG90aGVyd2lzZSB1c2UgdGhlXG4gICAgICogc3RhdGljIG1ldGhvZHMgaW5zdGVhZC5cbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIFNwYXJrTUQ1KCkge1xuICAgICAgICAvLyBjYWxsIHJlc2V0IHRvIGluaXQgdGhlIGluc3RhbmNlXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEgc3RyaW5nLlxuICAgICAqIEEgY29udmVyc2lvbiB3aWxsIGJlIGFwcGxpZWQgaWYgYW4gdXRmOCBzdHJpbmcgaXMgZGV0ZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gYmUgYXBwZW5kZWRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NwYXJrTUQ1fSBUaGUgaW5zdGFuY2UgaXRzZWxmXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgLy8gQ29udmVydHMgdGhlIHN0cmluZyB0byB1dGY4IGJ5dGVzIGlmIG5lY2Vzc2FyeVxuICAgICAgICAvLyBUaGVuIGFwcGVuZCBhcyBiaW5hcnlcbiAgICAgICAgdGhpcy5hcHBlbmRCaW5hcnkodG9VdGY4KHN0cikpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEgYmluYXJ5IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBUaGUgYmluYXJ5IHN0cmluZyB0byBiZSBhcHBlbmRlZFxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDV9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5wcm90b3R5cGUuYXBwZW5kQmluYXJ5ID0gZnVuY3Rpb24gKGNvbnRlbnRzKSB7XG4gICAgICAgIHRoaXMuX2J1ZmYgKz0gY29udGVudHM7XG4gICAgICAgIHRoaXMuX2xlbmd0aCArPSBjb250ZW50cy5sZW5ndGg7XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuX2J1ZmYubGVuZ3RoLFxuICAgICAgICAgICAgaTtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBsZW5ndGg7IGkgKz0gNjQpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHRoaXMuX2hhc2gsIG1kNWJsayh0aGlzLl9idWZmLnN1YnN0cmluZyhpIC0gNjQsIGkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9idWZmID0gdGhpcy5fYnVmZi5zdWJzdHJpbmcoaSAtIDY0KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIGluY3JlbWVudGFsIGNvbXB1dGF0aW9uLCByZXNldGluZyB0aGUgaW50ZXJuYWwgc3RhdGUgYW5kXG4gICAgICogcmV0dXJuaW5nIHRoZSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJhdyBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKHJhdykge1xuICAgICAgICB2YXIgYnVmZiA9IHRoaXMuX2J1ZmYsXG4gICAgICAgICAgICBsZW5ndGggPSBidWZmLmxlbmd0aCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLFxuICAgICAgICAgICAgcmV0O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgdGFpbFtpID4+IDJdIHw9IGJ1ZmYuY2hhckNvZGVBdChpKSA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpbmlzaCh0YWlsLCBsZW5ndGgpO1xuICAgICAgICByZXQgPSBoZXgodGhpcy5faGFzaCk7XG5cbiAgICAgICAgaWYgKHJhdykge1xuICAgICAgICAgICAgcmV0ID0gaGV4VG9CaW5hcnlTdHJpbmcocmV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjb21wdXRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NwYXJrTUQ1fSBUaGUgaW5zdGFuY2UgaXRzZWxmXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9idWZmID0gJyc7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBbMTczMjU4NDE5MywgLTI3MTczMzg3OSwgLTE3MzI1ODQxOTQsIDI3MTczMzg3OF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjb21wdXRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIHN0YXRlXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnVmZjogdGhpcy5fYnVmZixcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5fbGVuZ3RoLFxuICAgICAgICAgICAgaGFzaDogdGhpcy5faGFzaC5zbGljZSgpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjb21wdXRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBUaGUgc3RhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NwYXJrTUQ1fSBUaGUgaW5zdGFuY2UgaXRzZWxmXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2J1ZmYgPSBzdGF0ZS5idWZmO1xuICAgICAgICB0aGlzLl9sZW5ndGggPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBzdGF0ZS5oYXNoO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlcyBtZW1vcnkgdXNlZCBieSB0aGUgaW5jcmVtZW50YWwgYnVmZmVyIGFuZCBvdGhlciBhZGRpdGlvbmFsXG4gICAgICogcmVzb3VyY2VzLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIGluc3RhbmNlIGFnYWluLCB1c2UgcmVzZXQgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBTcGFya01ENS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2hhc2g7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9idWZmO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGVuZ3RoO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2ggdGhlIGZpbmFsIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSB0YWlsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gIHRhaWwgICBUaGUgdGFpbCAod2lsbCBiZSBtb2RpZmllZClcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlbWFpbmluZyBidWZmZXJcbiAgICAgKi9cbiAgICBTcGFya01ENS5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uICh0YWlsLCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGkgPSBsZW5ndGgsXG4gICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICBsbyxcbiAgICAgICAgICAgIGhpO1xuXG4gICAgICAgIHRhaWxbaSA+PiAyXSB8PSAweDgwIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICBpZiAoaSA+IDU1KSB7XG4gICAgICAgICAgICBtZDVjeWNsZSh0aGlzLl9oYXNoLCB0YWlsKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGFpbFtpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyB0aGUgZmluYWwgY29tcHV0YXRpb24gYmFzZWQgb24gdGhlIHRhaWwgYW5kIGxlbmd0aFxuICAgICAgICAvLyBCZXdhcmUgdGhhdCB0aGUgZmluYWwgbGVuZ3RoIG1heSBub3QgZml0IGluIDMyIGJpdHMgc28gd2UgdGFrZSBjYXJlIG9mIHRoYXRcbiAgICAgICAgdG1wID0gdGhpcy5fbGVuZ3RoICogODtcbiAgICAgICAgdG1wID0gdG1wLnRvU3RyaW5nKDE2KS5tYXRjaCgvKC4qPykoLnswLDh9KSQvKTtcbiAgICAgICAgbG8gPSBwYXJzZUludCh0bXBbMl0sIDE2KTtcbiAgICAgICAgaGkgPSBwYXJzZUludCh0bXBbMV0sIDE2KSB8fCAwO1xuXG4gICAgICAgIHRhaWxbMTRdID0gbG87XG4gICAgICAgIHRhaWxbMTVdID0gaGk7XG4gICAgICAgIG1kNWN5Y2xlKHRoaXMuX2hhc2gsIHRhaWwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyB0aGUgbWQ1IGhhc2ggb24gYSBzdHJpbmcuXG4gICAgICogQSBjb252ZXJzaW9uIHdpbGwgYmUgYXBwbGllZCBpZiB1dGY4IHN0cmluZyBpcyBkZXRlY3RlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSAgc3RyIFRoZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtyYXddIFRydWUgdG8gZ2V0IHRoZSByYXcgc3RyaW5nLCBmYWxzZSB0byBnZXQgdGhlIGhleCBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlc3VsdFxuICAgICAqL1xuICAgIFNwYXJrTUQ1Lmhhc2ggPSBmdW5jdGlvbiAoc3RyLCByYXcpIHtcbiAgICAgICAgLy8gQ29udmVydHMgdGhlIHN0cmluZyB0byB1dGY4IGJ5dGVzIGlmIG5lY2Vzc2FyeVxuICAgICAgICAvLyBUaGVuIGNvbXB1dGUgaXQgdXNpbmcgdGhlIGJpbmFyeSBmdW5jdGlvblxuICAgICAgICByZXR1cm4gU3BhcmtNRDUuaGFzaEJpbmFyeSh0b1V0Zjgoc3RyKSwgcmF3KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIG1kNSBoYXNoIG9uIGEgYmluYXJ5IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSAgY29udGVudCBUaGUgYmluYXJ5IHN0cmluZ1xuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Jhd10gICAgIFRydWUgdG8gZ2V0IHRoZSByYXcgc3RyaW5nLCBmYWxzZSB0byBnZXQgdGhlIGhleCBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlc3VsdFxuICAgICAqL1xuICAgIFNwYXJrTUQ1Lmhhc2hCaW5hcnkgPSBmdW5jdGlvbiAoY29udGVudCwgcmF3KSB7XG4gICAgICAgIHZhciBoYXNoID0gbWQ1MShjb250ZW50KSxcbiAgICAgICAgICAgIHJldCA9IGhleChoYXNoKTtcblxuICAgICAgICByZXR1cm4gcmF3ID8gaGV4VG9CaW5hcnlTdHJpbmcocmV0KSA6IHJldDtcbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBTcGFya01ENSBPT1AgaW1wbGVtZW50YXRpb24gZm9yIGFycmF5IGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBjbGFzcyB0byBwZXJmb3JtIGFuIGluY3JlbWVudGFsIG1kNSBPTkxZIGZvciBhcnJheSBidWZmZXJzLlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjYWxsIHJlc2V0IHRvIGluaXQgdGhlIGluc3RhbmNlXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhbiBhcnJheSBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnIgVGhlIGFycmF5IHRvIGJlIGFwcGVuZGVkXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENS5BcnJheUJ1ZmZlcn0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHZhciBidWZmID0gY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnModGhpcy5fYnVmZi5idWZmZXIsIGFyciwgdHJ1ZSksXG4gICAgICAgICAgICBsZW5ndGggPSBidWZmLmxlbmd0aCxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgdGhpcy5fbGVuZ3RoICs9IGFyci5ieXRlTGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDY0OyBpIDw9IGxlbmd0aDsgaSArPSA2NCkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUodGhpcy5faGFzaCwgbWQ1YmxrX2FycmF5KGJ1ZmYuc3ViYXJyYXkoaSAtIDY0LCBpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnVmZiA9IChpIC0gNjQpIDwgbGVuZ3RoID8gbmV3IFVpbnQ4QXJyYXkoYnVmZi5idWZmZXIuc2xpY2UoaSAtIDY0KSkgOiBuZXcgVWludDhBcnJheSgwKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIGluY3JlbWVudGFsIGNvbXB1dGF0aW9uLCByZXNldGluZyB0aGUgaW50ZXJuYWwgc3RhdGUgYW5kXG4gICAgICogcmV0dXJuaW5nIHRoZSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJhdyBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKHJhdykge1xuICAgICAgICB2YXIgYnVmZiA9IHRoaXMuX2J1ZmYsXG4gICAgICAgICAgICBsZW5ndGggPSBidWZmLmxlbmd0aCxcbiAgICAgICAgICAgIHRhaWwgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcmV0O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgdGFpbFtpID4+IDJdIHw9IGJ1ZmZbaV0gPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maW5pc2godGFpbCwgbGVuZ3RoKTtcbiAgICAgICAgcmV0ID0gaGV4KHRoaXMuX2hhc2gpO1xuXG4gICAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgICAgIHJldCA9IGhleFRvQmluYXJ5U3RyaW5nKHJldCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENS5BcnJheUJ1ZmZlcn0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fYnVmZiA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9oYXNoID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBzdGF0ZVxuICAgICAqL1xuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gU3BhcmtNRDUucHJvdG90eXBlLmdldFN0YXRlLmNhbGwodGhpcyk7XG5cbiAgICAgICAgLy8gQ29udmVydCBidWZmZXIgdG8gYSBzdHJpbmdcbiAgICAgICAgc3RhdGUuYnVmZiA9IGFycmF5QnVmZmVyMlV0ZjhTdHIoc3RhdGUuYnVmZik7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgVGhlIHN0YXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENS5BcnJheUJ1ZmZlcn0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBidWZmZXJcbiAgICAgICAgc3RhdGUuYnVmZiA9IHV0ZjhTdHIyQXJyYXlCdWZmZXIoc3RhdGUuYnVmZiwgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIFNwYXJrTUQ1LnByb3RvdHlwZS5zZXRTdGF0ZS5jYWxsKHRoaXMsIHN0YXRlKTtcbiAgICB9O1xuXG4gICAgU3BhcmtNRDUuQXJyYXlCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBTcGFya01ENS5wcm90b3R5cGUuZGVzdHJveTtcblxuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5fZmluaXNoID0gU3BhcmtNRDUucHJvdG90eXBlLl9maW5pc2g7XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyB0aGUgbWQ1IGhhc2ggb24gYW4gYXJyYXkgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyIFRoZSBhcnJheSBidWZmZXJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59ICAgICBbcmF3XSBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggb25lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5oYXNoID0gZnVuY3Rpb24gKGFyciwgcmF3KSB7XG4gICAgICAgIHZhciBoYXNoID0gbWQ1MV9hcnJheShuZXcgVWludDhBcnJheShhcnIpKSxcbiAgICAgICAgICAgIHJldCA9IGhleChoYXNoKTtcblxuICAgICAgICByZXR1cm4gcmF3ID8gaGV4VG9CaW5hcnlTdHJpbmcocmV0KSA6IHJldDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNwYXJrTUQ1O1xufSkpO1xuIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwiZ2xvYiIsIndpbmRvdyIsImUiLCJzZWxmIiwiU3BhcmtNRDUiLCJ1bmRlZmluZWQiLCJhZGQzMiIsImEiLCJiIiwiaGV4X2NociIsImNtbiIsInEiLCJ4IiwicyIsInQiLCJtZDVjeWNsZSIsImsiLCJjIiwiZCIsIm1kNWJsayIsIm1kNWJsa3MiLCJpIiwiY2hhckNvZGVBdCIsIm1kNWJsa19hcnJheSIsIm1kNTEiLCJuIiwibGVuZ3RoIiwic3RhdGUiLCJ0YWlsIiwidG1wIiwibG8iLCJoaSIsInN1YnN0cmluZyIsInRvU3RyaW5nIiwibWF0Y2giLCJwYXJzZUludCIsIm1kNTFfYXJyYXkiLCJzdWJhcnJheSIsIlVpbnQ4QXJyYXkiLCJyaGV4IiwiaiIsImhleCIsImpvaW4iLCJ5IiwibHN3IiwibXN3IiwiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiLCJzbGljZSIsImNsYW1wIiwidmFsIiwiTWF0aCIsIm1heCIsIm1pbiIsImZyb20iLCJ0byIsImJ5dGVMZW5ndGgiLCJiZWdpbiIsImVuZCIsIm51bSIsInRhcmdldCIsInRhcmdldEFycmF5Iiwic291cmNlQXJyYXkiLCJzZXQiLCJ0b1V0ZjgiLCJzdHIiLCJ0ZXN0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1dGY4U3RyMkFycmF5QnVmZmVyIiwicmV0dXJuVUludDhBcnJheSIsImJ1ZmYiLCJhcnIiLCJhcnJheUJ1ZmZlcjJVdGY4U3RyIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJjb25jYXRlbmF0ZUFycmF5QnVmZmVycyIsImZpcnN0Iiwic2Vjb25kIiwicmVzdWx0IiwiYnVmZmVyIiwiaGV4VG9CaW5hcnlTdHJpbmciLCJieXRlcyIsInB1c2giLCJzdWJzdHIiLCJyZXNldCIsImFwcGVuZCIsImFwcGVuZEJpbmFyeSIsImNvbnRlbnRzIiwiX2J1ZmYiLCJfbGVuZ3RoIiwiX2hhc2giLCJyYXciLCJyZXQiLCJfZmluaXNoIiwiZ2V0U3RhdGUiLCJoYXNoIiwic2V0U3RhdGUiLCJkZXN0cm95IiwiaGFzaEJpbmFyeSIsImNvbnRlbnQiLCJjYWxsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/spark-md5/spark-md5.js\n"); /***/ }), /***/ "(rsc)/./node_modules/spark-md5/spark-md5.js": /*!*********************************************!*\ !*** ./node_modules/spark-md5/spark-md5.js ***! \*********************************************/ /***/ ((module) => { eval("\n(function(factory) {\n if (true) {\n // Node/CommonJS\n module.exports = factory();\n } else { var glob; }\n})(function(undefined) {\n \"use strict\";\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */ /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */ var add32 = function(a, b) {\n return a + b & 0xFFFFFFFF;\n }, hex_chr = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\"\n ];\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32(a << s | a >>> 32 - s, b);\n }\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i; /* Andy King said do it this way. */ \n for(i = 0; i < 64; i += 4){\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i; /* Andy King said do it this way. */ \n for(i = 0; i < 64; i += 4){\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ], i, length, tail, tmp, lo, hi;\n for(i = 64; i <= n; i += 64){\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ], i, length, tail, tmp, lo, hi;\n for(i = 64; i <= n; i += 64){\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for(j = 0; j < 4; j += 1){\n s += hex_chr[n >> j * 8 + 4 & 0x0F] + hex_chr[n >> j * 8 & 0x0F];\n }\n return s;\n }\n function hex(x) {\n var i;\n for(i = 0; i < x.length; i += 1){\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n // In some cases the fast add32 function cannot be used..\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") {\n add32 = function(x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xFFFF;\n };\n }\n // ---------------------------------------------------\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */ if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n // ---------------------------------------------------\n /**\n * Helpers.\n */ function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for(i = 0; i < length; i += 1){\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for(x = 0; x < length - 1; x += 2){\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n // ---------------------------------------------------\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */ function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.append = function(str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n return this;\n };\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for(i = 64; i <= length; i += 64){\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ], ret;\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ];\n return this;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */ SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */ SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */ SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */ SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for(i = 0; i < 16; i += 1){\n tail[i] = 0;\n }\n }\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.hash = function(str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n // ---------------------------------------------------\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */ SparkMD5.ArrayBuffer = function() {\n // call reset to init the instance\n this.reset();\n };\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for(i = 64; i <= length; i += 64){\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */ SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ], i, ret;\n for(i = 0; i < length; i += 1){\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ];\n return this;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */ SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */ SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} [raw] True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */ SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvc3BhcmstbWQ1L3NwYXJrLW1kNS5qcyIsIm1hcHBpbmdzIjoiO0FBQUMsVUFBVUEsT0FBTztJQUNkLElBQUksSUFBbUIsRUFBVTtRQUM3QixnQkFBZ0I7UUFDaEJFLE9BQU9ELE9BQU8sR0FBR0Q7SUFDckIsT0FBTyxhQWNOO0FBQ0wsR0FBRSxTQUFVVSxTQUFTO0lBRWpCO0lBRUE7Ozs7OztLQU1DLEdBRUQ7Ozs7a0NBSThCLEdBQzlCLElBQUlDLFFBQVEsU0FBVUMsQ0FBQyxFQUFFQyxDQUFDO1FBQ3RCLE9BQU8sSUFBS0EsSUFBSztJQUNyQixHQUNJQyxVQUFVO1FBQUM7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7UUFBSztRQUFLO1FBQUs7S0FBSTtJQUc5RixTQUFTQyxJQUFJQyxDQUFDLEVBQUVKLENBQUMsRUFBRUMsQ0FBQyxFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRUMsQ0FBQztRQUN6QlAsSUFBSUQsTUFBTUEsTUFBTUMsR0FBR0ksSUFBSUwsTUFBTU0sR0FBR0U7UUFDaEMsT0FBT1IsTUFBTSxLQUFNTyxJQUFNTixNQUFPLEtBQUtNLEdBQUtMO0lBQzlDO0lBRUEsU0FBU08sU0FBU0gsQ0FBQyxFQUFFSSxDQUFDO1FBQ2xCLElBQUlULElBQUlLLENBQUMsQ0FBQyxFQUFFLEVBQ1JKLElBQUlJLENBQUMsQ0FBQyxFQUFFLEVBQ1JLLElBQUlMLENBQUMsQ0FBQyxFQUFFLEVBQ1JNLElBQUlOLENBQUMsQ0FBQyxFQUFFO1FBRVpMLEtBQUssQ0FBQ0MsSUFBSVMsSUFBSSxDQUFDVCxJQUFJVSxDQUFBQSxJQUFLRixDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVk7UUFDM0NULElBQUssQ0FBQ0EsS0FBSyxJQUFJQSxNQUFNLEVBQUMsSUFBS0MsSUFBSTtRQUMvQlUsS0FBSyxDQUFDWCxJQUFJQyxJQUFJLENBQUNELElBQUlVLENBQUFBLElBQUtELENBQUMs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RWpELDZCQUE2QjtRQUM3QjNFLE1BQU00QyxJQUFJLEdBQUdFLG9CQUFvQjlDLE1BQU00QyxJQUFJO1FBRTNDLE9BQU81QztJQUNYO0lBRUE7Ozs7OztLQU1DLEdBQ0R2QixTQUFTMEMsV0FBVyxDQUFDQyxTQUFTLENBQUNtRCxRQUFRLEdBQUcsU0FBVXZFLEtBQUs7UUFDckQsMkJBQTJCO1FBQzNCQSxNQUFNNEMsSUFBSSxHQUFHRixvQkFBb0IxQyxNQUFNNEMsSUFBSSxFQUFFO1FBRTdDLE9BQU9uRSxTQUFTMkMsU0FBUyxDQUFDbUQsUUFBUSxDQUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFM0U7SUFDbEQ7SUFFQXZCLFNBQVMwQyxXQUFXLENBQUNDLFNBQVMsQ0FBQ29ELE9BQU8sR0FBRy9GLFNBQVMyQyxTQUFTLENBQUNvRCxPQUFPO0lBRW5FL0YsU0FBUzBDLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDZ0QsT0FBTyxHQUFHM0YsU0FBUzJDLFNBQVMsQ0FBQ2dELE9BQU87SUFFbkU7Ozs7Ozs7S0FPQyxHQUNEM0YsU0FBUzBDLFdBQVcsQ0FBQ21ELElBQUksR0FBRyxTQUFVekIsR0FBRyxFQUFFcUIsR0FBRztRQUMxQyxJQUFJSSxPQUFPN0QsV0FBVyxJQUFJRSxXQUFXa0MsT0FDakNzQixNQUFNckQsSUFBSXdEO1FBRWQsT0FBT0osTUFBTVgsa0JBQWtCWSxPQUFPQTtJQUMxQztJQUVBLE9BQU8xRjtBQUNYIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvc3BhcmstbWQ1L3NwYXJrLW1kNS5qcz9jNTU4Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gTm9kZS9Db21tb25KU1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTURcbiAgICAgICAgZGVmaW5lKGZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAod2l0aCBzdXBwb3J0IGZvciB3ZWIgd29ya2VycylcbiAgICAgICAgdmFyIGdsb2I7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdsb2IgPSB3aW5kb3c7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGdsb2IgPSBzZWxmO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2xvYi5TcGFya01ENSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qXG4gICAgICogRmFzdGVzdCBtZDUgaW1wbGVtZW50YXRpb24gYXJvdW5kIChKS00gbWQ1KS5cbiAgICAgKiBDcmVkaXRzOiBKb3NlcGggTXllcnNcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUtdGV4dC5odG1sXG4gICAgICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9tZDUtc2hvb3RvdXQvN1xuICAgICAqL1xuXG4gICAgLyogdGhpcyBmdW5jdGlvbiBpcyBtdWNoIGZhc3RlcixcbiAgICAgIHNvIGlmIHBvc3NpYmxlIHdlIHVzZSBpdC4gU29tZSBJRXNcbiAgICAgIGFyZSB0aGUgb25seSBvbmVzIEkga25vdyBvZiB0aGF0XG4gICAgICBuZWVkIHRoZSBpZGlvdGljIHNlY29uZCBmdW5jdGlvbixcbiAgICAgIGdlbmVyYXRlZCBieSBhbiBpZiBjbGF1c2UuICAqL1xuICAgIHZhciBhZGQzMiA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSArIGIpICYgMHhGRkZGRkZGRjtcbiAgICB9LFxuICAgICAgICBoZXhfY2hyID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJ107XG5cblxuICAgIGZ1bmN0aW9uIGNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgICAgIGEgPSBhZGQzMihhZGQzMihhLCBxKSwgYWRkMzIoeCwgdCkpO1xuICAgICAgICByZXR1cm4gYWRkMzIoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZDVjeWNsZSh4LCBrKSB7XG4gICAgICAgIHZhciBhID0geFswXSxcbiAgICAgICAgICAgIGIgPSB4WzFdLFxuICAgICAgICAgICAgYyA9IHhbMl0sXG4gICAgICAgICAgICBkID0geFszXTtcblxuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzBdIC0gNjgwODc2OTM2IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBiIHwgfmEgJiBjKSArIGtbMV0gLSAzODk1NjQ1ODYgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBhIHwgfmQgJiBiKSArIGtbMl0gKyA2MDYxMDU4MTkgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgJiBkIHwgfmMgJiBhKSArIGtbM10gLSAxMDQ0NTI1MzMwIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzRdIC0gMTc2NDE4ODk3IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBiIHwgfmEgJiBjKSArIGtbNV0gKyAxMjAwMDgwNDI2IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYSB8IH5kICYgYikgKyBrWzZdIC0gMTQ3MzIzMTM0MSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGQgfCB+YyAmIGEpICsga1s3XSAtIDQ1NzA1OTgzIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzhdICsgMTc3MDAzNTQxNiB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYiB8IH5hICYgYykgKyBrWzldIC0gMTk1ODQxNDQxNyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGEgfCB+ZCAmIGIpICsga1sxMF0gLSA0MjA2MyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGQgfCB+YyAmIGEpICsga1sxMV0gLSAxOTkwNDA0MTYyIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzEyXSArIDE4MDQ2MDM2ODIgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGIgfCB+YSAmIGMpICsga1sxM10gLSA0MDM0MTEwMSB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGEgfCB+ZCAmIGIpICsga1sxNF0gLSAxNTAyMDAyMjkwIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgZCB8IH5jICYgYSkgKyBrWzE1XSArIDEyMzY1MzUzMjkgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyB8IDA7XG5cbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1sxXSAtIDE2NTc5NjUxMCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNSB8IGEgPj4+IDI3KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYyB8IGIgJiB+YykgKyBrWzZdIC0gMTA2OTUwMTYzMiB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzExXSArIDY0MzcxNzcxMyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGEgfCBkICYgfmEpICsga1swXSAtIDM3Mzg5NzMwMiB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1s1XSAtIDcwMTU1ODY5MSB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNSB8IGEgPj4+IDI3KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYyB8IGIgJiB+YykgKyBrWzEwXSArIDM4MDE2MDgzIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBiIHwgYSAmIH5iKSArIGtbMTVdIC0gNjYwNDc4MzM1IHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzRdIC0gNDA1NTM3ODQ4IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgZCB8IGMgJiB+ZCkgKyBrWzldICsgNTY4NDQ2NDM4IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbMTRdIC0gMTAxOTgwMzY5MCB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzNdIC0gMTg3MzYzOTYxIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzhdICsgMTE2MzUzMTUwMSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1sxM10gLSAxNDQ0NjgxNDY3IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbMl0gLSA1MTQwMzc4NCB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzddICsgMTczNTMyODQ3MyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGEgfCBkICYgfmEpICsga1sxMl0gLSAxOTI2NjA3NzM0IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuXG4gICAgICAgIGEgKz0gKGIgXiBjIF4gZCkgKyBrWzVdIC0gMzc4NTU4IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzhdIC0gMjAyMjU3NDQ2MyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCBeIGEgXiBiKSArIGtbMTFdICsgMTgzOTAzMDU2MiB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbMTRdIC0gMzUzMDk1NTYgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiBeIGMgXiBkKSArIGtbMV0gLSAxNTMwOTkyMDYwIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzRdICsgMTI3Mjg5MzM1MyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCBeIGEgXiBiKSArIGtbN10gLSAxNTU0OTc2MzIgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE2IHwgYyA+Pj4gMTYpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgXiBkIF4gYSkgKyBrWzEwXSAtIDEwOTQ3MzA2NDAgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiBeIGMgXiBkKSArIGtbMTNdICsgNjgxMjc5MTc0IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzBdIC0gMzU4NTM3MjIyIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkIF4gYSBeIGIpICsga1szXSAtIDcyMjUyMTk3OSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbNl0gKyA3NjAyOTE4OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgfCAwO1xuICAgICAgICBhICs9IChiIF4gYyBeIGQpICsga1s5XSAtIDY0MDM2NDQ4NyB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhIF4gYiBeIGMpICsga1sxMl0gLSA0MjE4MTU4MzUgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgXiBhIF4gYikgKyBrWzE1XSArIDUzMDc0MjUyMCB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbMl0gLSA5OTUzMzg2NTEgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcblxuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1swXSAtIDE5ODYzMDg0NCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1s3XSArIDExMjY4OTE0MTUgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzE0XSAtIDE0MTYzNTQ5MDUgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBrWzVdIC0gNTc0MzQwNTUgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIxIHxiID4+PiAxMSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGtbMTJdICsgMTcwMDQ4NTU3MSB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1szXSAtIDE4OTQ5ODY2MDYgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzEwXSAtIDEwNTE1MjMgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBrWzFdIC0gMjA1NDkyMjc5OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfGIgPj4+IDExKSArIGMgfCAwO1xuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1s4XSArIDE4NzMzMTMzNTkgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDYgfCBhID4+PiAyNikgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYiBeIChhIHwgfmMpKSArIGtbMTVdIC0gMzA2MTE3NDQgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzZdIC0gMTU2MDE5ODM4MCB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbMTNdICsgMTMwOTE1MTY0OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfGIgPj4+IDExKSArIGMgfCAwO1xuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1s0XSAtIDE0NTUyMzA3MCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1sxMV0gLSAxMTIwMjEwMzc5IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMCB8IGQgPj4+IDIyKSArIGEgfCAwO1xuICAgICAgICBjICs9IChhIF4gKGQgfCB+YikpICsga1syXSArIDcxODc4NzI1OSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbOV0gLSAzNDM0ODU1NTEgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyB8IDA7XG5cbiAgICAgICAgeFswXSA9IGEgKyB4WzBdIHwgMDtcbiAgICAgICAgeFsxXSA9IGIgKyB4WzFdIHwgMDtcbiAgICAgICAgeFsyXSA9IGMgKyB4WzJdIHwgMDtcbiAgICAgICAgeFszXSA9IGQgKyB4WzNdIHwgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZDVibGsocykge1xuICAgICAgICB2YXIgbWQ1YmxrcyA9IFtdLFxuICAgICAgICAgICAgaTsgLyogQW5keSBLaW5nIHNhaWQgZG8gaXQgdGhpcyB3YXkuICovXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpIHtcbiAgICAgICAgICAgIG1kNWJsa3NbaSA+PiAyXSA9IHMuY2hhckNvZGVBdChpKSArIChzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDgpICsgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpICsgKHMuY2hhckNvZGVBdChpICsgMykgPDwgMjQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZDVibGtzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNWJsa19hcnJheShhKSB7XG4gICAgICAgIHZhciBtZDVibGtzID0gW10sXG4gICAgICAgICAgICBpOyAvKiBBbmR5IEtpbmcgc2FpZCBkbyBpdCB0aGlzIHdheS4gKi9cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkgKz0gNCkge1xuICAgICAgICAgICAgbWQ1Ymxrc1tpID4+IDJdID0gYVtpXSArIChhW2kgKyAxXSA8PCA4KSArIChhW2kgKyAyXSA8PCAxNikgKyAoYVtpICsgM10gPDwgMjQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZDVibGtzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNTEocykge1xuICAgICAgICB2YXIgbiA9IHMubGVuZ3RoLFxuICAgICAgICAgICAgc3RhdGUgPSBbMTczMjU4NDE5MywgLTI3MTczMzg3OSwgLTE3MzI1ODQxOTQsIDI3MTczMzg3OF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgdGFpbCxcbiAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgIGxvLFxuICAgICAgICAgICAgaGk7XG5cbiAgICAgICAgZm9yIChpID0gNjQ7IGkgPD0gbjsgaSArPSA2NCkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIG1kNWJsayhzLnN1YnN0cmluZyhpIC0gNjQsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcyA9IHMuc3Vic3RyaW5nKGkgLSA2NCk7XG4gICAgICAgIGxlbmd0aCA9IHMubGVuZ3RoO1xuICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBzLmNoYXJDb2RlQXQoaSkgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIH1cbiAgICAgICAgdGFpbFtpID4+IDJdIHw9IDB4ODAgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIGlmIChpID4gNTUpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHN0YXRlLCB0YWlsKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGFpbFtpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZXdhcmUgdGhhdCB0aGUgZmluYWwgbGVuZ3RoIG1pZ2h0IG5vdCBmaXQgaW4gMzIgYml0cyBzbyB3ZSB0YWtlIGNhcmUgb2YgdGhhdFxuICAgICAgICB0bXAgPSBuICogODtcbiAgICAgICAgdG1wID0gdG1wLnRvU3RyaW5nKDE2KS5tYXRjaCgvKC4qPykoLnswLDh9KSQvKTtcbiAgICAgICAgbG8gPSBwYXJzZUludCh0bXBbMl0sIDE2KTtcbiAgICAgICAgaGkgPSBwYXJzZUludCh0bXBbMV0sIDE2KSB8fCAwO1xuXG4gICAgICAgIHRhaWxbMTRdID0gbG87XG4gICAgICAgIHRhaWxbMTVdID0gaGk7XG5cbiAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWQ1MV9hcnJheShhKSB7XG4gICAgICAgIHZhciBuID0gYS5sZW5ndGgsXG4gICAgICAgICAgICBzdGF0ZSA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICB0YWlsLFxuICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgbG8sXG4gICAgICAgICAgICBoaTtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBuOyBpICs9IDY0KSB7XG4gICAgICAgICAgICBtZDVjeWNsZShzdGF0ZSwgbWQ1YmxrX2FycmF5KGEuc3ViYXJyYXkoaSAtIDY0LCBpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90IHN1cmUgaWYgaXQgaXMgYSBidWcsIGhvd2V2ZXIgSUUxMCB3aWxsIGFsd2F5cyBwcm9kdWNlIGEgc3ViIGFycmF5IG9mIGxlbmd0aCAxXG4gICAgICAgIC8vIGNvbnRhaW5pbmcgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGFyZW50IGFycmF5IGlmIHRoZSBzdWIgYXJyYXkgc3BlY2lmaWVkIHN0YXJ0c1xuICAgICAgICAvLyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgcGFyZW50IGFycmF5IC0gd2VpcmQuXG4gICAgICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNzcxNDUyL3R5cGVkLWFycmF5LXN1YmFycmF5LWlzc3VlXG4gICAgICAgIGEgPSAoaSAtIDY0KSA8IG4gPyBhLnN1YmFycmF5KGkgLSA2NCkgOiBuZXcgVWludDhBcnJheSgwKTtcblxuICAgICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgICAgdGFpbCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB0YWlsW2kgPj4gMl0gfD0gYVtpXSA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWxbaSA+PiAyXSB8PSAweDgwIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICBpZiAoaSA+IDU1KSB7XG4gICAgICAgICAgICBtZDVjeWNsZShzdGF0ZSwgdGFpbCk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHRhaWxbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmV3YXJlIHRoYXQgdGhlIGZpbmFsIGxlbmd0aCBtaWdodCBub3QgZml0IGluIDMyIGJpdHMgc28gd2UgdGFrZSBjYXJlIG9mIHRoYXRcbiAgICAgICAgdG1wID0gbiAqIDg7XG4gICAgICAgIHRtcCA9IHRtcC50b1N0cmluZygxNikubWF0Y2goLyguKj8pKC57MCw4fSkkLyk7XG4gICAgICAgIGxvID0gcGFyc2VJbnQodG1wWzJdLCAxNik7XG4gICAgICAgIGhpID0gcGFyc2VJbnQodG1wWzFdLCAxNikgfHwgMDtcblxuICAgICAgICB0YWlsWzE0XSA9IGxvO1xuICAgICAgICB0YWlsWzE1XSA9IGhpO1xuXG4gICAgICAgIG1kNWN5Y2xlKHN0YXRlLCB0YWlsKTtcblxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmhleChuKSB7XG4gICAgICAgIHZhciBzID0gJycsXG4gICAgICAgICAgICBqO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgNDsgaiArPSAxKSB7XG4gICAgICAgICAgICBzICs9IGhleF9jaHJbKG4gPj4gKGogKiA4ICsgNCkpICYgMHgwRl0gKyBoZXhfY2hyWyhuID4+IChqICogOCkpICYgMHgwRl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGV4KHgpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB4W2ldID0gcmhleCh4W2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvLyBJbiBzb21lIGNhc2VzIHRoZSBmYXN0IGFkZDMyIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkLi5cbiAgICBpZiAoaGV4KG1kNTEoJ2hlbGxvJykpICE9PSAnNWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTInKSB7XG4gICAgICAgIGFkZDMyID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICAgIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRiksXG4gICAgICAgICAgICAgICAgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gICAgICAgICAgICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEFycmF5QnVmZmVyIHNsaWNlIHBvbHlmaWxsLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHRhdWJlcnQvbm9kZS1hcnJheWJ1ZmZlci1zbGljZVxuICAgICAqL1xuXG4gICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgIUFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSkge1xuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2xhbXAodmFsLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAodmFsIHwgMCkgfHwgMDtcblxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh2YWwgKyBsZW5ndGgsIDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih2YWwsIGxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luID0gY2xhbXAoZnJvbSwgbGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBudW0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUFycmF5O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gY2xhbXAodG8sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJlZ2luID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbnVtID0gZW5kIC0gYmVnaW47XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IEFycmF5QnVmZmVyKG51bSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0QXJyYXkgPSBuZXcgVWludDhBcnJheSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgc291cmNlQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLCBiZWdpbiwgbnVtKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRBcnJheS5zZXQoc291cmNlQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXJzLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gdG9VdGY4KHN0cikge1xuICAgICAgICBpZiAoL1tcXHUwMDgwLVxcdUZGRkZdLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRmOFN0cjJBcnJheUJ1ZmZlcihzdHIsIHJldHVyblVJbnQ4QXJyYXkpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGgsXG4gICAgICAgICAgIGJ1ZmYgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKSxcbiAgICAgICAgICAgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmZiksXG4gICAgICAgICAgIGk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5VSW50OEFycmF5ID8gYXJyIDogYnVmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcnJheUJ1ZmZlcjJVdGY4U3RyKGJ1ZmYpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoYnVmZikpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlQXJyYXlCdWZmZXJzKGZpcnN0LCBzZWNvbmQsIHJldHVyblVJbnQ4QXJyYXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGZpcnN0LmJ5dGVMZW5ndGggKyBzZWNvbmQuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgcmVzdWx0LnNldChuZXcgVWludDhBcnJheShmaXJzdCkpO1xuICAgICAgICByZXN1bHQuc2V0KG5ldyBVaW50OEFycmF5KHNlY29uZCksIGZpcnN0LmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5VSW50OEFycmF5ID8gcmVzdWx0IDogcmVzdWx0LmJ1ZmZlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXhUb0JpbmFyeVN0cmluZyhoZXgpIHtcbiAgICAgICAgdmFyIGJ5dGVzID0gW10sXG4gICAgICAgICAgICBsZW5ndGggPSBoZXgubGVuZ3RoLFxuICAgICAgICAgICAgeDtcblxuICAgICAgICBmb3IgKHggPSAwOyB4IDwgbGVuZ3RoIC0gMTsgeCArPSAyKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHBhcnNlSW50KGhleC5zdWJzdHIoeCwgMiksIDE2KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGJ5dGVzKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIFNwYXJrTUQ1IE9PUCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGNsYXNzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50YWwgbWQ1LCBvdGhlcndpc2UgdXNlIHRoZVxuICAgICAqIHN0YXRpYyBtZXRob2RzIGluc3RlYWQuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBTcGFya01ENSgpIHtcbiAgICAgICAgLy8gY2FsbCByZXNldCB0byBpbml0IHRoZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhIHN0cmluZy5cbiAgICAgKiBBIGNvbnZlcnNpb24gd2lsbCBiZSBhcHBsaWVkIGlmIGFuIHV0Zjggc3RyaW5nIGlzIGRldGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGJlIGFwcGVuZGVkXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdXRmOCBieXRlcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgLy8gVGhlbiBhcHBlbmQgYXMgYmluYXJ5XG4gICAgICAgIHRoaXMuYXBwZW5kQmluYXJ5KHRvVXRmOChzdHIpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhIGJpbmFyeSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgVGhlIGJpbmFyeSBzdHJpbmcgdG8gYmUgYXBwZW5kZWRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NwYXJrTUQ1fSBUaGUgaW5zdGFuY2UgaXRzZWxmXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmFwcGVuZEJpbmFyeSA9IGZ1bmN0aW9uIChjb250ZW50cykge1xuICAgICAgICB0aGlzLl9idWZmICs9IGNvbnRlbnRzO1xuICAgICAgICB0aGlzLl9sZW5ndGggKz0gY29udGVudHMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLl9idWZmLmxlbmd0aCxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgZm9yIChpID0gNjQ7IGkgPD0gbGVuZ3RoOyBpICs9IDY0KSB7XG4gICAgICAgICAgICBtZDVjeWNsZSh0aGlzLl9oYXNoLCBtZDVibGsodGhpcy5fYnVmZi5zdWJzdHJpbmcoaSAtIDY0LCBpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnVmZiA9IHRoaXMuX2J1ZmYuc3Vic3RyaW5nKGkgLSA2NCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSBpbmNyZW1lbnRhbCBjb21wdXRhdGlvbiwgcmVzZXRpbmcgdGhlIGludGVybmFsIHN0YXRlIGFuZFxuICAgICAqIHJldHVybmluZyB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSByYXcgVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChyYXcpIHtcbiAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLl9idWZmLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdGFpbCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSxcbiAgICAgICAgICAgIHJldDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBidWZmLmNoYXJDb2RlQXQoaSkgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maW5pc2godGFpbCwgbGVuZ3RoKTtcbiAgICAgICAgcmV0ID0gaGV4KHRoaXMuX2hhc2gpO1xuXG4gICAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgICAgIHJldCA9IGhleFRvQmluYXJ5U3RyaW5nKHJldCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fYnVmZiA9ICcnO1xuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9oYXNoID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBzdGF0ZVxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1ZmY6IHRoaXMuX2J1ZmYsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMuX2xlbmd0aCxcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuX2hhc2guc2xpY2UoKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgVGhlIHN0YXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmID0gc3RhdGUuYnVmZjtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICB0aGlzLl9oYXNoID0gc3RhdGUuaGFzaDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgbWVtb3J5IHVzZWQgYnkgdGhlIGluY3JlbWVudGFsIGJ1ZmZlciBhbmQgb3RoZXIgYWRkaXRpb25hbFxuICAgICAqIHJlc291cmNlcy4gSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBpbnN0YW5jZSBhZ2FpbiwgdXNlIHJlc2V0IGluc3RlYWQuXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9oYXNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fYnVmZjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xlbmd0aDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRoZSBmaW5hbCBjYWxjdWxhdGlvbiBiYXNlZCBvbiB0aGUgdGFpbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXl9ICB0YWlsICAgVGhlIHRhaWwgKHdpbGwgYmUgbW9kaWZpZWQpXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZW1haW5pbmcgYnVmZmVyXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAodGFpbCwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBpID0gbGVuZ3RoLFxuICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgbG8sXG4gICAgICAgICAgICBoaTtcblxuICAgICAgICB0YWlsW2kgPj4gMl0gfD0gMHg4MCA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgaWYgKGkgPiA1NSkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUodGhpcy5faGFzaCwgdGFpbCk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHRhaWxbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG8gdGhlIGZpbmFsIGNvbXB1dGF0aW9uIGJhc2VkIG9uIHRoZSB0YWlsIGFuZCBsZW5ndGhcbiAgICAgICAgLy8gQmV3YXJlIHRoYXQgdGhlIGZpbmFsIGxlbmd0aCBtYXkgbm90IGZpdCBpbiAzMiBiaXRzIHNvIHdlIHRha2UgY2FyZSBvZiB0aGF0XG4gICAgICAgIHRtcCA9IHRoaXMuX2xlbmd0aCAqIDg7XG4gICAgICAgIHRtcCA9IHRtcC50b1N0cmluZygxNikubWF0Y2goLyguKj8pKC57MCw4fSkkLyk7XG4gICAgICAgIGxvID0gcGFyc2VJbnQodG1wWzJdLCAxNik7XG4gICAgICAgIGhpID0gcGFyc2VJbnQodG1wWzFdLCAxNikgfHwgMDtcblxuICAgICAgICB0YWlsWzE0XSA9IGxvO1xuICAgICAgICB0YWlsWzE1XSA9IGhpO1xuICAgICAgICBtZDVjeWNsZSh0aGlzLl9oYXNoLCB0YWlsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIG1kNSBoYXNoIG9uIGEgc3RyaW5nLlxuICAgICAqIEEgY29udmVyc2lvbiB3aWxsIGJlIGFwcGxpZWQgaWYgdXRmOCBzdHJpbmcgaXMgZGV0ZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gIHN0ciBUaGUgc3RyaW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbcmF3XSBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5oYXNoID0gZnVuY3Rpb24gKHN0ciwgcmF3KSB7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdXRmOCBieXRlcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgLy8gVGhlbiBjb21wdXRlIGl0IHVzaW5nIHRoZSBiaW5hcnkgZnVuY3Rpb25cbiAgICAgICAgcmV0dXJuIFNwYXJrTUQ1Lmhhc2hCaW5hcnkodG9VdGY4KHN0ciksIHJhdyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSBtZDUgaGFzaCBvbiBhIGJpbmFyeSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gIGNvbnRlbnQgVGhlIGJpbmFyeSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtyYXddICAgICBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5oYXNoQmluYXJ5ID0gZnVuY3Rpb24gKGNvbnRlbnQsIHJhdykge1xuICAgICAgICB2YXIgaGFzaCA9IG1kNTEoY29udGVudCksXG4gICAgICAgICAgICByZXQgPSBoZXgoaGFzaCk7XG5cbiAgICAgICAgcmV0dXJuIHJhdyA/IGhleFRvQmluYXJ5U3RyaW5nKHJldCkgOiByZXQ7XG4gICAgfTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogU3BhcmtNRDUgT09QIGltcGxlbWVudGF0aW9uIGZvciBhcnJheSBidWZmZXJzLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgY2xhc3MgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBtZDUgT05MWSBmb3IgYXJyYXkgYnVmZmVycy5cbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2FsbCByZXNldCB0byBpbml0IHRoZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgYW4gYXJyYXkgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyIFRoZSBhcnJheSB0byBiZSBhcHBlbmRlZFxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgICB2YXIgYnVmZiA9IGNvbmNhdGVuYXRlQXJyYXlCdWZmZXJzKHRoaXMuX2J1ZmYuYnVmZmVyLCBhcnIsIHRydWUpLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICBpO1xuXG4gICAgICAgIHRoaXMuX2xlbmd0aCArPSBhcnIuYnl0ZUxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBsZW5ndGg7IGkgKz0gNjQpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHRoaXMuX2hhc2gsIG1kNWJsa19hcnJheShidWZmLnN1YmFycmF5KGkgLSA2NCwgaSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2J1ZmYgPSAoaSAtIDY0KSA8IGxlbmd0aCA/IG5ldyBVaW50OEFycmF5KGJ1ZmYuYnVmZmVyLnNsaWNlKGkgLSA2NCkpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSBpbmNyZW1lbnRhbCBjb21wdXRhdGlvbiwgcmVzZXRpbmcgdGhlIGludGVybmFsIHN0YXRlIGFuZFxuICAgICAqIHJldHVybmluZyB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSByYXcgVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUuQXJyYXlCdWZmZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChyYXcpIHtcbiAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLl9idWZmLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHJldDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBidWZmW2ldIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKHRhaWwsIGxlbmd0aCk7XG4gICAgICAgIHJldCA9IGhleCh0aGlzLl9oYXNoKTtcblxuICAgICAgICBpZiAocmF3KSB7XG4gICAgICAgICAgICByZXQgPSBoZXhUb0JpbmFyeVN0cmluZyhyZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmYgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5faGFzaCA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgc3RhdGVcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuZ2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IFNwYXJrTUQ1LnByb3RvdHlwZS5nZXRTdGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIC8vIENvbnZlcnQgYnVmZmVyIHRvIGEgc3RyaW5nXG4gICAgICAgIHN0YXRlLmJ1ZmYgPSBhcnJheUJ1ZmZlcjJVdGY4U3RyKHN0YXRlLmJ1ZmYpO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIFRoZSBzdGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gYnVmZmVyXG4gICAgICAgIHN0YXRlLmJ1ZmYgPSB1dGY4U3RyMkFycmF5QnVmZmVyKHN0YXRlLmJ1ZmYsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiBTcGFya01ENS5wcm90b3R5cGUuc2V0U3RhdGUuY2FsbCh0aGlzLCBzdGF0ZSk7XG4gICAgfTtcblxuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gU3BhcmtNRDUucHJvdG90eXBlLmRlc3Ryb3k7XG5cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuX2ZpbmlzaCA9IFNwYXJrTUQ1LnByb3RvdHlwZS5fZmluaXNoO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIG1kNSBoYXNoIG9uIGFuIGFycmF5IGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFyciBUaGUgYXJyYXkgYnVmZmVyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSAgICAgW3Jhd10gVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IG9uZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUuQXJyYXlCdWZmZXIuaGFzaCA9IGZ1bmN0aW9uIChhcnIsIHJhdykge1xuICAgICAgICB2YXIgaGFzaCA9IG1kNTFfYXJyYXkobmV3IFVpbnQ4QXJyYXkoYXJyKSksXG4gICAgICAgICAgICByZXQgPSBoZXgoaGFzaCk7XG5cbiAgICAgICAgcmV0dXJuIHJhdyA/IGhleFRvQmluYXJ5U3RyaW5nKHJldCkgOiByZXQ7XG4gICAgfTtcblxuICAgIHJldHVybiBTcGFya01ENTtcbn0pKTtcbiJdLCJuYW1lcyI6WyJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImdsb2IiLCJ3aW5kb3ciLCJlIiwic2VsZiIsIlNwYXJrTUQ1IiwidW5kZWZpbmVkIiwiYWRkMzIiLCJhIiwiYiIsImhleF9jaHIiLCJjbW4iLCJxIiwieCIsInMiLCJ0IiwibWQ1Y3ljbGUiLCJrIiwiYyIsImQiLCJtZDVibGsiLCJtZDVibGtzIiwiaSIsImNoYXJDb2RlQXQiLCJtZDVibGtfYXJyYXkiLCJtZDUxIiwibiIsImxlbmd0aCIsInN0YXRlIiwidGFpbCIsInRtcCIsImxvIiwiaGkiLCJzdWJzdHJpbmciLCJ0b1N0cmluZyIsIm1hdGNoIiwicGFyc2VJbnQiLCJtZDUxX2FycmF5Iiwic3ViYXJyYXkiLCJVaW50OEFycmF5IiwicmhleCIsImoiLCJoZXgiLCJqb2luIiwieSIsImxzdyIsIm1zdyIsIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIiwic2xpY2UiLCJjbGFtcCIsInZhbCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJmcm9tIiwidG8iLCJieXRlTGVuZ3RoIiwiYmVnaW4iLCJlbmQiLCJudW0iLCJ0YXJnZXQiLCJ0YXJnZXRBcnJheSIsInNvdXJjZUFycmF5Iiwic2V0IiwidG9VdGY4Iiwic3RyIiwidGVzdCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXRmOFN0cjJBcnJheUJ1ZmZlciIsInJldHVyblVJbnQ4QXJyYXkiLCJidWZmIiwiYXJyIiwiYXJyYXlCdWZmZXIyVXRmOFN0ciIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnMiLCJmaXJzdCIsInNlY29uZCIsInJlc3VsdCIsImJ1ZmZlciIsImhleFRvQmluYXJ5U3RyaW5nIiwiYnl0ZXMiLCJwdXNoIiwic3Vic3RyIiwicmVzZXQiLCJhcHBlbmQiLCJhcHBlbmRCaW5hcnkiLCJjb250ZW50cyIsIl9idWZmIiwiX2xlbmd0aCIsIl9oYXNoIiwicmF3IiwicmV0IiwiX2ZpbmlzaCIsImdldFN0YXRlIiwiaGFzaCIsInNldFN0YXRlIiwiZGVzdHJveSIsImhhc2hCaW5hcnkiLCJjb250ZW50IiwiY2FsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/spark-md5/spark-md5.js\n"); /***/ }) }; ;