首页 > 其他分享 >js逆向-海南社保服务平台

js逆向-海南社保服务平台

时间:2023-12-10 16:01:31浏览次数:29  
标签:function 逆向 return js length && 服务平台 var prototype

声明

本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!

如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!

前言

目标网站:aHR0cHM6Ly9obnNieWIuaGFpbmFuLmdvdi5jbi8jL25ld3MtbW9kdWxlP3dlYnNpdGU9MQ==

接口:Z2dmdy92MS91bmlmaWVk

前几天看了一篇博文是关于本网站逆向内容,大佬使用的python还原了加密过程。 海南社保服务平台解密逆向分析 正好学习一下国密SM4.

参数分析

打开F12抓包,解密内容是response的返回值。

在这里插入图片描述 全局搜索encData参数,将出现的所有部分打上断点。 在这里插入图片描述

直接定位到了加密地方,加密函数是O对象的encrypt函数,O则在上方能够轻易找到,并且告知是sm4加密。

O = n("5044").sm4;

很明显了,剩下内容即可选择使用python还原。 在这里我选择的是扣代码,感兴趣的小伙伴可以接着向下看。

扣代码

通过O对象的赋值,可以判断大概率是一个webpack打包的js文件, 所以直接在该行下断点,验证一下。 在这里插入图片描述

分发器无疑,由于网站处理的比较简单,所以将加载模块拿下来就可以直接运行获取结果了。

var xxxx;
(function (e) {
        var n = {}
            , i = {
            index: 0
        };

        function o(t) {
            if (n[t])
                return n[t].exports;
            var i = n[t] = {
                i: t,
                l: !1,
                exports: {}
            };
            return e[t].call(i.exports, i, i.exports, o),
                i.l = !0,
                i.exports
        }

        xxxx = o;

    }
)({
    5044: function (e, t, n) {
        e.exports = {
            sm2: n("731b"),
            sm3: n("0b7b"),
            sm4: n("8262")
        }
    },
    "731b": function (e, t, n) {
        var i = n("f33e")
            , r = i.BigInteger
            , o = n("d714")
            , a = o.encodeDer
            , s = o.decodeDer
            , l = n("cd73")
            , c = n("a511")
            , u = n("ad6e")
            , f = u.generateEcparam()
            , d = f.G
            , h = f.curve
            , p = f.n
            , g = 0;

        function b(e, t) {
            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1
                , i = new c;
            e = u.hexToArray(u.parseUtf8StringToHex(e)),
            t.length > 128 && (t = t.substr(t.length - 128));
            var r = t.substr(0, 64)
                , o = t.substr(64);
            t = i.createPoint(r, o);
            var a = i.initEncipher(t);
            i.encryptBlock(e);
            var s = u.arrayToHex(e)
                , l = new Array(32);
            return i.doFinal(l),
                l = u.arrayToHex(l),
                n === g ? a + s + l : a + l + s
        }

        function m(e, t) {
            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1
                , i = new c;
            t = new r(t, 16);
            var o = e.substr(0, 64)
                , a = e.substr(0 + o.length, 64)
                , s = o.length + a.length
                , l = e.substr(s, 64)
                , f = e.substr(s + 64);
            n === g && (l = e.substr(e.length - 64),
                f = e.substr(s, e.length - s - 64));
            var d = u.hexToArray(f)
                , h = i.createPoint(o, a);
            i.initDecipher(t, h),
                i.decryptBlock(d);
            var p = new Array(32);
            i.doFinal(p);
            var b = u.arrayToHex(p) === l;
            if (b) {
                var m = u.arrayToUtf8(d);
                return m
            }
            return ""
        }

        function v(e, t) {
            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}
                , i = n.pointPool
                , o = n.der
                , s = n.hash
                , l = n.publicKey
                , c = n.userId
                , f = "string" === typeof e ? u.parseUtf8StringToHex(e) : u.parseArrayBufferToHex(e);
            s && (l = l || k(t),
                f = A(f, l, c));
            var d = new r(t, 16)
                , h = new r(f, 16)
                , g = null
                , b = null
                , m = null;
            do {
                do {
                    var v = void 0;
                    v = i && i.length ? i.pop() : x(),
                        g = v.k,
                        b = h.add(v.x1).mod(p)
                } while (b.equals(r.ZERO) || b.add(g).equals(p));
                m = d.add(r.ONE).modInverse(p).multiply(g.subtract(b.multiply(d))).mod(p)
            } while (m.equals(r.ZERO));
            return o ? a(b, m) : u.leftPad(b.toString(16), 64) + u.leftPad(m.toString(16), 64)
        }

        function j(e, t, n) {
            var i, o, a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, l = a.der, c = a.hash,
                f = a.userId, g = "string" === typeof e ? u.parseUtf8StringToHex(e) : u.parseArrayBufferToHex(e);
            if (c && (g = A(g, n, f)),
                l) {
                var b = s(t);
                i = b.r,
                    o = b.s
            } else
                i = new r(t.substring(0, 64), 16),
                    o = new r(t.substring(64), 16);
            var m = h.decodePointHex(n)
                , v = new r(g, 16)
                , j = i.add(o).mod(p);
            if (j.equals(r.ZERO))
                return !1;
            var k = d.multiply(o).add(m.multiply(j))
                , x = v.add(k.getX().toBigInteger()).mod(p);
            return i.equals(x)
        }

        function A(e, t) {
            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "1234567812345678"
                , i = new l
                , r = (new l).getZ(d, t.substr(2, 128), n)
                , o = u.hexToArray(u.arrayToHex(r).toString())
                , a = e
                , s = u.hexToArray(a)
                , c = new Array(i.getDigestSize());
            return i.blockUpdate(o, 0, o.length),
                i.blockUpdate(s, 0, s.length),
                i.doFinal(c, 0),
                u.arrayToHex(c).toString()
        }

        function k(e) {
            var t = d.multiply(new r(e, 16))
                , n = u.leftPad(t.getX().toBigInteger().toString(16), 64)
                , i = u.leftPad(t.getY().toBigInteger().toString(16), 64);
            return "04" + n + i
        }

        function x() {
            var e = u.generateKeyPairHex()
                , t = h.decodePointHex(e.publicKey);
            return e.k = new r(e.privateKey, 16),
                e.x1 = t.getX().toBigInteger(),
                e
        }

        e.exports = {
            generateKeyPairHex: u.generateKeyPairHex,
            doEncrypt: b,
            doDecrypt: m,
            doSignature: v,
            doVerifySignature: j,
            getPoint: x
        }
    },
    "0b7b": function (e, t, n) {
        function i(e, t) {
            return e.length >= t ? e : new Array(t - e.length + 1).join("0") + e
        }

        function r(e) {
            for (var t = 8, n = "", r = 0; r < e.length / t; r++)
                n += i(parseInt(e.substr(r * t, t), 2).toString(16), 2);
            return n
        }

        function o(e) {
            for (var t = 2, n = "", r = 0; r < e.length / t; r++)
                n += i(parseInt(e.substr(r * t, t), 16).toString(2), 8);
            return n
        }

        function a(e) {
            for (var t = "", n = 0, r = e.length; n < r; n++) {
                var o = e[n];
                t += i(o.codePointAt(0).toString(2), 8)
            }
            return t
        }

        function s(e, t) {
            return e.substring(t % e.length) + e.substr(0, t % e.length)
        }

        function l(e, t, n) {
            for (var i, r = e || "", o = t || "", a = [], s = r.length - 1; s >= 0; s--)
                i = n(r[s], o[s], i),
                    a[s] = i[0];
            return a.join("")
        }

        function c(e, t) {
            return l(e, t, (function (e, t) {
                    return [e === t ? "0" : "1"]
                }
            ))
        }

        function u(e, t) {
            return l(e, t, (function (e, t) {
                    return ["1" === e && "1" === t ? "1" : "0"]
                }
            ))
        }

        function f(e, t) {
            return l(e, t, (function (e, t) {
                    return ["1" === e || "1" === t ? "1" : "0"]
                }
            ))
        }

        function d(e, t) {
            var n = l(e, t, (function (e, t, n) {
                    var i = n ? n[1] : "0";
                    return e !== t ? ["0" === i ? "1" : "0", i] : [i, e]
                }
            ));
            return n
        }

        function h(e) {
            return l(e, void 0, (function (e) {
                    return ["1" === e ? "0" : "1"]
                }
            ))
        }

        function p(e) {
            return function () {
                for (var t = arguments.length, n = new Array(t), i = 0; i < t; i++)
                    n[i] = arguments[i];
                return n.reduce((function (t, n) {
                        return e(t, n)
                    }
                ))
            }
        }

        function g(e) {
            return p(c)(e, s(e, 9), s(e, 17))
        }

        function b(e) {
            return p(c)(e, s(e, 15), s(e, 23))
        }

        function m(e, t, n, i) {
            return i >= 0 && i <= 15 ? p(c)(e, t, n) : p(f)(u(e, t), u(e, n), u(t, n))
        }

        function v(e, t, n, i) {
            return i >= 0 && i <= 15 ? p(c)(e, t, n) : f(u(e, t), u(h(e), n))
        }

        function j(e) {
            return o(e >= 0 && e <= 15 ? "79cc4519" : "7a879d8a")
        }

        function A(e, t) {
            for (var n = 32, i = [], r = [], o = 0; o < 16; o++)
                i.push(t.substr(o * n, n));
            for (var a = 16; a < 68; a++)
                i.push(p(c)(b(p(c)(i[a - 16], i[a - 9], s(i[a - 3], 15))), s(i[a - 13], 7), i[a - 6]));
            for (var l = 0; l < 64; l++)
                r.push(c(i[l], i[l + 4]));
            for (var u = [], f = 0; f < 8; f++)
                u.push(e.substr(f * n, n));
            for (var h, A, k, x, y = u[0], C = u[1], _ = u[2], w = u[3], I = u[4], S = u[5], O = u[6], M = u[7], E = 0; E < 64; E++)
                h = s(p(d)(s(y, 12), I, s(j(E), E)), 7),
                    A = c(h, s(y, 12)),
                    k = p(d)(m(y, C, _, E), w, A, r[E]),
                    x = p(d)(v(I, S, O, E), M, h, i[E]),
                    w = _,
                    _ = s(C, 9),
                    C = y,
                    y = k,
                    M = O,
                    O = s(S, 19),
                    S = I,
                    I = g(x);
            return c([y, C, _, w, I, S, O, M].join(""), e)
        }

        e.exports = function (e) {
            var t = a(e)
                , n = t.length
                , s = n % 512;
            s = s >= 448 ? 512 - s % 448 - 1 : 448 - s - 1;
            for (var l = "".concat(t, "1").concat(i("", s)).concat(i(n.toString(2), 64)).toString(), c = (n + s + 65) / 512, u = o("7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e"), f = 0; f <= c - 1; f++) {
                var d = l.substr(512 * f, 512);
                u = A(u, d)
            }
            return r(u)
        }
    },
    8262: function (e, t) {
        function n(e) {
            return a(e) || o(e) || r(e) || i()
        }

        function i() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function r(e, t) {
            if (e) {
                if ("string" === typeof e)
                    return s(e, t);
                var n = Object.prototype.toString.call(e).slice(8, -1);
                return "Object" === n && e.constructor && (n = e.constructor.name),
                    "Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? s(e, t) : void 0
            }
        }

        function o(e) {
            if ("undefined" !== typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"])
                return Array.from(e)
        }

        function a(e) {
            if (Array.isArray(e))
                return s(e)
        }

        function s(e, t) {
            (null == t || t > e.length) && (t = e.length);
            for (var n = 0, i = new Array(t); n < t; n++)
                i[n] = e[n];
            return i
        }

        var l = 0
            , c = 32
            , u = 16
            ,
            f = [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]
            ,
            d = [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];

        function h(e) {
            for (var t = [], n = 0, i = e.length; n < i; n += 2)
                t.push(parseInt(e.substr(n, 2), 16));
            return t
        }

        function p(e) {
            return e.map((function (e) {
                    return e = e.toString(16),
                        1 === e.length ? "0" + e : e
                }
            )).join("")
        }

        function g(e) {
            for (var t = [], n = 0, i = e.length; n < i; n++) {
                var r = e.charCodeAt(n);
                r <= 127 ? t.push(r) : r <= 2047 ? (t.push(192 | r >>> 6),
                    t.push(128 | 63 & r)) : (t.push(224 | r >>> 12),
                    t.push(128 | r >>> 6 & 63),
                    t.push(128 | 63 & r))
            }
            return t
        }

        function b(e) {
            for (var t = [], n = 0, i = e.length; n < i; n++)
                e[n] >= 224 && e[n] <= 239 ? (t.push(String.fromCharCode(((15 & e[n]) << 12) + ((63 & e[n + 1]) << 6) + (63 & e[n + 2]))),
                    n += 2) : e[n] >= 192 && e[n] <= 223 ? (t.push(String.fromCharCode(((31 & e[n]) << 6) + (63 & e[n + 1]))),
                    n++) : t.push(String.fromCharCode(e[n]));
            return t.join("")
        }

        function m(e, t) {
            return e << t | e >>> 32 - t
        }

        function v(e) {
            return (255 & f[e >>> 24 & 255]) << 24 | (255 & f[e >>> 16 & 255]) << 16 | (255 & f[e >>> 8 & 255]) << 8 | 255 & f[255 & e]
        }

        function j(e) {
            return e ^ m(e, 2) ^ m(e, 10) ^ m(e, 18) ^ m(e, 24)
        }

        function A(e) {
            return e ^ m(e, 13) ^ m(e, 23)
        }

        function k(e, t, n) {
            for (var i = new Array(4), r = new Array(4), o = 0; o < 4; o++)
                r[0] = 255 & e[0 + 4 * o],
                    r[1] = 255 & e[1 + 4 * o],
                    r[2] = 255 & e[2 + 4 * o],
                    r[3] = 255 & e[3 + 4 * o],
                    i[o] = r[0] << 24 | r[1] << 16 | r[2] << 8 | r[3];
            for (var a, s = 0; s < 32; s += 4)
                a = i[1] ^ i[2] ^ i[3] ^ n[s + 0],
                    i[0] ^= j(v(a)),
                    a = i[2] ^ i[3] ^ i[0] ^ n[s + 1],
                    i[1] ^= j(v(a)),
                    a = i[3] ^ i[0] ^ i[1] ^ n[s + 2],
                    i[2] ^= j(v(a)),
                    a = i[0] ^ i[1] ^ i[2] ^ n[s + 3],
                    i[3] ^= j(v(a));
            for (var l = 0; l < 16; l += 4)
                t[l] = i[3 - l / 4] >>> 24 & 255,
                    t[l + 1] = i[3 - l / 4] >>> 16 & 255,
                    t[l + 2] = i[3 - l / 4] >>> 8 & 255,
                    t[l + 3] = 255 & i[3 - l / 4]
        }

        function x(e, t, n) {
            for (var i = new Array(4), r = new Array(4), o = 0; o < 4; o++)
                r[0] = 255 & e[0 + 4 * o],
                    r[1] = 255 & e[1 + 4 * o],
                    r[2] = 255 & e[2 + 4 * o],
                    r[3] = 255 & e[3 + 4 * o],
                    i[o] = r[0] << 24 | r[1] << 16 | r[2] << 8 | r[3];
            i[0] ^= 2746333894,
                i[1] ^= 1453994832,
                i[2] ^= 1736282519,
                i[3] ^= 2993693404;
            for (var a, s = 0; s < 32; s += 4)
                a = i[1] ^ i[2] ^ i[3] ^ d[s + 0],
                    t[s + 0] = i[0] ^= A(v(a)),
                    a = i[2] ^ i[3] ^ i[0] ^ d[s + 1],
                    t[s + 1] = i[1] ^= A(v(a)),
                    a = i[3] ^ i[0] ^ i[1] ^ d[s + 2],
                    t[s + 2] = i[2] ^= A(v(a)),
                    a = i[0] ^ i[1] ^ i[2] ^ d[s + 3],
                    t[s + 3] = i[3] ^= A(v(a));
            if (n === l)
                for (var c, u = 0; u < 16; u++)
                    c = t[u],
                        t[u] = t[31 - u],
                        t[31 - u] = c
        }

        function y(e, t, i) {
            var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}
                , o = r.padding
                , a = void 0 === o ? "pkcs#5" : o
                , s = (r.mode,
                r.output)
                , f = void 0 === s ? "string" : s;
            if ("string" === typeof t && (t = h(t)),
            16 !== t.length)
                throw new Error("key is invalid");
            if (e = "string" === typeof e ? i !== l ? g(e) : h(e) : n(e),
            "pkcs#5" === a && i !== l)
                for (var d = u - e.length % u, m = 0; m < d; m++)
                    e.push(d);
            var v = new Array(c);
            x(t, v, i);
            var j = []
                , A = e.length
                , y = 0;
            while (A >= u) {
                var C = e.slice(y, y + 16)
                    , _ = new Array(16);
                k(C, _, v);
                for (var w = 0; w < u; w++)
                    j[y + w] = _[w];
                A -= u,
                    y += u
            }
            if ("pkcs#5" === a && i === l) {
                var I = j[j.length - 1];
                j.splice(j.length - I, I)
            }
            return "array" !== f ? i !== l ? p(j) : b(j) : j
        }

        e.exports = {
            encrypt: function (e, t, n) {
                return y(e, t, 1, n)
            },
            decrypt: function (e, t, n) {
                return y(e, t, 0, n)
            },
            utf8ToArray: function (e) {
                return g(e)
            }
        }
    },
    "f33e": function (e, t, n) {
        (function () {
            var t, n = 0xdeadbeefcafe, i = 15715070 == (16777215 & n);

            function r(e, t, n) {
                null != e && ("number" == typeof e ? this.fromNumber(e, t, n) : null == t && "string" != typeof e ? this.fromString(e, 256) : this.fromString(e, t))
            }

            function o() {
                return new r(null)
            }

            function a(e, t, n, i, r, o) {
                while (--o >= 0) {
                    var a = t * this[e++] + n[i] + r;
                    r = Math.floor(a / 67108864), n[i++] = 67108863 & a
                }
                return r
            }

            function s(e, t, n, i, r, o) {
                var a = 32767 & t, s = t >> 15;
                while (--o >= 0) {
                    var l = 32767 & this[e], c = this[e++] >> 15, u = s * l + c * a;
                    l = a * l + ((32767 & u) << 15) + n[i] + (1073741823 & r), r = (l >>> 30) + (u >>> 15) + s * c + (r >>> 30), n[i++] = 1073741823 & l
                }
                return r
            }

            function l(e, t, n, i, r, o) {
                var a = 16383 & t, s = t >> 14;
                while (--o >= 0) {
                    var l = 16383 & this[e], c = this[e++] >> 14, u = s * l + c * a;
                    l = a * l + ((16383 & u) << 14) + n[i] + r, r = (l >> 28) + (u >> 14) + s * c, n[i++] = 268435455 & l
                }
                return r
            }

            var c = "undefined" !== typeof navigator;
            c && i && "Microsoft Internet Explorer" == navigator.appName ? (r.prototype.am = s, t = 30) : c && i && "Netscape" != navigator.appName ? (r.prototype.am = a, t = 26) : (r.prototype.am = l, t = 28), r.prototype.DB = t, r.prototype.DM = (1 << t) - 1, r.prototype.DV = 1 << t;
            var u = 52;
            r.prototype.FV = Math.pow(2, u), r.prototype.F1 = u - t, r.prototype.F2 = 2 * t - u;
            var f, d, h = "0123456789abcdefghijklmnopqrstuvwxyz", p = new Array;
            for (f = "0".charCodeAt(0), d = 0; d <= 9; ++d) p[f++] = d;
            for (f = "a".charCodeAt(0), d = 10; d < 36; ++d) p[f++] = d;
            for (f = "A".charCodeAt(0), d = 10; d < 36; ++d) p[f++] = d;

            function g(e) {
                return h.charAt(e)
            }

            function b(e, t) {
                var n = p[e.charCodeAt(t)];
                return null == n ? -1 : n
            }

            function m(e) {
                for (var t = this.t - 1; t >= 0; --t) e[t] = this[t];
                e.t = this.t, e.s = this.s
            }

            function v(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 j(e) {
                var t = o();
                return t.fromInt(e), t
            }

            function A(e, t) {
                var n;
                if (16 == t) n = 4; else if (8 == t) n = 3; else if (256 == t) n = 8; else if (2 == t) n = 1; else if (32 == t) n = 5; else {
                    if (4 != t) return void this.fromRadix(e, t);
                    n = 2
                }
                this.t = 0, this.s = 0;
                var i = e.length, o = !1, a = 0;
                while (--i >= 0) {
                    var s = 8 == n ? 255 & e[i] : b(e, i);
                    s < 0 ? "-" == e.charAt(i) && (o = !0) : (o = !1, 0 == a ? this[this.t++] = s : a + n > this.DB ? (this[this.t - 1] |= (s & (1 << this.DB - a) - 1) << a, this[this.t++] = s >> this.DB - a) : this[this.t - 1] |= s << a, a += n, a >= this.DB && (a -= this.DB))
                }
                8 == n && 0 != (128 & e[0]) && (this.s = -1, a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)), this.clamp(), o && r.ZERO.subTo(this, this)
            }

            function k() {
                var e = this.s & this.DM;
                while (this.t > 0 && this[this.t - 1] == e) --this.t
            }

            function x(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 n, i = (1 << t) - 1, r = !1, o = "", a = this.t, s = this.DB - a * this.DB % t;
                if (a-- > 0) {
                    s < this.DB && (n = this[a] >> s) > 0 && (r = !0, o = g(n));
                    while (a >= 0) s < t ? (n = (this[a] & (1 << s) - 1) << t - s, n |= this[--a] >> (s += this.DB - t)) : (n = this[a] >> (s -= t) & i, s <= 0 && (s += this.DB, --a)), n > 0 && (r = !0), r && (o += g(n))
                }
                return r ? o : "0"
            }

            function y() {
                var e = o();
                return r.ZERO.subTo(this, e), e
            }

            function C() {
                return this.s < 0 ? this.negate() : this
            }

            function _(e) {
                var t = this.s - e.s;
                if (0 != t) return t;
                var n = this.t;
                if (t = n - e.t, 0 != t) return this.s < 0 ? -t : t;
                while (--n >= 0) if (0 != (t = this[n] - e[n])) return t;
                return 0
            }

            function w(e) {
                var t, n = 1;
                return 0 != (t = e >>> 16) && (e = t, n += 16), 0 != (t = e >> 8) && (e = t, n += 8), 0 != (t = e >> 4) && (e = t, n += 4), 0 != (t = e >> 2) && (e = t, n += 2), 0 != (t = e >> 1) && (e = t, n += 1), n
            }

            function I() {
                return this.t <= 0 ? 0 : this.DB * (this.t - 1) + w(this[this.t - 1] ^ this.s & this.DM)
            }

            function S(e, t) {
                var n;
                for (n = this.t - 1; n >= 0; --n) t[n + e] = this[n];
                for (n = e - 1; n >= 0; --n) t[n] = 0;
                t.t = this.t + e, t.s = this.s
            }

            function O(e, t) {
                for (var n = e; n < this.t; ++n) t[n - e] = this[n];
                t.t = Math.max(this.t - e, 0), t.s = this.s
            }

            function M(e, t) {
                var n, i = e % this.DB, r = this.DB - i, o = (1 << r) - 1, a = Math.floor(e / this.DB),
                    s = this.s << i & this.DM;
                for (n = this.t - 1; n >= 0; --n) t[n + a + 1] = this[n] >> r | s, s = (this[n] & o) << i;
                for (n = a - 1; n >= 0; --n) t[n] = 0;
                t[a] = s, t.t = this.t + a + 1, t.s = this.s, t.clamp()
            }

            function E(e, t) {
                t.s = this.s;
                var n = Math.floor(e / this.DB);
                if (n >= this.t) t.t = 0; else {
                    var i = e % this.DB, r = this.DB - i, o = (1 << i) - 1;
                    t[0] = this[n] >> i;
                    for (var a = n + 1; a < this.t; ++a) t[a - n - 1] |= (this[a] & o) << r, t[a - n] = this[a] >> i;
                    i > 0 && (t[this.t - n - 1] |= (this.s & o) << r), t.t = this.t - n, t.clamp()
                }
            }

            function T(e, t) {
                var n = 0, i = 0, r = Math.min(e.t, this.t);
                while (n < r) i += this[n] - e[n], t[n++] = i & this.DM, i >>= this.DB;
                if (e.t < this.t) {
                    i -= e.s;
                    while (n < this.t) i += this[n], t[n++] = i & this.DM, i >>= this.DB;
                    i += this.s
                } else {
                    i += this.s;
                    while (n < e.t) i -= e[n], t[n++] = i & this.DM, i >>= this.DB;
                    i -= e.s
                }
                t.s = i < 0 ? -1 : 0, i < -1 ? t[n++] = this.DV + i : i > 0 && (t[n++] = i), t.t = n, t.clamp()
            }

            function D(e, t) {
                var n = this.abs(), i = e.abs(), o = n.t;
                t.t = o + i.t;
                while (--o >= 0) t[o] = 0;
                for (o = 0; o < i.t; ++o) t[o + n.t] = n.am(0, i[o], t, o, 0, n.t);
                t.s = 0, t.clamp(), this.s != e.s && r.ZERO.subTo(t, t)
            }

            function F(e) {
                var t = this.abs(), n = e.t = 2 * t.t;
                while (--n >= 0) e[n] = 0;
                for (n = 0; n < t.t - 1; ++n) {
                    var i = t.am(n, t[n], e, 2 * n, 0, 1);
                    (e[n + t.t] += t.am(n + 1, 2 * t[n], e, 2 * n + 1, i, t.t - n - 1)) >= t.DV && (e[n + t.t] -= t.DV, e[n + t.t + 1] = 1)
                }
                e.t > 0 && (e[e.t - 1] += t.am(n, t[n], e, 2 * n, 0, 1)), e.s = 0, e.clamp()
            }

            function P(e, t, n) {
                var i = e.abs();
                if (!(i.t <= 0)) {
                    var a = this.abs();
                    if (a.t < i.t) return null != t && t.fromInt(0), void (null != n && this.copyTo(n));
                    null == n && (n = o());
                    var s = o(), l = this.s, c = e.s, u = this.DB - w(i[i.t - 1]);
                    u > 0 ? (i.lShiftTo(u, s), a.lShiftTo(u, n)) : (i.copyTo(s), a.copyTo(n));
                    var f = s.t, d = s[f - 1];
                    if (0 != d) {
                        var h = d * (1 << this.F1) + (f > 1 ? s[f - 2] >> this.F2 : 0), p = this.FV / h,
                            g = (1 << this.F1) / h, b = 1 << this.F2, m = n.t, v = m - f, j = null == t ? o() : t;
                        s.dlShiftTo(v, j), n.compareTo(j) >= 0 && (n[n.t++] = 1, n.subTo(j, n)), r.ONE.dlShiftTo(f, j), j.subTo(s, s);
                        while (s.t < f) s[s.t++] = 0;
                        while (--v >= 0) {
                            var A = n[--m] == d ? this.DM : Math.floor(n[m] * p + (n[m - 1] + b) * g);
                            if ((n[m] += s.am(0, A, n, v, 0, f)) < A) {
                                s.dlShiftTo(v, j), n.subTo(j, n);
                                while (n[m] < --A) n.subTo(j, n)
                            }
                        }
                        null != t && (n.drShiftTo(f, t), l != c && r.ZERO.subTo(t, t)), n.t = f, n.clamp(), u > 0 && n.rShiftTo(u, n), l < 0 && r.ZERO.subTo(n, n)
                    }
                }
            }

            function B(e) {
                var t = o();
                return this.abs().divRemTo(e, null, t), this.s < 0 && t.compareTo(r.ZERO) > 0 && e.subTo(t, t), t
            }

            function N(e) {
                this.m = e
            }

            function L(e) {
                return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e
            }

            function H(e) {
                return e
            }

            function R(e) {
                e.divRemTo(this.m, null, e)
            }

            function Y(e, t, n) {
                e.multiplyTo(t, n), this.reduce(n)
            }

            function z(e, t) {
                e.squareTo(t), this.reduce(t)
            }

            function V() {
                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 G(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 W(e) {
                var t = o();
                return e.abs().dlShiftTo(this.m.t, t), t.divRemTo(this.m, null, t), e.s < 0 && t.compareTo(r.ZERO) > 0 && this.m.subTo(t, t), t
            }

            function K(e) {
                var t = o();
                return e.copyTo(t), this.reduce(t), t
            }

            function U(e) {
                while (e.t <= this.mt2) e[e.t++] = 0;
                for (var t = 0; t < this.m.t; ++t) {
                    var n = 32767 & e[t],
                        i = n * this.mpl + ((n * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
                    n = t + this.m.t, e[n] += this.m.am(0, i, e, t, 0, this.m.t);
                    while (e[n] >= e.DV) e[n] -= e.DV, e[++n]++
                }
                e.clamp(), e.drShiftTo(this.m.t, e), e.compareTo(this.m) >= 0 && e.subTo(this.m, e)
            }

            function Q(e, t) {
                e.squareTo(t), this.reduce(t)
            }

            function J(e, t, n) {
                e.multiplyTo(t, n), this.reduce(n)
            }

            function X() {
                return 0 == (this.t > 0 ? 1 & this[0] : this.s)
            }

            function q(e, t) {
                if (e > 4294967295 || e < 1) return r.ONE;
                var n = o(), i = o(), a = t.convert(this), s = w(e) - 1;
                a.copyTo(n);
                while (--s >= 0) if (t.sqrTo(n, i), (e & 1 << s) > 0) t.mulTo(i, a, n); else {
                    var l = n;
                    n = i, i = l
                }
                return t.revert(n)
            }

            function Z(e, t) {
                var n;
                return n = e < 256 || t.isEven() ? new N(t) : new G(t), this.exp(e, n)
            }

            function $() {
                var e = o();
                return this.copyTo(e), e
            }

            function ee() {
                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 te() {
                return 0 == this.t ? this.s : this[0] << 24 >> 24
            }

            function ne() {
                return 0 == this.t ? this.s : this[0] << 16 >> 16
            }

            function ie(e) {
                return Math.floor(Math.LN2 * this.DB / Math.log(e))
            }

            function re() {
                return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
            }

            function oe(e) {
                if (null == e && (e = 10), 0 == this.signum() || e < 2 || e > 36) return "0";
                var t = this.chunkSize(e), n = Math.pow(e, t), i = j(n), r = o(), a = o(), s = "";
                this.divRemTo(i, r, a);
                while (r.signum() > 0) s = (n + a.intValue()).toString(e).substr(1) + s, r.divRemTo(i, r, a);
                return a.intValue().toString(e) + s
            }

            function ae(e, t) {
                this.fromInt(0), null == t && (t = 10);
                for (var n = this.chunkSize(t), i = Math.pow(t, n), o = !1, a = 0, s = 0, l = 0; l < e.length; ++l) {
                    var c = b(e, l);
                    c < 0 ? "-" == e.charAt(l) && 0 == this.signum() && (o = !0) : (s = t * s + c, ++a >= n && (this.dMultiply(i), this.dAddOffset(s, 0), a = 0, s = 0))
                }
                a > 0 && (this.dMultiply(Math.pow(t, a)), this.dAddOffset(s, 0)), o && r.ZERO.subTo(this, this)
            }

            function se(e, t, n) {
                if ("number" == typeof t) if (e < 2) this.fromInt(1); else {
                    this.fromNumber(e, n), this.testBit(e - 1) || this.bitwiseTo(r.ONE.shiftLeft(e - 1), ge, this), this.isEven() && this.dAddOffset(1, 0);
                    while (!this.isProbablePrime(t)) this.dAddOffset(2, 0), this.bitLength() > e && this.subTo(r.ONE.shiftLeft(e - 1), this)
                } else {
                    var i = new Array, o = 7 & e;
                    i.length = 1 + (e >> 3), t.nextBytes(i), o > 0 ? i[0] &= (1 << o) - 1 : i[0] = 0, this.fromString(i, 256)
                }
            }

            function le() {
                var e = this.t, t = new Array;
                t[0] = this.s;
                var n, i = this.DB - e * this.DB % 8, r = 0;
                if (e-- > 0) {
                    i < this.DB && (n = this[e] >> i) != (this.s & this.DM) >> i && (t[r++] = n | this.s << this.DB - i);
                    while (e >= 0) i < 8 ? (n = (this[e] & (1 << i) - 1) << 8 - i, n |= this[--e] >> (i += this.DB - 8)) : (n = this[e] >> (i -= 8) & 255, i <= 0 && (i += this.DB, --e)), 0 != (128 & n) && (n |= -256), 0 == r && (128 & this.s) != (128 & n) && ++r, (r > 0 || n != this.s) && (t[r++] = n)
                }
                return t
            }

            function ce(e) {
                return 0 == this.compareTo(e)
            }

            function ue(e) {
                return this.compareTo(e) < 0 ? this : e
            }

            function fe(e) {
                return this.compareTo(e) > 0 ? this : e
            }

            function de(e, t, n) {
                var i, r, o = Math.min(e.t, this.t);
                for (i = 0; i < o; ++i) n[i] = t(this[i], e[i]);
                if (e.t < this.t) {
                    for (r = e.s & this.DM, i = o; i < this.t; ++i) n[i] = t(this[i], r);
                    n.t = this.t
                } else {
                    for (r = this.s & this.DM, i = o; i < e.t; ++i) n[i] = t(r, e[i]);
                    n.t = e.t
                }
                n.s = t(this.s, e.s), n.clamp()
            }

            function he(e, t) {
                return e & t
            }

            function pe(e) {
                var t = o();
                return this.bitwiseTo(e, he, t), t
            }

            function ge(e, t) {
                return e | t
            }

            function be(e) {
                var t = o();
                return this.bitwiseTo(e, ge, t), t
            }

            function me(e, t) {
                return e ^ t
            }

            function ve(e) {
                var t = o();
                return this.bitwiseTo(e, me, t), t
            }

            function je(e, t) {
                return e & ~t
            }

            function Ae(e) {
                var t = o();
                return this.bitwiseTo(e, je, t), t
            }

            function ke() {
                for (var e = o(), t = 0; t < this.t; ++t) e[t] = this.DM & ~this[t];
                return e.t = this.t, e.s = ~this.s, e
            }

            function xe(e) {
                var t = o();
                return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t), t
            }

            function ye(e) {
                var t = o();
                return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t), t
            }

            function Ce(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 _e() {
                for (var e = 0; e < this.t; ++e) if (0 != this[e]) return e * this.DB + Ce(this[e]);
                return this.s < 0 ? this.t * this.DB : -1
            }

            function we(e) {
                var t = 0;
                while (0 != e) e &= e - 1, ++t;
                return t
            }

            function Ie() {
                for (var e = 0, t = this.s & this.DM, n = 0; n < this.t; ++n) e += we(this[n] ^ t);
                return e
            }

            function Se(e) {
                var t = Math.floor(e / this.DB);
                return t >= this.t ? 0 != this.s : 0 != (this[t] & 1 << e % this.DB)
            }

            function Oe(e, t) {
                var n = r.ONE.shiftLeft(e);
                return this.bitwiseTo(n, t, n), n
            }

            function Me(e) {
                return this.changeBit(e, ge)
            }

            function Ee(e) {
                return this.changeBit(e, je)
            }

            function Te(e) {
                return this.changeBit(e, me)
            }

            function De(e, t) {
                var n = 0, i = 0, r = Math.min(e.t, this.t);
                while (n < r) i += this[n] + e[n], t[n++] = i & this.DM, i >>= this.DB;
                if (e.t < this.t) {
                    i += e.s;
                    while (n < this.t) i += this[n], t[n++] = i & this.DM, i >>= this.DB;
                    i += this.s
                } else {
                    i += this.s;
                    while (n < e.t) i += e[n], t[n++] = i & this.DM, i >>= this.DB;
                    i += e.s
                }
                t.s = i < 0 ? -1 : 0, i > 0 ? t[n++] = i : i < -1 && (t[n++] = this.DV + i), t.t = n, t.clamp()
            }

            function Fe(e) {
                var t = o();
                return this.addTo(e, t), t
            }

            function Pe(e) {
                var t = o();
                return this.subTo(e, t), t
            }

            function Be(e) {
                var t = o();
                return this.multiplyTo(e, t), t
            }

            function Ne() {
                var e = o();
                return this.squareTo(e), e
            }

            function Le(e) {
                var t = o();
                return this.divRemTo(e, t, null), t
            }

            function He(e) {
                var t = o();
                return this.divRemTo(e, null, t), t
            }

            function Re(e) {
                var t = o(), n = o();
                return this.divRemTo(e, t, n), new Array(t, n)
            }

            function Ye(e) {
                this[this.t] = this.am(0, e - 1, this, 0, 0, this.t), ++this.t, this.clamp()
            }

            function ze(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 Ve() {
            }

            function Ge(e) {
                return e
            }

            function We(e, t, n) {
                e.multiplyTo(t, n)
            }

            function Ke(e, t) {
                e.squareTo(t)
            }

            function Ue(e) {
                return this.exp(e, new Ve)
            }

            function Qe(e, t, n) {
                var i, r = Math.min(this.t + e.t, t);
                n.s = 0, n.t = r;
                while (r > 0) n[--r] = 0;
                for (i = n.t - this.t; r < i; ++r) n[r + this.t] = this.am(0, e[r], n, r, 0, this.t);
                for (i = Math.min(e.t, t); r < i; ++r) this.am(0, e[r], n, r, 0, t - r);
                n.clamp()
            }

            function Je(e, t, n) {
                --t;
                var i = n.t = this.t + e.t - t;
                n.s = 0;
                while (--i >= 0) n[i] = 0;
                for (i = Math.max(t - this.t, 0); i < e.t; ++i) n[this.t + i - t] = this.am(t - i, e[i], n, 0, 0, this.t + i - t);
                n.clamp(), n.drShiftTo(1, n)
            }

            function Xe(e) {
                this.r2 = o(), this.q3 = o(), r.ONE.dlShiftTo(2 * e.t, this.r2), this.mu = this.r2.divide(e), this.m = e
            }

            function qe(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 = o();
                return e.copyTo(t), this.reduce(t), t
            }

            function Ze(e) {
                return e
            }

            function $e(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 et(e, t) {
                e.squareTo(t), this.reduce(t)
            }

            function tt(e, t, n) {
                e.multiplyTo(t, n), this.reduce(n)
            }

            function nt(e, t) {
                var n, i, r = e.bitLength(), a = j(1);
                if (r <= 0) return a;
                n = r < 18 ? 1 : r < 48 ? 3 : r < 144 ? 4 : r < 768 ? 5 : 6, i = r < 8 ? new N(t) : t.isEven() ? new Xe(t) : new G(t);
                var s = new Array, l = 3, c = n - 1, u = (1 << n) - 1;
                if (s[1] = i.convert(this), n > 1) {
                    var f = o();
                    i.sqrTo(s[1], f);
                    while (l <= u) s[l] = o(), i.mulTo(f, s[l - 2], s[l]), l += 2
                }
                var d, h, p = e.t - 1, g = !0, b = o();
                r = w(e[p]) - 1;
                while (p >= 0) {
                    r >= c ? d = e[p] >> r - c & u : (d = (e[p] & (1 << r + 1) - 1) << c - r, p > 0 && (d |= e[p - 1] >> this.DB + r - c)), l = n;
                    while (0 == (1 & d)) d >>= 1, --l;
                    if ((r -= l) < 0 && (r += this.DB, --p), g) s[d].copyTo(a), g = !1; else {
                        while (l > 1) i.sqrTo(a, b), i.sqrTo(b, a), l -= 2;
                        l > 0 ? i.sqrTo(a, b) : (h = a, a = b, b = h), i.mulTo(b, s[d], a)
                    }
                    while (p >= 0 && 0 == (e[p] & 1 << r)) i.sqrTo(a, b), h = a, a = b, b = h, --r < 0 && (r = this.DB - 1, --p)
                }
                return i.revert(a)
            }

            function it(e) {
                var t = this.s < 0 ? this.negate() : this.clone(), n = e.s < 0 ? e.negate() : e.clone();
                if (t.compareTo(n) < 0) {
                    var i = t;
                    t = n, n = i
                }
                var r = t.getLowestSetBit(), o = n.getLowestSetBit();
                if (o < 0) return t;
                r < o && (o = r), o > 0 && (t.rShiftTo(o, t), n.rShiftTo(o, n));
                while (t.signum() > 0) (r = t.getLowestSetBit()) > 0 && t.rShiftTo(r, t), (r = n.getLowestSetBit()) > 0 && n.rShiftTo(r, n), t.compareTo(n) >= 0 ? (t.subTo(n, t), t.rShiftTo(1, t)) : (n.subTo(t, n), n.rShiftTo(1, n));
                return o > 0 && n.lShiftTo(o, n), n
            }

            function rt(e) {
                if (e <= 0) return 0;
                var t = this.DV % e, n = this.s < 0 ? e - 1 : 0;
                if (this.t > 0) if (0 == t) n = this[0] % e; else for (var i = this.t - 1; i >= 0; --i) n = (t * n + this[i]) % e;
                return n
            }

            function ot(e) {
                var t = e.isEven();
                if (this.isEven() && t || 0 == e.signum()) return r.ZERO;
                var n = e.clone(), i = this.clone(), o = j(1), a = j(0), s = j(0), l = j(1);
                while (0 != n.signum()) {
                    while (n.isEven()) n.rShiftTo(1, n), t ? (o.isEven() && a.isEven() || (o.addTo(this, o), a.subTo(e, a)), o.rShiftTo(1, o)) : a.isEven() || a.subTo(e, a), a.rShiftTo(1, a);
                    while (i.isEven()) i.rShiftTo(1, i), t ? (s.isEven() && l.isEven() || (s.addTo(this, s), l.subTo(e, l)), s.rShiftTo(1, s)) : l.isEven() || l.subTo(e, l), l.rShiftTo(1, l);
                    n.compareTo(i) >= 0 ? (n.subTo(i, n), t && o.subTo(s, o), a.subTo(l, a)) : (i.subTo(n, i), t && s.subTo(o, s), l.subTo(a, l))
                }
                return 0 != i.compareTo(r.ONE) ? r.ZERO : l.compareTo(e) >= 0 ? l.subtract(e) : l.signum() < 0 ? (l.addTo(e, l), l.signum() < 0 ? l.add(e) : l) : l
            }

            N.prototype.convert = L, N.prototype.revert = H, N.prototype.reduce = R, N.prototype.mulTo = Y, N.prototype.sqrTo = z, G.prototype.convert = W, G.prototype.revert = K, G.prototype.reduce = U, G.prototype.mulTo = J, G.prototype.sqrTo = Q, r.prototype.copyTo = m, r.prototype.fromInt = v, r.prototype.fromString = A, r.prototype.clamp = k, r.prototype.dlShiftTo = S, r.prototype.drShiftTo = O, r.prototype.lShiftTo = M, r.prototype.rShiftTo = E, r.prototype.subTo = T, r.prototype.multiplyTo = D, r.prototype.squareTo = F, r.prototype.divRemTo = P, r.prototype.invDigit = V, r.prototype.isEven = X, r.prototype.exp = q, r.prototype.toString = x, r.prototype.negate = y, r.prototype.abs = C, r.prototype.compareTo = _, r.prototype.bitLength = I, r.prototype.mod = B, r.prototype.modPowInt = Z, r.ZERO = j(0), r.ONE = j(1), Ve.prototype.convert = Ge, Ve.prototype.revert = Ge, Ve.prototype.mulTo = We, Ve.prototype.sqrTo = Ke, Xe.prototype.convert = qe, Xe.prototype.revert = Ze, Xe.prototype.reduce = $e, Xe.prototype.mulTo = tt, Xe.prototype.sqrTo = et;
            var at, st, lt,
                ct = [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],
                ut = (1 << 26) / ct[ct.length - 1];

            function ft(e) {
                var t, n = this.abs();
                if (1 == n.t && n[0] <= ct[ct.length - 1]) {
                    for (t = 0; t < ct.length; ++t) if (n[0] == ct[t]) return !0;
                    return !1
                }
                if (n.isEven()) return !1;
                t = 1;
                while (t < ct.length) {
                    var i = ct[t], r = t + 1;
                    while (r < ct.length && i < ut) i *= ct[r++];
                    i = n.modInt(i);
                    while (t < r) if (i % ct[t++] == 0) return !1
                }
                return n.millerRabin(e)
            }

            function dt(e) {
                var t = this.subtract(r.ONE), n = t.getLowestSetBit();
                if (n <= 0) return !1;
                var i = t.shiftRight(n);
                e = e + 1 >> 1, e > ct.length && (e = ct.length);
                for (var a = o(), s = 0; s < e; ++s) {
                    a.fromInt(ct[Math.floor(Math.random() * ct.length)]);
                    var l = a.modPow(i, this);
                    if (0 != l.compareTo(r.ONE) && 0 != l.compareTo(t)) {
                        var c = 1;
                        while (c++ < n && 0 != l.compareTo(t)) if (l = l.modPowInt(2, this), 0 == l.compareTo(r.ONE)) return !1;
                        if (0 != l.compareTo(t)) return !1
                    }
                }
                return !0
            }

            function ht(e) {
                st[lt++] ^= 255 & e, st[lt++] ^= e >> 8 & 255, st[lt++] ^= e >> 16 & 255, st[lt++] ^= e >> 24 & 255, lt >= _t && (lt -= _t)
            }

            function pt() {
                ht((new Date).getTime())
            }

            if (r.prototype.chunkSize = ie, r.prototype.toRadix = oe, r.prototype.fromRadix = ae, r.prototype.fromNumber = se, r.prototype.bitwiseTo = de, r.prototype.changeBit = Oe, r.prototype.addTo = De, r.prototype.dMultiply = Ye, r.prototype.dAddOffset = ze, r.prototype.multiplyLowerTo = Qe, r.prototype.multiplyUpperTo = Je, r.prototype.modInt = rt, r.prototype.millerRabin = dt, r.prototype.clone = $, r.prototype.intValue = ee, r.prototype.byteValue = te, r.prototype.shortValue = ne, r.prototype.signum = re, r.prototype.toByteArray = le, r.prototype.equals = ce, r.prototype.min = ue, r.prototype.max = fe, r.prototype.and = pe, r.prototype.or = be, r.prototype.xor = ve, r.prototype.andNot = Ae, r.prototype.not = ke, r.prototype.shiftLeft = xe, r.prototype.shiftRight = ye, r.prototype.getLowestSetBit = _e, r.prototype.bitCount = Ie, r.prototype.testBit = Se, r.prototype.setBit = Me, r.prototype.clearBit = Ee, r.prototype.flipBit = Te, r.prototype.add = Fe, r.prototype.subtract = Pe, r.prototype.multiply = Be, r.prototype.divide = Le, r.prototype.remainder = He, r.prototype.divideAndRemainder = Re, r.prototype.modPow = nt, r.prototype.modInverse = ot, r.prototype.pow = Ue, r.prototype.gcd = it, r.prototype.isProbablePrime = ft, r.prototype.square = Ne, r.prototype.Barrett = Xe, null == st) {
                var gt;
                if (st = new Array, lt = 0, "undefined" !== typeof window && window.crypto) if (window.crypto.getRandomValues) {
                    var bt = new Uint8Array(32);
                    for (window.crypto.getRandomValues(bt), gt = 0; gt < 32; ++gt) st[lt++] = bt[gt]
                } else if ("Netscape" == navigator.appName && navigator.appVersion < "5") {
                    var mt = window.crypto.random(32);
                    for (gt = 0; gt < mt.length; ++gt) st[lt++] = 255 & mt.charCodeAt(gt)
                }
                while (lt < _t) gt = Math.floor(65536 * Math.random()), st[lt++] = gt >>> 8, st[lt++] = 255 &gt; lt = 0, pt()
            }

            function vt() {
                if (null == at) {
                    for (pt(), at = Ct(), at.init(st), lt = 0; lt < st.length; ++lt) st[lt] = 0;
                    lt = 0
                }
                return at.next()
            }

            function jt(e) {
                var t;
                for (t = 0; t < e.length; ++t) e[t] = vt()
            }

            function At() {
            }

            function kt() {
                this.i = 0, this.j = 0, this.S = new Array
            }

            function xt(e) {
                var t, n, i;
                for (t = 0; t < 256; ++t) this.S[t] = t;
                for (n = 0, t = 0; t < 256; ++t) n = n + this.S[t] + e[t % e.length] & 255, i = this.S[t], this.S[t] = this.S[n], this.S[n] = i;
                this.i = 0, this.j = 0
            }

            function yt() {
                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]
            }

            function Ct() {
                return new kt
            }

            At.prototype.nextBytes = jt, kt.prototype.init = xt, kt.prototype.next = yt;
            var _t = 256;
            e.exports = {default: r, BigInteger: r, SecureRandom: At}
        }).call(this)
    },
    d714: function(e, t, n) {
        function i(e) {
            return i = "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
            }
            ,
            i(e)
        }
        function r(e, t) {
            if ("function" !== typeof t && null !== t)
                throw new TypeError("Super expression must either be null or a function");
            e.prototype = Object.create(t && t.prototype, {
                constructor: {
                    value: e,
                    writable: !0,
                    configurable: !0
                }
            }),
            Object.defineProperty(e, "prototype", {
                writable: !1
            }),
            t && o(e, t)
        }
        function o(e, t) {
            return o = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {
                return e.__proto__ = t,
                e
            }
            ,
            o(e, t)
        }
        function a(e) {
            var t = c();
            return function() {
                var n, i = u(e);
                if (t) {
                    var r = u(this).constructor;
                    n = Reflect.construct(i, arguments, r)
                } else
                    n = i.apply(this, arguments);
                return s(this, n)
            }
        }
        function s(e, t) {
            if (t && ("object" === i(t) || "function" === typeof t))
                return t;
            if (void 0 !== t)
                throw new TypeError("Derived constructors may only return object or undefined");
            return l(e)
        }
        function l(e) {
            if (void 0 === e)
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return e
        }
        function c() {
            if ("undefined" === typeof Reflect || !Reflect.construct)
                return !1;
            if (Reflect.construct.sham)
                return !1;
            if ("function" === typeof Proxy)
                return !0;
            try {
                return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}
                ))),
                !0
            } catch (e) {
                return !1
            }
        }
        function u(e) {
            return u = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {
                return e.__proto__ || Object.getPrototypeOf(e)
            }
            ,
            u(e)
        }
        function f(e, t) {
            if (!(e instanceof t))
                throw new TypeError("Cannot call a class as a function")
        }
        function d(e, t) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n];
                i.enumerable = i.enumerable || !1,
                i.configurable = !0,
                "value"in i && (i.writable = !0),
                Object.defineProperty(e, p(i.key), i)
            }
        }
        function h(e, t, n) {
            return t && d(e.prototype, t),
            n && d(e, n),
            Object.defineProperty(e, "prototype", {
                writable: !1
            }),
            e
        }
        function p(e) {
            var t = g(e, "string");
            return "symbol" === i(t) ? t : String(t)
        }
        function g(e, t) {
            if ("object" !== i(e) || null === e)
                return e;
            var n = e[Symbol.toPrimitive];
            if (void 0 !== n) {
                var r = n.call(e, t || "default");
                if ("object" !== i(r))
                    return r;
                throw new TypeError("@@toPrimitive must return a primitive value.")
            }
            return ("string" === t ? String : Number)(e)
        }
        var b = n("f33e")
          , m = b.BigInteger;
        function v(e) {
            var t = e.toString(16);
            if ("-" !== t.substr(0, 1))
                t.length % 2 === 1 ? t = "0" + t : t.match(/^[0-7]/) || (t = "00" + t);
            else {
                var n = t.substr(1)
                  , i = n.length;
                i % 2 === 1 ? i += 1 : t.match(/^[0-7]/) || (i += 2);
                for (var r = "", o = 0; o < i; o++)
                    r += "f";
                var a = new m(r,16)
                  , s = a.xor(e).add(m.ONE);
                t = s.toString(16).replace(/^-/, "")
            }
            return t
        }
        var j = function() {
            "use strict";
            function e() {
                f(this, e),
                this.isModified = !0,
                this.hTLV = null,
                this.hT = "00",
                this.hL = "00",
                this.hV = ""
            }
            return h(e, [{
                key: "getLengthHexFromValue",
                value: function() {
                    var e = this.hV.length / 2
                      , t = e.toString(16);
                    if (t.length % 2 === 1 && (t = "0" + t),
                    e < 128)
                        return t;
                    var n = t.length / 2
                      , i = 128 + n;
                    return i.toString(16) + t
                }
            }, {
                key: "getEncodedHex",
                value: function() {
                    return (null == this.hTLV || this.isModified) && (this.hV = this.getFreshValueHex(),
                    this.hL = this.getLengthHexFromValue(),
                    this.hTLV = this.hT + this.hL + this.hV,
                    this.isModified = !1),
                    this.hTLV
                }
            }, {
                key: "getFreshValueHex",
                value: function() {
                    return ""
                }
            }]),
            e
        }()
          , A = function(e) {
            "use strict";
            r(n, e);
            var t = a(n);
            function n(e) {
                var i;
                return f(this, n),
                i = t.call(this),
                i.hT = "02",
                e && e.bigint && (i.hTLV = null,
                i.isModified = !0,
                i.hV = v(e.bigint)),
                i
            }
            return h(n, [{
                key: "getFreshValueHex",
                value: function() {
                    return this.hV
                }
            }]),
            n
        }(j)
          , k = function(e) {
            "use strict";
            r(n, e);
            var t = a(n);
            function n(e) {
                var i;
                return f(this, n),
                i = t.call(this),
                i.hT = "30",
                i.asn1Array = [],
                e && e.array && (i.asn1Array = e.array),
                i
            }
            return h(n, [{
                key: "getFreshValueHex",
                value: function() {
                    for (var e = "", t = 0; t < this.asn1Array.length; t++) {
                        var n = this.asn1Array[t];
                        e += n.getEncodedHex()
                    }
                    return this.hV = e,
                    this.hV
                }
            }]),
            n
        }(j);
        function x(e, t) {
            if ("8" !== e.substring(t + 2, t + 3))
                return 1;
            var n = parseInt(e.substring(t + 3, t + 4), 10);
            return 0 === n ? -1 : n > 0 && n < 10 ? n + 1 : -2
        }
        function y(e, t) {
            var n = x(e, t);
            return n < 1 ? "" : e.substring(t + 2, t + 2 + 2 * n)
        }
        function C(e, t) {
            var n, i = y(e, t);
            return "" === i ? -1 : (n = parseInt(i.substring(0, 1), 10) < 8 ? new m(i,16) : new m(i.substring(2),16),
            n.intValue())
        }
        function _(e, t) {
            var n = x(e, t);
            return n < 0 ? n : t + 2 * (n + 1)
        }
        function w(e, t) {
            var n = _(e, t)
              , i = C(e, t);
            return e.substring(n, n + 2 * i)
        }
        function I(e, t) {
            var n = _(e, t)
              , i = C(e, t);
            return n + 2 * i
        }
        function S(e, t) {
            var n = []
              , i = _(e, t);
            n.push(i);
            for (var r = C(e, t), o = i, a = 0; ; ) {
                var s = I(e, o);
                if (null == s || s - i >= 2 * r)
                    break;
                if (a >= 200)
                    break;
                n.push(s),
                o = s,
                a++
            }
            return n
        }
        e.exports = {
            encodeDer: function(e, t) {
                var n = new A({
                    bigint: e
                })
                  , i = new A({
                    bigint: t
                })
                  , r = new k({
                    array: [n, i]
                });
                return r.getEncodedHex()
            },
            decodeDer: function(e) {
                var t = S(e, 0)
                  , n = t[0]
                  , i = t[1]
                  , r = w(e, n)
                  , o = w(e, i)
                  , a = new m(r,16)
                  , s = new m(o,16);
                return {
                    r: a,
                    s: s
                }
            }
        }
    },
    cd73: function(e, t, n) {
        function i(e) {
            return i = "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
            }
            ,
            i(e)
        }
        function r(e, t) {
            if (!(e instanceof t))
                throw new TypeError("Cannot call a class as a function")
        }
        function o(e, t) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n];
                i.enumerable = i.enumerable || !1,
                i.configurable = !0,
                "value"in i && (i.writable = !0),
                Object.defineProperty(e, s(i.key), i)
            }
        }
        function a(e, t, n) {
            return t && o(e.prototype, t),
            n && o(e, n),
            Object.defineProperty(e, "prototype", {
                writable: !1
            }),
            e
        }
        function s(e) {
            var t = l(e, "string");
            return "symbol" === i(t) ? t : String(t)
        }
        function l(e, t) {
            if ("object" !== i(e) || null === e)
                return e;
            var n = e[Symbol.toPrimitive];
            if (void 0 !== n) {
                var r = n.call(e, t || "default");
                if ("object" !== i(r))
                    return r;
                throw new TypeError("@@toPrimitive must return a primitive value.")
            }
            return ("string" === t ? String : Number)(e)
        }
        var c = n("f33e")
          , u = c.BigInteger
          , f = n("ad6e")
          , d = function(e, t, n, i, r) {
            for (var o = 0; o < r; o++)
                n[i + o] = e[t + o]
        }
          , h = {
            minValue: -2147483648,
            maxValue: 2147483647,
            parse: function(e) {
                if (e < this.minValue) {
                    for (var t = Number(-e), n = t.toString(2), i = n.substr(n.length - 31, 31), r = "", o = 0; o < i.length; o++) {
                        var a = i.substr(o, 1);
                        r += "0" === a ? "1" : "0"
                    }
                    var s = parseInt(r, 2);
                    return s + 1
                }
                if (e > this.maxValue) {
                    for (var l = Number(e), c = l.toString(2), u = c.substr(c.length - 31, 31), f = "", d = 0; d < u.length; d++) {
                        var h = u.substr(d, 1);
                        f += "0" === h ? "1" : "0"
                    }
                    var p = parseInt(f, 2);
                    return -(p + 1)
                }
                return e
            },
            parseByte: function(e) {
                if (e < 0) {
                    for (var t = Number(-e), n = t.toString(2), i = n.substr(n.length - 8, 8), r = "", o = 0; o < i.length; o++) {
                        var a = i.substr(o, 1);
                        r += "0" === a ? "1" : "0"
                    }
                    var s = parseInt(r, 2);
                    return (s + 1) % 256
                }
                if (e > 255) {
                    var l = Number(e)
                      , c = l.toString(2);
                    return parseInt(c.substr(c.length - 8, 8), 2)
                }
                return e
            }
        }
          , p = function() {
            "use strict";
            function e() {
                r(this, e),
                this.xBuf = [],
                this.xBufOff = 0,
                this.byteCount = 0,
                this.DIGEST_LENGTH = 32,
                this.v0 = [1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214],
                this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082],
                this.v = new Array(8),
                this.v_ = new Array(8),
                this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                this.X = new Array(68),
                this.xOff = 0,
                this.T_00_15 = 2043430169,
                this.T_16_63 = 2055708042,
                arguments.length > 0 ? this.initDigest(arguments.length <= 0 ? void 0 : arguments[0]) : this.init()
            }
            return a(e, [{
                key: "init",
                value: function() {
                    this.xBuf = new Array(4),
                    this.reset()
                }
            }, {
                key: "initDigest",
                value: function(e) {
                    this.xBuf = [].concat(e.xBuf),
                    this.xBufOff = e.xBufOff,
                    this.byteCount = e.byteCount,
                    d(e.X, 0, this.X, 0, e.X.length),
                    this.xOff = e.xOff,
                    d(e.v, 0, this.v, 0, e.v.length)
                }
            }, {
                key: "getDigestSize",
                value: function() {
                    return this.DIGEST_LENGTH
                }
            }, {
                key: "reset",
                value: function() {
                    this.byteCount = 0,
                    this.xBufOff = 0;
                    for (var e = Object.keys(this.xBuf), t = 0, n = e.length; t < n; t++)
                        this.xBuf[e[t]] = null;
                    d(this.v0, 0, this.v, 0, this.v0.length),
                    this.xOff = 0,
                    d(this.X0, 0, this.X, 0, this.X0.length)
                }
            }, {
                key: "processBlock",
                value: function() {
                    var e, t = this.X, n = new Array(64);
                    for (e = 16; e < 68; e++)
                        t[e] = this.p1(t[e - 16] ^ t[e - 9] ^ this.rotate(t[e - 3], 15)) ^ this.rotate(t[e - 13], 7) ^ t[e - 6];
                    for (e = 0; e < 64; e++)
                        n[e] = t[e] ^ t[e + 4];
                    var i, r, o, a, s, l = this.v, c = this.v_;
                    for (d(l, 0, c, 0, this.v0.length),
                    e = 0; e < 16; e++)
                        s = this.rotate(c[0], 12),
                        i = h.parse(h.parse(s + c[4]) + this.rotate(this.T_00_15, e)),
                        i = this.rotate(i, 7),
                        r = i ^ s,
                        o = h.parse(h.parse(this.ff_00_15(c[0], c[1], c[2]) + c[3]) + r) + n[e],
                        a = h.parse(h.parse(this.gg_00_15(c[4], c[5], c[6]) + c[7]) + i) + t[e],
                        c[3] = c[2],
                        c[2] = this.rotate(c[1], 9),
                        c[1] = c[0],
                        c[0] = o,
                        c[7] = c[6],
                        c[6] = this.rotate(c[5], 19),
                        c[5] = c[4],
                        c[4] = this.p0(a);
                    for (e = 16; e < 64; e++)
                        s = this.rotate(c[0], 12),
                        i = h.parse(h.parse(s + c[4]) + this.rotate(this.T_16_63, e)),
                        i = this.rotate(i, 7),
                        r = i ^ s,
                        o = h.parse(h.parse(this.ff_16_63(c[0], c[1], c[2]) + c[3]) + r) + n[e],
                        a = h.parse(h.parse(this.gg_16_63(c[4], c[5], c[6]) + c[7]) + i) + t[e],
                        c[3] = c[2],
                        c[2] = this.rotate(c[1], 9),
                        c[1] = c[0],
                        c[0] = o,
                        c[7] = c[6],
                        c[6] = this.rotate(c[5], 19),
                        c[5] = c[4],
                        c[4] = this.p0(a);
                    for (e = 0; e < 8; e++)
                        l[e] ^= h.parse(c[e]);
                    this.xOff = 0,
                    d(this.X0, 0, this.X, 0, this.X0.length)
                }
            }, {
                key: "processWord",
                value: function(e, t) {
                    var n = e[t] << 24;
                    n |= (255 & e[++t]) << 16,
                    n |= (255 & e[++t]) << 8,
                    n |= 255 & e[++t],
                    this.X[this.xOff] = n,
                    16 === ++this.xOff && this.processBlock()
                }
            }, {
                key: "processLength",
                value: function(e) {
                    this.xOff > 14 && this.processBlock(),
                    this.X[14] = this.urShiftLong(e, 32),
                    this.X[15] = 4294967295 & e
                }
            }, {
                key: "intToBigEndian",
                value: function(e, t, n) {
                    t[n] = 255 & h.parseByte(this.urShift(e, 24)),
                    t[++n] = 255 & h.parseByte(this.urShift(e, 16)),
                    t[++n] = 255 & h.parseByte(this.urShift(e, 8)),
                    t[++n] = 255 & h.parseByte(e)
                }
            }, {
                key: "doFinal",
                value: function(e, t) {
                    this.finish();
                    for (var n = 0; n < 8; n++)
                        this.intToBigEndian(this.v[n], e, t + 4 * n);
                    return this.reset(),
                    this.DIGEST_LENGTH
                }
            }, {
                key: "update",
                value: function(e) {
                    this.xBuf[this.xBufOff++] = e,
                    this.xBufOff === this.xBuf.length && (this.processWord(this.xBuf, 0),
                    this.xBufOff = 0),
                    this.byteCount++
                }
            }, {
                key: "blockUpdate",
                value: function(e, t, n) {
                    while (0 !== this.xBufOff && n > 0)
                        this.update(e[t]),
                        t++,
                        n--;
                    while (n > this.xBuf.length)
                        this.processWord(e, t),
                        t += this.xBuf.length,
                        n -= this.xBuf.length,
                        this.byteCount += this.xBuf.length;
                    while (n > 0)
                        this.update(e[t]),
                        t++,
                        n--
                }
            }, {
                key: "finish",
                value: function() {
                    var e = this.byteCount << 3;
                    this.update(128);
                    while (0 !== this.xBufOff)
                        this.update(0);
                    this.processLength(e),
                    this.processBlock()
                }
            }, {
                key: "rotate",
                value: function(e, t) {
                    return e << t | this.urShift(e, 32 - t)
                }
            }, {
                key: "p0",
                value: function(e) {
                    return e ^ this.rotate(e, 9) ^ this.rotate(e, 17)
                }
            }, {
                key: "p1",
                value: function(e) {
                    return e ^ this.rotate(e, 15) ^ this.rotate(e, 23)
                }
            }, {
                key: "ff_00_15",
                value: function(e, t, n) {
                    return e ^ t ^ n
                }
            }, {
                key: "ff_16_63",
                value: function(e, t, n) {
                    return e & t | e & n | t & n
                }
            }, {
                key: "gg_00_15",
                value: function(e, t, n) {
                    return e ^ t ^ n
                }
            }, {
                key: "gg_16_63",
                value: function(e, t, n) {
                    return e & t | ~e & n
                }
            }, {
                key: "urShift",
                value: function(e, t) {
                    return (e > h.maxValue || e < h.minValue) && (e = h.parse(e)),
                    e >>> t
                }
            }, {
                key: "urShiftLong",
                value: function(e, t) {
                    var n, i = new u;
                    if (i.fromInt(e),
                    i.signum() >= 0)
                        n = i.shiftRight(t).intValue();
                    else {
                        var r = new u;
                        r.fromInt(2);
                        var o = ~t
                          , a = "";
                        if (o < 0) {
                            for (var s = 64 + o, l = 0; l < s; l++)
                                a += "0";
                            var c = new u;
                            c.fromInt(e >> t);
                            var f = new u("10" + a,2);
                            a = f.toRadix(10);
                            var d = f.add(c);
                            n = d.toRadix(10)
                        } else
                            a = r.shiftLeft(~t).intValue(),
                            n = (e >> t) + a
                    }
                    return n
                }
            }, {
                key: "getZ",
                value: function(e, t, n) {
                    var r = 0;
                    if (n) {
                        if ("string" !== typeof n)
                            throw new Error("sm2: Type of userId Must be String! Receive Type: ".concat(i(n)));
                        if (n.length >= 8192)
                            throw new Error("sm2: The Length of userId Must Less Than 8192! Length: ".concat(n.length));
                        n = f.parseUtf8StringToHex(n),
                        r = 4 * n.length
                    }
                    if (this.update(r >> 8 & 255),
                    this.update(255 & r),
                    n) {
                        var o = f.hexToArray(n);
                        this.blockUpdate(o, 0, o.length)
                    }
                    var a = f.hexToArray(f.leftPad(e.curve.a.toBigInteger().toRadix(16), 64))
                      , s = f.hexToArray(f.leftPad(e.curve.b.toBigInteger().toRadix(16), 64))
                      , l = f.hexToArray(f.leftPad(e.getX().toBigInteger().toRadix(16), 64))
                      , c = f.hexToArray(f.leftPad(e.getY().toBigInteger().toRadix(16), 64))
                      , u = f.hexToArray(t.substr(0, 64))
                      , d = f.hexToArray(t.substr(64, 64));
                    this.blockUpdate(a, 0, a.length),
                    this.blockUpdate(s, 0, s.length),
                    this.blockUpdate(l, 0, l.length),
                    this.blockUpdate(c, 0, c.length),
                    this.blockUpdate(u, 0, u.length),
                    this.blockUpdate(d, 0, d.length);
                    var h = new Array(this.getDigestSize());
                    return this.doFinal(h, 0),
                    h
                }
            }]),
            e
        }();
        e.exports = p
    },
    ad6e: function(e, t, n) {
        var i = n("f33e")
          , r = i.BigInteger
          , o = i.SecureRandom
          , a = n("4692")
          , s = a.ECCurveFp
          , l = new o
          , c = p()
          , u = c.curve
          , f = c.G
          , d = c.n;
        function h() {
            return u
        }
        function p() {
            var e = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",16)
              , t = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",16)
              , n = new r("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",16)
              , i = new s(e,t,n)
              , o = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7"
              , a = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
              , l = i.decodePointHex("04" + o + a)
              , c = new r("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",16);
            return {
                curve: i,
                G: l,
                n: c
            }
        }
        function g() {
            var e = new r(d.bitLength(),l).mod(d.subtract(r.ONE)).add(r.ONE)
              , t = v(e.toString(16), 64)
              , n = f.multiply(e)
              , i = v(n.getX().toBigInteger().toString(16), 64)
              , o = v(n.getY().toBigInteger().toString(16), 64)
              , a = "04" + i + o;
            return {
                privateKey: t,
                publicKey: a
            }
        }
        function b(e) {
            e = unescape(encodeURIComponent(e));
            for (var t = e.length, n = [], i = 0; i < t; i++)
                n[i >>> 2] |= (255 & e.charCodeAt(i)) << 24 - i % 4 * 8;
            for (var r = [], o = 0; o < t; o++) {
                var a = n[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                r.push((a >>> 4).toString(16)),
                r.push((15 & a).toString(16))
            }
            return r.join("")
        }
        function m(e) {
            return Array.prototype.map.call(new Uint8Array(e), (function(e) {
                return ("00" + e.toString(16)).slice(-2)
            }
            )).join("")
        }
        function v(e, t) {
            return e.length >= t ? e : new Array(t - e.length + 1).join("0") + e
        }
        function j(e) {
            for (var t = [], n = 0, i = 0; i < 2 * e.length; i += 2)
                t[i >>> 3] |= parseInt(e[n], 10) << 24 - i % 8 * 4,
                n++;
            for (var r = [], o = 0; o < e.length; o++) {
                var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                r.push((a >>> 4).toString(16)),
                r.push((15 & a).toString(16))
            }
            return r.join("")
        }
        function A(e) {
            for (var t = [], n = 0, i = 0; i < 2 * e.length; i += 2)
                t[i >>> 3] |= parseInt(e[n], 10) << 24 - i % 8 * 4,
                n++;
            try {
                for (var r = [], o = 0; o < e.length; o++) {
                    var a = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                    r.push(String.fromCharCode(a))
                }
                return decodeURIComponent(escape(r.join("")))
            } catch (s) {
                throw new Error("Malformed UTF-8 data")
            }
        }
        function k(e) {
            var t = []
              , n = e.length;
            n % 2 !== 0 && (e = v(e, n + 1)),
            n = e.length;
            for (var i = 0; i < n; i += 2)
                t.push(parseInt(e.substr(i, 2), 16));
            return t
        }
        e.exports = {
            getGlobalCurve: h,
            generateEcparam: p,
            generateKeyPairHex: g,
            parseUtf8StringToHex: b,
            parseArrayBufferToHex: m,
            leftPad: v,
            arrayToHex: j,
            arrayToUtf8: A,
            hexToArray: k
        }
    },
    4692: function(e, t, n) {
        function i(e) {
            return i = "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
            }
            ,
            i(e)
        }
        function r(e, t) {
            if (!(e instanceof t))
                throw new TypeError("Cannot call a class as a function")
        }
        function o(e, t) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n];
                i.enumerable = i.enumerable || !1,
                i.configurable = !0,
                "value"in i && (i.writable = !0),
                Object.defineProperty(e, s(i.key), i)
            }
        }
        function a(e, t, n) {
            return t && o(e.prototype, t),
            n && o(e, n),
            Object.defineProperty(e, "prototype", {
                writable: !1
            }),
            e
        }
        function s(e) {
            var t = l(e, "string");
            return "symbol" === i(t) ? t : String(t)
        }
        function l(e, t) {
            if ("object" !== i(e) || null === e)
                return e;
            var n = e[Symbol.toPrimitive];
            if (void 0 !== n) {
                var r = n.call(e, t || "default");
                if ("object" !== i(r))
                    return r;
                throw new TypeError("@@toPrimitive must return a primitive value.")
            }
            return ("string" === t ? String : Number)(e)
        }
        var c = n("f33e")
          , u = c.BigInteger
          , f = new u("3")
          , d = function() {
            "use strict";
            function e(t, n) {
                r(this, e),
                this.x = n,
                this.q = t
            }
            return a(e, [{
                key: "equals",
                value: function(e) {
                    return e === this || this.q.equals(e.q) && this.x.equals(e.x)
                }
            }, {
                key: "toBigInteger",
                value: function() {
                    return this.x
                }
            }, {
                key: "negate",
                value: function() {
                    return new e(this.q,this.x.negate().mod(this.q))
                }
            }, {
                key: "add",
                value: function(t) {
                    return new e(this.q,this.x.add(t.toBigInteger()).mod(this.q))
                }
            }, {
                key: "subtract",
                value: function(t) {
                    return new e(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))
                }
            }, {
                key: "multiply",
                value: function(t) {
                    return new e(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))
                }
            }, {
                key: "divide",
                value: function(t) {
                    return new e(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))
                }
            }, {
                key: "square",
                value: function() {
                    return new e(this.q,this.x.square().mod(this.q))
                }
            }]),
            e
        }()
          , h = function() {
            "use strict";
            function e(t, n, i, o) {
                r(this, e),
                this.curve = t,
                this.x = n,
                this.y = i,
                this.z = null == o ? u.ONE : o,
                this.zinv = null
            }
            return a(e, [{
                key: "getX",
                value: function() {
                    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))
                }
            }, {
                key: "getY",
                value: function() {
                    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))
                }
            }, {
                key: "equals",
                value: function(e) {
                    if (e === this)
                        return !0;
                    if (this.isInfinity())
                        return e.isInfinity();
                    if (e.isInfinity())
                        return this.isInfinity();
                    var t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q);
                    if (!t.equals(u.ZERO))
                        return !1;
                    var n = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);
                    return n.equals(u.ZERO)
                }
            }, {
                key: "isInfinity",
                value: function() {
                    return null === this.x && null === this.y || this.z.equals(u.ZERO) && !this.y.toBigInteger().equals(u.ZERO)
                }
            }, {
                key: "negate",
                value: function() {
                    return new e(this.curve,this.x,this.y.negate(),this.z)
                }
            }, {
                key: "add",
                value: function(t) {
                    if (this.isInfinity())
                        return t;
                    if (t.isInfinity())
                        return this;
                    var n = this.x.toBigInteger()
                      , i = this.y.toBigInteger()
                      , r = this.z
                      , o = t.x.toBigInteger()
                      , a = t.y.toBigInteger()
                      , s = t.z
                      , l = this.curve.q
                      , c = n.multiply(s).mod(l)
                      , f = o.multiply(r).mod(l)
                      , d = c.subtract(f)
                      , h = i.multiply(s).mod(l)
                      , p = a.multiply(r).mod(l)
                      , g = h.subtract(p);
                    if (u.ZERO.equals(d))
                        return u.ZERO.equals(g) ? this.twice() : this.curve.infinity;
                    var b = c.add(f)
                      , m = r.multiply(s).mod(l)
                      , v = d.square().mod(l)
                      , j = d.multiply(v).mod(l)
                      , A = m.multiply(g.square()).subtract(b.multiply(v)).mod(l)
                      , k = d.multiply(A).mod(l)
                      , x = g.multiply(v.multiply(c).subtract(A)).subtract(h.multiply(j)).mod(l)
                      , y = j.multiply(m).mod(l);
                    return new e(this.curve,this.curve.fromBigInteger(k),this.curve.fromBigInteger(x),y)
                }
            }, {
                key: "twice",
                value: function() {
                    if (this.isInfinity())
                        return this;
                    if (!this.y.toBigInteger().signum())
                        return this.curve.infinity;
                    var t = this.x.toBigInteger()
                      , n = this.y.toBigInteger()
                      , i = this.z
                      , r = this.curve.q
                      , o = this.curve.a.toBigInteger()
                      , a = t.square().multiply(f).add(o.multiply(i.square())).mod(r)
                      , s = n.shiftLeft(1).multiply(i).mod(r)
                      , l = n.square().mod(r)
                      , c = l.multiply(t).multiply(i).mod(r)
                      , u = s.square().mod(r)
                      , d = a.square().subtract(c.shiftLeft(3)).mod(r)
                      , h = s.multiply(d).mod(r)
                      , p = a.multiply(c.shiftLeft(2).subtract(d)).subtract(u.shiftLeft(1).multiply(l)).mod(r)
                      , g = s.multiply(u).mod(r);
                    return new e(this.curve,this.curve.fromBigInteger(h),this.curve.fromBigInteger(p),g)
                }
            }, {
                key: "multiply",
                value: function(e) {
                    if (this.isInfinity())
                        return this;
                    if (!e.signum())
                        return this.curve.infinity;
                    for (var t = e.multiply(f), n = this.negate(), i = this, r = t.bitLength() - 2; r > 0; r--) {
                        i = i.twice();
                        var o = t.testBit(r)
                          , a = e.testBit(r);
                        o !== a && (i = i.add(o ? this : n))
                    }
                    return i
                }
            }]),
            e
        }()
          , p = function() {
            "use strict";
            function e(t, n, i) {
                r(this, e),
                this.q = t,
                this.a = this.fromBigInteger(n),
                this.b = this.fromBigInteger(i),
                this.infinity = new h(this,null,null)
            }
            return a(e, [{
                key: "equals",
                value: function(e) {
                    return e === this || this.q.equals(e.q) && this.a.equals(e.a) && this.b.equals(e.b)
                }
            }, {
                key: "fromBigInteger",
                value: function(e) {
                    return new d(this.q,e)
                }
            }, {
                key: "decodePointHex",
                value: function(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
                          , n = e.substr(2, t)
                          , i = e.substr(t + 2, t);
                        return new h(this,this.fromBigInteger(new u(n,16)),this.fromBigInteger(new u(i,16)));
                    default:
                        return null
                    }
                }
            }]),
            e
        }();
        e.exports = {
            ECPointFp: h,
            ECCurveFp: p
        }
    },
    a511: function(e, t, n) {
        function i(e) {
            return i = "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
            }
            ,
            i(e)
        }
        function r(e, t) {
            if (!(e instanceof t))
                throw new TypeError("Cannot call a class as a function")
        }
        function o(e, t) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n];
                i.enumerable = i.enumerable || !1,
                i.configurable = !0,
                "value"in i && (i.writable = !0),
                Object.defineProperty(e, s(i.key), i)
            }
        }
        function a(e, t, n) {
            return t && o(e.prototype, t),
            n && o(e, n),
            Object.defineProperty(e, "prototype", {
                writable: !1
            }),
            e
        }
        function s(e) {
            var t = l(e, "string");
            return "symbol" === i(t) ? t : String(t)
        }
        function l(e, t) {
            if ("object" !== i(e) || null === e)
                return e;
            var n = e[Symbol.toPrimitive];
            if (void 0 !== n) {
                var r = n.call(e, t || "default");
                if ("object" !== i(r))
                    return r;
                throw new TypeError("@@toPrimitive must return a primitive value.")
            }
            return ("string" === t ? String : Number)(e)
        }
        var c = n("f33e")
          , u = c.BigInteger
          , f = n("cd73")
          , d = n("ad6e")
          , h = function() {
            "use strict";
            function e() {
                r(this, e),
                this.ct = 1,
                this.p2 = null,
                this.sm3keybase = null,
                this.sm3c3 = null,
                this.key = new Array(32),
                this.keyOff = 0
            }
            return a(e, [{
                key: "reset",
                value: function() {
                    this.sm3keybase = new f,
                    this.sm3c3 = new f;
                    var e = d.hexToArray(d.leftPad(this.p2.getX().toBigInteger().toRadix(16), 64))
                      , t = d.hexToArray(d.leftPad(this.p2.getY().toBigInteger().toRadix(16), 64));
                    this.sm3keybase.blockUpdate(e, 0, e.length),
                    this.sm3c3.blockUpdate(e, 0, e.length),
                    this.sm3keybase.blockUpdate(t, 0, t.length),
                    this.ct = 1,
                    this.nextKey()
                }
            }, {
                key: "nextKey",
                value: function() {
                    var e = new f(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++
                }
            }, {
                key: "initEncipher",
                value: function(e) {
                    var t = d.generateKeyPairHex()
                      , n = new u(t.privateKey,16)
                      , i = t.publicKey;
                    return this.p2 = e.multiply(n),
                    this.reset(),
                    i.length > 128 && (i = i.substr(i.length - 128)),
                    i
                }
            }, {
                key: "encryptBlock",
                value: 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] ^= 255 & this.key[this.keyOff++]
                }
            }, {
                key: "initDecipher",
                value: function(e, t) {
                    this.p2 = t.multiply(e),
                    this.reset()
                }
            }, {
                key: "decryptBlock",
                value: function(e) {
                    for (var t = 0; t < e.length; t++)
                        this.keyOff === this.key.length && this.nextKey(),
                        e[t] ^= 255 & this.key[this.keyOff++];
                    this.sm3c3.blockUpdate(e, 0, e.length)
                }
            }, {
                key: "doFinal",
                value: function(e) {
                    var t = d.hexToArray(d.leftPad(this.p2.getY().toBigInteger().toRadix(16), 64));
                    this.sm3c3.blockUpdate(t, 0, t.length),
                    this.sm3c3.doFinal(e, 0),
                    this.reset()
                }
            }, {
                key: "createPoint",
                value: function(e, t) {
                    var n = "04" + e + t
                      , i = d.getGlobalCurve().decodePointHex(n);
                    return i
                }
            }]),
            e
        }();
        e.exports = h
    },

})

var O = xxxx(5044).sm4;
var t ={
    "appcode": "460000010"
}
var o = "hjikY0WSw6r6rHPS"
var encData = O.encrypt(JSON.stringify(t), O.utf8ToArray(O.encrypt(o, O.utf8ToArray("4600000100000000")).toUpperCase().slice(0, 16)));
console.log("请求体参数:",encData)


var encData = '95763D6E58EAEB6B427E63D6A6FF61665780C4459B04149AA9321B236E4FAC05FC426F2D01B85D90ADD7081CAFAFCEF065DF17D1A5FAE7C11CBD7B31E0BD94897598928782206AB4958121794324D99C65C7A6FC495E5B489138B7A7CCC938D02DB9F1EDD35D6EFA0850341C3D5433911A05B0D0F7D18E3C66B83C8BA80427F7C85E72724A4089CEBC7E7F0EF44FE7F2D6D9D29F68BF2EA718D543696375D5090F2F435033EB8DEFF785D4D458FD79324F893E5FF7EFB8DFE93546F75FCF56905268B2820F0229BE8F3FB30F4477E5E32DB8CC0F8DCBC12C153B0AA40821B9730AC9F4BE197121DDE251C0B7B043E08E3FDA165FD26E724C462058763B65219DC5F77B88F0BB20D00B83B5D7CBC470EE0439090CC1971270864FA0C25CF88F03D7F5078A242DF8923FB8069F8B5FDE9E1B7CA60E327E5BDBE3E149A3A213858E6BA8AC8B619D2670C3D3CBA3A75D3B6A5B3437435DB95FBC4766C1D4D25750F0543A5969E2AE4DF12348A355E0FB23958B09D368E5D4A31FEC30841002682ABD7A64D55FF20467D9CE7DCD600877376FE2927DC03BAAAF8CD47B431799294DBA9CFE2151142D71DBD5A607E9C455C2BEEBC30BF8402004DB09ACFFA9AAED94786F7FD7F89868E9C22897E11A1ADE43E18F03018D27B7B906A46E378C30EE3F0648D84E90ECE491F75989ECE141E5EF76EEFADDB9E6AC68904D6C1E9248A73AD944ABF1A4E7DA5BF2EB4C40EA2D851E2D68A910F4F08C39AC74AAD43974F3C6EFDD09590CC2ADF48E426DA3F9E0A8723C428FB0659985E65D9241FF72FE1CFCC149DD6C9DBEBCFD3496895EC08BFD2BD1D168281807802CE00ADE5913F0B334E248D25474E8DDDA3242AC255230560F7A739588228BDD515949F24DBDF6DC58DB7E0C9286F671DF8D1A5193E028BDBA378CE9DFE6B75C2365CBC63A5B0C44D997B1F01BFC37A9E08ECF95BD21FE3DFBAE168B804AB47D35F5B28D30ED37BE4DDE9ED3490108F71929C973D9EB09DB19B8DC44BBBE6847BBD71DE9A158C1A1A48B00F275339A79BAF4A3682642105136E03EC30D8A7A652851FDBE36A5E8E705DFF63248A4AE15C4D349AD5EBC67DC4CE4BDBFE47CDD326C9D3FA24F4F57053045F386B2100C26739DF5F3A48BB657EF814CEA104AE0D0633164AFFC3AD76D530BC9BBFD1ED52111583C4A5DACDFD435C4302B1B7E140DF423665242B1701E47E88D772D8FC4D6B1BCC1F2DD7C0F77E913C0B5BB29701ACF6670F96DF798146E90A787787C8BC6FA9FB2100AAA87AEDA367654715A225083213AA4952486103E88B1F01BFC37A9E08ECF95BD21FE3DFBAE42F8736E139709ECE292A5691C4D0215152989BB3B700AB36E079037DD83C1EEC1241072C7A8796673B5A3859F24D9533C2DC3B81077155B9EA2BA4AA05DCA94F2537004AB52D479BAD61862DD81144EC32B7974D26E1B97888864FCC6C249B48F9F169B2BA016D3994435A70A5798CBC6DA7942C44C00E302C05C8E7BFCA4EA312101C0C0BE0B1F62A6D89CD6EB397CE620E0A22C6AAFF0C794EC44E830E6BCD4F045130B3D88A40C906B63516790DF5903EACCEF14E7DB4CA39D5188FBDFCC8AB8F8A820F7961C77B334CA9E3FD0100797DCE01B1519079AC5247E16D96A75D52C1DD762675F9C9C91AD9B532B4CB8978EE3E2B82AA749AB501218A84D25E27E4A597648F38960D2108AEE276C88AE4CA6453CE96FDB9C6BBACBB6FC53A00809ED1BCD0CD13A333490815A31B7820D02BC3A9ADBD99079AB2629051EF1102495698EB79A2576FEDB96AD2378AE26BDC70FE4C9AA44B302C25C9BB2647B6863C26F70B57B1E927951B582DE1C7D2E15E9BD14278150F3FD40AD0FEE2DC95D8645DA8CC3197BC140C72F0CBEE1D0C1495AF137E75E1C6B6423575C87363C3795FDCE9ADCB5B085971E41E9C30F69B304E1AC3796AE5EAD9648E8118D50F61BDB2D598242F9922B7EDEF343093605C4695D7A832B0C15F057DBC7C7DDA09D18FA71DEA8BD25E4090B8151DFA011263FECB1F01BFC37A9E08ECF95BD21FE3DFBAE131F32BD0F61495AB8D9CDF085D624CD9E26540166B795075C9B3B0E3DF913BD60828E28E8E851BD487F82840CAB655AE3BDCC17FEA5FB2BF06098900DCE698D2634C85C19F253C1F0C7ABFBFC6945187D01D735B2F09B54A092CE95CB039BC8941484DE3F639B96A02C7F6CCFB64C19E3BDCC17FEA5FB2BF06098900DCE698DE6834EF8F928A6435DECC2BDEB3543598D772D8FC4D6B1BCC1F2DD7C0F77E9134EFE9D14378C0508CB044CA95B1CECCEEA7D31B1A4FE31E0E50DE579453010E27AAAFF710F66DB02A78E91E65740B2E38CEBA9A60E6BB3763E9C850EE9835373DDA121AA3C888925C96584E8DAB3173010B051B3AA479A792352E1D7F6773487703447037B54015DF876D18E3CE0E4772AD9E1FD5D16BF001EE31B03AD0B1C10CEA40C28AE6A39C62DDB405612683E65727EEAC010904108ABF29448198E13C882C5DA9D79E15E85BCCCD5059B2B48F1FB891E7872EFF19CFED2FC396CF9E2781A4A10713048131CE1C91ADC343ECB08BFD0781FE93569DB3DAFC3DC7011EEA7A3D8468A0ACF67DF0EDF5DFE3FE0D551168AB4935947F531478E5728F3302ED4A671DB1C389983DC72A5E0F6EE47DC4F45DDF4CC00302096788B9725B50CA08A06128DA309B0E39D9EF6E80D220BABF1C6FF8A6DDC36232F55B4830D958794662E927009ED5D11CC0EC6187EFF036BEAEBB6EEE31D390EE4FA9C9D24F94155AAEFE21C461D794D40E2328BCA446209FFD5FB63F19A2C8699E79C61AD0A1DEAA6B54852CDFD1F46CEEF387B46C3D3207F7A8B96396A96702C70FC2ED03D0C42FC053C7BACB5837874FA8989ABCAF050145E5493F4E654FF619DEF8C9C36041237272CD0A49542CF08DEA3F596C6AE40AAFD5D544CEBCA947CAD73A139796C2EA8B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBAC42ACB1859D2C6A81BBC18D71C234520BE4697E8169E860F084B0ACEEE4DC7C58D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913E9EE22CDD1954AC6CBF1CDCD7E3F31436AB91DB86CBA9339568684BD5CCAE34DEA151EF20E7988AF61233EAB9121D7C900F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08F0674BFF3D7EA8DB1BEA68C004C95FBE5598FCFAC2F1EB969B1F4DAEF63866916FA89AD8A3F6C9AD3DA6C8632F665E83869A1E1BD0A1CD7242E9B9002E8290DCFA689D7DA17FE97C39E7F9E19BA9622CEFB2CFBA724719C55FCB9540AE858DD1C02E8CF1464B6AABE293F8C5F4C730C59BB44FBF9E22900C974BE63542205182442B7DE69281F31C265E8C9DD7A9B2EEBF036C0F039565CF9F612946D282F5BA1FF26B05F290544060BC5B205E639C9E58BF8ACB12B7FDBCD360632AE398F7B7C59F0B87274A7E5F6D03960825641022C2F5F9D9DD799BD2CFDEEB887FA72AE76DB8775059A162E84C4449EB6CD2785570C46B3850932F2758595C446FC1590B0C5CDF0ED930FD25ABBC1736C19D339CC11DE169EB3AE135D7E930D289C957A08697F4BC3E6DD2B0FEAF540997E3CF5F03F5CD63522526C91F8BD1924841C706E9C413CDDDB29E1280838C22A14864BE68462B87A02D642667CA4D9AE439EBA654C6C0395B032B5FF8FEACA5EE6E67A43025D6DB88CB22DC59831613667ECB13303D76F0E456E4B605D62F9D8C5ED7F17E123EAEBE1B5A4ABD1A772FF97082FDCEAF650178441236669D952E64C91B2F4E8E0B56BEF0F7CB7D338EE309803C9C4C94894C511AC51428F997B9FEF77CC9EBFBE94AB18A3AC3DF25851121E91D644EBE64526C32B5C5BC3178DC9CFB8A9228ECE4A15A8C61EE6CC3AB85B9EA0CD09B71688AB2417EEE6AC1B86F2CD45F4B00926CC7D9E00D4B9F6F01CA39B34546AF87098C9B2C668014BF07D24849029E7FE548833FD74EC251E691C38F6BA5E6524E611307BE35568746758F45773F6F655161E3DCA944F4918E0607B9B0DEE9385CB61D4524DF2EC7B186F553171295495FD8A1D3BE298540B9B754F33B9180B1FF3011D51AA4607E7E6C392678A8C81E6A19D3FEA87F1EF63D0E86D028E8C696FCEEB3A93E0885D50E8411EC075A1598F43FB40B8C226695901CD27CB0FDA4417AD2E31216DED6BA2ABED1728D71E0EED8E9DCD8985041344F26B062CD529E95F931B4C4558BA92D33567B6A8844DD3825672CB8D5174BDF72715B0BA7966258B31D97870724CA602C415FF15EC8E5EA1A41E109EC3A8611504494F83B90C60D291D8B62F0BF079DE05FD599A5895527DE0FE7269170C522B1C58083124AE9B4D46BD446F827FD2C69EA90DD3B127B8D3DD75D05B99379884C3D126314EB21F37870EAF83AD02D7B2888AA4081ECECA3ED4B88868DB6B70EC8B770F5293A3F699216D966527A50E6464692F2BB4D6918BC5392F97C9E819DE73C295F1C1C3B1C9D77DC5BFFBE2B14CFE92870647B784BA812CD57B02BED87B30AE2D888EB00C0A680ADDA59651CFA6DF35FAF72B38BE4E82F3F4DFC9B71CF64294EF942228A9A36B2DBF6BE3D1CC1499C3C08BAA958EC0116A1C2FAD93F7DC86D6B237EEBCB4044A376E2E13450A6510F752820651EC73B3C0752477AA40F23CF89EA0439480529C68DA4727C6033A08BA9080CAB7F4FB021FD902BACD322B30C6528E9E6DF79E034467ACC9B0D2BBA1B494BA965525C2CD446A0CE27D9758C528F14BF04AA81EEB3AEA549C0056E9E863668AD2C939784B3A6A8200F32D07880D3D3B95ED58A0BBF7FE138C2BB71619D78DD1961270651DE7BDFCB4F26C7AB3A216BF3DA3E424A386D849FAE5BEF791FC14876489AD6D81DAC855ABBC555548ED41DAE559E3C2AC0139D1A9CE33FE3D2058EBBB5C6385EE45DDFCD6E6BD52A35EB7B5A5BBF058048F89295E887711729CD20494B079AEB922BCD7B456EF0B2BA0C58BECD9EE692A0548F5840E676526CEFCF9AAE9C26C89E98D2E920E99800D913AA8BCB2B6EC01B31486D195D6EE9598690DE22BBAD019559A5FF4DB386183E27185DA58D18FD3877486D647873F97421CC0627CC16ED7DD43DD8C120A61E03EBE5655588EAAB69A87A251F4E1CD4C5999347DA1593E58CD3A2359EA6945920D203771C2C28647682DE7B6F2BB607486FDA03CC7D5CDA2DC3A16DD643F38C17A437BC94659252D0AADE22495FAAE62C8D4ABBE0DB8B85D6BCA8109D62DE46B0FF4980F96172396EA8F557B101AAB14C347668580294FB2DB65C4F830F96F22B22DCBE4C4DEC9DC0ABB5BBE6F67E65C7E6D2FBD36050A9C18E181F5B493DF8D96BAE2AF1596FF4596061665CDF9195764404F85956141603D9A61B19918C1AD184744B0C7C0A2F9DA27A79FE06A3FD2001A12C3B0F32E43CA3BD4060009B61D00CB330C4DE95F931B4C4558BA92D33567B6A8844DD3825672CB8D5174BDF72715B0BA7966A4DB2A566E38DBFBE1871EE9C8B0D9D9DDB72723EB90CCCEE097A764B91EA6D3D0648592CEF1EF0A9CA7E230C9717A92B74B680CBAA24350C9623536E31E3E5768BE3ECA42B1FD512D73EDA704FA7B44D386FEA8F17439890D7350909A95F6AAD430EB13F6B434EF1C1D53592AEF460DE631A31C22917E49592961BD726F5FF0ADE39523C9BAD67F89DED1C82E211EB4851C9FF7819E3ECD5755477305C061364CC2B0AFA43E80422516180EC6E22ECDE02B76A9E0152D2CE2A3F51E23924512973FB3F42CCD643DBED9DA871AA72C47C59C282EBB74C4DE4A0331B70B778ACC36BD6A71FDADD88D50E5AAF527FCAC76F52EA8E9B63FB3FE0D30B4F6392F28B16CB90F9D44EF5076DFF812AB887A57DAB53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F95F2CB1D0C082E408857C0AB5FB9B11FB9C5804B1F2971236427EAAAB232779AC20343FE559790C88D3EE3DA4752F62B98FC89C42729043692D6BE50522B81A7AC8C4C4921DA067754140DDA4A141AC1F6FF9F6476E57ECBC64189051FC48D0A23408C5F04C3E06BC39A00B98D926D07EEAD0783B44BCF54ADBD6FBBB57F9AFDA2F547397A3A4C2B1EA6A083A506682DFBD79E0CD2B75291A09AE2436F789BA9DA5BD40053A92069F9D1FCD1837E1F58EC0116A1C2FAD93F7DC86D6B237EEBCB4044A376E2E13450A6510F752820651EC73B3C0752477AA40F23CF89EA0439480529C68DA4727C6033A08BA9080CAB7F4FB021FD902BACD322B30C6528E9E6DF79E034467ACC9B0D2BBA1B494BA96553E925A7793230CBF483E4E48C99C8F0284BA812CD57B02BED87B30AE2D888EB00C0A680ADDA59651CFA6DF35FAF72B3820CE994CFF0345080168B33DB5B16A47325DECE835E5975AD7AB80EA4884C94E38249B6665C6184D53392E2B51AAEFF28C51F0C05EFC6929D20828F972E8F732C61992B33AA8510A028A85B713F107E84FB0BE67A738CC62D0A55314832BDC852FF87B7EC9A6C139258384C3F5BE49A6E545AE2B744E22BCDD1ED9B0302F09C8DED3ABF2FC9C9EE0AE2139FD96C3229BD2C170674FD43E2B79B64D3B163A2837B5E78167776B9EEA0E56BEC3938D323B99B2338F6634A7957ACE927C92A9D2C9325DECE835E5975AD7AB80EA4884C94E38249B6665C6184D53392E2B51AAEFF28C51F0C05EFC6929D20828F972E8F732C61992B33AA8510A028A85B713F107E84FB0BE67A738CC62D0A55314832BDC852FF87B7EC9A6C139258384C3F5BE49A668BFE8ECE1916EC7B74A416715EC670B727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913727EEAC010904108ABF29448198E13C800F275339A79BAF4A3682642105136E08D772D8FC4D6B1BCC1F2DD7C0F77E913E9EE22CDD1954AC6CBF1CDCD7E3F31436AB91DB86CBA9339568684BD5CCAE34DD8766977A6F0BD0CA7A5D48C7F85E6C2B5657C7FB46C371A93D3723C385316429378B4AF7E5CA41B093BAA22734D1596D38AEB1361CB457D59B212F99FDD1A917FED0E9B62FC917D4AF94B7E0C55E572305D35E1B2A58524C5A8C249F1D8CC33775F070273165A2E18C264E3A10AA63264E68CA8EB53AFC3528BF0C465A53E43B2C599EFAD9EB842CFC84BDC63385443FD12746E1682B0D7B29F3173C5F6F20B5AA04D337D5726FD128C9B685D4F6A8E8512FCD26977650A148C896538FE5A1C6C9FDC236069B12958EF3C752CEDF3B3B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBA0F2F435033EB8DEFF785D4D458FD7932B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBA0F2F435033EB8DEFF785D4D458FD7932B1F01BFC37A9E08ECF95BD21FE3DFBAE1321D7B4633F0A486D296A7467E02FBAF943DBEC8C1EC45BE2C38DE6AAFE3E0BE19AB70FFCFDD166A2F61F4EBBAAC15B2187BE43273558C05DC3918D31538CF12C8F3460F6A2422F74A4A397AFA7728DA2FFD192844A4D69CDA5CC3F47AFFAD4544F0A3FF3F9C50F27037CFE876CA25F36BD6A71FDADD88D50E5AAF527FCAC76F52EA8E9B63FB3FE0D30B4F6392F28B16CB90F9D44EF5076DFF812AB887A57DAB53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F564F08CAD35CF49F549F13D3B93D2FFCBC8E84283AF9BACB8475D15EC8607151D07B7510A590D3E18B98E7693A94449EA42A825DF40764525446C38CC9D4267C1923C60BD9EFC104B96AF79AE7963FD8CD208EDAC7D380C766077DFD7D25E81CF5BB37B838FE9562524C37FEF52E6F5E1F818EAD6F540C23DB6B200CD629968E0625625F9C63A482B6EC29B915B508462E1978AA335C482CC60661364D27511B53F6EF74DD7434C1081E1475530066478C106ED20701D79E74987E887279016F95F2CB1D0C082E408857C0AB5FB9B113D23E1EAD4AF1EE6AC2581A76C18101D964B9252432F6A26C1FF5FD0333EA4FFC1648E58233965CF6904F951A90C96ACDB692F26F46F67AA4D9386DDE405CA7B3A9D0DB827278845AC6DA7BAE3CE89752C74F47DCD535B33540367F28246D3ADAC39FB82DC4E7D900E8D566F77FE9C493716E82F854FF3C235D9A001EAA892D056BCBF70D6116724B947EBB905D58B4353CF1379A27B8480D913D134BD38DCB69590F362EBE2C0B9ADE1467DBBDAF360406DE25FB6DD283140C57F5913AD2E8D593E58CD3A2359EA6945920D203771C21CCE62B6F8184402351EED636A5AA60E80EE9DAC7542FC0B9758F3694E98F3D71A1B909063ECD60FEBA554AF5A70F4F6530F630A16E363C5FE22899CBBF2BB04D65CABEBA8B99DB9A57AA4A0E653C119'
var decryptData = O.decrypt(encData, O.utf8ToArray(O.encrypt(o, O.utf8ToArray("4600000100000000")).toUpperCase().slice(0, 16)));
console.log("响应数据解密:",decryptData)

标签:function,逆向,return,js,length,&&,服务平台,var,prototype
From: https://blog.51cto.com/u_16330819/8761591

相关文章

  • wordpress整合 Prism.js实现代码高亮 切图网自用
    Prism.js是一个简约漂亮的代码高亮插件,就冲简单好用就值得一用,如何把它整合到wordpress,附代码,也是切图网自己再用的。代码添加到主题的functions.php中//自定义代码高亮按钮functionappthemes_add_quicktags(){if(wp_script_is('quicktags')){?><s......
  • Java基于云端的云HIS服务平台源码
    云HIS是针对中小医疗机构推出的一套基于云端的云HIS服务平台,借助云his,将医院业务流程化,大大提高医院的服务效率和服务质量,为客户提供医院一体化的信息解决方案。云his主要功能:包含门诊收费管理,住院收费管理,门诊医生工作站,住院医生工作站,住院护士工作站,辅助检查科室管理,药房药品管......
  • A sample of JSON RPC service
    ThisisasampleserviceprogramwhichshowhowtoimplementaJSONRPC.TheRPCserviceincludedtwofunctionswhichusedforRSAsignandverify.Ifyouwanttobuildthesourcecode,youneedinstallorbuildthreeopensorucelibraries:Libevent,cJSON......
  • Vue学习之node.js环境下利用Vue-cli脚手架搭建Vue项目
    目录第一个Vue-cli应用什么是vue-cli?vue-cli主要功能:搭建需要的环境1、nvm-windows下载2、安装nvm3、修改nvm环境变量4、通过nvm安装node5、安装全局npm6、一些替代npm的方式安装vue-cli第一个脚手项目配置命令行运行Vue项目IDEA运行Vue项目第一个Vue-cli应用之前练习了Vue一些......
  • Mybatis使用generator逆向工程生成器生成entity、mapper、.xml模版类
    前言今天将表建好了,但是一个一个的建实体类、Mapper接口、Mapper.xml文件就十分的麻烦,所以我就想到了MyBatis逆向,今天就操作一把!这里我们采用maven来进行操作。一、新建generatorConfig.xml文件首先建好表,在你的项目的resource文件中新建generatorConfig.xml文件。代码如下:<?xmlv......
  • Js判断数组中是否存在某个元素
    ......
  • Spring Boot学习随笔- 集成JSP模板(配置视图解析器)、整合Mybatis(@MapperScan注解的使用
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第五章、JSP模板集成5.1引入JSP依赖<!--引入jsp解析依赖--><!--C标签库--><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></depen......
  • 【Python爬虫案例】抖音下载视频+X-Bogus参数JS逆向分析
    接口分析获取接口地址选择自己感兴趣的抖音博主,本次以“经典老歌【车载U盘】”为例每次请求的页面会有很多接口,需要对接口进行筛选:第一步筛选XHR筛选第二步筛选URL中带有post通过筛选play_add值找到视频的地址分析请求头通过对比两次请求发现只有X-Bogus数值会有变化,m......
  • 动手实现基于 JSON 和 OData 两种数据模型的 Web 应用表格控件行项目的添加和删除
    文章标题描述的需求是笔者在工作和网络上经常收到的前端开发领域的咨询话题之一。Web应用的表格控件,在切换到编辑模式下之后,给用户提供了行项目的添加和删除功能。基于MVC和MVVM框架的前端控件,都离不开Model即数据模型层。笔者工作中使用最多的模型层实现技术,即JSON模型......
  • 基于微信小程序社区老年人健康医疗信息服务平台设计与实现
    作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享收藏点赞不迷路 关注作者有好处文末获得源码 项目编号:BS-XCX-023一,环境介绍语言环境:Java: jdk1.8数据库:M......