爬虫逆向实战小记——解决webpack实记
注意!!!!某XX网站实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!
aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi9jb2x1bW5Ib21lTGVmdE1lbnVOZXc=
选择-政策规则
前情提要
个人习惯遇到webpack的时候,一般都会逆向寻找加密方式,并直接找对应的库进行解密,但是当遇到没有明确的加密方式且webpack类型就抓瞎了,本文算是鄙人第一次扣webpack,有任何描述介绍部分不规范的多多指出
步骤一: 分析
① 请求网址,查看参数,初步判断加密方式。这个网址直接表明使用sm2和sm4(加密方式仅针对当前请求的网址),还有一个publicKey,看似与RSA可能有关系,暂时按下不表。
步骤二: 解决问题
①先找到请求断点处。通过XHR 提取断点
②查看堆栈可以找到queryData处有个getData,我个人认为这里值得一个断点(dddd, 不做赘述,全凭感觉),将此处添加断点。去掉XHR中的勾选,重新请求
③重新请求后可以看出,Object(k["a"])(a) 是我们请求的参数
④Object(k["c"]) 其实调用的r 函数,这时候就很肯定断点没有问题,且参数分别为t 和n
⑤通过④可以知道,n 需要t 的值作为参数。t的函数下图所示,可以看到t = Object(n["h"])()
⑥ t 会生成一个128位的值。e则是一个序列化的dict。this.getSm2Key 会生成一个公钥和私钥
⑦跟进this.getSm2Key ,可以看到调用Object(n["d"])() 也就是Ir 函数,跟进Ir 其实调用了sm2中generateKeyPairHex()方法
⑧接下来可以看到i 以及r["sm4"] 生成的值,都是Object(n["字母"]) 这种形式。我们跟着这个n 往上找,看一下n是谁,可以看出var n = r("c99b")
⑨ 经过上述,我们隐隐感觉到,这是一个webpack。那我们在var n = r("c99b") 打断点,这里断点的作用是找到加载器。
⑩ 果然是典型webpack类型。
⑪ 将上述源码全部复制到本地,同时,在n = r(c99b) 原文中全文在当前的文件里全文搜索 c99b ,可以看到只有4个,那就很容易找打到我们自己需要的
步骤三: 代码展示
window = global;
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0";
(function(c) {
function n(n) {
for (var e, h, d = n[0], f = n[1], b = n[2], t = 0, r = []; t < d.length; t++)
h = d[t],
k[h] && r.push(k[h][0]),
k[h] = 0;
for (e in f)
Object.prototype.hasOwnProperty.call(f, e) && (c[e] = f[e]);
o && o(n);
while (r.length)
r.shift()();
return a.push.apply(a, b || []),
u()
}
function u() {
for (var c, n = 0; n < a.length; n++) {
for (var u = a[n], e = !0, h = 1; h < u.length; h++) {
var d = u[h];
0 !== k[d] && (e = !1)
}
e && (a.splice(n--, 1),
c = f(f.s = u[0]))
}
return c
}
var e = {}
, h = {
runtime: 0
}
, k = {
runtime: 0
}
, a = [];
function d(c) {
return f.p + "static/js/" + ({
"chunk-commons": "chunk-commons"
}[c] || c) + "." + {
"chunk-00155f4b": "521c2d41",
"chunk-f81359d0": "bb65ea0e",
"chunk-038e78f2": "63e4b520",
"chunk-0548fa25": "70a81d95",
"chunk-073daa90": "630a032a",
"chunk-09163dd7": "748352f6",
"chunk-0b4570f8": "27ff7a74",
"chunk-0b500cce": "b0365218",
"chunk-0bbeb896": "4340a761",
"chunk-0ca7c584": "f5d69cdc",
"chunk-133a2b06": "87530288",
"chunk-171dca47": "daf51bfb",
"chunk-18cd25b5": "a37f0898",
"chunk-1dbfb2ca": "ce532e83",
"chunk-22d38d01": "a15751c3",
"chunk-24bd6642": "25417b3a",
"chunk-251ac763": "b409ebd5",
"chunk-4b109e82": "6645ca60",
"chunk-2c4fe7ee": "82616207",
"chunk-f3b28598": "a3447abc",
"chunk-2d0d385a": "a9fb3497",
"chunk-54dce028": "2eca8dc5",
"chunk-7eeef8c6": "bf3fcd56",
"chunk-2d0d641d": "52173caf",
"chunk-2d2105d3": "e0d08352",
"chunk-2d21ead9": "d9cd2bde",
"chunk-e31a7778": "260a343a",
"chunk-78a58ce0": "313aee65",
"chunk-120f25a4": "467947e9",
"chunk-2d222919": "41ea63f6",
"chunk-2d230c70": "33926d78",
"chunk-2d230fe7": "fe56584d",
"chunk-2d8ba231": "1570b2be",
"chunk-2f617b25": "2d53c5eb",
"chunk-545581c4": "a68e6777",
"chunk-2f90d8f0": "e159136a",
"chunk-3142d3bc": "9673962a",
"chunk-31a04132": "6c08a4d6",
"chunk-37abbf52": "c399424d",
"chunk-381feb46": "c9073e09",
"chunk-3aa7734e": "9d550bdc",
"chunk-3afe39af": "01514d57",
"chunk-477132e2": "e98a45dc",
"chunk-4794904a": "112041d2",
"chunk-9c7039ee": "f6637d7a",
"chunk-430384fb": "03293819",
"chunk-4a3d12ba": "3a461911",
"chunk-f69cf13a": "0e957d10",
"chunk-4884f80c": "37d68b9d",
"chunk-4961c0a8": "3cec3769",
"chunk-4a573df5": "fa302b65",
"chunk-50e135d2": "3bc6edc4",
"chunk-50f5e21c": "589b879b",
"chunk-5410d1b2": "57a03373",
"chunk-0fcb1caa": "2095d41b",
"chunk-11ea4519": "bc6b2329",
"chunk-23f89548": "13b1bd4c",
"chunk-7066f7a4": "fe75730b",
"chunk-264ceee0": "0679777a",
"chunk-2d0cbebe": "fbb7cb11",
"chunk-726b8536": "4a91a9aa",
"chunk-1b4a54c2": "8d7fd715",
"chunk-1fb382d5": "9780b172",
"chunk-46155390": "eb78a23b",
"chunk-56244582": "2d7886ed",
"chunk-b5fa86a8": "3b3a001e",
"chunk-2d247d82": "18a771a5",
"chunk-31d4889a": "e2a27120",
"chunk-48966bf8": "d0ba0dd8",
"chunk-4ea24402": "0ef4e4cd",
"chunk-594ba360": "fadfdd5f",
"chunk-61ff399e": "49c8591e",
"chunk-652f2b55": "e15b98f5",
"chunk-654588bb": "0b652dc3",
"chunk-6a660020": "bf34287a",
"chunk-6e87ca78": "844e340c",
"chunk-1c55cc64": "552bea03",
"chunk-1153a3ae": "1371df58",
"chunk-675f6070": "2c3385ab",
"chunk-b2237dc8": "b473af74",
"chunk-c187c814": "87fc4fb0",
"chunk-57638791": "433911c7",
"chunk-71ef2ed8": "82e8e540",
"chunk-06940b2f": "4077a21c",
"chunk-fd4bd9e4": "5265e5f5",
"chunk-2577c36d": "fa2b0c82",
"chunk-1548bb5e": "b39d8181",
"chunk-287ae9c7": "6752e48d",
"chunk-4fd8d347": "c05a0d11",
"chunk-317d59de": "89bf12a6",
"chunk-4235d6f1": "4c17e133",
"chunk-4422d324": "b3686be1",
"chunk-72d1b198": "298c4120",
"chunk-ec497ea8": "f9d40449",
"chunk-1f310d91": "a08f0244",
"chunk-d3b3a4c0": "0bd051c6",
"chunk-55fa8644": "454c844d",
"chunk-9153473e": "087956c3",
"chunk-5fd680e6": "74c74ae6",
"chunk-662e0c60": "97b8273b",
"chunk-62344ab0": "662b7a7d",
"chunk-81bf9dcc": "cad271db",
"chunk-bdcedaca": "9e74a753",
"chunk-d514d152": "9a9876ed",
"chunk-f17d0dd2": "39c26144",
"chunk-77ec7d56": "0ae78e2a",
"chunk-8c85fabc": "acb6509c",
"chunk-8f383ba4": "59bda1fe",
"chunk-a1aa28a4": "8bf4b8d3",
"chunk-ed1821d6": "be36ea4f",
"chunk-0a5b7b24": "7c5d9f09",
"chunk-f13d06fc": "3aafa1d8",
"chunk-56a54792": "9056c1a9",
"chunk-58157c1c": "e4841ae1",
"chunk-585cd5cc": "653519f5",
"chunk-5a3ea4f3": "cd78b1a6",
"chunk-63740e52": "1264a08d",
"chunk-c9ad6fbc": "f9c9214d",
"chunk-6ce0bad4": "0ce762d1",
"chunk-2159e022": "eb158640",
"chunk-71259396": "f093faf8",
"chunk-719b43aa": "441e9684",
"chunk-724a9633": "4f95062d",
"chunk-039fe120": "6108d82e",
"chunk-06175d58": "961167c9",
"chunk-1f2a4c90": "1014d3cf",
"chunk-21dfcdbe": "01a3f170",
"chunk-28180124": "1acf5bf4",
"chunk-2d2101ff": "070960e7",
"chunk-4659744c": "b60948d0",
"chunk-3d269f11": "714384d7",
"chunk-3093f414": "123a07e7",
"chunk-50b00630": "2d18511f",
"chunk-77eacaec": "b6b32ac3",
"chunk-39ca7086": "f1706600",
"chunk-9873b59a": "8efc0517",
"chunk-0a14db2e": "1c8d13b9",
"chunk-0ed204c4": "17db03a0",
"chunk-4a11df6c": "c9b0806f",
"chunk-51edc778": "00f0b102",
"chunk-5c45f974": "22536a96",
"chunk-79ba38e3": "94b996d3",
"chunk-f452313e": "55e3c433",
"chunk-fc9a2a9e": "02575c74",
"chunk-9d34eedc": "87a9226b",
"chunk-b900ad98": "b7ebb247",
"chunk-c8fddb6a": "47fb0a2c",
"chunk-72abef28": "be3a151d",
"chunk-6331f36e": "ef934774",
"chunk-736d3dbc": "03eb7c15",
"chunk-75bb6ef8": "28e41203",
"chunk-7658eaca": "4202b131",
"chunk-788cd71c": "b3646b24",
"chunk-797eb7e4": "70212cdd",
"chunk-7be33868": "e4772951",
"chunk-7cdf79bc": "c8273376",
"chunk-8116ecf6": "36884630",
"chunk-89824c98": "9800389c",
"chunk-95200f10": "2167d6f1",
"chunk-a9051134": "70b8e09a",
"chunk-ac459d52": "2c62611f",
"chunk-b1c4a05a": "9272fa9b",
"chunk-b3942c98": "1acf802d",
"chunk-0d4c55a4": "0d54c993",
"chunk-7c5fed2f": "4dd0e751",
"chunk-bb42af12": "985640f6",
"chunk-c7722330": "643167e7",
"chunk-commons": "3a892a3a",
"chunk-0441ac18": "377422d0",
"chunk-95279b24": "4d51ed8d",
"chunk-d6f3491c": "c243bf16",
"chunk-d711add8": "5ed4abab",
"chunk-dab226c4": "1a4de2b9",
"chunk-e10f4fba": "6cce7619",
"chunk-0d15f7df": "219df71b",
"chunk-0ff1ff25": "6e5d596e",
"chunk-74eeaf86": "db02d25f",
"chunk-66043168": "752947a8",
"chunk-72b72a35": "e38dfb17",
"chunk-e9f73c82": "4db7cee9",
"chunk-ef94f9e4": "34b885cb",
"chunk-2d0aa5b8": "7a6792ef",
"chunk-2bf9ff98": "0cb59caa",
"chunk-3aebcc64": "38df6f56",
"chunk-682ab6fa": "341236d6",
"chunk-4aa0d228": "4a1d0934",
"chunk-a64e0e52": "9fcef0dd",
"chunk-18941db8": "008b7ab2",
"chunk-30ffb292": "be6674d6",
"chunk-12020c2c": "44d073f0",
"chunk-1d40e4dd": "eb0013e9",
"chunk-323c09d9": "7b680b12",
"chunk-93b86d00": "4212f4ce",
"chunk-945749a6": "d261e7ce",
"chunk-f123646c": "7d121b65",
"chunk-f31dd558": "848b5cdb",
"chunk-f4f2ad3c": "4d3fc675",
"chunk-72a81207": "34811335",
"chunk-f57e2d4e": "9d10a08c",
"chunk-fa236cae": "c37c8916",
"chunk-672f23a7": "340eec8a",
"chunk-13307a08": "213816e7",
"chunk-03236f46": "e7015708",
"chunk-65f4e680": "e9009344",
"chunk-a90b5ec2": "054f1874",
"chunk-58ca30db": "a1df23cd",
"chunk-17ac497c": "d1f9eac5",
"chunk-2d0b9654": "daeabca5",
"chunk-2d2082c5": "91d6f87c",
"chunk-2d22cce3": "2c36fe12",
"chunk-43f4b4c2": "6ad69cf0",
"chunk-5e12deb6": "24c2c451",
"chunk-8c99df8a": "854fcbb6",
"chunk-2d0c8293": "64a1fd70",
"chunk-16bf884b": "91a3e6bb",
"chunk-205588da": "afd28f14",
"chunk-290573df": "b1034dae",
"chunk-2d0bdda3": "f48a09fa",
"chunk-367520b4": "891ecb2e",
"chunk-3a5fd6b2": "e327bcff",
"chunk-574d5906": "efdef4ac",
"chunk-5b7f64e0": "aa28cac3",
"chunk-7a587c4b": "5540c7c8",
"chunk-9a76cd96": "d1a07944",
"chunk-af945410": "9244bb34",
"chunk-2d0c8dc6": "f8058a18",
"chunk-40383e0d": "879f72b2",
"chunk-5de8bd5b": "bb3a2e65",
"chunk-0a492a9e": "cd209a2b",
"chunk-271d5781": "d22f30cc",
"chunk-373aa27e": "eb03abd2",
"chunk-5bef02ba": "76bfbc5f",
"chunk-40bf2235": "20e9054c",
"chunk-72120114": "43e7852f",
"chunk-7574e53d": "547eaca3",
"chunk-8216af38": "d9daefd1",
"chunk-bd9a13f4": "9436313c",
"chunk-c5b153bc": "13c05eb0",
"chunk-2d0e268a": "17ca379b",
"chunk-c650ad2c": "34f83a31",
"chunk-de7ba61a": "f87708b7",
"chunk-ea6b50d4": "a03247b4",
"chunk-f147a8c6": "c38e7795",
"chunk-f78ebe08": "50b5c2d9",
"chunk-0e3918da": "b2edfb17",
"chunk-0f22b2bb": "538025c3",
"chunk-17c1c66f": "68ae6a6a",
"chunk-21d5d6a8": "e01e94e0",
"chunk-3676ddf3": "f8498134",
"chunk-3fdd08f9": "a55bf887",
"chunk-4bc12aa0": "e48a4900",
"chunk-51279394": "09e7d96a",
"chunk-60ffa822": "95bb23d8",
"chunk-71c7afb2": "4c7b18b0",
"chunk-74ef81b5": "9d92d987",
"chunk-8302281e": "a3952997",
"chunk-afecc83c": "fdba638a",
"chunk-cbbb17ba": "c4534fc5",
"chunk-60080330": "bc98a611",
"chunk-2095e530": "9aba1ad2",
"chunk-2d0d3836": "7aa9f53a",
"chunk-37e71e41": "161e04c3",
"chunk-3a86a2e4": "d57044a4",
"chunk-2d0f042f": "bb2f9c4b",
"chunk-0faebb97": "64434133",
"chunk-cd990dce": "cc30675b",
"chunk-235daef3": "209addfe",
"chunk-30b3a146": "1a824f9f",
"chunk-9ca2f668": "925cbd3b",
"chunk-7f0ea486": "4fa979d2",
"chunk-2d0d3648": "86cec291",
"chunk-d91c071a": "d3c433d9",
"chunk-6b5b0490": "55e62227",
"chunk-34243c32": "160e744b",
"chunk-66d8764a": "184e3529",
"chunk-7e58d3ae": "da81c9d5",
"chunk-f759893a": "3f87f562",
"chunk-60ff175e": "f4f2599c",
"chunk-682a93d8": "c520e8d5",
"chunk-715531ab": "73b53a8a",
"chunk-2d0db21b": "bc92217f",
"chunk-78d80fca": "ababc537",
"chunk-3d705ea0": "042e29e0",
"chunk-6ea7e65e": "3daa79ca",
"chunk-0c330e08": "40765b8c",
"chunk-56ab77f4": "72d28131",
"chunk-66bc5ec2": "64ddc708",
"chunk-0a8b10c2": "97fe0702",
"chunk-0c63bb80": "b3b9a8b1",
"chunk-11d9dd90": "fc4dbd4a",
"chunk-14ed0682": "0160f2dd",
"chunk-17b33bc0": "4c70d9b6",
"chunk-20e7ee1e": "c5578a22",
"chunk-212be834": "0edfeb55",
"chunk-24bbfe3b": "74770d4d",
"chunk-30e26798": "2aebc738",
"chunk-47754068": "88133c92",
"chunk-62468f97": "24e9873e",
"chunk-6587a5a1": "e2aa045c",
"chunk-6a66aaa2": "456b64dd",
"chunk-785f1f55": "34907d63",
"chunk-7a6cd5d6": "a4f07708",
"chunk-a854f2cc": "f4ed36f8",
"chunk-b1f2bf3c": "75cb621e",
"chunk-caa4d928": "5d1b58f9",
"chunk-4587ca1a": "e5750042",
"chunk-04a2bc5c": "bcfa7d99",
"chunk-2e4d0aa8": "20c7628a",
"chunk-4d6117d2": "61bf6988",
"chunk-6760b026": "b19ebcf4",
"chunk-2d2084bb": "9c77bb77"
}[c] + ".js"
}
function f(n) {
if (e[n])
return e[n].exports;
var u = e[n] = {
i: n,
l: !1,
exports: {}
};
return c[n].call(u.exports, u, u.exports, f),
u.l = !0,
u.exports
}
window.shuibingmeiyue = f;
f.e = function(c) {
var n = []
, u = {
"chunk-00155f4b": 1,
"chunk-038e78f2": 1,
"chunk-0548fa25": 1,
"chunk-09163dd7": 1,
"chunk-0b4570f8": 1,
"chunk-0b500cce": 1,
"chunk-0bbeb896": 1,
"chunk-0ca7c584": 1,
"chunk-171dca47": 1,
"chunk-18cd25b5": 1,
"chunk-1dbfb2ca": 1,
"chunk-22d38d01": 1,
"chunk-24bd6642": 1,
"chunk-251ac763": 1,
"chunk-4b109e82": 1,
"chunk-f3b28598": 1,
"chunk-54dce028": 1,
"chunk-7eeef8c6": 1,
"chunk-120f25a4": 1,
"chunk-2d8ba231": 1,
"chunk-545581c4": 1,
"chunk-2f90d8f0": 1,
"chunk-31a04132": 1,
"chunk-37abbf52": 1,
"chunk-381feb46": 1,
"chunk-3aa7734e": 1,
"chunk-3afe39af": 1,
"chunk-430384fb": 1,
"chunk-4a3d12ba": 1,
"chunk-4884f80c": 1,
"chunk-4a573df5": 1,
"chunk-50f5e21c": 1,
"chunk-0fcb1caa": 1,
"chunk-11ea4519": 1,
"chunk-23f89548": 1,
"chunk-7066f7a4": 1,
"chunk-264ceee0": 1,
"chunk-1b4a54c2": 1,
"chunk-1fb382d5": 1,
"chunk-46155390": 1,
"chunk-56244582": 1,
"chunk-b5fa86a8": 1,
"chunk-2d247d82": 1,
"chunk-31d4889a": 1,
"chunk-48966bf8": 1,
"chunk-4ea24402": 1,
"chunk-594ba360": 1,
"chunk-61ff399e": 1,
"chunk-652f2b55": 1,
"chunk-654588bb": 1,
"chunk-6a660020": 1,
"chunk-1c55cc64": 1,
"chunk-1153a3ae": 1,
"chunk-675f6070": 1,
"chunk-b2237dc8": 1,
"chunk-57638791": 1,
"chunk-71ef2ed8": 1,
"chunk-06940b2f": 1,
"chunk-fd4bd9e4": 1,
"chunk-2577c36d": 1,
"chunk-1548bb5e": 1,
"chunk-287ae9c7": 1,
"chunk-4fd8d347": 1,
"chunk-317d59de": 1,
"chunk-4235d6f1": 1,
"chunk-4422d324": 1,
"chunk-72d1b198": 1,
"chunk-ec497ea8": 1,
"chunk-1f310d91": 1,
"chunk-d3b3a4c0": 1,
"chunk-55fa8644": 1,
"chunk-9153473e": 1,
"chunk-5fd680e6": 1,
"chunk-662e0c60": 1,
"chunk-62344ab0": 1,
"chunk-81bf9dcc": 1,
"chunk-bdcedaca": 1,
"chunk-d514d152": 1,
"chunk-f17d0dd2": 1,
"chunk-77ec7d56": 1,
"chunk-8c85fabc": 1,
"chunk-8f383ba4": 1,
"chunk-a1aa28a4": 1,
"chunk-ed1821d6": 1,
"chunk-0a5b7b24": 1,
"chunk-f13d06fc": 1,
"chunk-56a54792": 1,
"chunk-58157c1c": 1,
"chunk-5a3ea4f3": 1,
"chunk-63740e52": 1,
"chunk-c9ad6fbc": 1,
"chunk-2159e022": 1,
"chunk-71259396": 1,
"chunk-719b43aa": 1,
"chunk-039fe120": 1,
"chunk-06175d58": 1,
"chunk-1f2a4c90": 1,
"chunk-21dfcdbe": 1,
"chunk-28180124": 1,
"chunk-4659744c": 1,
"chunk-3d269f11": 1,
"chunk-3093f414": 1,
"chunk-50b00630": 1,
"chunk-77eacaec": 1,
"chunk-9873b59a": 1,
"chunk-0a14db2e": 1,
"chunk-0ed204c4": 1,
"chunk-4a11df6c": 1,
"chunk-51edc778": 1,
"chunk-5c45f974": 1,
"chunk-79ba38e3": 1,
"chunk-f452313e": 1,
"chunk-fc9a2a9e": 1,
"chunk-9d34eedc": 1,
"chunk-b900ad98": 1,
"chunk-c8fddb6a": 1,
"chunk-72abef28": 1,
"chunk-6331f36e": 1,
"chunk-736d3dbc": 1,
"chunk-75bb6ef8": 1,
"chunk-7658eaca": 1,
"chunk-788cd71c": 1,
"chunk-797eb7e4": 1,
"chunk-7be33868": 1,
"chunk-7cdf79bc": 1,
"chunk-8116ecf6": 1,
"chunk-a9051134": 1,
"chunk-ac459d52": 1,
"chunk-7c5fed2f": 1,
"chunk-bb42af12": 1,
"chunk-commons": 1,
"chunk-0441ac18": 1,
"chunk-95279b24": 1,
"chunk-d6f3491c": 1,
"chunk-dab226c4": 1,
"chunk-0d15f7df": 1,
"chunk-0ff1ff25": 1,
"chunk-74eeaf86": 1,
"chunk-66043168": 1,
"chunk-72b72a35": 1,
"chunk-e9f73c82": 1,
"chunk-ef94f9e4": 1,
"chunk-2bf9ff98": 1,
"chunk-3aebcc64": 1,
"chunk-682ab6fa": 1,
"chunk-4aa0d228": 1,
"chunk-a64e0e52": 1,
"chunk-18941db8": 1,
"chunk-30ffb292": 1,
"chunk-12020c2c": 1,
"chunk-1d40e4dd": 1,
"chunk-323c09d9": 1,
"chunk-93b86d00": 1,
"chunk-945749a6": 1,
"chunk-f123646c": 1,
"chunk-f4f2ad3c": 1,
"chunk-f57e2d4e": 1,
"chunk-fa236cae": 1,
"chunk-672f23a7": 1,
"chunk-13307a08": 1,
"chunk-65f4e680": 1,
"chunk-a90b5ec2": 1,
"chunk-58ca30db": 1,
"chunk-17ac497c": 1,
"chunk-43f4b4c2": 1,
"chunk-8c99df8a": 1,
"chunk-16bf884b": 1,
"chunk-205588da": 1,
"chunk-290573df": 1,
"chunk-367520b4": 1,
"chunk-574d5906": 1,
"chunk-5b7f64e0": 1,
"chunk-7a587c4b": 1,
"chunk-9a76cd96": 1,
"chunk-af945410": 1,
"chunk-40383e0d": 1,
"chunk-5de8bd5b": 1,
"chunk-0a492a9e": 1,
"chunk-271d5781": 1,
"chunk-373aa27e": 1,
"chunk-5bef02ba": 1,
"chunk-40bf2235": 1,
"chunk-72120114": 1,
"chunk-7574e53d": 1,
"chunk-8216af38": 1,
"chunk-bd9a13f4": 1,
"chunk-c5b153bc": 1,
"chunk-c650ad2c": 1,
"chunk-de7ba61a": 1,
"chunk-ea6b50d4": 1,
"chunk-f147a8c6": 1,
"chunk-f78ebe08": 1,
"chunk-0e3918da": 1,
"chunk-0f22b2bb": 1,
"chunk-17c1c66f": 1,
"chunk-21d5d6a8": 1,
"chunk-3676ddf3": 1,
"chunk-3fdd08f9": 1,
"chunk-4bc12aa0": 1,
"chunk-51279394": 1,
"chunk-60ffa822": 1,
"chunk-71c7afb2": 1,
"chunk-74ef81b5": 1,
"chunk-8302281e": 1,
"chunk-afecc83c": 1,
"chunk-cbbb17ba": 1,
"chunk-60080330": 1,
"chunk-2095e530": 1,
"chunk-37e71e41": 1,
"chunk-3a86a2e4": 1,
"chunk-0faebb97": 1,
"chunk-235daef3": 1,
"chunk-9ca2f668": 1,
"chunk-7f0ea486": 1,
"chunk-d91c071a": 1,
"chunk-34243c32": 1,
"chunk-60ff175e": 1,
"chunk-682a93d8": 1,
"chunk-715531ab": 1,
"chunk-6ea7e65e": 1,
"chunk-0c330e08": 1,
"chunk-56ab77f4": 1,
"chunk-0a8b10c2": 1,
"chunk-0c63bb80": 1,
"chunk-11d9dd90": 1,
"chunk-14ed0682": 1,
"chunk-17b33bc0": 1,
"chunk-20e7ee1e": 1,
"chunk-212be834": 1,
"chunk-24bbfe3b": 1,
"chunk-30e26798": 1,
"chunk-47754068": 1,
"chunk-62468f97": 1,
"chunk-6587a5a1": 1,
"chunk-6a66aaa2": 1,
"chunk-785f1f55": 1,
"chunk-7a6cd5d6": 1,
"chunk-a854f2cc": 1,
"chunk-b1f2bf3c": 1,
"chunk-caa4d928": 1,
"chunk-4587ca1a": 1,
"chunk-6760b026": 1
};
h[c] ? n.push(h[c]) : 0 !== h[c] && u[c] && n.push(h[c] = new Promise((function(n, u) {
for (var e = "static/css/" + ({
"chunk-commons": "chunk-commons"
}[c] || c) + "." + {
"chunk-00155f4b": "efb80868",
"chunk-f81359d0": "31d6cfe0",
"chunk-038e78f2": "72512a64",
"chunk-0548fa25": "598c5892",
"chunk-073daa90": "31d6cfe0",
"chunk-09163dd7": "9e7b12ca",
"chunk-0b4570f8": "da86bf60",
"chunk-0b500cce": "dd0e66f6",
"chunk-0bbeb896": "0e1f54b4",
"chunk-0ca7c584": "391ecfbb",
"chunk-133a2b06": "31d6cfe0",
"chunk-171dca47": "b4e9b1c2",
"chunk-18cd25b5": "79d6279b",
"chunk-1dbfb2ca": "e04f6507",
"chunk-22d38d01": "c5280cc0",
"chunk-24bd6642": "270c1406",
"chunk-251ac763": "155818e9",
"chunk-4b109e82": "95b4329c",
"chunk-2c4fe7ee": "31d6cfe0",
"chunk-f3b28598": "9a3e200e",
"chunk-2d0d385a": "31d6cfe0",
"chunk-54dce028": "31eebf62",
"chunk-7eeef8c6": "334eca6b",
"chunk-2d0d641d": "31d6cfe0",
"chunk-2d2105d3": "31d6cfe0",
"chunk-2d21ead9": "31d6cfe0",
"chunk-e31a7778": "31d6cfe0",
"chunk-78a58ce0": "31d6cfe0",
"chunk-120f25a4": "b86a2a21",
"chunk-2d222919": "31d6cfe0",
"chunk-2d230c70": "31d6cfe0",
"chunk-2d230fe7": "31d6cfe0",
"chunk-2d8ba231": "17da5e6c",
"chunk-2f617b25": "31d6cfe0",
"chunk-545581c4": "132263cc",
"chunk-2f90d8f0": "f425b586",
"chunk-3142d3bc": "31d6cfe0",
"chunk-31a04132": "768f2852",
"chunk-37abbf52": "65ea1a12",
"chunk-381feb46": "ea3087ab",
"chunk-3aa7734e": "16f95cc2",
"chunk-3afe39af": "81f8ec42",
"chunk-477132e2": "31d6cfe0",
"chunk-4794904a": "31d6cfe0",
"chunk-9c7039ee": "31d6cfe0",
"chunk-430384fb": "0f0411d7",
"chunk-4a3d12ba": "8648ae2f",
"chunk-f69cf13a": "31d6cfe0",
"chunk-4884f80c": "32249d6c",
"chunk-4961c0a8": "31d6cfe0",
"chunk-4a573df5": "236fba29",
"chunk-50e135d2": "31d6cfe0",
"chunk-50f5e21c": "d30d30e3",
"chunk-5410d1b2": "31d6cfe0",
"chunk-0fcb1caa": "6f5df861",
"chunk-11ea4519": "1ba7912b",
"chunk-23f89548": "4337b79e",
"chunk-7066f7a4": "77a6fe0b",
"chunk-264ceee0": "ac5e177a",
"chunk-2d0cbebe": "31d6cfe0",
"chunk-726b8536": "31d6cfe0",
"chunk-1b4a54c2": "c47e57e5",
"chunk-1fb382d5": "57638d85",
"chunk-46155390": "d78fed00",
"chunk-56244582": "a03c16ca",
"chunk-b5fa86a8": "84cc65c6",
"chunk-2d247d82": "03516457",
"chunk-31d4889a": "352b290b",
"chunk-48966bf8": "1ba7912b",
"chunk-4ea24402": "1ba7912b",
"chunk-594ba360": "77a6fe0b",
"chunk-61ff399e": "3a5bfddd",
"chunk-652f2b55": "68a799ab",
"chunk-654588bb": "34fe4b92",
"chunk-6a660020": "1ba7912b",
"chunk-6e87ca78": "31d6cfe0",
"chunk-1c55cc64": "6b367069",
"chunk-1153a3ae": "8ce80f0e",
"chunk-675f6070": "a1332a43",
"chunk-b2237dc8": "d8edb731",
"chunk-c187c814": "31d6cfe0",
"chunk-57638791": "597264d1",
"chunk-71ef2ed8": "77a6fe0b",
"chunk-06940b2f": "97b1e825",
"chunk-fd4bd9e4": "8c3e2de9",
"chunk-2577c36d": "cda2ff56",
"chunk-1548bb5e": "c47e57e5",
"chunk-287ae9c7": "3d612daf",
"chunk-4fd8d347": "77a6fe0b",
"chunk-317d59de": "2fdd5f37",
"chunk-4235d6f1": "77a6fe0b",
"chunk-4422d324": "77a6fe0b",
"chunk-72d1b198": "63050db6",
"chunk-ec497ea8": "499ab90f",
"chunk-1f310d91": "b3c41852",
"chunk-d3b3a4c0": "69999728",
"chunk-55fa8644": "9992c072",
"chunk-9153473e": "77a6fe0b",
"chunk-5fd680e6": "4f5e1a8f",
"chunk-662e0c60": "77a6fe0b",
"chunk-62344ab0": "ffec1b7c",
"chunk-81bf9dcc": "e2d690a2",
"chunk-bdcedaca": "d5c08fb8",
"chunk-d514d152": "77a6fe0b",
"chunk-f17d0dd2": "883024f2",
"chunk-77ec7d56": "ae489c5b",
"chunk-8c85fabc": "1ba7912b",
"chunk-8f383ba4": "40257cfc",
"chunk-a1aa28a4": "8769f8e8",
"chunk-ed1821d6": "c414a504",
"chunk-0a5b7b24": "77a6fe0b",
"chunk-f13d06fc": "77a6fe0b",
"chunk-56a54792": "2d2cae9d",
"chunk-58157c1c": "334eca6b",
"chunk-585cd5cc": "31d6cfe0",
"chunk-5a3ea4f3": "b9a2f72a",
"chunk-63740e52": "7bf94bfe",
"chunk-c9ad6fbc": "4e726ecf",
"chunk-6ce0bad4": "31d6cfe0",
"chunk-2159e022": "e1a3baa4",
"chunk-71259396": "c446bf6b",
"chunk-719b43aa": "ea24c8d1",
"chunk-724a9633": "31d6cfe0",
"chunk-039fe120": "998c3230",
"chunk-06175d58": "fcd862a3",
"chunk-1f2a4c90": "2eab9828",
"chunk-21dfcdbe": "bc448a7d",
"chunk-28180124": "c0f51fa7",
"chunk-2d2101ff": "31d6cfe0",
"chunk-4659744c": "1963b13b",
"chunk-3d269f11": "b4833ffb",
"chunk-3093f414": "1e0f9679",
"chunk-50b00630": "4813a5e0",
"chunk-77eacaec": "7463e478",
"chunk-39ca7086": "31d6cfe0",
"chunk-9873b59a": "473218f9",
"chunk-0a14db2e": "38fdf1ae",
"chunk-0ed204c4": "11f87e0f",
"chunk-4a11df6c": "d73a22e9",
"chunk-51edc778": "bf5ecf86",
"chunk-5c45f974": "ca44c15f",
"chunk-79ba38e3": "b9b98c55",
"chunk-f452313e": "35c4216e",
"chunk-fc9a2a9e": "2d340671",
"chunk-9d34eedc": "ea9d7465",
"chunk-b900ad98": "e4f3b6ac",
"chunk-c8fddb6a": "d316e025",
"chunk-72abef28": "b505366b",
"chunk-6331f36e": "2fe0797e",
"chunk-736d3dbc": "6c95ec7a",
"chunk-75bb6ef8": "676cfe44",
"chunk-7658eaca": "e00671c0",
"chunk-788cd71c": "7891dff6",
"chunk-797eb7e4": "395cfa4d",
"chunk-7be33868": "e5acdd1f",
"chunk-7cdf79bc": "d59bf4a8",
"chunk-8116ecf6": "f079f8be",
"chunk-89824c98": "31d6cfe0",
"chunk-95200f10": "31d6cfe0",
"chunk-a9051134": "aca8daba",
"chunk-ac459d52": "d55b7e4f",
"chunk-b1c4a05a": "31d6cfe0",
"chunk-b3942c98": "31d6cfe0",
"chunk-0d4c55a4": "31d6cfe0",
"chunk-7c5fed2f": "07ce0f36",
"chunk-bb42af12": "13821f5e",
"chunk-c7722330": "31d6cfe0",
"chunk-commons": "fbf3713c",
"chunk-0441ac18": "54e414c9",
"chunk-95279b24": "656eb2c6",
"chunk-d6f3491c": "b395342d",
"chunk-d711add8": "31d6cfe0",
"chunk-dab226c4": "843c4e93",
"chunk-e10f4fba": "31d6cfe0",
"chunk-0d15f7df": "c3267692",
"chunk-0ff1ff25": "c8a2c558",
"chunk-74eeaf86": "9eb8ff59",
"chunk-66043168": "a9b9288d",
"chunk-72b72a35": "0fd9d414",
"chunk-e9f73c82": "f711e473",
"chunk-ef94f9e4": "bf7ab86c",
"chunk-2d0aa5b8": "31d6cfe0",
"chunk-2bf9ff98": "bfadeb90",
"chunk-3aebcc64": "b4b18e20",
"chunk-682ab6fa": "d6012331",
"chunk-4aa0d228": "f9af7e0d",
"chunk-a64e0e52": "45e14f52",
"chunk-18941db8": "bc1a0a68",
"chunk-30ffb292": "45991aed",
"chunk-12020c2c": "ab0c1f0a",
"chunk-1d40e4dd": "40fd4f45",
"chunk-323c09d9": "d306a139",
"chunk-93b86d00": "24769430",
"chunk-945749a6": "30e567d4",
"chunk-f123646c": "16988035",
"chunk-f31dd558": "31d6cfe0",
"chunk-f4f2ad3c": "97e81b57",
"chunk-72a81207": "31d6cfe0",
"chunk-f57e2d4e": "b287fdc0",
"chunk-fa236cae": "a04e5f74",
"chunk-672f23a7": "f00e47ca",
"chunk-13307a08": "06894799",
"chunk-03236f46": "31d6cfe0",
"chunk-65f4e680": "14ab602b",
"chunk-a90b5ec2": "3adbfa33",
"chunk-58ca30db": "14ab602b",
"chunk-17ac497c": "cabf8644",
"chunk-2d0b9654": "31d6cfe0",
"chunk-2d2082c5": "31d6cfe0",
"chunk-2d22cce3": "31d6cfe0",
"chunk-43f4b4c2": "e2ea3846",
"chunk-5e12deb6": "31d6cfe0",
"chunk-8c99df8a": "dc1b4b2d",
"chunk-2d0c8293": "31d6cfe0",
"chunk-16bf884b": "1c199aab",
"chunk-205588da": "99e92ba7",
"chunk-290573df": "5696a6bc",
"chunk-2d0bdda3": "31d6cfe0",
"chunk-367520b4": "692cc3c0",
"chunk-3a5fd6b2": "31d6cfe0",
"chunk-574d5906": "28bd60f7",
"chunk-5b7f64e0": "3c5dc4a9",
"chunk-7a587c4b": "fa56de35",
"chunk-9a76cd96": "39791aae",
"chunk-af945410": "4813a5e0",
"chunk-2d0c8dc6": "31d6cfe0",
"chunk-40383e0d": "77a6fe0b",
"chunk-5de8bd5b": "77a6fe0b",
"chunk-0a492a9e": "1701615c",
"chunk-271d5781": "38bf1392",
"chunk-373aa27e": "06eb5d35",
"chunk-5bef02ba": "41abc115",
"chunk-40bf2235": "510057de",
"chunk-72120114": "8e9f7fb0",
"chunk-7574e53d": "4869a7c8",
"chunk-8216af38": "69d5a781",
"chunk-bd9a13f4": "c90d3d98",
"chunk-c5b153bc": "f3bbb0e3",
"chunk-2d0e268a": "31d6cfe0",
"chunk-c650ad2c": "c5a01041",
"chunk-de7ba61a": "edb7439b",
"chunk-ea6b50d4": "e53f9a09",
"chunk-f147a8c6": "32bfb1ed",
"chunk-f78ebe08": "a11a3eb0",
"chunk-0e3918da": "e22b9abb",
"chunk-0f22b2bb": "01500157",
"chunk-17c1c66f": "76dd0a0f",
"chunk-21d5d6a8": "d8556479",
"chunk-3676ddf3": "5487c7ed",
"chunk-3fdd08f9": "34409961",
"chunk-4bc12aa0": "8d1f6862",
"chunk-51279394": "67a68854",
"chunk-60ffa822": "730b0e66",
"chunk-71c7afb2": "4e1ee5b8",
"chunk-74ef81b5": "82a2abb0",
"chunk-8302281e": "4ed4dce5",
"chunk-afecc83c": "a2a56ee9",
"chunk-cbbb17ba": "ab5a9bb3",
"chunk-60080330": "827831de",
"chunk-2095e530": "1c199aab",
"chunk-2d0d3836": "31d6cfe0",
"chunk-37e71e41": "1c199aab",
"chunk-3a86a2e4": "cee6f567",
"chunk-2d0f042f": "31d6cfe0",
"chunk-0faebb97": "f00e47ca",
"chunk-cd990dce": "31d6cfe0",
"chunk-235daef3": "692cc3c0",
"chunk-30b3a146": "31d6cfe0",
"chunk-9ca2f668": "6b9282b2",
"chunk-7f0ea486": "63a68660",
"chunk-2d0d3648": "31d6cfe0",
"chunk-d91c071a": "3c5dc4a9",
"chunk-6b5b0490": "31d6cfe0",
"chunk-34243c32": "d65ca7e4",
"chunk-66d8764a": "31d6cfe0",
"chunk-7e58d3ae": "31d6cfe0",
"chunk-f759893a": "31d6cfe0",
"chunk-60ff175e": "b98d35d7",
"chunk-682a93d8": "30c4b139",
"chunk-715531ab": "9069d973",
"chunk-2d0db21b": "31d6cfe0",
"chunk-78d80fca": "31d6cfe0",
"chunk-3d705ea0": "31d6cfe0",
"chunk-6ea7e65e": "bff248e4",
"chunk-0c330e08": "14ab602b",
"chunk-56ab77f4": "14ab602b",
"chunk-66bc5ec2": "31d6cfe0",
"chunk-0a8b10c2": "c19e507e",
"chunk-0c63bb80": "a2918439",
"chunk-11d9dd90": "3b9d48df",
"chunk-14ed0682": "3ea2d569",
"chunk-17b33bc0": "e7e36324",
"chunk-20e7ee1e": "65d110a8",
"chunk-212be834": "e5159fa3",
"chunk-24bbfe3b": "6b49bf99",
"chunk-30e26798": "10a12de6",
"chunk-47754068": "40ee821b",
"chunk-62468f97": "4029ca3e",
"chunk-6587a5a1": "b395342d",
"chunk-6a66aaa2": "13508ba1",
"chunk-785f1f55": "ab705e54",
"chunk-7a6cd5d6": "e921e4f0",
"chunk-a854f2cc": "e35b9326",
"chunk-b1f2bf3c": "89e1317d",
"chunk-caa4d928": "7b9ea42e",
"chunk-4587ca1a": "73ac6ab5",
"chunk-04a2bc5c": "31d6cfe0",
"chunk-2e4d0aa8": "31d6cfe0",
"chunk-4d6117d2": "31d6cfe0",
"chunk-6760b026": "8642680d",
"chunk-2d2084bb": "31d6cfe0"
}[c] + ".css", k = f.p + e, a = document.getElementsByTagName("link"), d = 0; d < a.length; d++) {
var b = a[d]
, t = b.getAttribute("data-href") || b.getAttribute("href");
if ("stylesheet" === b.rel && (t === e || t === k))
return n()
}
var r = document.getElementsByTagName("style");
for (d = 0; d < r.length; d++) {
b = r[d],
t = b.getAttribute("data-href");
if (t === e || t === k)
return n()
}
var o = document.createElement("link");
o.rel = "stylesheet",
o.type = "text/css",
o.onload = n,
o.onerror = function(n) {
var e = n && n.target && n.target.src || k
, a = new Error("Loading CSS chunk " + c + " failed.\n(" + e + ")");
a.request = e,
delete h[c],
o.parentNode.removeChild(o),
u(a)
}
,
o.href = k;
var i = document.getElementsByTagName("head")[0];
i.appendChild(o)
}
)).then((function() {
h[c] = 0
}
)));
var e = k[c];
if (0 !== e)
if (e)
n.push(e[2]);
else {
var a = new Promise((function(n, u) {
e = k[c] = [n, u]
}
));
n.push(e[2] = a);
var b, t = document.createElement("script");
t.charset = "utf-8",
t.timeout = 120,
f.nc && t.setAttribute("nonce", f.nc),
t.src = d(c),
b = function(n) {
t.onerror = t.onload = null,
clearTimeout(r);
var u = k[c];
if (0 !== u) {
if (u) {
var e = n && ("load" === n.type ? "missing" : n.type)
, h = n && n.target && n.target.src
, a = new Error("Loading chunk " + c + " failed.\n(" + e + ": " + h + ")");
a.type = e,
a.request = h,
u[1](a)
}
k[c] = void 0
}
}
;
var r = setTimeout((function() {
b({
type: "timeout",
target: t
})
}
), 12e4);
t.onerror = t.onload = b,
document.head.appendChild(t)
}
return Promise.all(n)
}
,
f.m = c,
f.c = e,
f.d = function(c, n, u) {
f.o(c, n) || Object.defineProperty(c, n, {
enumerable: !0,
get: u
})
}
,
f.r = function(c) {
"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(c, Symbol.toStringTag, {
value: "Module"
}),
Object.defineProperty(c, "__esModule", {
value: !0
})
}
,
f.t = function(c, n) {
if (1 & n && (c = f(c)),
8 & n)
return c;
if (4 & n && "object" === typeof c && c && c.__esModule)
return c;
var u = Object.create(null);
if (f.r(u),
Object.defineProperty(u, "default", {
enumerable: !0,
value: c
}),
2 & n && "string" != typeof c)
for (var e in c)
f.d(u, e, function(n) {
return c[n]
}
.bind(null, e));
return u
}
,
f.n = function(c) {
var n = c && c.__esModule ? function() {
return c["default"]
}
: function() {
return c
}
;
return f.d(n, "a", n),
n
}
,
f.o = function(c, n) {
return Object.prototype.hasOwnProperty.call(c, n)
}
,
f.p = "/pxf-settlement-outnetpub/",
f.oe = function(c) {
throw console.error(c),
c
}
;
var b = window["webpackJsonp"] = window["webpackJsonp"] || []
, t = b.push.bind(b);
b.push = n,
b = b.slice();
for (var r = 0; r < b.length; r++)
n(b[r]);
var o = t;
u()
}
)({
c99b: function(e, t, r) {
"use strict";
function n(e) {
return n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
,
n(e)
}
var o;
r.d(t, "g", (function() {
return H
}
)),
r.d(t, "f", (function() {
return N
}
)),
r.d(t, "b", (function() {
return Dr
}
)),
r.d(t, "c", (function() {
return Fr
}
)),
r.d(t, "a", (function() {
return Pr
}
)),
r.d(t, "e", (function() {
return Or
}
)),
r.d(t, "d", (function() {
return Ir
}
)),
r.d(t, "h", (function() {
return Hr
}
));
var i = navigator.userAgent
, a = i.indexOf("compatible") > -1 && i.indexOf("MSIE") > -1
, l = i.indexOf("Trident") > -1 && i.indexOf("rv:11.0") > -1;
o = a || l ? window.msCrypto : window.crypto;
var s = function() {
return this.parseUTF8 = function(e) {
e = unescape(encodeURIComponent(e));
for (var t = e.length, r = [], n = 0; n < t; n++)
r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8;
return new c(r,t)
}
,
this.stringifyUTF8 = function(e) {
try {
for (var t, r = decodeURIComponent, n = escape, o = e.words, i = e.sigBytes, a = (e = [],
0); a < i; a++) {
var l = o[a >>> 2] >>> 24 - a % 4 * 8 & 255;
0 != l && e.push(String.fromCharCode(l))
}
return t = e.join(""),
r(n(t))
} catch (s) {
throw Error("Malformed UTF-8 data")
}
}
,
this.HexParse = function(e) {
for (var t = e.length, r = [], n = 0; n < t; n += 2)
r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4;
return new c(r,t / 2)
}
,
this.HexStringify = function(e) {
for (var t = e.words, r = (e = e.sigBytes,
[]), n = 0; n < e; n++) {
var o = t[n >>> 2] >>> 24 - n % 4 * 8 & 255;
r.push((o >>> 4).toString(16)),
r.push((15 & o).toString(16))
}
return r.join("")
}
,
this
}
, c = function(e, t) {
return this.words = e || [],
this.sigBytes = void 0 != t ? t : 4 * e.length,
this.getArrs = function() {
return this.words
}
,
this
}
, u = 0xdeadbeefcafe
, d = 15715070 == (16777215 & u)
, A = 52
, p = "0123456789abcdefghijklmnopqrstuvwxyz"
, g = [];
for (Q = "0".charCodeAt(0),
G = 0; G <= 9; ++G)
g[Q++] = G;
for (Q = "a".charCodeAt(0),
G = 10; G < 36; ++G)
g[Q++] = G;
for (Q = "A".charCodeAt(0),
G = 10; G < 36; ++G)
g[Q++] = G;
function f(e) {
return p.charAt(e)
}
function h(e, t) {
var r = g[e.charCodeAt(t)];
return null == r ? -1 : r
}
function b() {
var e = navigator.userAgent
, t = (e.indexOf("Opera"),
e.indexOf("compatible") > -1 && e.indexOf("MSIE") > -1)
, r = e.indexOf("Edge") > -1 && !t
, n = e.indexOf("Trident") > -1 && e.indexOf("rv:11.0") > -1
, o = e.indexOf("Firefox") > -1
, i = (e.indexOf("Safari"),
e.indexOf("Chrome") > -1);
return r ? "edge" : n ? "IE11" : o || i ? "FF" : void 0
}
var m = function() {
function e(e) {
r[n++] ^= 255 & e,
r[n++] ^= e >> 8 & 255,
r[n++] ^= e >> 16 & 255,
r[n++] ^= e >> 24 & 255,
n >= i && (n -= i)
}
var t, r, n, i = 256;
if (null == r) {
var a;
for (r = [],
n = 0; n < i; )
o && (a = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001),
r[n++] = a >>> 8,
r[n++] = 255 & a);
if ("FF" == b() && o) {
var l = new ArrayBuffer(32)
, s = new Int8Array(l);
for (o && o.getRandomValues(s),
a = 0; a < s.length; ++a)
r[a] = 255 & s[a]
} else if ("IE11" == b()) {
l = new ArrayBuffer(32),
s = new Int8Array(l);
var c = o || o;
for (o && c.getRandomValues(s),
a = 0; a < s.length; ++a)
r[a] = 255 & s[a]
} else if ("edge" == b()) {
l = new ArrayBuffer(32),
s = new Int8Array(l),
c = o || o;
for (o && c.getRandomValues(s),
a = 0; a < s.length; ++a)
r[a] = 255 & s[a]
}
n = 0,
e((new Date).getTime())
}
this.nextBytes = function(o) {
for (var i = 0; i < o.length; ++i) {
var a, l = o, s = i;
if (null == t) {
for (e((new Date).getTime()),
t = new w,
t.init(r),
n = 0; n < r.length; ++n)
r[n] = 0;
n = 0
}
a = t.next(),
l[s] = a
}
}
}
, w = function() {
this.j = this.i = 0,
this.S = [],
this.init = function(e) {
for (var t, r, n = 0; n < 256; ++n)
this.S[n] = n;
for (n = t = 0; n < 256; ++n)
t = t + this.S[n] + e[n % e.length] & 255,
r = this.S[n],
this.S[n] = this.S[t],
this.S[t] = r;
this.j = this.i = 0
}
,
this.next = function() {
var e;
return this.i = this.i + 1 & 255,
this.j = this.j + this.S[this.i] & 255,
e = this.S[this.i],
this.S[this.i] = this.S[this.j],
this.S[this.j] = e,
this.S[e + this.S[this.i] & 255]
}
}
, v = function(e, t) {
this.x = t,
this.q = e
};
Array.Clear = function(e) {
for (var t in e)
e[t] = null
}
,
Array.Copy = function(e, t, r, n, o) {
for (e = e.slice(t, t + o),
t = 0; t < e.length; t++)
r[n] = e[t],
n++
}
,
window.Int32 = {
minValue: -parseInt("10000000000000000000000000000000", 2),
maxValue: parseInt("1111111111111111111111111111111", 2),
parse: function(e) {
if (e < this.minValue) {
e = new Number(-e),
e = e.toString(2),
e = e.substr(e.length - 31, 31);
for (var t = "", r = 0; r < e.length; r++) {
var n = e.substr(r, 1);
t += "0" == n ? "1" : "0"
}
return e = parseInt(t, 2),
e + 1
}
if (e > this.maxValue) {
for (e = Number(e).toString(2),
e = e.substr(e.length - 31, 31),
t = "",
r = 0; r < e.length; r++)
n = e.substr(r, 1),
t += "0" == n ? "1" : "0";
return e = parseInt(t, 2),
-(e + 1)
}
return e
},
parseByte: function(e) {
if (e < 0) {
e = new Number(-e),
e = e.toString(2),
e = e.substr(e.length - 8, 8);
for (var t = "", r = 0; r < e.length; r++) {
var n = e.substr(r, 1);
t += "0" == n ? "1" : "0"
}
return parseInt(t, 2) + 1
}
return e > 255 ? (e = Number(e).toString(2),
parseInt(e.substr(e.length - 8, 8), 2)) : e
}
},
"undefined" !== typeof Gt && Gt || (Gt = {}),
"undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}),
"undefined" !== typeof Gt && Gt || (Gt = {}),
"undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {});
var x = [[214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5], [43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153], [156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98], [228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166], [71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168], [104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53], [30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135], [212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158], [234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161], [224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227], [29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111], [213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81], [141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216], [10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176], [137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132], [24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72]]
, y = [462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257]
, B = [2746333894, 1453994832, 1736282519, 2993693404];
function C(e, t) {
return e ^ t
}
function E(e, t) {
return t %= 32,
e << t | e >>> 32 - t
}
function k(e) {
return x[(4026531840 & e) >>> 28][(251658240 & e) >>> 24] << 24 | x[(15728640 & e) >>> 20][(983040 & e) >>> 16] << 16 | x[(61440 & e) >>> 12][(3840 & e) >>> 8] << 8 | x[(240 & e) >>> 4][(15 & e) >>> 0] << 0
}
function D(e) {
return e = k(e),
C(C(C(e, E(e, 2)), C(E(e, 10), E(e, 18))), E(e, 24))
}
function F(e) {
return e = k(e),
C(e, C(E(e, 13), E(e, 23)))
}
function P(e) {
var t = []
, r = [];
for (t[0] = C(e[0], B[0]),
t[1] = C(e[1], B[1]),
t[2] = C(e[2], B[2]),
t[3] = C(e[3], B[3]),
e = 0; e < 32; e++)
t[e + 4] = C(t[e], F(C(C(t[e + 1], t[e + 2]), C(t[e + 3], y[e])))),
r[e] = t[e + 4].toString(16);
return r
}
function O(e, t) {
for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) {
for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = 0; l < 32; l++)
i[l + 4] = C(i[l], D(C(C(i[l + 1], i[l + 2]), C(i[l + 3], parseInt(a[l], 16)))));
n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)])
}
return new c(n)
}
function I(e, t) {
for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) {
for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = [], s = a.length - 1; s >= 0; s--)
l[a.length - 1 - s] = a[s];
for (s = 0; s < 32; s++)
i[s + 4] = C(i[s], D(C(C(i[s + 1], i[s + 2]), C(i[s + 3], parseInt(l[s], 16)))));
n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)])
}
return new c(n)
}
function H(e, t) {
if (void 0 != e && void 0 != t && "" != e && "" != t) {
var r = new s
, n = O(r.parseUTF8(e).getArrs(), r.HexParse(t).getArrs());
return r.HexStringify(n)
}
}
function N(e, t) {
if (void 0 != e && void 0 != t && "" != e && "" != t) {
var r = new s
, n = r.HexParse(e);
r = r.HexParse(t),
n = I(n.getArrs(), r.getArrs());
return (new s).stringifyUTF8(n)
}
}
var L, S = S || function(e, t) {
var r = {}
, n = r.lib = {}
, o = n.Base = function() {
function e() {}
return {
extend: function(t) {
e.prototype = this;
var r = new e;
return t && r.mixIn(t),
r.hasOwnProperty("init") || (r.init = function() {
r.$super.init.apply(this, arguments)
}
),
r.init.prototype = r,
r.$super = this,
r
},
create: function() {
var e = this.extend();
return e.init.apply(e, arguments),
e
},
init: function() {},
mixIn: function(e) {
for (var t in e)
e.hasOwnProperty(t) && (this[t] = e[t]);
e.hasOwnProperty("toString") && (this.toString = e.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
}
}()
, i = n.WordArray = o.extend({
init: function(e, r) {
e = this.words = e || [],
this.sigBytes = r != t ? r : 4 * e.length
},
toString: function(e) {
return (e || l).stringify(this)
},
concat: function(e) {
var t = this.words
, r = e.words
, n = this.sigBytes
, o = e.sigBytes;
if (this.clamp(),
n % 4)
for (var i = 0; i < o; i += 1) {
var a = r[i >>> 2] >>> 24 - i % 4 * 8 & 255;
t[n + i >>> 2] |= a << 24 - (n + i) % 4 * 8
}
else if (r.length > 65535)
for (i = 0; i < o; i += 4)
t[n + i >>> 2] = r[i >>> 2];
else
t.push.apply(t, r);
return this.sigBytes += o,
this
},
clamp: function() {
var t = this.words
, r = this.sigBytes;
t[r >>> 2] &= 4294967295 << 32 - r % 4 * 8,
t.length = e.ceil(r / 4)
},
clone: function() {
var e = o.clone.call(this);
return e.words = this.words.slice(0),
e
},
random: function(t) {
for (var r = [], n = 0; n < t; n += 4)
r.push(4294967296 * e.random() | 0);
return new i.init(r,t)
}
})
, a = r.enc = {}
, l = a.Hex = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) {
var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
n.push((i >>> 4).toString(16)),
n.push((15 & i).toString(16))
}
return n.join("")
},
parse: function(e) {
for (var t = e.length, r = [], n = 0; n < t; n += 2)
r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4;
return new i.init(r,t / 2)
}
}
, s = a.Latin1 = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) {
var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
n.push(String.fromCharCode(i))
}
return n.join("")
},
parse: function(e) {
for (var t = e.length, r = [], n = 0; n < t; n += 1)
r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8;
return new i.init(r,t)
}
}
, c = a.Utf8 = {
stringify: function(e) {
try {
return decodeURIComponent(escape(s.stringify(e)))
} catch (t) {
throw new Error("Malformed UTF-8 data")
}
},
parse: function(e) {
return s.parse(unescape(encodeURIComponent(e)))
}
}
, u = n.BufferedBlockAlgorithm = o.extend({
reset: function() {
this._data = new i.init,
this._nDataBytes = 0
},
_append: function(e) {
"string" === typeof e && (e = c.parse(e)),
this._data.concat(e),
this._nDataBytes += e.sigBytes
},
_process: function(t) {
var r = this._data
, n = r.words
, o = r.sigBytes
, a = this.blockSize
, l = 4 * a
, s = o / l;
s = t ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0);
var c = s * a
, u = e.min(4 * c, o);
if (c) {
for (var d = 0; d < c; d += a)
this._doProcessBlock(n, d);
var A = n.splice(0, c);
r.sigBytes -= u
}
return new i.init(A,u)
},
clone: function() {
var e = o.clone.call(this);
return e._data = this._data.clone(),
e
},
_minBufferSize: 0
})
, d = (n.Hasher = u.extend({
cfg: o.extend(),
init: function(e) {
this.cfg = this.cfg.extend(e),
this.reset()
},
reset: function() {
u.reset.call(this),
this._doReset()
},
update: function(e) {
return this._append(e),
this._process(),
this
},
finalize: function(e) {
e && this._append(e);
var t = this._doFinalize();
return t
},
blockSize: 16,
_createHelper: function(e) {
return function(t, r) {
return new e.init(r).finalize(t)
}
},
_createHmacHelper: function(e) {
return function(t, r) {
return new d.HMAC.init(e,r).finalize(t)
}
}
}),
r.algo = {});
return r
}(Math);
u = 0xdeadbeefcafe,
d = 15715070 == (16777215 & u);
function z(e, t, r) {
null != e && ("number" === typeof e ? this.fromNumber(e, t, r) : null == t && "string" !== typeof e ? this.fromString(e, 256) : this.fromString(e, t))
}
function Y() {
return new z(null)
}
function M(e, t, r, n, o, i) {
while (--i >= 0) {
var a = t * this[e++] + r[n] + o;
o = Math.floor(a / 67108864),
r[n++] = 67108863 & a
}
return o
}
function X(e, t, r, n, o, i) {
var a = 32767 & t
, l = t >> 15;
while (--i >= 0) {
var s = 32767 & this[e]
, c = this[e++] >> 15
, u = l * s + c * a;
s = a * s + ((32767 & u) << 15) + r[n] + (1073741823 & o),
o = (s >>> 30) + (u >>> 15) + l * c + (o >>> 30),
r[n++] = 1073741823 & s
}
return o
}
function T(e, t, r, n, o, i) {
var a = 16383 & t
, l = t >> 14;
while (--i >= 0) {
var s = 16383 & this[e]
, c = this[e++] >> 14
, u = l * s + c * a;
s = a * s + ((16383 & u) << 14) + r[n] + o,
o = (s >> 28) + (u >> 14) + l * c,
r[n++] = 268435455 & s
}
return o
}
d && "Microsoft Internet Explorer" == navigator.appName ? (z.prototype.am = X,
L = 30) : d && "Netscape" != navigator.appName ? (z.prototype.am = M,
L = 26) : (z.prototype.am = T,
L = 28),
z.prototype.DB = L,
z.prototype.DM = (1 << L) - 1,
z.prototype.DV = 1 << L;
A = 52;
z.prototype.FV = Math.pow(2, A),
z.prototype.F1 = A - L,
z.prototype.F2 = 2 * L - A;
var Q, G;
p = "0123456789abcdefghijklmnopqrstuvwxyz",
g = [];
for (Q = "0".charCodeAt(0),
G = 0; G <= 9; G += 1)
g[Q++] = G;
for (Q = "a".charCodeAt(0),
G = 10; G < 36; G += 1)
g[Q++] = G;
for (Q = "A".charCodeAt(0),
G = 10; G < 36; G += 1)
g[Q++] = G;
function j(e) {
for (var t = this.t - 1; t >= 0; t -= 1)
e[t] = this[t];
e.t = this.t,
e.s = this.s
}
function R(e) {
this.t = 1,
this.s = e < 0 ? -1 : 0,
e > 0 ? this[0] = e : e < -1 ? this[0] = e + this.DV : this.t = 0
}
function V(e) {
var t = Y();
return t.fromInt(e),
t
}
function W(e, t) {
var r;
if (16 == t)
r = 4;
else if (8 == t)
r = 3;
else if (256 == t)
r = 8;
else if (2 == t)
r = 1;
else if (32 == t)
r = 5;
else {
if (4 != t)
return void this.fromRadix(e, t);
r = 2
}
this.t = 0,
this.s = 0;
var n = e.length
, o = !1
, i = 0;
while (--n >= 0) {
var a = 8 == r ? 255 & e[n] : h(e, n);
a < 0 ? "-" == e.charAt(n) && (o = !0) : (o = !1,
0 == i ? this[this.t++] = a : i + r > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - i) - 1) << i,
this[this.t++] = a >> this.DB - i) : this[this.t - 1] |= a << i,
i += r,
i >= this.DB && (i -= this.DB))
}
8 == r && 0 != (128 & e[0]) && (this.s = -1,
i > 0 && (this[this.t - 1] |= (1 << this.DB - i) - 1 << i)),
this.clamp(),
o && z.ZERO.subTo(this, this)
}
function U() {
var e = this.s & this.DM;
while (this.t > 0 && this[this.t - 1] == e)
--this.t
}
function K(e) {
if (this.s < 0)
return "-" + this.negate().toString(e);
var t;
if (16 == e)
t = 4;
else if (8 == e)
t = 3;
else if (2 == e)
t = 1;
else if (32 == e)
t = 5;
else {
if (4 != e)
return this.toRadix(e);
t = 2
}
var r, n = (1 << t) - 1, o = !1, i = "", a = this.t, l = this.DB - a * this.DB % t;
if (a-- > 0) {
l < this.DB && (r = this[a] >> l) > 0 && (o = !0,
i = f(r));
while (a >= 0)
l < t ? (r = (this[a] & (1 << l) - 1) << t - l,
r |= this[a -= 1] >> (l += this.DB - t)) : (r = this[a] >> (l -= t) & n,
l <= 0 && (l += this.DB,
a -= 1)),
r > 0 && (o = !0),
o && (i += f(r))
}
return o ? i : "0"
}
function q() {
var e = Y();
return z.ZERO.subTo(this, e),
e
}
function Z() {
return this.s < 0 ? this.negate() : this
}
function J(e) {
var t = this.s - e.s;
if (0 != t)
return t;
var r = this.t;
if (t = r - e.t,
0 != t)
return this.s < 0 ? -t : t;
while (--r >= 0)
if (0 != (t = this[r] - e[r]))
return t;
return 0
}
function _(e) {
var t, r = 1;
return 0 != (t = e >>> 16) && (e = t,
r += 16),
0 != (t = e >> 8) && (e = t,
r += 8),
0 != (t = e >> 4) && (e = t,
r += 4),
0 != (t = e >> 2) && (e = t,
r += 2),
0 != (t = e >> 1) && (e = t,
r += 1),
r
}
function $() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + _(this[this.t - 1] ^ this.s & this.DM)
}
function ee(e, t) {
var r;
for (r = this.t - 1; r >= 0; r -= 1)
t[r + e] = this[r];
for (r = e - 1; r >= 0; r -= 1)
t[r] = 0;
t.t = this.t + e,
t.s = this.s
}
function te(e, t) {
for (var r = e; r < this.t; r += 1)
t[r - e] = this[r];
t.t = Math.max(this.t - e, 0),
t.s = this.s
}
function re(e, t) {
var r, n = e % this.DB, o = this.DB - n, i = (1 << o) - 1, a = Math.floor(e / this.DB), l = this.s << n & this.DM;
for (r = this.t - 1; r >= 0; r -= 1)
t[r + a + 1] = this[r] >> o | l,
l = (this[r] & i) << n;
for (r = a - 1; r >= 0; r -= 1)
t[r] = 0;
t[a] = l,
t.t = this.t + a + 1,
t.s = this.s,
t.clamp()
}
function ne(e, t) {
t.s = this.s;
var r = Math.floor(e / this.DB);
if (r >= this.t)
t.t = 0;
else {
var n = e % this.DB
, o = this.DB - n
, i = (1 << n) - 1;
t[0] = this[r] >> n;
for (var a = r + 1; a < this.t; a += 1)
t[a - r - 1] |= (this[a] & i) << o,
t[a - r] = this[a] >> n;
n > 0 && (t[this.t - r - 1] |= (this.s & i) << o),
t.t = this.t - r,
t.clamp()
}
}
function oe(e, t) {
var r = 0
, n = 0
, o = Math.min(e.t, this.t);
while (r < o)
n += this[r] - e[r],
t[r++] = n & this.DM,
n >>= this.DB;
if (e.t < this.t) {
n -= e.s;
while (r < this.t)
n += this[r],
t[r++] = n & this.DM,
n >>= this.DB;
n += this.s
} else {
n += this.s;
while (r < e.t)
n -= e[r],
t[r++] = n & this.DM,
n >>= this.DB;
n -= e.s
}
t.s = n < 0 ? -1 : 0,
n < -1 ? t[r++] = this.DV + n : n > 0 && (t[r++] = n),
t.t = r,
t.clamp()
}
function ie(e, t) {
var r = this.abs()
, n = e.abs()
, o = r.t;
t.t = o + n.t;
while (--o >= 0)
t[o] = 0;
for (o = 0; o < n.t; o += 1)
t[o + r.t] = r.am(0, n[o], t, o, 0, r.t);
t.s = 0,
t.clamp(),
this.s != e.s && z.ZERO.subTo(t, t)
}
function ae(e) {
var t = this.abs()
, r = e.t = 2 * t.t;
while (--r >= 0)
e[r] = 0;
for (r = 0; r < t.t - 1; r += 1) {
var n = t.am(r, t[r], e, 2 * r, 0, 1);
(e[r + t.t] += t.am(r + 1, 2 * t[r], e, 2 * r + 1, n, t.t - r - 1)) >= t.DV && (e[r + t.t] -= t.DV,
e[r + t.t + 1] = 1)
}
e.t > 0 && (e[e.t - 1] += t.am(r, t[r], e, 2 * r, 0, 1)),
e.s = 0,
e.clamp()
}
function le(e, t, r) {
var n = e.abs();
if (!(n.t <= 0)) {
var o = this.abs();
if (o.t < n.t)
return null != t && t.fromInt(0),
void (null != r && this.copyTo(r));
null == r && (r = Y());
var i = Y()
, a = this.s
, l = e.s
, s = this.DB - _(n[n.t - 1]);
s > 0 ? (n.lShiftTo(s, i),
o.lShiftTo(s, r)) : (n.copyTo(i),
o.copyTo(r));
var c = i.t
, u = i[c - 1];
if (0 != u) {
var d = u * (1 << this.F1) + (c > 1 ? i[c - 2] >> this.F2 : 0)
, A = this.FV / d
, p = (1 << this.F1) / d
, g = 1 << this.F2
, f = r.t
, h = f - c
, b = null == t ? Y() : t;
i.dlShiftTo(h, b),
r.compareTo(b) >= 0 && (r[r.t++] = 1,
r.subTo(b, r)),
z.ONE.dlShiftTo(c, b),
b.subTo(i, i);
while (i.t < c)
i[i.t++] = 0;
while (--h >= 0) {
var m = r[f -= 1] == u ? this.DM : Math.floor(r[f] * A + (r[f - 1] + g) * p);
if ((r[f] += i.am(0, m, r, h, 0, c)) < m) {
i.dlShiftTo(h, b),
r.subTo(b, r);
while (r[f] < --m)
r.subTo(b, r)
}
}
null != t && (r.drShiftTo(c, t),
a != l && z.ZERO.subTo(t, t)),
r.t = c,
r.clamp(),
s > 0 && r.rShiftTo(s, r),
a < 0 && z.ZERO.subTo(r, r)
}
}
}
function se(e) {
var t = Y();
return this.abs().divRemTo(e, null, t),
this.s < 0 && t.compareTo(z.ZERO) > 0 && e.subTo(t, t),
t
}
function ce(e) {
this.m = e
}
function ue(e) {
return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e
}
function de(e) {
return e
}
function Ae(e) {
e.divRemTo(this.m, null, e)
}
function pe(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
function ge(e, t) {
e.squareTo(t),
this.reduce(t)
}
function fe() {
if (this.t < 1)
return 0;
var e = this[0];
if (0 == (1 & e))
return 0;
var t = 3 & e;
return t = t * (2 - (15 & e) * t) & 15,
t = t * (2 - (255 & e) * t) & 255,
t = t * (2 - ((65535 & e) * t & 65535)) & 65535,
t = t * (2 - e * t % this.DV) % this.DV,
t > 0 ? this.DV - t : -t
}
function he(e) {
this.m = e,
this.mp = e.invDigit(),
this.mpl = 32767 & this.mp,
this.mph = this.mp >> 15,
this.um = (1 << e.DB - 15) - 1,
this.mt2 = 2 * e.t
}
function be(e) {
var t = Y();
return e.abs().dlShiftTo(this.m.t, t),
t.divRemTo(this.m, null, t),
e.s < 0 && t.compareTo(z.ZERO) > 0 && this.m.subTo(t, t),
t
}
function me(e) {
var t = Y();
return e.copyTo(t),
this.reduce(t),
t
}
function we(e) {
while (e.t <= this.mt2)
e[e.t++] = 0;
for (var t = 0; t < this.m.t; t += 1) {
var r = 32767 & e[t]
, n = r * this.mpl + ((r * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
r = t + this.m.t,
e[r] += this.m.am(0, n, e, t, 0, this.m.t);
while (e[r] >= e.DV)
e[r] -= e.DV,
e[r += 1] += 1
}
e.clamp(),
e.drShiftTo(this.m.t, e),
e.compareTo(this.m) >= 0 && e.subTo(this.m, e)
}
function ve(e, t) {
e.squareTo(t),
this.reduce(t)
}
function xe(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
function ye() {
return 0 == (this.t > 0 ? 1 & this[0] : this.s)
}
function Be(e, t) {
if (e > 4294967295 || e < 1)
return z.ONE;
var r = Y()
, n = Y()
, o = t.convert(this)
, i = _(e) - 1;
o.copyTo(r);
while (--i >= 0)
if (t.sqrTo(r, n),
(e & 1 << i) > 0)
t.mulTo(n, o, r);
else {
var a = r;
r = n,
n = a
}
return t.revert(r)
}
function Ce(e, t) {
var r;
return r = e < 256 || t.isEven() ? new ce(t) : new he(t),
this.exp(e, r)
}
function Ee() {
var e = Y();
return this.copyTo(e),
e
}
function ke() {
if (this.s < 0) {
if (1 == this.t)
return this[0] - this.DV;
if (0 == this.t)
return -1
} else {
if (1 == this.t)
return this[0];
if (0 == this.t)
return 0
}
return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
}
function De() {
return 0 == this.t ? this.s : this[0] << 24 >> 24
}
function Fe() {
return 0 == this.t ? this.s : this[0] << 16 >> 16
}
function Pe(e) {
return Math.floor(Math.LN2 * this.DB / Math.log(e))
}
function Oe() {
return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
}
function Ie(e) {
if (null == e && (e = 10),
0 == this.signum() || e < 2 || e > 36)
return "0";
var t = this.chunkSize(e)
, r = Math.pow(e, t)
, n = V(r)
, o = Y()
, i = Y()
, a = "";
this.divRemTo(n, o, i);
while (o.signum() > 0)
a = (r + i.intValue()).toString(e).substr(1) + a,
o.divRemTo(n, o, i);
return i.intValue().toString(e) + a
}
function He(e, t) {
this.fromInt(0),
null == t && (t = 10);
for (var r = this.chunkSize(t), n = Math.pow(t, r), o = !1, i = 0, a = 0, l = 0; l < e.length; l += 1) {
var s = h(e, l);
s < 0 ? "-" == e.charAt(l) && 0 == this.signum() && (o = !0) : (a = t * a + s,
++i >= r && (this.dMultiply(n),
this.dAddOffset(a, 0),
i = 0,
a = 0))
}
i > 0 && (this.dMultiply(Math.pow(t, i)),
this.dAddOffset(a, 0)),
o && z.ZERO.subTo(this, this)
}
function Ne(e, t, r) {
if ("number" === typeof t)
if (e < 2)
this.fromInt(1);
else {
this.fromNumber(e, r),
this.testBit(e - 1) || this.bitwiseTo(z.ONE.shiftLeft(e - 1), Qe, this),
this.isEven() && this.dAddOffset(1, 0);
while (!this.isProbablePrime(t))
this.dAddOffset(2, 0),
this.bitLength() > e && this.subTo(z.ONE.shiftLeft(e - 1), this)
}
else {
var n = []
, i = 7 & e;
if (n.length = 1 + (e >> 3),
t.nextBytes(n),
i > 0 ? n[0] &= (1 << i) - 1 : n[0] = 0,
"FF" == b() && o) {
var a = new ArrayBuffer(32)
, l = new Int8Array(a);
for (o && o.getRandomValues(l),
r = 0; r < l.length; ++r)
n[r] = 255 & l[r]
} else if ("IE11" == b()) {
a = new ArrayBuffer(32),
l = new Int8Array(a);
var s = o || o;
for (o && s.getRandomValues(l),
r = 0; r < l.length; ++r)
n[r] = 255 & l[r]
} else if ("edge" == b()) {
a = new ArrayBuffer(32),
l = new Int8Array(a),
s = o || o;
for (o && s.getRandomValues(l),
r = 0; r < l.length; ++r)
n[r] = 255 & l[r]
}
this.fromString(n, 256)
}
}
function Le() {
var e = this.t
, t = [];
t[0] = this.s;
var r, n = this.DB - e * this.DB % 8, o = 0;
if (e-- > 0) {
n < this.DB && (r = this[e] >> n) != (this.s & this.DM) >> n && (t[o++] = r | this.s << this.DB - n);
while (e >= 0)
n < 8 ? (r = (this[e] & (1 << n) - 1) << 8 - n,
r |= this[e -= 1] >> (n += this.DB - 8)) : (r = this[e] >> (n -= 8) & 255,
n <= 0 && (n += this.DB,
e -= 1)),
0 != (128 & r) && (r |= -256),
0 == o && (128 & this.s) != (128 & r) && ++o,
(o > 0 || r != this.s) && (t[o++] = r)
}
return t
}
function Se(e) {
return 0 == this.compareTo(e)
}
function ze(e) {
return this.compareTo(e) < 0 ? this : e
}
function Ye(e) {
return this.compareTo(e) > 0 ? this : e
}
function Me(e, t, r) {
var n, o, i = Math.min(e.t, this.t);
for (n = 0; n < i; n += 1)
r[n] = t(this[n], e[n]);
if (e.t < this.t) {
for (o = e.s & this.DM,
n = i; n < this.t; n += 1)
r[n] = t(this[n], o);
r.t = this.t
} else {
for (o = this.s & this.DM,
n = i; n < e.t; n += 1)
r[n] = t(o, e[n]);
r.t = e.t
}
r.s = t(this.s, e.s),
r.clamp()
}
function Xe(e, t) {
return e & t
}
function Te(e) {
var t = Y();
return this.bitwiseTo(e, Xe, t),
t
}
function Qe(e, t) {
return e | t
}
function Ge(e) {
var t = Y();
return this.bitwiseTo(e, Qe, t),
t
}
function je(e, t) {
return e ^ t
}
function Re(e) {
var t = Y();
return this.bitwiseTo(e, je, t),
t
}
function Ve(e, t) {
return e & ~t
}
function We(e) {
var t = Y();
return this.bitwiseTo(e, Ve, t),
t
}
function Ue() {
for (var e = Y(), t = 0; t < this.t; t += 1)
e[t] = this.DM & ~this[t];
return e.t = this.t,
e.s = ~this.s,
e
}
function Ke(e) {
var t = Y();
return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t),
t
}
function qe(e) {
var t = Y();
return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t),
t
}
function Ze(e) {
if (0 == e)
return -1;
var t = 0;
return 0 == (65535 & e) && (e >>= 16,
t += 16),
0 == (255 & e) && (e >>= 8,
t += 8),
0 == (15 & e) && (e >>= 4,
t += 4),
0 == (3 & e) && (e >>= 2,
t += 2),
0 == (1 & e) && ++t,
t
}
function Je() {
for (var e = 0; e < this.t; e += 1)
if (0 != this[e])
return e * this.DB + Ze(this[e]);
return this.s < 0 ? this.t * this.DB : -1
}
function _e(e) {
var t = 0;
while (0 != e)
e &= e - 1,
t += 1;
return t
}
function $e() {
for (var e = 0, t = this.s & this.DM, r = 0; r < this.t; r += 1)
e += _e(this[r] ^ t);
return e
}
function et(e) {
var t = Math.floor(e / this.DB);
return t >= this.t ? 0 != this.s : 0 != (this[t] & 1 << e % this.DB)
}
function tt(e, t) {
var r = z.ONE.shiftLeft(e);
return this.bitwiseTo(r, t, r),
r
}
function rt(e) {
return this.changeBit(e, Qe)
}
function nt(e) {
return this.changeBit(e, Ve)
}
function ot(e) {
return this.changeBit(e, je)
}
function it(e, t) {
var r = 0
, n = 0
, o = Math.min(e.t, this.t);
while (r < o)
n += this[r] + e[r],
t[r++] = n & this.DM,
n >>= this.DB;
if (e.t < this.t) {
n += e.s;
while (r < this.t)
n += this[r],
t[r++] = n & this.DM,
n >>= this.DB;
n += this.s
} else {
n += this.s;
while (r < e.t)
n += e[r],
t[r++] = n & this.DM,
n >>= this.DB;
n += e.s
}
t.s = n < 0 ? -1 : 0,
n > 0 ? t[r++] = n : n < -1 && (t[r++] = this.DV + n),
t.t = r,
t.clamp()
}
function at(e) {
var t = Y();
return this.addTo(e, t),
t
}
function lt(e) {
var t = Y();
return this.subTo(e, t),
t
}
function st(e) {
var t = Y();
return this.multiplyTo(e, t),
t
}
function ct() {
var e = Y();
return this.squareTo(e),
e
}
function ut(e) {
var t = Y();
return this.divRemTo(e, t, null),
t
}
function dt(e) {
var t = Y();
return this.divRemTo(e, null, t),
t
}
function At(e) {
var t = Y()
, r = Y();
return this.divRemTo(e, t, r),
[t, r]
}
function pt(e) {
this[this.t] = this.am(0, e - 1, this, 0, 0, this.t),
++this.t,
this.clamp()
}
function gt(e, t) {
if (0 != e) {
while (this.t <= t)
this[this.t++] = 0;
this[t] += e;
while (this[t] >= this.DV)
this[t] -= this.DV,
++t >= this.t && (this[this.t++] = 0),
++this[t]
}
}
function ft() {}
function ht(e) {
return e
}
function bt(e, t, r) {
e.multiplyTo(t, r)
}
function mt(e, t) {
e.squareTo(t)
}
function wt(e) {
return this.exp(e, new ft)
}
function vt(e, t, r) {
var n, o = Math.min(this.t + e.t, t);
r.s = 0,
r.t = o;
while (o > 0)
r[o -= 1] = 0;
for (n = r.t - this.t; o < n; o += 1)
r[o + this.t] = this.am(0, e[o], r, o, 0, this.t);
for (n = Math.min(e.t, t); o < n; o += 1)
this.am(0, e[o], r, o, 0, t - o);
r.clamp()
}
function xt(e, t, r) {
t -= 1;
var n = r.t = this.t + e.t - t;
r.s = 0;
while (--n >= 0)
r[n] = 0;
for (n = Math.max(t - this.t, 0); n < e.t; n += 1)
r[this.t + n - t] = this.am(t - n, e[n], r, 0, 0, this.t + n - t);
r.clamp(),
r.drShiftTo(1, r)
}
function yt(e) {
this.r2 = Y(),
this.q3 = Y(),
z.ONE.dlShiftTo(2 * e.t, this.r2),
this.mu = this.r2.divide(e),
this.m = e
}
function Bt(e) {
if (e.s < 0 || e.t > 2 * this.m.t)
return e.mod(this.m);
if (e.compareTo(this.m) < 0)
return e;
var t = Y();
return e.copyTo(t),
this.reduce(t),
t
}
function Ct(e) {
return e
}
function Et(e) {
e.drShiftTo(this.m.t - 1, this.r2),
e.t > this.m.t + 1 && (e.t = this.m.t + 1,
e.clamp()),
this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
while (e.compareTo(this.r2) < 0)
e.dAddOffset(1, this.m.t + 1);
e.subTo(this.r2, e);
while (e.compareTo(this.m) >= 0)
e.subTo(this.m, e)
}
function kt(e, t) {
e.squareTo(t),
this.reduce(t)
}
function Dt(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
function Ft(e, t) {
var r, n, o = e.bitLength(), i = V(1);
if (o <= 0)
return i;
r = o < 18 ? 1 : o < 48 ? 3 : o < 144 ? 4 : o < 768 ? 5 : 6,
n = o < 8 ? new ce(t) : t.isEven() ? new yt(t) : new he(t);
var a = []
, l = 3
, s = r - 1
, c = (1 << r) - 1;
if (a[1] = n.convert(this),
r > 1) {
var u = Y();
n.sqrTo(a[1], u);
while (l <= c)
a[l] = Y(),
n.mulTo(u, a[l - 2], a[l]),
l += 2
}
var d, A, p = e.t - 1, g = !0, f = Y();
o = _(e[p]) - 1;
while (p >= 0) {
o >= s ? d = e[p] >> o - s & c : (d = (e[p] & (1 << o + 1) - 1) << s - o,
p > 0 && (d |= e[p - 1] >> this.DB + o - s)),
l = r;
while (0 == (1 & d))
d >>= 1,
l -= 1;
if ((o -= l) < 0 && (o += this.DB,
p -= 1),
g)
a[d].copyTo(i),
g = !1;
else {
while (l > 1)
n.sqrTo(i, f),
n.sqrTo(f, i),
l -= 2;
l > 0 ? n.sqrTo(i, f) : (A = i,
i = f,
f = A),
n.mulTo(f, a[d], i)
}
while (p >= 0 && 0 == (e[p] & 1 << o))
n.sqrTo(i, f),
A = i,
i = f,
f = A,
--o < 0 && (o = this.DB - 1,
p -= 1)
}
return n.revert(i)
}
function Pt(e) {
var t = this.s < 0 ? this.negate() : this.clone()
, r = e.s < 0 ? e.negate() : e.clone();
if (t.compareTo(r) < 0) {
var n = t;
t = r,
r = n
}
var o = t.getLowestSetBit()
, i = r.getLowestSetBit();
if (i < 0)
return t;
o < i && (i = o),
i > 0 && (t.rShiftTo(i, t),
r.rShiftTo(i, r));
while (t.signum() > 0)
(o = t.getLowestSetBit()) > 0 && t.rShiftTo(o, t),
(o = r.getLowestSetBit()) > 0 && r.rShiftTo(o, r),
t.compareTo(r) >= 0 ? (t.subTo(r, t),
t.rShiftTo(1, t)) : (r.subTo(t, r),
r.rShiftTo(1, r));
return i > 0 && r.lShiftTo(i, r),
r
}
function Ot(e) {
if (e <= 0)
return 0;
var t = this.DV % e
, r = this.s < 0 ? e - 1 : 0;
if (this.t > 0)
if (0 == t)
r = this[0] % e;
else
for (var n = this.t - 1; n >= 0; n -= 1)
r = (t * r + this[n]) % e;
return r
}
function It(e) {
var t = e.isEven();
if (this.isEven() && t || 0 == e.signum())
return z.ZERO;
var r = e.clone()
, n = this.clone()
, o = V(1)
, i = V(0)
, a = V(0)
, l = V(1);
while (0 != r.signum()) {
while (r.isEven())
r.rShiftTo(1, r),
t ? (o.isEven() && i.isEven() || (o.addTo(this, o),
i.subTo(e, i)),
o.rShiftTo(1, o)) : i.isEven() || i.subTo(e, i),
i.rShiftTo(1, i);
while (n.isEven())
n.rShiftTo(1, n),
t ? (a.isEven() && l.isEven() || (a.addTo(this, a),
l.subTo(e, l)),
a.rShiftTo(1, a)) : l.isEven() || l.subTo(e, l),
l.rShiftTo(1, l);
r.compareTo(n) >= 0 ? (r.subTo(n, r),
t && o.subTo(a, o),
i.subTo(l, i)) : (n.subTo(r, n),
t && a.subTo(o, a),
l.subTo(i, l))
}
return 0 != n.compareTo(z.ONE) ? z.ZERO : l.compareTo(e) >= 0 ? l.subtract(e) : l.signum() < 0 ? (l.addTo(e, l),
l.signum() < 0 ? l.add(e) : l) : l
}
ce.prototype.convert = ue,
ce.prototype.revert = de,
ce.prototype.reduce = Ae,
ce.prototype.mulTo = pe,
ce.prototype.sqrTo = ge,
he.prototype.convert = be,
he.prototype.revert = me,
he.prototype.reduce = we,
he.prototype.mulTo = xe,
he.prototype.sqrTo = ve,
z.prototype.copyTo = j,
z.prototype.fromInt = R,
z.prototype.fromString = W,
z.prototype.clamp = U,
z.prototype.dlShiftTo = ee,
z.prototype.drShiftTo = te,
z.prototype.lShiftTo = re,
z.prototype.rShiftTo = ne,
z.prototype.subTo = oe,
z.prototype.multiplyTo = ie,
z.prototype.squareTo = ae,
z.prototype.divRemTo = le,
z.prototype.invDigit = fe,
z.prototype.isEven = ye,
z.prototype.exp = Be,
z.prototype.toString = K,
z.prototype.negate = q,
z.prototype.abs = Z,
z.prototype.compareTo = J,
z.prototype.bitLength = $,
z.prototype.mod = se,
z.prototype.modPowInt = Ce,
z.ZERO = V(0),
z.ONE = V(1),
ft.prototype.convert = ht,
ft.prototype.revert = ht,
ft.prototype.mulTo = bt,
ft.prototype.sqrTo = mt,
yt.prototype.convert = Bt,
yt.prototype.revert = Ct,
yt.prototype.reduce = Et,
yt.prototype.mulTo = Dt,
yt.prototype.sqrTo = kt;
var Ht = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
, Nt = (1 << 26) / Ht[Ht.length - 1];
function Lt(e) {
var t, r = this.abs();
if (1 == r.t && r[0] <= Ht[Ht.length - 1]) {
for (t = 0; t < Ht.length; t += 1)
if (r[0] == Ht[t])
return !0;
return !1
}
if (r.isEven())
return !1;
t = 1;
while (t < Ht.length) {
var n = Ht[t]
, o = t + 1;
while (o < Ht.length && n < Nt)
n *= Ht[o++];
n = r.modInt(n);
while (t < o)
if (n % Ht[t++] == 0)
return !1
}
return r.millerRabin(e)
}
function St(e) {
var t = this.subtract(z.ONE)
, r = t.getLowestSetBit();
if (r <= 0)
return !1;
var n = t.shiftRight(r);
e = e + 1 >> 1,
e > Ht.length && (e = Ht.length);
for (var i = Y(), a = 0; a < e; a += 1) {
o && i.fromInt(Ht[Math.floor(.001 * o.getRandomValues(new Uint8Array(1)) * Ht.length)]);
var l = i.modPow(n, this);
if (0 != l.compareTo(z.ONE) && 0 != l.compareTo(t)) {
var s = 1;
while (s++ < r && 0 != l.compareTo(t))
if (l = l.modPowInt(2, this),
0 == l.compareTo(z.ONE))
return !1;
if (0 != l.compareTo(t))
return !1
}
}
return !0
}
function zt() {
this.i = 0,
this.j = 0,
this.S = []
}
function Yt(e) {
var t, r, n;
for (t = 0; t < 256; t += 1)
this.S[t] = t;
for (r = 0,
t = 0; t < 256; t += 1)
r = r + this.S[t] + e[t % e.length] & 255,
n = this.S[t],
this.S[t] = this.S[r],
this.S[r] = n;
this.i = 0,
this.j = 0
}
function Mt() {
var e;
return this.i = this.i + 1 & 255,
this.j = this.j + this.S[this.i] & 255,
e = this.S[this.i],
this.S[this.i] = this.S[this.j],
this.S[this.j] = e,
this.S[e + this.S[this.i] & 255]
}
z.prototype.chunkSize = Pe,
z.prototype.toRadix = Ie,
z.prototype.fromRadix = He,
z.prototype.fromNumber = Ne,
z.prototype.bitwiseTo = Me,
z.prototype.changeBit = tt,
z.prototype.addTo = it,
z.prototype.dMultiply = pt,
z.prototype.dAddOffset = gt,
z.prototype.multiplyLowerTo = vt,
z.prototype.multiplyUpperTo = xt,
z.prototype.modInt = Ot,
z.prototype.millerRabin = St,
z.prototype.clone = Ee,
z.prototype.intValue = ke,
z.prototype.byteValue = De,
z.prototype.shortValue = Fe,
z.prototype.signum = Oe,
z.prototype.toByteArray = Le,
z.prototype.equals = Se,
z.prototype.min = ze,
z.prototype.max = Ye,
z.prototype.and = Te,
z.prototype.or = Ge,
z.prototype.xor = Re,
z.prototype.andNot = We,
z.prototype.not = Ue,
z.prototype.shiftLeft = Ke,
z.prototype.shiftRight = qe,
z.prototype.getLowestSetBit = Je,
z.prototype.bitCount = $e,
z.prototype.testBit = et,
z.prototype.setBit = rt,
z.prototype.clearBit = nt,
z.prototype.flipBit = ot,
z.prototype.add = at,
z.prototype.subtract = lt,
z.prototype.multiply = st,
z.prototype.divide = ut,
z.prototype.remainder = dt,
z.prototype.divideAndRemainder = At,
z.prototype.modPow = Ft,
z.prototype.modInverse = It,
z.prototype.pow = wt,
z.prototype.gcd = Pt,
z.prototype.isProbablePrime = Lt,
z.prototype.square = ct,
zt.prototype.init = Yt,
zt.prototype.next = Mt;
var Xt, Tt, Qt, Gt, jt = 256;
function Rt(e) {
Tt[Qt++] ^= 255 & e,
Tt[Qt++] ^= e >> 8 & 255,
Tt[Qt++] ^= e >> 16 & 255,
Tt[Qt++] ^= e >> 24 & 255,
Qt >= jt && (Qt -= jt)
}
function Vt() {
Rt((new Date).getTime())
}
if (null == Tt) {
var Wt;
if (Tt = [],
Qt = 0,
o && o.getRandomValues) {
var Ut = new Uint8Array(32);
for (o.getRandomValues(Ut),
Wt = 0; Wt < 32; Wt += 1)
Tt[Qt++] = Ut[Wt]
}
if ("Netscape" == navigator.appName && navigator.appVersion < "5" && o) {
var Kt = o.random(32);
for (Wt = 0; Wt < Kt.length; Wt += 1)
Tt[Qt++] = 255 & Kt.charCodeAt(Wt)
}
while (Qt < jt)
o && (Wt = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001)),
Tt[Qt++] = Wt >>> 8,
Tt[Qt++] = 255 & Wt;
Qt = 0,
Vt()
}
function qt() {
if (null == Xt) {
for (Vt(),
Xt = w(),
Xt.init(Tt),
Qt = 0; Qt < Tt.length; Qt += 1)
Tt[Qt] = 0;
Qt = 0
}
return Xt.next()
}
function Zt(e) {
var t;
for (t = 0; t < e.length; t += 1)
e[t] = qt()
}
function Jt(e) {
return e == this || this.q.equals(e.q) && this.x.equals(e.x)
}
function _t() {
return this.x
}
function $t() {
return new v(this.q,this.x.negate().mod(this.q))
}
function er(e) {
return new v(this.q,this.x.add(e.toBigInteger()).mod(this.q))
}
function tr(e) {
return new v(this.q,this.x.subtract(e.toBigInteger()).mod(this.q))
}
function rr(e) {
return new v(this.q,this.x.multiply(e.toBigInteger()).mod(this.q))
}
function nr() {
return new v(this.q,this.x.square().mod(this.q))
}
function or(e) {
return new v(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q))
}
function ir(e, t, r, n) {
this.curve = e,
this.x = t,
this.y = r,
this.z = null == n ? z.ONE : n,
this.zinv = null
}
function ar() {
return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
function lr() {
return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
function sr(e) {
return e == this || (this.isInfinity() ? e.isInfinity() : e.isInfinity() ? this.isInfinity() : (t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q),
!!t.equals(z.ZERO) && (r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q),
r.equals(z.ZERO))));
var t, r
}
function cr() {
return null == this.x && null == this.y || this.z.equals(z.ZERO) && !this.y.toBigInteger().equals(z.ZERO)
}
function ur() {
return new ir(this.curve,this.x,this.y.negate(),this.z)
}
function dr(e) {
if (this.isInfinity())
return e;
if (e.isInfinity())
return this;
var t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q)
, r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);
if (z.ZERO.equals(r))
return z.ZERO.equals(t) ? this.twice() : this.curve.getInfinity();
var n = new z("3")
, o = this.x.toBigInteger()
, i = this.y.toBigInteger()
, a = (e.x.toBigInteger(),
e.y.toBigInteger(),
r.square())
, l = a.multiply(r)
, s = o.multiply(a)
, c = t.square().multiply(this.z)
, u = c.subtract(s.shiftLeft(1)).multiply(e.z).subtract(l).multiply(r).mod(this.curve.q)
, d = s.multiply(n).multiply(t).subtract(i.multiply(l)).subtract(c.multiply(t)).multiply(e.z).add(t.multiply(l)).mod(this.curve.q)
, A = l.multiply(this.z).multiply(e.z).mod(this.curve.q);
return new ir(this.curve,this.curve.fromBigInteger(u),this.curve.fromBigInteger(d),A)
}
function Ar() {
if (this.isInfinity())
return this;
if (0 == this.y.toBigInteger().signum())
return this.curve.getInfinity();
var e = new z("3")
, t = this.x.toBigInteger()
, r = this.y.toBigInteger()
, n = r.multiply(this.z)
, o = n.multiply(r).mod(this.curve.q)
, i = this.curve.a.toBigInteger()
, a = t.square().multiply(e);
z.ZERO.equals(i) || (a = a.add(this.z.square().multiply(i))),
a = a.mod(this.curve.q);
var l = a.square().subtract(t.shiftLeft(3).multiply(o)).shiftLeft(1).multiply(n).mod(this.curve.q)
, s = a.multiply(e).multiply(t).subtract(o.shiftLeft(1)).shiftLeft(2).multiply(o).subtract(a.square().multiply(a)).mod(this.curve.q)
, c = n.square().multiply(n).shiftLeft(3).mod(this.curve.q);
return new ir(this.curve,this.curve.fromBigInteger(l),this.curve.fromBigInteger(s),c)
}
function pr(e) {
if (this.isInfinity())
return this;
if (0 == e.signum())
return this.curve.getInfinity();
var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this;
for (t = n.bitLength() - 2; t > 0; t -= 1) {
i = i.twice();
var a = n.testBit(t)
, l = r.testBit(t);
a != l && (i = i.add(a ? this : o))
}
return i
}
function gr(e, t, r) {
var n;
n = e.bitLength() > r.bitLength() ? e.bitLength() - 1 : r.bitLength() - 1;
var o = this.curve.getInfinity()
, i = this.add(t);
while (n >= 0)
o = o.twice(),
e.testBit(n) ? o = r.testBit(n) ? o.add(i) : o.add(this) : r.testBit(n) && (o = o.add(t)),
n -= 1;
return o
}
function fr(e, t, r) {
this.q = e,
this.a = this.fromBigInteger(t),
this.b = this.fromBigInteger(r),
this.infinity = new ir(this,null,null)
}
function hr() {
return this.q
}
function br() {
return this.a
}
function mr() {
return this.b
}
function wr(e) {
return e == this || this.q.equals(e.q) && this.a.equals(e.a) && this.b.equals(e.b)
}
function vr() {
return this.infinity
}
function xr(e) {
return new v(this.q,e)
}
function yr(e) {
switch (parseInt(e.substr(0, 2), 16)) {
case 0:
return this.infinity;
case 2:
case 3:
return null;
case 4:
case 6:
case 7:
var t = (e.length - 2) / 2
, r = e.substr(2, t)
, n = e.substr(t + 2, t);
return new ir(this,this.fromBigInteger(new z(r,16)),this.fromBigInteger(new z(n,16)));
default:
return null
}
}
function Br() {
this.BYTE_LENGTH = 64,
this.xBuf = [],
this.xBufOff = 0,
this.byteCount = 0,
this.DIGEST_LENGTH = 32,
this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082],
this.v = [0, 0, 0, 0, 0, 0, 0, 0],
this.v_ = [0, 0, 0, 0, 0, 0, 0, 0],
this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
this.X = [68],
this.xOff = 0,
this.T_00_15 = 2043430169,
this.T_16_63 = 2055708042,
arguments.length > 0 ? this.InitDigest(arguments[0]) : this.Init()
}
function Cr(e, t) {
return e << t | e >>> -t
}
function Er(e) {
if (e > 2147483647 || e < -2147483648) {
var t = 4294967295 & e;
return t > 2147483647 ? (t = 2147483647 & e,
t ^= 2147483647,
-(t + 1)) : t
}
return e
}
function kr(e) {
this.ct = 1,
this.p2 = null,
this.sm3keybase = null,
this.sm3c3 = null,
this.key = new Array(32),
this.keyOff = 0,
this.cipherMode = "undefined" !== typeof e ? e : SM2CipherMode.C1C3C2
}
function Dr(e, t) {
if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) {
var r = S.enc.Utf8.parse(e)
, n = t
, o = n.substr(0, 2);
if ("04" == o) {
n.length > 128 && (n = n.substr(n.length - 128));
var i = n.substr(0, 64)
, a = n.substr(64)
, l = new kr(1)
, s = l.CreatePoint(i, a);
if (void 0 != s) {
r = l.GetWords(r.toString());
var c = l.Encrypt(s, r);
return "04" + c
}
}
}
}
function Fr(e, t) {
if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) {
var r = S.enc.Utf8.parse(e)
, n = t
, o = n.substr(0, 2);
if ("04" == o) {
n.length > 128 && (n = n.substr(n.length - 128));
var i = n.substr(0, 64)
, a = n.substr(64)
, l = new kr(0)
, s = l.CreatePoint(i, a);
if (void 0 != s) {
r = l.GetWords(r.toString());
var c = l.Encrypt(s, r);
return c
}
}
}
}
function Pr(e, t) {
if (void 0 != e && void 0 != t && "" != e && "" != t && 64 == t.length && !(e.length <= 194)) {
var r = e.substr(0, 2);
if ("04" == r) {
e = e.substr(2);
var n = new z(t,16)
, o = new kr(1)
, i = o.Decrypt(n, e);
return i
}
}
}
function Or(e) {
if (void 0 != e && "" != e) {
var t = S.enc.Utf8.parse(e)
, r = new Br;
t = r.GetWords(t.toString()),
r.BlockUpdate(t, 0, t.length);
var n = new Array(32);
r.DoFinal(n, 0);
var o = r.GetHex(n).toString();
return o
}
}
function Ir() {
var e = new Gt.crypto.ECDSA({
curve: "SM2"
});
return e.generateKeyPairHex()
}
function Hr() {
var e = new m
, t = new Array(16);
e.nextBytes(t);
var r = (new Br).GetHex(t);
return r.toString()
}
m.prototype.nextBytes = Zt,
v.prototype.equals = Jt,
v.prototype.toBigInteger = _t,
v.prototype.negate = $t,
v.prototype.add = er,
v.prototype.subtract = tr,
v.prototype.multiply = rr,
v.prototype.square = nr,
v.prototype.divide = or,
ir.prototype.getX = ar,
ir.prototype.getY = lr,
ir.prototype.equals = sr,
ir.prototype.isInfinity = cr,
ir.prototype.negate = ur,
ir.prototype.add = dr,
ir.prototype.twice = Ar,
ir.prototype.multiply = pr,
ir.prototype.multiplyTwo = gr,
fr.prototype.getQ = hr,
fr.prototype.getA = br,
fr.prototype.getB = mr,
fr.prototype.equals = wr,
fr.prototype.getInfinity = vr,
fr.prototype.fromBigInteger = xr,
fr.prototype.decodePointHex = yr,
v.prototype.getByteLength = function() {
return Math.floor((this.toBigInteger().bitLength() + 7) / 8)
}
,
ir.prototype.getEncoded = function(e) {
var t = function(e, t) {
var r = e.toByteArrayUnsigned();
if (t < r.length)
r = r.slice(r.length - t);
else
while (t > r.length)
r.unshift(0);
return r
}
, r = this.getX().toBigInteger()
, n = this.getY().toBigInteger()
, o = t(r, 32);
return e ? n.isEven() ? o.unshift(2) : o.unshift(3) : (o.unshift(4),
o = o.concat(t(n, 32))),
o
}
,
ir.decodeFrom = function(e, t) {
t[0];
var r = t.length - 1
, n = t.slice(1, 1 + r / 2)
, o = t.slice(1 + r / 2, 1 + r);
n.unshift(0),
o.unshift(0);
var i = new z(n)
, a = new z(o);
return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a))
}
,
ir.decodeFromHex = function(e, t) {
t.substr(0, 2);
var r = t.length - 2
, n = t.substr(2, r / 2)
, o = t.substr(2 + r / 2, r / 2)
, i = new z(n,16)
, a = new z(o,16);
return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a))
}
,
ir.prototype.add2D = function(e) {
if (this.isInfinity())
return e;
if (e.isInfinity())
return this;
if (this.x.equals(e.x))
return this.y.equals(e.y) ? this.twice() : this.curve.getInfinity();
var t = e.x.subtract(this.x)
, r = e.y.subtract(this.y)
, n = r.divide(t)
, o = n.square().subtract(this.x).subtract(e.x)
, i = n.multiply(this.x.subtract(o)).subtract(this.y);
return new ir(this.curve,o,i)
}
,
ir.prototype.twice2D = function() {
if (this.isInfinity())
return this;
if (0 == this.y.toBigInteger().signum())
return this.curve.getInfinity();
var e = this.curve.fromBigInteger(z.valueOf(2))
, t = this.curve.fromBigInteger(z.valueOf(3))
, r = this.x.square().multiply(t).add(this.curve.a).divide(this.y.multiply(e))
, n = r.square().subtract(this.x.multiply(e))
, o = r.multiply(this.x.subtract(n)).subtract(this.y);
return new ir(this.curve,n,o)
}
,
ir.prototype.multiply2D = function(e) {
if (this.isInfinity())
return this;
if (0 == e.signum())
return this.curve.getInfinity();
var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this;
for (t = n.bitLength() - 2; t > 0; t -= 1) {
i = i.twice();
var a = n.testBit(t)
, l = r.testBit(t);
a != l && (i = i.add2D(a ? this : o))
}
return i
}
,
ir.prototype.isOnCurve = function() {
var e = this.getX().toBigInteger()
, t = this.getY().toBigInteger()
, r = this.curve.getA().toBigInteger()
, n = this.curve.getB().toBigInteger()
, o = this.curve.getQ()
, i = t.multiply(t).mod(o)
, a = e.multiply(e).multiply(e).add(r.multiply(e)).add(n).mod(o);
return i.equals(a)
}
,
ir.prototype.toString = function() {
return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"
}
,
ir.prototype.validate = function() {
var e = this.curve.getQ();
if (this.isInfinity())
throw new Error("Point is at infinity.");
var t = this.getX().toBigInteger()
, r = this.getY().toBigInteger();
if (t.compareTo(z.ONE) < 0 || t.compareTo(e.subtract(z.ONE)) > 0)
throw new Error("x coordinate out of bounds");
if (r.compareTo(z.ONE) < 0 || r.compareTo(e.subtract(z.ONE)) > 0)
throw new Error("y coordinate out of bounds");
if (!this.isOnCurve())
throw new Error("Point is not on the curve.");
if (this.multiply(e).isInfinity())
throw new Error("Point is not a scalar multiple of G.");
return !0
}
,
"undefined" !== typeof Gt && Gt || (Gt = {}),
"undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}),
Gt.crypto.ECDSA = function(e) {
var t = "secp256r1"
, r = new m;
this.type = "EC",
this.getBigRandom = function(e) {
return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE)
}
,
this.setNamedCurve = function(e) {
this.ecparams = Gt.crypto.ECParameterDB.getByName(e),
this.prvKeyHex = null,
this.pubKeyHex = null,
this.curveName = e
}
,
this.setPrivateKeyHex = function(e) {
this.isPrivate = !0,
this.prvKeyHex = e
}
,
this.setPublicKeyHex = function(e) {
this.isPublic = !0,
this.pubKeyHex = e
}
,
this.getPublicKeyXYHex = function() {
var e = this.pubKeyHex;
if ("04" !== e.substr(0, 2))
throw "this method supports uncompressed format(04) only";
var t = this.ecparams.keylen / 4;
if (e.length !== 2 + 2 * t)
throw "malformed public key hex length";
var r = {};
return r.x = e.substr(2, t),
r.y = e.substr(2 + t),
r
}
,
this.getShortNISTPCurveName = function() {
var e = this.curveName;
return "secp256r1" === e || "NIST P-256" === e || "P-256" === e || "prime256v1" === e ? "P-256" : "secp384r1" === e || "NIST P-384" === e || "P-384" === e ? "P-384" : null
}
,
this.generateKeyPairHex = function() {
var e = this.ecparams["n"]
, t = this.getBigRandom(e)
, r = this.ecparams["G"].multiply(t)
, n = r.getX().toBigInteger()
, o = r.getY().toBigInteger()
, i = this.ecparams["keylen"] / 4
, a = ("0000000000" + t.toString(16)).slice(-i)
, l = ("0000000000" + n.toString(16)).slice(-i)
, s = ("0000000000" + o.toString(16)).slice(-i)
, c = "04" + l + s;
return this.setPrivateKeyHex(a),
this.setPublicKeyHex(c),
{
ecprvhex: a,
ecpubhex: c
}
}
,
this.signWithMessageHash = function(e) {
return this.signHex(e, this.prvKeyHex)
}
,
this.signHex = function(e, t) {
var r = new z(t,16)
, n = this.ecparams["n"]
, o = new z(e,16);
do {
var i = this.getBigRandom(n)
, a = this.ecparams["G"]
, l = a.multiply(i)
, s = l.getX().toBigInteger().mod(n)
} while (s.compareTo(z.ZERO) <= 0);
var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
return Gt.crypto.ECDSA.biRSSigToASN1Sig(s, c)
}
,
this.sign = function(e, t) {
var r = t
, n = this.ecparams["n"]
, o = z.fromByteArrayUnsigned(e);
do {
var i = this.getBigRandom(n)
, a = this.ecparams["G"]
, l = a.multiply(i)
, s = l.getX().toBigInteger().mod(n)
} while (s.compareTo(z.ZERO) <= 0);
var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
return this.serializeSig(s, c)
}
,
this.verifyWithMessageHash = function(e, t) {
return this.verifyHex(e, t, this.pubKeyHex)
}
,
this.verifyHex = function(e, t, r) {
var n, o, i, a = Gt.crypto.ECDSA.parseSigHex(t);
n = a.r,
o = a.s,
i = ir.decodeFromHex(this.ecparams["curve"], r);
var l = new z(e,16);
return this.verifyRaw(l, n, o, i)
}
,
this.verify = function(e, t, r) {
var o, i, a;
if (Bitcoin.Util.isArray(t)) {
var l = this.parseSig(t);
o = l.r,
i = l.s
} else {
if ("object" !== n(t) || !t.r || !t.s)
throw "Invalid value for signature";
o = t.r,
i = t.s
}
if (r instanceof ir)
a = r;
else {
if (!Bitcoin.Util.isArray(r))
throw "Invalid format for pubkey value, must be byte array or ECPointFp";
a = ir.decodeFrom(this.ecparams["curve"], r)
}
var s = z.fromByteArrayUnsigned(e);
return this.verifyRaw(s, o, i, a)
}
,
this.verifyRaw = function(e, t, r, n) {
var o = this.ecparams["n"]
, i = this.ecparams["G"];
if (t.compareTo(z.ONE) < 0 || t.compareTo(o) >= 0)
return !1;
if (r.compareTo(z.ONE) < 0 || r.compareTo(o) >= 0)
return !1;
var a = r.modInverse(o)
, l = e.multiply(a).mod(o)
, s = t.multiply(a).mod(o)
, c = i.multiply(l).add(n.multiply(s))
, u = c.getX().toBigInteger().mod(o);
return u.equals(t)
}
,
this.serializeSig = function(e, t) {
var r = e.toByteArraySigned()
, n = t.toByteArraySigned()
, o = [];
return o.push(2),
o.push(r.length),
o = o.concat(r),
o.push(2),
o.push(n.length),
o = o.concat(n),
o.unshift(o.length),
o.unshift(48),
o
}
,
this.parseSig = function(e) {
var t;
if (48 != e[0])
throw new Error("Signature not a valid DERSequence");
if (t = 2,
2 != e[t])
throw new Error("First element in signature must be a DERInteger");
var r = e.slice(t + 2, t + 2 + e[t + 1]);
if (t += 2 + e[t + 1],
2 != e[t])
throw new Error("Second element in signature must be a DERInteger");
var n = e.slice(t + 2, t + 2 + e[t + 1]);
t += 2 + e[t + 1];
var o = z.fromByteArrayUnsigned(r)
, i = z.fromByteArrayUnsigned(n);
return {
r: o,
s: i
}
}
,
this.parseSigCompact = function(e) {
if (65 !== e.length)
throw "Signature has the wrong length";
var t = e[0] - 27;
if (t < 0 || t > 7)
throw "Invalid signature type";
var r = this.ecparams["n"]
, n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r)
, o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r);
return {
r: n,
s: o,
i: t
}
}
,
void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]),
void 0 === this.curveName && (this.curveName = t),
this.setNamedCurve(this.curveName),
void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]),
void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"]))
}
,
Gt.crypto.ECDSA.parseSigHex = function(e) {
var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e)
, r = new z(t.r,16)
, n = new z(t.s,16);
return {
r: r,
s: n
}
}
,
Gt.crypto.ECDSA.parseSigHexInHexRS = function(e) {
if ("30" != e.substr(0, 2))
throw "signature is not a ASN.1 sequence";
var t = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
if (2 != t.length)
throw "number of signature ASN.1 sequence elements seem wrong";
var r = t[0]
, n = t[1];
if ("02" != e.substr(r, 2))
throw "1st item of sequene of signature is not ASN.1 integer";
if ("02" != e.substr(n, 2))
throw "2nd item of sequene of signature is not ASN.1 integer";
var o = ASN1HEX.getHexOfV_AtObj(e, r)
, i = ASN1HEX.getHexOfV_AtObj(e, n);
return {
r: o,
s: i
}
}
,
Gt.crypto.ECDSA.asn1SigToConcatSig = function(e) {
var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e)
, r = t.r
, n = t.s;
if ("00" == r.substr(0, 2) && r.length / 2 * 8 % 128 == 8 && (r = r.substr(2)),
"00" == n.substr(0, 2) && n.length / 2 * 8 % 128 == 8 && (n = n.substr(2)),
r.length / 2 * 8 % 128 != 0)
throw "unknown ECDSA sig r length error";
if (n.length / 2 * 8 % 128 != 0)
throw "unknown ECDSA sig s length error";
return r + n
}
,
Gt.crypto.ECDSA.concatSigToASN1Sig = function(e) {
if (e.length / 2 * 8 % 128 != 0)
throw "unknown ECDSA concatinated r-s sig length error";
var t = e.substr(0, e.length / 2)
, r = e.substr(e.length / 2);
return Gt.crypto.ECDSA.hexRSSigToASN1Sig(t, r)
}
,
Gt.crypto.ECDSA.hexRSSigToASN1Sig = function(e, t) {
var r = new z(e,16)
, n = new z(t,16);
return Gt.crypto.ECDSA.biRSSigToASN1Sig(r, n)
}
,
Gt.crypto.ECDSA.biRSSigToASN1Sig = function(e, t) {
var r = new Gt.asn1.DERInteger({
bigint: e
})
, n = new Gt.asn1.DERInteger({
bigint: t
})
, o = new Gt.asn1.DERSequence({
array: [r, n]
});
return o.getEncodedHex()
}
,
function() {
var e = S
, t = e.lib
, r = t.WordArray
, n = t.Hasher
, o = e.algo
, i = []
, a = o.SM3 = n.extend({
_doReset: function() {
this._hash = new r.init([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214])
},
_doProcessBlock: function(e, t) {
for (var r = this._hash.words, n = r[0], o = r[1], a = r[2], l = r[3], s = r[4], c = 0; c < 80; c += 1) {
if (c < 16)
i[c] = 0 | e[t + c];
else {
var u = i[c - 3] ^ i[c - 8] ^ i[c - 14] ^ i[c - 16];
i[c] = u << 1 | u >>> 31
}
var d = (n << 5 | n >>> 27) + s + i[c];
d += c < 20 ? 1518500249 + (o & a | ~o & l) : c < 40 ? 1859775393 + (o ^ a ^ l) : c < 60 ? (o & a | o & l | a & l) - 1894007588 : (o ^ a ^ l) - 899497514,
s = l,
l = a,
a = o << 30 | o >>> 2,
o = n,
n = d
}
r[0] = r[0] + n | 0,
r[1] = r[1] + o | 0,
r[2] = r[2] + a | 0,
r[3] = r[3] + l | 0,
r[4] = r[4] + s | 0
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, n = 8 * e.sigBytes;
return t[n >>> 5] |= 128 << 24 - n % 32,
t[14 + (n + 64 >>> 9 << 4)] = Math.floor(r / 4294967296),
t[15 + (n + 64 >>> 9 << 4)] = r,
e.sigBytes = 4 * t.length,
this._process(),
this._hash
},
clone: function() {
var e = n.clone.call(this);
return e._hash = this._hash.clone(),
e
}
});
e.SM3 = n._createHelper(a),
e.HmacSM3 = n._createHmacHelper(a)
}(),
Br.prototype = {
Init: function() {
this.xBuf = [0, 0, 0, 0],
this.Reset()
},
InitDigest: function(e) {
this.xBuf = [e.xBuf.length],
Array.Copy(e.xBuf, 0, this.xBuf, 0, e.xBuf.length),
this.xBufOff = e.xBufOff,
this.byteCount = e.byteCount,
Array.Copy(e.X, 0, this.X, 0, e.X.length),
this.xOff = e.xOff,
Array.Copy(e.v, 0, this.v, 0, e.v.length)
},
GetDigestSize: function() {
return this.DIGEST_LENGTH
},
Reset: function() {
this.byteCount = 0,
this.xBufOff = 0,
Array.Clear(this.xBuf, 0, this.xBuf.length),
Array.Copy(this.v0, 0, this.v, 0, this.v0.length),
this.xOff = 0,
Array.Copy(this.X0, 0, this.X, 0, this.X0.length)
},
GetByteLength: function() {
return this.BYTE_LENGTH
},
ProcessBlock: function() {
var e, t = this.X, r = [64];
for (e = 16; e < 68; e += 1)
t[e] = this.P1(t[e - 16] ^ t[e - 9] ^ Cr(t[e - 3], 15)) ^ Cr(t[e - 13], 7) ^ t[e - 6];
for (e = 0; e < 64; e += 1)
r[e] = t[e] ^ t[e + 4];
var n, o, i, a, l, s = this.v, c = this.v_;
for (Array.Copy(s, 0, c, 0, this.v0.length),
e = 0; e < 16; e += 1)
l = Cr(c[0], 12),
n = l + c[4] + Cr(this.T_00_15, e),
n = Cr(n, 7),
o = n ^ l,
i = this.FF_00_15(c[0], c[1], c[2]) + c[3] + o + r[e],
a = this.GG_00_15(c[4], c[5], c[6]) + c[7] + n + t[e],
c[3] = c[2],
c[2] = Cr(c[1], 9),
c[1] = c[0],
c[0] = i,
c[7] = c[6],
c[6] = Cr(c[5], 19),
c[5] = c[4],
c[4] = this.P0(a);
for (e = 16; e < 64; e += 1)
l = Cr(c[0], 12),
n = l + c[4] + Cr(this.T_16_63, e),
n = Cr(n, 7),
o = n ^ l,
i = this.FF_16_63(c[0], c[1], c[2]) + c[3] + o + r[e],
a = this.GG_16_63(c[4], c[5], c[6]) + c[7] + n + t[e],
c[3] = c[2],
c[2] = Cr(c[1], 9),
c[1] = c[0],
c[0] = i,
c[7] = c[6],
c[6] = Cr(c[5], 19),
c[5] = c[4],
c[4] = this.P0(a);
for (e = 0; e < 8; e += 1)
s[e] ^= c[e];
this.xOff = 0,
Array.Copy(this.X0, 0, this.X, 0, this.X0.length)
},
ProcessWord: function(e, t) {
var r = e[t] << 24;
r |= (255 & e[t += 1]) << 16,
r |= (255 & e[t += 1]) << 8,
r |= 255 & e[t += 1],
this.X[this.xOff] = r,
16 == ++this.xOff && this.ProcessBlock()
},
ProcessLength: function(e) {
this.xOff > 14 && this.ProcessBlock(),
this.X[14] = this.URShiftLong(e, 32),
this.X[15] = 4294967295 & e
},
IntToBigEndian: function(e, t, r) {
t[r] = e >>> 24 & 255,
t[r += 1] = e >>> 16 & 255,
t[r += 1] = e >>> 8 & 255,
t[r += 1] = 255 & e
},
DoFinal: function(e, t) {
this.Finish();
for (var r = 0; r < 8; r += 1)
this.IntToBigEndian(this.v[r], e, t + 4 * r);
return this.Reset(),
this.DIGEST_LENGTH
},
Update: function(e) {
this.xBuf[this.xBufOff++] = e,
this.xBufOff == this.xBuf.length && (this.ProcessWord(this.xBuf, 0),
this.xBufOff = 0),
this.byteCount++
},
BlockUpdate: function(e, t, r) {
while (0 != this.xBufOff && r > 0)
this.Update(e[t]),
t += 1,
r -= 1;
while (r > this.xBuf.length)
this.ProcessWord(e, t),
t += this.xBuf.length,
r -= this.xBuf.length,
this.byteCount += this.xBuf.length;
while (r > 0)
this.Update(e[t]),
t += 1,
r -= 1
},
Finish: function() {
var e = this.byteCount << 3;
this.Update(128);
while (0 != this.xBufOff)
this.Update(0);
this.ProcessLength(e),
this.ProcessBlock()
},
ROTATE: function(e, t) {
return e << t | this.URShift(e, 32 - t)
},
P0: function(e) {
return e ^ Cr(e, 9) ^ Cr(e, 17)
},
P1: function(e) {
return e ^ Cr(e, 15) ^ Cr(e, 23)
},
FF_00_15: function(e, t, r) {
return e ^ t ^ r
},
FF_16_63: function(e, t, r) {
return e & t | e & r | t & r
},
GG_00_15: function(e, t, r) {
return e ^ t ^ r
},
GG_16_63: function(e, t, r) {
return e & t | ~e & r
},
URShift: function(e, t) {
return console.error(e),
(e > Int32.maxValue || e < Int32.minValue) && (console.error(e),
e = Er(e)),
e >= 0 ? e >> t : (e >> t) + (2 << ~t)
},
URShiftLong: function(e, t) {
var r, n = new z;
if (n.fromInt(e),
n.signum() >= 0)
r = n.shiftRight(t).intValue();
else {
var o = new z;
o.fromInt(2);
var i = ~t
, a = "";
if (i < 0) {
for (var l = 64 + i, s = 0; s < l; s += 1)
a += "0";
var c = new z;
c.fromInt(e >> t);
var u = new z("10" + a,2);
a = u.toRadix(10);
var d = u.add(c);
r = d.toRadix(10)
} else
a = o.shiftLeft(~t).intValue(),
r = (e >> t) + a
}
return r
},
GetZ: function(e, t, r) {
var n = S.enc.Utf8.parse(r)
, o = 4 * n.words.length * 8;
this.Update(o >> 8 & 255),
this.Update(255 & o);
var i = this.GetWords(n.toString());
this.BlockUpdate(i, 0, i.length);
var a = this.GetWords(e.curve.a.toBigInteger().toRadix(16))
, l = this.GetWords(e.curve.b.toBigInteger().toRadix(16))
, s = this.GetWords(e.getX().toBigInteger().toRadix(16))
, c = this.GetWords(e.getY().toBigInteger().toRadix(16))
, u = this.GetWords(t.substr(0, 64))
, d = this.GetWords(t.substr(64, 64));
this.BlockUpdate(a, 0, a.length),
this.BlockUpdate(l, 0, l.length),
this.BlockUpdate(s, 0, s.length),
this.BlockUpdate(c, 0, c.length),
this.BlockUpdate(u, 0, u.length),
this.BlockUpdate(d, 0, d.length);
var A = [this.GetDigestSize()];
return this.DoFinal(A, 0),
A
},
GetWords: function(e) {
for (var t = [], r = e.length, n = 0; n < r; n += 2)
t[t.length] = parseInt(e.substr(n, 2), 16);
return t
},
GetHex: function(e) {
for (var t = [], r = 0, n = 0; n < 2 * e.length; n += 2)
t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4,
r += 1;
var o = new S.lib.WordArray.init(t,e.length);
return o
}
},
Array.Clear = function(e, t, r) {
for (var n in e)
e[n] = null
}
,
Array.Copy = function(e, t, r, n, o) {
for (var i = e.slice(t, t + o), a = 0; a < i.length; a += 1)
r[n] = i[a],
n += 1
}
,
window.Int32 = {
minValue: -parseInt("10000000000000000000000000000000", 2),
maxValue: parseInt("1111111111111111111111111111111", 2),
parse: function(e) {
if (e < this.minValue) {
for (var t = new Number(-e), r = t.toString(2), n = r.substr(r.length - 31, 31), o = "", i = 0; i < n.length; i += 1) {
var a = n.substr(i, 1);
o += "0" == a ? "1" : "0"
}
var l = parseInt(o, 2);
return l + 1
}
if (e > this.maxValue) {
for (t = Number(e),
r = t.toString(2),
n = r.substr(r.length - 31, 31),
o = "",
i = 0; i < n.length; i += 1) {
a = n.substr(i, 1);
o += "0" == a ? "1" : "0"
}
l = parseInt(o, 2);
return -(l + 1)
}
return e
},
parseByte: function(e) {
if (e > 255) {
var t = 255 & e;
return t
}
if (e < -256) {
t = 255 & e;
return t ^= 255,
t + 1
}
return e
}
},
Gt.crypto.SM3withSM2 = function(e) {
var t = "sm2"
, r = new m;
this.type = "SM2",
this.getBigRandom = function(e) {
return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE)
}
,
this.setNamedCurve = function(e) {
this.ecparams = Gt.crypto.ECParameterDB.getByName(e),
this.prvKeyHex = null,
this.pubKeyHex = null,
this.curveName = e
}
,
this.setPrivateKeyHex = function(e) {
this.isPrivate = !0,
this.prvKeyHex = e
}
,
this.setPublicKeyHex = function(e) {
this.isPublic = !0,
this.pubKeyHex = e
}
,
this.generateKeyPairHex = function() {
var e = this.ecparams["n"]
, t = this.getBigRandom(e)
, r = this.ecparams["G"].multiply(t)
, n = r.getX().toBigInteger()
, o = r.getY().toBigInteger()
, i = this.ecparams["keylen"] / 4
, a = ("0000000000" + t.toString(16)).slice(-i)
, l = ("0000000000" + n.toString(16)).slice(-i)
, s = ("0000000000" + o.toString(16)).slice(-i)
, c = "04" + l + s;
return this.setPrivateKeyHex(a),
this.setPublicKeyHex(c),
{
ecprvhex: a,
ecpubhex: c
}
}
,
this.signWithMessageHash = function(e) {
return this.signHex(e, this.prvKeyHex)
}
,
this.signHex = function(e, t) {
var r = new z(t,16)
, n = this.ecparams["n"]
, o = new z(e,16)
, i = null
, a = null
, l = null
, s = null
, c = r;
do {
do {
var u = this.generateKeyPairHex();
i = new z(u.ecprvhex,16);
var d = u.ecpubhex;
a = ir.decodeFromHex(this.ecparams["curve"], d),
l = o.add(a.getX().toBigInteger()),
l = l.mod(n)
} while (l.equals(z.ZERO) || l.add(i).equals(n));
var A = c.add(z.ONE);
A = A.modInverse(n),
s = l.multiply(c),
s = i.subtract(s).mod(n),
s = A.multiply(s).mod(n)
} while (s.equals(z.ZERO));
var p = l.toRadix(16)
, g = s.toRadix(16);
if (64 != p.length) {
r = 64 - p.length;
for (var f = 0; f < r; f++)
p = "0" + p
}
if (64 != g.length)
for (r = 64 - g.length,
f = 0; f < r; f++)
g = "0" + g;
return p + g
}
,
this.sign = function(e, t) {
var r = t
, n = this.ecparams["n"]
, o = z.fromByteArrayUnsigned(e);
do {
var i = this.getBigRandom(n)
, a = this.ecparams["G"]
, l = a.multiply(i)
, s = l.getX().toBigInteger().mod(n)
} while (s.compareTo(z.ZERO) <= 0);
var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
return this.serializeSig(s, c)
}
,
this.verifyWithMessageHash = function(e, t) {
return this.verifyHex(e, t, this.pubKeyHex)
}
,
this.verifyHex = function(e, t, r) {
var n, o;
n = t.substr(0, 64),
o = t.substr(64, 64);
var i, a = new z(n,16), l = new z(o,16);
i = ir.decodeFromHex(this.ecparams["curve"], r);
var s = new z(e,16);
return this.verifyRaw(s, a, l, i)
}
,
this.verify = function(e, t, r) {
var o, i, a;
if (Bitcoin.Util.isArray(t)) {
var l = this.parseSig(t);
o = l.r,
i = l.s
} else {
if ("object" !== n(t) || !t.r || !t.s)
throw "Invalid value for signature";
o = t.r,
i = t.s
}
if (r instanceof ir)
a = r;
else {
if (!Bitcoin.Util.isArray(r))
throw "Invalid format for pubkey value, must be byte array or ECPointFp";
a = ir.decodeFrom(this.ecparams["curve"], r)
}
var s = z.fromByteArrayUnsigned(e);
return this.verifyRaw(s, o, i, a)
}
,
this.verifyRaw = function(e, t, r, n) {
var o = this.ecparams["n"]
, i = this.ecparams["G"]
, a = t.add(r).mod(o);
if (a.equals(z.ZERO))
return !1;
if (t.compareTo(z.ONE) < 0 || t.compareTo(o) >= 0)
return !1;
if (r.compareTo(z.ONE) < 0 || r.compareTo(o) >= 0)
return !1;
if (0 == n.isOnCurve())
return !1;
var l = i.multiply(r);
l = l.add(n.multiply(a));
var s = e.add(l.getX().toBigInteger()).mod(o);
return t.equals(s)
}
,
this.serializeSig = function(e, t) {
var r = e.toByteArraySigned()
, n = t.toByteArraySigned()
, o = [];
return o.push(2),
o.push(r.length),
o = o.concat(r),
o.push(2),
o.push(n.length),
o = o.concat(n),
o.unshift(o.length),
o.unshift(48),
o
}
,
this.parseSig = function(e) {
var t;
if (48 != e[0])
throw new Error("Signature not a valid DERSequence");
if (t = 2,
2 != e[t])
throw new Error("First element in signature must be a DERInteger");
var r = e.slice(t + 2, t + 2 + e[t + 1]);
if (t += 2 + e[t + 1],
2 != e[t])
throw new Error("Second element in signature must be a DERInteger");
var n = e.slice(t + 2, t + 2 + e[t + 1]);
t += 2 + e[t + 1];
var o = z.fromByteArrayUnsigned(r)
, i = z.fromByteArrayUnsigned(n);
return {
r: o,
s: i
}
}
,
this.parseSigCompact = function(e) {
if (65 !== e.length)
throw "Signature has the wrong length";
var t = e[0] - 27;
if (t < 0 || t > 7)
throw "Invalid signature type";
var r = this.ecparams["n"]
, n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r)
, o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r);
return {
r: n,
s: o,
i: t
}
}
,
void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]),
void 0 === this.curveName && (this.curveName = t),
this.setNamedCurve(this.curveName),
void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]),
void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"]))
}
,
Gt.crypto.ECParameterDB = new function() {
var e = {}
, t = {};
function r(e) {
return new z(e,16)
}
this.getByName = function(r) {
var n = r;
if ("undefined" !== typeof t[n] && (n = t[r]),
"undefined" !== typeof e[n])
return e[n];
throw "unregistered EC curve name: " + n
}
,
this.regist = function(n, o, i, a, l, s, c, u, d, A, p, g) {
e[n] = {};
var f = r(i)
, h = r(a)
, b = r(l)
, m = r(s)
, w = r(c)
, v = new fr(f,h,b)
, x = v.decodePointHex("04" + u + d);
e[n]["name"] = n,
e[n]["keylen"] = o,
e[n]["curve"] = v,
e[n]["G"] = x,
e[n]["n"] = m,
e[n]["h"] = w,
e[n]["oid"] = p,
e[n]["info"] = g;
for (var y = 0; y < A.length; y += 1)
t[A[y]] = n
}
}
,
Gt.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field"),
Gt.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field"),
Gt.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field"),
Gt.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []),
Gt.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []),
Gt.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []),
Gt.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []),
Gt.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]),
Gt.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]),
Gt.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]),
Gt.crypto.ECParameterDB.regist("sm2", 256, "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC", "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123", "1", "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7", "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0", ["sm2", "SM2"]),
kr.prototype = {
getHexString: function(e) {
return 0 == (1 & e.length) ? e : "0" + e
},
hex2Byte: function(e) {
if (e > 127 || e < -128) {
var t = 255 & e;
return t > 127 ? (t = 127 & e,
t ^= 127,
-(t + 1)) : t
}
return e
},
Reset: function() {
this.sm3keybase = new Br,
this.sm3c3 = new Br;
var e = this.p2.getX().toBigInteger().toRadix(16)
, t = this.p2.getY().toBigInteger().toRadix(16);
if (64 != e.length)
for (var r = 64 - e.length, n = 0; n < r; n++)
e = "0" + e;
if (64 != t.length && 64 != t.length)
for (r = 64 - t.length,
n = 0; n < r; n++)
t = "0" + t;
var o = this.GetWords(e)
, i = this.GetWords(t);
this.sm3c3.BlockUpdate(o, 0, o.length),
this.sm3keybase.BlockUpdate(o, 0, o.length),
this.sm3keybase.BlockUpdate(i, 0, i.length),
this.ct = 1,
this.NextKey()
},
NextKey: function() {
var e = new Br(this.sm3keybase);
e.Update(this.ct >> 24 & 255),
e.Update(this.ct >> 16 & 255),
e.Update(this.ct >> 8 & 255),
e.Update(255 & this.ct),
e.DoFinal(this.key, 0),
this.keyOff = 0,
this.ct++
},
InitEncipher: function(e) {
var t = null
, r = null
, n = new Gt.crypto.ECDSA({
curve: "sm2"
})
, o = n.generateKeyPairHex();
t = new z(o.ecprvhex,16);
var i = o.ecpubhex;
return r = ir.decodeFromHex(n.ecparams["curve"], i),
this.p2 = e.multiply(t),
this.Reset(),
r
},
EncryptBlock: function(e) {
this.sm3c3.BlockUpdate(e, 0, e.length);
for (var t = 0; t < e.length; t++)
this.keyOff == this.key.length && this.NextKey(),
e[t] ^= this.key[this.keyOff++]
},
InitDecipher: function(e, t) {
this.p2 = t.multiply(e),
this.Reset()
},
DecryptBlock: function(e) {
for (var t = 0; t < e.length; t++)
this.keyOff == this.key.length && this.NextKey(),
e[t] ^= this.key[this.keyOff++];
this.sm3c3.BlockUpdate(e, 0, e.length)
},
Dofinal: function(e) {
var t = this.p2.getY().toBigInteger().toRadix(16);
if (64 != t.length && 64 != t.length)
for (var r = 64 - t.length, n = 0; n < r; n++)
t = "0" + t;
var o = this.GetWords(t);
this.sm3c3.BlockUpdate(o, 0, o.length),
this.sm3c3.DoFinal(e, 0),
this.Reset()
},
Encrypt: function(e, t) {
var r = new Array(t.length);
Array.Copy(t, 0, r, 0, t.length);
var n = this.InitEncipher(e);
this.EncryptBlock(r);
var o, i = new Array(32);
this.Dofinal(i);
var a = n.getX().toBigInteger().toRadix(16)
, l = n.getY().toBigInteger().toRadix(16);
if (64 != a.length)
for (var s = 64 - a.length, c = 0; c < s; c++)
a = "0" + a;
if (64 != l.length && 64 != l.length)
for (s = 64 - l.length,
c = 0; c < s; c++)
l = "0" + l;
switch (this.cipherMode) {
case SM2CipherMode.C1C3C2:
o = a + l + this.GetHex(i).toString() + this.GetHex(r).toString();
break;
case SM2CipherMode.C1C2C3:
o = n.getX().toBigInteger().toRadix(16) + n.getY().toBigInteger().toRadix(16) + this.GetHex(r).toString() + this.GetHex(i).toString();
break;
default:
throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")")
}
return o
},
GetWords: function(e) {
for (var t = [], r = e.length, n = 0; n < r; n += 2)
t[t.length] = parseInt(e.substr(n, 2), 16);
return t
},
GetHex: function(e) {
for (var t = new Array(32), r = 0, n = 0; n < 2 * e.length; n += 2)
t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4,
r++;
var o = new S.lib.WordArray.init(t,e.length);
return o
},
Decrypt: function(e, t) {
var r, n = t, o = n.substr(0, 64), i = n.substr(0 + o.length, 64), a = new Gt.crypto.ECDSA({
curve: "sm2"
}), l = a.ecparams["n"];
if (!(e.compareTo(l.subtract(z.ONE)) > 0) && !(e.compareTo(z.ONE) < 0)) {
switch (this.cipherMode) {
case SM2CipherMode.C1C3C2:
r = n.substr(o.length + i.length, 64);
var s = n.substr(o.length + i.length + 64);
break;
case SM2CipherMode.C1C2C3:
s = n.substr(o.length + i.length, n.length - o.length - i.length - 64);
r = n.substr(n.length - 64);
break;
default:
throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")")
}
var c = this.GetWords(s)
, u = this.CreatePoint(o, i);
if (void 0 != u) {
this.InitDecipher(e, u),
this.DecryptBlock(c);
var d = new Array(32);
this.Dofinal(d);
var A = this.GetHex(d).toString().toLowerCase() == r.toLowerCase();
if (A) {
var p = this.GetHex(c)
, g = S.enc.Utf8.stringify(p);
return g
}
throw new Error("[SM2:Decrypt] C3 is not match!")
}
}
},
CreatePoint: function(e, t) {
var r = new Gt.crypto.ECDSA({
curve: "sm2"
})
, n = (r.ecparams["curve"],
"04" + e + t)
, o = ir.decodeFromHex(r.ecparams["curve"], n);
if (0 != o.isOnCurve())
return o
}
},
window.SM2CipherMode = {
C1C2C3: 0,
C1C3C2: 1
}
},
});
// 这是我们需要的参数
var c1 = {
key: "getSm4Key",
value: function() {
return Object(n["h"])()
}
var c2 = {
key: "encryptTest",
value: function(e, t) {
var r = {}
, o = this.getSm2Key()
, i = Object(n["e"])(e);
return r["sm4"] = Object(n["b"])(e + i, o.ecpubhex),
r["sm2"] = Object(n["g"])(o.ecprvhex, t),
r
}
}
// 我只验证i = Object(n["e"])(e); 其他的可以自己验证
shuibingmeiyue = window.shuibingmeiyue
yy = shuibingmeiyue("c99b")["e"]
xixi = '{"paramData":{"infoCodes":["jyjgFlfgzcwj"],"marketId":"PXBXJ"},"timeStamp":1740991885140}'
console.log("这是一个测试---",yy(xixi))
在此致谢
提示信息 - 吾爱破解 - 52pojie.cn