Newer
Older
thirdparty / src / main / resources / templates / js / microdoneH5改之后_20201231_bak.js
steven on 10 Oct 454 KB 1。前端密码控件
/********************************************************************/
/*                                                                  */
/*  Copyright (c) 2014 Genesis Mobile                               */
/*                                                                  */
/*  This obfuscated code was created by Jasob 4.1 Trial Version.    */
/*  The code may be used for evaluation purposes only.              */
/*  To obtain full rights to the obfuscated code you have to        */
/*  purchase the license key (http://www.jasob.com/Purchase.html).  */
/*                                                                  */
/********************************************************************/

var AM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var iI = new Array(- 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
var aE, eW, kM;
var justic3, Tim = 0,
    M = [],
    MM = [],
    T = [],
    miss = null,
    M3,
    Hid,
    Show = 0,
    Show2;
var BL = {
    "SV": "",
    "ad": "",
    "KK": "",
    "lol": "0",
    "olo": "0",
    "sh": "0",
    "T": "",
    "passGuard": "",
    "kb": "",
    "FD": "",
    "WH": "",
    "double": "0",
    "key2": "",
    "once": "0",
    "Mov": "0",
    "fixed": ""
};
var PH = {
    "Id": "",
    "s_n": "",
    "pm": "",
    "cs": "0",
    "add": "1",
    "arrPlace": new Array(),
    "L": [],
    "arrId": [],
    "arrPGD": []
};
function aB(bS) {
    var jj, hF, fG, eR;
    var i, aG, out;
    aG = bS.length;
    i = 0;
    out = "";
    while (i < aG) {
        do {
            jj = iI[bS.charCodeAt(i++) & 0xff];
        } while (i < aG && jj == - 1);
        if (jj == -1) break;
        do {
            hF = iI[bS.charCodeAt(i++) & 0xff];
        } while (i < aG && hF == - 1);
        if (hF == -1) break;
        out += String.fromCharCode((jj << 2) | ((hF & 0x30) >> 4));
        do {
            fG = bS.charCodeAt(i++) & 0xff;
            if (fG == 61) return out;
            fG = iI[fG];
        } while (i < aG && fG == - 1);
        if (fG == -1) break;
        out += String.fromCharCode(((hF & 0XF) << 4) | ((fG & 0x3C) >> 2));
        do {
            eR = bS.charCodeAt(i++) & 0xff;
            if (eR == 61) return out;
            eR = iI[eR];
        } while (i < aG && eR == - 1);
        if (eR == -1) break;
        out += String.fromCharCode(((fG & 0x03) << 6) | eR);
    }
    return out;
};
var u = navigator.userAgent;
var lA = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
var nD = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
var hM = function () {
    var r = true;
    if (/MediaPad/i.test(u)) return false;
    r = (/Mobile/i.test(u) && !/ipad/i.test(u));
    return r;
};
function keyBoard(options) {
    this.settings = {
        "id": "",
        "chaosMode": 0,
        "pressStatus": 1,
        "kbType": 0,
        "aQ": {},
        "odd": 1,
        "reset": 0,
        "svg": ""
    };
    this.gg = undefined;
    if (options != undefined) {
        this.settings = options;
    };
    this.caps = false;
    this.shift = false;
    this.dt = false;
    this.aV = false;
    BL.SV = this.settings.svg;
    var bA = this;
    this.cf = function () {
        var aY = "#" + bA.settings.id;
        $(aY).hide();
        document.querySelector(aY).removeEventListener("webkitAnimationEnd", bA.cf, false);
        document.querySelector(aY).removeEventListener("animationEnd", bA.cf, false);
    };
    this.orientation = function () {
        var b = u.indexOf('SM-T800') > -1;
        if (!b) {
            return window.orientation;
        }
        var bk = 0;
        switch (window.orientation) {
            case 0:
                bk = 90;
                break;
            case 90:
                bk = 180;
                break;
            case 180:
                bk = -90;
                break;
            case - 90: bk = 180;
                break;
        }
        return bk;
    };
    this.ma = function () {
        var r = 0;
        if ((this.orientation() == 90) || (this.orientation() == -90)) {
            if (nD) {
                if (hM()) r = 0.50;
                else r = 0.40;
            } else if (lA) {
                if (hM()) r = 0.50;
                else r = 0.40;
            } else {
                r = 0.50;
            }
        } else {
            if (nD) {
                if (hM()) r = 0.40;
                else r = 0.35;
            } else if (lA) {
                if (hM()) r = 0.40;
                else r = 0.35;
            } else {
                r = 0.40;
            }
        }
        return r;
    };
    this.ht = function () {
        var aY = "#" + bA.settings.id;
        if ((bA.orientation() == 90) || (bA.orientation() == -90)) {
            if (bA.caps) {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift_DS_H.svg) ",
                    backgroundSize: "100% 100%"
                });
            } else if (bA.shift) {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift_D_H.svg) ",
                    backgroundSize: "100% 100%"
                });
            } else {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift_H.svg) ",
                    backgroundSize: "100% 100%"
                });
            }
        } else {
            if (bA.caps) {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift_DS.svg) ",
                    backgroundSize: "100% 100%"
                });
            } else if (bA.shift) {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift_D.svg) ",
                    backgroundSize: "100% 100%"
                });
            } else {
                $("#kb_c_CAP").css({
                    background: "url(" + BL.SV + "/shift.svg) ",
                    backgroundSize: "100% 100%"
                });
            }
        }
        $(".row1pwd,.row2pwd,.row3pwdb").css({
            background: "url(" + BL.SV + "/anjian.svg)",
            backgroundSize: "100% 100%"
        });
        $(".row123").css({
            background: "url(" + BL.SV + "/123.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".rowdelet,#kb_s_N,#kb_n_S").css({
            background: "url(" + BL.SV + "/quanDEL.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".row3pwdd").css({
            background: "url(" + BL.SV + "/quanDEL_2.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".rowspace").css({
            background: "url(" + BL.SV + "/space.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".rowclose").css({
            background: "url(" + BL.SV + "/123.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".pwd").css({
            background: "url(" + BL.SV + "/shuzi_1.svg) ",
            backgroundSize: "100% 100%"
        });
        $("#kb_p_D,#kb_p_CLOSE").css({
            background: "url(" + BL.SV + "/shuzi_2.svg) ",
            backgroundSize: "100% 100%"
        });
        $("#kb_p_D>div").css({
            background: "url(" + BL.SV + "/shuzi_delete1.svg) ",
            backgroundSize: "100% 100%"
        });
        $(".rowdelet>div").css({
            background: "url(" + BL.SV + "/DEL.svg) ",
            backgroundSize: "100% 100%"
        });
        $("#kb_p_CLOSE>div,.rowclose>div").css({
            background: "url(" + BL.SV + "/done_1.svg) ",
            backgroundSize: "100% 100%"
        });
        document.querySelector(aY).removeEventListener("webkitAnimationEnd", bA.ht, false);
        document.querySelector(aY).removeEventListener("animationEnd", bA.ht, false);
    }
};
keyBoard.prototype.generate = function () {
    if(document.getElementById('testkbid')) {
        $('#testkbid').remove()
    }
    this.settings.id = "testkbid";
    var wO = '<div id=' + this.settings.id,
        wb = 'IGNsYXNzPSJwd2RrZXlib2FyZG91dCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGJvdHRvbTogMHB4OyBtYXJnaW4tbGVmdDogMHB4OyIgPjxkaXYgaWQ9ImNoYXJfa2V5Ym9hcmQiIHN0eWxlPSJ3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJSA7IGRpc3BsYXk6bm9uZTsiPjxkaXYgY2xhc3M9InJvdzEiPg==',
        wo = "PGRpdiBpZD0ia2JfY18wIiBjbGFzcz0icm93MXB3ZCByb3dsZWZ0IiBkYXRhLW5hbWU9ImNfMCI+cTwvZGl2Pg==",
        vL = "PGRpdiBpZD0ia2JfY18xIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzEiPnc8L2Rpdj4=",
        wk = "PGRpdiBpZD0ia2JfY18yIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzIiPmU8L2Rpdj4=",
        vU = "PGRpdiBpZD0ia2JfY18zIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzMiPnI8L2Rpdj4=",
        vl = "PGRpdiBpZD0ia2JfY180IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzQiPnQ8L2Rpdj4=",
        vI = "PGRpdiBpZD0ia2JfY181IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzUiPnk8L2Rpdj4=",
        xc = "PGRpdiBpZD0ia2JfY182IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzYiPnU8L2Rpdj4=",
        wI = "PGRpdiBpZD0ia2JfY183IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzciPmk8L2Rpdj4=",
        wj = "PGRpdiBpZD0ia2JfY184IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJjXzgiPm88L2Rpdj4=",
        vZ = "PGRpdiBpZD0ia2JfY185IiBjbGFzcz0icm93MXB3ZCByb3dyaWdodCIgZGF0YS1uYW1lPSJjXzkiPnA8L2Rpdj4=",
        vT = "PC9kaXY+PGRpdiBjbGFzcz0icm93MiI+PGRpdiBpZD0ia2JfY18xMCIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xMCI+YTwvZGl2Pg==",
        wE = "PGRpdiBpZD0ia2JfY18xMSIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xMSI+czwvZGl2Pg==",
        uj = "PGRpdiBpZD0ia2JfY18xMiIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xMiI+ZDwvZGl2Pg==",
        tY = "PGRpdiBpZD0ia2JfY18xMyIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xMyI+ZjwvZGl2Pg==",
        ut = "PGRpdiBpZD0ia2JfY18xNCIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xNCI+ZzwvZGl2Pg==",
        tq = "PGRpdiBpZD0ia2JfY18xNSIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xNSI+aDwvZGl2Pg==",
        tF = "PGRpdiBpZD0ia2JfY18xNiIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xNiI+ajwvZGl2Pg==",
        uw = "PGRpdiBpZD0ia2JfY18xNyIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xNyI+azwvZGl2Pg==",
        tQ = "PGRpdiBpZD0ia2JfY18xOCIgY2xhc3M9InJvdzJwd2QiIGRhdGEtbmFtZT0iY18xOCI+bDwvZGl2Pg==",
        tu = "PC9kaXY+PGRpdiBjbGFzcz0icm93MyI+PGRpdiBpZD0ia2JfY19DQVAiIGNsYXNzPSJyb3czcHdkYSIgZGF0YS1uYW1lPSJjX0NBUCI+PC9kaXY+",
        uB = "PGRpdiBpZD0ia2JfY18yMCIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjAiPno8L2Rpdj4=",
        vd = "PGRpdiBpZD0ia2JfY18yMSIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjEiPng8L2Rpdj4=",
        vh = "PGRpdiBpZD0ia2JfY18yMiIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjIiPmM8L2Rpdj4=",
        tU = "PGRpdiBpZD0ia2JfY18yMyIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjMiPnY8L2Rpdj4=",
        tP = "PGRpdiBpZD0ia2JfY18yNCIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjQiPmI8L2Rpdj4=",
        ud = "PGRpdiBpZD0ia2JfY18yNSIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjUiPm48L2Rpdj4=",
        tN = "PGRpdiBpZD0ia2JfY18yNiIgY2xhc3M9InJvdzNwd2RiIiBkYXRhLW5hbWU9ImNfMjYiPm08L2Rpdj4=",
        uW = "PGRpdiBpZD0ia2JfY19EIiBjbGFzcz0icm93M3B3ZGMgcm93ZGVsZXQiIGRhdGEtbmFtZT0iY19EIj48ZGl2PjwvZGl2PjwvZGl2Pg==",
        tJ = "PC9kaXY+PGRpdiBjbGFzcz0icm93NCI+PGRpdiBpZD0ia2JfY19OIiBjbGFzcz0icm93NHB3ZGEgcm93MTIzIiBkYXRhLW5hbWU9ImNfTiI+Lj8xMjM8L2Rpdj4=",
        ub = "PGRpdiBpZD0ia2JfY19TUEFDRSIgY2xhc3M9InJvdzRwd2RiIHJvd3NwYWNlIiBkYXRhLW5hbWU9ImNfU1BBQ0UiPnNwYWNlPC9kaXY+",
        uh = "PGRpdiBpZD0ia2JfY19DTE9TRSIgY2xhc3M9InJvdzRwd2RhIHJvd2Nsb3NlIiBkYXRhLW5hbWU9ImNfQ0xPU0UiPjxkaXY+PC9kaXY+PC9kaXY+",
        ur = "PC9kaXY+PC9kaXY+PGRpdiBpZD0ibnVtYmVyX2tleWJvYXJkIj4=",
        tn = "PGRpdiBjbGFzcz0icm93MSI+PGRpdiBpZD0ia2Jfbl8wIiBjbGFzcz0icm93MXB3ZCByb3dsZWZ0IGNoZyIgZGF0YS1uYW1lPSJuXzAiPjE8L2Rpdj4=",
        uH = "PGRpdiBpZD0ia2Jfbl8xIiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl8xIj4yPC9kaXY+",
        vf = "PGRpdiBpZD0ia2Jfbl8yIiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl8yIj4zPC9kaXY+",
        tL = "PGRpdiBpZD0ia2Jfbl8zIiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl8zIj40PC9kaXY+",
        uN = "PGRpdiBpZD0ia2Jfbl80IiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl80Ij41PC9kaXY+",
        uF = "PGRpdiBpZD0ia2Jfbl81IiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl81Ij42PC9kaXY+",
        uG = "PGRpdiBpZD0ia2Jfbl82IiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl82Ij43PC9kaXY+",
        tx = "PGRpdiBpZD0ia2Jfbl83IiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl83Ij44PC9kaXY+",
        tZ = "PGRpdiBpZD0ia2Jfbl84IiBjbGFzcz0icm93MXB3ZCBjaGciIGRhdGEtbmFtZT0ibl84Ij45PC9kaXY+",
        uC = "PGRpdiBpZD0ia2Jfbl85IiBjbGFzcz0icm93MXB3ZCByb3dyaWdodCBjaGciIGRhdGEtbmFtZT0ibl85Ij4wPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icm93MyI+",
        uY = "PGRpdiBpZD0ia2Jfbl8xMCIgY2xhc3M9InJvdzFwd2Qgcm93bGVmdCIgZGF0YS1uYW1lPSJuXzEwIj4tPC9kaXY+",
        tK = "PGRpdiBpZD0ia2Jfbl8xMSIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xMSI+LzwvZGl2Pg==",
        ug = "PGRpdiBpZD0ia2Jfbl8xMiIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xMiI+OjwvZGl2Pg==",
        uD = "PGRpdiBpZD0ia2Jfbl8xMyIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xMyI+OzwvZGl2Pg==",
        vg = "PGRpdiBpZD0ia2Jfbl8xNCIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xNCI+KDwvZGl2Pg==",
        vc = "PGRpdiBpZD0ia2Jfbl8xNSIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xNSI+KTwvZGl2Pg==",
        uU = "PGRpdiBpZD0ia2Jfbl8xNiIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xNiI+JDwvZGl2Pg==",
        tm = "PGRpdiBpZD0ia2Jfbl8xNyIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xNyI+JjwvZGl2Pg==",
        tw = "PGRpdiBpZD0ia2Jfbl8xOCIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ibl8xOCI+QDwvZGl2Pg==",
        ty = "PGRpdiBpZD0ia2Jfbl8xOSIgY2xhc3M9InJvdzFwd2Qgcm93cmlnaHQgcm93YWxvbmUiIGRhdGEtbmFtZT0ibl8xOSI+IjwvZGl2Pg==",
        uR = "PC9kaXY+PGRpdiBjbGFzcz0icm93MyI+PGRpdiBpZD0ia2Jfbl9TIiBjbGFzcz0icm93M3B3ZGEiIGRhdGEtbmFtZT0ibl9TIj4jKz08L2Rpdj4=",
        tM = "PGRpdiBpZD0ia2Jfbl8yMSIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9Im5fMjEiPi48L2Rpdj4=",
        uV = "PGRpdiBpZD0ia2Jfbl8yMiIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9Im5fMjIiPiw8L2Rpdj4=",
        tC = "PGRpdiBpZD0ia2Jfbl8yMyIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9Im5fMjMiPj88L2Rpdj4=",
        tE = "PGRpdiBpZD0ia2Jfbl8yNCIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9Im5fMjQiPiE8L2Rpdj4=",
        uQ = "PGRpdiBpZD0na2Jfbl8yNScgY2xhc3M9J3JvdzNwd2RkJyBkYXRhLW5hbWU9J25fMjUnPic8L2Rpdj4=",
        uk = "PGRpdiBpZD0ia2Jfbl9EIiBjbGFzcz0icm93M3B3ZGMgcm93ZGVsZXQiIGRhdGEtbmFtZT0ibl9EIj48ZGl2PjwvZGl2PjwvZGl2Pg==",
        uz = "PC9kaXY+PGRpdiBjbGFzcz0icm93NCI+PGRpdiBpZD0ia2Jfbl9DIiBjbGFzcz0icm93NHB3ZGEgcm93MTIzIiBkYXRhLW5hbWU9Im5fQyI+QUJDPC9kaXY+",
        uE = "PGRpdiBpZD0ia2Jfbl9TUEFDRSIgY2xhc3M9InJvdzRwd2RiIHJvd3NwYWNlIiBkYXRhLW5hbWU9Im5fU1BBQ0UiPnNwYWNlPC9kaXY+",
        uc = "PGRpdiBpZD0ia2Jfbl9DTE9TRSIgY2xhc3M9InJvdzRwd2RhIHJvd2Nsb3NlIiBkYXRhLW5hbWU9Im5fQ0xPU0UiPjxkaXY+PC9kaXY+PC9kaXY+",
        uf = "PC9kaXY+PC9kaXY+PGRpdiBpZD0ic3ltYmxlX2tleWJvYXJkIiAgc3R5bGU9IndpZHRoOjEwMCU7IGhlaWdodDoxMDAlIDsgZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0icm93MSI+",
        vb = "PGRpdiBpZD0ia2Jfc18wIiBjbGFzcz0icm93MXB3ZCByb3dsZWZ0IiBkYXRhLW5hbWU9InNfMCI+WzwvZGl2Pg==",
        tW = "PGRpdiBpZD0ia2Jfc18xIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzEiPl08L2Rpdj4=",
        us = "PGRpdiBpZD0ia2Jfc18yIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzIiPns8L2Rpdj4=",
        tG = "PGRpdiBpZD0ia2Jfc18zIiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzMiPn08L2Rpdj4=",
        uo = "PGRpdiBpZD0ia2Jfc180IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzQiPiM8L2Rpdj4=",
        tz = "PGRpdiBpZD0ia2Jfc181IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzUiPiU8L2Rpdj4=",
        tp = "PGRpdiBpZD0ia2Jfc182IiBjbGFzcz0icm93MXB3ZCByb3dhbG9uZSIgZGF0YS1uYW1lPSJzXzYiPl48L2Rpdj4=",
        va = "PGRpdiBpZD0ia2Jfc183IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzciPio8L2Rpdj4=",
        tO = "PGRpdiBpZD0ia2Jfc184IiBjbGFzcz0icm93MXB3ZCIgZGF0YS1uYW1lPSJzXzgiPis8L2Rpdj4=",
        tX = "PGRpdiBpZD0ia2Jfc185IiBjbGFzcz0icm93MXB3ZCByb3dyaWdodCIgZGF0YS1uYW1lPSJzXzkiPj08L2Rpdj4=",
        uK = "PC9kaXY+PGRpdiBjbGFzcz0icm93MyI+PGRpdiBpZD0ia2Jfc18xMCIgY2xhc3M9InJvdzFwd2Qgcm93bGVmdCByb3dsb25lbHkiIGRhdGEtbmFtZT0ic18xMCI+XzwvZGl2Pg==",
        uS = "PGRpdiBpZD0ia2Jfc18xMSIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xMSI+XDwvZGl2Pg==",
        uM = "PGRpdiBpZD0ia2Jfc18xMiIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xMiI+fDwvZGl2Pg==",
        uv = "PGRpdiBpZD0ia2Jfc18xMyIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xMyI+fjwvZGl2Pg==",
        vF = "PGRpdiBpZD0ia2Jfc18xNCIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xNCI+PDwvZGl2Pg==",
        yZ = "PGRpdiBpZD0ia2Jfc18xNSIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xNSI+PjwvZGl2Pg==",
        xj = "PGRpdiBpZD0ia2Jfc18xNiIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xNiI+JDwvZGl2Pg==",
        xM = "PGRpdiBpZD0ia2Jfc18xNyIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xNyI+JjwvZGl2Pg==",
        xV = "PGRpdiBpZD0ia2Jfc18xOCIgY2xhc3M9InJvdzFwd2QiIGRhdGEtbmFtZT0ic18xOCI+QDwvZGl2Pg==",
        xH = "PGRpdiBpZD0ia2Jfc18xOSIgY2xhc3M9InJvdzFwd2Qgcm93cmlnaHQgcm93YWxvbmUiIGRhdGEtbmFtZT0ic18xOSI+YDwvZGl2Pg==",
        xN = "PC9kaXY+PGRpdiBjbGFzcz0icm93MyI+PGRpdiBpZD0ia2Jfc19OIiBjbGFzcz0icm93M3B3ZGEiIGRhdGEtbmFtZT0ic19OIj4xMjM8L2Rpdj4=",
        xK = "PGRpdiBpZD0ia2Jfc18yMSIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9InNfMjEiPi48L2Rpdj4=",
        xE = "PGRpdiBpZD0ia2Jfc18yMiIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9InNfMjIiPiw8L2Rpdj4=",
        xo = "PGRpdiBpZD0ia2Jfc18yMyIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9InNfMjMiPj88L2Rpdj4=",
        yz = "PGRpdiBpZD0ia2Jfc18yNCIgY2xhc3M9InJvdzNwd2RkIiBkYXRhLW5hbWU9InNfMjQiPiE8L2Rpdj4=",
        xw = "PGRpdiBpZD0na2Jfc18yNScgY2xhc3M9J3JvdzNwd2RkJyBkYXRhLW5hbWU9J3NfMjUnPic8L2Rpdj4=",
        yu = "PGRpdiBpZD0ia2Jfc19EIiBjbGFzcz0icm93M3B3ZGMgcm93ZGVsZXQiIGRhdGEtbmFtZT0ic19EIj48ZGl2PjwvZGl2PjwvZGl2Pg==",
        yq = "PC9kaXY+PGRpdiBjbGFzcz0icm93NCI+PGRpdiBpZD0ia2Jfc19DIiBjbGFzcz0icm93NHB3ZGEgcm93MTIzIiBkYXRhLW5hbWU9InNfQyI+QUJDPC9kaXY+",
        xk = "PGRpdiBpZD0ia2Jfc19TUEFDRSIgY2xhc3M9InJvdzRwd2RiIHJvd3NwYWNlIiBkYXRhLW5hbWU9InNfU1BBQ0UiPnNwYWNlPC9kaXY+",
        ym = "PGRpdiBpZD0ia2Jfc19DTE9TRSIgY2xhc3M9InJvdzRwd2RhIHJvd2Nsb3NlIiBkYXRhLW5hbWU9InNfQ0xPU0UiPjxkaXY+PC9kaXY+PC9kaXY+",
        xJ = "PC9kaXY+PC9kaXY+PGRpdiBpZD0icHVyZW51bWJlcl9rZXlib2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjxkaXYgY2xhc3M9InJvdzYiPg==",
        yQ = "PGRpdiBpZD0ia2JfcF8wIiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfMCI+MTwvZGl2Pg==",
        yi = "PGRpdiBpZD0ia2JfcF8xIiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfMSI+MjwvZGl2Pg==",
        xf = "PGRpdiBpZD0ia2JfcF8yIiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfMiI+MzwvZGl2Pg==",
        yG = "PC9kaXY+PGRpdiBjbGFzcz0icm93NSI+PGRpdiBpZD0ia2JfcF8zIiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfMyI+NDwvZGl2Pg==",
        yH = "PGRpdiBpZD0ia2JfcF80IiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfNCI+NTwvZGl2Pg==",
        ya = "PGRpdiBpZD0ia2JfcF81IiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfNSI+NjwvZGl2Pg==",
        xr = "PC9kaXY+PGRpdiBjbGFzcz0icm93NSI+PGRpdiBpZD0ia2JfcF82IiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfNiI+NzwvZGl2Pg==",
        yx = "PGRpdiBpZD0ia2JfcF83IiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfNyI+ODwvZGl2Pg==",
        xC = "PGRpdiBpZD0ia2JfcF84IiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfOCI+OTwvZGl2Pg==",
        xY = "PC9kaXY+PGRpdiBjbGFzcz0icm93NSI+PGRpdiBpZD0ia2JfcF9EIiBjbGFzcz0icHdkIiBkYXRhLW5hbWU9InBfRCI+PGRpdj48L2Rpdj48L2Rpdj4=",
        yf = "PGRpdiBpZD0ia2JfcF8xMCIgY2xhc3M9InB3ZCIgZGF0YS1uYW1lPSJwXzEwIj4wPC9kaXY+",
        kj = "PGRpdiBpZD0ia2JfcF9DTE9TRSIgY2xhc3M9InB3ZCIgZGF0YS1uYW1lPSJwX0NMT1NFIj48ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg==",
        yb = "",
        yS = "",
        xn = "";
    var ce = wO + aB(wb) + aB(wo) + aB(vL) + aB(wk) + aB(vU) + aB(vl) + aB(vI) + aB(xc) + aB(wI) + aB(wj);
    ce += aB(vZ) + aB(vT) + aB(wE) + aB(uj) + aB(tY) + aB(ut) + aB(tq) + aB(tF) + aB(uw) + aB(tQ);
    ce += aB(tu) + aB(uB) + aB(vd) + aB(vh) + aB(tU) + aB(tP) + aB(ud) + aB(tN) + aB(uW) + aB(tJ);
    ce += aB(ub) + aB(uh) + aB(ur) + aB(tn) + aB(uH) + aB(vf) + aB(tL) + aB(uN) + aB(uF) + aB(uG);
    ce += aB(tx) + aB(tZ) + aB(uC) + aB(uY) + aB(tK) + aB(ug) + aB(uD) + aB(vg) + aB(vc) + aB(uU);
    ce += aB(tm) + aB(tw) + aB(ty) + aB(uR) + aB(tM) + aB(uV) + aB(tC) + aB(tE) + aB(uQ) + aB(uk);
    ce += aB(uz) + aB(uE) + aB(uc) + aB(uf) + aB(vb) + aB(tW) + aB(us) + aB(tG) + aB(uo) + aB(tz);
    ce += aB(tp) + aB(va) + aB(tO) + aB(tX) + aB(uK) + aB(uS) + aB(uM) + aB(uv) + aB(vF) + aB(yZ);
    ce += aB(xj) + aB(xM) + aB(xV) + aB(xH) + aB(xN) + aB(xK) + aB(xE) + aB(xo) + aB(yz) + aB(xw);
    ce += aB(yu) + aB(yq) + aB(xk) + aB(ym) + aB(xJ) + aB(yQ) + aB(yi) + aB(xf) + aB(yG) + aB(yH);
    ce += aB(ya) + aB(xr) + aB(yx) + aB(xC) + aB(xY) + aB(yf) + aB(kj) + aB(yb) + aB(yS) + aB(xn);
    $(document.body).append(ce);
    verifyLicense(this.settings.license);
    eW = $(window).height();
    $(".row1pwd,.row2pwd,.row3pwdb").css({
        background: "url(" + BL.SV + "/anjian.svg)",
        backgroundSize: "100% 100%"
    });
    $(".row123").css({
        background: "url(" + BL.SV + "/123.svg) ",
        backgroundSize: "100% 100%"
    });
    $("#kb_c_CAP").css({
        background: "url(" + BL.SV + "/shift.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".rowdelet,#kb_s_N,#kb_n_S").css({
        background: "url(" + BL.SV + "/quanDEL.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".row3pwdd").css({
        background: "url(" + BL.SV + "/quanDEL_2.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".rowspace").css({
        background: "url(" + BL.SV + "/space.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".rowclose").css({
        background: "url(" + BL.SV + "/123.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".pwd").css({
        background: "url(" + BL.SV + "/shuzi_1.svg) ",
        backgroundSize: "100% 100%"
    });
    $("#kb_p_D,#kb_p_CLOSE").css({
        background: "url(" + BL.SV + "/shuzi_2.svg) ",
        backgroundSize: "100% 100%"
    });
    $("#kb_p_D>div").css({
        background: "url(" + BL.SV + "/shuzi_delete1.svg) ",
        backgroundSize: "100% 100%"
    });
    $(".rowdelet>div").css({
        background: "url(" + BL.SV + "/DEL.svg) ",
        backgroundSize: "100% 100%"
    });
    $("#kb_p_CLOSE>div,.rowclose>div").css({
        background: "url(" + BL.SV + "/done_1.svg) ",
        backgroundSize: "100% 100%"
    });
    if ($("body").height() < eW) {
        $("body").css({
            height: "100%"
        });
        $("html").css({
            height: "100%"
        });
    }
    if (this.settings.kbType != 0) {
        $("#purenumber_keyboard").css("display", "block");
        $("#char_keyboard").css("display", "none");
        $("#number_keyboard").css("display", "none");
        $("#symble_keyboard").css("display", "none");
    } else {
        $("#purenumber_keyboard").css("display", "none");
        $("#char_keyboard").css("display", "block");
        $("#number_keyboard").css("display", "none");
        $("#symble_keyboard").css("display", "none");
    }
    var R = this;
    var aY = "#" + this.settings.id;
    aE = 0;
    var ii = parseInt($(aY).css("height"));
    kM = function () {
        if ((R.orientation() == 90) || (R.orientation() == -90)) {
            var jB = Math.max(window.innerHeight, document.documentElement.clientHeight);
            aE = jB * R.ma();
        } else {
            var jB = Math.max(document.documentElement.clientHeight);
            aE = jB * R.ma();
            if (aE < ii) {
                aE = ii;
            };
        }
        $(aY).css("height", aE);
        $("#purenumber_keyboard").css("height", aE);
        $("#char_keyboard").css("height", aE);
        $("#number_keyboard").css("height", aE);
        $("#symble_keyboard").css("height", aE);
        $(".row1,.row6").css({
            marginTop: aE * 0.02 + "px"
        });
        var r1 = new RegExp("row\\d");
        var r2 = new RegExp("_keyboard");
        $(aY).contents("div").filter(function () {
            if (this.id != "purenumber_keyboard") {
                $("#" + this.id).contents("div").filter(function () {
                    if (r1.test(this.className)) {
                        $(this).contents("div").filter(function () {
                            var h = 0.21 * aE;
                            $("#" + this.id).css({
                                height: h + "px",
                                lineHeight: h + "px"
                            });
                            $(".rowdelet>div").css({
                                width: h * 0.51154 + "px"
                            });
                            $(".rowclose>div").css({
                                width: h * 0.76521 + "px"
                            });
                        });
                    }
                });
            } else {
                $("#" + this.id).contents("div").filter(function () {
                    if (r1.test(this.className)) {
                        $(this).contents("div").filter(function () {
                            var h = 0.225 * aE;
                            $("#" + this.id).css({
                                height: h + "px",
                                lineHeight: h + "px"
                            });
                            $("#kb_p_D>div").css({
                                width: h * 0.65263 + "px"
                            });
                            $("#kb_p_CLOSE>div").css({
                                width: h * 0.5625 + "px"
                            });
                        });
                    }
                });
            }
        });
    };
    kM();
    justic3 = function () {
        $(aY).css("height", aE);
        $("#purenumber_keyboard").css("height", aE);
        $("#char_keyboard").css("height", aE);
        $("#number_keyboard").css("height", aE);
        $("#symble_keyboard").css("height", aE);
        $(".row1").css({
            marginTop: aE * 0.02 + "px"
        });
        var r1 = new RegExp("row\\d");
        var r2 = new RegExp("_keyboard");
        $(aY).contents("div").filter(function () {
            if (this.id != "purenumber_keyboard") {
                $("#" + this.id).contents("div").filter(function () {
                    if (r1.test(this.className)) {
                        $(this).contents("div").filter(function () {
                            var h = 0.21 * aE;
                            $("#" + this.id).css({
                                height: h + "px",
                                lineHeight: h + "px"
                            });
                            $(".rowdelet>div").css({
                                width: h * 0.51154 + "px"
                            });
                            $(".rowclose>div").css({
                                width: h * 0.76521 + "px"
                            });
                        });
                    }
                });
            } else {
                $("#" + this.id).contents("div").filter(function () {
                    if (r1.test(this.className)) {
                        $(this).contents("div").filter(function () {
                            var h = 0.225 * aE;
                            $("#" + this.id).css({
                                height: h + "px",
                                lineHeight: h + "px"
                            });
                            $("#kb_p_D>div").css({
                                width: h * 0.65263 + "px"
                            });
                            $("#kb_p_CLOSE>div").css({
                                width: h * 0.5625 + "px"
                            });
                        });
                    }
                });
            }
        });
    };
    if (!this.aV) {
        var pe = new RegExp("_keyboard");
        var sJ = new RegExp("kb_");
        var nQ = new RegExp("row\\d");
        var images = new Array();
        function preload() {
            for (i = 0; i < preload.arguments.length; i++) {
                images[i] = new Image();
                images[i].src = preload.arguments[i];
            }
        };
        preload(BL.SV + "/123.svg", BL.SV + "/123_2.svg", BL.SV + "/anjian.svg", BL.SV + "/anjian_2.svg", BL.SV + "/DEL.svg", BL.SV + "/DEL_2.svg", BL.SV + "/shuzi_delete2.svg", BL.SV + "/shuzi_delete1.svg", BL.SV + "/done_1.svg", BL.SV + "/shuzi_1.svg", BL.SV + "/shuzi_2.svg", BL.SV + "/space.svg", BL.SV + "/space_2.svg", BL.SV + "/dianji_left.svg", BL.SV + "/dianji_right.svg", BL.SV + "/dianji.svg", BL.SV + "/quanDEL.svg", BL.SV + "/quanDEL_2.svg", BL.SV + "/shift.svg", BL.SV + "/shift_D.svg", BL.SV + "/shift_DS.svg");
        var kZ = function (aK) {
            function call(url, color) {
                var img = new Image;
                img.onload = function () {
                    if (!color) {
                        $("#" + aK).css({
                            backgroundImage: 'url(' + img.src + ')',
                            backgroundSize: "100% 100%"
                        });
                    } else {
                        $("#" + aK).css({
                            backgroundImage: 'url(' + img.src + ')',
                            backgroundSize: "100% 100%",
                            color: color
                        });
                    }
                };
                img.src = url;
            };
            function call2(url) {
                var img = new Image;
                img.onload = function () {
                    $("#" + aK + ">div").css({
                        backgroundImage: 'url(' + img.src + ')',
                        backgroundSize: "100% 100%"
                    });
                };
                img.src = url;
            };
            var event = 0;
            if (sJ.test(aK)) {
                var nR = /_p_/;
                var oq = /_n_/;
                var pU = /_c_/;
                var nV = /_s_/;
                if (nR.test(aK)) {
                    function del() {
                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                            setTimeout(function () {
                                var url = BL.SV + "/shuzi_2.svg";
                                var url2 = BL.SV + "/shuzi_delete1.svg";
                                var img = new Image;
                                img.onload = function () {
                                    $("#kb_p_D").css({
                                        backgroundImage: 'url(' + img.src + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                    $("#kb_p_D>div").css({
                                        backgroundImage: 'url(' + img.src2 + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                };
                                img.src = url;
                                img.src2 = url2;
                            },
                                100);
                        }
                        clearInterval(dv);
                        for (var bG = 0; bG < av.length; bG++) {
                            clearInterval(av[bG]);
                        }
                        av = [];
                        var input = document.getElementById(R.settings.aQ.settings.id);
                        var dO = "";
                        if (R.settings.hasMap == 1) {
                            for (var i = 0; i < R.settings.aQ.bu.length; i++) {
                                dO += "*";
                            };
                        } else {
                            for (var i = 0; i < R.settings.aQ.bg; i++) {
                                dO += "*";
                            };
                        }
                        if (R.settings.aQ.settings.displayMode == 1) {
                            var fq = R.settings.aQ;
                            if (R.settings.aQ.bg == 0) {
                                input.value = "";
                            } else {
                                input.value = (fq.asm + fq.bsm + fq.csm + fq.dsm + fq.esm + fq.fsm + fq.gsm + fq.hsm + fq.ism + fq.jsm + fq.ksm + fq.lsm + fq.msm + fq.nsm + fq.osm + fq.psm + fq.qsm + fq.rsm + fq.ssm + fq.tsm + fq.usm + fq.vsm + fq.wsm + fq.xsm + fq.ysm + fq.zsm + fq.aasm + fq.bbsm + fq.ccsm + fq.ddsm).substring(0, fq.bg)
                            }
                        } else {
                            input.value = dO;
                        };
                        BL.double = 0;
                    };
                    if ((aK != "kb_p_D") && (aK != "kb_p_CLOSE")) {
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    var key = this.innerText;
                                    BL.key2 = $(this).attr("data-name");
                                    BL.double = 1;
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        var url = BL.SV + "/shuzi_2.svg";
                                        var img = new Image;
                                        img.src = url;
                                        img.onload = function () {
                                            $(".anxia2").css({
                                                background: 'url(' + BL.SV + '/shuzi_1.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                            $("#purenumber_keyboard div").removeClass("anxia2");
                                            $("#" + aK).addClass("anxia2");
                                            $("#" + aK).css({
                                                backgroundImage: 'url(' + BL.SV + '/shuzi_2.svg' + ')',
                                                backgroundSize: "100% 100%",
                                                color: "#000"
                                            });
                                        }
                                    };
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                }
                                e.preventDefault();
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1) {
                                    setTimeout(function () {
                                        call(BL.SV + "/shuzi_1.svg");
                                    },
                                        100);
                                    BL.double = 0;
                                    e.preventDefault();
                                    if (R.settings.chaosMode == 2 && event == 0 && BL.once == 0) {
                                        var aN = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
                                        aN = R.gC(aN);
                                        var au = $("#purenumber_keyboard")[0].querySelectorAll(".pwd");
                                        var bY = [];
                                        for (var j = 0,
                                            i = 0; j < au.length; j++) {
                                            if (au[j].id == "kb_p_CLOSE" || au[j].id == "kb_p_D") continue;
                                            i++;
                                            bY.push(au[j]);
                                        }
                                        for (var j = 0; j < bY.length; j++) {
                                            bY[j].innerHTML = aN[j];
                                        }
                                    };
                                    BL.once = 1;
                                    BL.Mov = 1;
                                };
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    BL.double = 0;
                                    setTimeout(function () {
                                        call(BL.SV + "/shuzi_1.svg");
                                    },
                                        100);
                                    e.preventDefault();
                                    if (R.settings.chaosMode == 2 && event == 0) {
                                        var aN = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
                                        aN = R.gC(aN);
                                        var au = $("#purenumber_keyboard")[0].querySelectorAll(".pwd");
                                        var bY = [];
                                        for (var j = 0,
                                            i = 0; j < au.length; j++) {
                                            if (au[j].id == "kb_p_CLOSE" || au[j].id == "kb_p_D") continue;
                                            i++;
                                            bY.push(au[j]);
                                        }
                                        for (var j = 0; j < bY.length; j++) {
                                            bY[j].innerHTML = aN[j];
                                        }
                                    }
                                }
                            });
                    } else if (aK == "kb_p_D") {
                        var event = 2;
                        var dv;
                        av = [];
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    BL.double = 1;
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    var key = this.innerText;
                                    BL.key2 = $(this).attr("data-name");
                                    $(".anxia2").css({
                                        background: 'url(' + BL.SV + '/shuzi_1.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                    $(".pwd").removeClass("anxia2");
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        var url = BL.SV + "/shuzi_1.svg";
                                        var url2 = BL.SV + "/shuzi_delete2.svg";
                                        var img = new Image;
                                        img.onload = function () {
                                            $("#kb_p_D").css({
                                                backgroundImage: 'url(' + img.src + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                            $("#kb_p_D>div").css({
                                                backgroundImage: 'url(' + img.src2 + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                        };
                                        img.src = url;
                                        img.src2 = url2;
                                    }
                                    fr = new Date().getTime();
                                    dv = window.setInterval(function () {
                                        eO = new Date().getTime();
                                        var x = eO - fr;
                                        if (x > 500) {
                                            var input = document.getElementById(R.settings.aQ.settings.id);
                                            var fK = setInterval(function () {
                                                if (R.settings.hasMap == 1) {
                                                    R.settings.aQ.bu = R.settings.aQ.bu.substr(0, R.settings.aQ.bu.length - 1);
                                                }
                                                R.settings.aQ.bg -= 1;
                                                if (R.settings.aQ.bg < 0) R.settings.aQ.bg = 0;
                                                if (R.settings.aQ.bg == 0) R.settings.aQ.asm = [""];
                                                if (R.settings.aQ.bg == 1) R.settings.aQ.bsm = [""];
                                                if (R.settings.aQ.bg == 2) R.settings.aQ.csm = [""];
                                                if (R.settings.aQ.bg == 3) R.settings.aQ.dsm = [""];
                                                if (R.settings.aQ.bg == 4) R.settings.aQ.esm = [""];
                                                if (R.settings.aQ.bg == 5) R.settings.aQ.fsm = [""];
                                                if (R.settings.aQ.bg == 6) R.settings.aQ.gsm = [""];
                                                if (R.settings.aQ.bg == 7) R.settings.aQ.hsm = [""];
                                                if (R.settings.aQ.bg == 8) R.settings.aQ.ism = [""];
                                                if (R.settings.aQ.bg == 9) R.settings.aQ.jsm = [""];
                                                if (R.settings.aQ.bg == 10) R.settings.aQ.ksm = [""];
                                                if (R.settings.aQ.bg == 11) R.settings.aQ.lsm = [""];
                                                if (R.settings.aQ.bg == 12) R.settings.aQ.msm = [""];
                                                if (R.settings.aQ.bg == 13) R.settings.aQ.nsm = [""];
                                                if (R.settings.aQ.bg == 14) R.settings.aQ.osm = [""];
                                                if (R.settings.aQ.bg == 15) R.settings.aQ.psm = [""];
                                                if (R.settings.aQ.bg == 16) R.settings.aQ.qsm = [""];
                                                if (R.settings.aQ.bg == 17) R.settings.aQ.rsm = [""];
                                                if (R.settings.aQ.bg == 18) R.settings.aQ.ssm = [""];
                                                if (R.settings.aQ.bg == 19) R.settings.aQ.tsm = [""];
                                                if (R.settings.aQ.bg == 20) R.settings.aQ.usm = [""];
                                                if (R.settings.aQ.bg == 21) R.settings.aQ.vsm = [""];
                                                if (R.settings.aQ.bg == 22) R.settings.aQ.wsm = [""];
                                                if (R.settings.aQ.bg == 23) R.settings.aQ.xsm = [""];
                                                if (R.settings.aQ.bg == 24) R.settings.aQ.ysm = [""];
                                                if (R.settings.aQ.bg == 25) R.settings.aQ.zsm = [""];
                                                if (R.settings.aQ.bg == 26) R.settings.aQ.aasm = [""];
                                                if (R.settings.aQ.bg == 27) R.settings.aQ.bbsm = [""];
                                                if (R.settings.aQ.bg == 28) R.settings.aQ.ccsm = [""];
                                                if (R.settings.aQ.bg == 29) R.settings.aQ.ddsm = [""];
                                                input.value = input.value.substr(0, input.value.length - 1);
                                                if (R.settings.aQ.settings.jump == 1) {
                                                    R.settings.aQ.settings.del(R.settings.aQ.bg);
                                                }
                                            },
                                                50);
                                            av.push(fK);
                                            clearInterval(dv);
                                        }
                                    },
                                        1);
                                    e.preventDefault();
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name")) {
                                    del();
                                    e.preventDefault();
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1) {
                                    del();
                                    e.preventDefault();
                                    return false;
                                }
                            });
                    };
                    $("#" + aK).on("touchend",
                        function (e) {
                            if (aK == "kb_p_CLOSE" && (R.settings.pressStatus == 1 || R.settings.pressStatus == 2)) {
                                setTimeout(function () {
                                    call(BL.SV + "/shuzi_2.svg");
                                },
                                    100);
                            };
                        });
                    $("#" + aK).on("touchstart",
                        function (e) {
                            var key = this.innerText;
                            BL.WH = $(window).height();
                            if (aK != "kb_p_D") {
                                if (aK == "kb_p_CLOSE" && BL.double == 0) {
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        call(BL.SV + "/shuzi_1.svg");
                                    };
                                    if (BL.fixed == "") {
                                        $("body").css({
                                            position: "relative",
                                            left: 0,
                                            top: 0,
                                            dQ: "all 0.3s"
                                        });
                                    } else {
                                        $("body").css({
                                            position: "relative",
                                            left: 0,
                                            top: 0,
                                            dQ: "all 0.3s"
                                        });
                                        $("#" + BL.fixed).css({
                                            bottom: 0 + "px",
                                            dQ: "all 0.3s"
                                        });
                                    };
                                    setTimeout(function () {
                                        PH.s_n();
                                        PH.add++;
                                        PH.cs = 1;
                                        R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    },
                                        50);
                                    $(aY).removeClass("pwdkeyboard").addClass("pwdkeyboardout");
                                    document.querySelector(aY).addEventListener("webkitAnimationEnd", R.cf, false);
                                    document.querySelector(aY).addEventListener("animationEnd", R.cf, false);
                                    event = 1;
                                    e.preventDefault();
                                };
                            };
                        });
                }
                if (pU.test(aK)) {
                    function del2() {
                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                            setTimeout(function () {
                                var url = BL.SV + "/quanDEL.svg";
                                var img = new Image;
                                img.src = url;
                                img.onload = function () {
                                    $("#kb_c_D").css({
                                        backgroundImage: 'url(' + BL.SV + '/quanDEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                    $("#kb_c_D>div").css({
                                        backgroundImage: 'url(' + BL.SV + '/DEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                }
                            },
                                100);
                        }
                        clearInterval(dv);
                        for (var bG = 0; bG < av.length; bG++) {
                            clearInterval(av[bG]);
                        }
                        av = [];
                        var input = document.getElementById(R.settings.aQ.settings.id);
                        var dO = "";
                        if (R.settings.hasMap == 1) {
                            for (var i = 0; i < R.settings.aQ.bu.length; i++) {
                                dO += "*";
                            };
                        } else {
                            for (var i = 0; i < R.settings.aQ.bg; i++) {
                                dO += "*";
                            };
                        }
                        if (R.settings.aQ.settings.displayMode == 1) {
                            var fq = R.settings.aQ;
                            if (R.settings.aQ.bg == 0) {
                                input.value = "";
                            } else {
                                input.value = (fq.asm + fq.bsm + fq.csm + fq.dsm + fq.esm + fq.fsm + fq.gsm + fq.hsm + fq.ism + fq.jsm + fq.ksm + fq.lsm + fq.msm + fq.nsm + fq.osm + fq.psm + fq.qsm + fq.rsm + fq.ssm + fq.tsm + fq.usm + fq.vsm + fq.wsm + fq.xsm + fq.ysm + fq.zsm + fq.aasm + fq.bbsm + fq.ccsm + fq.ddsm).substring(0, fq.bg)
                            }
                        } else {
                            input.value = dO;
                        };
                        BL.double = 0;
                    };
                    if ((aK != "kb_c_D") && (aK != "kb_c_CLOSE") && (aK != "kb_c_CAP")) {
                        var zJ = 1;
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    var key = this.innerText;
                                    clearTimeout(BL.FD);
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    BL.double = 1;
                                    $(".fd").eq(0).remove();
                                    if (/_SPACE/i.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            var url = BL.SV + "/space_2.svg";
                                            var img = new Image;
                                            img.src = url;
                                            img.onload = function () {
                                                $(".anxia").css({
                                                    background: "url(" + BL.SV + "/anjian.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $("#char_keyboard div").removeClass("anxia");
                                                $("#kb_c_SPACE").css({
                                                    backgroundImage: 'url(' + BL.SV + '/space_2.svg' + ')',
                                                    backgroundSize: "100% 100%"
                                                });
                                            }
                                        }
                                    } else if (/_N/.test(aK) || /_C/.test(aK) || /_S/.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            call(BL.SV + "/123_2.svg");
                                        }
                                    } else {
                                        if (R.settings.pressStatus == 1) {
                                            var cc = $(this);
                                            var Html = $(this).html();
                                            cc.append($("<div class='fd'></div>"));
                                            cc.css({
                                                position: "relative"
                                            });
                                            if (cc.hasClass("rowleft")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_left.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        backgroundSize: "100% 100%",
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        left: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.23 + "px"
                                                    });
                                                }
                                            } else if (cc.hasClass("rowright")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_right.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        backgroundSize: "100% 100%",
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        right: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.23 + "px"
                                                    });
                                                }
                                            } else {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        backgroundSize: "100% 100%",
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        left: "-20%",
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.23 + "px"
                                                    });
                                                }
                                            }
                                        } else if (R.settings.pressStatus == 2) {
                                            var url = BL.SV + "/anjian_2.svg";
                                            var img = new Image;
                                            img.src = url;
                                            img.onload = function () {
                                                $(".anxia").css({
                                                    background: "url(" + BL.SV + "/anjian.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $("#char_keyboard div").removeClass("anxia");
                                                $("#" + aK).addClass("anxia");
                                                $("#" + aK).css({
                                                    backgroundImage: 'url(' + BL.SV + '/anjian_2.svg' + ')',
                                                    backgroundSize: "100% 100%"
                                                });
                                            }
                                        }
                                    }
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1 && BL.Mov == 0) {
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_N/.test(aK) || /_C/.test(aK) || /_S/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            100);
                                    } else {
                                        setTimeout(function () {
                                            $(".fd").eq(0).remove();
                                        },
                                            100);
                                        call(BL.SV + "/anjian.svg");
                                        if (!R.caps && R.shift) {
                                            setTimeout(function () {
                                                $("#char_keyboard").contents("div").filter(function () {
                                                    $(this).contents("div").filter(function () {
                                                        var c = $(this).text();
                                                        if (c.length == 1) {
                                                            this.innerText = c.toLowerCase();
                                                        } else if (2 <= c.length && c.length <= 3) {
                                                            this.innerText = c.substring(0, 1).toLowerCase();
                                                        }
                                                    });
                                                });
                                            },
                                                100);
                                            if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                                $("#kb_c_CAP").css({
                                                    background: "url(" + BL.SV + "/shift_H.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                            } else {
                                                $("#kb_c_CAP").css({
                                                    background: "url(" + BL.SV + "/shift.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                            }
                                        };
                                        R.shift = false;
                                        if (R.settings.chaosMode == 2 && event == 0 && BL.Mov == 0) {
                                            var aN = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'];
                                            aN = R.gC(aN, R.caps);
                                            var au = $("#char_keyboard")[0].querySelectorAll(".row1pwd,.row2pwd,.row3pwdb");
                                            setTimeout(function () {
                                                for (var j = 0; j < au.length; j++) {
                                                    au[j].innerHTML = aN[j];
                                                }
                                            },
                                                100)
                                        }
                                    };
                                    BL.once = 1;
                                    BL.Mov = 1;
                                    BL.double = 0;
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    BL.double = 0;
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_N/.test(aK) || /_C/.test(aK) || /_S/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            100);
                                    } else {
                                        BL.FD = setTimeout(function () {
                                            $(".fd").eq(0).remove();
                                        },
                                            100);
                                        setTimeout(function () {
                                            call(BL.SV + "/anjian.svg");
                                        },
                                            100);
                                    };
                                }
                                e.preventDefault();
                            });
                    } else if (aK == "kb_c_D") {
                        var key = this.innerText;
                        var dv;
                        var av = [];
                        var event = 2;
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    BL.double = 1;
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    var key = this.innerText;
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        $(".anxia").css({
                                            background: "url(" + BL.SV + "/anjian.svg) ",
                                            backgroundSize: "100% 100%"
                                        });
                                        $("#char_keyboard div").removeClass("anxia");
                                        var url = BL.SV + "/quanDEL_2.svg";
                                        var img = new Image;
                                        img.src = url;
                                        img.onload = function () {
                                            $("#kb_c_D").css({
                                                backgroundImage: 'url(' + BL.SV + '/quanDEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                            $("#kb_c_D>div").css({
                                                backgroundImage: 'url(' + BL.SV + '/DEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                        }
                                    }
                                    fr = new Date().getTime();
                                    dv = window.setInterval(function () {
                                        eO = new Date().getTime();
                                        var x = eO - fr;
                                        if (x > 500) {
                                            var input = document.getElementById(R.settings.aQ.settings.id);
                                            var fK = setInterval(function () {
                                                if (R.settings.hasMap == 1) {
                                                    R.settings.aQ.bu = R.settings.aQ.bu.substr(0, R.settings.aQ.bu.length - 1);
                                                };
                                                R.settings.aQ.bg -= 1;
                                                if (R.settings.aQ.bg < 0) R.settings.aQ.bg = 0;
                                                if (R.settings.aQ.bg == 0) R.settings.aQ.asm = [""];
                                                if (R.settings.aQ.bg == 1) R.settings.aQ.bsm = [""];
                                                if (R.settings.aQ.bg == 2) R.settings.aQ.csm = [""];
                                                if (R.settings.aQ.bg == 3) R.settings.aQ.dsm = [""];
                                                if (R.settings.aQ.bg == 4) R.settings.aQ.esm = [""];
                                                if (R.settings.aQ.bg == 5) R.settings.aQ.fsm = [""];
                                                if (R.settings.aQ.bg == 6) R.settings.aQ.gsm = [""];
                                                if (R.settings.aQ.bg == 7) R.settings.aQ.hsm = [""];
                                                if (R.settings.aQ.bg == 8) R.settings.aQ.ism = [""];
                                                if (R.settings.aQ.bg == 9) R.settings.aQ.jsm = [""];
                                                if (R.settings.aQ.bg == 10) R.settings.aQ.ksm = [""];
                                                if (R.settings.aQ.bg == 11) R.settings.aQ.lsm = [""];
                                                if (R.settings.aQ.bg == 12) R.settings.aQ.msm = [""];
                                                if (R.settings.aQ.bg == 13) R.settings.aQ.nsm = [""];
                                                if (R.settings.aQ.bg == 14) R.settings.aQ.osm = [""];
                                                if (R.settings.aQ.bg == 15) R.settings.aQ.psm = [""];
                                                if (R.settings.aQ.bg == 16) R.settings.aQ.qsm = [""];
                                                if (R.settings.aQ.bg == 17) R.settings.aQ.rsm = [""];
                                                if (R.settings.aQ.bg == 18) R.settings.aQ.ssm = [""];
                                                if (R.settings.aQ.bg == 19) R.settings.aQ.tsm = [""];
                                                if (R.settings.aQ.bg == 20) R.settings.aQ.usm = [""];
                                                if (R.settings.aQ.bg == 21) R.settings.aQ.vsm = [""];
                                                if (R.settings.aQ.bg == 22) R.settings.aQ.wsm = [""];
                                                if (R.settings.aQ.bg == 23) R.settings.aQ.xsm = [""];
                                                if (R.settings.aQ.bg == 24) R.settings.aQ.ysm = [""];
                                                if (R.settings.aQ.bg == 25) R.settings.aQ.zsm = [""];
                                                if (R.settings.aQ.bg == 26) R.settings.aQ.aasm = [""];
                                                if (R.settings.aQ.bg == 27) R.settings.aQ.bbsm = [""];
                                                if (R.settings.aQ.bg == 28) R.settings.aQ.ccsm = [""];
                                                if (R.settings.aQ.bg == 29) R.settings.aQ.ddsm = [""];
                                                input.value = input.value.substr(0, input.value.length - 1);
                                                if (R.settings.aQ.settings.jump == 1) {
                                                    R.settings.aQ.settings.del(R.settings.aQ.bg);
                                                }
                                            },
                                                50);
                                            av.push(fK);
                                            clearInterval(dv);
                                        }
                                    },
                                        1);
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH) {
                                    del2();
                                }
                                e.preventDefault();
                                return false;
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    del2();
                                    BL.Mov = 1;
                                    e.preventDefault();
                                    return false;
                                }
                            });
                    }
                    if (aK == "kb_c_CAP") {
                        function CAPtap() {
                            if (!R.dt) {
                                if (R.caps) {
                                    R.caps = false;
                                    R.shift = false;
                                    if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                        call(BL.SV + "/shift_H.svg");
                                    } else {
                                        call(BL.SV + "/shift.svg");
                                    }
                                } else {
                                    if (R.shift) {
                                        R.shift = false;
                                        if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                            call(BL.SV + "/shift_H.svg");
                                        } else {
                                            call(BL.SV + "/shift.svg");
                                        }
                                    } else {
                                        R.shift = true;
                                        if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                            call(BL.SV + "/shift_D_H.svg");
                                        } else {
                                            call(BL.SV + "/shift_D.svg");
                                        }
                                    }
                                    if (R.caps) {
                                        R.caps = false;
                                        if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                            call(BL.SV + "/shift_H.svg");
                                        } else {
                                            call(BL.SV + "/shift.svg");
                                        }
                                    }
                                }
                            } else {
                                R.dt = false;
                            }
                            if (R.caps || R.shift) {
                                $("#char_keyboard").contents("div").filter(function () {
                                    $(this).contents("div").filter(function () {
                                        var c = this.innerText;
                                        if (c.length == 1) {
                                            this.innerText = c.toUpperCase();
                                        } else if (2 <= c.length && c.length <= 3) {
                                            this.innerText = c.substring(0, 1).toUpperCase();
                                        }
                                    });
                                });
                            } else {
                                $("#char_keyboard").contents("div").filter(function () {
                                    $(this).contents("div").filter(function () {
                                        var c = this.innerText;
                                        if (c.length == 1) {
                                            this.innerText = c.toLowerCase();
                                        } else if (2 <= c.length && c.length <= 3) {
                                            this.innerText = c.substring(0, 1).toLowerCase();
                                        }
                                    });
                                });
                            }
                            $(".fd").remove();
                            var now = new Date().getTime();
                            var lv = $(this).data('lastTouch') || now + 1;
                            var nr = now - lv;
                            if (nr < 600 && nr > 0) {
                                R.caps = true;
                                if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                    call(BL.SV + "/shift_DS_H.svg");
                                } else {
                                    call(BL.SV + "/shift_DS.svg");
                                }
                                $("#char_keyboard").contents("div").filter(function () {
                                    $(this).contents("div").filter(function () {
                                        var c = this.innerText;
                                        if (c.length == 1) {
                                            this.innerText = c.toUpperCase();
                                        }
                                    });
                                });
                            } else {
                                $(this).data('lastTouch', now);
                            }
                            BL.double = 0;
                        };
                        $("#" + aK).on('touchstart',
                            function (event) {
                                if (BL.double == 0) {
                                    BL.double = 1;
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    var key = this.innerText;
                                    BL.key2 = $(this).attr("data-name");
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH && BL.Mov == 0) {
                                    if (!R.dt) {
                                        if (R.caps) {
                                            R.caps = false;
                                            R.shift = false;
                                            if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                                call(BL.SV + "/shift_H.svg");
                                            } else {
                                                call(BL.SV + "/shift.svg");
                                            }
                                        } else {
                                            if (R.shift) {
                                                R.shift = false;
                                                if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                                    call(BL.SV + "/shift_H.svg");
                                                } else {
                                                    call(BL.SV + "/shift.svg");
                                                }
                                            } else {
                                                R.shift = true;
                                                if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                                    call(BL.SV + "/shift_D_H.svg");
                                                } else {
                                                    call(BL.SV + "/shift_D.svg");
                                                }
                                            }
                                            if (R.caps) {
                                                R.caps = false;
                                                if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                                    call(BL.SV + "/shift_H.svg");
                                                } else {
                                                    call(BL.SV + "/shift.svg");
                                                }
                                            }
                                        }
                                    } else {
                                        R.dt = false;
                                    }
                                    if (R.caps || R.shift) {
                                        $("#char_keyboard").contents("div").filter(function () {
                                            $(this).contents("div").filter(function () {
                                                var c = this.innerText;
                                                if (c.length == 1) {
                                                    this.innerText = c.toUpperCase();
                                                } else if (2 <= c.length && c.length <= 3) {
                                                    this.innerText = c.substring(0, 1).toUpperCase();
                                                }
                                            });
                                        });
                                    } else {
                                        $("#char_keyboard").contents("div").filter(function () {
                                            $(this).contents("div").filter(function () {
                                                var c = this.innerText;
                                                if (c.length == 1) {
                                                    this.innerText = c.toLowerCase();
                                                } else if (2 <= c.length && c.length <= 3) {
                                                    this.innerText = c.substring(0, 1).toLowerCase();
                                                }
                                            });
                                        });
                                    }
                                    BL.double = 0;
                                    BL.once = 1;
                                    BL.Mov = 1;
                                }
                                e.preventDefault();
                                return false;
                            });
                        $("#" + aK).on('touchend',
                            function (event) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    CAPtap();
                                    BL.Mov = 1;
                                }
                            });
                        event = 7;
                    }
                    $("#" + aK).on("touchend",
                        function (e) {
                            if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                if (aK != "kb_c_D" && aK != "kb_c_SPACE" && aK != "kb_c_CLOSE" && aK != "kb_c_CAP" && aK != "kb_c_N") {
                                    if (!R.caps && R.shift) {
                                        setTimeout(function () {
                                            $("#char_keyboard").contents("div").filter(function () {
                                                $(this).contents("div").filter(function () {
                                                    var c = $(this).text();
                                                    if (c.length == 1) {
                                                        this.innerText = c.toLowerCase();
                                                    } else if (2 <= c.length && c.length <= 3) {
                                                        this.innerText = c.substring(0, 1).toLowerCase();
                                                    }
                                                });
                                            });
                                        },
                                            100);
                                        if ((R.orientation() == 90) || (R.orientation() == -90)) {
                                            $("#kb_c_CAP").css({
                                                background: "url(" + BL.SV + "/shift_H.svg) ",
                                                backgroundSize: "100% 100%"
                                            });
                                        } else {
                                            $("#kb_c_CAP").css({
                                                background: "url(" + BL.SV + "/shift.svg) ",
                                                backgroundSize: "100% 100%"
                                            });
                                        }
                                    };
                                    R.shift = false;
                                }
                                if (aK == "kb_c_N") {
                                    setTimeout(function () {
                                        $("#char_keyboard").css("display", "none");
                                        $("#number_keyboard").css("display", "block");
                                        $("#symble_keyboard").css("display", "none");
                                        $("#purenumber_keyboard").css("display", "none");
                                        justic3();
                                    },
                                        80)
                                }
                                if (aK == "kb_c_CLOSE" && (R.settings.pressStatus == 1 || R.settings.pressStatus == 2)) {
                                    setTimeout(function () {
                                        call(BL.SV + "/123.svg");
                                    },
                                        100);
                                }
                                if (R.settings.chaosMode == 2 && event == 0 && BL.Mov == 0) {
                                    var aN = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'];
                                    aN = R.gC(aN, R.caps);
                                    var au = $("#char_keyboard")[0].querySelectorAll(".row1pwd,.row2pwd,.row3pwdb");
                                    setTimeout(function () {
                                        for (var j = 0; j < au.length; j++) {
                                            au[j].innerHTML = aN[j];
                                        }
                                    },
                                        100)
                                }
                                BL.Mov = 1;
                            }
                        });
                    $("#" + aK).on("touchstart",
                        function (e) {
                            BL.WH = $(window).height();
                            var key = this.innerText;
                            if (aK != "kb_c_D") {
                                if (aK == "kb_c_SPACE") {
                                    return;
                                } else if (aK == "kb_c_CLOSE" && BL.double == 0) {
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        call(BL.SV + "/123_2.svg");
                                    };
                                    if (BL.fixed == "") {
                                        $("body").css({
                                            position: "relative",
                                            left: 0,
                                            top: 0,
                                            dQ: "all 0.3s"
                                        });
                                    } else {
                                        $("body").css({
                                            position: "relative",
                                            left: 0,
                                            top: 0,
                                            dQ: "all 0.3s"
                                        });
                                        $("#" + BL.fixed).css({
                                            bottom: 0 + "px",
                                            dQ: "all 0.3s"
                                        });
                                    };
                                    $(aY).removeClass("pwdkeyboard").addClass("pwdkeyboardout");
                                    document.querySelector(aY).addEventListener("webkitAnimationEnd", R.cf, false);
                                    document.querySelector(aY).addEventListener("animationEnd", R.cf, false);
                                    event = 1;
                                    setTimeout(function () {
                                        PH.s_n();
                                        PH.add++;
                                        PH.cs = 1;
                                        R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    },
                                        80)
                                }
                                e.preventDefault();
                            }
                        });
                }
                if (oq.test(aK)) {
                    function del3() {
                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                            setTimeout(function () {
                                var url = BL.SV + "/quanDEL.svg";
                                var img = new Image;
                                img.src = url;
                                img.onload = function () {
                                    $("#kb_n_D").css({
                                        backgroundImage: 'url(' + BL.SV + '/quanDEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                    $("#kb_n_D>div").css({
                                        backgroundImage: 'url(' + BL.SV + '/DEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                }
                            },
                                80);
                        }
                        clearInterval(dv);
                        for (var bG = 0; bG < av.length; bG++) {
                            clearInterval(av[bG]);
                        }
                        av = [];
                        var input = document.getElementById(R.settings.aQ.settings.id);
                        var dO = "";
                        if (R.settings.hasMap == 1) {
                            for (var i = 0; i < R.settings.aQ.bu.length; i++) {
                                dO += "*";
                            };
                        } else {
                            for (var i = 0; i < R.settings.aQ.bg; i++) {
                                dO += "*";
                            };
                        }
                        if (R.settings.aQ.settings.displayMode == 1) {
                            var fq = R.settings.aQ;
                            if (R.settings.aQ.bg == 0) {
                                input.value = "";
                            } else {
                                input.value = (fq.asm + fq.bsm + fq.csm + fq.dsm + fq.esm + fq.fsm + fq.gsm + fq.hsm + fq.ism + fq.jsm + fq.ksm + fq.lsm + fq.msm + fq.nsm + fq.osm + fq.psm + fq.qsm + fq.rsm + fq.ssm + fq.tsm + fq.usm + fq.vsm + fq.wsm + fq.xsm + fq.ysm + fq.zsm + fq.aasm + fq.bbsm + fq.ccsm + fq.ddsm).substring(0, fq.bg)
                            }
                        } else {
                            input.value = dO;
                        };
                        BL.double = 0;
                    };
                    if ((aK != "kb_n_D") && (aK != "kb_n_CLOSE")) {
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    var key = this.innerText;
                                    clearTimeout(BL.FD);
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    BL.double = 1;
                                    $(".fd").eq(0).remove();
                                    if (/_SPACE/i.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            var url = BL.SV + "/space_2.svg";
                                            var img = new Image;
                                            img.src = url;
                                            img.onload = function () {
                                                $(".anxia").css({
                                                    background: "url(" + BL.SV + "/anjian.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $(".anxia5").css({
                                                    background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $("#number_keyboard div").removeClass("anxia");
                                                $("#kb_n_SPACE").css({
                                                    backgroundImage: 'url(' + BL.SV + '/space_2.svg' + ')',
                                                    backgroundSize: "100% 100%"
                                                });
                                            }
                                        }
                                    } else if (/_C/.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            call(BL.SV + "/123_2.svg");
                                        }
                                    } else if (/_S/.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            call(BL.SV + "/quanDEL_2.svg");
                                        }
                                    } else {
                                        if (R.settings.pressStatus == 1) {
                                            var cc = $(this);
                                            var Html = $(this).html();
                                            cc.append($("<div class='fd'></div>"));
                                            cc.css({
                                                position: "relative"
                                            });
                                            if (cc.hasClass("rowleft")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_left.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        backgroundSize: "100% 100%",
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        left: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.19 + "px"
                                                    });
                                                }
                                            } else if (cc.hasClass("rowright")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_right.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        backgroundSize: "100% 100%",
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        right: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.19 + "px"
                                                    });
                                                }
                                            } else {
                                                if ($("#" + aK).hasClass("row3pwdd")) {
                                                    var img = new Image;
                                                    img.src = BL.SV + '/dianji.svg';
                                                    img.onload = function () {
                                                        $(".fd").eq(0).html(Html);
                                                        $(".fd").eq(0).css({
                                                            backgroundImage: 'url(' + img.src + ')',
                                                            position: "absolute",
                                                            width: "150%",
                                                            height: aE * 0.4 + "px",
                                                            left: "-25%",
                                                            bottom: "0px",
                                                            textAlign: "center",
                                                            fontSize: "1.5em",
                                                            zIndex: "999",
                                                            lineHeight: aE * 0.19 + "px",
                                                            backgroundSize: "100% 100%"
                                                        });
                                                    }
                                                } else {
                                                    var img = new Image;
                                                    img.src = BL.SV + '/dianji.svg';
                                                    img.onload = function () {
                                                        $(".fd").eq(0).html(Html);
                                                        $(".fd").eq(0).css({
                                                            backgroundImage: 'url(' + img.src + ')',
                                                            position: "absolute",
                                                            width: "140%",
                                                            height: aE * 0.4 + "px",
                                                            left: "-20%",
                                                            bottom: "0px",
                                                            textAlign: "center",
                                                            fontSize: "1.5em",
                                                            zIndex: "999",
                                                            lineHeight: aE * 0.19 + "px",
                                                            backgroundSize: "100% 100%"
                                                        });
                                                    }
                                                }
                                            }
                                        } else if (R.settings.pressStatus == 2) {
                                            if ($("#" + aK).hasClass("row3pwdd")) {
                                                var url = BL.SV + "/quanDEL.svg";
                                                var img = new Image;
                                                img.src = url;
                                                img.onload = function () {
                                                    $(".anxia").css({
                                                        background: "url(" + BL.SV + "/anjian.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $(".anxia5").css({
                                                        background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $("#number_keyboard div").removeClass("anxia");
                                                    $("#number_keyboard div").removeClass("anxia5");
                                                    $("#" + aK).addClass("anxia5");
                                                    $("#" + aK).css({
                                                        backgroundImage: 'url(' + BL.SV + '/quanDEL.svg' + ')',
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            } else {
                                                var url = BL.SV + "/anjian_2.svg";
                                                var img = new Image;
                                                img.src = url;
                                                img.onload = function () {
                                                    $(".anxia").css({
                                                        background: "url(" + BL.SV + "/anjian.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $(".anxia5").css({
                                                        background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $("#number_keyboard div").removeClass("anxia");
                                                    $("#number_keyboard div").removeClass("anxia5");
                                                    $("#" + aK).addClass("anxia");
                                                    $("#" + aK).css({
                                                        backgroundImage: 'url(' + BL.SV + '/anjian_2.svg' + ')',
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            }
                                        }
                                    }
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1 && BL.Mov == 0) {
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_C/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            80);
                                    } else if (/_S/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/quanDEL.svg");
                                        },
                                            80);
                                    } else {
                                        if ($("#" + aK).hasClass("row3pwdd")) {
                                            call(BL.SV + "/quanDEL_2.svg");
                                        } else {
                                            call(BL.SV + "/anjian.svg");
                                        }
                                        BL.FD = setTimeout(function () {
                                            $(".fd").remove();
                                        },
                                            100);
                                    };
                                    if (e.target.className.indexOf("chg") > -1) {
                                        if (R.settings.chaosMode == 2 && event == 0) {
                                            var aN = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
                                            aN = R.gC(aN);
                                            var bY = [];
                                            var au = $("#number_keyboard > .row1")[0].querySelectorAll(".row1pwd");
                                            setTimeout(function () {
                                                for (var j = 0,
                                                    i = 0; j < au.length; j++) {
                                                    if (au[j].id == "kb_n_CLOSE" || au[j].id == "kb_n_D") continue;
                                                    i++;
                                                    bY.push(au[j]);
                                                }
                                                for (var j = 0; j < bY.length; j++) {
                                                    bY[j].innerHTML = aN[j];
                                                }
                                            },
                                                100)
                                        }
                                    };
                                    BL.once = 1;
                                    BL.Mov = 1;
                                    BL.double = 0;
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    BL.double = 0;
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_C/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            80);
                                    } else if (/_S/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/quanDEL.svg");
                                        },
                                            80);
                                    } else {
                                        setTimeout(function () {
                                            if ($("#" + aK).hasClass("row3pwdd")) {
                                                call(BL.SV + "/quanDEL_2.svg");
                                            } else {
                                                call(BL.SV + "/anjian.svg");
                                            }
                                        },
                                            100);
                                        BL.FD = setTimeout(function () {
                                            $(".fd").remove();
                                        },
                                            100);
                                    };
                                    e.preventDefault();
                                }
                            });
                    } else if (aK == "kb_n_D") {
                        var key = this.innerText;
                        var event = 2;
                        var dv;
                        var av = [];
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    BL.double = 1;
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    var key = this.innerText;
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        $(".anxia").css({
                                            background: "url(" + BL.SV + "/anjian.svg) ",
                                            backgroundSize: "100% 100%"
                                        });
                                        $(".anxia5").css({
                                            background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                            backgroundSize: "100% 100%"
                                        });
                                        $("#number_keyboard div").removeClass("anxia");
                                        var url = BL.SV + "/quanDEL_2.svg";
                                        var img = new Image;
                                        img.src = url;
                                        img.onload = function () {
                                            $("#kb_n_D").css({
                                                backgroundImage: 'url(' + BL.SV + '/quanDEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                            $("#kb_n_D>div").css({
                                                backgroundImage: 'url(' + BL.SV + '/DEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                        }
                                    }
                                    fr = new Date().getTime();
                                    dv = window.setInterval(function () {
                                        eO = new Date().getTime();
                                        var x = eO - fr;
                                        if (x > 500) {
                                            var input = document.getElementById(R.settings.aQ.settings.id);
                                            var fK = setInterval(function () {
                                                if (R.settings.hasMap == 1) {
                                                    R.settings.aQ.bu = R.settings.aQ.bu.substr(0, R.settings.aQ.bu.length - 1);
                                                }
                                                R.settings.aQ.bg -= 1;
                                                if (R.settings.aQ.bg < 0) R.settings.aQ.bg = 0;
                                                if (R.settings.aQ.bg == 0) R.settings.aQ.asm = [""];
                                                if (R.settings.aQ.bg == 1) R.settings.aQ.bsm = [""];
                                                if (R.settings.aQ.bg == 2) R.settings.aQ.csm = [""];
                                                if (R.settings.aQ.bg == 3) R.settings.aQ.dsm = [""];
                                                if (R.settings.aQ.bg == 4) R.settings.aQ.esm = [""];
                                                if (R.settings.aQ.bg == 5) R.settings.aQ.fsm = [""];
                                                if (R.settings.aQ.bg == 6) R.settings.aQ.gsm = [""];
                                                if (R.settings.aQ.bg == 7) R.settings.aQ.hsm = [""];
                                                if (R.settings.aQ.bg == 8) R.settings.aQ.ism = [""];
                                                if (R.settings.aQ.bg == 9) R.settings.aQ.jsm = [""];
                                                if (R.settings.aQ.bg == 10) R.settings.aQ.ksm = [""];
                                                if (R.settings.aQ.bg == 11) R.settings.aQ.lsm = [""];
                                                if (R.settings.aQ.bg == 12) R.settings.aQ.msm = [""];
                                                if (R.settings.aQ.bg == 13) R.settings.aQ.nsm = [""];
                                                if (R.settings.aQ.bg == 14) R.settings.aQ.osm = [""];
                                                if (R.settings.aQ.bg == 15) R.settings.aQ.psm = [""];
                                                if (R.settings.aQ.bg == 16) R.settings.aQ.qsm = [""];
                                                if (R.settings.aQ.bg == 17) R.settings.aQ.rsm = [""];
                                                if (R.settings.aQ.bg == 18) R.settings.aQ.ssm = [""];
                                                if (R.settings.aQ.bg == 19) R.settings.aQ.tsm = [""];
                                                if (R.settings.aQ.bg == 20) R.settings.aQ.usm = [""];
                                                if (R.settings.aQ.bg == 21) R.settings.aQ.vsm = [""];
                                                if (R.settings.aQ.bg == 22) R.settings.aQ.wsm = [""];
                                                if (R.settings.aQ.bg == 23) R.settings.aQ.xsm = [""];
                                                if (R.settings.aQ.bg == 24) R.settings.aQ.ysm = [""];
                                                if (R.settings.aQ.bg == 25) R.settings.aQ.zsm = [""];
                                                if (R.settings.aQ.bg == 26) R.settings.aQ.aasm = [""];
                                                if (R.settings.aQ.bg == 27) R.settings.aQ.bbsm = [""];
                                                if (R.settings.aQ.bg == 28) R.settings.aQ.ccsm = [""];
                                                if (R.settings.aQ.bg == 29) R.settings.aQ.ddsm = [""];
                                                input.value = input.value.substr(0, input.value.length - 1);
                                                if (R.settings.aQ.settings.jump == 1) {
                                                    R.settings.aQ.settings.del(R.settings.aQ.bg);
                                                }
                                            },
                                                50);
                                            av.push(fK);
                                            clearInterval(dv);
                                        }
                                    },
                                        1);
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH) {
                                    del3();
                                }
                                e.preventDefault();
                                return false;
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    del3();
                                    BL.Mov = 1;
                                    e.preventDefault();
                                    return false;
                                }
                            });
                    };
                    $("#" + aK).on("touchend",
                        function (e) {
                            if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                if (aK == "kb_n_CLOSE" && (R.settings.pressStatus == 1 || R.settings.pressStatus == 2)) {
                                    setTimeout(function () {
                                        call(BL.SV + "/123.svg");
                                    },
                                        80);
                                };
                                if (aK == "kb_n_S") {
                                    setTimeout(function () {
                                        $("#char_keyboard").css("display", "none");
                                        $("#number_keyboard").css("display", "none");
                                        $("#symble_keyboard").css("display", "block");
                                        $("#purenumber_keyboard").css("display", "none");
                                        justic3();
                                    },
                                        80);
                                };
                                if (aK == "kb_n_C") {
                                    setTimeout(function () {
                                        $("#char_keyboard").css("display", "block");
                                        $("#number_keyboard").css("display", "none");
                                        $("#symble_keyboard").css("display", "none");
                                        $("#purenumber_keyboard").css("display", "none");
                                        justic3();
                                    },
                                        80);
                                };
                                if (e.target.className.indexOf("chg") > -1) {
                                    if (R.settings.chaosMode == 2 && event == 0) {
                                        var aN = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
                                        aN = R.gC(aN);
                                        var bY = [];
                                        var au = $("#number_keyboard > .row1")[0].querySelectorAll(".row1pwd");
                                        setTimeout(function () {
                                            for (var j = 0,
                                                i = 0; j < au.length; j++) {
                                                if (au[j].id == "kb_n_CLOSE" || au[j].id == "kb_n_D") continue;
                                                i++;
                                                bY.push(au[j]);
                                            }
                                            for (var j = 0; j < bY.length; j++) {
                                                bY[j].innerHTML = aN[j];
                                            }
                                        },
                                            100)
                                    }
                                };
                                BL.Mov = 1;
                            }
                        });
                    $("#" + aK).on("touchstart",
                        function (e) {
                            BL.WH = $(window).height();
                            var key = this.innerText;
                            if (aK == "kb_n_SPACE") {
                                return;
                            } else if (aK == "kb_n_D") {
                                event = 2;
                            } else if (aK == "kb_n_CLOSE" && BL.double == 0) {
                                if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                    call(BL.SV + "/123_2.svg");
                                };
                                if (BL.fixed == "") {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0,
                                        dQ: "all 0.3s"
                                    });
                                } else {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0,
                                        dQ: "all 0.3s"
                                    });
                                    $("#" + BL.fixed).css({
                                        bottom: 0 + "px",
                                        dQ: "all 0.3s"
                                    });
                                };
                                $(aY).removeClass("pwdkeyboard").addClass("pwdkeyboardout");
                                document.querySelector(aY).addEventListener("webkitAnimationEnd", R.cf, false);
                                document.querySelector(aY).addEventListener("animationEnd", R.cf, false);
                                event = 1;
                                setTimeout(function () {
                                    PH.s_n();
                                    PH.add++;
                                    PH.cs = 1;
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                },
                                    80)
                            } else if (aK == "kb_n_S") {
                                event = 6;
                            } else if (aK == "kb_n_C") {
                                event = 5;
                            } else { }
                            e.preventDefault();
                        });
                }
                if (nV.test(aK)) {
                    function del4() {
                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                            setTimeout(function () {
                                var url = BL.SV + "/quanDEL.svg";
                                var img = new Image;
                                img.src = url;
                                img.onload = function () {
                                    $("#kb_s_D").css({
                                        backgroundImage: 'url(' + BL.SV + '/quanDEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                    $("#kb_s_D>div").css({
                                        backgroundImage: 'url(' + BL.SV + '/DEL.svg' + ')',
                                        backgroundSize: "100% 100%"
                                    });
                                }
                            },
                                80);
                        }
                        clearInterval(dv);
                        for (var bG = 0; bG < av.length; bG++) {
                            clearInterval(av[bG]);
                        }
                        av = [];
                        var input = document.getElementById(R.settings.aQ.settings.id);
                        var dO = "";
                        if (R.settings.hasMap == 1) {
                            for (var i = 0; i < R.settings.aQ.bu.length; i++) {
                                dO += "*";
                            };
                        } else {
                            for (var i = 0; i < R.settings.aQ.bg; i++) {
                                dO += "*";
                            };
                        }
                        if (R.settings.aQ.settings.displayMode == 1) {
                            var fq = R.settings.aQ;
                            if (R.settings.aQ.bg == 0) {
                                input.value = "";
                            } else {
                                input.value = (fq.asm + fq.bsm + fq.csm + fq.dsm + fq.esm + fq.fsm + fq.gsm + fq.hsm + fq.ism + fq.jsm + fq.ksm + fq.lsm + fq.msm + fq.nsm + fq.osm + fq.psm + fq.qsm + fq.rsm + fq.ssm + fq.tsm + fq.usm + fq.vsm + fq.wsm + fq.xsm + fq.ysm + fq.zsm + fq.aasm + fq.bbsm + fq.ccsm + fq.ddsm).substring(0, fq.bg)
                            }
                        } else {
                            input.value = dO;
                        };
                        BL.double = 0;
                    };
                    if ((aK != "kb_s_D") && (aK != "kb_s_CLOSE")) {
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    var key = this.innerText;
                                    clearTimeout(BL.FD);
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    BL.double = 1;
                                    $(".fd").remove();
                                    if (/_SPACE/i.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            var url = BL.SV + "/space_2.svg";
                                            var img = new Image;
                                            img.src = url;
                                            img.onload = function () {
                                                $(".anxia").css({
                                                    background: "url(" + BL.SV + "/anjian.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $(".anxia5").css({
                                                    background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                    backgroundSize: "100% 100%"
                                                });
                                                $("#symble_keyboard div").removeClass("anxia");
                                                $("#symble_keyboard div").removeClass("anxia5");
                                                $("#kb_s_SPACE").css({
                                                    backgroundImage: 'url(' + BL.SV + '/space_2.svg' + ')',
                                                    backgroundSize: "100% 100%"
                                                });
                                            }
                                        }
                                    } else if (/_C/.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            call(BL.SV + "/123_2.svg");
                                        }
                                    } else if (/_N/.test(aK)) {
                                        event = 7;
                                        if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                            call(BL.SV + "/quanDEL_2.svg");
                                        }
                                    } else {
                                        if (R.settings.pressStatus == 1) {
                                            var cc = $(this);
                                            var Html = $(this).html();
                                            cc.append($("<div class='fd'></div>"));
                                            cc.css({
                                                position: "relative"
                                            });
                                            if (cc.hasClass("rowleft")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_left.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        left: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.19 + "px",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            } else if (cc.hasClass("rowright")) {
                                                var img = new Image;
                                                img.src = BL.SV + '/dianji_right.svg';
                                                img.onload = function () {
                                                    $(".fd").eq(0).html(Html);
                                                    $(".fd").eq(0).css({
                                                        backgroundImage: 'url(' + img.src + ')',
                                                        position: "absolute",
                                                        width: "140%",
                                                        height: aE * 0.4 + "px",
                                                        right: 0,
                                                        bottom: "0px",
                                                        textAlign: "center",
                                                        fontSize: "1.5em",
                                                        zIndex: "999",
                                                        lineHeight: aE * 0.19 + "px",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            } else {
                                                if ($("#" + aK).hasClass("row3pwdd")) {
                                                    var img = new Image;
                                                    img.src = BL.SV + '/dianji.svg';
                                                    img.onload = function () {
                                                        $(".fd").eq(0).html(Html);
                                                        $(".fd").eq(0).css({
                                                            backgroundImage: 'url(' + img.src + ')',
                                                            position: "absolute",
                                                            width: "150%",
                                                            height: aE * 0.4 + "px",
                                                            left: "-25%",
                                                            bottom: "0px",
                                                            textAlign: "center",
                                                            fontSize: "1.5em",
                                                            zIndex: "999",
                                                            lineHeight: aE * 0.19 + "px",
                                                            backgroundSize: "100% 100%"
                                                        });
                                                    }
                                                } else {
                                                    var img = new Image;
                                                    img.src = BL.SV + '/dianji.svg';
                                                    img.onload = function () {
                                                        $(".fd").eq(0).html(Html);
                                                        $(".fd").eq(0).css({
                                                            backgroundImage: 'url(' + img.src + ')',
                                                            position: "absolute",
                                                            width: "140%",
                                                            height: aE * 0.4 + "px",
                                                            left: "-20%",
                                                            bottom: "0px",
                                                            textAlign: "center",
                                                            fontSize: "1.5em",
                                                            zIndex: "999",
                                                            lineHeight: aE * 0.19 + "px",
                                                            backgroundSize: "100% 100%"
                                                        });
                                                    }
                                                }
                                            }
                                        } else if (R.settings.pressStatus == 2) {
                                            if ($("#" + aK).hasClass("row3pwdd")) {
                                                var url = BL.SV + "/quanDEL.svg";
                                                var img = new Image;
                                                img.src = url;
                                                img.onload = function () {
                                                    $(".anxia").css({
                                                        background: "url(" + BL.SV + "/anjian.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $(".anxia5").css({
                                                        background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $("#symble_keyboard div").removeClass("anxia");
                                                    $("#symble_keyboard div").removeClass("anxia5");
                                                    $("#" + aK).addClass("anxia5");
                                                    $("#" + aK).css({
                                                        backgroundImage: 'url(' + BL.SV + '/quanDEL.svg' + ')',
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            } else {
                                                var url = BL.SV + "/anjian_2.svg";
                                                var img = new Image;
                                                img.src = url;
                                                img.onload = function () {
                                                    $(".anxia").css({
                                                        background: "url(" + BL.SV + "/anjian.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $(".anxia5").css({
                                                        background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                                        backgroundSize: "100% 100%"
                                                    });
                                                    $("#symble_keyboard div").removeClass("anxia");
                                                    $("#symble_keyboard div").removeClass("anxia5");
                                                    $("#" + aK).addClass("anxia");
                                                    $("#" + aK).css({
                                                        backgroundImage: 'url(' + BL.SV + '/anjian_2.svg' + ')',
                                                        backgroundSize: "100% 100%"
                                                    });
                                                }
                                            }
                                        }
                                    }
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1 && BL.Mov == 0) {
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_C/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            100);
                                    } else if (/_N/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/quanDEL.svg");
                                        },
                                            100);
                                    } else {
                                        if ($("#" + aK).hasClass("row3pwdd")) {
                                            call(BL.SV + "/quanDEL_2.svg");
                                        } else {
                                            call(BL.SV + "/anjian.svg");
                                        }
                                        BL.FD = setTimeout(function () {
                                            $(".fd").remove();
                                        },
                                            100);
                                    };
                                    BL.once = 1;
                                    BL.Mov = 1;
                                    BL.double = 0;
                                    e.preventDefault();
                                }
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    BL.double = 0;
                                    if (/_SPACE/i.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/space.svg");
                                        },
                                            100);
                                    } else if (/_C/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/123.svg");
                                        },
                                            100);
                                    } else if (/_N/.test(aK)) {
                                        setTimeout(function () {
                                            call(BL.SV + "/quanDEL.svg");
                                        },
                                            100);
                                    } else {
                                        setTimeout(function () {
                                            if ($("#" + aK).hasClass("row3pwdd")) {
                                                call(BL.SV + "/quanDEL_2.svg");
                                            } else {
                                                call(BL.SV + "/anjian.svg");
                                            }
                                        },
                                            100);
                                        BL.FD = setTimeout(function () {
                                            $(".fd").remove();
                                        },
                                            100);
                                    };
                                    e.preventDefault();
                                }
                            });
                    } else if (aK == "kb_s_D") {
                        var event = 2;
                        var dv;
                        var av = [];
                        $("#" + aK).on("touchstart",
                            function (e) {
                                if (BL.double == 0) {
                                    BL.double = 1;
                                    BL.once = 0;
                                    BL.Mov = 0;
                                    BL.key2 = $(this).attr("data-name");
                                    var key = this.innerText;
                                    if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                        $(".anxia").css({
                                            background: "url(" + BL.SV + "/anjian.svg) ",
                                            backgroundSize: "100% 100%"
                                        });
                                        $(".anxia5").css({
                                            background: "url(" + BL.SV + "/quanDEL_2.svg) ",
                                            backgroundSize: "100% 100%"
                                        });
                                        $("#symble_keyboard div").removeClass("anxia");
                                        $("#symble_keyboard div").removeClass("anxia5");
                                        var url = BL.SV + "/quanDEL_2.svg";
                                        var img = new Image;
                                        img.src = url;
                                        img.onload = function () {
                                            $("#kb_s_D").css({
                                                backgroundImage: 'url(' + BL.SV + '/quanDEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                            $("#kb_s_D>div").css({
                                                backgroundImage: 'url(' + BL.SV + '/DEL_2.svg' + ')',
                                                backgroundSize: "100% 100%"
                                            });
                                        }
                                    }
                                    fr = new Date().getTime();
                                    dv = window.setInterval(function () {
                                        eO = new Date().getTime();
                                        var x = eO - fr;
                                        if (x > 500) {
                                            var input = document.getElementById(R.settings.aQ.settings.id);
                                            var fK = setInterval(function () {
                                                if (R.settings.hasMap == 1) {
                                                    R.settings.aQ.bu = R.settings.aQ.bu.substr(0, R.settings.aQ.bu.length - 1);
                                                }
                                                R.settings.aQ.bg -= 1;
                                                if (R.settings.aQ.bg < 0) R.settings.aQ.bg = 0;
                                                if (R.settings.aQ.bg == 0) R.settings.aQ.asm = [""];
                                                if (R.settings.aQ.bg == 1) R.settings.aQ.bsm = [""];
                                                if (R.settings.aQ.bg == 2) R.settings.aQ.csm = [""];
                                                if (R.settings.aQ.bg == 3) R.settings.aQ.dsm = [""];
                                                if (R.settings.aQ.bg == 4) R.settings.aQ.esm = [""];
                                                if (R.settings.aQ.bg == 5) R.settings.aQ.fsm = [""];
                                                if (R.settings.aQ.bg == 6) R.settings.aQ.gsm = [""];
                                                if (R.settings.aQ.bg == 7) R.settings.aQ.hsm = [""];
                                                if (R.settings.aQ.bg == 8) R.settings.aQ.ism = [""];
                                                if (R.settings.aQ.bg == 9) R.settings.aQ.jsm = [""];
                                                if (R.settings.aQ.bg == 10) R.settings.aQ.ksm = [""];
                                                if (R.settings.aQ.bg == 11) R.settings.aQ.lsm = [""];
                                                if (R.settings.aQ.bg == 12) R.settings.aQ.msm = [""];
                                                if (R.settings.aQ.bg == 13) R.settings.aQ.nsm = [""];
                                                if (R.settings.aQ.bg == 14) R.settings.aQ.osm = [""];
                                                if (R.settings.aQ.bg == 15) R.settings.aQ.psm = [""];
                                                if (R.settings.aQ.bg == 16) R.settings.aQ.qsm = [""];
                                                if (R.settings.aQ.bg == 17) R.settings.aQ.rsm = [""];
                                                if (R.settings.aQ.bg == 18) R.settings.aQ.ssm = [""];
                                                if (R.settings.aQ.bg == 19) R.settings.aQ.tsm = [""];
                                                if (R.settings.aQ.bg == 20) R.settings.aQ.usm = [""];
                                                if (R.settings.aQ.bg == 21) R.settings.aQ.vsm = [""];
                                                if (R.settings.aQ.bg == 22) R.settings.aQ.wsm = [""];
                                                if (R.settings.aQ.bg == 23) R.settings.aQ.xsm = [""];
                                                if (R.settings.aQ.bg == 24) R.settings.aQ.ysm = [""];
                                                if (R.settings.aQ.bg == 25) R.settings.aQ.zsm = [""];
                                                if (R.settings.aQ.bg == 26) R.settings.aQ.aasm = [""];
                                                if (R.settings.aQ.bg == 27) R.settings.aQ.bbsm = [""];
                                                if (R.settings.aQ.bg == 28) R.settings.aQ.ccsm = [""];
                                                if (R.settings.aQ.bg == 29) R.settings.aQ.ddsm = [""];
                                                input.value = input.value.substr(0, input.value.length - 1);
                                                if (R.settings.aQ.settings.jump == 1) {
                                                    R.settings.aQ.settings.del(R.settings.aQ.bg);
                                                }
                                            },
                                                50);
                                            av.push(fK);
                                            clearInterval(dv);
                                        }
                                    },
                                        1);
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                    e.preventDefault();
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchmove",
                            function (e) {
                                var MH = e.originalEvent.changedTouches[0].clientY;
                                if (BL.WH <= MH + 1) {
                                    del4();
                                    e.preventDefault();
                                    return false;
                                }
                            });
                        $("#" + aK).on("touchend",
                            function (e) {
                                if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                    del4();
                                    BL.Mov = 1;
                                    e.preventDefault();
                                    return false;
                                }
                            });
                    };
                    $("#" + aK).on("touchend",
                        function (e) {
                            if (BL.key2 == $(this).attr("data-name") && BL.Mov == 0) {
                                if (aK == "kb_s_CLOSE" && (R.settings.pressStatus == 1 || R.settings.pressStatus == 2)) {
                                    setTimeout(function () {
                                        call(BL.SV + "/123.svg");
                                    },
                                        100);
                                };
                                if (aK == "kb_s_N") {
                                    setTimeout(function () {
                                        $("#char_keyboard").css("display", "none");
                                        $("#number_keyboard").css("display", "block");
                                        $("#symble_keyboard").css("display", "none");
                                        $("#purenumber_keyboard").css("display", "none");
                                        justic3();
                                    },
                                        80);
                                };
                                if (aK == "kb_s_C") {
                                    setTimeout(function () {
                                        $("#char_keyboard").css("display", "block");
                                        $("#number_keyboard").css("display", "none");
                                        $("#symble_keyboard").css("display", "none");
                                        $("#purenumber_keyboard").css("display", "none");
                                        justic3();
                                    },
                                        80);
                                }
                                BL.Mov = 1;
                            }
                        });
                    $("#" + aK).on("touchstart",
                        function (e) {
                            BL.WH = $(window).height();
                            var key = this.innerText;
                            if (aK == "kb_s_SPACE") {
                                return;
                            } else if (aK == "kb_s_D") {
                                event = 2;
                            } else if (aK == "kb_s_CLOSE" && BL.double == 0) {
                                if (R.settings.pressStatus == 1 || R.settings.pressStatus == 2) {
                                    call(BL.SV + "/123_2.svg");
                                };
                                if (BL.fixed == "") {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0,
                                        dQ: "all 0.3s"
                                    });
                                } else {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0,
                                        dQ: "all 0.3s"
                                    });
                                    $("#" + BL.fixed).css({
                                        bottom: 0 + "px",
                                        dQ: "all 0.3s"
                                    });
                                };
                                $(aY).removeClass("pwdkeyboard").addClass("pwdkeyboardout");
                                document.querySelector(aY).addEventListener("webkitAnimationEnd", R.cf, false);
                                document.querySelector(aY).addEventListener("animationEnd", R.cf, false);
                                event = 1;
                                setTimeout(function () {
                                    PH.s_n();
                                    PH.add++;
                                    PH.cs = 1;
                                    R.settings.aQ.cY(event, key.charCodeAt() ^ R.settings.odd);
                                },
                                    80)
                            } else if (aK == "kb_s_N") {
                                event = 4;
                            } else if (aK == "kb_s_C") {
                                event = 5;
                            } else { }
                            e.preventDefault();
                        });
                }
            }
        };
        $(aY).contents("div").filter(function () {
            if (pe.test(this.id)) {
                $("#" + this.id).contents("div").filter(function () {
                    if (nQ.test(this.className)) {
                        $(this).contents("div").filter(function () {
                            kZ(this.id);
                        });
                    } else {
                        kZ(this.id);
                    }
                });
            }
        });
        $("div").on("touchstart", ".fd",
            function (e) {
                e.stopPropagation();
            });
        $(".de2").focus(function () {
            for (var bG = 0; bG < M.length; bG++) {
                window.clearInterval(M[bG]);
            };
            for (var bG = 0; bG < MM.length; bG++) {
                window.clearInterval(MM[bG]);
            };
            for (var bG = 0; bG < PH.L.length; bG++) {
                window.clearInterval(PH.L[bG]);
            };
            kJ = mI = undefined;
            miss = "";
            BL.sh = 1;
            clearTimeout(M3);
            clearTimeout(BL.ad);
            BL.ad = setTimeout(function () {
                if (BL.fixed == "") {
                    $("body").css({
                        position: "relative",
                        left: 0,
                        top: 0,
                        dQ: "all 0.3s"
                    });
                } else {
                    $("body").css({
                        position: "relative",
                        left: 0,
                        top: 0,
                        dQ: "all 0.3s"
                    });
                    $("#" + BL.fixed).css({
                        bottom: 0 + "px",
                        dQ: "all 0.3s"
                    });
                };
                BL.sh = 0;
            },
                400);
            $("#testkbid").removeClass("pwdkeyboard").addClass("pwdkeyboardout2").hide();
            if (miss == "") {
                miss = setInterval(function () {
                    $("#testkbid").removeClass("pwdkeyboard").addClass("pwdkeyboardout2").hide();
                },
                    20);
                PH.L.push(miss);
            };
            if (BL.olo == 1) {
                event = 1;
                R.settings.aQ.cY(event, '0'.charCodeAt() ^ R.settings.odd);
                if (PH.Id != "" && ($("#testkbid").hasClass("pwdkeyboardout") || $("#testkbid").hasClass("pwdkeyboardout2"))) {
                    if (PH.add == 1) {
                        PH.s_n();
                        PH.add++;
                    }
                    PH.cs = 1;
                };
            }
        });
        $(document).on("touchstart",
            function (e) {
                var hO = $(aY);
                var input = $("#" + R.settings.id);
                if (hO.has(e.target).length === 0) {
                    if (e.target.className.indexOf("default") > -1 || e.target.className == "fd" || e.target.className.indexOf("de2") > -1) {
                        $(".fd").remove();
                        return;
                    } else {
                        for (var bG = 0; bG < PH.L.length; bG++) {
                            window.clearInterval(PH.L[bG]);
                        };
                        miss = "";
                        Show = 1;
                        clearTimeout(Show2);
                        Show2 = setTimeout(function () {
                            Show = 0;
                        },
                            350);
                        clearTimeout(Hid);
                        Hid = setTimeout(function () {
                            for (var bG = 0; bG < M.length; bG++) {
                                window.clearInterval(M[bG]);
                            };
                            for (var bG = 0; bG < MM.length; bG++) {
                                window.clearInterval(MM[bG]);
                            };
                            setTimeout(function () {
                                if (PH.Id != "" && ($("#testkbid").hasClass("pwdkeyboardout") || $("#testkbid").hasClass("pwdkeyboardout2"))) {
                                    if (PH.add == 1) {
                                        PH.s_n();
                                        PH.add++;
                                    } else if (PH.add == 2) {
                                        var fq;
                                        PH.pm = PH.arrId.indexOf(PH.Id);
                                        fq = eval("(" + PH.arrPGD[PH.pm] + ")");
                                        if (fq.settings.blur != "") {
                                            fq.settings.blur()
                                        };
                                    }
                                    PH.cs = 1;
                                };
                                BL.kb = setInterval(function () {
                                    var kb = document.getElementById("testkbid");
                                    if (kb.className == "pwdkeyboard" && $("#testkbid").css("display") == 'none') {
                                        $("#testkbid").css({
                                            display: "block"
                                        });
                                    }
                                },
                                    20);
                                T.push(BL.kb);
                                setTimeout(function () {
                                    for (var i = 0; i < T.length; i++) {
                                        window.clearInterval(T[i]);
                                    };
                                },
                                    2000);
                            },
                                100);
                            var vN;
                            clearTimeout(vN);
                            var b = hO.css("display") == "block" ? 1 : 0;
                            if (BL.lol == 0 && Tim == 0 && b && e.target.className.indexOf("de2") == -1) {
                                if (BL.fixed == "") {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0 + "px",
                                        dQ: "all 0.3s"
                                    });
                                } else {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: 0 + "px",
                                        dQ: "all 0.3s"
                                    });
                                    $("#" + BL.fixed).css({
                                        bottom: 0 + "px",
                                        dQ: "all 0.3s"
                                    });
                                };
                                hO.removeClass("pwdkeyboard").addClass("pwdkeyboardout");
                                document.querySelector(aY).addEventListener("webkitAnimationEnd", R.cf, false);
                                document.querySelector(aY).addEventListener("animationEnd", R.cf, false);
                                event = 1;
                                R.settings.aQ.cY(event, '0'.charCodeAt() ^ R.settings.odd);
                                var fq;
                                PH.pm = PH.arrId.indexOf(PH.Id);
                                $("#" + PH.Id).attr('placeholder', PH.arrPlace[PH.pm]);
                                Tim = 1;
                                vN = setTimeout(function () {
                                    Tim = 0
                                },
                                    300);
                            };
                        },
                            400)
                    }
                };
            });
        window.addEventListener("orientationchange",
            function () {
                $(".fd").hide();
                var Ah = lA ? 300 : 0;
                if (/ OPR/i.test(u) || / OPiOS/i.test(u) || /MicroMessenger/i.test(u)) {
                    R.gg = document.activeElement;
                    if (R.gg != undefined) {
                        R.gg.blur();
                        setTimeout(function () {
                            if (R.gg != undefined) {
                                R.gg = undefined;
                            }
                        },
                            300);
                    }
                };
                var ct;
                if ($(aY).is(':visible')) {
                    if ($("#char_keyboard").is(":hidden")) {
                        ct = 1;
                    } else {
                        ct = 0;
                    }
                } else {
                    ct = 2;
                };
                $(aY).addClass("pwdkeyboardout2").hide();
                if (BL.fixed == "") {
                    $("body").css({
                        position: "relative",
                        left: 0,
                        top: 0 + "px",
                        dQ: "all 0.3s"
                    });
                } else {
                    $("body").css({
                        position: "relative",
                        left: 0,
                        top: 0 + "px",
                        dQ: "all 0.3s"
                    });
                    $("#" + BL.fixed).css({
                        bottom: 0 + "px",
                        dQ: "all 0.3s"
                    });
                };
                $(window).one("resize",
                    function () {
                        setTimeout(function () {
                            kM();
                            eW = $(window).height();
                            if ($("body").height() < $(window).height()) {
                                $("body").css({
                                    height: "100%"
                                });
                                $("html").css({
                                    height: "100%"
                                });
                            } else {
                                $("body").css({
                                    height: "auto"
                                });
                                $("html").css({
                                    height: "auto"
                                });
                            }
                        },
                            200);
                        if (ct != 2) {
                            setTimeout(function () {
                                if (ct == 1) {
                                    BL.KK = aE;
                                } else {
                                    BL.KK = aE;
                                };
                                R.show(ct);
                            },
                                300);
                        }
                    });
            });
        this.aV = true;
    }
};
keyBoard.prototype.gC = function (data, hu) {
    ;;
    var lm = data.length;;;
    var try1 = new Array();;
    for (var i = 0; i < lm; i++) {
        ;
        try1[i] = i;
    };;
    var try2 = new Array();;
    for (var i = 0; i < lm; i++) {
        ;
        try2[i] = try1.splice(Math.floor(Math.random() * try1.length), 1);
    };;
    var try3 = new Array();;
    for (var i = 0; i < lm; i++) {
        if (hu) {
            ;
            try3[i] = data[try2[i]].toUpperCase();
        } else {
            try3[i] = data[try2[i]].toLowerCase();
        }
    };
    return try3;
};
keyBoard.prototype.yp = function () {
    var h1 = (document.documentElement.clientHeight);
    var h2 = (window.innerHeight);
    alert(document.documentElement.clientHeight);
    alert(window.innerHeight);
    alert(h1);
    alert(h2);
    if (document.documentElement.clientHeight > window.innerHeight) return document.documentElement.clientHeight;
    else return window.innerHeight;
};
var kJ = mI = null;
keyBoard.prototype.show = function (ct) {
    var R = this;
    var aY = "#" + this.settings.id;
    if ((R.settings.chaosMode == 1 || R.settings.chaosMode == 2) && ct == 0) {
        var aN = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'];
        aN = R.gC(aN);
        var au = $("#char_keyboard")[0].querySelectorAll(".row1pwd,.row2pwd,.row3pwdb");
        if (R.caps || R.shift) {
            for (var j = 0; j < au.length; j++) {
                au[j].innerHTML = aN[j].toUpperCase();
            }
        } else {
            for (var j = 0; j < au.length; j++) {
                au[j].innerHTML = aN[j];
            }
        }
    }
    if ((R.settings.chaosMode == 1 || R.settings.chaosMode == 2) && ct == 1) {
        var aN = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
        aN = R.gC(aN);
        var au = $("#purenumber_keyboard")[0].querySelectorAll(".pwd");
        var bY = [];
        for (var j = 0,
            i = 0; j < au.length; j++) {
            if (au[j].id == "kb_p_CLOSE" || au[j].id == "kb_p_D") continue;
            i++;
            bY.push(au[j]);
        }
        for (var j = 0; j < bY.length; j++) {
            bY[j].innerHTML = aN[j];
        }
    };
    $(aY).css("height", "213px");
    var ii = parseInt($(aY).css("height"));
    $("#purenumber_keyboard").css("height", aE);
    $("#char_keyboard").css("height", aE);
    $("#number_keyboard").css("height", aE);
    $("#symble_keyboard").css("height", aE);
    $(aY).css("height", aE);
    if (BL.lol == 0) {
        if (BL.sh == 0) {
            kJ = setInterval(function () {
                if ($(window).height() >= eW * 0.8) {
                    BL.T = 0;
                    setTimeout(function () {
                        var H3 = $(window).height() - $("#" + PH.Id).outerHeight() - $("#" + PH.Id).offset().top + $(document).scrollTop();
                        var H = BL.KK;
                        if (H3 < H) {
                            rD = H3 - H - 2;
                            if (BL.fixed == "") {
                                $("body").css({
                                    position: "relative",
                                    left: 0,
                                    top: (H3 - H - 2) + "px",
                                    dQ: "all 0.3s"
                                });
                            } else {
                                $("body").css({
                                    position: "relative",
                                    left: 0,
                                    top: -H + "px",
                                    dQ: "all 0.3s"
                                });
                                $("#" + BL.fixed).css({
                                    bottom: H + "px",
                                    dQ: "all 0.3s"
                                });
                            }
                        };
                        $(aY).show();
                        if ($(aY).hasClass("pwdkeyboardout") || $(aY).hasClass("pwdkeyboardout2")) {
                            $(aY).removeClass("pwdkeyboardout").removeClass("pwdkeyboardout2").addClass("pwdkeyboard");
                        };
                        R.ht();
                    },
                        100);
                    BL.lol = 1;
                    setTimeout(function () {
                        BL.lol = 0;
                    },
                        300);
                    clearInterval(kJ);
                    kJ == undefined;
                }
            },
                20);
            M.push(kJ);
        } else {
            clearTimeout(M3);
            M3 = setTimeout(function () {
                mI = setInterval(function () {
                    if ($(window).height() >= eW * 0.8) {
                        BL.T = 0;
                        setTimeout(function () {
                            var H3 = $(window).height() - $("#" + PH.Id).outerHeight() - $("#" + PH.Id).offset().top + $(document).scrollTop();
                            var H = BL.KK;
                            if (H3 < H) {
                                rD = H3 - H - 2;
                                if (BL.fixed == "") {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: (H3 - H - 2) + "px",
                                        dQ: "all 0.3s"
                                    });
                                } else {
                                    $("body").css({
                                        position: "relative",
                                        left: 0,
                                        top: -H + "px",
                                        dQ: "all 0.3s"
                                    });
                                    $("#" + BL.fixed).css({
                                        bottom: H + "px",
                                        dQ: "all 0.3s"
                                    });
                                };
                            };
                            $(aY).show();
                            if ($(aY).hasClass("pwdkeyboardout") || $(aY).hasClass("pwdkeyboardout2")) {
                                $(aY).removeClass("pwdkeyboardout").removeClass("pwdkeyboardout2").addClass("pwdkeyboard");
                            };
                            R.ht();
                        },
                            100);
                        BL.lol = 1;
                        setTimeout(function () {
                            BL.lol = 0;
                        },
                            300);
                        clearInterval(mI);
                        mI == undefined;
                    }
                },
                    20);
                MM.push(mI);
            },
                300);
        }
    }
};
keyBoard.prototype.hide = function (e) {
    BL.double = 0;
    var R = this;
    var aY = "#" + this.settings.id;
    for (var bG = 0; bG < M.length; bG++) {
        window.clearInterval(M[bG]);
    };
    for (var bG = 0; bG < MM.length; bG++) {
        window.clearInterval(MM[bG]);
    };
    for (var bG = 0; bG < PH.L.length; bG++) {
        window.clearInterval(PH.L[bG]);
    };
    $(aY).removeClass("pwdkeyboard").addClass("pwdkeyboardout2").hide();
    if (BL.fixed == "") {
        $("body").css({
            position: "relative",
            left: 0,
            top: 0 + "px",
            dQ: "all 0.3s"
        });
    } else {
        $("body").css({
            position: "relative",
            left: 0,
            top: 0 + "px",
            dQ: "all 0.3s"
        });
        $("#" + BL.fixed).css({
            bottom: 0 + "px",
            dQ: "all 0.3s"
        });
    };
    if (BL.olo == 1) {
        event = 1;
        R.settings.aQ.cY(event, '0'.charCodeAt() ^ R.settings.odd);
        if (PH.Id != "" && ($("#testkbid").hasClass("pwdkeyboardout") || $("#testkbid").hasClass("pwdkeyboardout2"))) {
            if (PH.add == 1) {
                PH.s_n();
                PH.add++;
            }
            PH.cs = 1;
        };
    }
    return false;
};
function passGuard(options) {
    this.settings = {
        "id": "",
        "maxLength": 12,
        "regExp1": "[0-9]",
        "displayMode": 0,
        "rsaPublicKey": "",
        "mappurl": "",
        "mC": "",
        "enterEvent": "",
        "keyBoard": {},
        "mappingArray": []
    };
    this.bg = 0;
    this.bu = "";
    this.asm = [""];
    this.bsm = [""];
    this.csm = [""];
    this.dsm = [""];
    this.esm = [""];
    this.fsm = [""];
    this.gsm = [""];
    this.hsm = [""];
    this.ism = [""];
    this.jsm = [""];
    this.ksm = [""];
    this.lsm = [""];
    this.msm = [""];
    this.nsm = [""];
    this.osm = [""];
    this.psm = [""];
    this.qsm = [""];
    this.rsm = [""];
    this.ssm = [""];
    this.tsm = [""];
    this.usm = [""];
    this.vsm = [""];
    this.wsm = [""];
    this.xsm = [""];
    this.ysm = [""];
    this.zsm = [""];
    this.aasm = [""];
    this.bbsm = [""];
    this.ccsm = [""];
    this.ddsm = [""];
    if (options != undefined) {
        this.settings = options;
    }
};
passGuard.ep = [];
passGuard.gA = [];
passGuard.ib = undefined;
passGuard.prototype.generate = function (id, keyBoard, pgd, ct) {
    PH.arrPlace.push($("#" + id).attr("placeholder"));
    this.settings.keyBoard = keyBoard;
    this.settings.id = id;
    PH.arrId.push(id);
    PH.arrPGD.push(pgd);
    var bA = document.getElementById(id);
    passGuard.gA.push(bA);
    var aQ = this;
    var oJ = null;
    var hu = false;
    var flag2 = false;
    PH.s_n = function () {
        var fq;
        PH.pm = PH.arrId.indexOf(PH.Id);
        fq = eval("(" + PH.arrPGD[PH.pm] + ")");
        if (fq.bg == 0) {
            $("#" + PH.Id).attr('placeholder', PH.arrPlace[PH.pm]);
        }
        if (PH.cs == 0) {
            if (fq.settings.blur != undefined) {
                fq.settings.blur()
            };
            if (fq.settings.callBack == "") { } else {
                var pz = new RegExp(fq.settings.regExp2);
                if (fq.asm == undefined) {
                    fq.settings.errorCallBack();
                } else if (pz.test((fq.asm + fq.bsm + fq.csm + fq.dsm + fq.esm + fq.fsm + fq.gsm + fq.hsm + fq.ism + fq.jsm + fq.ksm + fq.lsm + fq.msm + fq.nsm + fq.osm + fq.psm + fq.qsm + fq.rsm + fq.ssm + fq.tsm + fq.usm + fq.vsm + fq.wsm + fq.xsm + fq.ysm + fq.zsm + fq.aasm + fq.bbsm + fq.ccsm + fq.ddsm).substring(0, fq.bg))) {
                    fq.settings.callBack()
                } else {
                    fq.settings.errorCallBack()
                }
            }
        }
    };
    bA.onfocus = function (e) {
        var fq;
        PH.pm = PH.arrId.indexOf(id);
        fq = eval("(" + PH.arrPGD[PH.pm] + ")");
        if (fq.settings.focus != undefined) {
            fq.settings.focus()
        };
        this.blur();
        if (Show == 0 || id != PH.Id) {
            for (var bG = 0; bG < PH.L.length; bG++) {
                window.clearInterval(PH.L[bG]);
            };
            for (var i = 0; i < T.length; i++) {
                window.clearInterval(T[i]);
            };
            $(this).attr('placeholder', '');
            PH.add = 1;
            BL.olo = 1;
            press2 = 1;
            BL.T = 1;
            clearTimeout(Hid);
            if (ct == 1) {
                $("#char_keyboard").hide();
                $("#number_keyboard").hide();
                $("#symble_keyboard").hide();
                $("#purenumber_keyboard").show();
                BL.KK = aE;
            } else {
                $("#char_keyboard").show();
                $("#number_keyboard").hide();
                $("#symble_keyboard").hide();
                $("#purenumber_keyboard").hide();
                BL.KK = aE;
            };
            var input = this;
            for (var bG = 0; bG < passGuard.ep.length; bG++) {
                window.clearInterval(passGuard.ep[bG]);
            }
            for (var fT = 0; fT < passGuard.gA.length; fT++) {
                passGuard.gA[fT].value = passGuard.gA[fT].value.replace("|", "");
            }
            passGuard.ep = [];
            if (keyBoard.settings.hasMap == 1) {
                if (passGuard.ib == undefined) {
                    if (aQ.settings.mappurl == undefined || aQ.settings.mappurl == "") {
                        alert("无效的映射申请地址。");
                        return;
                    }
                    $.ajax({
                        url: aQ.settings.mappurl + "?" + get_time(),
                        type: "GET",
                        async: false,
                        success: function (bu) {
                            aQ.tI(bu);
                        }
                    });
                }
            };
            oJ = setInterval(function () {
                if (!document.getElementById(id)) {
                    return;
                }
                document.getElementById(id).setAttribute("placeholder", "");
                if (hu) {
                    input.value = input.value.replace("|", "");
                    hu = false;
                } else {
                    input.value = input.value + "|";
                    hu = true;
                }
            },
                500);
            passGuard.ep.push(oJ);
            setTimeout(function () {
                keyBoard.cY = aQ.cY;
                if (aQ.settings.fixed == undefined) {
                    BL.fixed = "";
                } else {
                    BL.fixed = aQ.settings.fixed;
                }
                keyBoard.settings.aQ = aQ;
                keyBoard.settings.odd = 51;
                keyBoard.show(ct);
                if (PH.Id != "" && PH.Id != id) {
                    PH.s_n();
                    PH.cs = 0;
                }
                PH.cs = 0;
                PH.Id = id;
                e.preventDefault();
                return false;
            },
                20)
        }
    }
};
var SH;
passGuard.prototype.cY = function (event, key) {
    var pB = key ^ 51;
    var aQ = this;
    var input = document.getElementById(aQ.settings.id);
    input.value = input.value.replace("|", "");
    if (event == 1) {
        BL.T = 0;
        for (var bG = 0; bG < passGuard.ep.length; bG++) {
            window.clearInterval(passGuard.ep[bG]);
        }
    } else if (event == 2) {
        input.value = input.value.substr(0, input.value.length - 1);
        if (aQ.settings.keyBoard.settings.hasMap == 1) {
            aQ.bu = aQ.bu.substr(0, aQ.bu.length - 1);
        }
        aQ.bg -= 1;
        if (aQ.bg < 0) aQ.bg = 0;
        if (aQ.bg == 0) aQ.asm = [""];
        if (aQ.bg == 1) aQ.bsm = [""];
        if (aQ.bg == 2) aQ.csm = [""];
        if (aQ.bg == 3) aQ.dsm = [""];
        if (aQ.bg == 4) aQ.esm = [""];
        if (aQ.bg == 5) aQ.fsm = [""];
        if (aQ.bg == 6) aQ.gsm = [""];
        if (aQ.bg == 7) aQ.hsm = [""];
        if (aQ.bg == 8) aQ.ism = [""];
        if (aQ.bg == 9) aQ.jsm = [""];
        if (aQ.bg == 10) aQ.ksm = [""];
        if (aQ.bg == 11) aQ.lsm = [""];
        if (aQ.bg == 12) aQ.msm = [""];
        if (aQ.bg == 13) aQ.nsm = [""];
        if (aQ.bg == 14) aQ.osm = [""];
        if (aQ.bg == 15) aQ.psm = [""];
        if (aQ.bg == 16) aQ.qsm = [""];
        if (aQ.bg == 17) aQ.rsm = [""];
        if (aQ.bg == 18) aQ.ssm = [""];
        if (aQ.bg == 19) aQ.tsm = [""];
        if (aQ.bg == 20) aQ.usm = [""];
        if (aQ.bg == 21) aQ.vsm = [""];
        if (aQ.bg == 22) aQ.wsm = [""];
        if (aQ.bg == 23) aQ.xsm = [""];
        if (aQ.bg == 24) aQ.ysm = [""];
        if (aQ.bg == 25) aQ.zsm = [""];
        if (aQ.bg == 26) aQ.aasm = [""];
        if (aQ.bg == 27) aQ.bbsm = [""];
        if (aQ.bg == 28) aQ.ccsm = [""];
        if (aQ.bg == 29) aQ.ddsm = [""];
        if (aQ.settings.jump == 1) {
            aQ.settings.del(aQ.bg);
        }
    } else if (event == 0) {
        var ld = new RegExp(aQ.settings.regExp1);
        var iC = String.fromCharCode(pB);
        var wD = aQ.settings.maxLength;
        var aG = input.value.length;
        if (aG < wD) {
            aQ.bg += 1;
            if (aQ.bg == 1) aQ.asm = [iC];
            if (aQ.bg == 2) aQ.bsm = [iC];
            if (aQ.bg == 3) aQ.csm = [iC];
            if (aQ.bg == 4) aQ.dsm = [iC];
            if (aQ.bg == 5) aQ.esm = [iC];
            if (aQ.bg == 6) aQ.fsm = [iC];
            if (aQ.bg == 7) aQ.gsm = [iC];
            if (aQ.bg == 8) aQ.hsm = [iC];
            if (aQ.bg == 9) aQ.ism = [iC];
            if (aQ.bg == 10) aQ.jsm = [iC];
            if (aQ.bg == 11) aQ.ksm = [iC];
            if (aQ.bg == 12) aQ.lsm = [iC];
            if (aQ.bg == 13) aQ.msm = [iC];
            if (aQ.bg == 14) aQ.nsm = [iC];
            if (aQ.bg == 15) aQ.osm = [iC];
            if (aQ.bg == 16) aQ.psm = [iC];
            if (aQ.bg == 17) aQ.qsm = [iC];
            if (aQ.bg == 18) aQ.rsm = [iC];
            if (aQ.bg == 19) aQ.ssm = [iC];
            if (aQ.bg == 20) aQ.tsm = [iC];
            if (aQ.bg == 21) aQ.usm = [iC];
            if (aQ.bg == 22) aQ.vsm = [iC];
            if (aQ.bg == 23) aQ.wsm = [iC];
            if (aQ.bg == 24) aQ.xsm = [iC];
            if (aQ.bg == 25) aQ.ysm = [iC];
            if (aQ.bg == 26) aQ.zsm = [iC];
            if (aQ.bg == 27) aQ.aasm = [iC];
            if (aQ.bg == 28) aQ.bbsm = [iC];
            if (aQ.bg == 29) aQ.ccsm = [iC];
            if (aQ.bg == 30) aQ.ddsm = [iC];
            if (aQ.settings.keyBoard.settings.hasMap == 1) {
                aQ.bu += aQ.wQ(iC);
            }
            if (aQ.settings.displayMode == 1) {
                input.value = (aQ.asm + aQ.bsm + aQ.csm + aQ.dsm + aQ.esm + aQ.fsm + aQ.gsm + aQ.hsm + aQ.ism + aQ.jsm + aQ.ksm + aQ.lsm + aQ.msm + aQ.nsm + aQ.osm + aQ.psm + aQ.qsm + aQ.rsm + aQ.ssm + aQ.tsm + aQ.usm + aQ.vsm + aQ.wsm + aQ.xsm + aQ.ysm + aQ.zsm + aQ.aasm + aQ.bbsm + aQ.ccsm + aQ.ddsm).substring(0, aQ.bg);
            } else {
                input.value += "*";
            }
            if (aQ.settings.jump == 1) {
                aQ.settings.add(aQ.bg);
            }
        }
    }
};
passGuard.prototype.tI = function (mO) {
    if (mO) {
        passGuard.ib = mO;
    }
};
passGuard.prototype.clearpwd = function () {
    var input = document.getElementById(this.settings.id);
    input.value = "";
    this.bg = 0;
    this.bu = "";
    this.asm = "";
    this.bsm = "";
    this.csm = "";
    this.dsm = "";
    this.esm = "";
    this.fsm = "";
    this.gsm = "";
    this.hsm = "";
    this.ism = "";
    this.jsm = "";
    this.ksm = "";
    this.lsm = "";
    this.msm = "";
    this.nsm = "";
    this.osm = "";
    this.psm = "";
    this.qsm = "";
    this.rsm = "";
    this.ssm = "";
    this.tsm = "";
    this.usm = "";
    this.vsm = "";
    this.wsm = "";
    this.xsm = "";
    this.ysm = "";
    this.zsm = "";
    this.aasm = "";
    this.bbsm = "";
    this.ccsm = "";
    this.ddsm = "";
};
passGuard.prototype.getValid = function () {
    // if (!verifyFlag) {
    //     alert("license verify error!");
    //     return 1;
    // }
    var aQ = this;
    if (aQ.bg < 0) aQ.bg = 0;
    if (aQ.bg == 0) aQ.asm = [""];
    if (aQ.bg == 1) aQ.bsm = [""];
    if (aQ.bg <= 2) aQ.csm = [""];
    if (aQ.bg <= 3) aQ.dsm = [""];
    if (aQ.bg <= 4) aQ.esm = [""];
    if (aQ.bg <= 5) aQ.fsm = [""];
    if (aQ.bg <= 6) aQ.gsm = [""];
    if (aQ.bg <= 7) aQ.hsm = [""];
    if (aQ.bg <= 8) aQ.ism = [""];
    if (aQ.bg <= 9) aQ.jsm = [""];
    if (aQ.bg <= 10) aQ.ksm = [""];
    if (aQ.bg <= 11) aQ.lsm = [""];
    if (aQ.bg <= 12) aQ.msm = [""];
    if (aQ.bg <= 13) aQ.nsm = [""];
    if (aQ.bg <= 14) aQ.osm = [""];
    if (aQ.bg <= 15) aQ.psm = [""];
    if (aQ.bg <= 16) aQ.qsm = [""];
    if (aQ.bg <= 17) aQ.rsm = [""];
    if (aQ.bg <= 18) aQ.ssm = [""];
    if (aQ.bg <= 19) aQ.tsm = [""];
    if (aQ.bg <= 20) aQ.usm = [""];
    if (aQ.bg <= 21) aQ.vsm = [""];
    if (aQ.bg <= 22) aQ.wsm = [""];
    if (aQ.bg <= 23) aQ.xsm = [""];
    if (aQ.bg <= 24) aQ.ysm = [""];
    if (aQ.bg <= 25) aQ.zsm = [""];
    if (aQ.bg <= 26) aQ.aasm = [""];
    if (aQ.bg <= 27) aQ.bbsm = [""];
    if (aQ.bg <= 28) aQ.ccsm = [""];
    if (aQ.bg <= 29) aQ.ddsm = [""];
    var ld = new RegExp(aQ.settings.regExp2);
    if (aQ.asm == undefined) {
        var pare = 1;
    } else {
        var pare = ld.test((aQ.asm + aQ.bsm + aQ.csm + aQ.dsm + aQ.esm + aQ.fsm + aQ.gsm + aQ.hsm + aQ.ism + aQ.jsm + aQ.ksm + aQ.lsm + aQ.msm + aQ.nsm + aQ.osm + aQ.psm + aQ.qsm + aQ.rsm + aQ.ssm + aQ.tsm + aQ.usm + aQ.vsm + aQ.wsm + aQ.xsm + aQ.ysm + aQ.zsm + aQ.aasm + aQ.bbsm + aQ.ccsm + aQ.ddsm).substring(0, aQ.bg)) ? 0 : 1;
    }
    return pare;
};
passGuard.prototype.getOutput = function () {
    // if (!verifyFlag) {
    //     alert("license verify error!");
    //     return false;
    // }
    var kW = new db();
    kW.uO(this.settings.rsaPublicKey);
    if (this.settings.keyBoard.settings.hasMap == 1) {
        var sn = kW.bZ(this.bu);
    } else {
        var sn = kW.bZ(this.asm + this.bsm + this.csm + this.dsm + this.esm + this.fsm + this.gsm + this.hsm + this.ism + this.jsm + this.ksm + this.lsm + this.msm + this.nsm + this.osm + this.psm + this.qsm + this.rsm + this.ssm + this.tsm + this.usm + this.vsm + this.wsm + this.xsm + this.ysm + this.zsm + this.aasm + this.bbsm + this.ccsm + this.ddsm);
    }
    var xS = qh($.trim(this.settings.mC), $.trim(sn));
    passGuard.ib = undefined;
    this.bg = 0;
    this.asm = [""];
    this.bsm = [""];
    this.csm = [""];
    this.dsm = [""];
    this.esm = [""];
    this.fsm = [""];
    this.gsm = [""];
    this.hsm = [""];
    this.ism = [""];
    this.jsm = [""];
    this.ksm = [""];
    this.lsm = [""];
    this.msm = [""];
    this.nsm = [""];
    this.osm = [""];
    this.psm = [""];
    this.qsm = [""];
    this.rsm = [""];
    this.ssm = [""];
    this.tsm = [""];
    this.usm = [""];
    this.vsm = [""];
    this.wsm = [""];
    this.xsm = [""];
    this.ysm = [""];
    this.zsm = [""];
    this.aasm = [""];
    this.bbsm = [""];
    this.ccsm = [""];
    this.ddsm = [""];
    this.bu = "";
    return xS;
};
passGuard.prototype.getLength = function () {
    if (!verifyFlag) {
        alert("license verify error!");
        return 0;
    }
    if (this.settings.keyBoard.settings.hasMap == 1) {
        return this.bu.length;
    } else {
        return this.bg;
    }
};
passGuard.prototype.getHash = function () {
    if (!verifyFlag) {
        alert("license verify error!");
        return false;
    }
    var aQ = this;
    if (this.settings.keyBoard.settings.hasMap == 1) {
        return hash(this.bu).toString();
    } else {
        return hash(aQ.asm + aQ.bsm + aQ.csm + aQ.dsm + aQ.esm + aQ.fsm + aQ.gsm + aQ.hsm + aQ.ism + aQ.jsm + aQ.ksm + aQ.lsm + aQ.msm + aQ.nsm + aQ.osm + aQ.psm + aQ.qsm + aQ.rsm + aQ.ssm + aQ.tsm + aQ.usm + aQ.vsm + aQ.wsm + aQ.xsm + aQ.ysm + aQ.zsm + aQ.aasm + aQ.bbsm + aQ.ccsm + aQ.ddsm).toString();
    }
};
passGuard.prototype.wQ = function (key) {
    var keyCode = key.charCodeAt(0);
    var bS = aB(passGuard.ib);
    var wl = eval(bS);
    return String.fromCharCode(wl[keyCode - 33]);
};
passGuard.prototype.setRandKey = function (lP) {
    try {
        if (lP) this.settings.mC = lP;
    } catch (e) {
        alert(e);
    }
};
var cert = "-----BEGIN CERTIFICATE-----\n";
cert += "MIICHjCCAYegAwIBAgIFBO2Kp0UwDQYJKoZIhvcNAQELBQAwVDEOMAwGA1UEAxMFU0lDQ0ExCzAJ\n";
cert += "BgNVBAsTAlNDMQ4wDAYDVQQKEwVTSUNDQTELMAkGA1UEBxMCQkoxCzAJBgNVBAgTAkJKMQswCQYD\n";
cert += "VQQGEwJDTjAeFw0xNzAxMTYwODM3MzlaFw0xNzAxMTYwODM3MzlaMFIxDDAKBgNVBAMTA0xlZTEL\n";
cert += "MAkGA1UECxMCU0MxDjAMBgNVBAoTBVNJQ0NBMQswCQYDVQQHEwJCSjELMAkGA1UECBMCQkoxCzAJ\n";
cert += "BgNVBAYTAkNOMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDm0MpZBsaKYQSGj1lytQ+ubUm/\n";
cert += "4pvmIKTWtqtrGo75cF4N7Hajlm29wjOf7I7fTe4+JlxYmMhqxoXeoiLFwPUgVm6oMGU5T80R9Iw6\n";
cert += "cg36dX8l7bYwiETs/rI09Kzs+r7GZAEI1XueCNQygN9wfUcBDuXIsjjmzcUkpC5GNFGzxQIDAQAB\n";
cert += "MA0GCSqGSIb3DQEBCwUAA4GBADq6BvU5ILNZ9OanxqrTZ86o6qNgYMkopZrw0h0skNDRQ4GX1deQ\n";
cert += "AKSamow9ZW6g93/KkatMmF2vc2P43zeJ+vwunt+Tu57IUb4VJ+eKafGSo9ySilzVcWTUW8dR0zoN\n";
cert += "N3cAL5v1zWqhe/9z09xtsLwShtvv/PF0xgs3qmTKe8tG\n";
cert += "-----END CERTIFICATE-----";
function getYMD() {
    var myDate = new Date();
    var yy = myDate.getFullYear();
    var mm = myDate.getMonth() + 1;
    if (mm < 10) {
        mm = "0" + mm;
    }
    var dd = myDate.getDate();
    if (dd < 10) {
        dd = "0" + dd;
    }
    return "" + yy + mm + dd;
};
var verifyFlag = true;
function verifyLicense(bS) {
    var b64oneStr = aB(bS);
    var indexs = b64oneStr.indexOf("{");
    var sMsg = b64oneStr.substring(indexs);
    b64oneStr = b64oneStr.substring(0, indexs);
    hexoneStr = new Base642().ei(b64oneStr);
    var qx = new X509();
    qx.readCertPEM(cert);
    var isValid = qx.subjectPublicKeyRSA.verifyString(sMsg, hexoneStr);
    var bA = JSON.parse(sMsg);
    var today = getYMD();
    if (isValid) {
        if (bA.type == "test") {
            console.log("this is a test license!");
            if (today > bA.notafter) {
                verifyFlag = false;
                console.log("this license is out date!");
            }
        } else if (bA.type == "product") {
            console.log("this is a product license!");
            var hostname = location.hostname;
            var apps = bA.applyname;
            if (apps.length == 1) {
                var regobj = new RegExp(apps[0].replace(/\./g, "[.]*").replace(/\*/, "[.]*"));
                if (regobj.test(hostname)) { } else {
                    verifyFlag = false;
                    console.log("hostname verify error!");
                }
            } else if (apps.length > 1) {
                var hu = false;
                for (var i = 0; i < apps.length; i++) {
                    var regobj = new RegExp(apps[i].replace(/\./g, "\\.").replace("*", "."));
                    if (regobj.test(hostname)) {
                        hu = true;
                        break;
                    }
                }
                if (!hu) {
                    verifyFlag = false;
                    console.log("hostname verify error!");
                }
            }
        }
    } else {
        verifyFlag = false;
        console.log("license verify error!");
    }
}; (function (root, lo) {
    if (typeof fg === "object") {
        la.fg = fg = lo();
    } else if (typeof define === "function" && define.xg) {
        define([], lo);
    } else {
        root.aX = lo();
    }
}(this,
    function () {
        var aX = aX || (function (Math, undefined) {
            var C = {};
            var bC = C.bf = {};
            var Base = bC.Base = (function () {
                function F() { };
                return {
                    extend: function (fj) {
                        F.prototype = this;
                        var fl = new F();
                        if (fj) {
                            fl.jT(fj);
                        }
                        if (!fl.hasOwnProperty('aV')) {
                            fl.aV = function () {
                                fl.ro.aV.apply(this, arguments);
                            };
                        }
                        fl.aV.prototype = fl;
                        fl.ro = this;
                        return fl;
                    },
                    create: function () {
                        var kf = this.extend();
                        kf.aV.apply(kf, arguments);
                        return kf;
                    },
                    aV: function () { },
                    jT: function (gY) {
                        for (var propertyName in gY) {
                            if (gY.hasOwnProperty(propertyName)) {
                                this[propertyName] = gY[propertyName];
                            }
                        }
                        if (gY.hasOwnProperty('toString')) {
                            this.toString = gY.toString;
                        }
                    },
                    clone: function () {
                        return this.aV.prototype.extend(this);
                    }
                };
            }());
            var bd = bC.bd = Base.extend({
                aV: function (bq, aI) {
                    bq = this.bq = bq || [];
                    if (aI != undefined) {
                        this.aI = aI;
                    } else {
                        this.aI = bq.length * 4;
                    }
                },
                toString: function (vX) {
                    return (vX || cJ).stringify(this);
                },
                concat: function (aH) {
                    var mg = this.bq;
                    var ng = aH.bq;
                    var jo = this.aI;
                    var jJ = aH.aI;
                    this.ag();
                    if (jo % 4) {
                        for (var i = 0; i < jJ; i++) {
                            var so = (ng[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                            mg[(jo + i) >>> 2] |= so << (24 - ((jo + i) % 4) * 8);
                        }
                    } else {
                        for (var i = 0; i < jJ; i += 4) {
                            mg[(jo + i) >>> 2] = ng[i >>> 2];
                        }
                    }
                    this.aI += jJ;
                    return this;
                },
                ag: function () {
                    var bq = this.bq;
                    var aI = this.aI;
                    bq[aI >>> 2] &= 0xffffffff << (32 - (aI % 4) * 8);
                    bq.length = Math.ceil(aI / 4);
                },
                clone: function () {
                    var clone = Base.clone.call(this);
                    clone.bq = this.bq.slice(0);
                    return clone;
                },
                random: function (eE) {
                    var bq = [];
                    var r = (function (eH) {
                        var eH = eH;
                        var iH = 0x3ade68b1;
                        var mask = 0xffffffff;
                        return function () {
                            iH = (0x9069 * (iH & 0xFFFF) + (iH >> 0x10)) & mask;
                            eH = (0x4650 * (eH & 0xFFFF) + (eH >> 0x10)) & mask;
                            var result = ((iH << 0x10) + eH) & mask;
                            result /= 0x100000000;
                            result += 0.5;
                            return result * (Math.random() > .5 ? 1 : -1);
                        }
                    });
                    for (var i = 0,
                        mt; i < eE; i += 4) {
                        var mz = r((mt || Math.random()) * 0x100000000);
                        mt = mz() * 0x3ade67b7;
                        bq.push((mz() * 0x100000000) | 0);
                    }
                    return new bd.aV(bq, eE);
                }
            });
            var ck = C.bJ = {};
            var cJ = ck.cJ = {
                stringify: function (aH) {
                    var bq = aH.bq;
                    var aI = aH.aI;
                    var jm = [];
                    for (var i = 0; i < aI; i++) {
                        var iY = (bq[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                        jm.push((iY >>> 4).toString(16));
                        jm.push((iY & 0x0f).toString(16));
                    }
                    return jm.join('');
                },
                parse: function (oX) {
                    var nU = oX.length;
                    var bq = [];
                    for (var i = 0; i < nU; i += 2) {
                        bq[i >>> 3] |= parseInt(oX.substr(i, 2), 16) << (24 - (i % 8) * 4);
                    }
                    return new bd.aV(bq, nU / 2);
                }
            };
            var lq = ck.lq = {
                stringify: function (aH) {
                    var bq = aH.bq;
                    var aI = aH.aI;
                    var mw = [];
                    for (var i = 0; i < aI; i++) {
                        var iY = (bq[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                        mw.push(String.fromCharCode(iY));
                    }
                    return mw.join('');
                },
                parse: function (mK) {
                    var mn = mK.length;
                    var bq = [];
                    for (var i = 0; i < mn; i++) {
                        bq[i >>> 2] |= (mK.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
                    }
                    return new bd.aV(bq, mn);
                }
            };
            var hh = ck.hh = {
                stringify: function (aH) {
                    try {
                        return decodeURIComponent(escape(lq.stringify(aH)));
                    } catch (e) {
                        throw new Error('Malformed UTF-8 data');
                    }
                },
                parse: function (ox) {
                    return lq.parse(unescape(encodeURIComponent(ox)));
                }
            };
            var fk = bC.fk = Base.extend({
                reset: function () {
                    this.hs = new bd.aV();
                    this.qY = 0;
                },
                ji: function (data) {
                    if (typeof data == 'string') {
                        data = hh.parse(data);
                    }
                    this.hs.concat(data);
                    this.qY += data.aI;
                },
                gq: function (wx) {
                    var data = this.hs;
                    var jk = data.bq;
                    var gF = data.aI;
                    var bB = this.bB;
                    var cq = bB * 4;
                    var gD = gF / cq;
                    if (wx) {
                        gD = Math.ceil(gD);
                    } else {
                        gD = Math.max((gD | 0) - this.lN, 0);
                    }
                    var iO = gD * bB;
                    var nu = Math.min(iO * 4, gF);
                    if (iO) {
                        for (var offset = 0; offset < iO; offset += bB) {
                            this.kq(jk, offset);
                        }
                        var rj = jk.splice(0, iO);
                        data.aI -= nu;
                    }
                    return new bd.aV(rj, nu);
                },
                clone: function () {
                    var clone = Base.clone.call(this);
                    clone.hs = this.hs.clone();
                    return clone;
                },
                lN: 0
            });
            var wh = bC.wh = fk.extend({
                aL: Base.extend(),
                aV: function (aL) {
                    this.aL = this.aL.extend(aL);
                    this.reset();
                },
                reset: function () {
                    fk.reset.call(this);
                    this.jf();
                },
                update: function (jw) {
                    this.ji(jw);
                    this.gq();
                    return this;
                },
                fU: function (jw) {
                    if (jw) {
                        this.ji(jw);
                    }
                    var hash = this.kG();
                    return hash;
                },
                bB: 512 / 32,
                jx: function (jM) {
                    return function (message, aL) {
                        return new jM.aV(aL).fU(message);
                    };
                },
                zS: function (jM) {
                    return function (message, key) {
                        return new cw.AP.aV(jM, key).fU(message);
                    };
                }
            });
            var cw = C.jg = {};
            return C;
        }(Math)); (function () {
            var C = aX;
            var bC = C.bf;
            var bd = bC.bd;
            var ck = C.bJ;
            var aM = ck.aM = {
                stringify: function (aH) {
                    var bq = aH.bq;
                    var aI = aH.aI;
                    var map = this.mo;
                    aH.ag();
                    var hQ = [];
                    for (var i = 0; i < aI; i += 3) {
                        var wT = (bq[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                        var vx = (bq[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
                        var wB = (bq[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
                        var ue = (wT << 16) | (vx << 8) | wB;
                        for (var j = 0; (j < 4) && (i + j * 0.75 < aI); j++) {
                            hQ.push(map.charAt((ue >>> (6 * (3 - j))) & 0x3f));
                        }
                    }
                    var ge = map.charAt(64);
                    if (ge) {
                        while (hQ.length % 4) {
                            hQ.push(ge);
                        }
                    }
                    return hQ.join('');
                },
                parse: function (jD) {
                    var mc = jD.length;
                    var map = this.mo;
                    var ge = map.charAt(64);
                    if (ge) {
                        var lU = jD.indexOf(ge);
                        if (lU != -1) {
                            mc = lU;
                        }
                    }
                    var bq = [];
                    var eE = 0;
                    for (var i = 0; i < mc; i++) {
                        if (i % 4) {
                            var wi = map.indexOf(jD.charAt(i - 1)) << ((i % 4) * 2);
                            var wu = map.indexOf(jD.charAt(i)) >>> (6 - (i % 4) * 2);
                            bq[eE >>> 2] |= (wi | wu) << (24 - (eE % 4) * 8);
                            eE++;
                        }
                    }
                    return bd.create(bq, eE);
                },
                mo: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
            };
        }()); (function () {
            if (typeof xF != 'function') {
                return;
            }
            var C = aX;
            var bC = C.bf;
            var bd = bC.bd;
            var lH = bd.aV;
            var qo = bd.aV = function (ao) {
                if (ao instanceof xF) {
                    ao = new ny(ao);
                }
                if (ao instanceof AH || (typeof rX !== "undefined" && ao instanceof rX) || ao instanceof zp || ao instanceof AK || ao instanceof zn || ao instanceof sI || ao instanceof za || ao instanceof AG) {
                    ao = new ny(ao.AQ, ao.Az, ao.vu);
                }
                if (ao instanceof ny) {
                    var pk = ao.vu;
                    var bq = [];
                    for (var i = 0; i < pk; i++) {
                        bq[i >>> 2] |= ao[i] << (24 - (i % 4) * 8);
                    }
                    lH.call(this, bq, pk);
                } else {
                    lH.apply(this, arguments);
                }
            };
            qo.prototype = bd;
        }());
        aX.bf.eU || (function (undefined) {
            var C = aX;
            var bC = C.bf;
            var Base = bC.Base;
            var bd = bC.bd;
            var fk = bC.fk;
            var ck = C.bJ;
            var hh = ck.hh;
            var aM = ck.aM;
            var cw = C.jg;
            var nZ = cw.nZ;
            var eU = bC.eU = fk.extend({
                aL: Base.extend(),
                kR: function (key, aL) {
                    return this.create(this.jU, key, aL);
                },
                kg: function (key, aL) {
                    return this.create(this.qp, key, aL);
                },
                aV: function (qN, key, aL) {
                    this.aL = this.aL.extend(aL);
                    this.nt = qN;
                    this.hJ = key;
                    this.reset();
                },
                reset: function () {
                    fk.reset.call(this);
                    this.jf();
                },
                zW: function (jy) {
                    this.ji(jy);
                    return this.gq();
                },
                fU: function (jy) {
                    if (jy) {
                        this.ji(jy);
                    }
                    var xb = this.kG();
                    return xb;
                },
                ah: 128 / 32,
                fN: 128 / 32,
                jU: 1,
                qp: 2,
                jx: (function () {
                    function ou(key) {
                        if (typeof key == 'string') {
                            return ni;
                        } else {
                            return hw;
                        }
                    };
                    return function (aT) {
                        return {
                            bZ: function (message, key, aL) {
                                return ou(key).bZ(aT, message, key, aL);
                            },
                            eV: function (bD, key, aL) {
                                return ou(key).eV(aT, bD, key, aL);
                            }
                        };
                    };
                }())
            });
            var dC = bC.dC = eU.extend({
                kG: function () {
                    var gH = this.gq(!!'flush');
                    return gH;
                },
                bB: 1
            });
            var wJ = C.mode = {};
            var eL = bC.eL = Base.extend({
                kR: function (aT, bP) {
                    return this.cB.create(aT, bP);
                },
                kg: function (aT, bP) {
                    return this.eZ.create(aT, bP);
                },
                aV: function (aT, bP) {
                    this.cd = aT;
                    this.cQ = bP;
                }
            });
            var fi = wJ.fi = (function () {
                var fi = eL.extend();
                fi.cB = fi.extend({
                    co: function (bq, offset) {
                        var aT = this.cd;
                        var bB = aT.bB;
                        ph.call(this, bq, offset, bB);
                        aT.fL(bq, offset);
                        this.fO = bq.slice(offset, offset + bB);
                    }
                });
                fi.eZ = fi.extend({
                    co: function (bq, offset) {
                        var aT = this.cd;
                        var bB = aT.bB;
                        var iM = bq.slice(offset, offset + bB);
                        aT.kQ(bq, offset);
                        ph.call(this, bq, offset, bB);
                        this.fO = iM;
                    }
                });
                function ph(bq, offset, bB) {
                    var bP = this.cQ;
                    if (bP) {
                        var block = bP;
                        this.cQ = undefined;
                    } else {
                        var block = this.fO;
                    }
                    for (var i = 0; i < bB; i++) {
                        bq[offset + i] ^= block[i];
                    }
                };
                return fi;
            }());
            var vt = C.bH = {};
            var kB = vt.kB = {
                bH: function (data, bB) {
                    var cq = bB * 4;
                    var aZ = cq - data.aI % cq;
                    var xu = (aZ << 24) | (aZ << 16) | (aZ << 8) | aZ;
                    var mB = [];
                    for (var i = 0; i < aZ; i += 4) {
                        mB.push(xu);
                    }
                    var padding = bd.create(mB, aZ);
                    data.concat(padding);
                },
                es: function (data) {
                    var aZ = data.bq[(data.aI - 1) >>> 2] & 0xff;
                    data.aI -= aZ;
                }
            };
            var gi = bC.gi = eU.extend({
                aL: eU.aL.extend({
                    mode: fi,
                    padding: kB
                }),
                reset: function () {
                    eU.reset.call(this);
                    var aL = this.aL;
                    var bP = aL.bP;
                    var mode = aL.mode;
                    if (this.nt == this.jU) {
                        var nd = mode.kR;
                    } else {
                        var nd = mode.kg;
                        this.lN = 1;
                    }
                    this.pu = nd.call(mode, this, bP && bP.bq);
                },
                kq: function (bq, offset) {
                    this.pu.co(bq, offset);
                },
                kG: function () {
                    var padding = this.aL.padding;
                    if (this.nt == this.jU) {
                        padding.bH(this.hs, this.bB);
                        var gH = this.gq(!!'flush');
                    } else {
                        var gH = this.gq(!!'flush');
                        padding.es(gH);
                    }
                    return gH;
                },
                bB: 128 / 32
            });
            var fw = bC.fw = Base.extend({
                aV: function (eI) {
                    this.jT(eI);
                },
                toString: function (kU) {
                    return (kU || this.kU).stringify(this);
                }
            });
            var lf = C.format = {};
            var yV = lf.vj = {
                stringify: function (eI) {
                    var bD = eI.bD;
                    var dG = eI.dG;
                    if (dG) {
                        var aH = bd.create([0x53616c74, 0x65645f5f]).concat(dG).concat(bD);
                    } else {
                        var aH = bD;
                    }
                    return aH.toString(aM);
                },
                parse: function (xW) {
                    var bD = aM.parse(xW);
                    var iR = bD.bq;
                    if (iR[0] == 0x53616c74 && iR[1] == 0x65645f5f) {
                        var dG = bd.create(iR.slice(2, 4));
                        iR.splice(0, 4);
                        bD.aI -= 16;
                    }
                    return fw.create({
                        bD: bD,
                        dG: dG
                    });
                }
            };
            var hw = bC.hw = Base.extend({
                aL: Base.extend({
                    format: yV
                }),
                bZ: function (aT, message, key, aL) {
                    aL = this.aL.extend(aL);
                    var nX = aT.kR(key, aL);
                    var bD = nX.fU(message);
                    var kd = nX.aL;
                    return fw.create({
                        bD: bD,
                        key: key,
                        bP: kd.bP,
                        yC: aT,
                        mode: kd.mode,
                        padding: kd.padding,
                        bB: aT.bB,
                        kU: aL.format
                    });
                },
                eV: function (aT, bD, key, aL) {
                    aL = this.aL.extend(aL);
                    bD = this.lX(bD, aL.format);
                    var plaintext = aT.kg(key, aL).fU(bD.bD);
                    return plaintext;
                },
                lX: function (bD, format) {
                    if (typeof bD == 'string') {
                        return format.parse(bD, this);
                    } else {
                        return bD;
                    }
                }
            });
            var wV = C.ly = {};
            var yd = wV.vj = {
                oB: function (password, ah, fN, dG) {
                    if (!dG) {
                        dG = bd.random(64 / 8);
                    }
                    var key = nZ.create({
                        ah: ah + fN
                    }).Aj(password, dG);
                    var bP = bd.create(key.bq.slice(ah), fN * 4);
                    key.aI = ah * 4;
                    return fw.create({
                        key: key,
                        bP: bP,
                        dG: dG
                    });
                }
            };
            var ni = bC.ni = hw.extend({
                aL: hw.aL.extend({
                    ly: yd
                }),
                bZ: function (aT, message, password, aL) {
                    aL = this.aL.extend(aL);
                    var er = aL.ly.oB(password, aT.ah, aT.fN);
                    aL.bP = er.bP;
                    var bD = hw.bZ.call(this, aT, message, er.key, aL);
                    bD.jT(er);
                    return bD;
                },
                eV: function (aT, bD, password, aL) {
                    aL = this.aL.extend(aL);
                    bD = this.lX(bD, aL.format);
                    var er = aL.ly.oB(password, aT.ah, aT.fN, bD.dG);
                    aL.bP = er.bP;
                    var plaintext = hw.eV.call(this, aT, bD, er.key, aL);
                    return plaintext;
                }
            });
        }());
        aX.mode.gn = (function () {
            var gn = aX.bf.eL.extend();
            gn.cB = gn.extend({
                co: function (bq, offset) {
                    var aT = this.cd;
                    var bB = aT.bB;
                    nI.call(this, bq, offset, bB, aT);
                    this.fO = bq.slice(offset, offset + bB);
                }
            });
            gn.eZ = gn.extend({
                co: function (bq, offset) {
                    var aT = this.cd;
                    var bB = aT.bB;
                    var iM = bq.slice(offset, offset + bB);
                    nI.call(this, bq, offset, bB, aT);
                    this.fO = iM;
                }
            });
            function nI(bq, offset, bB, aT) {
                var bP = this.cQ;
                if (bP) {
                    var cP = bP.slice(0);
                    this.cQ = undefined;
                } else {
                    var cP = this.fO;
                }
                aT.fL(cP, 0);
                for (var i = 0; i < bB; i++) {
                    bq[offset + i] ^= cP[i];
                }
            };
            return gn;
        }());
        aX.mode.ed = (function () {
            var ed = aX.bf.eL.extend();
            ed.cB = ed.extend({
                co: function (bq, offset) {
                    this.cd.fL(bq, offset);
                }
            });
            ed.eZ = ed.extend({
                co: function (bq, offset) {
                    this.cd.kQ(bq, offset);
                }
            });
            return ed;
        }());
        aX.bH.yr = {
            bH: function (data, bB) {
                var gF = data.aI;
                var cq = bB * 4;
                var aZ = cq - gF % cq;
                var jK = gF + aZ - 1;
                data.ag();
                data.bq[jK >>> 2] |= aZ << (24 - (jK % 4) * 8);
                data.aI += aZ;
            },
            es: function (data) {
                var aZ = data.bq[(data.aI - 1) >>> 2] & 0xff;
                data.aI -= aZ;
            }
        };
        aX.bH.Ak = {
            bH: function (data, bB) {
                var cq = bB * 4;
                var aZ = cq - data.aI % cq;
                data.concat(aX.bf.bd.random(aZ - 1)).concat(aX.bf.bd.create([aZ << 24], 1));
            },
            es: function (data) {
                var aZ = data.bq[(data.aI - 1) >>> 2] & 0xff;
                data.aI -= aZ;
            }
        };
        aX.bH.Ai = {
            bH: function (data, bB) {
                data.concat(aX.bf.bd.create([0x80000000], 1));
                aX.bH.oQ.bH(data, bB);
            },
            es: function (data) {
                aX.bH.oQ.es(data);
                data.aI--;
            }
        };
        aX.mode.gK = (function () {
            var gK = aX.bf.eL.extend();
            var cB = gK.cB = gK.extend({
                co: function (bq, offset) {
                    var aT = this.cd;
                    var bB = aT.bB;
                    var bP = this.cQ;
                    var cP = this.qF;
                    if (bP) {
                        cP = this.qF = bP.slice(0);
                        this.cQ = undefined;
                    }
                    aT.fL(cP, 0);
                    for (var i = 0; i < bB; i++) {
                        bq[offset + i] ^= cP[i];
                    }
                }
            });
            gK.eZ = cB;
            return gK;
        }());
        aX.bH.yh = {
            bH: function () { },
            es: function () { }
        }; (function (undefined) {
            var C = aX;
            var bC = C.bf;
            var fw = bC.fw;
            var ck = C.bJ;
            var cJ = ck.cJ;
            var lf = C.format;
            var xm = lf.cJ = {
                stringify: function (eI) {
                    return eI.bD.toString(cJ);
                },
                parse: function (input) {
                    var bD = cJ.parse(input);
                    return fw.create({
                        bD: bD
                    });
                }
            };
        }()); (function () {
            var C = aX;
            var bC = C.bf;
            var gi = bC.gi;
            var cw = C.jg;
            var bj = [];
            var oP = [];
            var eF = [];
            var eG = [];
            var fD = [];
            var ek = [];
            var kr = [];
            var lj = [];
            var ka = [];
            var lk = []; (function () {
                var d = [];
                for (var i = 0; i < 256; i++) {
                    if (i < 128) {
                        d[i] = i << 1;
                    } else {
                        d[i] = (i << 1) ^ 0x11b;
                    }
                }
                var x = 0;
                var fm = 0;
                for (var i = 0; i < 256; i++) {
                    var cr = fm ^ (fm << 1) ^ (fm << 2) ^ (fm << 3) ^ (fm << 4);
                    cr = (cr >>> 8) ^ (cr & 0xff) ^ 0x63;
                    bj[x] = cr;
                    oP[cr] = x;
                    var x2 = d[x];
                    var pa = d[x2];
                    var nm = d[pa];
                    var t = (d[cr] * 0x101) ^ (cr * 0x1010100);
                    eF[x] = (t << 24) | (t >>> 8);
                    eG[x] = (t << 16) | (t >>> 16);
                    fD[x] = (t << 8) | (t >>> 24);
                    ek[x] = t;
                    var t = (nm * 0x1010101) ^ (pa * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
                    kr[cr] = (t << 24) | (t >>> 8);
                    lj[cr] = (t << 16) | (t >>> 16);
                    ka[cr] = (t << 8) | (t >>> 24);
                    lk[cr] = t;
                    if (!x) {
                        x = fm = 1;
                    } else {
                        x = x2 ^ d[d[d[nm ^ x2]]];
                        fm ^= d[d[fm]];
                    }
                }
            }());
            var pS = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
            var iG = cw.iG = gi.extend({
                jf: function () {
                    var key = this.hJ;
                    var keyWords = key.bq;
                    var ah = key.aI / 4;
                    var jO = this.qv = ah + 6;
                    var kF = (jO + 1) * 4;
                    var bV = this.qg = [];
                    for (var aq = 0; aq < kF; aq++) {
                        if (aq < ah) {
                            bV[aq] = keyWords[aq];
                        } else {
                            var t = bV[aq - 1];
                            if (!(aq % ah)) {
                                t = (t << 8) | (t >>> 24);
                                t = (bj[t >>> 24] << 24) | (bj[(t >>> 16) & 0xff] << 16) | (bj[(t >>> 8) & 0xff] << 8) | bj[t & 0xff];
                                t ^= pS[(aq / ah) | 0] << 24;
                            } else if (ah > 6 && aq % ah == 4) {
                                t = (bj[t >>> 24] << 24) | (bj[(t >>> 16) & 0xff] << 16) | (bj[(t >>> 8) & 0xff] << 8) | bj[t & 0xff];
                            }
                            bV[aq] = bV[aq - ah] ^ t;
                        }
                    }
                    var oA = this.qM = [];
                    for (var fp = 0; fp < kF; fp++) {
                        var aq = kF - fp;
                        if (fp % 4) {
                            var t = bV[aq];
                        } else {
                            var t = bV[aq - 4];
                        }
                        if (fp < 4 || aq <= 4) {
                            oA[fp] = t;
                        } else {
                            oA[fp] = kr[bj[t >>> 24]] ^ lj[bj[(t >>> 16) & 0xff]] ^ ka[bj[(t >>> 8) & 0xff]] ^ lk[bj[t & 0xff]];
                        }
                    }
                },
                fL: function (M, offset) {
                    this.lG(M, offset, this.qg, eF, eG, fD, ek, bj);
                },
                kQ: function (M, offset) {
                    var t = M[offset + 1];
                    M[offset + 1] = M[offset + 3];
                    M[offset + 3] = t;
                    this.lG(M, offset, this.qM, kr, lj, ka, lk, oP);
                    var t = M[offset + 1];
                    M[offset + 1] = M[offset + 3];
                    M[offset + 3] = t;
                },
                lG: function (M, offset, bV, eF, eG, fD, ek, bj) {
                    var jO = this.qv;
                    var du = M[offset] ^ bV[0];
                    var cC = M[offset + 1] ^ bV[1];
                    var ci = M[offset + 2] ^ bV[2];
                    var cG = M[offset + 3] ^ bV[3];
                    var aq = 4;
                    for (var round = 1; round < jO; round++) {
                        var hW = eF[du >>> 24] ^ eG[(cC >>> 16) & 0xff] ^ fD[(ci >>> 8) & 0xff] ^ ek[cG & 0xff] ^ bV[aq++];
                        var jr = eF[cC >>> 24] ^ eG[(ci >>> 16) & 0xff] ^ fD[(cG >>> 8) & 0xff] ^ ek[du & 0xff] ^ bV[aq++];
                        var iA = eF[ci >>> 24] ^ eG[(cG >>> 16) & 0xff] ^ fD[(du >>> 8) & 0xff] ^ ek[cC & 0xff] ^ bV[aq++];
                        var jz = eF[cG >>> 24] ^ eG[(du >>> 16) & 0xff] ^ fD[(cC >>> 8) & 0xff] ^ ek[ci & 0xff] ^ bV[aq++];
                        du = hW;
                        cC = jr;
                        ci = iA;
                        cG = jz;
                    }
                    var hW = ((bj[du >>> 24] << 24) | (bj[(cC >>> 16) & 0xff] << 16) | (bj[(ci >>> 8) & 0xff] << 8) | bj[cG & 0xff]) ^ bV[aq++];
                    var jr = ((bj[cC >>> 24] << 24) | (bj[(ci >>> 16) & 0xff] << 16) | (bj[(cG >>> 8) & 0xff] << 8) | bj[du & 0xff]) ^ bV[aq++];
                    var iA = ((bj[ci >>> 24] << 24) | (bj[(cG >>> 16) & 0xff] << 16) | (bj[(du >>> 8) & 0xff] << 8) | bj[cC & 0xff]) ^ bV[aq++];
                    var jz = ((bj[cG >>> 24] << 24) | (bj[(du >>> 16) & 0xff] << 16) | (bj[(cC >>> 8) & 0xff] << 8) | bj[ci & 0xff]) ^ bV[aq++];
                    M[offset] = hW;
                    M[offset + 1] = jr;
                    M[offset + 2] = iA;
                    M[offset + 3] = jz;
                },
                ah: 256 / 32
            });
            C.iG = gi.jx(iG);
        }()); (function (Math) {
            var C = aX;
            var bC = C.bf;
            var bd = bC.bd;
            var wh = bC.wh;
            var cw = C.jg;
            var T = []; (function () {
                for (var i = 0; i < 64; i++) {
                    T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
                }
            }());
            var AF = cw.AF = wh.extend({
                jf: function () {
                    this._hash = new bd.aV([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);
                },
                kq: function (M, offset) {
                    for (var i = 0; i < 16; i++) {
                        var offset_i = offset + i;
                        var M_offset_i = M[offset_i];
                        M[offset_i] = ((((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00));
                    }
                    var H = this._hash.bq;
                    var M_offset_0 = M[offset + 0];
                    var M_offset_1 = M[offset + 1];
                    var M_offset_2 = M[offset + 2];
                    var M_offset_3 = M[offset + 3];
                    var M_offset_4 = M[offset + 4];
                    var M_offset_5 = M[offset + 5];
                    var M_offset_6 = M[offset + 6];
                    var M_offset_7 = M[offset + 7];
                    var M_offset_8 = M[offset + 8];
                    var M_offset_9 = M[offset + 9];
                    var M_offset_10 = M[offset + 10];
                    var M_offset_11 = M[offset + 11];
                    var M_offset_12 = M[offset + 12];
                    var M_offset_13 = M[offset + 13];
                    var M_offset_14 = M[offset + 14];
                    var M_offset_15 = M[offset + 15];
                    var a = H[0];
                    var b = H[1];
                    var c = H[2];
                    var d = H[3];
                    a = FF(a, b, c, d, M_offset_0, 7, T[0]);
                    d = FF(d, a, b, c, M_offset_1, 12, T[1]);
                    c = FF(c, d, a, b, M_offset_2, 17, T[2]);
                    b = FF(b, c, d, a, M_offset_3, 22, T[3]);
                    a = FF(a, b, c, d, M_offset_4, 7, T[4]);
                    d = FF(d, a, b, c, M_offset_5, 12, T[5]);
                    c = FF(c, d, a, b, M_offset_6, 17, T[6]);
                    b = FF(b, c, d, a, M_offset_7, 22, T[7]);
                    a = FF(a, b, c, d, M_offset_8, 7, T[8]);
                    d = FF(d, a, b, c, M_offset_9, 12, T[9]);
                    c = FF(c, d, a, b, M_offset_10, 17, T[10]);
                    b = FF(b, c, d, a, M_offset_11, 22, T[11]);
                    a = FF(a, b, c, d, M_offset_12, 7, T[12]);
                    d = FF(d, a, b, c, M_offset_13, 12, T[13]);
                    c = FF(c, d, a, b, M_offset_14, 17, T[14]);
                    b = FF(b, c, d, a, M_offset_15, 22, T[15]);
                    a = GG(a, b, c, d, M_offset_1, 5, T[16]);
                    d = GG(d, a, b, c, M_offset_6, 9, T[17]);
                    c = GG(c, d, a, b, M_offset_11, 14, T[18]);
                    b = GG(b, c, d, a, M_offset_0, 20, T[19]);
                    a = GG(a, b, c, d, M_offset_5, 5, T[20]);
                    d = GG(d, a, b, c, M_offset_10, 9, T[21]);
                    c = GG(c, d, a, b, M_offset_15, 14, T[22]);
                    b = GG(b, c, d, a, M_offset_4, 20, T[23]);
                    a = GG(a, b, c, d, M_offset_9, 5, T[24]);
                    d = GG(d, a, b, c, M_offset_14, 9, T[25]);
                    c = GG(c, d, a, b, M_offset_3, 14, T[26]);
                    b = GG(b, c, d, a, M_offset_8, 20, T[27]);
                    a = GG(a, b, c, d, M_offset_13, 5, T[28]);
                    d = GG(d, a, b, c, M_offset_2, 9, T[29]);
                    c = GG(c, d, a, b, M_offset_7, 14, T[30]);
                    b = GG(b, c, d, a, M_offset_12, 20, T[31]);
                    a = HH(a, b, c, d, M_offset_5, 4, T[32]);
                    d = HH(d, a, b, c, M_offset_8, 11, T[33]);
                    c = HH(c, d, a, b, M_offset_11, 16, T[34]);
                    b = HH(b, c, d, a, M_offset_14, 23, T[35]);
                    a = HH(a, b, c, d, M_offset_1, 4, T[36]);
                    d = HH(d, a, b, c, M_offset_4, 11, T[37]);
                    c = HH(c, d, a, b, M_offset_7, 16, T[38]);
                    b = HH(b, c, d, a, M_offset_10, 23, T[39]);
                    a = HH(a, b, c, d, M_offset_13, 4, T[40]);
                    d = HH(d, a, b, c, M_offset_0, 11, T[41]);
                    c = HH(c, d, a, b, M_offset_3, 16, T[42]);
                    b = HH(b, c, d, a, M_offset_6, 23, T[43]);
                    a = HH(a, b, c, d, M_offset_9, 4, T[44]);
                    d = HH(d, a, b, c, M_offset_12, 11, T[45]);
                    c = HH(c, d, a, b, M_offset_15, 16, T[46]);
                    b = HH(b, c, d, a, M_offset_2, 23, T[47]);
                    a = II(a, b, c, d, M_offset_0, 6, T[48]);
                    d = II(d, a, b, c, M_offset_7, 10, T[49]);
                    c = II(c, d, a, b, M_offset_14, 15, T[50]);
                    b = II(b, c, d, a, M_offset_5, 21, T[51]);
                    a = II(a, b, c, d, M_offset_12, 6, T[52]);
                    d = II(d, a, b, c, M_offset_3, 10, T[53]);
                    c = II(c, d, a, b, M_offset_10, 15, T[54]);
                    b = II(b, c, d, a, M_offset_1, 21, T[55]);
                    a = II(a, b, c, d, M_offset_8, 6, T[56]);
                    d = II(d, a, b, c, M_offset_15, 10, T[57]);
                    c = II(c, d, a, b, M_offset_6, 15, T[58]);
                    b = II(b, c, d, a, M_offset_13, 21, T[59]);
                    a = II(a, b, c, d, M_offset_4, 6, T[60]);
                    d = II(d, a, b, c, M_offset_11, 10, T[61]);
                    c = II(c, d, a, b, M_offset_2, 15, T[62]);
                    b = II(b, c, d, a, M_offset_9, 21, T[63]);
                    H[0] = (H[0] + a) | 0;
                    H[1] = (H[1] + b) | 0;
                    H[2] = (H[2] + c) | 0;
                    H[3] = (H[3] + d) | 0;
                },
                kG: function () {
                    var data = this.hs;
                    var jk = data.bq;
                    var nBitsTotal = this.qY * 8;
                    var nBitsLeft = data.aI * 8;
                    jk[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
                    var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
                    var nBitsTotalL = nBitsTotal;
                    jk[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ((((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00));
                    jk[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ((((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00));
                    data.aI = (jk.length + 1) * 4;
                    this.gq();
                    var hash = this._hash;
                    var H = hash.bq;
                    for (var i = 0; i < 4; i++) {
                        var H_i = H[i];
                        H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
                    }
                    return hash;
                },
                clone: function () {
                    var clone = wh.clone.call(this);
                    clone._hash = this._hash.clone();
                    return clone;
                }
            });
            function FF(a, b, c, d, x, s, t) {
                var n = a + ((b & c) | (~b & d)) + x + t;
                return ((n << s) | (n >>> (32 - s))) + b;
            };
            function GG(a, b, c, d, x, s, t) {
                var n = a + ((b & d) | (c & ~d)) + x + t;
                return ((n << s) | (n >>> (32 - s))) + b;
            };
            function HH(a, b, c, d, x, s, t) {
                var n = a + (b ^ c ^ d) + x + t;
                return ((n << s) | (n >>> (32 - s))) + b;
            };
            function II(a, b, c, d, x, s, t) {
                var n = a + (c ^ (b | ~d)) + x + t;
                return ((n << s) | (n >>> (32 - s))) + b;
            };
            C.AF = wh.jx(AF);
            C.HmacMD5 = wh.zS(AF);
        }(Math));
        aX.mode.hn = (function () {
            var hn = aX.bf.eL.extend();
            function oT(word) {
                if (((word >> 24) & 0xff) === 0xff) {
                    var il = (word >> 16) & 0xff;
                    var iL = (word >> 8) & 0xff;
                    var jq = word & 0xff;
                    if (il === 0xff) {
                        il = 0;
                        if (iL === 0xff) {
                            iL = 0;
                            if (jq === 0xff) {
                                jq = 0;
                            } else {
                                ++jq;
                            }
                        } else {
                            ++iL;
                        }
                    } else {
                        ++il;
                    }
                    word = 0;
                    word += (il << 16);
                    word += (iL << 8);
                    word += jq;
                } else {
                    word += (0x01 << 24);
                }
                return word;
            };
            function pp(counter) {
                if ((counter[0] = oT(counter[0])) === 0) {
                    counter[1] = oT(counter[1]);
                }
                return counter;
            };
            var cB = hn.cB = hn.extend({
                co: function (bq, offset) {
                    var aT = this.cd;
                    var bB = aT.bB;
                    var bP = this.cQ;
                    var counter = this.jY;
                    if (bP) {
                        counter = this.jY = bP.slice(0);
                        this.cQ = undefined;
                    }
                    pp(counter);
                    var cP = counter.slice(0);
                    aT.fL(cP, 0);
                    for (var i = 0; i < bB; i++) {
                        bq[offset + i] ^= cP[i];
                    }
                }
            });
            hn.eZ = cB;
            return hn;
        }()); (function () {
            var C = aX;
            var bC = C.bf;
            var dC = bC.dC;
            var cw = C.jg;
            var S = [];
            var aJ = [];
            var G = [];
            var jG = cw.jG = dC.extend({
                jf: function () {
                    var K = this.hJ.bq;
                    var bP = this.aL.bP;
                    for (var i = 0; i < 4; i++) {
                        K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);
                    }
                    var X = this.hC = [K[0], (K[3] << 16) | (K[2] >>> 16), K[1], (K[0] << 16) | (K[3] >>> 16), K[2], (K[1] << 16) | (K[0] >>> 16), K[3], (K[2] << 16) | (K[1] >>> 16)];
                    var C = this.kt = [(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)];
                    this.fP = 0;
                    for (var i = 0; i < 4; i++) {
                        eQ.call(this);
                    }
                    for (var i = 0; i < 8; i++) {
                        C[i] ^= X[(i + 4) & 7];
                    }
                    if (bP) {
                        var hD = bP.bq;
                        var cz = hD[0];
                        var dz = hD[1];
                        var dc = (((cz << 8) | (cz >>> 24)) & 0x00ff00ff) | (((cz << 24) | (cz >>> 8)) & 0xff00ff00);
                        var cN = (((dz << 8) | (dz >>> 24)) & 0x00ff00ff) | (((dz << 24) | (dz >>> 8)) & 0xff00ff00);
                        var fQ = (dc >>> 16) | (cN & 0xffff0000);
                        var hH = (cN << 16) | (dc & 0x0000ffff);
                        C[0] ^= dc;
                        C[1] ^= fQ;
                        C[2] ^= cN;
                        C[3] ^= hH;
                        C[4] ^= dc;
                        C[5] ^= fQ;
                        C[6] ^= cN;
                        C[7] ^= hH;
                        for (var i = 0; i < 4; i++) {
                            eQ.call(this);
                        }
                    }
                },
                kq: function (M, offset) {
                    var X = this.hC;
                    eQ.call(this);
                    S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
                    S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
                    S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
                    S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
                    for (var i = 0; i < 4; i++) {
                        S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
                        M[offset + i] ^= S[i];
                    }
                },
                bB: 128 / 32,
                fN: 64 / 32
            });
            function eQ() {
                var X = this.hC;
                var C = this.kt;
                for (var i = 0; i < 8; i++) {
                    aJ[i] = C[i];
                }
                C[0] = (C[0] + 0x4d34d34d + this.fP) | 0;
                C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (aJ[0] >>> 0) ? 1 : 0)) | 0;
                C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (aJ[1] >>> 0) ? 1 : 0)) | 0;
                C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (aJ[2] >>> 0) ? 1 : 0)) | 0;
                C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (aJ[3] >>> 0) ? 1 : 0)) | 0;
                C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (aJ[4] >>> 0) ? 1 : 0)) | 0;
                C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (aJ[5] >>> 0) ? 1 : 0)) | 0;
                C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (aJ[6] >>> 0) ? 1 : 0)) | 0;
                this.fP = (C[7] >>> 0) < (aJ[7] >>> 0) ? 1 : 0;
                for (var i = 0; i < 8; i++) {
                    var da = X[i] + C[i];
                    var eS = da & 0xffff;
                    var dX = da >>> 16;
                    var jE = ((((eS * eS) >>> 17) + eS * dX) >>> 15) + dX * dX;
                    var jc = (((da & 0xffff0000) * da) | 0) + (((da & 0x0000ffff) * da) | 0);
                    G[i] = jE ^ jc;
                }
                X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
                X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
                X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
                X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
                X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
                X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
                X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
                X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
            };
            C.jG = dC.jx(jG);
        }());
        aX.mode.gM = (function () {
            var gM = aX.bf.eL.extend();
            var cB = gM.cB = gM.extend({
                co: function (bq, offset) {
                    var aT = this.cd;
                    var bB = aT.bB;
                    var bP = this.cQ;
                    var counter = this.jY;
                    if (bP) {
                        counter = this.jY = bP.slice(0);
                        this.cQ = undefined;
                    }
                    var cP = counter.slice(0);
                    aT.fL(cP, 0);
                    counter[bB - 1] = (counter[bB - 1] + 1) | 0;
                    for (var i = 0; i < bB; i++) {
                        bq[offset + i] ^= cP[i];
                    }
                }
            });
            gM.eZ = cB;
            return gM;
        }()); (function () {
            var C = aX;
            var bC = C.bf;
            var dC = bC.dC;
            var cw = C.jg;
            var S = [];
            var aJ = [];
            var G = [];
            var kS = cw.kS = dC.extend({
                jf: function () {
                    var K = this.hJ.bq;
                    var bP = this.aL.bP;
                    var X = this.hC = [K[0], (K[3] << 16) | (K[2] >>> 16), K[1], (K[0] << 16) | (K[3] >>> 16), K[2], (K[1] << 16) | (K[0] >>> 16), K[3], (K[2] << 16) | (K[1] >>> 16)];
                    var C = this.kt = [(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)];
                    this.fP = 0;
                    for (var i = 0; i < 4; i++) {
                        eQ.call(this);
                    }
                    for (var i = 0; i < 8; i++) {
                        C[i] ^= X[(i + 4) & 7];
                    }
                    if (bP) {
                        var hD = bP.bq;
                        var cz = hD[0];
                        var dz = hD[1];
                        var dc = (((cz << 8) | (cz >>> 24)) & 0x00ff00ff) | (((cz << 24) | (cz >>> 8)) & 0xff00ff00);
                        var cN = (((dz << 8) | (dz >>> 24)) & 0x00ff00ff) | (((dz << 24) | (dz >>> 8)) & 0xff00ff00);
                        var fQ = (dc >>> 16) | (cN & 0xffff0000);
                        var hH = (cN << 16) | (dc & 0x0000ffff);
                        C[0] ^= dc;
                        C[1] ^= fQ;
                        C[2] ^= cN;
                        C[3] ^= hH;
                        C[4] ^= dc;
                        C[5] ^= fQ;
                        C[6] ^= cN;
                        C[7] ^= hH;
                        for (var i = 0; i < 4; i++) {
                            eQ.call(this);
                        }
                    }
                },
                kq: function (M, offset) {
                    var X = this.hC;
                    eQ.call(this);
                    S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
                    S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
                    S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
                    S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
                    for (var i = 0; i < 4; i++) {
                        S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
                        M[offset + i] ^= S[i];
                    }
                },
                bB: 128 / 32,
                fN: 64 / 32
            });
            function eQ() {
                var X = this.hC;
                var C = this.kt;
                for (var i = 0; i < 8; i++) {
                    aJ[i] = C[i];
                }
                C[0] = (C[0] + 0x4d34d34d + this.fP) | 0;
                C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (aJ[0] >>> 0) ? 1 : 0)) | 0;
                C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (aJ[1] >>> 0) ? 1 : 0)) | 0;
                C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (aJ[2] >>> 0) ? 1 : 0)) | 0;
                C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (aJ[3] >>> 0) ? 1 : 0)) | 0;
                C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (aJ[4] >>> 0) ? 1 : 0)) | 0;
                C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (aJ[5] >>> 0) ? 1 : 0)) | 0;
                C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (aJ[6] >>> 0) ? 1 : 0)) | 0;
                this.fP = (C[7] >>> 0) < (aJ[7] >>> 0) ? 1 : 0;
                for (var i = 0; i < 8; i++) {
                    var da = X[i] + C[i];
                    var eS = da & 0xffff;
                    var dX = da >>> 16;
                    var jE = ((((eS * eS) >>> 17) + eS * dX) >>> 15) + dX * dX;
                    var jc = (((da & 0xffff0000) * da) | 0) + (((da & 0x0000ffff) * da) | 0);
                    G[i] = jE ^ jc;
                }
                X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
                X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
                X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
                X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
                X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
                X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
                X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
                X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
            };
            C.kS = dC.jx(kS);
        }());
        aX.bH.oQ = {
            bH: function (data, bB) {
                var cq = bB * 4;
                data.ag();
                data.aI += cq - ((data.aI % cq) || cq);
            },
            es: function (data) {
                var jk = data.bq;
                var i = data.aI - 1;
                while (!((jk[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
                    i--;
                }
                data.aI = i + 1;
            }
        };
        return aX;
    }));
function qh(ns, rd) {
    var yg = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x1A, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x3A, 0x3B, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x1A, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x3A, 0x3B];
    var gf = "";
    var mj = "";
    for (var i = 0; i < ns.length; i++) {
        mj = String.fromCharCode(ns[i].charCodeAt(0) ^ yg[i]);
        gf += mj;
    }
    gf = gf.substr(0, gf.length - 16);
    var wv = aX.bJ.hh.parse(gf);
    var wy = aX.iG.bZ(rd, wv, {
        mode: aX.mode.ed,
        padding: aX.bH.kB
    });
    return wy.toString();
};
function hash(bS) {
    return aX.AF(bS);
};;
var lT = {}; (function (fg) {
    var fC;
    var wr = 0xdeadbeefcafe;
    var mT = ((wr & 0xffffff) == 0xefcafe);
    function O(a, b, c) {
        if (a != null) if ("number" == typeof a) this.ki(a, b, c);
        else if (b == null && "string" != typeof a) this.gw(a, 256);
        else this.gw(a, b);
    };
    function aO() {
        return new O(null);
    };
    function pD(i, x, w, j, c, n) {
        while (--n >= 0) {
            var v = x * this[i++] + w[j] + c;
            c = Math.floor(v / 0x4000000);
            w[j++] = v & 0x3ffffff;
        }
        return c;
    };
    function sc(i, x, w, j, c, n) {
        var gE = x & 0x7fff,
            fR = x >> 15;
        while (--n >= 0) {
            var l = this[i] & 0x7fff;
            var h = this[i++] >> 15;
            var m = fR * l + h * gE;
            l = gE * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);
            c = (l >>> 30) + (m >>> 15) + fR * h + (c >>> 30);
            w[j++] = l & 0x3fffffff;
        }
        return c;
    };
    function rN(i, x, w, j, c, n) {
        var gE = x & 0x3fff,
            fR = x >> 14;
        while (--n >= 0) {
            var l = this[i] & 0x3fff;
            var h = this[i++] >> 14;
            var m = fR * l + h * gE;
            l = gE * l + ((m & 0x3fff) << 14) + w[j] + c;
            c = (l >> 28) + (m >> 14) + fR * h;
            w[j++] = l & 0xfffffff;
        }
        return c;
    };
    if (mT && (navigator.appName == "Microsoft Internet Explorer")) {
        O.prototype.dN = sc;
        fC = 30;
    } else if (mT && (navigator.appName != "Netscape")) {
        O.prototype.dN = pD;
        fC = 26;
    } else {
        O.prototype.dN = rN;
        fC = 28;
    }
    O.prototype.bb = fC;
    O.prototype.aW = ((1 << fC) - 1);
    O.prototype.dq = (1 << fC);
    var lu = 52;
    O.prototype.wY = Math.pow(2, lu);
    O.prototype.oK = lu - fC;
    O.prototype.oM = 2 * fC - lu;
    var vW = "0123456789abcdefghijklmnopqrstuvwxyz";
    var ix = new Array();
    var eA, cu;
    eA = "0".charCodeAt(0);
    for (cu = 0; cu <= 9; ++cu) ix[eA++] = cu;
    eA = "a".charCodeAt(0);
    for (cu = 10; cu < 36; ++cu) ix[eA++] = cu;
    eA = "A".charCodeAt(0);
    for (cu = 10; cu < 36; ++cu) ix[eA++] = cu;
    function dE(n) {
        return vW.charAt(n);
    };
    function mE(s, i) {
        var c = ix[s.charCodeAt(i)];
        return (c == null) ? -1 : c;
    };
    function sN(r) {
        for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];
        r.t = this.t;
        r.s = this.s;
    };
    function qf(x) {
        this.t = 1;
        this.s = (x < 0) ? -1 : 0;
        if (x > 0) this[0] = x;
        else if (x < -1) this[0] = x + this.dq;
        else this.t = 0;
    };
    function dV(i) {
        var r = aO();
        r.gr(i);
        return r;
    };
    function pR(s, b) {
        var k;
        if (b == 16) k = 4;
        else if (b == 8) k = 3;
        else if (b == 256) k = 8;
        else if (b == 2) k = 1;
        else if (b == 32) k = 5;
        else if (b == 4) k = 2;
        else {
            this.wq(s, b);
            return;
        }
        this.t = 0;
        this.s = 0;
        var i = s.length,
            eP = false,
            sh = 0;
        while (--i >= 0) {
            var x = (k == 8) ? s[i] & 0xff : mE(s, i);
            if (x < 0) {
                if (s.charAt(i) == "-") eP = true;
                continue;
            }
            eP = false;
            if (sh == 0) this[this.t++] = x;
            else if (sh + k > this.bb) {
                this[this.t - 1] |= (x & ((1 << (this.bb - sh)) - 1)) << sh;
                this[this.t++] = (x >> (this.bb - sh));
            } else this[this.t - 1] |= x << sh;
            sh += k;
            if (sh >= this.bb) sh -= this.bb;
        }
        if (k == 8 && (s[0] & 0x80) != 0) {
            this.s = -1;
            if (sh > 0) this[this.t - 1] |= ((1 << (this.bb - sh)) - 1) << sh;
        }
        this.ag();
        if (eP) O.ZERO.aj(this, this);
    };
    function sr() {
        var c = this.s & this.aW;
        while (this.t > 0 && this[this.t - 1] == c)--this.t;
    };
    function sg(b) {
        if (this.s < 0) return "-" + this.fF().toString(b);
        var k;
        if (b == 16) k = 4;
        else if (b == 8) k = 3;
        else if (b == 2) k = 1;
        else if (b == 32) k = 5;
        else if (b == 4) k = 2;
        else return this.tj(b);
        var jt = (1 << k) - 1,
            d,
            m = false,
            r = "",
            i = this.t;
        var p = this.bb - (i * this.bb) % k;
        if (i-- > 0) {
            if (p < this.bb && (d = this[i] >> p) > 0) {
                m = true;
                r = dE(d);
            }
            while (i >= 0) {
                if (p < k) {
                    d = (this[i] & ((1 << p) - 1)) << (k - p);
                    d |= this[--i] >> (p += this.bb - k);
                } else {
                    d = (this[i] >> (p -= k)) & jt;
                    if (p <= 0) {
                        p += this.bb; --i;
                    }
                }
                if (d > 0) m = true;
                if (m) r += dE(d);
            }
        }
        return m ? r : "0";
    };
    function pF() {
        var r = aO();
        O.ZERO.aj(this, r);
        return r;
    };
    function rG() {
        return (this.s < 0) ? this.fF() : this;
    };
    function uq(a) {
        var r = this.s - a.s;
        if (r != 0) return r;
        var i = this.t;
        r = i - a.t;
        if (r != 0) return (this.s < 0) ? -r : r;
        while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;
        return 0;
    };
    function ij(x) {
        var r = 1,
            t;
        if ((t = x >>> 16) != 0) {
            x = t;
            r += 16;
        }
        if ((t = x >> 8) != 0) {
            x = t;
            r += 8;
        }
        if ((t = x >> 4) != 0) {
            x = t;
            r += 4;
        }
        if ((t = x >> 2) != 0) {
            x = t;
            r += 2;
        }
        if ((t = x >> 1) != 0) {
            x = t;
            r += 1;
        }
        return r;
    };
    function rK() {
        if (this.t <= 0) return 0;
        return this.bb * (this.t - 1) + ij(this[this.t - 1] ^ (this.s & this.aW));
    };
    function qD(n, r) {
        var i;
        for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];
        for (i = n - 1; i >= 0; --i) r[i] = 0;
        r.t = this.t + n;
        r.s = this.s;
    };
    function rg(n, r) {
        for (var i = n; i < this.t; ++i) r[i - n] = this[i];
        r.t = Math.max(this.t - n, 0);
        r.s = this.s;
    };
    function qZ(n, r) {
        var cO = n % this.bb;
        var gc = this.bb - cO;
        var iJ = (1 << gc) - 1;
        var cX = Math.floor(n / this.bb),
            c = (this.s << cO) & this.aW,
            i;
        for (i = this.t - 1; i >= 0; --i) {
            r[i + cX + 1] = (this[i] >> gc) | c;
            c = (this[i] & iJ) << cO;
        }
        for (i = cX - 1; i >= 0; --i) r[i] = 0;
        r[cX] = c;
        r.t = this.t + cX + 1;
        r.s = this.s;
        r.ag();
    };
    function sm(n, r) {
        r.s = this.s;
        var cX = Math.floor(n / this.bb);
        if (cX >= this.t) {
            r.t = 0;
            return;
        }
        var cO = n % this.bb;
        var gc = this.bb - cO;
        var iJ = (1 << cO) - 1;
        r[0] = this[cX] >> cO;
        for (var i = cX + 1; i < this.t; ++i) {
            r[i - cX - 1] |= (this[i] & iJ) << gc;
            r[i - cX] = this[i] >> cO;
        }
        if (cO > 0) r[this.t - cX - 1] |= (this.s & iJ) << gc;
        r.t = this.t - cX;
        r.ag();
    };
    function sk(a, r) {
        var i = 0,
            c = 0,
            m = Math.min(a.t, this.t);
        while (i < m) {
            c += this[i] - a[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        if (a.t < this.t) {
            c -= a.s;
            while (i < this.t) {
                c += this[i];
                r[i++] = c & this.aW;
                c >>= this.bb;
            }
            c += this.s;
        } else {
            c += this.s;
            while (i < a.t) {
                c -= a[i];
                r[i++] = c & this.aW;
                c >>= this.bb;
            }
            c -= a.s;
        }
        r.s = (c < 0) ? -1 : 0;
        if (c < -1) r[i++] = this.dq + c;
        else if (c > 0) r[i++] = c;
        r.t = i;
        r.ag();
    };
    function sT(a, r) {
        var x = this.abs(),
            y = a.abs();
        var i = x.t;
        r.t = i + y.t;
        while (--i >= 0) r[i] = 0;
        for (i = 0; i < y.t; ++i) r[i + x.t] = x.dN(0, y[i], r, i, 0, x.t);
        r.s = 0;
        r.ag();
        if (this.s != a.s) O.ZERO.aj(r, r);
    };
    function st(r) {
        var x = this.abs();
        var i = r.t = 2 * x.t;
        while (--i >= 0) r[i] = 0;
        for (i = 0; i < x.t - 1; ++i) {
            var c = x.dN(i, x[i], r, 2 * i, 0, 1);
            if ((r[i + x.t] += x.dN(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.dq) {
                r[i + x.t] -= x.dq;
                r[i + x.t + 1] = 1;
            }
        }
        if (r.t > 0) r[r.t - 1] += x.dN(i, x[i], r, 2 * i, 0, 1);
        r.s = 0;
        r.ag();
    };
    function qk(m, q, r) {
        var pm = m.abs();
        if (pm.t <= 0) return;
        var pt = this.abs();
        if (pt.t < pm.t) {
            if (q != null) q.gr(0);
            if (r != null) this.eB(r);
            return;
        }
        if (r == null) r = aO();
        var y = aO(),
            pq = this.s,
            ms = m.s;
        var hj = this.bb - ij(pm[pm.t - 1]);
        if (hj > 0) {
            pm.fB(hj, y);
            pt.fB(hj, r);
        } else {
            pm.eB(y);
            pt.eB(r);
        }
        var cE = y.t;
        var ik = y[cE - 1];
        if (ik == 0) return;
        var nN = ik * (1 << this.oK) + ((cE > 1) ? y[cE - 2] >> this.oM : 0);
        var xG = this.wY / nN,
            yn = (1 << this.oK) / nN,
            e = 1 << this.oM;
        var i = r.t,
            j = i - cE,
            t = (q == null) ? aO() : q;
        y.gG(j, t);
        if (r.az(t) >= 0) {
            r[r.t++] = 1;
            r.aj(t, r);
        }
        O.ONE.gG(cE, t);
        t.aj(y, y);
        while (y.t < cE) y[y.t++] = 0;
        while (--j >= 0) {
            var jL = (r[--i] == ik) ? this.aW : Math.floor(r[i] * xG + (r[i - 1] + e) * yn);
            if ((r[i] += y.dN(0, jL, r, j, 0, cE)) < jL) {
                y.gG(j, t);
                r.aj(t, r);
                while (r[i] < --jL) r.aj(t, r);
            }
        }
        if (q != null) {
            r.gk(cE, q);
            if (pq != ms) O.ZERO.aj(q, q);
        }
        r.t = cE;
        r.ag();
        if (hj > 0) r.aD(hj, r);
        if (pq < 0) O.ZERO.aj(r, r);
    };
    function sD(a) {
        var r = aO();
        this.abs().ey(a, null, r);
        if (this.s < 0 && r.az(O.ZERO) > 0) a.aj(r, r);
        return r;
    };
    function ew(m) {
        this.m = m;
    };
    function rS(x) {
        if (x.s < 0 || x.az(this.m) >= 0) return x.dn(this.m);
        else return x;
    };
    function sS(x) {
        return x;
    };
    function sj(x) {
        x.ey(this.m, null, x);
    };
    function rZ(x, y, r) {
        x.fW(y, r);
        this.reduce(r);
    };
    function rF(x, r) {
        x.gL(r);
        this.reduce(r);
    };
    ew.prototype.convert = rS;
    ew.prototype.revert = sS;
    ew.prototype.reduce = sj;
    ew.prototype.eb = rZ;
    ew.prototype.cL = rF;
    function rm() {
        if (this.t < 1) return 0;
        var x = this[0];
        if ((x & 1) == 0) return 0;
        var y = x & 3;
        y = (y * (2 - (x & 0xf) * y)) & 0xf;
        y = (y * (2 - (x & 0xff) * y)) & 0xff;
        y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;
        y = (y * (2 - x * y % this.dq)) % this.dq;
        return (y > 0) ? this.dq - y : -y;
    };
    function dY(m) {
        this.m = m;
        this.mQ = m.wc();
        this.mF = this.mQ & 0x7fff;
        this.wf = this.mQ >> 15;
        this.sL = (1 << (m.bb - 15)) - 1;
        this.yF = 2 * m.t;
    };
    function pf(x) {
        var r = aO();
        x.abs().gG(this.m.t, r);
        r.ey(this.m, null, r);
        if (x.s < 0 && r.az(O.ZERO) > 0) this.m.aj(r, r);
        return r;
    };
    function qz(x) {
        var r = aO();
        x.eB(r);
        this.reduce(r);
        return r;
    };
    function pN(x) {
        while (x.t <= this.yF) x[x.t++] = 0;
        for (var i = 0; i < this.m.t; ++i) {
            var j = x[i] & 0x7fff;
            var tc = (j * this.mF + (((j * this.wf + (x[i] >> 15) * this.mF) & this.sL) << 15)) & x.aW;
            j = i + this.m.t;
            x[j] += this.m.dN(0, tc, x, i, 0, this.m.t);
            while (x[j] >= x.dq) {
                x[j] -= x.dq;
                x[++j]++;
            }
        }
        x.ag();
        x.gk(this.m.t, x);
        if (x.az(this.m) >= 0) x.aj(this.m, x);
    };
    function qy(x, r) {
        x.gL(r);
        this.reduce(r);
    };
    function ov(x, y, r) {
        x.fW(y, r);
        this.reduce(r);
    };
    dY.prototype.convert = pf;
    dY.prototype.revert = qz;
    dY.prototype.reduce = pN;
    dY.prototype.eb = ov;
    dY.prototype.cL = qy;
    function qB() {
        return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
    };
    function qK(e, z) {
        if (e > 0xffffffff || e < 1) return O.ONE;
        var r = aO(),
            r2 = aO(),
            g = z.convert(this),
            i = ij(e) - 1;
        g.eB(r);
        while (--i >= 0) {
            z.cL(r, r2);
            if ((e & (1 << i)) > 0) z.eb(r2, g, r);
            else {
                var t = r;
                r = r2;
                r2 = t;
            }
        }
        return z.revert(r);
    };
    function rO(e, m) {
        var z;
        if (e < 256 || m.cU()) z = new ew(m);
        else z = new dY(m);
        return this.exp(e, z);
    };
    O.prototype.eB = sN;
    O.prototype.gr = qf;
    O.prototype.gw = pR;
    O.prototype.ag = sr;
    O.prototype.gG = qD;
    O.prototype.gk = rg;
    O.prototype.fB = qZ;
    O.prototype.aD = sm;
    O.prototype.aj = sk;
    O.prototype.fW = sT;
    O.prototype.gL = st;
    O.prototype.ey = qk;
    O.prototype.wc = rm;
    O.prototype.cU = qB;
    O.prototype.exp = qK;
    O.prototype.toString = sg;
    O.prototype.fF = pF;
    O.prototype.abs = rG;
    O.prototype.az = uq;
    O.prototype.ho = rK;
    O.prototype.dn = sD;
    O.prototype.mk = rO;
    O.ZERO = dV(0);
    O.ONE = dV(1);
    function uy() {
        var r = aO();
        this.eB(r);
        return r;
    };
    function sO() {
        if (this.s < 0) {
            if (this.t == 1) return this[0] - this.dq;
            else if (this.t == 0) return - 1;
        } else if (this.t == 1) return this[0];
        else if (this.t == 0) return 0;
        return ((this[1] & ((1 << (32 - this.bb)) - 1)) << this.bb) | this[0];
    };
    function ss() {
        return (this.t == 0) ? this.s : (this[0] << 24) >> 24;
    };
    function sY() {
        return (this.t == 0) ? this.s : (this[0] << 16) >> 16;
    };
    function sb(r) {
        return Math.floor(Math.LN2 * this.bb / Math.log(r));
    };
    function si() {
        if (this.s < 0) return - 1;
        else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
        else return 1;
    };
    function rI(b) {
        if (b == null) b = 10;
        if (this.dh() == 0 || b < 2 || b > 36) return "0";
        var cs = this.lL(b);
        var a = Math.pow(b, cs);
        var d = dV(a),
            y = aO(),
            z = aO(),
            r = "";
        this.ey(d, y, z);
        while (y.dh() > 0) {
            r = (a + z.hy()).toString(b).substr(1) + r;
            y.ey(d, y, z);
        }
        return z.hy().toString(b) + r;
    };
    function qP(s, b) {
        this.gr(0);
        if (b == null) b = 10;
        var cs = this.lL(b);
        var d = Math.pow(b, cs),
            eP = false,
            j = 0,
            w = 0;
        for (var i = 0; i < s.length; ++i) {
            var x = mE(s, i);
            if (x < 0) {
                if (s.charAt(i) == "-" && this.dh() == 0) eP = true;
                continue;
            }
            w = b * w + x;
            if (++j >= cs) {
                this.oa(d);
                this.eD(w, 0);
                j = 0;
                w = 0;
            }
        }
        if (j > 0) {
            this.oa(Math.pow(b, j));
            this.eD(w, 0);
        }
        if (eP) O.ZERO.aj(this, this);
    };
    function qW(a, b, c) {
        if ("number" == typeof b) {
            if (a < 2) this.gr(1);
            else {
                this.ki(a, c);
                if (!this.lZ(a - 1)) this.J(O.ONE.shiftLeft(a - 1), jC, this);
                if (this.cU()) this.eD(1, 0);
                while (!this.gJ(b)) {
                    this.eD(2, 0);
                    if (this.ho() > a) this.aj(O.ONE.shiftLeft(a - 1), this);
                }
            }
        } else {
            var x = new Array(),
                t = a & 7;
            x.length = (a >> 3) + 1;
            b.lp(x);
            if (t > 0) x[0] &= ((1 << t) - 1);
            else x[0] = 0;
            this.gw(x, 256);
        }
    };
    function rJ() {
        var i = this.t,
            r = new Array();
        r[0] = this.s;
        var p = this.bb - (i * this.bb) % 8,
            d,
            k = 0;
        if (i-- > 0) {
            if (p < this.bb && (d = this[i] >> p) != (this.s & this.aW) >> p) r[k++] = d | (this.s << (this.bb - p));
            while (i >= 0) {
                if (p < 8) {
                    d = (this[i] & ((1 << p) - 1)) << (8 - p);
                    d |= this[--i] >> (p += this.bb - 8);
                } else {
                    d = (this[i] >> (p -= 8)) & 0xff;
                    if (p <= 0) {
                        p += this.bb; --i;
                    }
                }
                if ((d & 0x80) != 0) d |= -256;
                if (k == 0 && (this.s & 0x80) != (d & 0x80))++k;
                if (k > 0 || d != this.s) r[k++] = d;
            }
        }
        return r;
    };
    function tA(a) {
        return (this.az(a) == 0);
    };
    function bQ(a) {
        return (this.az(a) < 0) ? this : a;
    };
    function rz(a) {
        return (this.az(a) > 0) ? this : a;
    };
    function pZ(a, ej, r) {
        var i, f, m = Math.min(a.t, this.t);
        for (i = 0; i < m; ++i) r[i] = ej(this[i], a[i]);
        if (a.t < this.t) {
            f = a.s & this.aW;
            for (i = m; i < this.t; ++i) r[i] = ej(this[i], f);
            r.t = this.t;
        } else {
            f = this.s & this.aW;
            for (i = m; i < a.t; ++i) r[i] = ej(f, a[i]);
            r.t = a.t;
        }
        r.s = ej(this.s, a.s);
        r.ag();
    };
    function ri(x, y) {
        return x & y;
    };
    function sM(a) {
        var r = aO();
        this.J(a, ri, r);
        return r;
    };
    function jC(x, y) {
        return x | y;
    };
    function qI(a) {
        var r = aO();
        this.J(a, jC, r);
        return r;
    };
    function oz(x, y) {
        return x ^ y;
    };
    function sC(a) {
        var r = aO();
        this.J(a, oz, r);
        return r;
    };
    function oS(x, y) {
        return x & ~y;
    };
    function sU(a) {
        var r = aO();
        this.J(a, oS, r);
        return r;
    };
    function qc() {
        var r = aO();
        for (var i = 0; i < this.t; ++i) r[i] = this.aW & ~this[i];
        r.t = this.t;
        r.s = ~this.s;
        return r;
    };
    function rv(n) {
        var r = aO();
        if (n < 0) this.aD(- n, r);
        else this.fB(n, r);
        return r;
    };
    function sQ(n) {
        var r = aO();
        if (n < 0) this.fB(- n, r);
        else this.aD(n, r);
        return r;
    };
    function nB(x) {
        if (x == 0) return - 1;
        var r = 0;
        if ((x & 0xffff) == 0) {
            x >>= 16;
            r += 16;
        }
        if ((x & 0xff) == 0) {
            x >>= 8;
            r += 8;
        }
        if ((x & 0xf) == 0) {
            x >>= 4;
            r += 4;
        }
        if ((x & 3) == 0) {
            x >>= 2;
            r += 2;
        }
        if ((x & 1) == 0)++r;
        return r;
    };
    function sy() {
        for (var i = 0; i < this.t; ++i) if (this[i] != 0) return i * this.bb + nB(this[i]);
        if (this.s < 0) return this.t * this.bb;
        return - 1;
    };
    function ta(x) {
        var r = 0;
        while (x != 0) {
            x &= x - 1; ++r;
        }
        return r;
    };
    function rM() {
        var r = 0,
            x = this.s & this.aW;
        for (var i = 0; i < this.t; ++i) r += ta(this[i] ^ x);
        return r;
    };
    function sH(n) {
        var j = Math.floor(n / this.bb);
        if (j >= this.t) return (this.s != 0);
        return ((this[j] & (1 << (n % this.bb))) != 0);
    };
    function tk(n, ej) {
        var r = O.ONE.shiftLeft(n);
        this.J(r, ej, r);
        return r;
    };
    function rq(n) {
        return this.jP(n, jC);
    };
    function uT(n) {
        return this.jP(n, oS);
    };
    function tS(n) {
        return this.jP(n, oz);
    };
    function pO(a, r) {
        var i = 0,
            c = 0,
            m = Math.min(a.t, this.t);
        while (i < m) {
            c += this[i] + a[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        if (a.t < this.t) {
            c += a.s;
            while (i < this.t) {
                c += this[i];
                r[i++] = c & this.aW;
                c >>= this.bb;
            }
            c += this.s;
        } else {
            c += this.s;
            while (i < a.t) {
                c += a[i];
                r[i++] = c & this.aW;
                c >>= this.bb;
            }
            c += a.s;
        }
        r.s = (c < 0) ? -1 : 0;
        if (c > 0) r[i++] = c;
        else if (c < -1) r[i++] = this.dq + c;
        r.t = i;
        r.ag();
    };
    function sX(a) {
        var r = aO();
        this.jh(a, r);
        return r;
    };
    function sl(a) {
        var r = aO();
        this.aj(a, r);
        return r;
    };
    function sV(a) {
        var r = aO();
        this.fW(a, r);
        return r;
    };
    function sR() {
        var r = aO();
        this.gL(r);
        return r;
    };
    function su(a) {
        var r = aO();
        this.ey(a, r, null);
        return r;
    };
    function rH(a) {
        var r = aO();
        this.ey(a, null, r);
        return r;
    };
    function uI(a) {
        var q = aO(),
            r = aO();
        this.ey(a, q, r);
        return new Array(q, r);
    };
    function qt(n) {
        this[this.t] = this.dN(0, n - 1, this, 0, 0, this.t); ++this.t;
        this.ag();
    };
    function qH(n, w) {
        if (n == 0) return;
        while (this.t <= w) this[this.t++] = 0;
        this[w] += n;
        while (this[w] >= this.dq) {
            this[w] -= this.dq;
            if (++w >= this.t) this[this.t++] = 0; ++this[w];
        }
    };
    function gR() { };
    function oW(x) {
        return x;
    };
    function pL(x, y, r) {
        x.fW(y, r);
    };
    function qr(x, r) {
        x.gL(r);
    };
    gR.prototype.convert = oW;
    gR.prototype.revert = oW;
    gR.prototype.eb = pL;
    gR.prototype.cL = qr;
    function tg(e) {
        return this.exp(e, new gR());
    };
    function rs(a, n, r) {
        var i = Math.min(this.t + a.t, n);
        r.s = 0;
        r.t = i;
        while (i > 0) r[--i] = 0;
        var j;
        for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.dN(0, a[i], r, i, 0, this.t);
        for (j = Math.min(a.t, n); i < j; ++i) this.dN(0, a[i], r, i, 0, n - i);
        r.ag();
    };
    function rU(a, n, r) {
        --n;
        var i = r.t = this.t + a.t - n;
        r.s = 0;
        while (--i >= 0) r[i] = 0;
        for (i = Math.max(n - this.t, 0); i < a.t; ++i) r[this.t + i - n] = this.dN(n - i, a[i], r, 0, 0, this.t + i - n);
        r.ag();
        r.gk(1, r);
    };
    function dW(m) {
        this.r2 = aO();
        this.nj = aO();
        O.ONE.gG(2 * m.t, this.r2);
        this.xB = this.r2.divide(m);
        this.m = m;
    };
    function rC(x) {
        if (x.s < 0 || x.t > 2 * this.m.t) return x.dn(this.m);
        else if (x.az(this.m) < 0) return x;
        else {
            var r = aO();
            x.eB(r);
            this.reduce(r);
            return r;
        }
    };
    function sf(x) {
        return x;
    };
    function ru(x) {
        x.gk(this.m.t - 1, this.r2);
        if (x.t > this.m.t + 1) {
            x.t = this.m.t + 1;
            x.ag();
        }
        this.xB.yA(this.r2, this.m.t + 1, this.nj);
        this.m.yk(this.nj, this.m.t + 1, this.r2);
        while (x.az(this.r2) < 0) x.eD(1, this.m.t + 1);
        x.aj(this.r2, x);
        while (x.az(this.m) >= 0) x.aj(this.m, x);
    };
    function tf(x, r) {
        x.gL(r);
        this.reduce(r);
    };
    function sB(x, y, r) {
        x.fW(y, r);
        this.reduce(r);
    };
    dW.prototype.convert = rC;
    dW.prototype.revert = sf;
    dW.prototype.reduce = ru;
    dW.prototype.eb = sB;
    dW.prototype.cL = tf;
    function sd(e, m) {
        var i = e.ho(),
            k,
            r = dV(1),
            z;
        if (i <= 0) return r;
        else if (i < 18) k = 1;
        else if (i < 48) k = 3;
        else if (i < 144) k = 4;
        else if (i < 768) k = 5;
        else k = 6;
        if (i < 8) z = new ew(m);
        else if (m.cU()) z = new dW(m);
        else z = new dY(m);
        var g = new Array(),
            n = 3,
            fY = k - 1,
            jt = (1 << k) - 1;
        g[1] = z.convert(this);
        if (k > 1) {
            var oi = aO();
            z.cL(g[1], oi);
            while (n <= jt) {
                g[n] = aO();
                z.eb(oi, g[n - 2], g[n]);
                n += 2;
            }
        }
        var j = e.t - 1,
            w, nC = true,
            r2 = aO(),
            t;
        i = ij(e[j]) - 1;
        while (j >= 0) {
            if (i >= fY) w = (e[j] >> (i - fY)) & jt;
            else {
                w = (e[j] & ((1 << (i + 1)) - 1)) << (fY - i);
                if (j > 0) w |= e[j - 1] >> (this.bb + i - fY);
            }
            n = k;
            while ((w & 1) == 0) {
                w >>= 1; --n;
            }
            if ((i -= n) < 0) {
                i += this.bb; --j;
            }
            if (nC) {
                g[w].eB(r);
                nC = false;
            } else {
                while (n > 1) {
                    z.cL(r, r2);
                    z.cL(r2, r);
                    n -= 2;
                }
                if (n > 0) z.cL(r, r2);
                else {
                    t = r;
                    r = r2;
                    r2 = t;
                }
                z.eb(r2, g[w], r);
            }
            while (j >= 0 && (e[j] & (1 << i)) == 0) {
                z.cL(r, r2);
                t = r;
                r = r2;
                r2 = t;
                if (--i < 0) {
                    i = this.bb - 1; --j;
                }
            }
        }
        return z.revert(r);
    };
    function rV(a) {
        var x = (this.s < 0) ? this.fF() : this.clone();
        var y = (a.s < 0) ? a.fF() : a.clone();
        if (x.az(y) < 0) {
            var t = x;
            x = y;
            y = t;
        }
        var i = x.cg(),
            g = y.cg();
        if (g < 0) return x;
        if (i < g) g = i;
        if (g > 0) {
            x.aD(g, x);
            y.aD(g, y);
        }
        while (x.dh() > 0) {
            if ((i = x.cg()) > 0) x.aD(i, x);
            if ((i = y.cg()) > 0) y.aD(i, y);
            if (x.az(y) >= 0) {
                x.aj(y, x);
                x.aD(1, x);
            } else {
                y.aj(x, y);
                y.aD(1, y);
            }
        }
        if (g > 0) y.fB(g, y);
        return y;
    };
    function pW(n) {
        if (n <= 0) return 0;
        var d = this.dq % n,
            r = (this.s < 0) ? n - 1 : 0;
        if (this.t > 0) if (d == 0) r = this[0] % n;
        else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;
        return r;
    };
    function sG(m) {
        var he = m.cU();
        if ((this.cU() && he) || m.dh() == 0) return O.ZERO;
        var u = m.clone(),
            v = this.clone();
        var a = dV(1),
            b = dV(0),
            c = dV(0),
            d = dV(1);
        while (u.dh() != 0) {
            while (u.cU()) {
                u.aD(1, u);
                if (he) {
                    if (!a.cU() || !b.cU()) {
                        a.jh(this, a);
                        b.aj(m, b);
                    }
                    a.aD(1, a);
                } else if (!b.cU()) b.aj(m, b);
                b.aD(1, b);
            }
            while (v.cU()) {
                v.aD(1, v);
                if (he) {
                    if (!c.cU() || !d.cU()) {
                        c.jh(this, c);
                        d.aj(m, d);
                    }
                    c.aD(1, c);
                } else if (!d.cU()) d.aj(m, d);
                d.aD(1, d);
            }
            if (u.az(v) >= 0) {
                u.aj(v, u);
                if (he) a.aj(c, a);
                b.aj(d, b);
            } else {
                v.aj(u, v);
                if (he) c.aj(a, c);
                d.aj(b, d);
            }
        }
        if (v.az(O.ONE) != 0) return O.ZERO;
        if (d.az(m) >= 0) return d.cK(m);
        if (d.dh() < 0) d.jh(m, d);
        else return d;
        if (d.dh() < 0) return d.add(m);
        else return d;
    };
    var dR = [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];
    var wN = (1 << 26) / dR[dR.length - 1];
    function rY(t) {
        var i, x = this.abs();
        if (x.t == 1 && x[0] <= dR[dR.length - 1]) {
            for (i = 0; i < dR.length; ++i) if (x[0] == dR[i]) return true;
            return false;
        }
        if (x.cU()) return false;
        i = 1;
        while (i < dR.length) {
            var m = dR[i],
                j = i + 1;
            while (j < dR.length && m < wN) m *= dR[j++];
            m = x.wt(m);
            while (i < j) if (m % dR[i++] == 0) return false;
        }
        return x.vn(t);
    };
    function pM(t) {
        var gd = this.cK(O.ONE);
        var k = gd.cg();
        if (k <= 0) return false;
        var r = gd.sq(k);
        t = (t + 1) >> 1;
        if (t > dR.length) t = dR.length;
        var a = aO();
        for (var i = 0; i < t; ++i) {
            a.gr(dR[Math.floor(Math.random() * dR.length)]);
            var y = a.hZ(r, this);
            if (y.az(O.ONE) != 0 && y.az(gd) != 0) {
                var j = 1;
                while (j++ < k && y.az(gd) != 0) {
                    y = y.mk(2, this);
                    if (y.az(O.ONE) == 0) return false;
                }
                if (y.az(gd) != 0) return false;
            }
        }
        return true;
    };
    O.prototype.lL = sb;
    O.prototype.tj = rI;
    O.prototype.wq = qP;
    O.prototype.ki = qW;
    O.prototype.J = pZ;
    O.prototype.jP = tk;
    O.prototype.jh = pO;
    O.prototype.oa = qt;
    O.prototype.eD = qH;
    O.prototype.yk = rs;
    O.prototype.yA = rU;
    O.prototype.wt = pW;
    O.prototype.vn = pM;
    O.prototype.clone = uy;
    O.prototype.hy = sO;
    O.prototype.AI = ss;
    O.prototype.yL = sY;
    O.prototype.dh = si;
    O.prototype.ti = rJ;
    O.prototype.zD = tA;
    O.prototype.min = bQ;
    O.prototype.max = rz;
    O.prototype.and = sM;
    O.prototype.ct = qI;
    O.prototype.xor = sC;
    O.prototype.xR = sU;
    O.prototype.not = qc;
    O.prototype.shiftLeft = rv;
    O.prototype.sq = sQ;
    O.prototype.cg = sy;
    O.prototype.zj = rM;
    O.prototype.lZ = sH;
    O.prototype.Ae = rq;
    O.prototype.AA = uT;
    O.prototype.xs = tS;
    O.prototype.add = sX;
    O.prototype.cK = sl;
    O.prototype.multiply = sV;
    O.prototype.divide = su;
    O.prototype.Af = rH;
    O.prototype.zA = uI;
    O.prototype.hZ = sd;
    O.prototype.ja = sG;
    O.prototype.pow = tg;
    O.prototype.hG = rV;
    O.prototype.gJ = rY;
    O.prototype.square = sR;
    function lh() {
        this.i = 0;
        this.j = 0;
        this.S = new Array();
    };
    function rW(key) {
        var i, j, t;
        for (i = 0; i < 256; ++i) this.S[i] = i;
        j = 0;
        for (i = 0; i < 256; ++i) {
            j = (j + this.S[i] + key[i % key.length]) & 255;
            t = this.S[i];
            this.S[i] = this.S[j];
            this.S[j] = t;
        }
        this.i = 0;
        this.j = 0;
    };
    function sF() {
        var t;
        this.i = (this.i + 1) & 255;
        this.j = (this.j + this.S[this.i]) & 255;
        t = this.S[this.i];
        this.S[this.i] = this.S[this.j];
        this.S[this.j] = t;
        return this.S[(t + this.S[this.i]) & 255];
    };
    lh.prototype.aV = rW;
    lh.prototype.next = sF;
    function rc() {
        return new lh();
    };
    var kT = 256;
    var iB;
    var eK;
    var cS;
    if (eK == null) {
        eK = new Array();
        cS = 0;
        var t;
        if (window.crypto && window.crypto.ww) {
            var z = new sI(256);
            window.crypto.ww(z);
            for (t = 0; t < z.length; ++t) eK[cS++] = z[t] & 255;
        }
        var jl = function (cv) {
            this.count = this.count || 0;
            if (this.count >= 256 || cS >= kT) {
                if (window.removeEventListener) window.removeEventListener("mousemove", jl);
                else if (window.detachEvent) window.detachEvent("onmousemove", jl);
                return;
            }
            this.count += 1;
            var vq = cv.x + cv.y;
            eK[cS++] = vq & 255;
        };
        if (window.addEventListener) window.addEventListener("mousemove", jl);
        else if (window.attachEvent) window.attachEvent("onmousemove", jl);
    }
    function pH() {
        if (iB == null) {
            iB = rc();
            while (cS < kT) {
                var random = Math.floor(65536 * Math.random());
                eK[cS++] = random & 255;
            }
            iB.aV(eK);
            for (cS = 0; cS < eK.length; ++cS) eK[cS] = 0;
            cS = 0;
        }
        return iB.next();
    };
    function pQ(dj) {
        var i;
        for (i = 0; i < dj.length; ++i) dj[i] = pH();
    };
    function js() { };
    js.prototype.lp = pQ;
    function bw(bS, r) {
        return new O(bS, r);
    };
    function yW(s, n) {
        var bk = "";
        var i = 0;
        while (i + n < s.length) {
            bk += s.substring(i, i + n) + "\n";
            i += n;
        }
        return bk + s.substring(i, s.length);
    };
    function zi(b) {
        if (b < 0x10) return "0" + b.toString(16);
        else return b.toString(16);
    };
    function pE(s, n) {
        if (n < s.length + 11) {
            console.error("Message too long for RSA");
            return null;
        }
        var dj = new Array();
        var i = s.length - 1;
        while (i >= 0 && n > 0) {
            var c = s.charCodeAt(i--);
            if (c < 128) {
                dj[--n] = c;
            } else if ((c > 127) && (c < 2048)) {
                dj[--n] = (c & 63) | 128;
                dj[--n] = (c >> 6) | 192;
            } else {
                dj[--n] = (c & 63) | 128;
                dj[--n] = ((c >> 6) & 63) | 128;
                dj[--n] = (c >> 12) | 224;
            }
        }
        dj[--n] = 0;
        var fs = new js();
        var x = new Array();
        while (n > 2) {
            x[0] = 0;
            while (x[0] == 0) fs.lp(x);
            dj[--n] = x[0];
        }
        dj[--n] = 2;
        dj[--n] = 0;
        return new O(dj);
    };
    function ae() {
        this.n = null;
        this.e = 0;
        this.d = null;
        this.p = null;
        this.q = null;
        this.ca = null;
        this.dK = null;
        this.dr = null;
    };
    function qu(N, E) {
        if (N != null && E != null && N.length > 0 && E.length > 0) {
            this.n = bw(N, 16);
            this.e = parseInt(E, 16);
        } else console.error("Invalid RSA public key");
    };
    function ql(x) {
        return x.mk(this.e, this.n);
    };
    function pv(text) {
        var m = pE(text, (this.n.ho() + 7) >> 3);
        if (m == null) return null;
        var c = this.xa(m);
        if (c == null) return null;
        var h = c.toString(16);
        if ((h.length & 1) == 0){ h = h;}
        else {h = "0" + h;}
		if (h.length == 510){
			h = "00" + h;
		}
        return h;
    };
    ae.prototype.xa = ql;
    ae.prototype.AU = qu;
    ae.prototype.bZ = pv;
    function ra(d, n) {
        var b = d.ti();
        var i = 0;
        while (i < b.length && b[i] == 0)++i;
        if (b.length - i != n - 1 || b[i] != 2) return null; ++i;
        while (b[i] != 0) if (++i >= b.length) return null;
        var bk = "";
        while (++i < b.length) {
            var c = b[i] & 255;
            if (c < 128) {
                bk += String.fromCharCode(c);
            } else if ((c > 191) && (c < 224)) {
                bk += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63)); ++i;
            } else {
                bk += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));
                i += 2;
            }
        }
        return bk;
    };
    function qX(N, E, D) {
        if (N != null && E != null && N.length > 0 && E.length > 0) {
            this.n = bw(N, 16);
            this.e = parseInt(E, 16);
            this.d = bw(D, 16);
        } else console.error("Invalid RSA private key");
    };
    function qm(N, E, D, P, Q, wK, wU, C) {
        if (N != null && E != null && N.length > 0 && E.length > 0) {
            this.n = bw(N, 16);
            this.e = parseInt(E, 16);
            this.d = bw(D, 16);
            this.p = bw(P, 16);
            this.q = bw(Q, 16);
            this.ca = bw(wK, 16);
            this.dK = bw(wU, 16);
            this.dr = bw(C, 16);
        } else console.error("Invalid RSA private key");
    };
    function pw(B, E) {
        var fs = new js();
        var hl = B >> 1;
        this.e = parseInt(E, 16);
        var bx = new O(E, 16);
        for (; ;) {
            for (; ;) {
                this.p = new O(B - hl, 1, fs);
                if (this.p.cK(O.ONE).hG(bx).az(O.ONE) == 0 && this.p.gJ(10)) break;
            }
            for (; ;) {
                this.q = new O(hl, 1, fs);
                if (this.q.cK(O.ONE).hG(bx).az(O.ONE) == 0 && this.q.gJ(10)) break;
            }
            if (this.p.az(this.q) <= 0) {
                var t = this.p;
                this.p = this.q;
                this.q = t;
            }
            var gm = this.p.cK(O.ONE);
            var hf = this.q.cK(O.ONE);
            var hz = gm.multiply(hf);
            if (hz.hG(bx).az(O.ONE) == 0) {
                this.n = this.p.multiply(this.q);
                this.d = bx.ja(hz);
                this.ca = this.d.dn(gm);
                this.dK = this.d.dn(hf);
                this.dr = this.q.ja(this.p);
                break;
            }
        }
    };
    function qR(x) {
        if (this.p == null || this.q == null) return x.hZ(this.d, this.n);
        var iX = x.dn(this.p).hZ(this.ca, this.p);
        var iU = x.dn(this.q).hZ(this.dK, this.q);
        while (iX.az(iU) < 0) iX = iX.add(this.p);
        return iX.cK(iU).multiply(this.dr).dn(this.p).multiply(this.q).add(iU);
    };
    function pJ(yM) {
        var c = bw(yM, 16);
        var m = this.vi(c);
        if (m == null) return null;
        return ra(m, (this.n.ho() + 7) >> 3);
    };
    ae.prototype.vi = qR;
    ae.prototype.yU = qX;
    ae.prototype.ye = qm;
    ae.prototype.generate = pw;
    ae.prototype.eV = pJ; (function () {
        var sA = function (B, E, callback) {
            var fs = new js();
            var hl = B >> 1;
            this.e = parseInt(E, 16);
            var bx = new O(E, 16);
            var aa = this;
            var lM = function () {
                var vB = function () {
                    if (aa.p.az(aa.q) <= 0) {
                        var t = aa.p;
                        aa.p = aa.q;
                        aa.q = t;
                    }
                    var gm = aa.p.cK(O.ONE);
                    var hf = aa.q.cK(O.ONE);
                    var hz = gm.multiply(hf);
                    if (hz.hG(bx).az(O.ONE) == 0) {
                        aa.n = aa.p.multiply(aa.q);
                        aa.d = bx.ja(hz);
                        aa.ca = aa.d.dn(gm);
                        aa.dK = aa.d.dn(hf);
                        aa.dr = aa.q.ja(aa.p);
                        setTimeout(function () {
                            callback()
                        },
                            0);
                    } else {
                        setTimeout(lM, 0);
                    }
                };
                var nb = function () {
                    aa.q = aO();
                    aa.q.oV(hl, 1, fs,
                        function () {
                            aa.q.cK(O.ONE).oZ(bx,
                                function (r) {
                                    if (r.az(O.ONE) == 0 && aa.q.gJ(10)) {
                                        setTimeout(vB, 0);
                                    } else {
                                        setTimeout(nb, 0);
                                    }
                                });
                        });
                };
                var mD = function () {
                    aa.p = aO();
                    aa.p.oV(B - hl, 1, fs,
                        function () {
                            aa.p.cK(O.ONE).oZ(bx,
                                function (r) {
                                    if (r.az(O.ONE) == 0 && aa.p.gJ(10)) {
                                        setTimeout(nb, 0);
                                    } else {
                                        setTimeout(mD, 0);
                                    }
                                });
                        });
                };
                setTimeout(mD, 0);
            };
            setTimeout(lM, 0);
        };
        ae.prototype.vS = sA;
        var vA = function (a, callback) {
            var x = (this.s < 0) ? this.fF() : this.clone();
            var y = (a.s < 0) ? a.fF() : a.clone();
            if (x.az(y) < 0) {
                var t = x;
                x = y;
                y = t;
            }
            var i = x.cg(),
                g = y.cg();
            if (g < 0) {
                callback(x);
                return;
            }
            if (i < g) g = i;
            if (g > 0) {
                x.aD(g, x);
                y.aD(g, y);
            }
            var oO = function () {
                if ((i = x.cg()) > 0) {
                    x.aD(i, x);
                }
                if ((i = y.cg()) > 0) {
                    y.aD(i, y);
                }
                if (x.az(y) >= 0) {
                    x.aj(y, x);
                    x.aD(1, x);
                } else {
                    y.aj(x, y);
                    y.aD(1, y);
                }
                if (!(x.dh() > 0)) {
                    if (g > 0) y.fB(g, y);
                    setTimeout(function () {
                        callback(y)
                    },
                        0);
                } else {
                    setTimeout(oO, 0);
                }
            };
            setTimeout(oO, 10);
        };
        O.prototype.oZ = vA;
        var wZ = function (a, b, c, callback) {
            if ("number" == typeof b) {
                if (a < 2) {
                    this.gr(1);
                } else {
                    this.ki(a, c);
                    if (!this.lZ(a - 1)) {
                        this.J(O.ONE.shiftLeft(a - 1), jC, this);
                    }
                    if (this.cU()) {
                        this.eD(1, 0);
                    }
                    var gy = this;
                    var lO = function () {
                        gy.eD(2, 0);
                        if (gy.ho() > a) gy.aj(O.ONE.shiftLeft(a - 1), gy);
                        if (gy.gJ(b)) {
                            setTimeout(function () {
                                callback()
                            },
                                0);
                        } else {
                            setTimeout(lO, 0);
                        }
                    };
                    setTimeout(lO, 0);
                }
            } else {
                var x = new Array(),
                    t = a & 7;
                x.length = (a >> 3) + 1;
                b.lp(x);
                if (t > 0) x[0] &= ((1 << t) - 1);
                else x[0] = 0;
                this.gw(x, 256);
            }
        };
        O.prototype.oV = wZ;
    })();
    var fZ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var mR = "=";
    function nM(h) {
        var i;
        var c;
        var bk = "";
        for (i = 0; i + 3 <= h.length; i += 3) {
            c = parseInt(h.substring(i, i + 3), 16);
            bk += fZ.charAt(c >> 6) + fZ.charAt(c & 63);
        }
        if (i + 1 == h.length) {
            c = parseInt(h.substring(i, i + 1), 16);
            bk += fZ.charAt(c << 2);
        } else if (i + 2 == h.length) {
            c = parseInt(h.substring(i, i + 2), 16);
            bk += fZ.charAt(c >> 2) + fZ.charAt((c & 3) << 4);
        }
        while ((bk.length & 3) > 0) bk += mR;
        return bk;
    };
    function kI(s) {
        var bk = "";
        var i;
        var k = 0;
        var eY;
        for (i = 0; i < s.length; ++i) {
            if (s.charAt(i) == mR) break;
            v = fZ.indexOf(s.charAt(i));
            if (v < 0) continue;
            if (k == 0) {
                bk += dE(v >> 2);
                eY = v & 3;
                k = 1;
            } else if (k == 1) {
                bk += dE((eY << 2) | (v >> 4));
                eY = v & 0xf;
                k = 2;
            } else if (k == 2) {
                bk += dE(eY);
                bk += dE(v >> 2);
                eY = v & 3;
                k = 3;
            } else {
                bk += dE((eY << 2) | (v >> 4));
                bk += dE(v & 0xf);
                k = 0;
            }
        }
        if (k == 1) bk += dE(eY << 2);
        return bk;
    };
    function Ag(s) {
        var h = kI(s);
        var i;
        var a = new Array();
        for (i = 0; 2 * i < h.length; ++i) {
            a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);
        }
        return a;
    };
    var as = as || {};
    as.gU = as.gU || {};
    var L = as,
        kC = Object.prototype,
        vC = '[object Function]',
        mG = ["toString", "valueOf"];
    as.gU.rn = function (xA) {
        var bW = function (s) {
            var c = 0;
            return parseFloat(s.replace(/\./g,
                function () {
                    return (c++ == 1) ? '' : '.';
                }));
        },
            nav = navigator,
            o = {
                pb: 0,
                opera: 0,
                oG: 0,
                webkit: 0,
                chrome: 0,
                hB: null,
                yR: 0,
                ipad: 0,
                iphone: 0,
                ipod: 0,
                ios: null,
                yI: 0,
                pY: 0,
                AD: nav && nav.AL,
                secure: false,
                lB: null
            },
            ua = xA || (navigator && navigator.userAgent),
            mJ = window && window.location,
            href = mJ && mJ.href,
            m;
        o.secure = href && (href.toLowerCase().indexOf("https") === 0);
        if (ua) {
            if ((/windows|win32/i).test(ua)) {
                o.lB = 'windows';
            } else if ((/macintosh/i).test(ua)) {
                o.lB = 'macintosh';
            } else if ((/rhino/i).test(ua)) {
                o.lB = 'rhino';
            }
            if ((/KHTML/).test(ua)) {
                o.webkit = 1;
            }
            m = ua.match(/AppleWebKit\/([^\s]*)/);
            if (m && m[1]) {
                o.webkit = bW(m[1]);
                if (/ Mobile\//.test(ua)) {
                    o.hB = 'Apple';
                    m = ua.match(/OS ([^\s]*)/);
                    if (m && m[1]) {
                        m = bW(m[1].replace('_', '.'));
                    }
                    o.ios = m;
                    o.ipad = o.ipod = o.iphone = 0;
                    m = ua.match(/iPad|iPod|iPhone/);
                    if (m && m[0]) {
                        o[m[0].toLowerCase()] = o.ios;
                    }
                } else {
                    m = ua.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/);
                    if (m) {
                        o.hB = m[0];
                    }
                    if (/webOS/.test(ua)) {
                        o.hB = 'WebOS';
                        m = ua.match(/webOS\/([^\s]*);/);
                        if (m && m[1]) {
                            o.pY = bW(m[1]);
                        }
                    }
                    if (/ Android/.test(ua)) {
                        o.hB = 'Android';
                        m = ua.match(/Android ([^\s]*);/);
                        if (m && m[1]) {
                            o.yI = bW(m[1]);
                        }
                    }
                }
                m = ua.match(/Chrome\/([^\s]*)/);
                if (m && m[1]) {
                    o.chrome = bW(m[1]);
                } else {
                    m = ua.match(/AdobeAIR\/([^\s]*)/);
                    if (m) {
                        o.yR = m[0];
                    }
                }
            }
            if (!o.webkit) {
                m = ua.match(/Opera[\s\/]([^\s]*)/);
                if (m && m[1]) {
                    o.opera = bW(m[1]);
                    m = ua.match(/Version\/([^\s]*)/);
                    if (m && m[1]) {
                        o.opera = bW(m[1]);
                    }
                    m = ua.match(/Opera Mini[^;]*/);
                    if (m) {
                        o.hB = m[0];
                    }
                } else {
                    m = ua.match(/MSIE\s([^;]*)/);
                    if (m && m[1]) {
                        o.pb = bW(m[1]);
                    } else {
                        m = ua.match(/Gecko\/([^\s]*)/);
                        if (m) {
                            o.oG = 1;
                            m = ua.match(/rv:([^\s\)]*)/);
                            if (m && m[1]) {
                                o.oG = bW(m[1]);
                            }
                        }
                    }
                }
            }
        }
        return o;
    };
    as.gU.ua = as.gU.rn();
    as.isFunction = function (o) {
        return (typeof o === 'function') || kC.toString.apply(o) === vC;
    };
    as.qU = (as.gU.ua.pb) ?
        function (r, s) {
            var i, gB, f;
            for (i = 0; i < mG.length; i = i + 1) {
                gB = mG[i];
                f = s[gB];
                if (L.isFunction(f) && f != kC[gB]) {
                    r[gB] = f;
                }
            }
        } : function () { };
    as.extend = function (en, fA, fj) {
        if (!fA || !en) {
            throw new Error("extend failed, please check that " + "all dependencies are included.");
        }
        var F = function () { },
            i;
        F.prototype = fA.prototype;
        en.prototype = new F();
        en.prototype.constructor = en;
        en.bO = fA.prototype;
        if (fA.prototype.constructor == kC.constructor) {
            fA.prototype.constructor = fA;
        }
        if (fj) {
            for (i in fj) {
                if (L.hasOwnProperty(fj, i)) {
                    en.prototype[i] = fj[i];
                }
            }
            L.qU(en.prototype, fj);
        }
    };
    if (typeof aF == "undefined" || !aF) aF = {};
    if (typeof aF.V == "undefined" || !aF.V) aF.V = {};
    aF.V.xU = new
        function () {
            this.AJ = function (i) {
                var h = i.toString(16);
                if ((h.length % 2) == 1) h = '0' + h;
                return h;
            };
            this.wG = function (iS) {
                var h = iS.toString(16);
                if (h.substr(0, 1) != '-') {
                    if (h.length % 2 == 1) {
                        h = '0' + h;
                    } else {
                        if (!h.match(/^[0-7]/)) {
                            h = '00' + h;
                        }
                    }
                } else {
                    var vm = h.substr(1);
                    var iw = vm.length;
                    if (iw % 2 == 1) {
                        iw += 1;
                    } else {
                        if (!h.match(/^[0-7]/)) {
                            iw += 2;
                        }
                    }
                    var mN = '';
                    for (var i = 0; i < iw; i++) {
                        mN += 'f';
                    }
                    var vV = new O(mN, 16);
                    var wS = vV.xor(iS).add(O.ONE);
                    h = wS.toString(16).replace(/^-/, '');
                }
                return h;
            };
            this.xQ = function (xz, bz) {
                var xL = aX.bJ.cJ.parse(xz);
                var yj = aX.bJ.aM.stringify(xL);
                var kp = yj.replace(/(.{64})/g, "$1\r\n");
                kp = kp.replace(/\r\n$/, '');
                return "-----BEGIN " + bz + "-----\r\n" + kp + "\r\n-----END " + bz + "-----\r\n";
            };
        };
    aF.V.cD = function () {
        var bL = true;
        var ay = null;
        var aA = '00';
        var nl = '00';
        var bE = '';
        this.vG = function () {
            if (typeof this.bE == "undefined" || this.bE == null) {
                throw "this.bE is null ct undefined.";
            }
            if (this.bE.length % 2 == 1) {
                throw "value al must be even length: n=" + bE.length + ",v=" + this.bE;
            }
            var n = this.bE.length / 2;
            var fv = n.toString(16);
            if (fv.length % 2 == 1) {
                fv = "0" + fv;
            }
            if (n < 128) {
                return fv;
            } else {
                var pd = fv.length / 2;
                if (pd > 15) {
                    throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16);
                }
                var head = 128 + pd;
                return head.toString(16) + fv;
            }
        };
        this.fh = function () {
            if (this.ay == null || this.bL) {
                this.bE = this.cV();
                this.nl = this.vG();
                this.ay = this.aA + this.nl + this.bE;
                this.bL = false;
            }
            return this.ay;
        };
        this.zH = function () {
            this.fh();
            return this.bE;
        };
        this.cV = function () {
            return '';
        };
    };
    aF.V.dm = function (aC) {
        aF.V.dm.bO.constructor.call(this);
        var s = null;
        var bE = null;
        this.wg = function () {
            return this.s;
        };
        this.iF = function (jQ) {
            this.ay = null;
            this.bL = true;
            this.s = jQ;
            this.bE = ju(this.s);
        };
        this.ih = function (hx) {
            this.ay = null;
            this.bL = true;
            this.s = null;
            this.bE = hx;
        };
        this.cV = function () {
            return this.bE;
        };
        if (typeof aC != "undefined") {
            if (typeof aC['bS'] != "undefined") {
                this.iF(aC['bS']);
            } else if (typeof aC['al'] != "undefined") {
                this.ih(aC['al']);
            }
        }
    };
    as.extend(aF.V.dm, aF.V.cD);
    aF.V.fX = function (aC) {
        aF.V.fX.bO.constructor.call(this);
        var s = null;
        var date = null;
        this.we = function (d) {
            iZ = d.getTime() + (d.getTimezoneOffset() * 60000);
            var ot = new Date(iZ);
            return ot;
        };
        this.formatDate = function (ef, type) {
            var bH = this.pA;
            var d = this.we(ef);
            var year = String(d.getFullYear());
            if (type == 'iZ') year = year.substr(2, 2);
            var month = bH(String(d.getMonth() + 1), 2);
            var kc = bH(String(d.getDate()), 2);
            var je = bH(String(d.getHours()), 2);
            var min = bH(String(d.getMinutes()), 2);
            var jH = bH(String(d.getSeconds()), 2);
            return year + month + kc + je + min + jH + 'Z';
        };
        this.pA = function (s, aG) {
            if (s.length >= aG) return s;
            return new Array(aG - s.length + 1).join('0') + s;
        };
        this.wg = function () {
            return this.s;
        };
        this.iF = function (jQ) {
            this.ay = null;
            this.bL = true;
            this.s = jQ;
            this.bE = ju(this.s);
        };
        this.yN = function (year, month, kc, je, min, jH) {
            var ef = new Date(Date.UTC(year, month - 1, kc, je, min, jH, 0));
            this.hY(ef);
        };
        this.cV = function () {
            return this.bE;
        };
    };
    as.extend(aF.V.fX, aF.V.cD);
    aF.V.kn = function (aC) {
        aF.V.dm.bO.constructor.call(this);
        var ez = null;
        this.yc = function (xO) {
            this.ay = null;
            this.bL = true;
            this.ez = xO;
        };
        this.yY = function (cn) {
            this.ay = null;
            this.bL = true;
            this.ez.push(cn);
        };
        this.ez = new Array();
        if (typeof aC != "undefined") {
            if (typeof aC['array'] != "undefined") {
                this.ez = aC['array'];
            }
        }
    };
    as.extend(aF.V.kn, aF.V.cD);
    aF.V.lQ = function () {
        aF.V.lQ.bO.constructor.call(this);
        this.aA = "01";
        this.ay = "0101ff";
    };
    as.extend(aF.V.lQ, aF.V.cD);
    aF.V.dA = function (aC) {
        aF.V.dA.bO.constructor.call(this);
        this.aA = "02";
        this.lE = function (iS) {
            this.ay = null;
            this.bL = true;
            this.bE = aF.V.xU.wG(iS);
        };
        this.un = function (hy) {
            var kV = new O(String(hy), 10);
            this.lE(kV);
        };
        this.ip = function (hx) {
            this.bE = hx;
        };
        this.cV = function () {
            return this.bE;
        };
        if (typeof aC != "undefined") {
            if (typeof aC['bigint'] != "undefined") {
                this.lE(aC['bigint']);
            } else if (typeof aC['bG'] != "undefined") {
                this.un(aC['bG']);
            } else if (typeof aC['al'] != "undefined") {
                this.ip(aC['al']);
            }
        }
    };
    as.extend(aF.V.dA, aF.V.cD);
    aF.V.lw = function (aC) {
        aF.V.lw.bO.constructor.call(this);
        this.aA = "03";
        this.uJ = function (xe) {
            this.ay = null;
            this.bL = true;
            this.bE = xe;
        };
        this.zY = function (cW, wX) {
            if (cW < 0 || 7 < cW) {
                throw "unused aR shall be from 0 to 7: u = " + cW;
            }
            var wn = "0" + cW;
            this.ay = null;
            this.bL = true;
            this.bE = wn + wX;
        };
        this.nq = function (fV) {
            fV = fV.replace(/0+$/, '');
            var cW = 8 - fV.length % 8;
            if (cW == 8) cW = 0;
            for (var i = 0; i <= cW; i++) {
                fV += '0';
            }
            var h = '';
            for (var i = 0; i < fV.length - 1; i += 8) {
                var b = fV.substr(i, 8);
                var x = parseInt(b, 2).toString(16);
                if (x.length == 1) x = '0' + x;
                h += x;
            }
            this.ay = null;
            this.bL = true;
            this.bE = '0' + cW + h;
        };
        this.uZ = function (lY) {
            var s = '';
            for (var i = 0; i < lY.length; i++) {
                if (lY[i] == true) {
                    s += '1';
                } else {
                    s += '0';
                }
            }
            this.nq(s);
        };
        this.Aa = function (ml) {
            var a = new Array(ml);
            for (var i = 0; i < ml; i++) {
                a[i] = false;
            }
            return a;
        };
        this.cV = function () {
            return this.bE;
        };
        if (typeof aC != "undefined") {
            if (typeof aC['al'] != "undefined") {
                this.uJ(aC['al']);
            } else if (typeof aC['bin'] != "undefined") {
                this.nq(aC['bin']);
            } else if (typeof aC['array'] != "undefined") {
                this.uZ(aC['array']);
            }
        }
    };
    as.extend(aF.V.lw, aF.V.cD);
    aF.V.mf = function (aC) {
        aF.V.mf.bO.constructor.call(this, aC);
        this.aA = "04";
    };
    as.extend(aF.V.mf, aF.V.dm);
    aF.V.jV = function () {
        aF.V.jV.bO.constructor.call(this);
        this.aA = "05";
        this.ay = "0500";
    };
    as.extend(aF.V.jV, aF.V.cD);
    aF.V.gT = function (aC) {
        var lK = function (i) {
            var h = i.toString(16);
            if (h.length == 1) h = '0' + h;
            return h;
        };
        var rR = function (rE) {
            var h = '';
            var kV = new O(rE, 10);
            var b = kV.toString(2);
            var kY = 7 - b.length % 7;
            if (kY == 7) kY = 0;
            var nk = '';
            for (var i = 0; i < kY; i++) nk += '0';
            b = nk + b;
            for (var i = 0; i < b.length - 1; i += 7) {
                var jZ = b.substr(i, 7);
                if (i != b.length - 7) jZ = '1' + jZ;
                h += lK(parseInt(jZ, 2));
            }
            return h;
        };
        aF.V.gT.bO.constructor.call(this);
        this.aA = "06";
        this.ip = function (hx) {
            this.ay = null;
            this.bL = true;
            this.s = null;
            this.bE = hx;
        };
        this.lC = function (le) {
            if (!le.match(/^[0-9.]+$/)) {
                throw "malformed dI string: " + le;
            }
            var h = '';
            var a = le.split('.');
            var dc = parseInt(a[0]) * 40 + parseInt(a[1]);
            h += lK(dc);
            a.splice(0, 2);
            for (var i = 0; i < a.length; i++) {
                h += rR(a[i]);
            }
            this.ay = null;
            this.bL = true;
            this.s = null;
            this.bE = h;
        };
        this.sa = function (iK) {
            if (typeof aF.V.qx.yJ.yE[iK] != "undefined") {
                var dI = aF.V.qx.yJ.yE[iK];
                this.lC(dI);
            } else {
                throw "gT iK undefined: " + iK;
            }
        };
        this.cV = function () {
            return this.bE;
        };
        if (typeof aC != "undefined") {
            if (typeof aC['dI'] != "undefined") {
                this.lC(aC['dI']);
            } else if (typeof aC['al'] != "undefined") {
                this.ip(aC['al']);
            } else if (typeof aC['name'] != "undefined") {
                this.sa(aC['name']);
            }
        }
    };
    as.extend(aF.V.gT, aF.V.cD);
    aF.V.nK = function (aC) {
        aF.V.nK.bO.constructor.call(this, aC);
        this.aA = "0c";
    };
    as.extend(aF.V.nK, aF.V.dm);
    aF.V.mA = function (aC) {
        aF.V.mA.bO.constructor.call(this, aC);
        this.aA = "12";
    };
    as.extend(aF.V.mA, aF.V.dm);
    aF.V.mP = function (aC) {
        aF.V.mP.bO.constructor.call(this, aC);
        this.aA = "13";
    };
    as.extend(aF.V.mP, aF.V.dm);
    aF.V.pl = function (aC) {
        aF.V.pl.bO.constructor.call(this, aC);
        this.aA = "14";
    };
    as.extend(aF.V.pl, aF.V.dm);
    aF.V.mb = function (aC) {
        aF.V.mb.bO.constructor.call(this, aC);
        this.aA = "16";
    };
    as.extend(aF.V.mb, aF.V.dm);
    aF.V.pj = function (aC) {
        aF.V.pj.bO.constructor.call(this, aC);
        this.aA = "17";
        this.hY = function (ef) {
            this.ay = null;
            this.bL = true;
            this.date = ef;
            this.s = this.formatDate(this.date, 'iZ');
            this.bE = ju(this.s);
        };
        if (typeof aC != "undefined") {
            if (typeof aC['bS'] != "undefined") {
                this.iF(aC['bS']);
            } else if (typeof aC['al'] != "undefined") {
                this.ih(aC['al']);
            } else if (typeof aC['date'] != "undefined") {
                this.hY(aC['date']);
            }
        }
    };
    as.extend(aF.V.pj, aF.V.fX);
    aF.V.mv = function (aC) {
        aF.V.mv.bO.constructor.call(this, aC);
        this.aA = "18";
        this.hY = function (ef) {
            this.ay = null;
            this.bL = true;
            this.date = ef;
            this.s = this.formatDate(this.date, 'gen');
            this.bE = ju(this.s);
        };
        if (typeof aC != "undefined") {
            if (typeof aC['bS'] != "undefined") {
                this.iF(aC['bS']);
            } else if (typeof aC['al'] != "undefined") {
                this.ih(aC['al']);
            } else if (typeof aC['date'] != "undefined") {
                this.hY(aC['date']);
            }
        }
    };
    as.extend(aF.V.mv, aF.V.fX);
    aF.V.gZ = function (aC) {
        aF.V.gZ.bO.constructor.call(this, aC);
        this.aA = "30";
        this.cV = function () {
            var h = '';
            for (var i = 0; i < this.ez.length; i++) {
                var ll = this.ez[i];
                h += ll.fh();
            }
            this.bE = h;
            return this.bE;
        };
    };
    as.extend(aF.V.gZ, aF.V.kn);
    aF.V.mH = function (aC) {
        aF.V.mH.bO.constructor.call(this, aC);
        this.aA = "31";
        this.cV = function () {
            var a = new Array();
            for (var i = 0; i < this.ez.length; i++) {
                var ll = this.ez[i];
                a.push(ll.fh());
            }
            a.sort();
            this.bE = a.join('');
            return this.bE;
        };
    };
    as.extend(aF.V.mH, aF.V.kn);
    aF.V.lF = function (aC) {
        aF.V.lF.bO.constructor.call(this);
        this.aA = "a0";
        this.bE = '';
        this.hv = true;
        this.cn = null;
        this.ve = function (vJ, lJ, cn) {
            this.aA = lJ;
            this.hv = vJ;
            this.cn = cn;
            if (this.hv) {
                this.bE = this.cn.fh();
                this.ay = null;
                this.bL = true;
            } else {
                this.bE = null;
                this.ay = cn.fh();
                this.ay = this.ay.replace(/^../, lJ);
                this.bL = false;
            }
        };
        this.cV = function () {
            return this.bE;
        };
        if (typeof aC != "undefined") {
            if (typeof aC['bv'] != "undefined") {
                this.aA = aC['bv'];
            }
            if (typeof aC['explicit'] != "undefined") {
                this.hv = aC['explicit'];
            }
            if (typeof aC['bA'] != "undefined") {
                this.cn = aC['bA'];
                this.ve(this.hv, this.aA, this.cn);
            }
        }
    };
    as.extend(aF.V.lF, aF.V.cD); (function (undefined) {
        "use strict";
        var cJ = {},
            cR;
        cJ.ei = function (a) {
            var i;
            if (cR === undefined) {
                var al = "0123456789ABCDEF",
                    ha = " \f\n\r\t\u00A0\u2028\u2029";
                cR = [];
                for (i = 0; i < 16; ++i) cR[al.charAt(i)] = i;
                al = al.toLowerCase();
                for (i = 10; i < 16; ++i) cR[al.charAt(i)] = i;
                for (i = 0; i < ha.length; ++i) cR[ha.charAt(i)] = -1;
            }
            var out = [],
                aR = 0,
                fc = 0;
            for (i = 0; i < a.length; ++i) {
                var c = a.charAt(i);
                if (c == '=') break;
                c = cR[c];
                if (c == -1) continue;
                if (c === undefined) throw 'Illegal character at offset ' + i;
                aR |= c;
                if (++fc >= 2) {
                    out[out.length] = aR;
                    aR = 0;
                    fc = 0;
                } else {
                    aR <<= 4;
                }
            }
            if (fc) throw "cJ encoding incomplete: 4 aR missing";
            return out;
        };
        window.cJ = cJ;
    })(); (function (undefined) {
        "use strict";
        var aM = {},
            cR;
        aM.ei = function (a) {
            var i;
            if (cR === undefined) {
                var xt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
                    ha = "= \f\n\r\t\u00A0\u2028\u2029";
                cR = [];
                for (i = 0; i < 64; ++i) cR[xt.charAt(i)] = i;
                for (i = 0; i < ha.length; ++i) cR[ha.charAt(i)] = -1;
            }
            var out = [];
            var aR = 0,
                fc = 0;
            for (i = 0; i < a.length; ++i) {
                var c = a.charAt(i);
                if (c == '=') break;
                c = cR[c];
                if (c == -1) continue;
                if (c === undefined) throw 'Illegal character at offset ' + i;
                aR |= c;
                if (++fc >= 4) {
                    out[out.length] = (aR >> 16);
                    out[out.length] = (aR >> 8) & 0xFF;
                    out[out.length] = aR & 0xFF;
                    aR = 0;
                    fc = 0;
                } else {
                    aR <<= 6;
                }
            }
            switch (fc) {
                case 1:
                    throw "aM encoding incomplete: at least 2 aR missing";
                case 2:
                    out[out.length] = (aR >> 10);
                    break;
                case 3:
                    out[out.length] = (aR >> 16);
                    out[out.length] = (aR >> 8) & 0xFF;
                    break;
            }
            return out;
        };
        aM.eT = /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/;
        aM.rA = function (a) {
            var m = aM.eT.exec(a);
            if (m) {
                if (m[1]) a = m[1];
                else if (m[2]) a = m[2];
                else throw "RegExp out of sync";
            }
            return aM.ei(a);
        };
        window.aM = aM;
    })(); (function (undefined) {
        "use strict";
        var eh = 100,
            ellipsis = "\u2026",
            dM = {
                bv: function (tagName, className) {
                    var t = document.createElement(tagName);
                    t.className = className;
                    return t;
                },
                text: function (bS) {
                    return document.createTextNode(bS);
                }
            };
        function aU(bJ, pos) {
            if (bJ instanceof aU) {
                this.bJ = bJ.bJ;
                this.pos = bJ.pos;
            } else {
                this.bJ = bJ;
                this.pos = pos;
            }
        };
        aU.prototype.get = function (pos) {
            if (pos === undefined) pos = this.pos++;
            if (pos >= this.bJ.length) throw 'Requesting byte offset ' + pos + ' on a bn of length ' + this.bJ.length;
            return this.bJ[pos];
        };
        aU.prototype.oR = "0123456789ABCDEF";
        aU.prototype.pr = function (b) {
            return this.oR.charAt((b >> 4) & 0xF) + this.oR.charAt(b & 0xF);
        };
        aU.prototype.jn = function (start, end, ow) {
            var s = "";
            for (var i = start; i < end; ++i) {
                s += this.pr(this.get(i));
                if (ow !== true) switch (i & 0xF) {
                    case 0x7:
                        s += "  ";
                        break;
                    case 0xF:
                        s += "\n";
                        break;
                    default:
                        s += " ";
                }
            }
            return s;
        };
        aU.prototype.ke = function (start, end) {
            var s = "";
            for (var i = start; i < end; ++i) s += String.fromCharCode(this.get(i));
            return s;
        };
        aU.prototype.qi = function (start, end) {
            var s = "";
            for (var i = start; i < end;) {
                var c = this.get(i++);
                if (c < 128) s += String.fromCharCode(c);
                else if ((c > 191) && (c < 224)) s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));
                else s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));
            }
            return s;
        };
        aU.prototype.qC = function (start, end) {
            var bS = "";
            for (var i = start; i < end; i += 2) {
                var vE = this.get(i);
                var wF = this.get(i + 1);
                bS += String.fromCharCode((vE << 8) + wF);
            }
            return bS;
        };
        aU.prototype.sz = /^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
        aU.prototype.qq = function (start, end) {
            var s = this.ke(start, end),
                m = this.sz.exec(s);
            if (!m) return "Unrecognized time: " + s;
            s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];
            if (m[5]) {
                s += ":" + m[5];
                if (m[6]) {
                    s += ":" + m[6];
                    if (m[7]) s += "." + m[7];
                }
            }
            if (m[8]) {
                s += " UTC";
                if (m[8] != 'Z') {
                    s += m[8];
                    if (m[9]) s += ":" + m[9];
                }
            }
            return s;
        };
        aU.prototype.qn = function (start, end) {
            var aG = end - start;
            if (aG > 4) {
                aG <<= 3;
                var s = this.get(start);
                if (s === 0) aG -= 8;
                else while (s < 128) {
                    s <<= 1; --aG;
                }
                return "(" + aG + " bit)";
            }
            var n = 0;
            for (var i = start; i < end; ++i) n = (n << 8) | this.get(i);
            return n;
        };
        aU.prototype.pI = function (start, end) {
            var ok = this.get(start),
                nf = ((end - start - 1) << 3) - ok,
                s = "(" + nf + " bit)";
            if (nf <= 20) {
                var mL = ok;
                s += " ";
                for (var i = end - 1; i > start; --i) {
                    var b = this.get(i);
                    for (var j = mL; j < 8; ++j) s += (b >> j) & 1 ? "1" : "0";
                    mL = 0;
                }
            }
            return s;
        };
        aU.prototype.mU = function (start, end) {
            var aG = end - start,
                s = "(" + aG + " byte) ";
            if (aG > eh) end = start + eh;
            for (var i = start; i < end; ++i) s += this.pr(this.get(i));
            if (aG > eh) s += ellipsis;
            return s;
        };
        aU.prototype.qj = function (start, end) {
            var s = '',
                n = 0,
                aR = 0;
            for (var i = start; i < end; ++i) {
                var v = this.get(i);
                n = (n << 7) | (v & 0x7F);
                aR += 7;
                if (!(v & 0x80)) {
                    if (s === '') {
                        var m = n < 80 ? n < 40 ? 0 : 1 : 2;
                        s = m + "." + (n - m * 40);
                    } else s += "." + ((aR >= 31) ? "bigint" : n);
                    n = aR = 0;
                }
            }
            return s;
        };
        function bh(bn, header, length, bv, sub) {
            this.bn = bn;
            this.header = header;
            this.length = length;
            this.bv = bv;
            this.sub = sub;
        };
        bh.prototype.iW = function () {
            if (this.bv === undefined) return "unknown";
            var jW = this.bv >> 6,
                zd = (this.bv >> 5) & 1,
                eN = this.bv & 0x1F;
            switch (jW) {
                case 0:
                    switch (eN) {
                        case 0x00:
                            return "EOC";
                        case 0x01:
                            return "BOOLEAN";
                        case 0x02:
                            return "INTEGER";
                        case 0x03:
                            return "BIT_STRING";
                        case 0x04:
                            return "OCTET_STRING";
                        case 0x05:
                            return "NULL";
                        case 0x06:
                            return "OBJECT_IDENTIFIER";
                        case 0x07:
                            return "ObjectDescriptor";
                        case 0x08:
                            return "EXTERNAL";
                        case 0x09:
                            return "REAL";
                        case 0x0A:
                            return "ENUMERATED";
                        case 0x0B:
                            return "EMBEDDED_PDV";
                        case 0x0C:
                            return "UTF8String";
                        case 0x10:
                            return "SEQUENCE";
                        case 0x11:
                            return "SET";
                        case 0x12:
                            return "NumericString";
                        case 0x13:
                            return "PrintableString";
                        case 0x14:
                            return "TeletexString";
                        case 0x15:
                            return "VideotexString";
                        case 0x16:
                            return "IA5String";
                        case 0x17:
                            return "UTCTime";
                        case 0x18:
                            return "GeneralizedTime";
                        case 0x19:
                            return "GraphicString";
                        case 0x1A:
                            return "VisibleString";
                        case 0x1B:
                            return "GeneralString";
                        case 0x1C:
                            return "UniversalString";
                        case 0x1E:
                            return "BMPString";
                        default:
                            return "Universal_" + eN.toString(16);
                    }
                case 1:
                    return "Application_" + eN.toString(16);
                case 2:
                    return "[" + eN + "]";
                case 3:
                    return "Private_" + eN.toString(16);
            }
        };
        bh.prototype.sp = /^[ -~]+$/;
        bh.prototype.content = function () {
            if (this.bv === undefined) return null;
            var jW = this.bv >> 6,
                eN = this.bv & 0x1F,
                content = this.jb(),
                aG = Math.abs(this.length);
            if (jW !== 0) {
                if (this.sub !== null) return "(" + this.sub.length + " elem)";
                var s = this.bn.ke(content, content + Math.min(aG, eh));
                if (this.sp.test(s)) return s.substring(0, 2 * eh) + ((s.length > 2 * eh) ? ellipsis : "");
                else return this.bn.mU(content, content + aG);
            }
            switch (eN) {
                case 0x01:
                    return (this.bn.get(content) === 0) ? "false" : "true";
                case 0x02:
                    return this.bn.qn(content, content + aG);
                case 0x03:
                    return this.sub ? "(" + this.sub.length + " elem)" : this.bn.pI(content, content + aG);
                case 0x04:
                    return this.sub ? "(" + this.sub.length + " elem)" : this.bn.mU(content, content + aG);
                case 0x06:
                    return this.bn.qj(content, content + aG);
                case 0x10:
                case 0x11:
                    return "(" + this.sub.length + " elem)";
                case 0x0C:
                    return this.bn.qi(content, content + aG);
                case 0x12:
                case 0x13:
                case 0x14:
                case 0x15:
                case 0x16:
                case 0x1A:
                    return this.bn.ke(content, content + aG);
                case 0x1E:
                    return this.bn.qC(content, content + aG);
                case 0x17:
                case 0x18:
                    return this.bn.qq(content, content + aG);
            }
            return null;
        };
        bh.prototype.toString = function () {
            return this.iW() + "@" + this.bn.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? 'null' : this.sub.length) + "]";
        };
        bh.prototype.print = function (indent) {
            if (indent === undefined) indent = '';
            document.writeln(indent + this);
            if (this.sub !== null) {
                indent += '  ';
                for (var i = 0,
                    max = this.sub.length; i < max; ++i) this.sub[i].print(indent);
            }
        };
        bh.prototype.sZ = function (indent) {
            if (indent === undefined) indent = '';
            var s = indent + this.iW() + " @" + this.bn.pos;
            if (this.length >= 0) s += "+";
            s += this.length;
            if (this.bv & 0x20) s += " (constructed)";
            else if (((this.bv == 0x03) || (this.bv == 0x04)) && (this.sub !== null)) s += " (encapsulates)";
            s += "\n";
            if (this.sub !== null) {
                indent += '  ';
                for (var i = 0,
                    max = this.sub.length; i < max; ++i) s += this.sub[i].sZ(indent);
            }
            return s;
        };
        bh.prototype.rQ = function () {
            var ai = dM.bv("div", "ai");
            ai.V = this;
            var head = dM.bv("div", "head");
            var s = this.iW().replace(/_/g, " ");
            head.innerHTML = s;
            var content = this.content();
            if (content !== null) {
                content = String(content).replace(/</g, "&lt;");
                var kx = dM.bv("span", "kx");
                kx.appendChild(dM.text(content));
                head.appendChild(kx);
            }
            ai.appendChild(head);
            this.ai = ai;
            this.head = head;
            var value = dM.bv("div", "value");
            s = "Offset: " + this.bn.pos + "<br/>";
            s += "Length: " + this.header + "+";
            if (this.length >= 0) s += this.length;
            else s += (- this.length) + " (undefined)";
            if (this.bv & 0x20) s += "<br/>(constructed)";
            else if (((this.bv == 0x03) || (this.bv == 0x04)) && (this.sub !== null)) s += "<br/>(encapsulates)";
            if (content !== null) {
                s += "<br/>Value:<br/><b>" + content + "</b>";
                if ((typeof xv === 'object') && (this.bv == 0x06)) {
                    var dI = xv[content];
                    if (dI) {
                        if (dI.d) s += "<br/>" + dI.d;
                        if (dI.c) s += "<br/>" + dI.c;
                        if (dI.w) s += "<br/>(warning!)";
                    }
                }
            }
            value.innerHTML = s;
            ai.appendChild(value);
            var sub = dM.bv("div", "sub");
            if (this.sub !== null) {
                for (var i = 0,
                    max = this.sub.length; i < max; ++i) sub.appendChild(this.sub[i].rQ());
            }
            ai.appendChild(sub);
            head.onclick = function () {
                ai.className = (ai.className == "ai collapsed") ? "ai" : "ai collapsed";
            };
            return ai;
        };
        bh.prototype.hg = function () {
            return this.bn.pos;
        };
        bh.prototype.jb = function () {
            return this.bn.pos + this.header;
        };
        bh.prototype.hU = function () {
            return this.bn.pos + this.header + Math.abs(this.length);
        };
        bh.prototype.vp = function (current) {
            this.ai.className += " hover";
            if (current) this.head.className += " hover";
        };
        bh.prototype.vQ = function (current) {
            var eT = / ?hover/;
            this.ai.className = this.ai.className.replace(eT, "");
            if (current) this.head.className = this.head.className.replace(eT, "");
        };
        bh.prototype.hX = function (ai, className, bn, start, end) {
            if (start >= end) return;
            var sub = dM.bv("span", className);
            sub.appendChild(dM.text(bn.jn(start, end)));
            ai.appendChild(sub);
        };
        bh.prototype.sP = function (root) {
            var ai = dM.bv("span", "al");
            if (root === undefined) root = ai;
            this.head.od = ai;
            this.head.onmouseover = function () {
                this.od.className = "hexCurrent";
            };
            this.head.onmouseout = function () {
                this.od.className = "al";
            };
            ai.V = this;
            ai.onmouseover = function () {
                var current = !root.selected;
                if (current) {
                    root.selected = this.V;
                    this.className = "hexCurrent";
                }
                this.V.vp(current);
            };
            ai.onmouseout = function () {
                var current = (root.selected == this.V);
                this.V.vQ(current);
                if (current) {
                    root.selected = null;
                    this.className = "al";
                }
            };
            this.hX(ai, "bv", this.bn, this.hg(), this.hg() + 1);
            this.hX(ai, (this.length >= 0) ? "dlen" : "ulen", this.bn, this.hg() + 1, this.jb());
            if (this.sub === null) ai.appendChild(dM.text(this.bn.jn(this.jb(), this.hU())));
            else if (this.sub.length > 0) {
                var first = this.sub[0];
                var last = this.sub[this.sub.length - 1];
                this.hX(ai, "intro", this.bn, this.jb(), first.hg());
                for (var i = 0,
                    max = this.sub.length; i < max; ++i) ai.appendChild(this.sub[i].sP(root));
                this.hX(ai, "outro", this.bn, last.hU(), this.hU());
            }
            return ai;
        };
        bh.prototype.sK = function (root) {
            return this.bn.jn(this.hg(), this.hU(), true);
        };
        bh.kl = function (bn) {
            var ea = bn.get(),
                aG = ea & 0x7F;
            if (aG == ea) return aG;
            if (aG > 3) throw "Length over 24 aR not supported at position " + (bn.pos - 1);
            if (aG === 0) return - 1;
            ea = 0;
            for (var i = 0; i < aG; ++i) ea = (ea << 8) | bn.get();
            return ea;
        };
        bh.wH = function (bv, aG, bn) {
            if (bv & 0x20) return true;
            if ((bv < 0x03) || (bv > 0x04)) return false;
            var p = new aU(bn);
            if (bv == 0x03) p.get();
            var qT = p.get();
            if ((qT >> 6) & 0x01) return false;
            try {
                var py = bh.kl(p);
                return ((p.pos - bn.pos) + py == aG);
            } catch (Ay) {
                return false;
            }
        };
        bh.ei = function (bn) {
            if (!(bn instanceof aU)) bn = new aU(bn, 0);
            var nc = new aU(bn),
                bv = bn.get(),
                aG = bh.kl(bn),
                header = bn.pos - nc.pos,
                sub = null;
            if (bh.wH(bv, aG, bn)) {
                var start = bn.pos;
                if (bv == 0x03) bn.get();
                sub = [];
                if (aG >= 0) {
                    var end = start + aG;
                    while (bn.pos < end) sub[sub.length] = bh.ei(bn);
                    if (bn.pos != end) throw "Content size is not correct for hO starting at offset " + start;
                } else {
                    try {
                        for (; ;) {
                            var s = bh.ei(bn);
                            if (s.bv === 0) break;
                            sub[sub.length] = s;
                        }
                        aG = start - bn.pos;
                    } catch (e) {
                        throw "Exception while decoding undefined length content: " + e;
                    }
                }
            } else bn.pos += aG;
            return new bh(nc, header, aG, bv, sub);
        };
        bh.test = function () {
            var test = [{
                value: [0x27],
                gI: 0x27
            },
            {
                value: [0x81, 0xC9],
                gI: 0xC9
            },
            {
                value: [0x83, 0xFE, 0xDC, 0xBA],
                gI: 0xFEDCBA
            }];
            for (var i = 0,
                max = test.length; i < max; ++i) {
                var pos = 0,
                    bn = new aU(test[i].value, 0),
                    kw = bh.kl(bn);
                if (kw != test[i].gI) document.write("In test[" + i + "] gI " + test[i].gI + " got " + kw + "\n");
            }
        };
        window.bh = bh;
    })();
    bh.prototype.et = function () {
        var vR = this.sK();
        var offset = this.header * 2;
        var length = this.length * 2;
        return vR.substr(offset, length);
    };
    ae.prototype.qA = function (gV) {
        try {
            var hS = 0;
            var jp = 0;
            var nP = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/;
            var wz = nP.test(gV) ? cJ.ei(gV) : aM.rA(gV);
            var V = bh.ei(wz);
            if (V.sub.length === 3) {
                V = V.sub[2].sub[0];
            }
            if (V.sub.length === 9) {
                hS = V.sub[1].et();
                this.n = bw(hS, 16);
                jp = V.sub[2].et();
                this.e = parseInt(jp, 16);
                var qE = V.sub[3].et();
                this.d = bw(qE, 16);
                var pV = V.sub[4].et();
                this.p = bw(pV, 16);
                var qG = V.sub[5].et();
                this.q = bw(qG, 16);
                var wA = V.sub[6].et();
                this.ca = bw(wA, 16);
                var vy = V.sub[7].et();
                this.dK = bw(vy, 16);
                var yv = V.sub[8].et();
                this.dr = bw(yv, 16);
            } else if (V.sub.length === 2) {
                var start = (V.header + V.sub[0].header) * 2;
                var length = V.sub[0].length * 2;
                hS = gV.substr(start, length);
                this.n = bw(hS, 16);
                start = length + start + V.sub[1].header * 2;
                length = V.sub[1].length * 2;
                jp = gV.substr(start, length);
                this.e = parseInt(jp, 16);
            } else {
                return false;
            }
            return true;
        } catch (ex) {
            return false;
        }
    };
    ae.prototype.vo = function () {
        var options = {
            'array': [new aF.V.dA({
                'bG': 0
            }), new aF.V.dA({
                'bigint': this.n
            }), new aF.V.dA({
                'bG': this.e
            }), new aF.V.dA({
                'bigint': this.d
            }), new aF.V.dA({
                'bigint': this.p
            }), new aF.V.dA({
                'bigint': this.q
            }), new aF.V.dA({
                'bigint': this.ca
            }), new aF.V.dA({
                'bigint': this.dK
            }), new aF.V.dA({
                'bigint': this.dr
            })]
        };
        var kL = new aF.V.gZ(options);
        return kL.fh();
    };
    ae.prototype.nS = function () {
        return nM(this.vo());
    };
    ae.prototype.wW = function () {
        var options = {
            'array': [new aF.V.gT({
                'dI': '1.2.840.113549.1.1.1'
            }), new aF.V.jV()]
        };
        var wL = new aF.V.gZ(options);
        options = {
            'array': [new aF.V.dA({
                'bigint': this.n
            }), new aF.V.dA({
                'bG': this.e
            })]
        };
        var uu = new aF.V.gZ(options);
        options = {
            'al': '00' + uu.fh()
        };
        var vz = new aF.V.lw(options);
        options = {
            'array': [wL, vz]
        };
        var kL = new aF.V.gZ(options);
        return kL.fh();
    };
    ae.prototype.nx = function () {
        return nM(this.wW());
    };
    ae.prototype.nG = function (bS, width) {
        width = width || 64;
        if (!bS) {
            return bS;
        }
        var qO = '(.{1,' + width + '})( +|$\n?)|(.{1,' + width + '})';
        return bS.match(RegExp(qO, 'g')).join('\n');
    };
    ae.prototype.nL = function () {
        var key = "-----BEGIN RSA PRIVATE KEY-----\n";
        key += this.nG(this.nS()) + "\n";
        key += "-----END RSA PRIVATE KEY-----";
        return key;
    };
    ae.prototype.mr = function () {
        var key = "-----BEGIN PUBLIC KEY-----\n";
        key += this.nG(this.nx()) + "\n";
        key += "-----END PUBLIC KEY-----";
        return key;
    };
    ae.prototype.wC = function (bA) {
        bA = bA || {};
        return (bA.hasOwnProperty('n') && bA.hasOwnProperty('e'));
    };
    ae.prototype.ws = function (bA) {
        bA = bA || {};
        return (bA.hasOwnProperty('n') && bA.hasOwnProperty('e') && bA.hasOwnProperty('d') && bA.hasOwnProperty('p') && bA.hasOwnProperty('q') && bA.hasOwnProperty('ca') && bA.hasOwnProperty('dK') && bA.hasOwnProperty('dr'));
    };
    ae.prototype.qb = function (bA) {
        this.n = bA.n;
        this.e = bA.e;
        if (bA.hasOwnProperty('d')) {
            this.d = bA.d;
            this.p = bA.p;
            this.q = bA.q;
            this.ca = bA.ca;
            this.dK = bA.dK;
            this.dr = bA.dr;
        }
    };
    var gO = function (key) {
        ae.call(this);
        if (key) {
            if (typeof key === 'string') {
                this.qA(key);
            } else if (this.ws(key) || this.wC(key)) {
                this.qb(key);
            }
        }
    };
    gO.prototype = new ae();
    gO.prototype.constructor = gO;
    var db = function (options) {
        options = options || {};
        this.ks = parseInt(options.ks) || 1024;
        this.kX = options.kX || '010001';
        this.log = options.log || false;
        this.key = null;
    };
    db.prototype.na = function (key) {
        if (this.log && this.key) {
            console.xZ('A key was already set, overriding existing.');
        }
        this.key = new gO(key);
    };
    db.prototype.yK = function (rh) {
        this.na(rh);
    };
    db.prototype.uO = function (pG) {
        this.na(pG);
    };
    db.prototype.eV = function (string) {
        try {
            return this.an().eV(kI(string));
        } catch (ex) {
            return false;
        }
    };
    db.prototype.bZ = function (string) {
        try {
            return (this.an().bZ(string));
        } catch (ex) {
            return false;
        }
    };
    db.prototype.an = function (jS) {
        if (!this.key) {
            this.key = new gO();
            if (jS && {}.toString.call(jS) === '[object Function]') {
                this.key.vS(this.ks, this.kX, jS);
                return;
            }
            this.key.generate(this.ks, this.kX);
        }
        return this.key;
    };
    db.prototype.nL = function () {
        return this.an().nL();
    };
    db.prototype.yO = function () {
        return this.an().nS();
    };
    db.prototype.mr = function () {
        return this.an().mr();
    };
    db.prototype.zF = function () {
        return this.an().nx();
    };
    fg.db = db;
})(lT);
var db = lT.db;
var fC;
var wr = 0xdeadbeefcafe;
var mT = ((wr & 0xffffff) == 0xefcafe);
function O(a, b, c) {
    if (a != null) if ("number" == typeof a) this.ki(a, b, c);
    else if (b == null && "string" != typeof a) this.gw(a, 256);
    else this.gw(a, b);
};
function aO() {
    return new O(null);
};
function pD(i, x, w, j, c, n) {
    while (--n >= 0) {
        var v = x * this[i++] + w[j] + c;
        c = Math.floor(v / 0x4000000);
        w[j++] = v & 0x3ffffff;
    }
    return c;
};
function sc(i, x, w, j, c, n) {
    var gE = x & 0x7fff,
        fR = x >> 15;
    while (--n >= 0) {
        var l = this[i] & 0x7fff;
        var h = this[i++] >> 15;
        var m = fR * l + h * gE;
        l = gE * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);
        c = (l >>> 30) + (m >>> 15) + fR * h + (c >>> 30);
        w[j++] = l & 0x3fffffff;
    }
    return c;
};
function rN(i, x, w, j, c, n) {
    var gE = x & 0x3fff,
        fR = x >> 14;
    while (--n >= 0) {
        var l = this[i] & 0x3fff;
        var h = this[i++] >> 14;
        var m = fR * l + h * gE;
        l = gE * l + ((m & 0x3fff) << 14) + w[j] + c;
        c = (l >> 28) + (m >> 14) + fR * h;
        w[j++] = l & 0xfffffff;
    }
    return c;
};
if (mT && (navigator.appName == "Microsoft Internet Explorer")) {
    O.prototype.dN = sc;
    fC = 30;
} else if (mT && (navigator.appName != "Netscape")) {
    O.prototype.dN = pD;
    fC = 26;
} else {
    O.prototype.dN = rN;
    fC = 28;
}
O.prototype.bb = fC;
O.prototype.aW = ((1 << fC) - 1);
O.prototype.dq = (1 << fC);
var lu = 52;
O.prototype.wY = Math.pow(2, lu);
O.prototype.oK = lu - fC;
O.prototype.oM = 2 * fC - lu;
var vW = "0123456789abcdefghijklmnopqrstuvwxyz";
var ix = new Array();
var eA, cu;
eA = "0".charCodeAt(0);
for (cu = 0; cu <= 9; ++cu) ix[eA++] = cu;
eA = "a".charCodeAt(0);
for (cu = 10; cu < 36; ++cu) ix[eA++] = cu;
eA = "A".charCodeAt(0);
for (cu = 10; cu < 36; ++cu) ix[eA++] = cu;
function dE(n) {
    return vW.charAt(n);
};
function mE(s, i) {
    var c = ix[s.charCodeAt(i)];
    return (c == null) ? -1 : c;
};
function sN(r) {
    for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];
    r.t = this.t;
    r.s = this.s;
};
function qf(x) {
    this.t = 1;
    this.s = (x < 0) ? -1 : 0;
    if (x > 0) this[0] = x;
    else if (x < -1) this[0] = x + this.dq;
    else this.t = 0;
};
function dV(i) {
    var r = aO();
    r.gr(i);
    return r;
};
function pR(s, b) {
    var k;
    if (b == 16) k = 4;
    else if (b == 8) k = 3;
    else if (b == 256) k = 8;
    else if (b == 2) k = 1;
    else if (b == 32) k = 5;
    else if (b == 4) k = 2;
    else {
        this.wq(s, b);
        return;
    }
    this.t = 0;
    this.s = 0;
    var i = s.length,
        eP = false,
        sh = 0;
    while (--i >= 0) {
        var x = (k == 8) ? s[i] & 0xff : mE(s, i);
        if (x < 0) {
            if (s.charAt(i) == "-") eP = true;
            continue;
        }
        eP = false;
        if (sh == 0) this[this.t++] = x;
        else if (sh + k > this.bb) {
            this[this.t - 1] |= (x & ((1 << (this.bb - sh)) - 1)) << sh;
            this[this.t++] = (x >> (this.bb - sh));
        } else this[this.t - 1] |= x << sh;
        sh += k;
        if (sh >= this.bb) sh -= this.bb;
    }
    if (k == 8 && (s[0] & 0x80) != 0) {
        this.s = -1;
        if (sh > 0) this[this.t - 1] |= ((1 << (this.bb - sh)) - 1) << sh;
    }
    this.ag();
    if (eP) O.ZERO.aj(this, this);
};
function sr() {
    var c = this.s & this.aW;
    while (this.t > 0 && this[this.t - 1] == c)--this.t;
};
function sg(b) {
    if (this.s < 0) return "-" + this.fF().toString(b);
    var k;
    if (b == 16) k = 4;
    else if (b == 8) k = 3;
    else if (b == 2) k = 1;
    else if (b == 32) k = 5;
    else if (b == 4) k = 2;
    else return this.tj(b);
    var jt = (1 << k) - 1,
        d,
        m = false,
        r = "",
        i = this.t;
    var p = this.bb - (i * this.bb) % k;
    if (i-- > 0) {
        if (p < this.bb && (d = this[i] >> p) > 0) {
            m = true;
            r = dE(d);
        }
        while (i >= 0) {
            if (p < k) {
                d = (this[i] & ((1 << p) - 1)) << (k - p);
                d |= this[--i] >> (p += this.bb - k);
            } else {
                d = (this[i] >> (p -= k)) & jt;
                if (p <= 0) {
                    p += this.bb; --i;
                }
            }
            if (d > 0) m = true;
            if (m) r += dE(d);
        }
    }
    return m ? r : "0";
};
function pF() {
    var r = aO();
    O.ZERO.aj(this, r);
    return r;
};
function rG() {
    return (this.s < 0) ? this.fF() : this;
};
function uq(a) {
    var r = this.s - a.s;
    if (r != 0) return r;
    var i = this.t;
    r = i - a.t;
    if (r != 0) return (this.s < 0) ? -r : r;
    while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;
    return 0;
};
function ij(x) {
    var r = 1,
        t;
    if ((t = x >>> 16) != 0) {
        x = t;
        r += 16;
    }
    if ((t = x >> 8) != 0) {
        x = t;
        r += 8;
    }
    if ((t = x >> 4) != 0) {
        x = t;
        r += 4;
    }
    if ((t = x >> 2) != 0) {
        x = t;
        r += 2;
    }
    if ((t = x >> 1) != 0) {
        x = t;
        r += 1;
    }
    return r;
};
function rK() {
    if (this.t <= 0) return 0;
    return this.bb * (this.t - 1) + ij(this[this.t - 1] ^ (this.s & this.aW));
};
function qD(n, r) {
    var i;
    for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];
    for (i = n - 1; i >= 0; --i) r[i] = 0;
    r.t = this.t + n;
    r.s = this.s;
};
function rg(n, r) {
    for (var i = n; i < this.t; ++i) r[i - n] = this[i];
    r.t = Math.max(this.t - n, 0);
    r.s = this.s;
};
function qZ(n, r) {
    var cO = n % this.bb;
    var gc = this.bb - cO;
    var iJ = (1 << gc) - 1;
    var cX = Math.floor(n / this.bb),
        c = (this.s << cO) & this.aW,
        i;
    for (i = this.t - 1; i >= 0; --i) {
        r[i + cX + 1] = (this[i] >> gc) | c;
        c = (this[i] & iJ) << cO;
    }
    for (i = cX - 1; i >= 0; --i) r[i] = 0;
    r[cX] = c;
    r.t = this.t + cX + 1;
    r.s = this.s;
    r.ag();
};
function sm(n, r) {
    r.s = this.s;
    var cX = Math.floor(n / this.bb);
    if (cX >= this.t) {
        r.t = 0;
        return;
    }
    var cO = n % this.bb;
    var gc = this.bb - cO;
    var iJ = (1 << cO) - 1;
    r[0] = this[cX] >> cO;
    for (var i = cX + 1; i < this.t; ++i) {
        r[i - cX - 1] |= (this[i] & iJ) << gc;
        r[i - cX] = this[i] >> cO;
    }
    if (cO > 0) r[this.t - cX - 1] |= (this.s & iJ) << gc;
    r.t = this.t - cX;
    r.ag();
};
function sk(a, r) {
    var i = 0,
        c = 0,
        m = Math.min(a.t, this.t);
    while (i < m) {
        c += this[i] - a[i];
        r[i++] = c & this.aW;
        c >>= this.bb;
    }
    if (a.t < this.t) {
        c -= a.s;
        while (i < this.t) {
            c += this[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        c += this.s;
    } else {
        c += this.s;
        while (i < a.t) {
            c -= a[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        c -= a.s;
    }
    r.s = (c < 0) ? -1 : 0;
    if (c < -1) r[i++] = this.dq + c;
    else if (c > 0) r[i++] = c;
    r.t = i;
    r.ag();
};
function sT(a, r) {
    var x = this.abs(),
        y = a.abs();
    var i = x.t;
    r.t = i + y.t;
    while (--i >= 0) r[i] = 0;
    for (i = 0; i < y.t; ++i) r[i + x.t] = x.dN(0, y[i], r, i, 0, x.t);
    r.s = 0;
    r.ag();
    if (this.s != a.s) O.ZERO.aj(r, r);
};
function st(r) {
    var x = this.abs();
    var i = r.t = 2 * x.t;
    while (--i >= 0) r[i] = 0;
    for (i = 0; i < x.t - 1; ++i) {
        var c = x.dN(i, x[i], r, 2 * i, 0, 1);
        if ((r[i + x.t] += x.dN(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.dq) {
            r[i + x.t] -= x.dq;
            r[i + x.t + 1] = 1;
        }
    }
    if (r.t > 0) r[r.t - 1] += x.dN(i, x[i], r, 2 * i, 0, 1);
    r.s = 0;
    r.ag();
};
function qk(m, q, r) {
    var pm = m.abs();
    if (pm.t <= 0) return;
    var pt = this.abs();
    if (pt.t < pm.t) {
        if (q != null) q.gr(0);
        if (r != null) this.eB(r);
        return;
    }
    if (r == null) r = aO();
    var y = aO(),
        pq = this.s,
        ms = m.s;
    var hj = this.bb - ij(pm[pm.t - 1]);
    if (hj > 0) {
        pm.fB(hj, y);
        pt.fB(hj, r);
    } else {
        pm.eB(y);
        pt.eB(r);
    }
    var cE = y.t;
    var ik = y[cE - 1];
    if (ik == 0) return;
    var nN = ik * (1 << this.oK) + ((cE > 1) ? y[cE - 2] >> this.oM : 0);
    var xG = this.wY / nN,
        yn = (1 << this.oK) / nN,
        e = 1 << this.oM;
    var i = r.t,
        j = i - cE,
        t = (q == null) ? aO() : q;
    y.gG(j, t);
    if (r.az(t) >= 0) {
        r[r.t++] = 1;
        r.aj(t, r);
    }
    O.ONE.gG(cE, t);
    t.aj(y, y);
    while (y.t < cE) y[y.t++] = 0;
    while (--j >= 0) {
        var jL = (r[--i] == ik) ? this.aW : Math.floor(r[i] * xG + (r[i - 1] + e) * yn);
        if ((r[i] += y.dN(0, jL, r, j, 0, cE)) < jL) {
            y.gG(j, t);
            r.aj(t, r);
            while (r[i] < --jL) r.aj(t, r);
        }
    }
    if (q != null) {
        r.gk(cE, q);
        if (pq != ms) O.ZERO.aj(q, q);
    }
    r.t = cE;
    r.ag();
    if (hj > 0) r.aD(hj, r);
    if (pq < 0) O.ZERO.aj(r, r);
};
function sD(a) {
    var r = aO();
    this.abs().ey(a, null, r);
    if (this.s < 0 && r.az(O.ZERO) > 0) a.aj(r, r);
    return r;
};
function ew(m) {
    this.m = m;
};
function rS(x) {
    if (x.s < 0 || x.az(this.m) >= 0) return x.dn(this.m);
    else return x;
};
function sS(x) {
    return x;
};
function sj(x) {
    x.ey(this.m, null, x);
};
function rZ(x, y, r) {
    x.fW(y, r);
    this.reduce(r);
};
function rF(x, r) {
    x.gL(r);
    this.reduce(r);
};
ew.prototype.convert = rS;
ew.prototype.revert = sS;
ew.prototype.reduce = sj;
ew.prototype.eb = rZ;
ew.prototype.cL = rF;
function rm() {
    if (this.t < 1) return 0;
    var x = this[0];
    if ((x & 1) == 0) return 0;
    var y = x & 3;
    y = (y * (2 - (x & 0xf) * y)) & 0xf;
    y = (y * (2 - (x & 0xff) * y)) & 0xff;
    y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;
    y = (y * (2 - x * y % this.dq)) % this.dq;
    return (y > 0) ? this.dq - y : -y;
};
function dY(m) {
    this.m = m;
    this.mQ = m.wc();
    this.mF = this.mQ & 0x7fff;
    this.wf = this.mQ >> 15;
    this.sL = (1 << (m.bb - 15)) - 1;
    this.yF = 2 * m.t;
};
function pf(x) {
    var r = aO();
    x.abs().gG(this.m.t, r);
    r.ey(this.m, null, r);
    if (x.s < 0 && r.az(O.ZERO) > 0) this.m.aj(r, r);
    return r;
};
function qz(x) {
    var r = aO();
    x.eB(r);
    this.reduce(r);
    return r;
};
function pN(x) {
    while (x.t <= this.yF) x[x.t++] = 0;
    for (var i = 0; i < this.m.t; ++i) {
        var j = x[i] & 0x7fff;
        var tc = (j * this.mF + (((j * this.wf + (x[i] >> 15) * this.mF) & this.sL) << 15)) & x.aW;
        j = i + this.m.t;
        x[j] += this.m.dN(0, tc, x, i, 0, this.m.t);
        while (x[j] >= x.dq) {
            x[j] -= x.dq;
            x[++j]++;
        }
    }
    x.ag();
    x.gk(this.m.t, x);
    if (x.az(this.m) >= 0) x.aj(this.m, x);
};
function qy(x, r) {
    x.gL(r);
    this.reduce(r);
};
function ov(x, y, r) {
    x.fW(y, r);
    this.reduce(r);
};
dY.prototype.convert = pf;
dY.prototype.revert = qz;
dY.prototype.reduce = pN;
dY.prototype.eb = ov;
dY.prototype.cL = qy;
function qB() {
    return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
};
function qK(e, z) {
    if (e > 0xffffffff || e < 1) return O.ONE;
    var r = aO(),
        r2 = aO(),
        g = z.convert(this),
        i = ij(e) - 1;
    g.eB(r);
    while (--i >= 0) {
        z.cL(r, r2);
        if ((e & (1 << i)) > 0) z.eb(r2, g, r);
        else {
            var t = r;
            r = r2;
            r2 = t;
        }
    }
    return z.revert(r);
};
function rO(e, m) {
    var z;
    if (e < 256 || m.cU()) z = new ew(m);
    else z = new dY(m);
    return this.exp(e, z);
};
O.prototype.eB = sN;
O.prototype.gr = qf;
O.prototype.gw = pR;
O.prototype.ag = sr;
O.prototype.gG = qD;
O.prototype.gk = rg;
O.prototype.fB = qZ;
O.prototype.aD = sm;
O.prototype.aj = sk;
O.prototype.fW = sT;
O.prototype.gL = st;
O.prototype.ey = qk;
O.prototype.wc = rm;
O.prototype.cU = qB;
O.prototype.exp = qK;
O.prototype.toString = sg;
O.prototype.fF = pF;
O.prototype.abs = rG;
O.prototype.az = uq;
O.prototype.ho = rK;
O.prototype.dn = sD;
O.prototype.mk = rO;
O.ZERO = dV(0);
O.ONE = dV(1);
function uy() {
    var r = aO();
    this.eB(r);
    return r;
};
function sO() {
    if (this.s < 0) {
        if (this.t == 1) return this[0] - this.dq;
        else if (this.t == 0) return - 1;
    } else if (this.t == 1) return this[0];
    else if (this.t == 0) return 0;
    return ((this[1] & ((1 << (32 - this.bb)) - 1)) << this.bb) | this[0];
};
function ss() {
    return (this.t == 0) ? this.s : (this[0] << 24) >> 24;
};
function sY() {
    return (this.t == 0) ? this.s : (this[0] << 16) >> 16;
};
function sb(r) {
    return Math.floor(Math.LN2 * this.bb / Math.log(r));
};
function si() {
    if (this.s < 0) return - 1;
    else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
    else return 1;
};
function rI(b) {
    if (b == null) b = 10;
    if (this.dh() == 0 || b < 2 || b > 36) return "0";
    var cs = this.lL(b);
    var a = Math.pow(b, cs);
    var d = dV(a),
        y = aO(),
        z = aO(),
        r = "";
    this.ey(d, y, z);
    while (y.dh() > 0) {
        r = (a + z.hy()).toString(b).substr(1) + r;
        y.ey(d, y, z);
    }
    return z.hy().toString(b) + r;
};
function qP(s, b) {
    this.gr(0);
    if (b == null) b = 10;
    var cs = this.lL(b);
    var d = Math.pow(b, cs),
        eP = false,
        j = 0,
        w = 0;
    for (var i = 0; i < s.length; ++i) {
        var x = mE(s, i);
        if (x < 0) {
            if (s.charAt(i) == "-" && this.dh() == 0) eP = true;
            continue;
        }
        w = b * w + x;
        if (++j >= cs) {
            this.oa(d);
            this.eD(w, 0);
            j = 0;
            w = 0;
        }
    }
    if (j > 0) {
        this.oa(Math.pow(b, j));
        this.eD(w, 0);
    }
    if (eP) O.ZERO.aj(this, this);
};
function qW(a, b, c) {
    if ("number" == typeof b) {
        if (a < 2) this.gr(1);
        else {
            this.ki(a, c);
            if (!this.lZ(a - 1)) this.J(O.ONE.shiftLeft(a - 1), jC, this);
            if (this.cU()) this.eD(1, 0);
            while (!this.gJ(b)) {
                this.eD(2, 0);
                if (this.ho() > a) this.aj(O.ONE.shiftLeft(a - 1), this);
            }
        }
    } else {
        var x = new Array(),
            t = a & 7;
        x.length = (a >> 3) + 1;
        b.lp(x);
        if (t > 0) x[0] &= ((1 << t) - 1);
        else x[0] = 0;
        this.gw(x, 256);
    }
};
function rJ() {
    var i = this.t,
        r = new Array();
    r[0] = this.s;
    var p = this.bb - (i * this.bb) % 8,
        d,
        k = 0;
    if (i-- > 0) {
        if (p < this.bb && (d = this[i] >> p) != (this.s & this.aW) >> p) r[k++] = d | (this.s << (this.bb - p));
        while (i >= 0) {
            if (p < 8) {
                d = (this[i] & ((1 << p) - 1)) << (8 - p);
                d |= this[--i] >> (p += this.bb - 8);
            } else {
                d = (this[i] >> (p -= 8)) & 0xff;
                if (p <= 0) {
                    p += this.bb; --i;
                }
            }
            if ((d & 0x80) != 0) d |= -256;
            if (k == 0 && (this.s & 0x80) != (d & 0x80))++k;
            if (k > 0 || d != this.s) r[k++] = d;
        }
    }
    return r;
};
function tA(a) {
    return (this.az(a) == 0);
};
function bQ(a) {
    return (this.az(a) < 0) ? this : a;
};
function rz(a) {
    return (this.az(a) > 0) ? this : a;
};
function pZ(a, ej, r) {
    var i, f, m = Math.min(a.t, this.t);
    for (i = 0; i < m; ++i) r[i] = ej(this[i], a[i]);
    if (a.t < this.t) {
        f = a.s & this.aW;
        for (i = m; i < this.t; ++i) r[i] = ej(this[i], f);
        r.t = this.t;
    } else {
        f = this.s & this.aW;
        for (i = m; i < a.t; ++i) r[i] = ej(f, a[i]);
        r.t = a.t;
    }
    r.s = ej(this.s, a.s);
    r.ag();
};
function ri(x, y) {
    return x & y;
};
function sM(a) {
    var r = aO();
    this.J(a, ri, r);
    return r;
};
function jC(x, y) {
    return x | y;
};
function qI(a) {
    var r = aO();
    this.J(a, jC, r);
    return r;
};
function oz(x, y) {
    return x ^ y;
};
function sC(a) {
    var r = aO();
    this.J(a, oz, r);
    return r;
};
function oS(x, y) {
    return x & ~y;
};
function sU(a) {
    var r = aO();
    this.J(a, oS, r);
    return r;
};
function qc() {
    var r = aO();
    for (var i = 0; i < this.t; ++i) r[i] = this.aW & ~this[i];
    r.t = this.t;
    r.s = ~this.s;
    return r;
};
function rv(n) {
    var r = aO();
    if (n < 0) this.aD(- n, r);
    else this.fB(n, r);
    return r;
};
function sQ(n) {
    var r = aO();
    if (n < 0) this.fB(- n, r);
    else this.aD(n, r);
    return r;
};
function nB(x) {
    if (x == 0) return - 1;
    var r = 0;
    if ((x & 0xffff) == 0) {
        x >>= 16;
        r += 16;
    }
    if ((x & 0xff) == 0) {
        x >>= 8;
        r += 8;
    }
    if ((x & 0xf) == 0) {
        x >>= 4;
        r += 4;
    }
    if ((x & 3) == 0) {
        x >>= 2;
        r += 2;
    }
    if ((x & 1) == 0)++r;
    return r;
};
function sy() {
    for (var i = 0; i < this.t; ++i) if (this[i] != 0) return i * this.bb + nB(this[i]);
    if (this.s < 0) return this.t * this.bb;
    return - 1;
};
function ta(x) {
    var r = 0;
    while (x != 0) {
        x &= x - 1; ++r;
    }
    return r;
};
function rM() {
    var r = 0,
        x = this.s & this.aW;
    for (var i = 0; i < this.t; ++i) r += ta(this[i] ^ x);
    return r;
};
function sH(n) {
    var j = Math.floor(n / this.bb);
    if (j >= this.t) return (this.s != 0);
    return ((this[j] & (1 << (n % this.bb))) != 0);
};
function tk(n, ej) {
    var r = O.ONE.shiftLeft(n);
    this.J(r, ej, r);
    return r;
};
function rq(n) {
    return this.jP(n, jC);
};
function uT(n) {
    return this.jP(n, oS);
};
function tS(n) {
    return this.jP(n, oz);
};
function pO(a, r) {
    var i = 0,
        c = 0,
        m = Math.min(a.t, this.t);
    while (i < m) {
        c += this[i] + a[i];
        r[i++] = c & this.aW;
        c >>= this.bb;
    }
    if (a.t < this.t) {
        c += a.s;
        while (i < this.t) {
            c += this[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        c += this.s;
    } else {
        c += this.s;
        while (i < a.t) {
            c += a[i];
            r[i++] = c & this.aW;
            c >>= this.bb;
        }
        c += a.s;
    }
    r.s = (c < 0) ? -1 : 0;
    if (c > 0) r[i++] = c;
    else if (c < -1) r[i++] = this.dq + c;
    r.t = i;
    r.ag();
};
function sX(a) {
    var r = aO();
    this.jh(a, r);
    return r;
};
function sl(a) {
    var r = aO();
    this.aj(a, r);
    return r;
};
function sV(a) {
    var r = aO();
    this.fW(a, r);
    return r;
};
function sR() {
    var r = aO();
    this.gL(r);
    return r;
};
function su(a) {
    var r = aO();
    this.ey(a, r, null);
    return r;
};
function rH(a) {
    var r = aO();
    this.ey(a, null, r);
    return r;
};
function uI(a) {
    var q = aO(),
        r = aO();
    this.ey(a, q, r);
    return new Array(q, r);
};
function qt(n) {
    this[this.t] = this.dN(0, n - 1, this, 0, 0, this.t); ++this.t;
    this.ag();
};
function qH(n, w) {
    if (n == 0) return;
    while (this.t <= w) this[this.t++] = 0;
    this[w] += n;
    while (this[w] >= this.dq) {
        this[w] -= this.dq;
        if (++w >= this.t) this[this.t++] = 0; ++this[w];
    }
};
function gR() { };
function oW(x) {
    return x;
};
function pL(x, y, r) {
    x.fW(y, r);
};
function qr(x, r) {
    x.gL(r);
};
gR.prototype.convert = oW;
gR.prototype.revert = oW;
gR.prototype.eb = pL;
gR.prototype.cL = qr;
function tg(e) {
    return this.exp(e, new gR());
};
function rs(a, n, r) {
    var i = Math.min(this.t + a.t, n);
    r.s = 0;
    r.t = i;
    while (i > 0) r[--i] = 0;
    var j;
    for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.dN(0, a[i], r, i, 0, this.t);
    for (j = Math.min(a.t, n); i < j; ++i) this.dN(0, a[i], r, i, 0, n - i);
    r.ag();
};
function rU(a, n, r) {
    --n;
    var i = r.t = this.t + a.t - n;
    r.s = 0;
    while (--i >= 0) r[i] = 0;
    for (i = Math.max(n - this.t, 0); i < a.t; ++i) r[this.t + i - n] = this.dN(n - i, a[i], r, 0, 0, this.t + i - n);
    r.ag();
    r.gk(1, r);
};
function dW(m) {
    this.r2 = aO();
    this.nj = aO();
    O.ONE.gG(2 * m.t, this.r2);
    this.xB = this.r2.divide(m);
    this.m = m;
};
function rC(x) {
    if (x.s < 0 || x.t > 2 * this.m.t) return x.dn(this.m);
    else if (x.az(this.m) < 0) return x;
    else {
        var r = aO();
        x.eB(r);
        this.reduce(r);
        return r;
    }
};
function sf(x) {
    return x;
};
function ru(x) {
    x.gk(this.m.t - 1, this.r2);
    if (x.t > this.m.t + 1) {
        x.t = this.m.t + 1;
        x.ag();
    }
    this.xB.yA(this.r2, this.m.t + 1, this.nj);
    this.m.yk(this.nj, this.m.t + 1, this.r2);
    while (x.az(this.r2) < 0) x.eD(1, this.m.t + 1);
    x.aj(this.r2, x);
    while (x.az(this.m) >= 0) x.aj(this.m, x);
};
function tf(x, r) {
    x.gL(r);
    this.reduce(r);
};
function sB(x, y, r) {
    x.fW(y, r);
    this.reduce(r);
};
dW.prototype.convert = rC;
dW.prototype.revert = sf;
dW.prototype.reduce = ru;
dW.prototype.eb = sB;
dW.prototype.cL = tf;
function sd(e, m) {
    var i = e.ho(),
        k,
        r = dV(1),
        z;
    if (i <= 0) return r;
    else if (i < 18) k = 1;
    else if (i < 48) k = 3;
    else if (i < 144) k = 4;
    else if (i < 768) k = 5;
    else k = 6;
    if (i < 8) z = new ew(m);
    else if (m.cU()) z = new dW(m);
    else z = new dY(m);
    var g = new Array(),
        n = 3,
        fY = k - 1,
        jt = (1 << k) - 1;
    g[1] = z.convert(this);
    if (k > 1) {
        var oi = aO();
        z.cL(g[1], oi);
        while (n <= jt) {
            g[n] = aO();
            z.eb(oi, g[n - 2], g[n]);
            n += 2;
        }
    }
    var j = e.t - 1,
        w, nC = true,
        r2 = aO(),
        t;
    i = ij(e[j]) - 1;
    while (j >= 0) {
        if (i >= fY) w = (e[j] >> (i - fY)) & jt;
        else {
            w = (e[j] & ((1 << (i + 1)) - 1)) << (fY - i);
            if (j > 0) w |= e[j - 1] >> (this.bb + i - fY);
        }
        n = k;
        while ((w & 1) == 0) {
            w >>= 1; --n;
        }
        if ((i -= n) < 0) {
            i += this.bb; --j;
        }
        if (nC) {
            g[w].eB(r);
            nC = false;
        } else {
            while (n > 1) {
                z.cL(r, r2);
                z.cL(r2, r);
                n -= 2;
            }
            if (n > 0) z.cL(r, r2);
            else {
                t = r;
                r = r2;
                r2 = t;
            }
            z.eb(r2, g[w], r);
        }
        while (j >= 0 && (e[j] & (1 << i)) == 0) {
            z.cL(r, r2);
            t = r;
            r = r2;
            r2 = t;
            if (--i < 0) {
                i = this.bb - 1; --j;
            }
        }
    }
    return z.revert(r);
};
function rV(a) {
    var x = (this.s < 0) ? this.fF() : this.clone();
    var y = (a.s < 0) ? a.fF() : a.clone();
    if (x.az(y) < 0) {
        var t = x;
        x = y;
        y = t;
    }
    var i = x.cg(),
        g = y.cg();
    if (g < 0) return x;
    if (i < g) g = i;
    if (g > 0) {
        x.aD(g, x);
        y.aD(g, y);
    }
    while (x.dh() > 0) {
        if ((i = x.cg()) > 0) x.aD(i, x);
        if ((i = y.cg()) > 0) y.aD(i, y);
        if (x.az(y) >= 0) {
            x.aj(y, x);
            x.aD(1, x);
        } else {
            y.aj(x, y);
            y.aD(1, y);
        }
    }
    if (g > 0) y.fB(g, y);
    return y;
};
function pW(n) {
    if (n <= 0) return 0;
    var d = this.dq % n,
        r = (this.s < 0) ? n - 1 : 0;
    if (this.t > 0) if (d == 0) r = this[0] % n;
    else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;
    return r;
};
function sG(m) {
    var he = m.cU();
    if ((this.cU() && he) || m.dh() == 0) return O.ZERO;
    var u = m.clone(),
        v = this.clone();
    var a = dV(1),
        b = dV(0),
        c = dV(0),
        d = dV(1);
    while (u.dh() != 0) {
        while (u.cU()) {
            u.aD(1, u);
            if (he) {
                if (!a.cU() || !b.cU()) {
                    a.jh(this, a);
                    b.aj(m, b);
                }
                a.aD(1, a);
            } else if (!b.cU()) b.aj(m, b);
            b.aD(1, b);
        }
        while (v.cU()) {
            v.aD(1, v);
            if (he) {
                if (!c.cU() || !d.cU()) {
                    c.jh(this, c);
                    d.aj(m, d);
                }
                c.aD(1, c);
            } else if (!d.cU()) d.aj(m, d);
            d.aD(1, d);
        }
        if (u.az(v) >= 0) {
            u.aj(v, u);
            if (he) a.aj(c, a);
            b.aj(d, b);
        } else {
            v.aj(u, v);
            if (he) c.aj(a, c);
            d.aj(b, d);
        }
    }
    if (v.az(O.ONE) != 0) return O.ZERO;
    if (d.az(m) >= 0) return d.cK(m);
    if (d.dh() < 0) d.jh(m, d);
    else return d;
    if (d.dh() < 0) return d.add(m);
    else return d;
};
var dR = [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];
var wN = (1 << 26) / dR[dR.length - 1];
function rY(t) {
    var i, x = this.abs();
    if (x.t == 1 && x[0] <= dR[dR.length - 1]) {
        for (i = 0; i < dR.length; ++i) if (x[0] == dR[i]) return true;
        return false;
    }
    if (x.cU()) return false;
    i = 1;
    while (i < dR.length) {
        var m = dR[i],
            j = i + 1;
        while (j < dR.length && m < wN) m *= dR[j++];
        m = x.wt(m);
        while (i < j) if (m % dR[i++] == 0) return false;
    }
    return x.vn(t);
};
function pM(t) {
    var gd = this.cK(O.ONE);
    var k = gd.cg();
    if (k <= 0) return false;
    var r = gd.sq(k);
    t = (t + 1) >> 1;
    if (t > dR.length) t = dR.length;
    var a = aO();
    for (var i = 0; i < t; ++i) {
        a.gr(dR[Math.floor(Math.random() * dR.length)]);
        var y = a.hZ(r, this);
        if (y.az(O.ONE) != 0 && y.az(gd) != 0) {
            var j = 1;
            while (j++ < k && y.az(gd) != 0) {
                y = y.mk(2, this);
                if (y.az(O.ONE) == 0) return false;
            }
            if (y.az(gd) != 0) return false;
        }
    }
    return true;
};
O.prototype.lL = sb;
O.prototype.tj = rI;
O.prototype.wq = qP;
O.prototype.ki = qW;
O.prototype.J = pZ;
O.prototype.jP = tk;
O.prototype.jh = pO;
O.prototype.oa = qt;
O.prototype.eD = qH;
O.prototype.yk = rs;
O.prototype.yA = rU;
O.prototype.wt = pW;
O.prototype.vn = pM;
O.prototype.clone = uy;
O.prototype.hy = sO;
O.prototype.AI = ss;
O.prototype.yL = sY;
O.prototype.dh = si;
O.prototype.ti = rJ;
O.prototype.zD = tA;
O.prototype.min = bQ;
O.prototype.max = rz;
O.prototype.and = sM;
O.prototype.ct = qI;
O.prototype.xor = sC;
O.prototype.xR = sU;
O.prototype.not = qc;
O.prototype.shiftLeft = rv;
O.prototype.sq = sQ;
O.prototype.cg = sy;
O.prototype.zj = rM;
O.prototype.lZ = sH;
O.prototype.Ae = rq;
O.prototype.AA = uT;
O.prototype.xs = tS;
O.prototype.add = sX;
O.prototype.cK = sl;
O.prototype.multiply = sV;
O.prototype.divide = su;
O.prototype.Af = rH;
O.prototype.zA = uI;
O.prototype.hZ = sd;
O.prototype.ja = sG;
O.prototype.pow = tg;
O.prototype.hG = rV;
O.prototype.gJ = rY;
O.prototype.square = sR;
function bw(bS, r) {
    return new O(bS, r);
};
function yW(s, n) {
    var bk = "";
    var i = 0;
    while (i + n < s.length) {
        bk += s.substring(i, i + n) + "\n";
        i += n;
    }
    return bk + s.substring(i, s.length);
};
function zi(b) {
    if (b < 0x10) return "0" + b.toString(16);
    else return b.toString(16);
};
function pE(s, n) {
    if (n < s.length + 11) {
        alert("Message too long for RSA");
        return null;
    }
    var dj = new Array();
    var i = s.length - 1;
    while (i >= 0 && n > 0) {
        var c = s.charCodeAt(i--);
        if (c < 128) {
            dj[--n] = c;
        } else if ((c > 127) && (c < 2048)) {
            dj[--n] = (c & 63) | 128;
            dj[--n] = (c >> 6) | 192;
        } else {
            dj[--n] = (c & 63) | 128;
            dj[--n] = ((c >> 6) & 63) | 128;
            dj[--n] = (c >> 12) | 224;
        }
    }
    dj[--n] = 0;
    var fs = new js();
    var x = new Array();
    while (n > 2) {
        x[0] = 0;
        while (x[0] == 0) fs.lp(x);
        dj[--n] = x[0];
    }
    dj[--n] = 2;
    dj[--n] = 0;
    return new O(dj);
};
function oaep_mgf1_arr(seed, aG, hash) {
    var mask = '',
        i = 0;
    while (mask.length < aG) {
        mask += hash(String.fromCharCode.apply(String, seed.concat([(i & 0xff000000) >> 24, (i & 0x00ff0000) >> 16, (i & 0x0000ff00) >> 8, i & 0x000000ff])));
        i += 1;
    }
    return mask;
};
function oaep_pad(s, n, hash, hashLen) {
    var MD = aF.crypto.MessageDigest;
    var Util = aF.crypto.Util;
    var algName = null;
    if (!hash) hash = "sha1";
    if (typeof hash === "string") {
        algName = MD.getCanonicalAlgName(hash);
        hashLen = MD.getHashLength(algName);
        hash = function (s) {
            return hextorstr(Util.hashString(s, algName));
        };
    }
    if (s.length + 2 * hashLen + 2 > n) {
        throw "Message too long for RSA";
    }
    var PS = '',
        i;
    for (i = 0; i < n - s.length - 2 * hashLen - 2; i += 1) {
        PS += '\x00';
    }
    var bb = hash('') + PS + '\x01' + s;
    var seed = new Array(hashLen);
    new js().lp(seed);
    var dbMask = oaep_mgf1_arr(seed, bb.length, hash);
    var maskedDB = [];
    for (i = 0; i < bb.length; i += 1) {
        maskedDB[i] = bb.charCodeAt(i) ^ dbMask.charCodeAt(i);
    }
    var seedMask = oaep_mgf1_arr(maskedDB, seed.length, hash);
    var maskedSeed = [0];
    for (i = 0; i < seed.length; i += 1) {
        maskedSeed[i + 1] = seed[i] ^ seedMask.charCodeAt(i);
    }
    return new O(maskedSeed.concat(maskedDB));
};
function ae() {
    this.n = null;
    this.e = 0;
    this.d = null;
    this.p = null;
    this.q = null;
    this.ca = null;
    this.dK = null;
    this.dr = null;
};
function qu(N, E) {
    this.isPublic = true;
    if (typeof N !== "string") {
        this.n = N;
        this.e = E;
    } else if (N != null && E != null && N.length > 0 && E.length > 0) {
        this.n = bw(N, 16);
        this.e = parseInt(E, 16);
    } else alert("Invalid RSA public key");
};
function ql(x) {
    return x.mk(this.e, this.n);
};
function pv(text) {
    var m = pE(text, (this.n.ho() + 7) >> 3);
    if (m == null) return null;
    var c = this.xa(m);
    if (c == null) return null;
    var h = c.toString(16);
    if ((h.length & 1) == 0) return h;
    else return "0" + h;
};
function RSAEncryptOAEP(text, hash, hashLen) {
    var m = oaep_pad(text, (this.n.ho() + 7) >> 3, hash, hashLen);
    if (m == null) return null;
    var c = this.xa(m);
    if (c == null) return null;
    var h = c.toString(16);
    if ((h.length & 1) == 0) return h;
    else return "0" + h;
};
ae.prototype.xa = ql;
ae.prototype.AU = qu;
ae.prototype.bZ = pv;
ae.prototype.encryptOAEP = RSAEncryptOAEP;
ae.prototype.type = "RSA";
var fZ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var mR = "=";
function nM(h) {
    var i;
    var c;
    var bk = "";
    for (i = 0; i + 3 <= h.length; i += 3) {
        c = parseInt(h.substring(i, i + 3), 16);
        bk += fZ.charAt(c >> 6) + fZ.charAt(c & 63);
    }
    if (i + 1 == h.length) {
        c = parseInt(h.substring(i, i + 1), 16);
        bk += fZ.charAt(c << 2);
    } else if (i + 2 == h.length) {
        c = parseInt(h.substring(i, i + 2), 16);
        bk += fZ.charAt(c >> 2) + fZ.charAt((c & 3) << 4);
    }
    if (mR) while ((bk.length & 3) > 0) bk += mR;
    return bk;
};
function kI(s) {
    var bk = "";
    var i;
    var k = 0;
    var eY;
    var v;
    for (i = 0; i < s.length; ++i) {
        if (s.charAt(i) == mR) break;
        v = fZ.indexOf(s.charAt(i));
        if (v < 0) continue;
        if (k == 0) {
            bk += dE(v >> 2);
            eY = v & 3;
            k = 1;
        } else if (k == 1) {
            bk += dE((eY << 2) | (v >> 4));
            eY = v & 0xf;
            k = 2;
        } else if (k == 2) {
            bk += dE(eY);
            bk += dE(v >> 2);
            eY = v & 3;
            k = 3;
        } else {
            bk += dE((eY << 2) | (v >> 4));
            bk += dE(v & 0xf);
            k = 0;
        }
    }
    if (k == 1) bk += dE(eY << 2);
    return bk;
};
function Ag(s) {
    var h = kI(s);
    var i;
    var a = new Array();
    for (i = 0; 2 * i < h.length; ++i) {
        a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);
    }
    return a;
};
var AM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var iI = new Array(- 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
function aB(bS) {
    var jj, hF, fG, eR;
    var i, aG, out;
    aG = bS.length;
    i = 0;
    out = "";
    while (i < aG) {
        do {
            jj = iI[bS.charCodeAt(i++) & 0xff];
        } while (i < aG && jj == - 1);
        if (jj == -1) break;
        do {
            hF = iI[bS.charCodeAt(i++) & 0xff];
        } while (i < aG && hF == - 1);
        if (hF == -1) break;
        out += String.fromCharCode((jj << 2) | ((hF & 0x30) >> 4));
        do {
            fG = bS.charCodeAt(i++) & 0xff;
            if (fG == 61) return out;
            fG = iI[fG];
        } while (i < aG && fG == - 1);
        if (fG == -1) break;
        out += String.fromCharCode(((hF & 0XF) << 4) | ((fG & 0x3C) >> 2));
        do {
            eR = bS.charCodeAt(i++) & 0xff;
            if (eR == 61) return out;
            eR = iI[eR];
        } while (i < aG && eR == - 1);
        if (eR == -1) break;
        out += String.fromCharCode(((fG & 0x03) << 6) | eR);
    }
    return out;
};
function encodeArr(aN) {
    var bS = "";
    for (var i = 0; i < aN.length; i++) {
        var tmp = aN[i].toString(16);
        if (tmp.length == 1) {
            tmp = "0" + tmp;
        }
        bS += tmp;
    }
    return bS.toUpperCase();
};
function _string2Bin2(bS) {
    var result = [];
    for (var i = 0; i < bS.length; i++) {
        var x = bS.charCodeAt(i);
        result.push(x);
    }
    return result;
};
function Base642() {
    _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    this.ei = function (input, te) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;
        if (te) {
            output = [];
            while (i < input.length) {
                enc1 = _keyStr.indexOf(input.charAt(i++));
                enc2 = _keyStr.indexOf(input.charAt(i++));
                enc3 = _keyStr.indexOf(input.charAt(i++));
                enc4 = _keyStr.indexOf(input.charAt(i++));
                chr1 = (enc1 << 2) | (enc2 >> 4);
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                chr3 = ((enc3 & 3) << 6) | enc4;
                output.push(chr1);
                if (enc3 != 64) {
                    output.push(chr2);
                }
                if (enc4 != 64) {
                    output.push(chr3);
                }
            }
            return output;
        } else {
            input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
            while (i < input.length) {
                enc1 = _keyStr.indexOf(input.charAt(i++));
                enc2 = _keyStr.indexOf(input.charAt(i++));
                enc3 = _keyStr.indexOf(input.charAt(i++));
                enc4 = _keyStr.indexOf(input.charAt(i++));
                chr1 = (enc1 << 2) | (enc2 >> 4);
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                chr3 = ((enc3 & 3) << 6) | enc4;
                output = output + String.fromCharCode(chr1);
                if (enc3 != 64) {
                    output = output + String.fromCharCode(chr2);
                }
                if (enc4 != 64) {
                    output = output + String.fromCharCode(chr3);
                }
            }
        }
        return encodeArr(_string2Bin2(output));
    }
};
var aX = aX || (function (Math, undefined) {
    var create = Object.create || (function () {
        function F() { };
        return function (bA) {
            var fl;
            F.prototype = bA;
            fl = new F();
            F.prototype = null;
            return fl;
        };
    }());
    var C = {};
    var bC = C.bf = {};
    var Base = bC.Base = (function () {
        return {
            extend: function (fj) {
                var fl = create(this);
                if (fj) {
                    fl.jT(fj);
                }
                if (!fl.hasOwnProperty('aV') || this.aV === fl.aV) {
                    fl.aV = function () {
                        fl.ro.aV.apply(this, arguments);
                    };
                }
                fl.aV.prototype = fl;
                fl.ro = this;
                return fl;
            },
            create: function () {
                var kf = this.extend();
                kf.aV.apply(kf, arguments);
                return kf;
            },
            aV: function () { },
            jT: function (gY) {
                for (var propertyName in gY) {
                    if (gY.hasOwnProperty(propertyName)) {
                        this[propertyName] = gY[propertyName];
                    }
                }
                if (gY.hasOwnProperty('toString')) {
                    this.toString = gY.toString;
                }
            },
            clone: function () {
                return this.aV.prototype.extend(this);
            }
        };
    }());
    var bd = bC.bd = Base.extend({
        aV: function (bq, aI) {
            bq = this.bq = bq || [];
            if (aI != undefined) {
                this.aI = aI;
            } else {
                this.aI = bq.length * 4;
            }
        },
        toString: function (vX) {
            return (vX || cJ).stringify(this);
        },
        concat: function (aH) {
            var mg = this.bq;
            var ng = aH.bq;
            var jo = this.aI;
            var jJ = aH.aI;
            this.ag();
            if (jo % 4) {
                for (var i = 0; i < jJ; i++) {
                    var so = (ng[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                    mg[(jo + i) >>> 2] |= so << (24 - ((jo + i) % 4) * 8);
                }
            } else {
                for (var i = 0; i < jJ; i += 4) {
                    mg[(jo + i) >>> 2] = ng[i >>> 2];
                }
            }
            this.aI += jJ;
            return this;
        },
        ag: function () {
            var bq = this.bq;
            var aI = this.aI;
            bq[aI >>> 2] &= 0xffffffff << (32 - (aI % 4) * 8);
            bq.length = Math.ceil(aI / 4);
        },
        clone: function () {
            var clone = Base.clone.call(this);
            clone.bq = this.bq.slice(0);
            return clone;
        },
        random: function (eE) {
            var bq = [];
            var r = (function (eH) {
                var eH = eH;
                var iH = 0x3ade68b1;
                var mask = 0xffffffff;
                return function () {
                    iH = (0x9069 * (iH & 0xFFFF) + (iH >> 0x10)) & mask;
                    eH = (0x4650 * (eH & 0xFFFF) + (eH >> 0x10)) & mask;
                    var result = ((iH << 0x10) + eH) & mask;
                    result /= 0x100000000;
                    result += 0.5;
                    return result * (Math.random() > .5 ? 1 : -1);
                }
            });
            for (var i = 0,
                mt; i < eE; i += 4) {
                var mz = r((mt || Math.random()) * 0x100000000);
                mt = mz() * 0x3ade67b7;
                bq.push((mz() * 0x100000000) | 0);
            }
            return new bd.aV(bq, eE);
        }
    });
    var ck = C.bJ = {};
    var cJ = ck.cJ = {
        stringify: function (aH) {
            var bq = aH.bq;
            var aI = aH.aI;
            var jm = [];
            for (var i = 0; i < aI; i++) {
                var iY = (bq[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                jm.push((iY >>> 4).toString(16));
                jm.push((iY & 0x0f).toString(16));
            }
            return jm.join('');
        },
        parse: function (oX) {
            var nU = oX.length;
            var bq = [];
            for (var i = 0; i < nU; i += 2) {
                bq[i >>> 3] |= parseInt(oX.substr(i, 2), 16) << (24 - (i % 8) * 4);
            }
            return new bd.aV(bq, nU / 2);
        }
    };
    var lq = ck.lq = {
        stringify: function (aH) {
            var bq = aH.bq;
            var aI = aH.aI;
            var mw = [];
            for (var i = 0; i < aI; i++) {
                var iY = (bq[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
                mw.push(String.fromCharCode(iY));
            }
            return mw.join('');
        },
        parse: function (mK) {
            var mn = mK.length;
            var bq = [];
            for (var i = 0; i < mn; i++) {
                bq[i >>> 2] |= (mK.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
            }
            return new bd.aV(bq, mn);
        }
    };
    var hh = ck.hh = {
        stringify: function (aH) {
            try {
                return decodeURIComponent(escape(lq.stringify(aH)));
            } catch (e) {
                throw new Error('Malformed UTF-8 data');
            }
        },
        parse: function (ox) {
            return lq.parse(unescape(encodeURIComponent(ox)));
        }
    };
    var fk = bC.fk = Base.extend({
        reset: function () {
            this.hs = new bd.aV();
            this.qY = 0;
        },
        ji: function (data) {
            if (typeof data == 'string') {
                data = hh.parse(data);
            }
            this.hs.concat(data);
            this.qY += data.aI;
        },
        gq: function (wx) {
            var data = this.hs;
            var jk = data.bq;
            var gF = data.aI;
            var bB = this.bB;
            var cq = bB * 4;
            var gD = gF / cq;
            if (wx) {
                gD = Math.ceil(gD);
            } else {
                gD = Math.max((gD | 0) - this.lN, 0);
            }
            var iO = gD * bB;
            var nu = Math.min(iO * 4, gF);
            if (iO) {
                for (var offset = 0; offset < iO; offset += bB) {
                    this.kq(jk, offset);
                }
                var rj = jk.splice(0, iO);
                data.aI -= nu;
            }
            return new bd.aV(rj, nu);
        },
        clone: function () {
            var clone = Base.clone.call(this);
            clone.hs = this.hs.clone();
            return clone;
        },
        lN: 0
    });
    var wh = bC.wh = fk.extend({
        aL: Base.extend(),
        aV: function (aL) {
            this.aL = this.aL.extend(aL);
            this.reset();
        },
        reset: function () {
            fk.reset.call(this);
            this.jf();
        },
        update: function (jw) {
            this.ji(jw);
            this.gq();
            return this;
        },
        fU: function (jw) {
            if (jw) {
                this.ji(jw);
            }
            var hash = this.kG();
            return hash;
        },
        bB: 512 / 32,
        jx: function (jM) {
            return function (message, aL) {
                return new jM.aV(aL).fU(message);
            };
        },
        zS: function (jM) {
            return function (message, key) {
                return new cw.AP.aV(jM, key).fU(message);
            };
        }
    });
    var cw = C.jg = {};
    return C;
}(Math)); (function () {
    var C = aX;
    var bC = C.bf;
    var bd = bC.bd;
    var wh = bC.wh;
    var cw = C.jg;
    var W = [];
    var SHA1 = cw.SHA1 = wh.extend({
        jf: function () {
            this._hash = new bd.aV([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);
        },
        kq: function (M, offset) {
            var H = this._hash.bq;
            var a = H[0];
            var b = H[1];
            var c = H[2];
            var d = H[3];
            var e = H[4];
            for (var i = 0; i < 80; i++) {
                if (i < 16) {
                    W[i] = M[offset + i] | 0;
                } else {
                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
                    W[i] = (n << 1) | (n >>> 31);
                }
                var t = ((a << 5) | (a >>> 27)) + e + W[i];
                if (i < 20) {
                    t += ((b & c) | (~b & d)) + 0x5a827999;
                } else if (i < 40) {
                    t += (b ^ c ^ d) + 0x6ed9eba1;
                } else if (i < 60) {
                    t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
                } else {
                    t += (b ^ c ^ d) - 0x359d3e2a;
                }
                e = d;
                d = c;
                c = (b << 30) | (b >>> 2);
                b = a;
                a = t;
            }
            H[0] = (H[0] + a) | 0;
            H[1] = (H[1] + b) | 0;
            H[2] = (H[2] + c) | 0;
            H[3] = (H[3] + d) | 0;
            H[4] = (H[4] + e) | 0;
        },
        kG: function () {
            var data = this.hs;
            var jk = data.bq;
            var nBitsTotal = this.qY * 8;
            var nBitsLeft = data.aI * 8;
            jk[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
            jk[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
            jk[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
            data.aI = jk.length * 4;
            this.gq();
            return this._hash;
        },
        clone: function () {
            var clone = wh.clone.call(this);
            clone._hash = this._hash.clone();
            return clone;
        }
    });
    C.SHA1 = wh.jx(SHA1);
    C.HmacSHA1 = wh.zS(SHA1);
}());
function lh() {
    this.i = 0;
    this.j = 0;
    this.S = new Array();
};
function rW(key) {
    var i, j, t;
    for (i = 0; i < 256; ++i) this.S[i] = i;
    j = 0;
    for (i = 0; i < 256; ++i) {
        j = (j + this.S[i] + key[i % key.length]) & 255;
        t = this.S[i];
        this.S[i] = this.S[j];
        this.S[j] = t;
    }
    this.i = 0;
    this.j = 0;
};
function sF() {
    var t;
    this.i = (this.i + 1) & 255;
    this.j = (this.j + this.S[this.i]) & 255;
    t = this.S[this.i];
    this.S[this.i] = this.S[this.j];
    this.S[this.j] = t;
    return this.S[(t + this.S[this.i]) & 255];
};
lh.prototype.aV = rW;
lh.prototype.next = sF;
function rc() {
    return new lh();
};
var kT = 256;
var iB;
var eK;
var cS;
function rng_seed_int(x) {
    eK[cS++] ^= x & 255;
    eK[cS++] ^= (x >> 8) & 255;
    eK[cS++] ^= (x >> 16) & 255;
    eK[cS++] ^= (x >> 24) & 255;
    if (cS >= kT) cS -= kT;
};
function rng_seed_time() {
    rng_seed_int(new Date().getTime());
};
if (eK == null) {
    eK = new Array();
    cS = 0;
    var t;
    if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {
        var z = window.crypto.random(32);
        for (t = 0; t < z.length; ++t) eK[cS++] = z.charCodeAt(t) & 255;
    }
    while (cS < kT) {
        t = Math.floor(65536 * Math.random());
        eK[cS++] = t >>> 8;
        eK[cS++] = t & 255;
    }
    cS = 0;
    rng_seed_time();
}
function pH() {
    if (iB == null) {
        rng_seed_time();
        iB = rc();
        iB.aV(eK);
        for (cS = 0; cS < eK.length; ++cS) eK[cS] = 0;
        cS = 0;
    }
    return iB.next();
};
function pQ(dj) {
    var i;
    for (i = 0; i < dj.length; ++i) dj[i] = pH();
};
function js() { };
js.prototype.lp = pQ;
var _RE_HEXDECONLY = new RegExp("");
_RE_HEXDECONLY.compile("[^0-9a-f]", "gi");
function _rsasign_getHexPaddedDigestInfoForString(s, ah, hashAlg) {
    var hashFunc = function (s) {
        return aF.crypto.Util.hashString(s, hashAlg);
    };
    var sHashHex = hashFunc(s);
    return aF.crypto.Util.getPaddedDigestInfoHex(sHashHex, hashAlg, ah);
};
function _zeroPaddingOfSignature(al, ho) {
    var s = "";
    var nZero = ho / 4 - al.length;
    for (var i = 0; i < nZero; i++) {
        s = s + "0";
    }
    return s + al;
};
function _rsasign_signString(s, hashAlg) {
    var hashFunc = function (s) {
        return aF.crypto.Util.hashString(s, hashAlg);
    };
    var sHashHex = hashFunc(s);
    return this.signWithMessageHash(sHashHex, hashAlg);
};
function _rsasign_signWithMessageHash(sHashHex, hashAlg) {
    var hPM = aF.crypto.Util.getPaddedDigestInfoHex(sHashHex, hashAlg, this.n.ho());
    var biPaddedMessage = bw(hPM, 16);
    var biSign = this.vi(biPaddedMessage);
    var hexSign = biSign.toString(16);
    return _zeroPaddingOfSignature(hexSign, this.n.ho());
};
function _rsasign_signStringWithSHA1(s) {
    return _rsasign_signString.call(this, s, 'sha1');
};
function _rsasign_signStringWithSHA256(s) {
    return _rsasign_signString.call(this, s, 'sha256');
};
function pss_mgf1_str(seed, aG, hash) {
    var mask = '',
        i = 0;
    while (mask.length < aG) {
        mask += hextorstr(hash(rstrtohex(seed + String.fromCharCode.apply(String, [(i & 0xff000000) >> 24, (i & 0x00ff0000) >> 16, (i & 0x0000ff00) >> 8, i & 0x000000ff]))));
        i += 1;
    }
    return mask;
};
function _rsasign_signStringPSS(s, hashAlg, sLen) {
    var hashFunc = function (sHex) {
        return aF.crypto.Util.hashHex(sHex, hashAlg);
    };
    var hHash = hashFunc(rstrtohex(s));
    if (sLen === undefined) sLen = -1;
    return this.signWithMessageHashPSS(hHash, hashAlg, sLen);
};
function _rsasign_signWithMessageHashPSS(hHash, hashAlg, sLen) {
    var mHash = hextorstr(hHash);
    var hLen = mHash.length;
    var emBits = this.n.ho() - 1;
    var emLen = Math.ceil(emBits / 8);
    var i;
    var hashFunc = function (sHex) {
        return aF.crypto.Util.hashHex(sHex, hashAlg);
    };
    if (sLen === -1 || sLen === undefined) {
        sLen = hLen;
    } else if (sLen === -2) {
        sLen = emLen - hLen - 2;
    } else if (sLen < -2) {
        throw "invalid salt length";
    }
    if (emLen < (hLen + sLen + 2)) {
        throw "data too long";
    }
    var dG = '';
    if (sLen > 0) {
        dG = new Array(sLen);
        new js().lp(dG);
        dG = String.fromCharCode.apply(String, dG);
    }
    var H = hextorstr(hashFunc(rstrtohex('\x00\x00\x00\x00\x00\x00\x00\x00' + mHash + dG)));
    var PS = [];
    for (i = 0; i < emLen - sLen - hLen - 2; i += 1) {
        PS[i] = 0x00;
    }
    var bb = String.fromCharCode.apply(String, PS) + '\x01' + dG;
    var dbMask = pss_mgf1_str(H, bb.length, hashFunc);
    var maskedDB = [];
    for (i = 0; i < bb.length; i += 1) {
        maskedDB[i] = bb.charCodeAt(i) ^ dbMask.charCodeAt(i);
    }
    var mask = (0xff00 >> (8 * emLen - emBits)) & 0xff;
    maskedDB[0] &= ~mask;
    for (i = 0; i < hLen; i++) {
        maskedDB.push(H.charCodeAt(i));
    }
    maskedDB.push(0xbc);
    return _zeroPaddingOfSignature(this.vi(new O(maskedDB)).toString(16), this.n.ho());
};
function _rsasign_getDecryptSignatureBI(biSig, fv, hE) {
    var aa = new ae();
    aa.AU(fv, hE);
    var biDecryptedSig = aa.xa(biSig);
    return biDecryptedSig;
};
function _rsasign_getHexDigestInfoFromSig(biSig, fv, hE) {
    var biDecryptedSig = _rsasign_getDecryptSignatureBI(biSig, fv, hE);
    var hDigestInfo = biDecryptedSig.toString(16).replace(/^1f+00/, '');
    return hDigestInfo;
};
function _rsasign_getAlgNameAndHashFromHexDisgestInfo(hDigestInfo) {
    for (var algName in aF.crypto.Util.DIGESTINFOHEAD) {
        var head = aF.crypto.Util.DIGESTINFOHEAD[algName];
        var aG = head.length;
        if (hDigestInfo.substring(0, aG) == head) {
            var a = [algName, hDigestInfo.substring(aG)];
            return a;
        }
    }
    return [];
};
function _rsasign_verifySignatureWithArgs(sMsg, biSig, fv, hE) {
    var hDigestInfo = _rsasign_getHexDigestInfoFromSig(biSig, fv, hE);
    var digestInfoAry = _rsasign_getAlgNameAndHashFromHexDisgestInfo(hDigestInfo);
    if (digestInfoAry.length == 0) return false;
    var algName = digestInfoAry[0];
    var diHashValue = digestInfoAry[1];
    var ff = function (s) {
        return aF.crypto.Util.hashString(s, algName);
    };
    var msgHashValue = ff(sMsg);
    return (diHashValue == msgHashValue);
};
function _rsasign_verifyHexSignatureForMessage(hSig, sMsg) {
    var biSig = bw(hSig, 16);
    var result = _rsasign_verifySignatureWithArgs(sMsg, biSig, this.n.toString(16), this.e.toString(16));
    return result;
};
function _rsasign_verifyString(sMsg, hSig) {
    hSig = hSig.replace(_RE_HEXDECONLY, '');
    hSig = hSig.replace(/[ \n]+/g, "");
    var biSig = bw(hSig, 16);
    if (biSig.ho() > this.n.ho()) return 0;
    var biDecryptedSig = this.xa(biSig);
    var hDigestInfo = biDecryptedSig.toString(16).replace(/^1f+00/, '');
    var digestInfoAry = _rsasign_getAlgNameAndHashFromHexDisgestInfo(hDigestInfo);
    if (digestInfoAry.length == 0) return false;
    var algName = digestInfoAry[0];
    var diHashValue = digestInfoAry[1];
    var ff = function (s) {
        return aF.crypto.Util.hashString(s, algName);
    };
    var msgHashValue = ff(sMsg);
    return (diHashValue == msgHashValue);
};
function _rsasign_verifyWithMessageHash(sHashHex, hSig) {
    hSig = hSig.replace(_RE_HEXDECONLY, '');
    hSig = hSig.replace(/[ \n]+/g, "");
    var biSig = bw(hSig, 16);
    if (biSig.ho() > this.n.ho()) return 0;
    var biDecryptedSig = this.xa(biSig);
    var hDigestInfo = biDecryptedSig.toString(16).replace(/^1f+00/, '');
    var digestInfoAry = _rsasign_getAlgNameAndHashFromHexDisgestInfo(hDigestInfo);
    if (digestInfoAry.length == 0) return false;
    var algName = digestInfoAry[0];
    var diHashValue = digestInfoAry[1];
    return (diHashValue == sHashHex);
};
function _rsasign_verifyStringPSS(sMsg, hSig, hashAlg, sLen) {
    var hashFunc = function (sHex) {
        return aF.crypto.Util.hashHex(sHex, hashAlg);
    };
    var hHash = hashFunc(rstrtohex(sMsg));
    if (sLen === undefined) sLen = -1;
    return this.verifyWithMessageHashPSS(hHash, hSig, hashAlg, sLen);
};
function _rsasign_verifyWithMessageHashPSS(hHash, hSig, hashAlg, sLen) {
    var biSig = new O(hSig, 16);
    if (biSig.ho() > this.n.ho()) {
        return false;
    }
    var hashFunc = function (sHex) {
        return aF.crypto.Util.hashHex(sHex, hashAlg);
    };
    var mHash = hextorstr(hHash);
    var hLen = mHash.length;
    var emBits = this.n.ho() - 1;
    var emLen = Math.ceil(emBits / 8);
    var i;
    if (sLen === -1 || sLen === undefined) {
        sLen = hLen;
    } else if (sLen === -2) {
        sLen = emLen - hLen - 2;
    } else if (sLen < -2) {
        throw "invalid salt length";
    }
    if (emLen < (hLen + sLen + 2)) {
        throw "data too long";
    }
    var em = this.xa(biSig).ti();
    for (i = 0; i < em.length; i += 1) {
        em[i] &= 0xff;
    }
    while (em.length < emLen) {
        em.unshift(0);
    }
    if (em[emLen - 1] !== 0xbc) {
        throw "encoded message does not end in 0xbc";
    }
    em = String.fromCharCode.apply(String, em);
    var maskedDB = em.substr(0, emLen - hLen - 1);
    var H = em.substr(maskedDB.length, hLen);
    var mask = (0xff00 >> (8 * emLen - emBits)) & 0xff;
    if ((maskedDB.charCodeAt(0) & mask) !== 0) {
        throw "bits beyond keysize not zero";
    }
    var dbMask = pss_mgf1_str(H, maskedDB.length, hashFunc);
    var bb = [];
    for (i = 0; i < maskedDB.length; i += 1) {
        bb[i] = maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i);
    }
    bb[0] &= ~mask;
    var checkLen = emLen - hLen - sLen - 2;
    for (i = 0; i < checkLen; i += 1) {
        if (bb[i] !== 0x00) {
            throw "leftmost octets not zero";
        }
    }
    if (bb[checkLen] !== 0x01) {
        throw "0x01 marker not found";
    }
    return H === hextorstr(hashFunc(rstrtohex('\x00\x00\x00\x00\x00\x00\x00\x00' + mHash + String.fromCharCode.apply(String, bb.slice(- sLen)))));
};
ae.prototype.signWithMessageHash = _rsasign_signWithMessageHash;
ae.prototype.signString = _rsasign_signString;
ae.prototype.signStringWithSHA1 = _rsasign_signStringWithSHA1;
ae.prototype.signStringWithSHA256 = _rsasign_signStringWithSHA256;
ae.prototype.sign = _rsasign_signString;
ae.prototype.signWithSHA1 = _rsasign_signStringWithSHA1;
ae.prototype.signWithSHA256 = _rsasign_signStringWithSHA256;
ae.prototype.signWithMessageHashPSS = _rsasign_signWithMessageHashPSS;
ae.prototype.signStringPSS = _rsasign_signStringPSS;
ae.prototype.signPSS = _rsasign_signStringPSS;
ae.SALT_LEN_HLEN = -1;
ae.SALT_LEN_MAX = -2;
ae.prototype.verifyWithMessageHash = _rsasign_verifyWithMessageHash;
ae.prototype.verifyString = _rsasign_verifyString;
ae.prototype.verifyHexSignatureForMessage = _rsasign_verifyHexSignatureForMessage;
ae.prototype.verify = _rsasign_verifyString;
ae.prototype.verifyHexSignatureForByteArrayMessage = _rsasign_verifyHexSignatureForMessage;
ae.prototype.verifyWithMessageHashPSS = _rsasign_verifyWithMessageHashPSS;
ae.prototype.verifyStringPSS = _rsasign_verifyStringPSS;
ae.prototype.verifyPSS = _rsasign_verifyStringPSS;
ae.SALT_LEN_RECOVER = -2;
var ASN1HEX = new
    function () { };
ASN1HEX.getByteLengthOfL_AtObj = function (s, pos) {
    if (s.substring(pos + 2, pos + 3) != '8') return 1;
    var i = parseInt(s.substring(pos + 3, pos + 4));
    if (i == 0) return - 1;
    if (0 < i && i < 10) return i + 1;
    return - 2;
};
ASN1HEX.getHexOfL_AtObj = function (s, pos) {
    var aG = ASN1HEX.getByteLengthOfL_AtObj(s, pos);
    if (aG < 1) return '';
    return s.substring(pos + 2, pos + 2 + aG * 2);
};
ASN1HEX.getIntOfL_AtObj = function (s, pos) {
    var hLength = ASN1HEX.getHexOfL_AtObj(s, pos);
    if (hLength == '') return - 1;
    var kV;
    if (parseInt(hLength.substring(0, 1)) < 8) {
        kV = new O(hLength, 16);
    } else {
        kV = new O(hLength.substring(2), 16);
    }
    return kV.hy();
};
ASN1HEX.getStartPosOfV_AtObj = function (s, pos) {
    var l_len = ASN1HEX.getByteLengthOfL_AtObj(s, pos);
    if (l_len < 0) return l_len;
    return pos + (l_len + 1) * 2;
};
ASN1HEX.getHexOfV_AtObj = function (s, pos) {
    var pos1 = ASN1HEX.getStartPosOfV_AtObj(s, pos);
    var aG = ASN1HEX.getIntOfL_AtObj(s, pos);
    return s.substring(pos1, pos1 + aG * 2);
};
ASN1HEX.getHexOfTLV_AtObj = function (s, pos) {
    var aA = s.substr(pos, 2);
    var nl = ASN1HEX.getHexOfL_AtObj(s, pos);
    var bE = ASN1HEX.getHexOfV_AtObj(s, pos);
    return aA + nl + bE;
};
ASN1HEX.getPosOfNextSibling_AtObj = function (s, pos) {
    var pos1 = ASN1HEX.getStartPosOfV_AtObj(s, pos);
    var aG = ASN1HEX.getIntOfL_AtObj(s, pos);
    return pos1 + aG * 2;
};
ASN1HEX.getPosArrayOfChildren_AtObj = function (h, pos) {
    var a = new Array();
    var p0 = ASN1HEX.getStartPosOfV_AtObj(h, pos);
    if (h.substr(pos, 2) == "03") {
        a.push(p0 + 2);
    } else {
        a.push(p0);
    }
    var aG = ASN1HEX.getIntOfL_AtObj(h, pos);
    var p = p0;
    var k = 0;
    while (1) {
        var pNext = ASN1HEX.getPosOfNextSibling_AtObj(h, p);
        if (pNext == null || (pNext - p0 >= (aG * 2))) break;
        if (k >= 200) break;
        a.push(pNext);
        p = pNext;
        k++;
    }
    return a;
};
ASN1HEX.getNthChildIndex_AtObj = function (h, idx, nth) {
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(h, idx);
    return a[nth];
};
ASN1HEX.getDecendantIndexByNthList = function (h, currentIndex, nthList) {
    if (nthList.length == 0) {
        return currentIndex;
    }
    var firstNth = nthList.shift();
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(h, currentIndex);
    return ASN1HEX.getDecendantIndexByNthList(h, a[firstNth], nthList);
};
ASN1HEX.getDecendantHexTLVByNthList = function (h, currentIndex, nthList) {
    var idx = ASN1HEX.getDecendantIndexByNthList(h, currentIndex, nthList);
    return ASN1HEX.getHexOfTLV_AtObj(h, idx);
};
ASN1HEX.getDecendantHexVByNthList = function (h, currentIndex, nthList) {
    var idx = ASN1HEX.getDecendantIndexByNthList(h, currentIndex, nthList);
    return ASN1HEX.getHexOfV_AtObj(h, idx);
};
ASN1HEX.getVbyList = function (h, currentIndex, nthList, checkingTag) {
    var idx = ASN1HEX.getDecendantIndexByNthList(h, currentIndex, nthList);
    if (idx === undefined) {
        throw "can't find nthList object";
    }
    if (checkingTag !== undefined) {
        if (h.substr(idx, 2) != checkingTag) {
            throw "checking tag doesn't match: " + h.substr(idx, 2) + "!=" + checkingTag;
        }
    }
    return ASN1HEX.getHexOfV_AtObj(h, idx);
};
ASN1HEX.hextooidstr = function (al) {
    var pA = function (s, aG) {
        if (s.length >= aG) return s;
        return new Array(aG - s.length + 1).join('0') + s;
    };
    var a = [];
    var hex0 = al.substr(0, 2);
    var dc = parseInt(hex0, 16);
    a[0] = new String(Math.floor(dc / 40));
    a[1] = new String(dc % 40);
    var hex1 = al.substr(2);
    var b = [];
    for (var i = 0; i < hex1.length / 2; i++) {
        b.push(parseInt(hex1.substr(i * 2, 2), 16));
    }
    var c = [];
    var cbin = "";
    for (var i = 0; i < b.length; i++) {
        if (b[i] & 0x80) {
            cbin = cbin + pA((b[i] & 0x7f).toString(2), 7);
        } else {
            cbin = cbin + pA((b[i] & 0x7f).toString(2), 7);
            c.push(new String(parseInt(cbin, 2)));
            cbin = "";
        }
    }
    var s = a.join(".");
    if (c.length > 0) s = s + "." + c.join(".");
    return s;
};
ASN1HEX.dump = function (hexOrObj, flags, idx, indent) {
    var al = hexOrObj;
    if (hexOrObj instanceof aF.V.cD) al = hexOrObj.fh();
    var _skipLongHex = function (al, limitNumOctet) {
        if (al.length <= limitNumOctet * 2) {
            return al;
        } else {
            var s = al.substr(0, limitNumOctet) + "..(total " + al.length / 2 + "bytes).." + al.substr(al.length - limitNumOctet, limitNumOctet);
            return s;
        };
    };
    if (flags === undefined) flags = {
        "ommit_long_octet": 32
    };
    if (idx === undefined) idx = 0;
    if (indent === undefined) indent = "";
    var skipLongHex = flags.ommit_long_octet;
    if (al.substr(idx, 2) == "01") {
        var v = ASN1HEX.getHexOfV_AtObj(al, idx);
        if (v == "00") {
            return indent + "BOOLEAN FALSE\n";
        } else {
            return indent + "BOOLEAN TRUE\n";
        }
    }
    if (al.substr(idx, 2) == "02") {
        var v = ASN1HEX.getHexOfV_AtObj(al, idx);
        return indent + "INTEGER " + _skipLongHex(v, skipLongHex) + "\n";
    }
    if (al.substr(idx, 2) == "03") {
        var v = ASN1HEX.getHexOfV_AtObj(al, idx);
        return indent + "BITSTRING " + _skipLongHex(v, skipLongHex) + "\n";
    }
    if (al.substr(idx, 2) == "04") {
        var v = ASN1HEX.getHexOfV_AtObj(al, idx);
        if (ASN1HEX.isASN1HEX(v)) {
            var s = indent + "OCTETSTRING, encapsulates\n";
            s = s + ASN1HEX.dump(v, flags, 0, indent + "  ");
            return s;
        } else {
            return indent + "OCTETSTRING " + _skipLongHex(v, skipLongHex) + "\n";
        }
    }
    if (al.substr(idx, 2) == "05") {
        return indent + "NULL\n";
    }
    if (al.substr(idx, 2) == "06") {
        var bE = ASN1HEX.getHexOfV_AtObj(al, idx);
        var oidDot = aF.V.xU.oidHexToInt(bE);
        var iK = aF.V.qx.yJ.oid2name(oidDot);
        var oidSpc = oidDot.replace(/\./g, ' ');
        if (iK != '') {
            return indent + "ObjectIdentifier " + iK + " (" + oidSpc + ")\n";
        } else {
            return indent + "ObjectIdentifier (" + oidSpc + ")\n";
        }
    }
    if (al.substr(idx, 2) == "0c") {
        return indent + "UTF8String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "'\n";
    }
    if (al.substr(idx, 2) == "13") {
        return indent + "PrintableString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "'\n";
    }
    if (al.substr(idx, 2) == "14") {
        return indent + "TeletexString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "'\n";
    }
    if (al.substr(idx, 2) == "16") {
        return indent + "IA5String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "'\n";
    }
    if (al.substr(idx, 2) == "17") {
        return indent + "UTCTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "\n";
    }
    if (al.substr(idx, 2) == "18") {
        return indent + "GeneralizedTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(al, idx)) + "\n";
    }
    if (al.substr(idx, 2) == "30") {
        if (al.substr(idx, 4) == "3000") {
            return indent + "SEQUENCE {}\n";
        }
        var s = indent + "SEQUENCE\n";
        var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
        var flagsTemp = flags;
        if ((aIdx.length == 2 || aIdx.length == 3) && al.substr(aIdx[0], 2) == "06" && al.substr(aIdx[aIdx.length - 1], 2) == "04") {
            var oidHex = ASN1HEX.getHexOfV_AtObj(al, aIdx[0]);
            var oidDot = aF.V.xU.oidHexToInt(oidHex);
            var iK = aF.V.qx.yJ.oid2name(oidDot);
            var flagsClone = JSON.parse(JSON.stringify(flags));
            flagsClone.x509ExtName = iK;
            flagsTemp = flagsClone;
        }
        for (var i = 0; i < aIdx.length; i++) {
            s = s + ASN1HEX.dump(al, flagsTemp, aIdx[i], indent + "  ");
        }
        return s;
    }
    if (al.substr(idx, 2) == "31") {
        var s = indent + "SET\n";
        var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
        for (var i = 0; i < aIdx.length; i++) {
            s = s + ASN1HEX.dump(al, flags, aIdx[i], indent + "  ");
        }
        return s;
    }
    var bv = parseInt(al.substr(idx, 2), 16);
    if ((bv & 128) != 0) {
        var eN = bv & 31;
        if ((bv & 32) != 0) {
            var s = indent + "[" + eN + "]\n";
            var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
            for (var i = 0; i < aIdx.length; i++) {
                s = s + ASN1HEX.dump(al, flags, aIdx[i], indent + "  ");
            }
            return s;
        } else {
            var v = ASN1HEX.getHexOfV_AtObj(al, idx);
            if (v.substr(0, 8) == "68747470") {
                v = hextoutf8(v);
            }
            if (flags.x509ExtName === "subjectAltName" && eN == 2) {
                v = hextoutf8(v);
            }
            var s = indent + "[" + eN + "] " + v + "\n";
            return s;
        }
    }
    return indent + "UNKNOWN(" + al.substr(idx, 2) + ") " + ASN1HEX.getHexOfV_AtObj(al, idx) + "\n";
};
ASN1HEX.isASN1HEX = function (al) {
    if (al.length % 2 == 1) return false;
    var intL = ASN1HEX.getIntOfL_AtObj(al, 0);
    var tV = al.substr(0, 2);
    var lV = ASN1HEX.getHexOfL_AtObj(al, 0);
    var hVLength = al.length - tV.length - lV.length;
    if (hVLength == intL * 2) return true;
    return false;
};
function X509() {
    this.subjectPublicKeyRSA = null;
    this.subjectPublicKeyRSA_hN = null;
    this.subjectPublicKeyRSA_hE = null;
    this.al = null;
    this.getSerialNumberHex = function () {
        return ASN1HEX.getDecendantHexVByNthList(this.al, 0, [0, 1]);
    };
    this.getSignatureAlgorithmField = function () {
        var sigAlgOidHex = ASN1HEX.getDecendantHexVByNthList(this.al, 0, [0, 2, 0]);
        var sigAlgOidInt = aF.V.xU.oidHexToInt(sigAlgOidHex);
        var sigAlgName = aF.V.qx.yJ.oid2name(sigAlgOidInt);
        return sigAlgName;
    };
    this.getIssuerHex = function () {
        return ASN1HEX.getDecendantHexTLVByNthList(this.al, 0, [0, 3]);
    };
    this.getIssuerString = function () {
        return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.al, 0, [0, 3]));
    };
    this.getSubjectHex = function () {
        return ASN1HEX.getDecendantHexTLVByNthList(this.al, 0, [0, 5]);
    };
    this.getSubjectString = function () {
        return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.al, 0, [0, 5]));
    };
    this.getNotBefore = function () {
        var s = ASN1HEX.getDecendantHexVByNthList(this.al, 0, [0, 4, 0]);
        s = s.replace(/(..)/g, "%$1");
        s = decodeURIComponent(s);
        return s;
    };
    this.getNotAfter = function () {
        var s = ASN1HEX.getDecendantHexVByNthList(this.al, 0, [0, 4, 1]);
        s = s.replace(/(..)/g, "%$1");
        s = decodeURIComponent(s);
        return s;
    };
    this.readCertPEM = function (sCertPEM) {
        var hCert = X509.pemToHex(sCertPEM);
        var a = X509.getPublicKeyHexArrayFromCertHex(hCert);
        var aa = new ae();
        aa.AU(a[0], a[1]);
        this.subjectPublicKeyRSA = aa;
        this.subjectPublicKeyRSA_hN = a[0];
        this.subjectPublicKeyRSA_hE = a[1];
        this.al = hCert;
    };
    this.readCertPEMWithoutRSAInit = function (sCertPEM) {
        var hCert = X509.pemToHex(sCertPEM);
        var a = X509.getPublicKeyHexArrayFromCertHex(hCert);
        if (typeof this.subjectPublicKeyRSA.AU === "function") {
            this.subjectPublicKeyRSA.AU(a[0], a[1]);
        }
        this.subjectPublicKeyRSA_hN = a[0];
        this.subjectPublicKeyRSA_hE = a[1];
        this.al = hCert;
    };
    this.getInfo = function () {
        var s = "Basic Fields\n";
        s += "  serial number: " + this.getSerialNumberHex() + "\n";
        s += "  signature algorithm: " + this.getSignatureAlgorithmField() + "\n";
        s += "  issuer: " + this.getIssuerString() + "\n";
        s += "  notBefore: " + this.getNotBefore() + "\n";
        s += "  notAfter: " + this.getNotAfter() + "\n";
        s += "  subject: " + this.getSubjectString() + "\n";
        s += "  subject public key info: " + "\n";
        var pSPKI = X509.getSubjectPublicKeyInfoPosFromCertHex(this.al);
        var hSPKI = ASN1HEX.getHexOfTLV_AtObj(this.al, pSPKI);
        var keyObj = KEYUTIL.an(hSPKI, null, "pkcs8pub");
        if (keyObj instanceof ae) {
            s += "    key algorithm: RSA\n";
            s += "    n=" + keyObj.n.toString(16).substr(0, 16) + "...\n";
            s += "    e=" + keyObj.e.toString(16) + "\n";
        }
        s += "X509v3 Extensions:\n";
        var aExt = X509.getV3ExtInfoListOfCertHex(this.al);
        for (var i = 0; i < aExt.length; i++) {
            var info = aExt[i];
            var extName = aF.V.qx.yJ.oid2name(info["oid"]);
            if (extName === '') extName = info["oid"];
            var critical = '';
            if (info["critical"] === true) critical = "CRITICAL";
            s += "  " + extName + " " + critical + ":\n";
            if (extName === "basicConstraints") {
                var bc = X509.getExtBasicConstraints(this.al);
                if (bc.cA === undefined) {
                    s += "    {}\n";
                } else {
                    s += "    cA=true";
                    if (bc.pathLen !== undefined) s += ", pathLen=" + bc.pathLen;
                    s += "\n";
                }
            } else if (extName === "keyUsage") {
                s += "    " + X509.getExtKeyUsageString(this.al) + "\n";
            } else if (extName === "subjectKeyIdentifier") {
                s += "    " + X509.getExtSubjectKeyIdentifier(this.al) + "\n";
            } else if (extName === "authorityKeyIdentifier") {
                var akid = X509.getExtAuthorityKeyIdentifier(this.al);
                if (akid.kid !== undefined) s += "    kid=" + akid.kid + "\n";
            } else if (extName === "extKeyUsage") {
                var eku = X509.getExtExtKeyUsageName(this.al);
                s += "    " + eku.join(", ") + "\n";
            } else if (extName === "subjectAltName") {
                var san = X509.getExtSubjectAltName(this.al);
                s += "    " + san.join(", ") + "\n";
            } else if (extName === "cRLDistributionPoints") {
                var cdp = X509.getExtCRLDistributionPointsURI(this.al);
                s += "    " + cdp + "\n";
            } else if (extName === "authorityInfoAccess") {
                var aia = X509.getExtAIAInfo(this.al);
                if (aia.ocsp !== undefined) s += "    ocsp: " + aia.ocsp.join(",") + "\n";
                if (aia.caissuer !== undefined) s += "    caissuer: " + aia.caissuer.join(",") + "\n";
            }
        }
        s += "signature algorithm: " + X509.getSignatureAlgorithmName(this.al) + "\n";
        s += "signature: " + X509.getSignatureValueHex(this.al).substr(0, 16) + "...\n";
        return s;
    };
};
X509.pemToBase64 = function (sCertPEM) {
    var s = sCertPEM;
    s = s.replace("-----BEGIN CERTIFICATE-----", "");
    s = s.replace("-----END CERTIFICATE-----", "");
    s = s.replace(/[ \n]+/g, "");
    return s;
};
X509.pemToHex = function (sCertPEM) {
    var b64Cert = X509.pemToBase64(sCertPEM);
    var hCert = kI(b64Cert);
    return hCert;
};
X509.getSubjectPublicKeyPosFromCertHex = function (hCert) {
    var pInfo = X509.getSubjectPublicKeyInfoPosFromCertHex(hCert);
    if (pInfo == -1) return - 1;
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, pInfo);
    if (a.length != 2) return - 1;
    var pBitString = a[1];
    if (hCert.substring(pBitString, pBitString + 2) != '03') return - 1;
    var pBitStringV = ASN1HEX.getStartPosOfV_AtObj(hCert, pBitString);
    if (hCert.substring(pBitStringV, pBitStringV + 2) != '00') return - 1;
    return pBitStringV + 2;
};
X509.getSubjectPublicKeyInfoPosFromCertHex = function (hCert) {
    var pTbsCert = ASN1HEX.getStartPosOfV_AtObj(hCert, 0);
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, pTbsCert);
    if (a.length < 1) return - 1;
    if (hCert.substring(a[0], a[0] + 10) == "a003020102") {
        if (a.length < 6) return - 1;
        return a[6];
    } else {
        if (a.length < 5) return - 1;
        return a[5];
    }
};
X509.getPublicKeyHexArrayFromCertHex = function (hCert) {
    var p = X509.getSubjectPublicKeyPosFromCertHex(hCert);
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, p);
    if (a.length != 2) return [];
    var fv = ASN1HEX.getHexOfV_AtObj(hCert, a[0]);
    var hE = ASN1HEX.getHexOfV_AtObj(hCert, a[1]);
    if (fv != null && hE != null) {
        return [fv, hE];
    } else {
        return [];
    }
};
X509.getHexTbsCertificateFromCert = function (hCert) {
    var pTbsCert = ASN1HEX.getStartPosOfV_AtObj(hCert, 0);
    return pTbsCert;
};
X509.getPublicKeyHexArrayFromCertPEM = function (sCertPEM) {
    var hCert = X509.pemToHex(sCertPEM);
    var a = X509.getPublicKeyHexArrayFromCertHex(hCert);
    return a;
};
X509.hex2dn = function (al, idx) {
    if (idx === undefined) idx = 0;
    if (al.substr(idx, 2) !== "30") throw "malformed DN";
    var a = new Array();
    var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
    for (var i = 0; i < aIdx.length; i++) {
        a.push(X509.hex2rdn(al, aIdx[i]));
    }
    a = a.map(function (s) {
        return s.replace("/", "\\/");
    });
    return "/" + a.join("/");
};
X509.hex2rdn = function (al, idx) {
    if (idx === undefined) idx = 0;
    if (al.substr(idx, 2) !== "31") throw "malformed RDN";
    var a = new Array();
    var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
    for (var i = 0; i < aIdx.length; i++) {
        a.push(X509.hex2attrTypeValue(al, aIdx[i]));
    }
    a = a.map(function (s) {
        return s.replace("+", "\\+");
    });
    return a.join("+");
};
X509.hex2attrTypeValue = function (al, idx) {
    if (idx === undefined) idx = 0;
    if (al.substr(idx, 2) !== "30") throw "malformed attribute type and value";
    var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(al, idx);
    if (aIdx.length !== 2 || al.substr(aIdx[0], 2) !== "06") "malformed attribute type and value";
    var oidHex = ASN1HEX.getHexOfV_AtObj(al, aIdx[0]);
    var oidInt = aF.V.xU.oidHexToInt(oidHex);
    var atype = aF.V.qx.yJ.oid2atype(oidInt);
    var bE = ASN1HEX.getHexOfV_AtObj(al, aIdx[1]);
    var rawV = hextorstr(bE);
    return atype + "=" + rawV;
};
X509.getPublicKeyFromCertPEM = function (sCertPEM) {
    var info = X509.getPublicKeyInfoPropOfCertPEM(sCertPEM);
    if (info.algoid == "2a864886f70d010101") {
        var aRSA = KEYUTIL.parsePublicRawRSAKeyHex(info.keyhex);
        var key = new ae();
        key.AU(aRSA.n, aRSA.e);
        return key;
    } else if (info.algoid == "2a8648ce3d0201") {
        var curveName = aF.crypto.yJ.oidhex2name[info.algparam];
        var key = new aF.crypto.ECDSA({
            'curve': curveName,
            'info': info.keyhex
        });
        key.setPublicKeyHex(info.keyhex);
        return key;
    } else if (info.algoid == "2a8648ce380401") {
        var p = ASN1HEX.getVbyList(info.algparam, 0, [0], "02");
        var q = ASN1HEX.getVbyList(info.algparam, 0, [1], "02");
        var g = ASN1HEX.getVbyList(info.algparam, 0, [2], "02");
        var y = ASN1HEX.getHexOfV_AtObj(info.keyhex, 0);
        y = y.substr(2);
        var key = new aF.crypto.DSA();
        key.AU(new O(p, 16), new O(q, 16), new O(g, 16), new O(y, 16));
        return key;
    } else {
        throw "unsupported key";
    }
};
X509.getPublicKeyInfoPropOfCertPEM = function (sCertPEM) {
    var result = {};
    result.algparam = null;
    var hCert = X509.pemToHex(sCertPEM);
    var a1 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, 0);
    if (a1.length != 3) throw "malformed X.509 certificate PEM (code:001)";
    if (hCert.substr(a1[0], 2) != "30") throw "malformed X.509 certificate PEM (code:002)";
    var a2 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a1[0]);
    var idx_spi = 6;
    if (hCert.substr(a2[0], 2) !== "a0") idx_spi = 5;
    if (a2.length < idx_spi + 1) throw "malformed X.509 certificate PEM (code:003)";
    var a3 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a2[idx_spi]);
    if (a3.length != 2) throw "malformed X.509 certificate PEM (code:004)";
    var a4 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a3[0]);
    if (a4.length != 2) throw "malformed X.509 certificate PEM (code:005)";
    result.algoid = ASN1HEX.getHexOfV_AtObj(hCert, a4[0]);
    if (hCert.substr(a4[1], 2) == "06") {
        result.algparam = ASN1HEX.getHexOfV_AtObj(hCert, a4[1]);
    } else if (hCert.substr(a4[1], 2) == "30") {
        result.algparam = ASN1HEX.getHexOfTLV_AtObj(hCert, a4[1]);
    }
    if (hCert.substr(a3[1], 2) != "03") throw "malformed X.509 certificate PEM (code:006)";
    var unusedBitAndKeyHex = ASN1HEX.getHexOfV_AtObj(hCert, a3[1]);
    result.keyhex = unusedBitAndKeyHex.substr(2);
    return result;
};
X509.getPublicKeyInfoPosOfCertHEX = function (hCert) {
    var a1 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, 0);
    if (a1.length != 3) throw "malformed X.509 certificate PEM (code:001)";
    if (hCert.substr(a1[0], 2) != "30") throw "malformed X.509 certificate PEM (code:002)";
    var a2 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a1[0]);
    if (a2.length < 7) throw "malformed X.509 certificate PEM (code:003)";
    return a2[6];
};
X509.getV3ExtInfoListOfCertHex = function (hCert) {
    var a1 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, 0);
    if (a1.length != 3) throw "malformed X.509 certificate PEM (code:001)";
    if (hCert.substr(a1[0], 2) != "30") throw "malformed X.509 certificate PEM (code:002)";
    var a2 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a1[0]);
    if (a2.length < 8) throw "malformed X.509 certificate PEM (code:003)";
    if (hCert.substr(a2[7], 2) != "a3") throw "malformed X.509 certificate PEM (code:004)";
    var a3 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a2[7]);
    if (a3.length != 1) throw "malformed X.509 certificate PEM (code:005)";
    if (hCert.substr(a3[0], 2) != "30") throw "malformed X.509 certificate PEM (code:006)";
    var a4 = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, a3[0]);
    var numExt = a4.length;
    var aInfo = new Array(numExt);
    for (var i = 0; i < numExt; i++) {
        aInfo[i] = X509.getV3ExtItemInfo_AtObj(hCert, a4[i]);
    }
    return aInfo;
};
X509.getV3ExtItemInfo_AtObj = function (hCert, pos) {
    var info = {};
    info.posTLV = pos;
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, pos);
    if (a.length != 2 && a.length != 3) throw "malformed X.509v3 Ext (code:001)";
    if (hCert.substr(a[0], 2) != "06") throw "malformed X.509v3 Ext (code:002)";
    var valueHex = ASN1HEX.getHexOfV_AtObj(hCert, a[0]);
    info.dI = ASN1HEX.hextooidstr(valueHex);
    info.critical = false;
    if (a.length == 3) info.critical = true;
    var posExtV = a[a.length - 1];
    if (hCert.substr(posExtV, 2) != "04") throw "malformed X.509v3 Ext (code:003)";
    info.posV = ASN1HEX.getStartPosOfV_AtObj(hCert, posExtV);
    return info;
};
X509.getHexOfTLV_V3ExtValue = function (hCert, oidOrName) {
    var pos = X509.getPosOfTLV_V3ExtValue(hCert, oidOrName);
    if (pos == -1) return null;
    return ASN1HEX.getHexOfTLV_AtObj(hCert, pos);
};
X509.getHexOfV_V3ExtValue = function (hCert, oidOrName) {
    var pos = X509.getPosOfTLV_V3ExtValue(hCert, oidOrName);
    if (pos == -1) return null;
    return ASN1HEX.getHexOfV_AtObj(hCert, pos);
};
X509.getPosOfTLV_V3ExtValue = function (hCert, oidOrName) {
    var dI = oidOrName;
    if (!oidOrName.match(/^[0-9.]+$/)) dI = aF.V.qx.yJ.name2oid(oidOrName);
    if (dI == '') return - 1;
    var infoList = X509.getV3ExtInfoListOfCertHex(hCert);
    for (var i = 0; i < infoList.length; i++) {
        var info = infoList[i];
        if (info.dI == dI) return info.posV;
    }
    return - 1;
};
X509.getExtBasicConstraints = function (hCert) {
    var hBC = X509.getHexOfV_V3ExtValue(hCert, "basicConstraints");
    if (hBC === null) return null;
    if (hBC === '') return {};
    if (hBC === '0101ff') return {
        "cA": true
    };
    if (hBC.substr(0, 8) === '0101ff02') {
        var pathLexHex = ASN1HEX.getHexOfV_AtObj(hBC, 6);
        var pathLen = parseInt(pathLexHex, 16);
        return {
            "cA": true,
            "pathLen": pathLen
        };
    }
    throw "unknown error";
};
X509.KEYUSAGE_NAME = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"];
X509.getExtKeyUsageBin = function (hCert) {
    var hKeyUsage = X509.getHexOfV_V3ExtValue(hCert, "keyUsage");
    if (hKeyUsage == '') return '';
    if (hKeyUsage.length % 2 != 0 || hKeyUsage.length <= 2) throw "malformed key usage value";
    var cW = parseInt(hKeyUsage.substr(0, 2));
    var bKeyUsage = parseInt(hKeyUsage.substr(2), 16).toString(2);
    return bKeyUsage.substr(0, bKeyUsage.length - cW);
};
X509.getExtKeyUsageString = function (hCert) {
    var bKeyUsage = X509.getExtKeyUsageBin(hCert);
    var a = new Array();
    for (var i = 0; i < bKeyUsage.length; i++) {
        if (bKeyUsage.substr(i, 1) == "1") a.push(X509.KEYUSAGE_NAME[i]);
    }
    return a.join(",");
};
X509.getExtSubjectKeyIdentifier = function (hCert) {
    var hSKID = X509.getHexOfV_V3ExtValue(hCert, "subjectKeyIdentifier");
    return hSKID;
};
X509.getExtAuthorityKeyIdentifier = function (hCert) {
    var result = {};
    var hAKID = X509.getHexOfTLV_V3ExtValue(hCert, "authorityKeyIdentifier");
    if (hAKID === null) return null;
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(hAKID, 0);
    for (var i = 0; i < a.length; i++) {
        if (hAKID.substr(a[i], 2) === "80") result.kid = ASN1HEX.getHexOfV_AtObj(hAKID, a[i]);
    }
    return result;
};
X509.getExtExtKeyUsageName = function (hCert) {
    var result = new Array();
    var h = X509.getHexOfTLV_V3ExtValue(hCert, "extKeyUsage");
    if (h === null) return null;
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(h, 0);
    for (var i = 0; i < a.length; i++) {
        var al = ASN1HEX.getHexOfV_AtObj(h, a[i]);
        var dI = aF.V.xU.oidHexToInt(al);
        var name = aF.V.qx.yJ.oid2name(dI);
        result.push(name);
    }
    return result;
};
X509.getExtSubjectAltName = function (hCert) {
    var result = new Array();
    var h = X509.getHexOfTLV_V3ExtValue(hCert, "subjectAltName");
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(h, 0);
    for (var i = 0; i < a.length; i++) {
        if (h.substr(a[i], 2) === "82") {
            var fqdn = hextoutf8(ASN1HEX.getHexOfV_AtObj(h, a[i]));
            result.push(fqdn);
        }
    }
    return result;
};
X509.getExtCRLDistributionPointsURI = function (hCert) {
    var result = new Array();
    var h = X509.getHexOfTLV_V3ExtValue(hCert, "cRLDistributionPoints");
    var a = ASN1HEX.getPosArrayOfChildren_AtObj(h, 0);
    for (var i = 0; i < a.length; i++) {
        var hDP = ASN1HEX.getHexOfTLV_AtObj(h, a[i]);
        var a1 = ASN1HEX.getPosArrayOfChildren_AtObj(hDP, 0);
        for (var j = 0; j < a1.length; j++) {
            if (hDP.substr(a1[j], 2) === "a0") {
                var hDPN = ASN1HEX.getHexOfV_AtObj(hDP, a1[j]);
                if (hDPN.substr(0, 2) === "a0") {
                    var hFullName = ASN1HEX.getHexOfV_AtObj(hDPN, 0);
                    if (hFullName.substr(0, 2) === "86") {
                        var hURI = ASN1HEX.getHexOfV_AtObj(hFullName, 0);
                        var uri = hextoutf8(hURI);
                        result.push(uri);
                    }
                }
            }
        }
    }
    return result;
};
X509.getExtAIAInfo = function (hCert) {
    var result = {};
    result.ocsp = [];
    result.caissuer = [];
    var pos1 = X509.getPosOfTLV_V3ExtValue(hCert, "authorityInfoAccess");
    if (pos1 == -1) return null;
    if (hCert.substr(pos1, 2) != "30") throw "malformed AIA Extn Value";
    var posAccDescList = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, pos1);
    for (var i = 0; i < posAccDescList.length; i++) {
        var p = posAccDescList[i];
        var posAccDescChild = ASN1HEX.getPosArrayOfChildren_AtObj(hCert, p);
        if (posAccDescChild.length != 2) throw "malformed AccessDescription of AIA Extn";
        var pOID = posAccDescChild[0];
        var pName = posAccDescChild[1];
        if (ASN1HEX.getHexOfV_AtObj(hCert, pOID) == "2b06010505073001") {
            if (hCert.substr(pName, 2) == "86") {
                result.ocsp.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(hCert, pName)));
            }
        }
        if (ASN1HEX.getHexOfV_AtObj(hCert, pOID) == "2b06010505073002") {
            if (hCert.substr(pName, 2) == "86") {
                result.caissuer.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(hCert, pName)));
            }
        }
    }
    return result;
};
X509.getSignatureAlgorithmName = function (hCert) {
    var sigAlgOidHex = ASN1HEX.getDecendantHexVByNthList(hCert, 0, [1, 0]);
    var sigAlgOidInt = aF.V.xU.oidHexToInt(sigAlgOidHex);
    var sigAlgName = aF.V.qx.yJ.oid2name(sigAlgOidInt);
    return sigAlgName;
};
X509.getSignatureValueHex = function (hCert) {
    var h = ASN1HEX.getDecendantHexVByNthList(hCert, 0, [2]);
    if (h.substr(0, 2) !== "00") throw "can't get signature value";
    return h.substr(2);
};
X509.getSerialNumberHex = function (hCert) {
    return ASN1HEX.getDecendantHexVByNthList(hCert, 0, [0, 1]);
};
if (typeof aF == "undefined" || !aF) aF = {};
if (typeof aF.crypto == "undefined" || !aF.crypto) aF.crypto = {};
aF.crypto.Util = new
    function () {
        this.DIGESTINFOHEAD = {
            'sha1': "3021300906052b0e03021a05000414",
            'sha224': "302d300d06096086480165030402040500041c",
            'sha256': "3031300d060960864801650304020105000420",
            'sha384': "3041300d060960864801650304020205000430",
            'sha512': "3051300d060960864801650304020305000440",
            'md2': "3020300c06082a864886f70d020205000410",
            'md5': "3020300c06082a864886f70d020505000410",
            'ripemd160': "3021300906052b2403020105000414",
        };
        this.DEFAULTPROVIDER = {
            'md5': 'cryptojs',
            'sha1': 'cryptojs',
            'sha224': 'cryptojs',
            'sha256': 'cryptojs',
            'sha384': 'cryptojs',
            'sha512': 'cryptojs',
            'ripemd160': 'cryptojs',
            'hmacmd5': 'cryptojs',
            'hmacsha1': 'cryptojs',
            'hmacsha224': 'cryptojs',
            'hmacsha256': 'cryptojs',
            'hmacsha384': 'cryptojs',
            'hmacsha512': 'cryptojs',
            'hmacripemd160': 'cryptojs',
            'MD5withRSA': 'cryptojs/jsrsa',
            'SHA1withRSA': 'cryptojs/jsrsa',
            'SHA224withRSA': 'cryptojs/jsrsa',
            'SHA256withRSA': 'cryptojs/jsrsa',
            'SHA384withRSA': 'cryptojs/jsrsa',
            'SHA512withRSA': 'cryptojs/jsrsa',
            'RIPEMD160withRSA': 'cryptojs/jsrsa',
            'MD5withECDSA': 'cryptojs/jsrsa',
            'SHA1withECDSA': 'cryptojs/jsrsa',
            'SHA224withECDSA': 'cryptojs/jsrsa',
            'SHA256withECDSA': 'cryptojs/jsrsa',
            'SHA384withECDSA': 'cryptojs/jsrsa',
            'SHA512withECDSA': 'cryptojs/jsrsa',
            'RIPEMD160withECDSA': 'cryptojs/jsrsa',
            'SHA1withDSA': 'cryptojs/jsrsa',
            'SHA224withDSA': 'cryptojs/jsrsa',
            'SHA256withDSA': 'cryptojs/jsrsa',
            'MD5withRSAandMGF1': 'cryptojs/jsrsa',
            'SHA1withRSAandMGF1': 'cryptojs/jsrsa',
            'SHA224withRSAandMGF1': 'cryptojs/jsrsa',
            'SHA256withRSAandMGF1': 'cryptojs/jsrsa',
            'SHA384withRSAandMGF1': 'cryptojs/jsrsa',
            'SHA512withRSAandMGF1': 'cryptojs/jsrsa',
            'RIPEMD160withRSAandMGF1': 'cryptojs/jsrsa',
        };
        this.CRYPTOJSMESSAGEDIGESTNAME = {
            'md5': aX.jg.AF,
            'sha1': aX.jg.SHA1,
            'sha224': aX.jg.SHA224,
            'sha256': aX.jg.SHA256,
            'sha384': aX.jg.SHA384,
            'sha512': aX.jg.SHA512,
            'ripemd160': aX.jg.RIPEMD160
        };
        this.getDigestInfoHex = function (hHash, alg) {
            if (typeof this.DIGESTINFOHEAD[alg] == "undefined") throw "alg not supported in Util.DIGESTINFOHEAD: " + alg;
            return this.DIGESTINFOHEAD[alg] + hHash;
        };
        this.getPaddedDigestInfoHex = function (hHash, alg, ah) {
            var hDigestInfo = this.getDigestInfoHex(hHash, alg);
            var pmStrLen = ah / 4;
            if (hDigestInfo.length + 22 > pmStrLen) throw "key is too short for SigAlg: keylen=" + ah + "," + alg;
            var hHead = "0001";
            var hTail = "00" + hDigestInfo;
            var hMid = "";
            var fLen = pmStrLen - hHead.length - hTail.length;
            for (var i = 0; i < fLen; i += 2) {
                hMid += "ff";
            }
            var hPaddedMessage = hHead + hMid + hTail;
            return hPaddedMessage;
        };
        this.hashString = function (s, alg) {
            var md = new aF.crypto.MessageDigest({
                'alg': alg
            });
            return md.digestString(s);
        };
        this.hashHex = function (sHex, alg) {
            var md = new aF.crypto.MessageDigest({
                'alg': alg
            });
            return md.digestHex(sHex);
        };
        this.sha1 = function (s) {
            var md = new aF.crypto.MessageDigest({
                'alg': 'sha1',
                'prov': 'cryptojs'
            });
            return md.digestString(s);
        };
        this.sha256 = function (s) {
            var md = new aF.crypto.MessageDigest({
                'alg': 'sha256',
                'prov': 'cryptojs'
            });
            return md.digestString(s);
        };
        this.sha256Hex = function (s) {
            var md = new aF.crypto.MessageDigest({
                'alg': 'sha256',
                'prov': 'cryptojs'
            });
            return md.digestHex(s);
        };
        this.sha512 = function (s) {
            var md = new aF.crypto.MessageDigest({
                'alg': 'sha512',
                'prov': 'cryptojs'
            });
            return md.digestString(s);
        };
        this.sha512Hex = function (s) {
            var md = new aF.crypto.MessageDigest({
                'alg': 'sha512',
                'prov': 'cryptojs'
            });
            return md.digestHex(s);
        };
    };
aF.crypto.Util.md5 = function (s) {
    var md = new aF.crypto.MessageDigest({
        'alg': 'md5',
        'prov': 'cryptojs'
    });
    return md.digestString(s);
};
aF.crypto.Util.ripemd160 = function (s) {
    var md = new aF.crypto.MessageDigest({
        'alg': 'ripemd160',
        'prov': 'cryptojs'
    });
    return md.digestString(s);
};
aF.crypto.Util.SECURERANDOMGEN = new js();
aF.crypto.Util.getRandomHexOfNbytes = function (n) {
    var dj = new Array(n);
    aF.crypto.Util.SECURERANDOMGEN.lp(dj);
    return BAtohex(dj);
};
aF.crypto.Util.getRandomBigIntegerOfNbytes = function (n) {
    return new O(aF.crypto.Util.getRandomHexOfNbytes(n), 16);
};
aF.crypto.Util.getRandomHexOfNbits = function (n) {
    var n_remainder = n % 8;
    var n_quotient = (n - n_remainder) / 8;
    var dj = new Array(n_quotient + 1);
    aF.crypto.Util.SECURERANDOMGEN.lp(dj);
    dj[0] = (((255 << n_remainder) & 255) ^ 255) & dj[0];
    return BAtohex(dj);
};
aF.crypto.Util.getRandomBigIntegerOfNbits = function (n) {
    return new O(aF.crypto.Util.getRandomHexOfNbits(n), 16);
};
aF.crypto.Util.getRandomBigIntegerZeroToMax = function (biMax) {
    var bitLenMax = biMax.ho();
    while (1) {
        var biRand = aF.crypto.Util.getRandomBigIntegerOfNbits(bitLenMax);
        if (biMax.az(biRand) != -1) return biRand;
    }
};
aF.crypto.Util.getRandomBigIntegerMinToMax = function (biMin, biMax) {
    var flagCompare = biMin.az(biMax);
    if (flagCompare == 1) throw "biMin is greater than biMax";
    if (flagCompare == 0) return biMin;
    var biDiff = biMax.cK(biMin);
    var biRand = aF.crypto.Util.getRandomBigIntegerZeroToMax(biDiff);
    return biRand.add(biMin);
};
aF.crypto.MessageDigest = function (aC) {
    var md = null;
    var algName = null;
    var provName = null;
    this.setAlgAndProvider = function (alg, prov) {
        alg = aF.crypto.MessageDigest.getCanonicalAlgName(alg);
        if (alg !== null && prov === undefined) prov = aF.crypto.Util.DEFAULTPROVIDER[alg];
        if (':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:'.indexOf(alg) != -1 && prov == 'cryptojs') {
            try {
                this.md = aF.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[alg].create();
            } catch (ex) {
                throw "setAlgAndProvider hash alg set fail alg=" + alg + "/" + ex;
            }
            this.updateString = function (bS) {
                this.md.update(bS);
            };
            this.updateHex = function (al) {
                var wHex = aX.bJ.cJ.parse(al);
                this.md.update(wHex);
            };
            this.digest = function () {
                var hash = this.md.fU();
                return hash.toString(aX.bJ.cJ);
            };
            this.digestString = function (bS) {
                this.updateString(bS);
                return this.digest();
            };
            this.digestHex = function (al) {
                this.updateHex(al);
                return this.digest();
            };
        }
        if (':sha256:'.indexOf(alg) != -1 && prov == 'sjcl') {
            try {
                this.md = new sjcl.hash.sha256();
            } catch (ex) {
                throw "setAlgAndProvider hash alg set fail alg=" + alg + "/" + ex;
            }
            this.updateString = function (bS) {
                this.md.update(bS);
            };
            this.updateHex = function (al) {
                var baHex = sjcl.codec.al.toBits(al);
                this.md.update(baHex);
            };
            this.digest = function () {
                var hash = this.md.fU();
                return sjcl.codec.al.fromBits(hash);
            };
            this.digestString = function (bS) {
                this.updateString(bS);
                return this.digest();
            };
            this.digestHex = function (al) {
                this.updateHex(al);
                return this.digest();
            };
        }
    };
    this.updateString = function (bS) {
        throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName;
    };
    this.updateHex = function (al) {
        throw "updateHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName;
    };
    this.digest = function () {
        throw "digest() not supported for this alg/prov: " + this.algName + "/" + this.provName;
    };
    this.digestString = function (bS) {
        throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName;
    };
    this.digestHex = function (al) {
        throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName;
    };
    if (aC !== undefined) {
        if (aC['alg'] !== undefined) {
            this.algName = aC['alg'];
            if (aC['prov'] === undefined) this.provName = aF.crypto.Util.DEFAULTPROVIDER[this.algName];
            this.setAlgAndProvider(this.algName, this.provName);
        }
    }
};
aF.crypto.MessageDigest.getCanonicalAlgName = function (alg) {
    if (typeof alg === "string") {
        alg = alg.toLowerCase();
        alg = alg.replace(/-/, '');
    }
    return alg;
};
aF.crypto.MessageDigest.getHashLength = function (alg) {
    var MD = aF.crypto.MessageDigest;
    var alg2 = MD.getCanonicalAlgName(alg);
    if (MD.HASHLENGTH[alg2] === undefined) throw "not supported algorithm: " + alg;
    return MD.HASHLENGTH[alg2];
};
aF.crypto.MessageDigest.HASHLENGTH = {
    'md5': 16,
    'sha1': 20,
    'sha224': 28,
    'sha256': 32,
    'sha384': 48,
    'sha512': 64,
    'ripemd160': 20
};
aF.crypto.Mac = function (aC) {
    var mac = null;
    var pass = null;
    var algName = null;
    var provName = null;
    var algProv = null;
    this.setAlgAndProvider = function (alg, prov) {
        alg = alg.toLowerCase();
        if (alg == null) alg = "hmacsha1";
        alg = alg.toLowerCase();
        if (alg.substr(0, 4) != "hmac") {
            throw "setAlgAndProvider unsupported HMAC alg: " + alg;
        }
        if (prov === undefined) prov = aF.crypto.Util.DEFAULTPROVIDER[alg];
        this.algProv = alg + "/" + prov;
        var hashAlg = alg.substr(4);
        if (':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:'.indexOf(hashAlg) != -1 && prov == 'cryptojs') {
            try {
                var mdObj = aF.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[hashAlg];
                this.mac = aX.jg.AP.create(mdObj, this.pass);
            } catch (ex) {
                throw "setAlgAndProvider hash alg set fail hashAlg=" + hashAlg + "/" + ex;
            }
            this.updateString = function (bS) {
                this.mac.update(bS);
            };
            this.updateHex = function (al) {
                var wHex = aX.bJ.cJ.parse(al);
                this.mac.update(wHex);
            };
            this.doFinal = function () {
                var hash = this.mac.fU();
                return hash.toString(aX.bJ.cJ);
            };
            this.doFinalString = function (bS) {
                this.updateString(bS);
                return this.doFinal();
            };
            this.doFinalHex = function (al) {
                this.updateHex(al);
                return this.doFinal();
            };
        }
    };
    this.updateString = function (bS) {
        throw "updateString(str) not supported for this alg/prov: " + this.algProv;
    };
    this.updateHex = function (al) {
        throw "updateHex(hex) not supported for this alg/prov: " + this.algProv;
    };
    this.doFinal = function () {
        throw "digest() not supported for this alg/prov: " + this.algProv;
    };
    this.doFinalString = function (bS) {
        throw "digestString(str) not supported for this alg/prov: " + this.algProv;
    };
    this.doFinalHex = function (al) {
        throw "digestHex(hex) not supported for this alg/prov: " + this.algProv;
    };
    this.setPassword = function (pass) {
        if (typeof pass == 'string') {
            var hPass = pass;
            if (pass.length % 2 == 1 || !pass.match(/^[0-9A-Fa-f]+$/)) {
                hPass = rstrtohex(pass);
            }
            this.pass = aX.bJ.cJ.parse(hPass);
            return;
        }
        if (typeof pass != 'object') throw "KJUR.crypto.Mac unsupported password type: " + pass;
        var hPass = null;
        if (pass.al !== undefined) {
            if (pass.al.length % 2 != 0 || !pass.al.match(/^[0-9A-Fa-f]+$/)) throw "Mac: wrong hex password: " + pass.al;
            hPass = pass.al;
        }
        if (pass.utf8 !== undefined) hPass = utf8tohex(pass.utf8);
        if (pass.rstr !== undefined) hPass = rstrtohex(pass.rstr);
        if (pass.xt !== undefined) hPass = kI(pass.xt);
        if (pass.b64u !== undefined) hPass = b64utohex(pass.b64u);
        if (hPass == null) throw "KJUR.crypto.Mac unsupported password type: " + pass;
        this.pass = aX.bJ.cJ.parse(hPass);
    };
    if (aC !== undefined) {
        if (aC.pass !== undefined) {
            this.setPassword(aC.pass);
        }
        if (aC.alg !== undefined) {
            this.algName = aC.alg;
            if (aC['prov'] === undefined) this.provName = aF.crypto.Util.DEFAULTPROVIDER[this.algName];
            this.setAlgAndProvider(this.algName, this.provName);
        }
    }
};
aF.crypto.Signature = function (aC) {
    var prvKey = null;
    var pubKey = null;
    var md = null;
    var sig = null;
    var algName = null;
    var provName = null;
    var algProvName = null;
    var mdAlgName = null;
    var pubkeyAlgName = null;
    var state = null;
    var pssSaltLen = -1;
    var initParams = null;
    var sHashHex = null;
    var hDigestInfo = null;
    var hPaddedDigestInfo = null;
    var hSign = null;
    this._setAlgNames = function () {
        var matchResult = this.algName.match(/^(.+)with(.+)$/);
        if (matchResult) {
            this.mdAlgName = matchResult[1].toLowerCase();
            this.pubkeyAlgName = matchResult[2].toLowerCase();
        }
    };
    this._zeroPaddingOfSignature = function (al, ho) {
        var s = "";
        var nZero = ho / 4 - al.length;
        for (var i = 0; i < nZero; i++) {
            s = s + "0";
        }
        return s + al;
    };
    this.setAlgAndProvider = function (alg, prov) {
        this._setAlgNames();
        if (prov != 'cryptojs/jsrsa') throw "provider not supported: " + prov;
        if (':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:'.indexOf(this.mdAlgName) != -1) {
            try {
                this.md = new aF.crypto.MessageDigest({
                    'alg': this.mdAlgName
                });
            } catch (ex) {
                throw "setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + ex;
            }
            this.aV = function (keyparam, pass) {
                var keyObj = null;
                try {
                    if (pass === undefined) {
                        keyObj = KEYUTIL.an(keyparam);
                    } else {
                        keyObj = KEYUTIL.an(keyparam, pass);
                    }
                } catch (ex) {
                    throw "init failed:" + ex;
                }
                if (keyObj.isPrivate === true) {
                    this.prvKey = keyObj;
                    this.state = "SIGN";
                } else if (keyObj.isPublic === true) {
                    this.pubKey = keyObj;
                    this.state = "VERIFY";
                } else {
                    throw "init failed.:" + keyObj;
                }
            };
            this.initSign = function (aC) {
                if (typeof aC['ecprvhex'] == 'string' && typeof aC['eccurvename'] == 'string') {
                    this.ecprvhex = aC['ecprvhex'];
                    this.eccurvename = aC['eccurvename'];
                } else {
                    this.prvKey = aC;
                }
                this.state = "SIGN";
            };
            this.initVerifyByPublicKey = function (aC) {
                if (typeof aC['ecpubhex'] == 'string' && typeof aC['eccurvename'] == 'string') {
                    this.ecpubhex = aC['ecpubhex'];
                    this.eccurvename = aC['eccurvename'];
                } else if (aC instanceof aF.crypto.ECDSA) {
                    this.pubKey = aC;
                } else if (aC instanceof ae) {
                    this.pubKey = aC;
                }
                this.state = "VERIFY";
            };
            this.initVerifyByCertificatePEM = function (certPEM) {
                var qx = new X509();
                qx.readCertPEM(certPEM);
                this.pubKey = qx.subjectPublicKeyRSA;
                this.state = "VERIFY";
            };
            this.updateString = function (bS) {
                this.md.updateString(bS);
            };
            this.updateHex = function (al) {
                this.md.updateHex(al);
            };
            this.sign = function () {
                this.sHashHex = this.md.digest();
                if (typeof this.ecprvhex != "undefined" && typeof this.eccurvename != "undefined") {
                    var ec = new aF.crypto.ECDSA({
                        'curve': this.eccurvename
                    });
                    this.hSign = ec.signHex(this.sHashHex, this.ecprvhex);
                } else if (this.prvKey instanceof ae && this.pubkeyAlgName == "rsaandmgf1") {
                    this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen);
                } else if (this.prvKey instanceof ae && this.pubkeyAlgName == "rsa") {
                    this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName);
                } else if (this.prvKey instanceof aF.crypto.ECDSA) {
                    this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);
                } else if (this.prvKey instanceof aF.crypto.DSA) {
                    this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);
                } else {
                    throw "Signature: unsupported public key alg: " + this.pubkeyAlgName;
                }
                return this.hSign;
            };
            this.signString = function (bS) {
                this.updateString(bS);
                return this.sign();
            };
            this.signHex = function (al) {
                this.updateHex(al);
                return this.sign();
            };
            this.verify = function (hSigVal) {
                this.sHashHex = this.md.digest();
                if (typeof this.ecpubhex != "undefined" && typeof this.eccurvename != "undefined") {
                    var ec = new aF.crypto.ECDSA({
                        curve: this.eccurvename
                    });
                    return ec.verifyHex(this.sHashHex, hSigVal, this.ecpubhex);
                } else if (this.pubKey instanceof ae && this.pubkeyAlgName == "rsaandmgf1") {
                    return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, hSigVal, this.mdAlgName, this.pssSaltLen);
                } else if (this.pubKey instanceof ae && this.pubkeyAlgName == "rsa") {
                    return this.pubKey.verifyWithMessageHash(this.sHashHex, hSigVal);
                } else if (this.pubKey instanceof aF.crypto.ECDSA) {
                    return this.pubKey.verifyWithMessageHash(this.sHashHex, hSigVal);
                } else if (this.pubKey instanceof aF.crypto.DSA) {
                    return this.pubKey.verifyWithMessageHash(this.sHashHex, hSigVal);
                } else {
                    throw "Signature: unsupported public key alg: " + this.pubkeyAlgName;
                }
            };
        }
    };
    this.aV = function (key, pass) {
        throw "init(key, pass) not supported for this alg:prov=" + this.algProvName;
    };
    this.initVerifyByPublicKey = function (rsaPubKey) {
        throw "initVerifyByPublicKey(rsaPubKeyy) not supported for this alg:prov=" + this.algProvName;
    };
    this.initVerifyByCertificatePEM = function (certPEM) {
        throw "initVerifyByCertificatePEM(certPEM) not supported for this alg:prov=" + this.algProvName;
    };
    this.initSign = function (prvKey) {
        throw "initSign(prvKey) not supported for this alg:prov=" + this.algProvName;
    };
    this.updateString = function (bS) {
        throw "updateString(str) not supported for this alg:prov=" + this.algProvName;
    };
    this.updateHex = function (al) {
        throw "updateHex(hex) not supported for this alg:prov=" + this.algProvName;
    };
    this.sign = function () {
        throw "sign() not supported for this alg:prov=" + this.algProvName;
    };
    this.signString = function (bS) {
        throw "digestString(str) not supported for this alg:prov=" + this.algProvName;
    };
    this.signHex = function (al) {
        throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName;
    };
    this.verify = function (hSigVal) {
        throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName;
    };
    this.initParams = aC;
    if (aC !== undefined) {
        if (aC['alg'] !== undefined) {
            this.algName = aC['alg'];
            if (aC['prov'] === undefined) {
                this.provName = aF.crypto.Util.DEFAULTPROVIDER[this.algName];
            } else {
                this.provName = aC['prov'];
            }
            this.algProvName = this.algName + ":" + this.provName;
            this.setAlgAndProvider(this.algName, this.provName);
            this._setAlgNames();
        }
        if (aC['psssaltlen'] !== undefined) this.pssSaltLen = aC['psssaltlen'];
        if (aC['prvkeypem'] !== undefined) {
            if (aC['prvkeypas'] !== undefined) {
                throw "both prvkeypem and prvkeypas parameters not supported";
            } else {
                try {
                    var prvKey = new ae();
                    prvKey.readPrivateKeyFromPEMString(aC['prvkeypem']);
                    this.initSign(prvKey);
                } catch (ex) {
                    throw "fatal error to load pem private key: " + ex;
                }
            }
        }
    }
};
aF.crypto.eU = function (aC) { };
aF.crypto.eU.bZ = function (s, keyObj, algName) {
    if (keyObj instanceof ae && keyObj.isPublic) {
        var algName2 = aF.crypto.eU.getAlgByKeyAndName(keyObj, algName);
        if (algName2 === "RSA") return keyObj.bZ(s);
        if (algName2 === "RSAOAEP") return keyObj.encryptOAEP(s, "sha1");
        var a = algName2.match(/^RSAOAEP(\d+)$/);
        if (a !== null) return keyObj.encryptOAEP(s, "sha" + a[1]);
        throw "Cipher.encrypt: unsupported algorithm for RSAKey: " + algName;
    } else {
        throw "Cipher.encrypt: unsupported key or algorithm";
    }
};
aF.crypto.eU.eV = function (al, keyObj, algName) {
    if (keyObj instanceof ae && keyObj.isPrivate) {
        var algName2 = aF.crypto.eU.getAlgByKeyAndName(keyObj, algName);
        if (algName2 === "RSA") return keyObj.eV(al);
        if (algName2 === "RSAOAEP") return keyObj.decryptOAEP(al, "sha1");
        var a = algName2.match(/^RSAOAEP(\d+)$/);
        if (a !== null) return keyObj.decryptOAEP(al, "sha" + a[1]);
        throw "Cipher.decrypt: unsupported algorithm for RSAKey: " + algName;
    } else {
        throw "Cipher.decrypt: unsupported key or algorithm";
    }
};
aF.crypto.eU.getAlgByKeyAndName = function (keyObj, algName) {
    if (keyObj instanceof ae) {
        if (":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:".indexOf(algName) != -1) return algName;
        if (algName === null || algName === undefined) return "RSA";
        throw "getAlgByKeyAndName: not supported algorithm name for RSAKey: " + algName;
    }
    throw "getAlgByKeyAndName: not supported algorithm name: " + algName;
};
aF.crypto.yJ = new
    function () {
        this.oidhex2name = {
            '2a864886f70d010101': 'rsaEncryption',
            '2a8648ce3d0201': 'ecPublicKey',
            '2a8648ce380401': 'dsa',
            '2a8648ce3d030107': 'secp256r1',
            '2b8104001f': 'secp192k1',
            '2b81040021': 'secp224r1',
            '2b8104000a': 'secp256k1',
            '2b81040023': 'secp521r1',
            '2b81040022': 'secp384r1',
            '2a8648ce380403': 'SHA1withDSA',
            '608648016503040301': 'SHA224withDSA',
            '608648016503040302': 'SHA256withDSA',
        };
    };
keyBoard.prototype.apiversion = "1.0.1";