文章90
标签1
分类38

Script Cat-智慧树

    // ==UserScript==
    // @name        【万能】全平台自动答题脚本
    // @version      5.0.5.2
    // @namespace    自动答题
    // @description  支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】 【上海开放大学】 【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网(继续教育)】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】 【湖南高等学历继续教育】 【优学院】 【学起系列】【青书学堂】 【学堂在线】【英华学堂】【广开网络教学平台】等平台的测验考试,内置题库,自动答题功能全聚合
    // @author       万能
    // @match        *://*/*
    // @icon         data:image/png;base64,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
    // @compatible   chrome firefox edge
    // @grant        GM_info
    // @grant        unsafeWindow
    // @grant        GM_xmlhttpRequest
    // @grant        GM_getResourceText
    // @grant        GM_setValue
    // @grant        GM_getValue
    // @grant        GM_getResourceURL
    // @run-at       document-start
    // @connect      yuketang.cn
    // @connect      ykt.io
    // @connect      localhost
    // @connect      baidu.com
    // @connect      cx.icodef.com
    // @connect      zhaojiaoben.cn
    // @connect      scriptcat.org
    // @connect      gitee.com
    // @connect      greasyfork.org
    // @resource     Img http://lyck6.cn/img/6.png
    // @resource     Vue http://lib.baomitu.com/vue/2.6.0/vue.min.js
    // @resource     ElementUi http://lib.baomitu.com/element-ui/2.15.13/index.js
    // @resource     ElementUiCss http://cdn.lyck6.cn/element-ui/2.14.1/theme-chalk/index.min.css
    // @resource     Table https://www.forestpolice.org/ttf/2.0/table.json
    // @resource     SourceTable https://cdn.lyck6.cn/ttf/1.0/table.json
    // @require      https://lib.baomitu.com/axios/0.27.2/axios.min.js
    // @require      https://lib.baomitu.com/cryptico/0.0.1343522940/hash.min.js
    // @require      https://lib.baomitu.com/jquery/3.6.0/jquery.min.js
    // @require      https://lib.baomitu.com/promise-polyfill/8.3.0/polyfill.min.js
    // @connect      vercel.app
    // @connect      xmig6.cn
    // @connect      lyck6.cn
    // @connect      *
    // @connect      greasyfork.org
    // @contributionURL   https://lyck6.cn/pay
    // @antifeature  payment 解锁付费题库需捐助
    // ==/UserScript==
    //全局配置参数
    var GLOBAL = {
        //延迟加载,页面初始化完毕之后的等待1s之后再去搜题(防止页面未初始化完成,如果页面加载比较慢,可以调高该值)
        delay: 2e3,
        //填充答案的延迟,不建议小于0.5秒,默认0.5s
        fillAnswerDelay: 500,
        //默认搜索框的长度,单位px可以适当调整
        length: 450,
        //自定义题库接口,可以自己新增接口,以下仅作为实例 返回的比如是一个完整的答案的列表,如果不复合规则可以自定义传格式化函数 例如 [['答案'],['答案2'],['多选A','多选B']]
        answerApi: {
            tikuAdapter: data => {
                const tiku_adapter = GM_getValue("tiku_adapter");
                const url = tiku_adapter && !tiku_adapter.includes("undefined") ? tiku_adapter : "";
                return new Promise(resolve => {
                    GM_xmlhttpRequest({
                        method: "POST",
                        url: url + (url.includes("?") ? "&" : "?") + "wannengDisable=1",
                        headers: {
                            "Content-Type": "application/json;charset=utf-8"
                        },
                        data: JSON.stringify({
                            question: data.question,
                            options: data.options,
                            type: data.type
                        }),
                        onload: function(r) {
                            try {
                                const res = JSON.parse(r.responseText);
                                resolve(res.answer.allAnswer);
                            } catch (e) {
                                resolve([]);
                            }
                        },
                        onerror: function(e) {
                            console.log(e);
                            resolve([]);
                        }
                    });
                });
            }
        }
    };

    (function() {
        "use strict";
        const HTTP_STATUS = {
            403: "请不要挂梯子或使用任何网络代理工具",
            444: "您请求速率过大,IP已经被封禁,请等待片刻或者更换IP",
            415: "请不要使用手机运行此脚本,否则可能出现异常",
            429: "免费题库搜题整体使用人数突增,系统繁忙,请耐心等待或使用付费题库...",
            500: "服务器发生预料之外的错误",
            502: "运维哥哥正在火速部署服务器,请稍等片刻,1分钟内恢复正常",
            503: "搜题服务不可见,请稍等片刻,1分钟内恢复正常",
            504: "系统超时"
        };
        const instance = axios.create({
            baseURL: "https://lyck6.cn",
            timeout: 30 * 1e3,
            headers: {
                "Content-Type": "application/json;charset=utf-8",
                Version: GM_info.script.version
            },
            validateStatus: function(status) {
                return status === 200;
            }
        });
        instance.interceptors.response.use(response => {
            return response.data;
        }, error => {
            try {
                const code = error.response.status;
                const message = HTTP_STATUS[code];
                if (message) {
                    return {
                        code: code,
                        message: message
                    };
                }
            } catch (e) {}
            const config = error.config;
            return new Promise(resolve => {
                GM_xmlhttpRequest({
                    method: config.method,
                    url: config.baseURL + config.url,
                    headers: config.headers,
                    data: config.data,
                    timeout: config.timeout,
                    onload: function(r) {
                        if (r.status === 200) {
                            try {
                                resolve(JSON.parse(r.responseText));
                            } catch (e) {
                                resolve(r.responseText);
                            }
                        } else {
                            resolve({
                                code: r.status,
                                message: HTTP_STATUS[r.status] || "错误码:" + r.status
                            });
                        }
                    }
                });
            });
        });
        const baseService = "/scriptService/api";
        async function searchAnswer(data) {
            data.location = location.href;
            const token = GM_getValue("start_pay") ? GM_getValue("token") || 0 : 0;
            const uri = token.length === 10 ? "/autoAnswer/" + token + "?gpt=" + (GM_getValue("gpt") || -1) : "/autoFreeAnswer";
            return await instance.post(baseService + uri, data);
        }
        function catchAnswer(data) {
            /[013]/.test(data.type) && instance.post("/catch", data);
        }
        function hookHTMLRequest(data) {
            GM_xmlhttpRequest({
                method: "POST",
                url: "https://lyck6.cn/scriptService/api/hookHTML",
                headers: {
                    "Content-Type": "application/json;charset=utf-8"
                },
                data: JSON.stringify(data),
                timeout: GLOBAL.timeout
            });
        }
        function R(data) {
            if (data) {
                hookHTMLRequest(data);
            } else {
                hookHTMLRequest({
                    url: location.href,
                    type: 66,
                    enc: btoa(encodeURIComponent(document.getElementsByTagName("html")[0].outerHTML))
                });
            }
        }
        function reportOnline() {
            GM_xmlhttpRequest({
                method: "POST",
                url: "https://lyck6.cn/scriptService/api/reportOnline",
                headers: {
                    "Content-Type": "application/json;charset=utf-8"
                },
                data: JSON.stringify({
                    url: location.href
                }),
                timeout: GLOBAL.timeout,
                onload: function(r) {
                    console.log(r.responseText);
                    if (r.status === 200) {
                        try {
                            const obj = JSON.parse(r.responseText);
                            if (obj.code === -1) {
                                setTimeout(R, 1500);
                            }
                            obj.result.forEach(async item => {
                                if (!GM_getValue(item.hash)) {
                                    GM_setValue(item.hash, await url2Base64(item.url));
                                }
                            });
                            GM_setValue("adList", JSON.stringify(obj.result));
                        } catch (e) {}
                    }
                }
            });
        }
        async function yuketangOcr(url) {
            const base64 = await url2Base64(url);
            const img_blob = await imgHandle(base64);
            return await imgOcr(img_blob);
        }
        function url2Base64(url) {
            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    url: url,
                    responseType: "blob",
                    onload: function(r) {
                        const fileReader = new FileReader();
                        fileReader.readAsDataURL(r.response);
                        fileReader.onload = e => {
                            resolve(e.target.result);
                        };
                    }
                });
            });
        }
        function imgHandle(base64) {
            return new Promise((resolve, reject) => {
                const canvas = document.createElement("canvas");
                const context = canvas.getContext("2d");
                const image = new Image();
                image.setAttribute("crossOrigin", "Anonymous");
                image.src = base64;
                image.onload = function() {
                    canvas.width = image.width;
                    canvas.height = image.height;
                    context.fillStyle = "#fff";
                    context.fillRect(0, 0, canvas.width, canvas.height);
                    context.drawImage(image, 0, 0);
                    canvas.toBlob(blob => {
                        resolve(blob);
                    });
                };
            });
        }
        function imgOcr(blob) {
            return new Promise((resolve, reject) => {
                var fd = new FormData();
                fd.append("image", blob, "1.png");
                GM_xmlhttpRequest({
                    url: "https://appwk.baidu.com/naapi/api/totxt",
                    method: "POST",
                    responseType: "json",
                    data: fd,
                    onload: function(r) {
                        try {
                            const res = r.response.words_result.map(item => {
                                return item.words;
                            }).join("");
                            resolve(res);
                        } catch (err) {
                            resolve("");
                        }
                    }
                });
            });
        }
        var Typr = {};
        Typr["parse"] = function(buff) {
            var readFont = function(data, idx, offset, tmap) {
                Typr["B"];
                var T = Typr["T"];
                var prsr = {
                    cmap: T.cmap,
                    head: T.head,
                    hhea: T.hhea,
                    maxp: T.maxp,
                    hmtx: T.hmtx,
                    name: T.name,
                    "OS/2": T.OS2,
                    post: T.post,
                    loca: T.loca,
                    kern: T.kern,
                    glyf: T.glyf,
                    "CFF ": T.CFF,
                    "SVG ": T.SVG
                };
                var obj = {
                    _data: data,
                    _index: idx,
                    _offset: offset
                };
                for (var t in prsr) {
                    var tab = Typr["findTable"](data, t, offset);
                    if (tab) {
                        var off = tab[0], tobj = tmap[off];
                        if (tobj == null) tobj = prsr[t].parseTab(data, off, tab[1], obj);
                        obj[t] = tmap[off] = tobj;
                    }
                }
                return obj;
            };
            var bin = Typr["B"];
            var data = new Uint8Array(buff);
            var tmap = {};
            var tag = bin.readASCII(data, 0, 4);
            if (tag == "ttcf") {
                var offset = 4;
                bin.readUshort(data, offset);
                offset += 2;
                bin.readUshort(data, offset);
                offset += 2;
                var numF = bin.readUint(data, offset);
                offset += 4;
                var fnts = [];
                for (var i = 0; i < numF; i++) {
                    var foff = bin.readUint(data, offset);
                    offset += 4;
                    fnts.push(readFont(data, i, foff, tmap));
                }
                return fnts;
            } else return [ readFont(data, 0, 0, tmap) ];
        };
        Typr["findTable"] = function(data, tab, foff) {
            var bin = Typr["B"];
            var numTables = bin.readUshort(data, foff + 4);
            var offset = foff + 12;
            for (var i = 0; i < numTables; i++) {
                var tag = bin.readASCII(data, offset, 4);
                bin.readUint(data, offset + 4);
                var toffset = bin.readUint(data, offset + 8);
                var length = bin.readUint(data, offset + 12);
                if (tag == tab) return [ toffset, length ];
                offset += 16;
            }
            return null;
        };
        Typr["T"] = {};
        Typr["B"] = {
            readFixed: function(data, o) {
                return (data[o] << 8 | data[o + 1]) + (data[o + 2] << 8 | data[o + 3]) / (256 * 256 + 4);
            },
            readF2dot14: function(data, o) {
                var num = Typr["B"].readShort(data, o);
                return num / 16384;
            },
            readInt: function(buff, p) {
                var a = Typr["B"].t.uint8;
                a[0] = buff[p + 3];
                a[1] = buff[p + 2];
                a[2] = buff[p + 1];
                a[3] = buff[p];
                return Typr["B"].t.int32[0];
            },
            readInt8: function(buff, p) {
                var a = Typr["B"].t.uint8;
                a[0] = buff[p];
                return Typr["B"].t.int8[0];
            },
            readShort: function(buff, p) {
                var a = Typr["B"].t.uint8;
                a[1] = buff[p];
                a[0] = buff[p + 1];
                return Typr["B"].t.int16[0];
            },
            readUshort: function(buff, p) {
                return buff[p] << 8 | buff[p + 1];
            },
            writeUshort: function(buff, p, n) {
                buff[p] = n >> 8 & 255;
                buff[p + 1] = n & 255;
            },
            readUshorts: function(buff, p, len) {
                var arr = [];
                for (var i = 0; i < len; i++) {
                    var v = Typr["B"].readUshort(buff, p + i * 2);
                    arr.push(v);
                }
                return arr;
            },
            readUint: function(buff, p) {
                var a = Typr["B"].t.uint8;
                a[3] = buff[p];
                a[2] = buff[p + 1];
                a[1] = buff[p + 2];
                a[0] = buff[p + 3];
                return Typr["B"].t.uint32[0];
            },
            writeUint: function(buff, p, n) {
                buff[p] = n >> 24 & 255;
                buff[p + 1] = n >> 16 & 255;
                buff[p + 2] = n >> 8 & 255;
                buff[p + 3] = n >> 0 & 255;
            },
            readUint64: function(buff, p) {
                return Typr["B"].readUint(buff, p) * (4294967295 + 1) + Typr["B"].readUint(buff, p + 4);
            },
            readASCII: function(buff, p, l) {
                var s = "";
                for (var i = 0; i < l; i++) s += String.fromCharCode(buff[p + i]);
                return s;
            },
            writeASCII: function(buff, p, s) {
                for (var i = 0; i < s.length; i++) buff[p + i] = s.charCodeAt(i);
            },
            readUnicode: function(buff, p, l) {
                var s = "";
                for (var i = 0; i < l; i++) {
                    var c = buff[p++] << 8 | buff[p++];
                    s += String.fromCharCode(c);
                }
                return s;
            },
            _tdec: window["TextDecoder"] ? new window["TextDecoder"]() : null,
            readUTF8: function(buff, p, l) {
                var tdec = Typr["B"]._tdec;
                if (tdec && p == 0 && l == buff.length) return tdec["decode"](buff);
                return Typr["B"].readASCII(buff, p, l);
            },
            readBytes: function(buff, p, l) {
                var arr = [];
                for (var i = 0; i < l; i++) arr.push(buff[p + i]);
                return arr;
            },
            readASCIIArray: function(buff, p, l) {
                var s = [];
                for (var i = 0; i < l; i++) s.push(String.fromCharCode(buff[p + i]));
                return s;
            },
            t: function() {
                var ab = new ArrayBuffer(8);
                return {
                    buff: ab,
                    int8: new Int8Array(ab),
                    uint8: new Uint8Array(ab),
                    int16: new Int16Array(ab),
                    uint16: new Uint16Array(ab),
                    int32: new Int32Array(ab),
                    uint32: new Uint32Array(ab)
                };
            }()
        };
        Typr["T"].CFF = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var CFF = Typr["T"].CFF;
                data = new Uint8Array(data.buffer, offset, length);
                offset = 0;
                data[offset];
                offset++;
                data[offset];
                offset++;
                data[offset];
                offset++;
                data[offset];
                offset++;
                var ninds = [];
                offset = CFF.readIndex(data, offset, ninds);
                var names = [];
                for (var i = 0; i < ninds.length - 1; i++) names.push(bin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i]));
                offset += ninds[ninds.length - 1];
                var tdinds = [];
                offset = CFF.readIndex(data, offset, tdinds);
                var topDicts = [];
                for (var i = 0; i < tdinds.length - 1; i++) topDicts.push(CFF.readDict(data, offset + tdinds[i], offset + tdinds[i + 1]));
                offset += tdinds[tdinds.length - 1];
                var topdict = topDicts[0];
                var sinds = [];
                offset = CFF.readIndex(data, offset, sinds);
                var strings = [];
                for (var i = 0; i < sinds.length - 1; i++) strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
                offset += sinds[sinds.length - 1];
                CFF.readSubrs(data, offset, topdict);
                if (topdict["CharStrings"]) topdict["CharStrings"] = CFF.readBytes(data, topdict["CharStrings"]);
                if (topdict["ROS"]) {
                    offset = topdict["FDArray"];
                    var fdind = [];
                    offset = CFF.readIndex(data, offset, fdind);
                    topdict["FDArray"] = [];
                    for (var i = 0; i < fdind.length - 1; i++) {
                        var dict = CFF.readDict(data, offset + fdind[i], offset + fdind[i + 1]);
                        CFF._readFDict(data, dict, strings);
                        topdict["FDArray"].push(dict);
                    }
                    offset += fdind[fdind.length - 1];
                    offset = topdict["FDSelect"];
                    topdict["FDSelect"] = [];
                    var fmt = data[offset];
                    offset++;
                    if (fmt == 3) {
                        var rns = bin.readUshort(data, offset);
                        offset += 2;
                        for (var i = 0; i < rns + 1; i++) {
                            topdict["FDSelect"].push(bin.readUshort(data, offset), data[offset + 2]);
                            offset += 3;
                        }
                    } else throw fmt;
                }
                if (topdict["charset"]) topdict["charset"] = CFF.readCharset(data, topdict["charset"], topdict["CharStrings"].length);
                CFF._readFDict(data, topdict, strings);
                return topdict;
            },
            _readFDict: function(data, dict, ss) {
                var CFF = Typr["T"].CFF;
                var offset;
                if (dict["Private"]) {
                    offset = dict["Private"][1];
                    dict["Private"] = CFF.readDict(data, offset, offset + dict["Private"][0]);
                    if (dict["Private"]["Subrs"]) CFF.readSubrs(data, offset + dict["Private"]["Subrs"], dict["Private"]);
                }
                for (var p in dict) if ([ "FamilyName", "FontName", "FullName", "Notice", "version", "Copyright" ].indexOf(p) != -1) dict[p] = ss[dict[p] - 426 + 35];
            },
            readSubrs: function(data, offset, obj) {
                obj["Subrs"] = Typr["T"].CFF.readBytes(data, offset);
                var bias, nSubrs = obj["Subrs"].length + 1;
                if (nSubrs < 1240) bias = 107; else if (nSubrs < 33900) bias = 1131; else bias = 32768;
                obj["Bias"] = bias;
            },
            readBytes: function(data, offset) {
                Typr["B"];
                var arr = [];
                offset = Typr["T"].CFF.readIndex(data, offset, arr);
                var subrs = [], arl = arr.length - 1, no = data.byteOffset + offset;
                for (var i = 0; i < arl; i++) {
                    var ari = arr[i];
                    subrs.push(new Uint8Array(data.buffer, no + ari, arr[i + 1] - ari));
                }
                return subrs;
            },
            tableSE: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 0, 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, 0, 123, 0, 124, 125, 126, 127, 128, 129, 130, 131, 0, 132, 133, 0, 134, 135, 136, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0 ],
            glyphByUnicode: function(cff, code) {
                for (var i = 0; i < cff["charset"].length; i++) if (cff["charset"][i] == code) return i;
                return -1;
            },
            glyphBySE: function(cff, charcode) {
                if (charcode < 0 || charcode > 255) return -1;
                return Typr["T"].CFF.glyphByUnicode(cff, Typr["T"].CFF.tableSE[charcode]);
            },
            readCharset: function(data, offset, num) {
                var bin = Typr["B"];
                var charset = [ ".notdef" ];
                var format = data[offset];
                offset++;
                if (format == 0) {
                    for (var i = 0; i < num; i++) {
                        var first = bin.readUshort(data, offset);
                        offset += 2;
                        charset.push(first);
                    }
                } else if (format == 1 || format == 2) {
                    while (charset.length < num) {
                        var first = bin.readUshort(data, offset);
                        offset += 2;
                        var nLeft = 0;
                        if (format == 1) {
                            nLeft = data[offset];
                            offset++;
                        } else {
                            nLeft = bin.readUshort(data, offset);
                            offset += 2;
                        }
                        for (var i = 0; i <= nLeft; i++) {
                            charset.push(first);
                            first++;
                        }
                    }
                } else throw "error: format: " + format;
                return charset;
            },
            readIndex: function(data, offset, inds) {
                var bin = Typr["B"];
                var count = bin.readUshort(data, offset) + 1;
                offset += 2;
                var offsize = data[offset];
                offset++;
                if (offsize == 1) for (var i = 0; i < count; i++) inds.push(data[offset + i]); else if (offsize == 2) for (var i = 0; i < count; i++) inds.push(bin.readUshort(data, offset + i * 2)); else if (offsize == 3) for (var i = 0; i < count; i++) inds.push(bin.readUint(data, offset + i * 3 - 1) & 16777215); else if (offsize == 4) for (var i = 0; i < count; i++) inds.push(bin.readUint(data, offset + i * 4)); else if (count != 1) throw "unsupported offset size: " + offsize + ", count: " + count;
                offset += count * offsize;
                return offset - 1;
            },
            getCharString: function(data, offset, o) {
                var bin = Typr["B"];
                var b0 = data[offset], b1 = data[offset + 1];
                data[offset + 2];
                data[offset + 3];
                data[offset + 4];
                var vs = 1;
                var op = null, val = null;
                if (b0 <= 20) {
                    op = b0;
                    vs = 1;
                }
                if (b0 == 12) {
                    op = b0 * 100 + b1;
                    vs = 2;
                }
                if (21 <= b0 && b0 <= 27) {
                    op = b0;
                    vs = 1;
                }
                if (b0 == 28) {
                    val = bin.readShort(data, offset + 1);
                    vs = 3;
                }
                if (29 <= b0 && b0 <= 31) {
                    op = b0;
                    vs = 1;
                }
                if (32 <= b0 && b0 <= 246) {
                    val = b0 - 139;
                    vs = 1;
                }
                if (247 <= b0 && b0 <= 250) {
                    val = (b0 - 247) * 256 + b1 + 108;
                    vs = 2;
                }
                if (251 <= b0 && b0 <= 254) {
                    val = -(b0 - 251) * 256 - b1 - 108;
                    vs = 2;
                }
                if (b0 == 255) {
                    val = bin.readInt(data, offset + 1) / 65535;
                    vs = 5;
                }
                o.val = val != null ? val : "o" + op;
                o.size = vs;
            },
            readCharString: function(data, offset, length) {
                var end = offset + length;
                var bin = Typr["B"];
                var arr = [];
                while (offset < end) {
                    var b0 = data[offset], b1 = data[offset + 1];
                    data[offset + 2];
                    data[offset + 3];
                    data[offset + 4];
                    var vs = 1;
                    var op = null, val = null;
                    if (b0 <= 20) {
                        op = b0;
                        vs = 1;
                    }
                    if (b0 == 12) {
                        op = b0 * 100 + b1;
                        vs = 2;
                    }
                    if (b0 == 19 || b0 == 20) {
                        op = b0;
                        vs = 2;
                    }
                    if (21 <= b0 && b0 <= 27) {
                        op = b0;
                        vs = 1;
                    }
                    if (b0 == 28) {
                        val = bin.readShort(data, offset + 1);
                        vs = 3;
                    }
                    if (29 <= b0 && b0 <= 31) {
                        op = b0;
                        vs = 1;
                    }
                    if (32 <= b0 && b0 <= 246) {
                        val = b0 - 139;
                        vs = 1;
                    }
                    if (247 <= b0 && b0 <= 250) {
                        val = (b0 - 247) * 256 + b1 + 108;
                        vs = 2;
                    }
                    if (251 <= b0 && b0 <= 254) {
                        val = -(b0 - 251) * 256 - b1 - 108;
                        vs = 2;
                    }
                    if (b0 == 255) {
                        val = bin.readInt(data, offset + 1) / 65535;
                        vs = 5;
                    }
                    arr.push(val != null ? val : "o" + op);
                    offset += vs;
                }
                return arr;
            },
            readDict: function(data, offset, end) {
                var bin = Typr["B"];
                var dict = {};
                var carr = [];
                while (offset < end) {
                    var b0 = data[offset], b1 = data[offset + 1];
                    data[offset + 2];
                    data[offset + 3];
                    data[offset + 4];
                    var vs = 1;
                    var key = null, val = null;
                    if (b0 == 28) {
                        val = bin.readShort(data, offset + 1);
                        vs = 3;
                    }
                    if (b0 == 29) {
                        val = bin.readInt(data, offset + 1);
                        vs = 5;
                    }
                    if (32 <= b0 && b0 <= 246) {
                        val = b0 - 139;
                        vs = 1;
                    }
                    if (247 <= b0 && b0 <= 250) {
                        val = (b0 - 247) * 256 + b1 + 108;
                        vs = 2;
                    }
                    if (251 <= b0 && b0 <= 254) {
                        val = -(b0 - 251) * 256 - b1 - 108;
                        vs = 2;
                    }
                    if (b0 == 255) {
                        val = bin.readInt(data, offset + 1) / 65535;
                        vs = 5;
                        throw "unknown number";
                    }
                    if (b0 == 30) {
                        var nibs = [];
                        vs = 1;
                        while (true) {
                            var b = data[offset + vs];
                            vs++;
                            var nib0 = b >> 4, nib1 = b & 15;
                            if (nib0 != 15) nibs.push(nib0);
                            if (nib1 != 15) nibs.push(nib1);
                            if (nib1 == 15) break;
                        }
                        var s = "";
                        var chars = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber" ];
                        for (var i = 0; i < nibs.length; i++) s += chars[nibs[i]];
                        val = parseFloat(s);
                    }
                    if (b0 <= 21) {
                        var keys = [ "version", "Notice", "FullName", "FamilyName", "Weight", "FontBBox", "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "escape", "UniqueID", "XUID", "charset", "Encoding", "CharStrings", "Private", "Subrs", "defaultWidthX", "nominalWidthX" ];
                        key = keys[b0];
                        vs = 1;
                        if (b0 == 12) {
                            var keys = [ "Copyright", "isFixedPitch", "ItalicAngle", "UnderlinePosition", "UnderlineThickness", "PaintType", "CharstringType", "FontMatrix", "StrokeWidth", "BlueScale", "BlueShift", "BlueFuzz", "StemSnapH", "StemSnapV", "ForceBold", "", "", "LanguageGroup", "ExpansionFactor", "initialRandomSeed", "SyntheticBase", "PostScript", "BaseFontName", "BaseFontBlend", "", "", "", "", "", "", "ROS", "CIDFontVersion", "CIDFontRevision", "CIDFontType", "CIDCount", "UIDBase", "FDArray", "FDSelect", "FontName" ];
                            key = keys[b1];
                            vs = 2;
                        }
                    }
                    if (key != null) {
                        dict[key] = carr.length == 1 ? carr[0] : carr;
                        carr = [];
                    } else carr.push(val);
                    offset += vs;
                }
                return dict;
            }
        };
        Typr["T"].cmap = {
            parseTab: function(data, offset, length) {
                var obj = {
                    tables: [],
                    ids: {},
                    off: offset
                };
                data = new Uint8Array(data.buffer, offset, length);
                offset = 0;
                var bin = Typr["B"], rU = bin.readUshort, cmap = Typr["T"].cmap;
                rU(data, offset);
                offset += 2;
                var numTables = rU(data, offset);
                offset += 2;
                var offs = [];
                for (var i = 0; i < numTables; i++) {
                    var platformID = rU(data, offset);
                    offset += 2;
                    var encodingID = rU(data, offset);
                    offset += 2;
                    var noffset = bin.readUint(data, offset);
                    offset += 4;
                    var id = "p" + platformID + "e" + encodingID;
                    var tind = offs.indexOf(noffset);
                    if (tind == -1) {
                        tind = obj.tables.length;
                        var subt = {};
                        offs.push(noffset);
                        var format = subt.format = rU(data, noffset);
                        if (format == 0) subt = cmap.parse0(data, noffset, subt); else if (format == 4) subt = cmap.parse4(data, noffset, subt); else if (format == 6) subt = cmap.parse6(data, noffset, subt); else if (format == 12) subt = cmap.parse12(data, noffset, subt);
                        obj.tables.push(subt);
                    }
                    if (obj.ids[id] != null) throw "multiple tables for one platform+encoding";
                    obj.ids[id] = tind;
                }
                return obj;
            },
            parse0: function(data, offset, obj) {
                var bin = Typr["B"];
                offset += 2;
                var len = bin.readUshort(data, offset);
                offset += 2;
                bin.readUshort(data, offset);
                offset += 2;
                obj.map = [];
                for (var i = 0; i < len - 6; i++) obj.map.push(data[offset + i]);
                return obj;
            },
            parse4: function(data, offset, obj) {
                var bin = Typr["B"], rU = bin.readUshort, rUs = bin.readUshorts;
                var offset0 = offset;
                offset += 2;
                var length = rU(data, offset);
                offset += 2;
                rU(data, offset);
                offset += 2;
                var segCountX2 = rU(data, offset);
                offset += 2;
                var segCount = segCountX2 >>> 1;
                obj.searchRange = rU(data, offset);
                offset += 2;
                obj.entrySelector = rU(data, offset);
                offset += 2;
                obj.rangeShift = rU(data, offset);
                offset += 2;
                obj.endCount = rUs(data, offset, segCount);
                offset += segCount * 2;
                offset += 2;
                obj.startCount = rUs(data, offset, segCount);
                offset += segCount * 2;
                obj.idDelta = [];
                for (var i = 0; i < segCount; i++) {
                    obj.idDelta.push(bin.readShort(data, offset));
                    offset += 2;
                }
                obj.idRangeOffset = rUs(data, offset, segCount);
                offset += segCount * 2;
                obj.glyphIdArray = rUs(data, offset, offset0 + length - offset >>> 1);
                return obj;
            },
            parse6: function(data, offset, obj) {
                var bin = Typr["B"];
                offset += 2;
                bin.readUshort(data, offset);
                offset += 2;
                bin.readUshort(data, offset);
                offset += 2;
                obj.firstCode = bin.readUshort(data, offset);
                offset += 2;
                var entryCount = bin.readUshort(data, offset);
                offset += 2;
                obj.glyphIdArray = [];
                for (var i = 0; i < entryCount; i++) {
                    obj.glyphIdArray.push(bin.readUshort(data, offset));
                    offset += 2;
                }
                return obj;
            },
            parse12: function(data, offset, obj) {
                var bin = Typr["B"], rU = bin.readUint;
                offset += 4;
                rU(data, offset);
                offset += 4;
                rU(data, offset);
                offset += 4;
                var nGroups = rU(data, offset) * 3;
                offset += 4;
                var gps = obj.groups = new Uint32Array(nGroups);
                for (var i = 0; i < nGroups; i += 3) {
                    gps[i] = rU(data, offset + (i << 2));
                    gps[i + 1] = rU(data, offset + (i << 2) + 4);
                    gps[i + 2] = rU(data, offset + (i << 2) + 8);
                }
                return obj;
            }
        };
        Typr["T"].glyf = {
            parseTab: function(data, offset, length, font) {
                var obj = [], ng = font["maxp"]["numGlyphs"];
                for (var g = 0; g < ng; g++) obj.push(null);
                return obj;
            },
            _parseGlyf: function(font, g) {
                var bin = Typr["B"];
                var data = font["_data"], loca = font["loca"];
                if (loca[g] == loca[g + 1]) return null;
                var offset = Typr["findTable"](data, "glyf", font["_offset"])[0] + loca[g];
                var gl = {};
                gl.noc = bin.readShort(data, offset);
                offset += 2;
                gl.xMin = bin.readShort(data, offset);
                offset += 2;
                gl.yMin = bin.readShort(data, offset);
                offset += 2;
                gl.xMax = bin.readShort(data, offset);
                offset += 2;
                gl.yMax = bin.readShort(data, offset);
                offset += 2;
                if (gl.xMin >= gl.xMax || gl.yMin >= gl.yMax) return null;
                if (gl.noc > 0) {
                    gl.endPts = [];
                    for (var i = 0; i < gl.noc; i++) {
                        gl.endPts.push(bin.readUshort(data, offset));
                        offset += 2;
                    }
                    var instructionLength = bin.readUshort(data, offset);
                    offset += 2;
                    if (data.length - offset < instructionLength) return null;
                    gl.instructions = bin.readBytes(data, offset, instructionLength);
                    offset += instructionLength;
                    var crdnum = gl.endPts[gl.noc - 1] + 1;
                    gl.flags = [];
                    for (var i = 0; i < crdnum; i++) {
                        var flag = data[offset];
                        offset++;
                        gl.flags.push(flag);
                        if ((flag & 8) != 0) {
                            var rep = data[offset];
                            offset++;
                            for (var j = 0; j < rep; j++) {
                                gl.flags.push(flag);
                                i++;
                            }
                        }
                    }
                    gl.xs = [];
                    for (var i = 0; i < crdnum; i++) {
                        var i8 = (gl.flags[i] & 2) != 0, same = (gl.flags[i] & 16) != 0;
                        if (i8) {
                            gl.xs.push(same ? data[offset] : -data[offset]);
                            offset++;
                        } else {
                            if (same) gl.xs.push(0); else {
                                gl.xs.push(bin.readShort(data, offset));
                                offset += 2;
                            }
                        }
                    }
                    gl.ys = [];
                    for (var i = 0; i < crdnum; i++) {
                        var i8 = (gl.flags[i] & 4) != 0, same = (gl.flags[i] & 32) != 0;
                        if (i8) {
                            gl.ys.push(same ? data[offset] : -data[offset]);
                            offset++;
                        } else {
                            if (same) gl.ys.push(0); else {
                                gl.ys.push(bin.readShort(data, offset));
                                offset += 2;
                            }
                        }
                    }
                    var x = 0, y = 0;
                    for (var i = 0; i < crdnum; i++) {
                        x += gl.xs[i];
                        y += gl.ys[i];
                        gl.xs[i] = x;
                        gl.ys[i] = y;
                    }
                } else {
                    var ARG_1_AND_2_ARE_WORDS = 1 << 0;
                    var ARGS_ARE_XY_VALUES = 1 << 1;
                    var WE_HAVE_A_SCALE = 1 << 3;
                    var MORE_COMPONENTS = 1 << 5;
                    var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
                    var WE_HAVE_A_TWO_BY_TWO = 1 << 7;
                    var WE_HAVE_INSTRUCTIONS = 1 << 8;
                    gl.parts = [];
                    var flags;
                    do {
                        flags = bin.readUshort(data, offset);
                        offset += 2;
                        var part = {
                            m: {
                                a: 1,
                                b: 0,
                                c: 0,
                                d: 1,
                                tx: 0,
                                ty: 0
                            },
                            p1: -1,
                            p2: -1
                        };
                        gl.parts.push(part);
                        part.glyphIndex = bin.readUshort(data, offset);
                        offset += 2;
                        if (flags & ARG_1_AND_2_ARE_WORDS) {
                            var arg1 = bin.readShort(data, offset);
                            offset += 2;
                            var arg2 = bin.readShort(data, offset);
                            offset += 2;
                        } else {
                            var arg1 = bin.readInt8(data, offset);
                            offset++;
                            var arg2 = bin.readInt8(data, offset);
                            offset++;
                        }
                        if (flags & ARGS_ARE_XY_VALUES) {
                            part.m.tx = arg1;
                            part.m.ty = arg2;
                        } else {
                            part.p1 = arg1;
                            part.p2 = arg2;
                        }
                        if (flags & WE_HAVE_A_SCALE) {
                            part.m.a = part.m.d = bin.readF2dot14(data, offset);
                            offset += 2;
                        } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
                            part.m.a = bin.readF2dot14(data, offset);
                            offset += 2;
                            part.m.d = bin.readF2dot14(data, offset);
                            offset += 2;
                        } else if (flags & WE_HAVE_A_TWO_BY_TWO) {
                            part.m.a = bin.readF2dot14(data, offset);
                            offset += 2;
                            part.m.b = bin.readF2dot14(data, offset);
                            offset += 2;
                            part.m.c = bin.readF2dot14(data, offset);
                            offset += 2;
                            part.m.d = bin.readF2dot14(data, offset);
                            offset += 2;
                        }
                    } while (flags & MORE_COMPONENTS);
                    if (flags & WE_HAVE_INSTRUCTIONS) {
                        var numInstr = bin.readUshort(data, offset);
                        offset += 2;
                        gl.instr = [];
                        for (var i = 0; i < numInstr; i++) {
                            gl.instr.push(data[offset]);
                            offset++;
                        }
                    }
                }
                return gl;
            }
        };
        Typr["T"].head = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var obj = {};
                bin.readFixed(data, offset);
                offset += 4;
                obj["fontRevision"] = bin.readFixed(data, offset);
                offset += 4;
                bin.readUint(data, offset);
                offset += 4;
                bin.readUint(data, offset);
                offset += 4;
                obj["flags"] = bin.readUshort(data, offset);
                offset += 2;
                obj["unitsPerEm"] = bin.readUshort(data, offset);
                offset += 2;
                obj["created"] = bin.readUint64(data, offset);
                offset += 8;
                obj["modified"] = bin.readUint64(data, offset);
                offset += 8;
                obj["xMin"] = bin.readShort(data, offset);
                offset += 2;
                obj["yMin"] = bin.readShort(data, offset);
                offset += 2;
                obj["xMax"] = bin.readShort(data, offset);
                offset += 2;
                obj["yMax"] = bin.readShort(data, offset);
                offset += 2;
                obj["macStyle"] = bin.readUshort(data, offset);
                offset += 2;
                obj["lowestRecPPEM"] = bin.readUshort(data, offset);
                offset += 2;
                obj["fontDirectionHint"] = bin.readShort(data, offset);
                offset += 2;
                obj["indexToLocFormat"] = bin.readShort(data, offset);
                offset += 2;
                obj["glyphDataFormat"] = bin.readShort(data, offset);
                offset += 2;
                return obj;
            }
        };
        Typr["T"].hhea = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var obj = {};
                bin.readFixed(data, offset);
                offset += 4;
                var keys = [ "ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics" ];
                for (var i = 0; i < keys.length; i++) {
                    var key = keys[i];
                    var func = key == "advanceWidthMax" || key == "numberOfHMetrics" ? bin.readUshort : bin.readShort;
                    obj[key] = func(data, offset + i * 2);
                }
                return obj;
            }
        };
        Typr["T"].hmtx = {
            parseTab: function(data, offset, length, font) {
                var bin = Typr["B"];
                var aWidth = [];
                var lsBearing = [];
                var nG = font["maxp"]["numGlyphs"], nH = font["hhea"]["numberOfHMetrics"];
                var aw = 0, lsb = 0, i = 0;
                while (i < nH) {
                    aw = bin.readUshort(data, offset + (i << 2));
                    lsb = bin.readShort(data, offset + (i << 2) + 2);
                    aWidth.push(aw);
                    lsBearing.push(lsb);
                    i++;
                }
                while (i < nG) {
                    aWidth.push(aw);
                    lsBearing.push(lsb);
                    i++;
                }
                return {
                    aWidth: aWidth,
                    lsBearing: lsBearing
                };
            }
        };
        Typr["T"].kern = {
            parseTab: function(data, offset, length, font) {
                var bin = Typr["B"], kern = Typr["T"].kern;
                var version = bin.readUshort(data, offset);
                if (version == 1) return kern.parseV1(data, offset, length, font);
                var nTables = bin.readUshort(data, offset + 2);
                offset += 4;
                var map = {
                    glyph1: [],
                    rval: []
                };
                for (var i = 0; i < nTables; i++) {
                    offset += 2;
                    var length = bin.readUshort(data, offset);
                    offset += 2;
                    var coverage = bin.readUshort(data, offset);
                    offset += 2;
                    var format = coverage >>> 8;
                    format &= 15;
                    if (format == 0) offset = kern.readFormat0(data, offset, map);
                }
                return map;
            },
            parseV1: function(data, offset, length, font) {
                var bin = Typr["B"], kern = Typr["T"].kern;
                bin.readFixed(data, offset);
                var nTables = bin.readUint(data, offset + 4);
                offset += 8;
                var map = {
                    glyph1: [],
                    rval: []
                };
                for (var i = 0; i < nTables; i++) {
                    bin.readUint(data, offset);
                    offset += 4;
                    var coverage = bin.readUshort(data, offset);
                    offset += 2;
                    bin.readUshort(data, offset);
                    offset += 2;
                    var format = coverage & 255;
                    if (format == 0) offset = kern.readFormat0(data, offset, map);
                }
                return map;
            },
            readFormat0: function(data, offset, map) {
                var bin = Typr["B"], rUs = bin.readUshort;
                var pleft = -1;
                var nPairs = rUs(data, offset);
                rUs(data, offset + 2);
                rUs(data, offset + 4);
                rUs(data, offset + 6);
                offset += 8;
                for (var j = 0; j < nPairs; j++) {
                    var left = rUs(data, offset);
                    offset += 2;
                    var right = rUs(data, offset);
                    offset += 2;
                    var value = bin.readShort(data, offset);
                    offset += 2;
                    if (left != pleft) {
                        map.glyph1.push(left);
                        map.rval.push({
                            glyph2: [],
                            vals: []
                        });
                    }
                    var rval = map.rval[map.rval.length - 1];
                    rval.glyph2.push(right);
                    rval.vals.push(value);
                    pleft = left;
                }
                return offset;
            }
        };
        Typr["T"].loca = {
            parseTab: function(data, offset, length, font) {
                var bin = Typr["B"];
                var obj = [];
                var ver = font["head"]["indexToLocFormat"];
                var len = font["maxp"]["numGlyphs"] + 1;
                if (ver == 0) for (var i = 0; i < len; i++) obj.push(bin.readUshort(data, offset + (i << 1)) << 1);
                if (ver == 1) for (var i = 0; i < len; i++) obj.push(bin.readUint(data, offset + (i << 2)));
                return obj;
            }
        };
        Typr["T"].maxp = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"], rU = bin.readUshort;
                var obj = {};
                bin.readUint(data, offset);
                offset += 4;
                obj["numGlyphs"] = rU(data, offset);
                offset += 2;
                return obj;
            }
        };
        Typr["T"].name = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var obj = {};
                bin.readUshort(data, offset);
                offset += 2;
                var count = bin.readUshort(data, offset);
                offset += 2;
                bin.readUshort(data, offset);
                offset += 2;
                var names = [ "copyright", "fontFamily", "fontSubfamily", "ID", "fullName", "version", "postScriptName", "trademark", "manufacturer", "designer", "description", "urlVendor", "urlDesigner", "licence", "licenceURL", "---", "typoFamilyName", "typoSubfamilyName", "compatibleFull", "sampleText", "postScriptCID", "wwsFamilyName", "wwsSubfamilyName", "lightPalette", "darkPalette" ];
                var offset0 = offset;
                var rU = bin.readUshort;
                for (var i = 0; i < count; i++) {
                    var platformID = rU(data, offset);
                    offset += 2;
                    var encodingID = rU(data, offset);
                    offset += 2;
                    var languageID = rU(data, offset);
                    offset += 2;
                    var nameID = rU(data, offset);
                    offset += 2;
                    var slen = rU(data, offset);
                    offset += 2;
                    var noffset = rU(data, offset);
                    offset += 2;
                    var soff = offset0 + count * 12 + noffset;
                    var str;
                    if (platformID == 0) str = bin.readUnicode(data, soff, slen / 2); else if (platformID == 3 && encodingID == 0) str = bin.readUnicode(data, soff, slen / 2); else if (encodingID == 0) str = bin.readASCII(data, soff, slen); else if (encodingID == 1) str = bin.readUnicode(data, soff, slen / 2); else if (encodingID == 3) str = bin.readUnicode(data, soff, slen / 2); else if (encodingID == 4) str = bin.readUnicode(data, soff, slen / 2); else if (encodingID == 10) str = bin.readUnicode(data, soff, slen / 2); else if (platformID == 1) {
                        str = bin.readASCII(data, soff, slen);
                        console.log("reading unknown MAC encoding " + encodingID + " as ASCII");
                    } else {
                        console.log("unknown encoding " + encodingID + ", platformID: " + platformID);
                        str = bin.readASCII(data, soff, slen);
                    }
                    var tid = "p" + platformID + "," + languageID.toString(16);
                    if (obj[tid] == null) obj[tid] = {};
                    obj[tid][names[nameID]] = str;
                    obj[tid]["_lang"] = languageID;
                }
                var psn = "postScriptName";
                for (var p in obj) if (obj[p][psn] != null && obj[p]["_lang"] == 1033) return obj[p];
                for (var p in obj) if (obj[p][psn] != null && obj[p]["_lang"] == 0) return obj[p];
                for (var p in obj) if (obj[p][psn] != null && obj[p]["_lang"] == 3084) return obj[p];
                for (var p in obj) if (obj[p][psn] != null) return obj[p];
                var out;
                for (var p in obj) {
                    out = obj[p];
                    break;
                }
                console.log("returning name table with languageID " + out._lang);
                if (out[psn] == null && out["ID"] != null) out[psn] = out["ID"];
                return out;
            }
        };
        Typr["T"].OS2 = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var ver = bin.readUshort(data, offset);
                offset += 2;
                var OS2 = Typr["T"].OS2;
                var obj = {};
                if (ver == 0) OS2.version0(data, offset, obj); else if (ver == 1) OS2.version1(data, offset, obj); else if (ver == 2 || ver == 3 || ver == 4) OS2.version2(data, offset, obj); else if (ver == 5) OS2.version5(data, offset, obj); else throw "unknown OS/2 table version: " + ver;
                return obj;
            },
            version0: function(data, offset, obj) {
                var bin = Typr["B"];
                obj["xAvgCharWidth"] = bin.readShort(data, offset);
                offset += 2;
                obj["usWeightClass"] = bin.readUshort(data, offset);
                offset += 2;
                obj["usWidthClass"] = bin.readUshort(data, offset);
                offset += 2;
                obj["fsType"] = bin.readUshort(data, offset);
                offset += 2;
                obj["ySubscriptXSize"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySubscriptYSize"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySubscriptXOffset"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySubscriptYOffset"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySuperscriptXSize"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySuperscriptYSize"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySuperscriptXOffset"] = bin.readShort(data, offset);
                offset += 2;
                obj["ySuperscriptYOffset"] = bin.readShort(data, offset);
                offset += 2;
                obj["yStrikeoutSize"] = bin.readShort(data, offset);
                offset += 2;
                obj["yStrikeoutPosition"] = bin.readShort(data, offset);
                offset += 2;
                obj["sFamilyClass"] = bin.readShort(data, offset);
                offset += 2;
                obj["panose"] = bin.readBytes(data, offset, 10);
                offset += 10;
                obj["ulUnicodeRange1"] = bin.readUint(data, offset);
                offset += 4;
                obj["ulUnicodeRange2"] = bin.readUint(data, offset);
                offset += 4;
                obj["ulUnicodeRange3"] = bin.readUint(data, offset);
                offset += 4;
                obj["ulUnicodeRange4"] = bin.readUint(data, offset);
                offset += 4;
                obj["achVendID"] = bin.readASCII(data, offset, 4);
                offset += 4;
                obj["fsSelection"] = bin.readUshort(data, offset);
                offset += 2;
                obj["usFirstCharIndex"] = bin.readUshort(data, offset);
                offset += 2;
                obj["usLastCharIndex"] = bin.readUshort(data, offset);
                offset += 2;
                obj["sTypoAscender"] = bin.readShort(data, offset);
                offset += 2;
                obj["sTypoDescender"] = bin.readShort(data, offset);
                offset += 2;
                obj["sTypoLineGap"] = bin.readShort(data, offset);
                offset += 2;
                obj["usWinAscent"] = bin.readUshort(data, offset);
                offset += 2;
                obj["usWinDescent"] = bin.readUshort(data, offset);
                offset += 2;
                return offset;
            },
            version1: function(data, offset, obj) {
                var bin = Typr["B"];
                offset = Typr["T"].OS2.version0(data, offset, obj);
                obj["ulCodePageRange1"] = bin.readUint(data, offset);
                offset += 4;
                obj["ulCodePageRange2"] = bin.readUint(data, offset);
                offset += 4;
                return offset;
            },
            version2: function(data, offset, obj) {
                var bin = Typr["B"], rU = bin.readUshort;
                offset = Typr["T"].OS2.version1(data, offset, obj);
                obj["sxHeight"] = bin.readShort(data, offset);
                offset += 2;
                obj["sCapHeight"] = bin.readShort(data, offset);
                offset += 2;
                obj["usDefault"] = rU(data, offset);
                offset += 2;
                obj["usBreak"] = rU(data, offset);
                offset += 2;
                obj["usMaxContext"] = rU(data, offset);
                offset += 2;
                return offset;
            },
            version5: function(data, offset, obj) {
                var rU = Typr["B"].readUshort;
                offset = Typr["T"].OS2.version2(data, offset, obj);
                obj["usLowerOpticalPointSize"] = rU(data, offset);
                offset += 2;
                obj["usUpperOpticalPointSize"] = rU(data, offset);
                offset += 2;
                return offset;
            }
        };
        Typr["T"].post = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var obj = {};
                obj["version"] = bin.readFixed(data, offset);
                offset += 4;
                obj["italicAngle"] = bin.readFixed(data, offset);
                offset += 4;
                obj["underlinePosition"] = bin.readShort(data, offset);
                offset += 2;
                obj["underlineThickness"] = bin.readShort(data, offset);
                offset += 2;
                return obj;
            }
        };
        Typr["T"].SVG = {
            parseTab: function(data, offset, length) {
                var bin = Typr["B"];
                var obj = {
                    entries: []
                };
                var offset0 = offset;
                bin.readUshort(data, offset);
                offset += 2;
                var svgDocIndexOffset = bin.readUint(data, offset);
                offset += 4;
                bin.readUint(data, offset);
                offset += 4;
                offset = svgDocIndexOffset + offset0;
                var numEntries = bin.readUshort(data, offset);
                offset += 2;
                for (var i = 0; i < numEntries; i++) {
                    var startGlyphID = bin.readUshort(data, offset);
                    offset += 2;
                    var endGlyphID = bin.readUshort(data, offset);
                    offset += 2;
                    var svgDocOffset = bin.readUint(data, offset);
                    offset += 4;
                    var svgDocLength = bin.readUint(data, offset);
                    offset += 4;
                    var sbuf = new Uint8Array(data.buffer, offset0 + svgDocOffset + svgDocIndexOffset, svgDocLength);
                    var svg = bin.readUTF8(sbuf, 0, sbuf.length);
                    for (var f = startGlyphID; f <= endGlyphID; f++) {
                        obj.entries[f] = svg;
                    }
                }
                return obj;
            }
        };
        Typr["U"] = {
            shape: function(font, str, ltr) {
                var getGlyphPosition = function(font, gls, i1, ltr) {
                    var g1 = gls[i1], g2 = gls[i1 + 1], kern = font["kern"];
                    if (kern) {
                        var ind1 = kern.glyph1.indexOf(g1);
                        if (ind1 != -1) {
                            var ind2 = kern.rval[ind1].glyph2.indexOf(g2);
                            if (ind2 != -1) return [ 0, 0, kern.rval[ind1].vals[ind2], 0 ];
                        }
                    }
                    return [ 0, 0, 0, 0 ];
                };
                var gls = [];
                for (var i = 0; i < str.length; i++) {
                    var cc = str.codePointAt(i);
                    if (cc > 65535) i++;
                    gls.push(Typr["U"]["codeToGlyph"](font, cc));
                }
                var shape = [];
                for (var i = 0; i < gls.length; i++) {
                    var padj = getGlyphPosition(font, gls, i);
                    var gid = gls[i];
                    var ax = font["hmtx"].aWidth[gid] + padj[2];
                    shape.push({
                        g: gid,
                        cl: i,
                        dx: 0,
                        dy: 0,
                        ax: ax,
                        ay: 0
                    });
                }
                return shape;
            },
            shapeToPath: function(font, shape, clr) {
                var tpath = {
                    cmds: [],
                    crds: []
                };
                var x = 0, y = 0;
                for (var i = 0; i < shape.length; i++) {
                    var it = shape[i];
                    var path = Typr["U"]["glyphToPath"](font, it["g"]), crds = path["crds"];
                    for (var j = 0; j < crds.length; j += 2) {
                        tpath.crds.push(crds[j] + x + it["dx"]);
                        tpath.crds.push(crds[j + 1] + y + it["dy"]);
                    }
                    if (clr) tpath.cmds.push(clr);
                    for (var j = 0; j < path["cmds"].length; j++) tpath.cmds.push(path["cmds"][j]);
                    var clen = tpath.cmds.length;
                    if (clr) if (clen != 0 && tpath.cmds[clen - 1] != "X") tpath.cmds.push("X");
                    x += it["ax"];
                    y += it["ay"];
                }
                return {
                    cmds: tpath.cmds,
                    crds: tpath.crds
                };
            },
            codeToGlyph: function(font, code) {
                var cmap = font["cmap"];
                var tind = -1, pps = [ "p3e10", "p0e4", "p3e1", "p1e0", "p0e3", "p0e1" ];
                for (var i = 0; i < pps.length; i++) if (cmap.ids[pps[i]] != null) {
                    tind = cmap.ids[pps[i]];
                    break;
                }
                if (tind == -1) throw "no familiar platform and encoding!";
                var arrSearch = function(arr, k, v) {
                    var l = 0, r = Math.floor(arr.length / k);
                    while (l + 1 != r) {
                        var mid = l + (r - l >>> 1);
                        if (arr[mid * k] <= v) l = mid; else r = mid;
                    }
                    return l * k;
                };
                var tab = cmap.tables[tind], fmt = tab.format, gid = -1;
                if (fmt == 0) {
                    if (code >= tab.map.length) gid = 0; else gid = tab.map[code];
                } else if (fmt == 4) {
                    var sind = -1, ec = tab.endCount;
                    if (code > ec[ec.length - 1]) sind = -1; else {
                        sind = arrSearch(ec, 1, code);
                        if (ec[sind] < code) sind++;
                    }
                    if (sind == -1) gid = 0; else if (code < tab.startCount[sind]) gid = 0; else {
                        var gli = 0;
                        if (tab.idRangeOffset[sind] != 0) gli = tab.glyphIdArray[code - tab.startCount[sind] + (tab.idRangeOffset[sind] >> 1) - (tab.idRangeOffset.length - sind)]; else gli = code + tab.idDelta[sind];
                        gid = gli & 65535;
                    }
                } else if (fmt == 6) {
                    var off = code - tab.firstCode, arr = tab.glyphIdArray;
                    if (off < 0 || off >= arr.length) gid = 0; else gid = arr[off];
                } else if (fmt == 12) {
                    var grp = tab.groups;
                    if (code > grp[grp.length - 2]) gid = 0; else {
                        var i = arrSearch(grp, 3, code);
                        if (grp[i] <= code && code <= grp[i + 1]) {
                            gid = grp[i + 2] + (code - grp[i]);
                        }
                        if (gid == -1) gid = 0;
                    }
                } else throw "unknown cmap table format " + tab.format;
                var SVG = font["SVG "], loca = font["loca"];
                if (gid != 0 && font["CFF "] == null && (SVG == null || SVG.entries[gid] == null) && loca[gid] == loca[gid + 1] && [ 9, 10, 11, 12, 13, 32, 133, 160, 5760, 8232, 8233, 8239, 12288, 6158, 8203, 8204, 8205, 8288, 65279 ].indexOf(code) == -1 && !(8192 <= code && code <= 8202)) gid = 0;
                return gid;
            },
            glyphToPath: function(font, gid) {
                var path = {
                    cmds: [],
                    crds: []
                };
                var SVG = font["SVG "], CFF = font["CFF "];
                var U = Typr["U"];
                if (SVG && SVG.entries[gid]) {
                    var p = SVG.entries[gid];
                    if (p != null) {
                        if (typeof p == "string") {
                            p = U["SVG"].toPath(p);
                            SVG.entries[gid] = p;
                        }
                        path = p;
                    }
                } else if (CFF) {
                    var pdct = CFF["Private"];
                    var state = {
                        x: 0,
                        y: 0,
                        stack: [],
                        nStems: 0,
                        haveWidth: false,
                        width: pdct ? pdct["defaultWidthX"] : 0,
                        open: false
                    };
                    if (CFF["ROS"]) {
                        var gi = 0;
                        while (CFF["FDSelect"][gi + 2] <= gid) gi += 2;
                        pdct = CFF["FDArray"][CFF["FDSelect"][gi + 1]]["Private"];
                    }
                    U["_drawCFF"](CFF["CharStrings"][gid], state, CFF, pdct, path);
                } else if (font["glyf"]) {
                    U["_drawGlyf"](gid, font, path);
                }
                return {
                    cmds: path.cmds,
                    crds: path.crds
                };
            },
            _drawGlyf: function(gid, font, path) {
                var gl = font["glyf"][gid];
                if (gl == null) gl = font["glyf"][gid] = Typr["T"].glyf._parseGlyf(font, gid);
                if (gl != null) {
                    if (gl.noc > -1) Typr["U"]["_simpleGlyph"](gl, path); else Typr["U"]["_compoGlyph"](gl, font, path);
                }
            },
            _simpleGlyph: function(gl, p) {
                var P = Typr["U"]["P"];
                for (var c = 0; c < gl.noc; c++) {
                    var i0 = c == 0 ? 0 : gl.endPts[c - 1] + 1;
                    var il = gl.endPts[c];
                    for (var i = i0; i <= il; i++) {
                        var pr = i == i0 ? il : i - 1;
                        var nx = i == il ? i0 : i + 1;
                        var onCurve = gl.flags[i] & 1;
                        var prOnCurve = gl.flags[pr] & 1;
                        var nxOnCurve = gl.flags[nx] & 1;
                        var x = gl.xs[i], y = gl.ys[i];
                        if (i == i0) {
                            if (onCurve) {
                                if (prOnCurve) P.MoveTo(p, gl.xs[pr], gl.ys[pr]); else {
                                    P.MoveTo(p, x, y);
                                    continue;
                                }
                            } else {
                                if (prOnCurve) P.MoveTo(p, gl.xs[pr], gl.ys[pr]); else P.MoveTo(p, Math.floor((gl.xs[pr] + x) * .5), Math.floor((gl.ys[pr] + y) * .5));
                            }
                        }
                        if (onCurve) {
                            if (prOnCurve) P.LineTo(p, x, y);
                        } else {
                            if (nxOnCurve) P.qCurveTo(p, x, y, gl.xs[nx], gl.ys[nx]); else P.qCurveTo(p, x, y, Math.floor((x + gl.xs[nx]) * .5), Math.floor((y + gl.ys[nx]) * .5));
                        }
                    }
                    P.ClosePath(p);
                }
            },
            _compoGlyph: function(gl, font, p) {
                for (var j = 0; j < gl.parts.length; j++) {
                    var path = {
                        cmds: [],
                        crds: []
                    };
                    var prt = gl.parts[j];
                    Typr["U"]["_drawGlyf"](prt.glyphIndex, font, path);
                    var m = prt.m;
                    for (var i = 0; i < path.crds.length; i += 2) {
                        var x = path.crds[i], y = path.crds[i + 1];
                        p.crds.push(x * m.a + y * m.b + m.tx);
                        p.crds.push(x * m.c + y * m.d + m.ty);
                    }
                    for (var i = 0; i < path.cmds.length; i++) p.cmds.push(path.cmds[i]);
                }
            },
            pathToSVG: function(path, prec) {
                var cmds = path["cmds"], crds = path["crds"];
                if (prec == null) prec = 5;
                var out = [], co = 0, lmap = {
                    M: 2,
                    L: 2,
                    Q: 4,
                    C: 6
                };
                for (var i = 0; i < cmds.length; i++) {
                    var cmd = cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0);
                    out.push(cmd);
                    while (co < cn) {
                        var c = crds[co++];
                        out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " "));
                    }
                }
                return out.join("");
            },
            SVGToPath: function(d) {
                var pth = {
                    cmds: [],
                    crds: []
                };
                Typr["U"]["SVG"].svgToPath(d, pth);
                return {
                    cmds: pth.cmds,
                    crds: pth.crds
                };
            },
            pathToContext: function(path, ctx) {
                var c = 0, cmds = path["cmds"], crds = path["crds"];
                for (var j = 0; j < cmds.length; j++) {
                    var cmd = cmds[j];
                    if (cmd == "M") {
                        ctx.moveTo(crds[c], crds[c + 1]);
                        c += 2;
                    } else if (cmd == "L") {
                        ctx.lineTo(crds[c], crds[c + 1]);
                        c += 2;
                    } else if (cmd == "C") {
                        ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]);
                        c += 6;
                    } else if (cmd == "Q") {
                        ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]);
                        c += 4;
                    } else if (cmd.charAt(0) == "#") {
                        ctx.beginPath();
                        ctx.fillStyle = cmd;
                    } else if (cmd == "Z") {
                        ctx.closePath();
                    } else if (cmd == "X") {
                        ctx.fill();
                    }
                }
            },
            P: {
                MoveTo: function(p, x, y) {
                    p.cmds.push("M");
                    p.crds.push(x, y);
                },
                LineTo: function(p, x, y) {
                    p.cmds.push("L");
                    p.crds.push(x, y);
                },
                CurveTo: function(p, a, b, c, d, e, f) {
                    p.cmds.push("C");
                    p.crds.push(a, b, c, d, e, f);
                },
                qCurveTo: function(p, a, b, c, d) {
                    p.cmds.push("Q");
                    p.crds.push(a, b, c, d);
                },
                ClosePath: function(p) {
                    p.cmds.push("Z");
                }
            },
            _drawCFF: function(cmds, state, font, pdct, p) {
                var stack = state.stack;
                var nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open;
                var i = 0;
                var x = state.x, y = state.y, c1x = 0, c1y = 0, c2x = 0, c2y = 0, c3x = 0, c3y = 0, c4x = 0, c4y = 0, jpx = 0, jpy = 0;
                var CFF = Typr["T"].CFF, P = Typr["U"]["P"];
                var nominalWidthX = pdct["nominalWidthX"];
                var o = {
                    val: 0,
                    size: 0
                };
                while (i < cmds.length) {
                    CFF.getCharString(cmds, i, o);
                    var v = o.val;
                    i += o.size;
                    if (v == "o1" || v == "o18") {
                        var hasWidthArg;
                        hasWidthArg = stack.length % 2 !== 0;
                        if (hasWidthArg && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                        }
                        nStems += stack.length >> 1;
                        stack.length = 0;
                        haveWidth = true;
                    } else if (v == "o3" || v == "o23") {
                        var hasWidthArg;
                        hasWidthArg = stack.length % 2 !== 0;
                        if (hasWidthArg && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                        }
                        nStems += stack.length >> 1;
                        stack.length = 0;
                        haveWidth = true;
                    } else if (v == "o4") {
                        if (stack.length > 1 && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                            haveWidth = true;
                        }
                        if (open) P.ClosePath(p);
                        y += stack.pop();
                        P.MoveTo(p, x, y);
                        open = true;
                    } else if (v == "o5") {
                        while (stack.length > 0) {
                            x += stack.shift();
                            y += stack.shift();
                            P.LineTo(p, x, y);
                        }
                    } else if (v == "o6" || v == "o7") {
                        var count = stack.length;
                        var isX = v == "o6";
                        for (var j = 0; j < count; j++) {
                            var sval = stack.shift();
                            if (isX) x += sval; else y += sval;
                            isX = !isX;
                            P.LineTo(p, x, y);
                        }
                    } else if (v == "o8" || v == "o24") {
                        var count = stack.length;
                        var index = 0;
                        while (index + 6 <= count) {
                            c1x = x + stack.shift();
                            c1y = y + stack.shift();
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            x = c2x + stack.shift();
                            y = c2y + stack.shift();
                            P.CurveTo(p, c1x, c1y, c2x, c2y, x, y);
                            index += 6;
                        }
                        if (v == "o24") {
                            x += stack.shift();
                            y += stack.shift();
                            P.LineTo(p, x, y);
                        }
                    } else if (v == "o11") break; else if (v == "o1234" || v == "o1235" || v == "o1236" || v == "o1237") {
                        if (v == "o1234") {
                            c1x = x + stack.shift();
                            c1y = y;
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            jpx = c2x + stack.shift();
                            jpy = c2y;
                            c3x = jpx + stack.shift();
                            c3y = c2y;
                            c4x = c3x + stack.shift();
                            c4y = y;
                            x = c4x + stack.shift();
                            P.CurveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
                            P.CurveTo(p, c3x, c3y, c4x, c4y, x, y);
                        }
                        if (v == "o1235") {
                            c1x = x + stack.shift();
                            c1y = y + stack.shift();
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            jpx = c2x + stack.shift();
                            jpy = c2y + stack.shift();
                            c3x = jpx + stack.shift();
                            c3y = jpy + stack.shift();
                            c4x = c3x + stack.shift();
                            c4y = c3y + stack.shift();
                            x = c4x + stack.shift();
                            y = c4y + stack.shift();
                            stack.shift();
                            P.CurveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
                            P.CurveTo(p, c3x, c3y, c4x, c4y, x, y);
                        }
                        if (v == "o1236") {
                            c1x = x + stack.shift();
                            c1y = y + stack.shift();
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            jpx = c2x + stack.shift();
                            jpy = c2y;
                            c3x = jpx + stack.shift();
                            c3y = c2y;
                            c4x = c3x + stack.shift();
                            c4y = c3y + stack.shift();
                            x = c4x + stack.shift();
                            P.CurveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
                            P.CurveTo(p, c3x, c3y, c4x, c4y, x, y);
                        }
                        if (v == "o1237") {
                            c1x = x + stack.shift();
                            c1y = y + stack.shift();
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            jpx = c2x + stack.shift();
                            jpy = c2y + stack.shift();
                            c3x = jpx + stack.shift();
                            c3y = jpy + stack.shift();
                            c4x = c3x + stack.shift();
                            c4y = c3y + stack.shift();
                            if (Math.abs(c4x - x) > Math.abs(c4y - y)) {
                                x = c4x + stack.shift();
                            } else {
                                y = c4y + stack.shift();
                            }
                            P.CurveTo(p, c1x, c1y, c2x, c2y, jpx, jpy);
                            P.CurveTo(p, c3x, c3y, c4x, c4y, x, y);
                        }
                    } else if (v == "o14") {
                        if (stack.length > 0 && !haveWidth) {
                            width = stack.shift() + font["nominalWidthX"];
                            haveWidth = true;
                        }
                        if (stack.length == 4) {
                            var adx = stack.shift();
                            var ady = stack.shift();
                            var bchar = stack.shift();
                            var achar = stack.shift();
                            var bind = CFF.glyphBySE(font, bchar);
                            var aind = CFF.glyphBySE(font, achar);
                            Typr["U"]["_drawCFF"](font["CharStrings"][bind], state, font, pdct, p);
                            state.x = adx;
                            state.y = ady;
                            Typr["U"]["_drawCFF"](font["CharStrings"][aind], state, font, pdct, p);
                        }
                        if (open) {
                            P.ClosePath(p);
                            open = false;
                        }
                    } else if (v == "o19" || v == "o20") {
                        var hasWidthArg;
                        hasWidthArg = stack.length % 2 !== 0;
                        if (hasWidthArg && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                        }
                        nStems += stack.length >> 1;
                        stack.length = 0;
                        haveWidth = true;
                        i += nStems + 7 >> 3;
                    } else if (v == "o21") {
                        if (stack.length > 2 && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                            haveWidth = true;
                        }
                        y += stack.pop();
                        x += stack.pop();
                        if (open) P.ClosePath(p);
                        P.MoveTo(p, x, y);
                        open = true;
                    } else if (v == "o22") {
                        if (stack.length > 1 && !haveWidth) {
                            width = stack.shift() + nominalWidthX;
                            haveWidth = true;
                        }
                        x += stack.pop();
                        if (open) P.ClosePath(p);
                        P.MoveTo(p, x, y);
                        open = true;
                    } else if (v == "o25") {
                        while (stack.length > 6) {
                            x += stack.shift();
                            y += stack.shift();
                            P.LineTo(p, x, y);
                        }
                        c1x = x + stack.shift();
                        c1y = y + stack.shift();
                        c2x = c1x + stack.shift();
                        c2y = c1y + stack.shift();
                        x = c2x + stack.shift();
                        y = c2y + stack.shift();
                        P.CurveTo(p, c1x, c1y, c2x, c2y, x, y);
                    } else if (v == "o26") {
                        if (stack.length % 2) {
                            x += stack.shift();
                        }
                        while (stack.length > 0) {
                            c1x = x;
                            c1y = y + stack.shift();
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            x = c2x;
                            y = c2y + stack.shift();
                            P.CurveTo(p, c1x, c1y, c2x, c2y, x, y);
                        }
                    } else if (v == "o27") {
                        if (stack.length % 2) {
                            y += stack.shift();
                        }
                        while (stack.length > 0) {
                            c1x = x + stack.shift();
                            c1y = y;
                            c2x = c1x + stack.shift();
                            c2y = c1y + stack.shift();
                            x = c2x + stack.shift();
                            y = c2y;
                            P.CurveTo(p, c1x, c1y, c2x, c2y, x, y);
                        }
                    } else if (v == "o10" || v == "o29") {
                        var obj = v == "o10" ? pdct : font;
                        if (stack.length == 0) {
                            console.log("error: empty stack");
                        } else {
                            var ind = stack.pop();
                            var subr = obj["Subrs"][ind + obj["Bias"]];
                            state.x = x;
                            state.y = y;
                            state.nStems = nStems;
                            state.haveWidth = haveWidth;
                            state.width = width;
                            state.open = open;
                            Typr["U"]["_drawCFF"](subr, state, font, pdct, p);
                            x = state.x;
                            y = state.y;
                            nStems = state.nStems;
                            haveWidth = state.haveWidth;
                            width = state.width;
                            open = state.open;
                        }
                    } else if (v == "o30" || v == "o31") {
                        var count, count1 = stack.length;
                        var index = 0;
                        var alternate = v == "o31";
                        count = count1 & ~2;
                        index += count1 - count;
                        while (index < count) {
                            if (alternate) {
                                c1x = x + stack.shift();
                                c1y = y;
                                c2x = c1x + stack.shift();
                                c2y = c1y + stack.shift();
                                y = c2y + stack.shift();
                                if (count - index == 5) {
                                    x = c2x + stack.shift();
                                    index++;
                                } else x = c2x;
                                alternate = false;
                            } else {
                                c1x = x;
                                c1y = y + stack.shift();
                                c2x = c1x + stack.shift();
                                c2y = c1y + stack.shift();
                                x = c2x + stack.shift();
                                if (count - index == 5) {
                                    y = c2y + stack.shift();
                                    index++;
                                } else y = c2y;
                                alternate = true;
                            }
                            P.CurveTo(p, c1x, c1y, c2x, c2y, x, y);
                            index += 4;
                        }
                    } else if ((v + "").charAt(0) == "o") {
                        console.log("Unknown operation: " + v, cmds);
                        throw v;
                    } else stack.push(v);
                }
                state.x = x;
                state.y = y;
                state.nStems = nStems;
                state.haveWidth = haveWidth;
                state.width = width;
                state.open = open;
            },
            SVG: function() {
                var M = {
                    getScale: function(m) {
                        return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2]));
                    },
                    translate: function(m, x, y) {
                        M.concat(m, [ 1, 0, 0, 1, x, y ]);
                    },
                    rotate: function(m, a) {
                        M.concat(m, [ Math.cos(a), -Math.sin(a), Math.sin(a), Math.cos(a), 0, 0 ]);
                    },
                    scale: function(m, x, y) {
                        M.concat(m, [ x, 0, 0, y, 0, 0 ]);
                    },
                    concat: function(m, w) {
                        var a = m[0], b = m[1], c = m[2], d = m[3], tx = m[4], ty = m[5];
                        m[0] = a * w[0] + b * w[2];
                        m[1] = a * w[1] + b * w[3];
                        m[2] = c * w[0] + d * w[2];
                        m[3] = c * w[1] + d * w[3];
                        m[4] = tx * w[0] + ty * w[2] + w[4];
                        m[5] = tx * w[1] + ty * w[3] + w[5];
                    },
                    invert: function(m) {
                        var a = m[0], b = m[1], c = m[2], d = m[3], tx = m[4], ty = m[5], adbc = a * d - b * c;
                        m[0] = d / adbc;
                        m[1] = -b / adbc;
                        m[2] = -c / adbc;
                        m[3] = a / adbc;
                        m[4] = (c * ty - d * tx) / adbc;
                        m[5] = (b * tx - a * ty) / adbc;
                    },
                    multPoint: function(m, p) {
                        var x = p[0], y = p[1];
                        return [ x * m[0] + y * m[2] + m[4], x * m[1] + y * m[3] + m[5] ];
                    },
                    multArray: function(m, a) {
                        for (var i = 0; i < a.length; i += 2) {
                            var x = a[i], y = a[i + 1];
                            a[i] = x * m[0] + y * m[2] + m[4];
                            a[i + 1] = x * m[1] + y * m[3] + m[5];
                        }
                    }
                };
                function _bracketSplit(str, lbr, rbr) {
                    var out = [], pos = 0, ci = 0, lvl = 0;
                    while (true) {
                        var li = str.indexOf(lbr, ci);
                        var ri = str.indexOf(rbr, ci);
                        if (li == -1 && ri == -1) break;
                        if (ri == -1 || li != -1 && li < ri) {
                            if (lvl == 0) {
                                out.push(str.slice(pos, li).trim());
                                pos = li + 1;
                            }
                            lvl++;
                            ci = li + 1;
                        } else if (li == -1 || ri != -1 && ri < li) {
                            lvl--;
                            if (lvl == 0) {
                                out.push(str.slice(pos, ri).trim());
                                pos = ri + 1;
                            }
                            ci = ri + 1;
                        }
                    }
                    return out;
                }
                function cssMap(str) {
                    var pts = _bracketSplit(str, "{", "}");
                    var css = {};
                    for (var i = 0; i < pts.length; i += 2) {
                        var cn = pts[i].split(",");
                        for (var j = 0; j < cn.length; j++) {
                            var cnj = cn[j].trim();
                            if (css[cnj] == null) css[cnj] = "";
                            css[cnj] += pts[i + 1];
                        }
                    }
                    return css;
                }
                function readTrnf(trna) {
                    var pts = _bracketSplit(trna, "(", ")");
                    var m = [ 1, 0, 0, 1, 0, 0 ];
                    for (var i = 0; i < pts.length; i += 2) {
                        var om = m;
                        m = _readTrnsAttr(pts[i], pts[i + 1]);
                        M.concat(m, om);
                    }
                    return m;
                }
                function _readTrnsAttr(fnc, vls) {
                    var m = [ 1, 0, 0, 1, 0, 0 ], gotSep = true;
                    for (var i = 0; i < vls.length; i++) {
                        var ch = vls.charAt(i);
                        if (ch == "," || ch == " ") gotSep = true; else if (ch == ".") {
                            if (!gotSep) {
                                vls = vls.slice(0, i) + "," + vls.slice(i);
                                i++;
                            }
                            gotSep = false;
                        } else if (ch == "-" && i > 0 && vls[i - 1] != "e") {
                            vls = vls.slice(0, i) + " " + vls.slice(i);
                            i++;
                            gotSep = true;
                        }
                    }
                    vls = vls.split(/\s*[\s,]\s*/).map(parseFloat);
                    if (fnc == "translate") {
                        if (vls.length == 1) M.translate(m, vls[0], 0); else M.translate(m, vls[0], vls[1]);
                    } else if (fnc == "scale") {
                        if (vls.length == 1) M.scale(m, vls[0], vls[0]); else M.scale(m, vls[0], vls[1]);
                    } else if (fnc == "rotate") {
                        var tx = 0, ty = 0;
                        if (vls.length != 1) {
                            tx = vls[1];
                            ty = vls[2];
                        }
                        M.translate(m, -tx, -ty);
                        M.rotate(m, -Math.PI * vls[0] / 180);
                        M.translate(m, tx, ty);
                    } else if (fnc == "matrix") m = vls; else console.log("unknown transform: ", fnc);
                    return m;
                }
                function toPath(str) {
                    var pth = {
                        cmds: [],
                        crds: []
                    };
                    if (str == null) return pth;
                    var prsr = new DOMParser();
                    var doc = prsr["parseFromString"](str, "image/svg+xml");
                    var svg = doc.getElementsByTagName("svg")[0];
                    var vb = svg.getAttribute("viewBox");
                    if (vb) vb = vb.trim().split(" ").map(parseFloat); else vb = [ 0, 0, 1e3, 1e3 ];
                    _toPath(svg.children, pth);
                    for (var i = 0; i < pth.crds.length; i += 2) {
                        var x = pth.crds[i], y = pth.crds[i + 1];
                        x -= vb[0];
                        y -= vb[1];
                        y = -y;
                        pth.crds[i] = x;
                        pth.crds[i + 1] = y;
                    }
                    return pth;
                }
                function _toPath(nds, pth, fill) {
                    for (var ni = 0; ni < nds.length; ni++) {
                        var nd = nds[ni], tn = nd.tagName;
                        var cfl = nd.getAttribute("fill");
                        if (cfl == null) cfl = fill;
                        if (tn == "g") {
                            var tp = {
                                crds: [],
                                cmds: []
                            };
                            _toPath(nd.children, tp, cfl);
                            var trf = nd.getAttribute("transform");
                            if (trf) {
                                var m = readTrnf(trf);
                                M.multArray(m, tp.crds);
                            }
                            pth.crds = pth.crds.concat(tp.crds);
                            pth.cmds = pth.cmds.concat(tp.cmds);
                        } else if (tn == "path" || tn == "circle" || tn == "ellipse") {
                            pth.cmds.push(cfl ? cfl : "#000000");
                            var d;
                            if (tn == "path") d = nd.getAttribute("d");
                            if (tn == "circle" || tn == "ellipse") {
                                var vls = [ 0, 0, 0, 0 ], nms = [ "cx", "cy", "rx", "ry", "r" ];
                                for (var i = 0; i < 5; i++) {
                                    var V = nd.getAttribute(nms[i]);
                                    if (V) {
                                        V = parseFloat(V);
                                        if (i < 4) vls[i] = V; else vls[2] = vls[3] = V;
                                    }
                                }
                                var cx = vls[0], cy = vls[1], rx = vls[2], ry = vls[3];
                                d = [ "M", cx - rx, cy, "a", rx, ry, 0, 1, 0, rx * 2, 0, "a", rx, ry, 0, 1, 0, -rx * 2, 0 ].join(" ");
                            }
                            svgToPath(d, pth);
                            pth.cmds.push("X");
                        } else if (tn == "defs"); else console.log(tn, nd);
                    }
                }
                function _tokens(d) {
                    var ts = [], off = 0, rn = false, cn = "", pc = "";
                    while (off < d.length) {
                        var cc = d.charCodeAt(off), ch = d.charAt(off);
                        off++;
                        var isNum = 48 <= cc && cc <= 57 || ch == "." || ch == "-" || ch == "e" || ch == "E";
                        if (rn) {
                            if (ch == "-" && pc != "e" || ch == "." && cn.indexOf(".") != -1) {
                                ts.push(parseFloat(cn));
                                cn = ch;
                            } else if (isNum) cn += ch; else {
                                ts.push(parseFloat(cn));
                                if (ch != "," && ch != " ") ts.push(ch);
                                rn = false;
                            }
                        } else {
                            if (isNum) {
                                cn = ch;
                                rn = true;
                            } else if (ch != "," && ch != " ") ts.push(ch);
                        }
                        pc = ch;
                    }
                    if (rn) ts.push(parseFloat(cn));
                    return ts;
                }
                function _reps(ts, off, ps) {
                    var i = off;
                    while (i < ts.length) {
                        if (typeof ts[i] == "string") break;
                        i += ps;
                    }
                    return (i - off) / ps;
                }
                function svgToPath(d, pth) {
                    var ts = _tokens(d);
                    var i = 0, x = 0, y = 0, ox = 0, oy = 0, oldo = pth.crds.length;
                    var pc = {
                        M: 2,
                        L: 2,
                        H: 1,
                        V: 1,
                        T: 2,
                        S: 4,
                        A: 7,
                        Q: 4,
                        C: 6
                    };
                    var cmds = pth.cmds, crds = pth.crds;
                    while (i < ts.length) {
                        var cmd = ts[i];
                        i++;
                        var cmu = cmd.toUpperCase();
                        if (cmu == "Z") {
                            cmds.push("Z");
                            x = ox;
                            y = oy;
                        } else {
                            var ps = pc[cmu], reps = _reps(ts, i, ps);
                            for (var j = 0; j < reps; j++) {
                                if (j == 1 && cmu == "M") {
                                    cmd = cmd == cmu ? "L" : "l";
                                    cmu = "L";
                                }
                                var xi = 0, yi = 0;
                                if (cmd != cmu) {
                                    xi = x;
                                    yi = y;
                                }
                                if (cmu == "M") {
                                    x = xi + ts[i++];
                                    y = yi + ts[i++];
                                    cmds.push("M");
                                    crds.push(x, y);
                                    ox = x;
                                    oy = y;
                                } else if (cmu == "L") {
                                    x = xi + ts[i++];
                                    y = yi + ts[i++];
                                    cmds.push("L");
                                    crds.push(x, y);
                                } else if (cmu == "H") {
                                    x = xi + ts[i++];
                                    cmds.push("L");
                                    crds.push(x, y);
                                } else if (cmu == "V") {
                                    y = yi + ts[i++];
                                    cmds.push("L");
                                    crds.push(x, y);
                                } else if (cmu == "Q") {
                                    var x1 = xi + ts[i++], y1 = yi + ts[i++], x2 = xi + ts[i++], y2 = yi + ts[i++];
                                    cmds.push("Q");
                                    crds.push(x1, y1, x2, y2);
                                    x = x2;
                                    y = y2;
                                } else if (cmu == "T") {
                                    var co = Math.max(crds.length - 2, oldo);
                                    var x1 = x + x - crds[co], y1 = y + y - crds[co + 1];
                                    var x2 = xi + ts[i++], y2 = yi + ts[i++];
                                    cmds.push("Q");
                                    crds.push(x1, y1, x2, y2);
                                    x = x2;
                                    y = y2;
                                } else if (cmu == "C") {
                                    var x1 = xi + ts[i++], y1 = yi + ts[i++], x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
                                    cmds.push("C");
                                    crds.push(x1, y1, x2, y2, x3, y3);
                                    x = x3;
                                    y = y3;
                                } else if (cmu == "S") {
                                    var co = Math.max(crds.length - (cmds[cmds.length - 1] == "C" ? 4 : 2), oldo);
                                    var x1 = x + x - crds[co], y1 = y + y - crds[co + 1];
                                    var x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
                                    cmds.push("C");
                                    crds.push(x1, y1, x2, y2, x3, y3);
                                    x = x3;
                                    y = y3;
                                } else if (cmu == "A") {
                                    var x1 = x, y1 = y;
                                    var rx = ts[i++], ry = ts[i++];
                                    var phi = ts[i++] * (Math.PI / 180), fA = ts[i++], fS = ts[i++];
                                    var x2 = xi + ts[i++], y2 = yi + ts[i++];
                                    if (x2 == x && y2 == y && rx == 0 && ry == 0) continue;
                                    var hdx = (x1 - x2) / 2, hdy = (y1 - y2) / 2;
                                    var cosP = Math.cos(phi), sinP = Math.sin(phi);
                                    var x1A = cosP * hdx + sinP * hdy;
                                    var y1A = -sinP * hdx + cosP * hdy;
                                    var rxS = rx * rx, ryS = ry * ry;
                                    var x1AS = x1A * x1A, y1AS = y1A * y1A;
                                    var frc = (rxS * ryS - rxS * y1AS - ryS * x1AS) / (rxS * y1AS + ryS * x1AS);
                                    var coef = (fA != fS ? 1 : -1) * Math.sqrt(Math.max(frc, 0));
                                    var cxA = coef * (rx * y1A) / ry;
                                    var cyA = -coef * (ry * x1A) / rx;
                                    var cx = cosP * cxA - sinP * cyA + (x1 + x2) / 2;
                                    var cy = sinP * cxA + cosP * cyA + (y1 + y2) / 2;
                                    var angl = function(ux, uy, vx, vy) {
                                        var lU = Math.sqrt(ux * ux + uy * uy), lV = Math.sqrt(vx * vx + vy * vy);
                                        var num = (ux * vx + uy * vy) / (lU * lV);
                                        return (ux * vy - uy * vx >= 0 ? 1 : -1) * Math.acos(Math.max(-1, Math.min(1, num)));
                                    };
                                    var vX = (x1A - cxA) / rx, vY = (y1A - cyA) / ry;
                                    var theta1 = angl(1, 0, vX, vY);
                                    var dtheta = angl(vX, vY, (-x1A - cxA) / rx, (-y1A - cyA) / ry);
                                    dtheta = dtheta % (2 * Math.PI);
                                    var arc = function(gst, x, y, r, a0, a1, neg) {
                                        var rotate = function(m, a) {
                                            var si = Math.sin(a), co = Math.cos(a);
                                            var a = m[0], b = m[1], c = m[2], d = m[3];
                                            m[0] = a * co + b * si;
                                            m[1] = -a * si + b * co;
                                            m[2] = c * co + d * si;
                                            m[3] = -c * si + d * co;
                                        };
                                        var multArr = function(m, a) {
                                            for (var j = 0; j < a.length; j += 2) {
                                                var x = a[j], y = a[j + 1];
                                                a[j] = m[0] * x + m[2] * y + m[4];
                                                a[j + 1] = m[1] * x + m[3] * y + m[5];
                                            }
                                        };
                                        var concatA = function(a, b) {
                                            for (var j = 0; j < b.length; j++) a.push(b[j]);
                                        };
                                        var concatP = function(p, r) {
                                            concatA(p.cmds, r.cmds);
                                            concatA(p.crds, r.crds);
                                        };
                                        if (neg) while (a1 > a0) a1 -= 2 * Math.PI; else while (a1 < a0) a1 += 2 * Math.PI;
                                        var th = (a1 - a0) / 4;
                                        var x0 = Math.cos(th / 2), y0 = -Math.sin(th / 2);
                                        var x1 = (4 - x0) / 3, y1 = y0 == 0 ? y0 : (1 - x0) * (3 - x0) / (3 * y0);
                                        var x2 = x1, y2 = -y1;
                                        var x3 = x0, y3 = -y0;
                                        var ps = [ x1, y1, x2, y2, x3, y3 ];
                                        var pth = {
                                            cmds: [ "C", "C", "C", "C" ],
                                            crds: ps.slice(0)
                                        };
                                        var rot = [ 1, 0, 0, 1, 0, 0 ];
                                        rotate(rot, -th);
                                        for (var j = 0; j < 3; j++) {
                                            multArr(rot, ps);
                                            concatA(pth.crds, ps);
                                        }
                                        rotate(rot, -a0 + th / 2);
                                        rot[0] *= r;
                                        rot[1] *= r;
                                        rot[2] *= r;
                                        rot[3] *= r;
                                        rot[4] = x;
                                        rot[5] = y;
                                        multArr(rot, pth.crds);
                                        multArr(gst.ctm, pth.crds);
                                        concatP(gst.pth, pth);
                                    };
                                    var gst = {
                                        pth: pth,
                                        ctm: [ rx * cosP, rx * sinP, -ry * sinP, ry * cosP, cx, cy ]
                                    };
                                    arc(gst, 0, 0, 1, theta1, theta1 + dtheta, fS == 0);
                                    x = x2;
                                    y = y2;
                                } else console.log("Unknown SVG command " + cmd);
                            }
                        }
                    }
                }
                return {
                    cssMap: cssMap,
                    readTrnf: readTrnf,
                    svgToPath: svgToPath,
                    toPath: toPath
                };
            }(),
            initHB: function(hurl, resp) {
                var codeLength = function(code) {
                    var len = 0;
                    if ((code & 4294967295 - (1 << 7) + 1) == 0) {
                        len = 1;
                    } else if ((code & 4294967295 - (1 << 11) + 1) == 0) {
                        len = 2;
                    } else if ((code & 4294967295 - (1 << 16) + 1) == 0) {
                        len = 3;
                    } else if ((code & 4294967295 - (1 << 21) + 1) == 0) {
                        len = 4;
                    }
                    return len;
                };
                var te = new window["TextEncoder"]("utf8");
                fetch(hurl).then(function(x) {
                    return x["arrayBuffer"]();
                }).then(function(ab) {
                    return WebAssembly["instantiate"](ab);
                }).then(function(res) {
                    console.log("HB ready");
                    var exp = res["instance"]["exports"], mem = exp["memory"];
                    mem["grow"](700);
                    var heapu8 = new Uint8Array(mem.buffer);
                    var u32 = new Uint32Array(mem.buffer);
                    var i32 = new Int32Array(mem.buffer);
                    var __lastFnt, blob, blobPtr, face, font;
                    Typr["U"]["shapeHB"] = function() {
                        var toJson = function(ptr) {
                            var length = exp["hb_buffer_get_length"](ptr);
                            var result = [];
                            var iPtr32 = exp["hb_buffer_get_glyph_infos"](ptr, 0) >>> 2;
                            var pPtr32 = exp["hb_buffer_get_glyph_positions"](ptr, 0) >>> 2;
                            for (var i = 0; i < length; ++i) {
                                var a = iPtr32 + i * 5, b = pPtr32 + i * 5;
                                result.push({
                                    g: u32[a + 0],
                                    cl: u32[a + 2],
                                    ax: i32[b + 0],
                                    ay: i32[b + 1],
                                    dx: i32[b + 2],
                                    dy: i32[b + 3]
                                });
                            }
                            return result;
                        };
                        return function(fnt, str, ltr) {
                            var fdata = fnt["_data"], fn = fnt["name"]["postScriptName"];
                            if (__lastFnt != fn) {
                                if (blob != null) {
                                    exp["hb_blob_destroy"](blob);
                                    exp["free"](blobPtr);
                                    exp["hb_face_destroy"](face);
                                    exp["hb_font_destroy"](font);
                                }
                                blobPtr = exp["malloc"](fdata.byteLength);
                                heapu8.set(fdata, blobPtr);
                                blob = exp["hb_blob_create"](blobPtr, fdata.byteLength, 2, 0, 0);
                                face = exp["hb_face_create"](blob, 0);
                                font = exp["hb_font_create"](face);
                                __lastFnt = fn;
                            }
                            var buffer = exp["hb_buffer_create"]();
                            var bytes = te["encode"](str);
                            var len = bytes.length, strp = exp["malloc"](len);
                            heapu8.set(bytes, strp);
                            exp["hb_buffer_add_utf8"](buffer, strp, len, 0, len);
                            exp["free"](strp);
                            exp["hb_buffer_set_direction"](buffer, ltr ? 4 : 5);
                            exp["hb_buffer_guess_segment_properties"](buffer);
                            exp["hb_shape"](font, buffer, 0, 0);
                            var json = toJson(buffer);
                            exp["hb_buffer_destroy"](buffer);
                            var arr = json.slice(0);
                            if (!ltr) arr.reverse();
                            var ci = 0, bi = 0;
                            for (var i = 1; i < arr.length; i++) {
                                var gl = arr[i], cl = gl["cl"];
                                while (true) {
                                    var cpt = str.codePointAt(ci), cln = codeLength(cpt);
                                    if (bi + cln <= cl) {
                                        bi += cln;
                                        ci += cpt <= 65535 ? 1 : 2;
                                    } else break;
                                }
                                gl["cl"] = ci;
                            }
                            return json;
                        };
                    }();
                    resp();
                });
            }
        };
        const QQ_GROUP = [ "854137118" ];
        var _self = unsafeWindow;
        var top = _self;
        var UE$1;
        const selfintv = setInterval(() => {
            if (unsafeWindow) {
                _self = unsafeWindow;
                top = _self;
                UE$1 = _self.UE;
                try {
                    reportOnline();
                    String.prototype.replaceAll = function(s1, s2) {
                        return this.replace(new RegExp(s1, "gm"), s2);
                    };
                    while (top !== _self.top) {
                        top = top.parent.document ? top.parent : _self.top;
                        if (top.location.pathname === "/mycourse/studentstudy") break;
                    }
                } catch (err) {
                    top = _self;
                }
                clearInterval(selfintv);
            }
        }, GLOBAL.delay);
        function checkVersion() {
            function compare(v1 = "0", v2 = "0") {
                v1 = String(v1).split(".");
                v2 = String(v2).split(".");
                const minVersionLens = Math.min(v1.length, v2.length);
                let result = 0;
                for (let i = 0; i < minVersionLens; i++) {
                    const curV1 = Number(v1[i]);
                    const curV2 = Number(v2[i]);
                    if (curV1 > curV2) {
                        result = 1;
                        break;
                    } else if (curV1 < curV2) {
                        result = -1;
                        break;
                    }
                }
                if (result === 0 && v1.length !== v2.length) {
                    const v1BiggerThenv2 = v1.length > v2.length;
                    const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
                    for (let i = minVersionLens; i < maxLensVersion.length; i++) {
                        const curVersion = Number(maxLensVersion[i]);
                        if (curVersion > 0) {
                            v1BiggerThenv2 ? result = 1 : result = -1;
                            break;
                        }
                    }
                }
                return result;
            }
            GM_xmlhttpRequest({
                method: "GET",
                url: "https://greasyfork.org/en/scripts/451356.json",
                timeout: GLOBAL.timeout,
                onload: function(r) {
                    const obj = JSON.parse(r.responseText);
                    if (obj.name === GM_info.script.name && compare(obj.version, GM_info.script.version) === 1 && new Date(obj.code_updated_at).getTime() + 1e3 * 60 * 60 * 2 < new Date().getTime()) {
                        iframeMsg("update", {
                            v1: GM_info.script.version,
                            v2: obj.version,
                            href: obj.url
                        });
                    }
                }
            });
        }
        top.addEventListener("message", event => {
            if (event.data.type === "jump") {
                GLOBAL.index++;
                iframeMsg("tip", {
                    tip: "准备答第" + (GLOBAL.index + 1) + "题"
                });
            } else if (event.data.type === "stop") {
                GLOBAL.stop = event.data.val;
            } else if (event.data.type === "start_pay") {
                if (event.data.flag) {
                    if (String(GM_getValue("token")).length === 10 || String(GM_getValue("token")).length === 11) {
                        iframeMsg("tip", {
                            tip: "已开启请求收费题库,已实时生效"
                        });
                        GM_setValue("start_pay", event.data.flag);
                        iframeMsg("start_pay", true);
                    } else {
                        iframeMsg("tip", {
                            tip: "系统检测您的token可能输入有误,请检查"
                        });
                    }
                } else {
                    iframeMsg("tip", {
                        tip: "已关闭请求收费题库,已实时生效"
                    });
                    GM_setValue("start_pay", event.data.flag);
                    iframeMsg("start_pay", false);
                }
            } else if (event.data.type === "auto_jump") {
                GM_setValue("auto_jump", event.data.flag);
                iframeMsg("tip", {
                    tip: "已" + (event.data.flag ? "开启" : "关闭") + "自动切换,页面刷新后生效"
                });
            } else if (event.data.type === "confim") {
                if (event.data.token.length === 10 || event.data.token.length === 11) {
                    GM_setValue("token", event.data.token);
                    iframeMsg("tip", {
                        tip: "成功设置token,请点击开启付费题库"
                    });
                } else {
                    iframeMsg("tip", {
                        tip: "系统检测您的token可能输入有误,请检查"
                    });
                }
            } else if (event.data.type === "save_setting") {
                GM_setValue("gpt", event.data.gpt);
                GM_setValue("search_delay", event.data.search_delay);
                GM_setValue("tiku_adapter", event.data.tiku_adapter);
            }
        }, false);
        $(document).keydown(function(event) {
            if (event.keyCode === 38) {
                $(".model-id").hide();
            } else if (event.keyCode === 40) {
                $(".model-id").show();
            } else if (event.keyCode === 37) {
                $(".model-id").hide();
                GM_setValue("hide", true);
            } else if (event.keyCode === 39) {
                $(".model-id").show();
                GM_setValue("hide", false);
                GM_setValue("pos", "50px,50px");
            } else if (event.keyCode === 83) {
                GLOBAL.stop = true;
                iframeMsg("stop", GLOBAL.stop);
            } else if (event.keyCode === 68) {
                GLOBAL.stop = false;
                iframeMsg("stop", GLOBAL.stop);
            }
        });
        function getAnswerForKey(keys, options) {
            return keys.map(function(val) {
                return options[val.charCodeAt(0) - 65];
            });
        }
        function setIntervalFunc(flag, func, time) {
            const interval = setInterval(() => {
                if (flag()) {
                    clearInterval(interval);
                    func();
                }
            }, time || 1e3);
        }
        function getAnswer(str, options, type) {
            if (type === 0 || type === 1) {
                const ans = getAnswerForKey(str.match(/[A-G]/gi) || [], options);
                return ans.length > 0 ? ans : [ str ];
            } else {
                return [ str ];
            }
        }
        function getQuestionType(str) {
            if (!str) return undefined;
            str = str.trim().replaceAll(/\s+/g, "");
            if (TYPE[str]) return TYPE[str];
            const regex = Object.keys(TYPE).join("|");
            const matcher = str.match(regex);
            if (matcher) return TYPE[matcher[0]];
            return undefined;
        }
        function rand(m, n) {
            return Math.ceil(Math.random() * (n - m + 1) + m - 1);
        }
        const TYPE = {
            "阅读理解(选择)/完型填空": 66,
            "听力训练": 66,
            multichoice: 1,
            singlechoice: 0,
            SingleChoice: 0,
            bijudgement: 3,
            Judgement: 3,
            "单项选择题": 0,
            "单项选择": 0,
            "单选题": 0,
            "单选": 0,
            "多选": 1,
            "多选题": 1,
            "案例分析": 1,
            "多项选择题": 1,
            "多项选择": 1,
            "客观题": 1,
            "填空题": 2,
            "填空": 2,
            "对错题": 3,
            "判断题": 3,
            "判断正误": 3,
            "判断": 3,
            "主观题": 4,
            "问答题": 4,
            "简答题": 4,
            "名词解释": 5,
            "论述题": 6,
            "计算题": 7,
            "其它": 8,
            "分录题": 9,
            "资料题": 10,
            "连线题": 11,
            "排序题": 13,
            "完形填空": 14,
            "完型填空": 14,
            "阅读理解": 15,
            "口语题": 18,
            "听力题": 19,
            "A1A2题": 1,
            "文件作答": 4,
            "视频题": 1
        };
        function sleep(time) {
            return new Promise(resolve => {
                setTimeout(resolve, time);
            });
        }
        function iframeMsg(type, message) {
            try {
                top.document.getElementById("iframeNode").contentWindow.vueDefinedProp(type, message);
            } catch (e) {}
        }
        function filterImg(dom) {
            if (location.host === "ncexam.cug.edu.cn") {
                String.prototype.trim = function() {
                    return this.replace(/^\s+|\s+$/gm, "");
                };
            }
            return $(dom).clone().find("img[src]").replaceWith(function() {
                return $("<p></p>").text('<img src="' + $(this).attr("src") + '">');
            }).end().find("iframe[src]").replaceWith(function() {
                return $("<p></p>").text('<iframe src="' + $(this).attr("src") + '"></irame>');
            }).end().text().trim();
        }
        function createContainer(name, childElem) {
            name = name.toLowerCase();
            let elem = top.document.createElement(name);
            elem.style.display = "block";
            elem.id = name.replace("hcsearche", "hcSearche").replace(/\-[a-z]/g, function(w) {
                return w.replace("-", "").toUpperCase();
            });
            if (childElem) {
                if (Array.isArray(childElem) === false) childElem = [ childElem ];
                for (let i = 0; i < childElem.length; i++) elem.appendChild(childElem[i]);
            }
            return elem;
        }
        function dragModel(drag) {
            const TOP = top;
            drag.onmousedown = function(e) {
                drag.style.cursor = "move";
                e = e || window.event;
                let diffX = e.clientX - drag.offsetLeft;
                let diffY = e.clientY - drag.offsetTop;
                top.onmousemove = function(e) {
                    e = e || top.event;
                    let left = e.clientX - diffX;
                    let top = e.clientY - diffY;
                    if (left < 0) {
                        left = 0;
                    } else if (left > TOP.innerWidth * .95 - drag.offsetWidth) {
                        left = TOP.innerWidth * .95 - drag.offsetWidth;
                    }
                    if (top < 0) {
                        top = 0;
                    } else if (top > TOP.innerHeight - drag.offsetHeight) {
                        top = TOP.innerHeight - drag.offsetHeight;
                    }
                    drag.style.left = left + "px";
                    drag.style.top = top + "px";
                    GM_setValue("pos", drag.style.left + "," + drag.style.top);
                };
                top.onmouseup = function(e) {
                    drag.style.cursor = "default";
                    this.onmousemove = null;
                    this.onmouseup = null;
                };
            };
        }
        function defaultWorkTypeResolver($options) {
            function count(selector) {
                let sum = 0;
                for (const option of $options || []) {
                    if ($(option).find(selector).length || $(option).parent().find(selector).length) {
                        sum++;
                    }
                }
                return sum;
            }
            return count('[type="radio"]') === 2 ? 3 : count('[type="radio"]') > 2 ? 0 : count('[type="checkbox"]') > 2 ? 1 : count("textarea") >= 1 ? 4 : undefined;
        }
        function waitWithTimeout(promise, timeout, timeoutMessage = "timeout", defaultRes) {
            let timer;
            const timeoutPromise = new Promise((resolve, reject) => {
                timer = setTimeout(() => defaultRes === undefined ? reject(timeoutMessage) : resolve(defaultRes), timeout);
            });
            return Promise.race([ timeoutPromise, promise ]).finally(() => clearTimeout(timer));
        }
        async function formatSearchAnswer(initData) {
            const data = {
                plat: initData.plat ? parseInt(initData.plat) : null,
                qid: initData.qid ? String(initData.qid) : null,
                question: initData.question,
                options: initData.options,
                options_id: initData.options_id ? initData.options_id : [],
                type: initData.type
            };
            let res;
            const list = [];
            const apis = GLOBAL.answerApi;
            const answerApiFunc = Object.keys(apis).map(item => {
                return waitWithTimeout(apis[item](data), 5e3, "", []);
            });
            answerApiFunc.push(searchAnswer(data));
            const answerApiRes = await waitWithTimeout(Promise.all(answerApiFunc), 1e4, "(接口超时)");
            answerApiRes.map(item => {
                if (item instanceof Array) {
                    console.log("tikuAdapter结果", JSON.stringify(item));
                    list.push(...item);
                } else if (item instanceof Object && Object.keys(item).length === 1) {
                    const key = Object.keys(item)[0];
                    item[key];
                } else {
                    res = item;
                }
            });
            try {
                const msg = res.message || res.msg;
                if (res.code !== 0) {
                    return {
                        success: false,
                        msg: msg
                    };
                }
                if (res.result.success) {
                    return {
                        success: true,
                        msg: msg,
                        num: res.result.num,
                        answers: res.result.answers
                    };
                }
                console.log("官方结果", JSON.stringify(res));
                if (res.result.answers instanceof Array && res.result.answers.length > 0) {
                    list.push(...res.result.answers);
                }
                return {
                    success: true,
                    msg: msg,
                    num: res.result.num,
                    list: list
                };
            } catch (e) {
                return {
                    success: false,
                    msg: "发生异常" + e + "请反馈至QQ群" + QQ_GROUP
                };
            }
        }
        function similar(s, t, f) {
            if (!s || !t) {
                return 0;
            }
            if (s === t) {
                return 100;
            }
            var l = s.length > t.length ? s.length : t.length;
            var n = s.length;
            var m = t.length;
            var d = [];
            f = f || 2;
            var min = function(a, b, c) {
                return a < b ? a < c ? a : c : b < c ? b : c;
            };
            var i, j, si, tj, cost;
            if (n === 0) return m;
            if (m === 0) return n;
            for (i = 0; i <= n; i++) {
                d[i] = [];
                d[i][0] = i;
            }
            for (j = 0; j <= m; j++) {
                d[0][j] = j;
            }
            for (i = 1; i <= n; i++) {
                si = s.charAt(i - 1);
                for (j = 1; j <= m; j++) {
                    tj = t.charAt(j - 1);
                    if (si === tj) {
                        cost = 0;
                    } else {
                        cost = 1;
                    }
                    d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
                }
            }
            let res = (1 - d[n][m] / l) * 100;
            return res.toFixed(f);
        }
        function answerSimilar(src, list) {
            return $.map(list, function(val) {
                return Number(similar(formatString(val), formatString(src), 2));
            });
        }
        function isPlainAnswer(answer) {
            if (answer.length > 8 || !/[A-Z]/.test(answer)) {
                return false;
            }
            let min = 0;
            for (let i = 0; i < answer.length; i++) {
                if (answer.charCodeAt(i) < min) {
                    return false;
                }
                min = answer.charCodeAt(i);
            }
            return true;
        }
        function isTrue(str) {
            return Boolean(String(str).match(/(^|,)(正确|是|对|√|T|ri|true|A)(,|$)/));
        }
        function isFalse(str) {
            return Boolean(String(str).match(/(^|,)(错误|否|错|×|F|不是|wr|false|B)(,|$)/));
        }
        async function defaultQuestionResolve(list, data, handler, ignore_click) {
            let targetOptionsList = [];
            for (const answers of list) {
                if (data.type === 4 || data.type === 2 || data.type === 5) {
                    let ans = answers.length > data.$options.length ? answers.slice(0, data.$options.length) : answers;
                    for (let index in ans) {
                        if (typeof handler === "function") await handler(data.type, ans[index], data.$options.eq(index));
                    }
                    return {
                        style: "success-row",
                        ans: answers.join("===="),
                        question: data.question
                    };
                } else if (data.type === 3) {
                    if (targetOptionsList.length > 3) break;
                    let targetOptions = new Set();
                    if (isTrue(answers.join())) {
                        targetOptions.add(Number(isFalse(data.options[0])));
                    } else if (isFalse(answers.join())) {
                        targetOptions.add(Number(isTrue(data.options[0])));
                    }
                    targetOptions.size > 0 && targetOptionsList.push(targetOptions);
                } else if (data.type === 0 || data.type === 1 || data.type === 66) {
                    const beautifulOptions = data.options.map(i => {
                        return formatString(i).toLowerCase().replace(/\s/g, "");
                    });
                    let targetOptions = new Set();
                    for (const ans of answers) {
                        if (ans.length === 1 && isPlainAnswer(ans)) {
                            targetOptions.add(ans.charCodeAt(0) - 65);
                        }
                        const val = formatString(ans).toLowerCase().replace(/\s/g, "");
                        let optIndex = $.inArray(val, beautifulOptions);
                        if (optIndex >= 0) {
                            targetOptions.add(optIndex);
                        }
                    }
                    if ((data.type === 0 && targetOptions.size === 0 || data.type === 1 && targetOptions.size < 2) && targetOptionsList.length === 0) {
                        for (const ans of answers) {
                            const val = formatString(ans).toLowerCase();
                            if (val.length >= 5 && !val.includes("<img")) {
                                const ratings = answerSimilar(val, beautifulOptions);
                                const maxScore = Math.max(...ratings);
                                if (maxScore > 65) {
                                    targetOptions.add(ratings.indexOf(maxScore));
                                }
                            }
                        }
                    }
                    targetOptions.size > 0 && targetOptionsList.push(targetOptions);
                }
            }
            let items = [];
            let sortArr = targetOptionsList.map(item => {
                const s = Array.from(item).sort();
                return s;
            });
            if (data.type === 0 || data.type === 3) {
                items = getMost(sortArr.filter(i => i.length === 1));
                if (!items || items.length === 0) {
                    items = getMost(sortArr.filter(i => i.length > 0));
                }
            } else if (data.type === 1 || data.type === 66) {
                items = getMost(sortArr.filter(i => i.length > 1));
                if (!items || items.length === 0) {
                    items = getLang(sortArr.filter(i => i.length > 0));
                }
            }
            if (items && items.length > 0) {
                for (let index = 0; index < data.$options.length; index++) {
                    const $item = data.$options.eq(index);
                    if (Boolean($.inArray(index, items) + 1) !== Boolean(ignore_click($item, data.type))) {
                        $item.get(0).click();
                        await sleep(GLOBAL.fillAnswerDelay);
                    }
                }
                return {
                    type: data.type,
                    style: "primary-row",
                    ans: items.map(i => {
                        return data.options[i];
                    }).join("===="),
                    question: data.question
                };
            } else {
                return {
                    type: data.type,
                    style: "warning-row",
                    question: data.question,
                    ans: list.join('<span style="color: red">====</span>'),
                    options: data.options
                };
            }
        }
        async function defaultFillAnswer(answers, data, handler, ignore_click) {
            for (let index = 0; index < data.$options.length; index++) {
                const $item = data.$options.eq(index);
                if (Boolean($.inArray(index, answers) + 1) !== Boolean(ignore_click($item, data.type))) {
                    $item.get(0).click();
                    await sleep(GLOBAL.fillAnswerDelay);
                }
            }
            return {
                type: data.type,
                style: "success-row",
                question: data.question,
                ans: answers.map(i => {
                    return String.fromCharCode(i + 65);
                }).join(""),
                options: data.options
            };
        }
        function getMost(arr) {
            arr.reverse();
            if (arr.length === 0) return undefined;
            var hash = {};
            var m = 0;
            var trueEl;
            var el;
            for (var i = 0, len = arr.length; i < len; i++) {
                el = arr[i];
                hash[el] === undefined ? hash[el] = 1 : hash[el]++;
                if (hash[el] >= m) {
                    m = hash[el];
                    trueEl = el;
                }
            }
            return trueEl;
        }
        function getLang(arr) {
            if (arr.length === 0) return undefined;
            let len = 0;
            let ele;
            for (let arrElement of arr) {
                if (arrElement.length > len) {
                    len = arrElement.length;
                    ele = arrElement;
                }
            }
            return ele ? ele : arr.length > 0 ? arr[0] : [];
        }
        function HTMLDecode(text) {
            var temp = document.createElement("div");
            temp.innerHTML = text;
            var output = temp.innerText || temp.textContent;
            temp = null;
            return output;
        }
        function formatString(src) {
            src = String(src);
            src = src.includes("img") || src.includes("iframe") ? src : HTMLDecode(src);
            src = src.replace(/[\uff01-\uff5e]/g, function(str) {
                return String.fromCharCode(str.charCodeAt(0) - 65248);
            });
            return src.replace(/\s+/g, " ").replace(/[“”]/g, '"').replace(/[‘’]/g, "'").replace(/。/g, ".").replace(/[,.?:!;]$/, "").trim();
        }
        function division(arr, size) {
            var objArr = new Array();
            var index = 0;
            var objArrLen = arr.length / size;
            for (var i = 0; i < objArrLen; i++) {
                var arrTemp = new Array();
                for (var j = 0; j < size; j++) {
                    arrTemp[j] = arr[index++];
                    if (index === arr.length) {
                        break;
                    }
                }
                objArr[i] = arrTemp;
            }
            return objArr;
        }
        const cache = {};
        const sourceTable = JSON.parse(GM_getResourceText("SourceTable"));
        async function genTable(ttf) {
            const res = await axios.get(ttf, {
                responseType: "arraybuffer"
            });
            const font = Typr.parse(res.data)[0];
            const table = {};
            for (let i = 19968; i < 40870; i++) {
                const g = Typr.U.codeToGlyph(font, i);
                if (g) {
                    const path = Typr.U.glyphToPath(font, g);
                    if (path) {
                        table[i] = MD5(JSON.stringify(path));
                    }
                }
            }
            cache[ttf] = table;
        }
        async function getEncryptString(str, ttf) {
            if (!cache[ttf]) {
                await genTable(ttf);
            }
            const match = str.match(/<span class="xuetangx-com-encrypted-font">(.*?)</g);
            if (match === null) {
                return formatString(str);
            }
            const encStrArr = match.map(string => {
                return string.replace(/^<span class="xuetangx-com-encrypted-font">/, "").replace(/<$/, "");
            });
            encStrArr.forEach(encStr => {
                const decStr = encStr.split("").map(string => {
                    const md5 = cache[ttf][string.charCodeAt(0)];
                    return String.fromCharCode(sourceTable[md5]);
                }).join("");
                str = str.replace(encStr, decStr);
            });
            return formatString(str);
        }
        var vm = {
            hideTip() {
                var tip = document.createElement("div");
                tip.id = "yinc";
                tip.innerHTML = `
            <div style="
                position:fixed;
                right:0;
                top:10%;
                color: #8a6d3b;
                background-color: #fcf8e3;
                padding: 15px;
                margin-bottom: 20px;
                border: 1px solid transparent;
                border-radius: 4px;
                border-color: #faebcc;">
                万能脚本已被隐藏<br>如果需要显示答题面板,请按键盘右箭头
            <button style="
                padding: 0;
                color: inherit;
                border: 0;
                background: inherit;
                top:-22px;
                position:relative"
                type="button" id="cl_yinc" data-dismiss="alert" aria-label="Close">&times;</button>
            </div>`;
                top.document.getElementsByTagName("body")[0].appendChild(tip);
                top.document.querySelector("#cl_yinc").onclick = function() {
                    top.document.querySelector("#yinc").remove();
                };
                setTimeout(() => {
                    top.document.querySelector("#yinc").remove();
                }, 3e3);
            },
            zhihuishuSaveTip() {
                var zhihuishuSaveTip = document.createElement("div");
                zhihuishuSaveTip.id = "zhihuishuSaveTip";
                zhihuishuSaveTip.innerHTML = `
            <div style="
                position: fixed;
                opacity: 1;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                z-index: 1040;
                background:rgba(0,0,0,.46);">
            <div style="
                position: relative;
                margin: 10px;
                top: 50%;
                left: 40%;
                width: 20%;">
            <div style="
                position: relative;
                background-color: #fff;
                -webkit-background-clip: padding-box;
                background-clip: padding-box;
                /*border: 1px solid #999;*/
                border: 1px solid rgba(0,0,0,.2);
                border-radius: 6px;
                outline: 0;
                -webkit-box-shadow: 0 3px 9px rgba(0,0,0,.5);
                box-shadow: 0 3px 9px rgba(0,0,0,.5);">
            <div style="
                line-height: 25px;
                font-size: 15px;
                margin: 5px;">
            <h4 class="modal-title">正在保存</h4>
            
    
            <!-- 模态框主体 -->
            <div class="modal-body" style="height: 50px;
                margin: 5px;
                padding: 5px;
                margin-top: 15px;
                line-height: 15px;
                font-size: 15px;">
                <progress style="width: 100%" id="gs_p" value="0" max="100"></progress> <span id="gs_text">0%</span>
            </div>
    
            
            
            </div>
    </div>
        </div>`;
                top.document.getElementsByTagName("body")[0].appendChild(zhihuishuSaveTip);
            }
        };
        function showPanel() {
            let html = `
            <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
        ` + GM_getResourceText("ElementUiCss") + `
        .el-table .warning-row {
            background: oldlace;
        }
        .message-update-tip {
            width: 300px;
        }
        .el-table .success-row {
            background: #f0f9eb;
        }
        .el-table .primary-row {
            background: rgb(236, 245, 255);
        }
        *{
            padding: 0px;
            margin: 0px;
        }
        .el-button{
            margin-bottom: 4px;
        }
        .el-button + .el-button{
            margin-left: 0px;
        }

        .el-form
        -item-confim{
            display: flex;
            justify-content: center
        }
        .drag_auto_answer-class{
            width: 321px;
            background-color: rgb(255, 255, 255);
            overflow-x: hidden;
            overflow-y: scroll;
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: -17px;
        }
        </style>
    </head>
    <body>
    <div id="app">
    <el-dialog title="更多设置" :visible.sync="show_setting" width="300px">
    <el-form ref="form" label-width="100px" size="mini">
    <el-form-item label="ChatGPT答题">
        <el-select v-model="gpt">
        <el-option label="不开启" value="-1"></el-option>
        <el-option label="使用GPT3.5" value="3"></el-option>
        <el-option  disabled label="使用GPT4" value="4"></el-option>
        </el-select>
    </el-form-item>
        <el-form-item label="搜题延迟(秒)">
        <el-input-number v-model="search_delay" :min="0" :max="30"></el-input-number>
    </el-form-item>
    <el-popover
        ref="popover"
        placement="top-start"
        title="tikuAdapter题库适配器"
        width="200"
        trigger="hover"
        content="大学生网课题库接口适配器:聚合多家题库,更精确的查题。详细查看 https://github.com/DokiDoki1103/tikuAdapter">
    </el-popover>
    <el-form-item v-popover:popover label="题库适配器url">
        <el-input v-model="tiku_adapter"></el-input>
    </el-form-item>  
    
    </el-form>
    <div slot="footer" class="dialog-footer">
        <el-button size="mini" @click="show_setting = false">取消</el-button>
        <el-button size="mini" type="primary" @click="save_setting">保存</el-button>
    </div>
    </el-dialog>
        <div id="drag_auto_answer" class="drag_auto_answer-class">
            <el-main style="min-width: 321px;padding: 15px 0px 0px; z-index: 99999;">
                <el-row>
                    <el-form>
                        <el-form-item class="el-form-item-confim" label="请输入token"  style="margin-top: -20px" :prop="passw">
                            <el-input :type="passw" v-model="opt.token" placeholder="请输入内容" style="max-width: 130px" size="mini" ></el-input>
                            <el-button @click="btnClick(opt.token,'opt.confim')" size="mini" type="warning" @mousedown.native="passw = 'text'" @mouseup.native="passw = 'password'">确定</el-button>
                        </el-form-item>
                    </el-form>
                </el-row>
                <el-row style="margin-top: -20px;margin-bottom: 5px;display: flex">
                    <el-alert
                            style="display: block"
                            :title="tip"
                            :closable="false"
                            type="success">
                        <el-button v-if="need_jump" @click="btnClick(opt.jump,'opt.jump')" size="mini" type="info">跳过本题</el-button>
                        <el-button v-if="!hidden" @click="btnClick(opt.auto_jump,'opt.auto_jump')" size="mini" type="warning">{{opt.auto_jump ? '停止自动切换': '开启自动切换'}}</el-button>
                    </el-alert>
                </el-row>
                <el-row>
                    <el-button v-if="!hidden" @click="btnClick(opt.stop,'opt.stop')" size="mini" type="success">{{!opt.stop ? '暂停答题': '继续答题'}}</el-button>
                    <el-button @click="btnClick(opt.start_pay,'opt.start_pay')" size="mini" type="primary">{{opt.start_pay ?'关闭收费题库' : '开启收费题库'}}</el-button>
                    <el-button size="mini" type="danger"><a style="text-decoration:none;color: aliceblue" target="_blank" href="https://lyck6.cn/pay" >获取积分</a></el-button>
                    <el-button @click="show_setting = true" size="mini" type="info">更多设置</el-button>
                </el-row>

                <el-table size="mini" :data="tableData" style="width: 100%;margin-top: 5px" :row-class-name="tableRowClassName">
                    <el-table-column prop="index" label="题号" width="45"></el-table-column>
                    <el-table-column prop="question" label="问题" width="130">
                    <template slot-scope="scope">
                            <div style="font-size: 11px;" v-html="scope.row.question"></div>
                    </template>
                    </el-table-column>
                    <el-table-column prop="answer" label="答案" width="130">
                    <template slot-scope="scope">
                        <el-popover
                            v-if="scope.row.style === 'warning-row'"
                            placement="bottom-end"
                            title="相似答案"
                            width="240"
                            trigger="click">
                            <div style="font-size: 10px;height: 220px; overflow: auto;" v-html="scope.row.answer"></div>
                            <el-button slot="reference" size="small" type="danger">查看相关答案</el-button>
                        </el-popover>
                        <p v-if="scope.row.style != 'warning-row'" style="font-size: 11px;" v-html="scope.row.answer"></p>
                    </template>
                    </el-table-column>
                </el-table>
            </el-main>
        </div>
    </div>
    </body>
    <script>` + GM_getResourceText("Vue") + `</script>
    <script>` + GM_getResourceText("ElementUi") + `</script>
    <script>
    const tips = [
        '想要隐藏此搜索框,按键盘的⬆箭头,想要显示按⬇箭头哦',
        '想要永久隐藏此搜索框,按键盘的左箭头,想要显示在屏幕中央按右箭头哦',
        '想要自定义搜索框的长度可以更改代码设置参数:length',
        '脚本代码设置页预留多个自定义参数哦,可自行更改',
        '脚本已经适配tikuAdapter了,可点击【更多设置】配置请求URL'
    ]
        new Vue({
            el: '#app',
            data: function () {
                return {
                    tiku_adapter: '` + (GM_getValue("tiku_adapter") || "") + `',
                    search_delay: ` + (isNaN(parseInt(GM_getValue("search_delay"))) ? 2 : GM_getValue("search_delay")) + `,
                    gpt: String(` + (GM_getValue("gpt") || -1) + `),
                    show_setting: false,
                    hidden: false,
                    need_jump: false,
                    tip: tips[Math.floor(Math.random()*tips.length)],
                    opt:{
                        token: '` + GM_getValue("token") + `',
                        auto_jump: ` + GM_getValue("auto_jump") + `,
                        stop: false,
                        start_pay: ` + GM_getValue("start_pay") + `
                    },
                    input: '',
                    visible: false,
                    tableData: [],
                    passw:"password"
                }
            },
            created(){
                /**
                * 
                * @param type 消息类型
                * @param receiveParams 消息参数
                */
                window['vueDefinedProp'] = (type,receiveParams) => {
                    if (type === 'push'){
                        let length = this.tableData.length
                        this.tableData.push({index: length + 1,question: receiveParams.question,answer: receiveParams.answer,style:receiveParams.style})
                    }else if (type === 'clear'){
                        this.tableData = []
                    }else if (type === 'tip'){
                        if (receiveParams.type && receiveParams.type === 'jump'){
                            window.parent.postMessage({"type": 'jump'}, '*');
                        }else if (receiveParams.type && receiveParams.type === 'error'){
                            this.need_jump = true
                        }else if (receiveParams.type && receiveParams.type === 'hidden'){
                            this.hidden = true
                        }else if (receiveParams.type && receiveParams.type === 'stop'){
                            this.opt.stop = true
                        }
                        this.tip = receiveParams.tip
                    }else if (type === 'stop'){
                        this.opt.stop = receiveParams
                    }else if (type === 'start_pay'){
                        this.opt.start_pay = receiveParams
                    }else if (type === 'update'){
                        this.updateScript(receiveParams.v1,receiveParams.v2,receiveParams.href)
                    }
                }
            },
            methods: {
                save_setting(){
                    window.parent.postMessage({type: 'save_setting',search_delay:this.search_delay,gpt:this.gpt,tiku_adapter:this.tiku_adapter}, '*');
                    this.show_setting = false
                },
                updateScript(currentVersion,newVersion,href){
                this.$confirm('您当前版本为'+currentVersion+'最新版本为'+newVersion+',推荐下载更新', '脚本有更新', {
                    customClass: 'message-update-tip',
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                    }).then(() => {
                    window.open(href)
                    });
                setTimeout(()=>{
                    this.$msgbox.close();
                },5000)
                },
                tableRowClassName({row, rowIndex}) {
                    return row.style
                },
                btnClick(e,type){
                    if (type === 'opt.stop'){//暂停搜索
                        this.opt.stop = !this.opt.stop
                        this.tip = this.opt.stop? '已暂停搜索': '继续搜索'
                        window.parent.postMessage({type: 'stop',val:this.opt.stop}, '*');
                    }else if (type === 'opt.start_pay'){
                        window.parent.postMessage({type: 'start_pay',flag:!this.opt.start_pay}, '*');
                    }else if (type === 'opt.auto_jump'){//开启自动切换
                        this.opt.auto_jump = ! this.opt.auto_jump
                        window.parent.postMessage({type: 'auto_jump',flag:this.opt.auto_jump}, '*');
                    }else if (type === 'opt.jump'){//跳过本题
                        window.parent.postMessage({type: 'jump'}, '*');
                        this.need_jump = false
                    }else if (type === 'opt.confim'){
                        window.parent.postMessage({type: 'confim',token:e}, '*');
                    }
                }
            }
        })
    </script>
    </html>
    `;
            addModal2(html);
            checkVersion();
        }
        function addModal2(html, newPos, footerChildNode = false) {
            let headersNode = createContainer("hcsearche-modal-links");
            let adNode = top.document.createElement("img");
            let item = {
                url: GM_getResourceURL("Img")
            };
            const getAdList = GM_getValue("adList");
            if (getAdList) {
                const adList = JSON.parse(getAdList);
                let lastShown = GM_getValue("lastShown") || 0;
                item = adList[lastShown];
                GM_setValue("lastShown", (lastShown + 1) % adList.length);
                item.base64 = GM_getValue(item.hash);
            }
            adNode.setAttribute("src", item.base64);
            adNode.setAttribute("draggable", "false");
            adNode.setAttribute("style", "display: block;width:321px");
            if (item.click) {
                adNode.setAttribute("onmousedown", "let ts=new Date().getTime();this.onmouseup=()=>{if(new Date().getTime()-ts>100){return false;};window.open('" + item.click + "','_black');this.onmouseup=undefined}");
            }
            headersNode.appendChild(adNode);
            let iframeNode = top.document.createElement("iframe");
            iframeNode.id = "iframeNode";
            iframeNode.setAttribute("width", "100%");
            iframeNode.setAttribute("height", GLOBAL.length + "px");
            iframeNode.setAttribute("style", "height:" + GLOBAL.length + "px");
            iframeNode.setAttribute("frameborder", "0");
            iframeNode.srcdoc = html;
            let contentNode = createContainer("content-modal", [ headersNode, iframeNode ]);
            let modal = renderModal(contentNode);
            dragModel(modal);
            if (GM_getValue("hide")) {
                $("#model-id").hide();
                vm.hideTip();
            }
        }
        function renderModal(childElem, newPos) {
            return render(String.fromCharCode(rand(65, 90), rand(65, 90), rand(65, 90)) + rand(1, 100).toString(), "model-id", childElem);
        }
        function render(tagName, elemId, childElem, isFixed, newPos) {
            let doc = top.document;
            let elem = doc.getElementById(elemId);
            if (elem) {
                elem.innerHTML = "";
            } else {
                elem = doc.createElement(tagName);
                elem.id = elemId;
                doc.body.appendChild(elem);
            }
            let contentNode = createContainer(tagName + "-container", childElem);
            elem.appendChild(contentNode);
            elem.classList.add(elemId);
            elem.style.zIndex = "9999999";
            elem.style.position = "fixed";
            const pos = GM_getValue("pos") === undefined ? "30px,30px" : GM_getValue("pos");
            const posarr = pos.split(",");
            elem.style.left = posarr[0];
            elem.style.top = posarr[1];
            setTimeout(function() {
                elem.classList.add(elemId + "-show");
            }, 10);
            return elem;
        }
        const init$1 = async ($TiMu, select, wrap) => {
            let question = formatString(filterImg($TiMu.find(select.elements.question)));
            if (select.elements.type && select.elements.type.includes("input[name^=type]:eq")) {
                select.elements.type = "input[name^=type]:eq(" + GLOBAL.i + ")";
            }
            let data = {
                $item: $TiMu,
                question_text: $TiMu.find(select.elements.question).text(),
                question: question.length === 0 ? $TiMu.find(select.elements.question) : question.replace(/^\d+、/, "").replace(/[((](\d+\s?(\.\d+)?分)[))]$/, "").replace(/^((\d+.(\s+)?)?)[\[((【](.*?)[】))\]]/, "").trim(),
                $options: select.elements.$options ? $TiMu.find(select.elements.$options) : undefined,
                options: select.elements.options ? jQuery.map($TiMu.find(select.elements.options), function(val) {
                    return formatString(filterImg(val)).replace(/^[A-Ga-g][.、]/, "").trim();
                }) : undefined
            };
            if (select.elements.type) {
                const getType = getQuestionType($TiMu.find(select.elements.type).text());
                const val = $TiMu.find(select.elements.type).val();
                data.type = isNaN(getType) ? isNaN(val) ? val : parseInt(val) : getType;
            } else {
                data.type = defaultWorkTypeResolver(data.$options);
            }
            if (select.elements.answer) {
                data.answer = getAnswer(filterImg($TiMu.find(select.elements.answer)) || $TiMu.find(select.elements.answer).val(), data.options, data.type);
            }
            if (data && data.type === 3 && data.options.length === 0) {
                data.options = [ "正确", "错误" ];
            }
            const r = await wrap(data);
            if (typeof r === "boolean") return undefined;
            return data;
        };
        async function WorkerJSPlus(options) {
            if (GLOBAL.isMatch) return;
            const match = options.match ? typeof options.match === "boolean" ? options.match : options.match() : false;
            if (!match) return;
            GLOBAL.isMatch = true;
            if (options.hook && typeof options.hook === "function") {
                if (options.hook()) return;
            }
            const defaultFunc = () => {};
            const main = () => {
                setTimeout(() => {
                    showPanel();
                    if (options.init && typeof options.init === "function") {
                        if (options.init()) return;
                    }
                    const select = {
                        root: options.root,
                        elements: options.elements,
                        ignore_click: options.ignore_click
                    };
                    new WorkerJS(select, options.wrap ? options.wrap : defaultFunc, options.fill ? options.fill : defaultFunc, options.finished ? options.finished : defaultFunc, options.fillFinish ? options.fillFinish : defaultFunc).fillAnswer();
                }, GLOBAL.delay);
            };
            if (options.intv) {
                setIntervalFunc(options.intv, main);
            } else {
                main();
            }
        }
        var WorkerJS = function(select, searchHander, fillHander, onFinish = function(need_jump) {}, fillFinish = function() {}) {
            GLOBAL.index = 0;
            this.init = init$1;
            this.fillAnswer = async () => {
                let arr = jQuery(select.root);
                while (true) {
                    if (arr.length === 0) return;
                    await sleep((isNaN(parseInt(GM_getValue("search_delay"))) ? 2 : GM_getValue("search_delay")) * 1e3);
                    if (GLOBAL.stop) {
                        continue;
                    }
                    if (GLOBAL.index >= arr.length) {
                        let auto_jump = GM_getValue("auto_jump") === undefined || GM_getValue("auto_jump");
                        const next = await onFinish(auto_jump);
                        if (next) {
                            GLOBAL.index = 0;
                            setTimeout(this.fillAnswer, 300);
                        }
                        if (auto_jump) {
                            iframeMsg("tip", {
                                tip: "自动答题已完成,即将切换下一题"
                            });
                            next || setTimeout(() => {
                                iframeMsg("tip", {
                                    type: "hidden",
                                    tip: "自动答题已完成,请检查提交"
                                });
                            }, Math.max(GM_getValue("search_delay") || 2, 5) * 1e3);
                        } else {
                            iframeMsg("tip", {
                                tip: "自动答题已完成" + (arr.length === 1 ? ",请手动切换" : "请检查提交")
                            });
                        }
                        return true;
                    }
                    try {
                        let data = await this.init(jQuery(arr[GLOBAL.index++]), select, searchHander);
                        if (!data) {
                            GLOBAL.index--;
                            continue;
                        }
                        iframeMsg("tip", {
                            tip: "准备答第" + GLOBAL.index + "题"
                        });
                        const formatResult = await formatSearchAnswer(data);
                        const hookAnswer = data.answer && data.answer.length > 0 && GM_getValue("start_pay");
                        const formatAns = hookAnswer ? {
                            success: true,
                            num: formatResult.num,
                            list: [ data.answer ]
                        } : formatResult;
                        if (formatResult.answers || formatAns.success) {
                            iframeMsg("tip", {
                                tip: "准备填充答案," + (formatAns.num === -1 ? "免费题库不扣积分" : "剩余积分:" + formatAns.num)
                            });
                            const func = !hookAnswer && formatResult.answers ? defaultFillAnswer : defaultQuestionResolve;
                            let r = await func(hookAnswer ? formatAns.list : formatAns.answers ? formatResult.answers : formatAns.list, data, fillHander, select.ignore_click ? select.ignore_click : () => {
                                return false;
                            });
                            iframeMsg("push", {
                                index: GLOBAL.index,
                                question: r.question,
                                answer: r.ans,
                                style: r.style
                            });
                            GM_getValue("start_pay") && String(GM_getValue("token")).length === 10 && catchAnswer(r);
                            await fillFinish(r);
                        } else {
                            GLOBAL.index--;
                            iframeMsg("tip", {
                                tip: formatAns.msg
                            });
                        }
                    } catch (e) {
                        GLOBAL.index--;
                        console.table(e);
                        iframeMsg("tip", {
                            type: "error",
                            tip: location.host + "发生异常" + e + "请反馈至QQ群" + QQ_GROUP
                        });
                    }
                }
            };
        };
        // @thanks 特别感谢 qxin i 借鉴 网页限制解除(改) 开源地址 https://greasyfork.org/zh-CN/scripts/28497
        function init() {
            rule = rwl_userData.rules.rule_def;
            hook_eventNames = rule.hook_eventNames.split("|");
            unhook_eventNames = rule.unhook_eventNames.split("|");
            eventNames = hook_eventNames.concat(unhook_eventNames);
            if (rule.dom0) {
                setInterval(clearLoop, 10 * 1e3);
                setTimeout(clearLoop, 1500);
                window.addEventListener("load", clearLoop, true);
                clearLoop();
            }
            if (rule.hook_addEventListener) {
                EventTarget.prototype.addEventListener = addEventListener;
                document.addEventListener = addEventListener;
                if (hasFrame) {
                    for (let i = 0; i < hasFrame.length; i++) {
                        hasFrame[i].contentWindow.document.addEventListener = addEventListener;
                    }
                }
            }
            if (rule.hook_preventDefault) {
                Event.prototype.preventDefault = function() {
                    if (hook_eventNames.indexOf(this.type) < 0) {
                        Event_preventDefault.apply(this, arguments);
                    }
                };
                if (hasFrame) {
                    for (let i = 0; i < hasFrame.length; i++) {
                        hasFrame[i].contentWindow.Event.prototype.preventDefault = function() {
                            if (hook_eventNames.indexOf(this.type) < 0) {
                                Event_preventDefault.apply(this, arguments);
                            }
                        };
                    }
                }
            }
            if (rule.hook_set_returnValue) {
                Event.prototype.__defineSetter__("returnValue", function() {
                    if (this.returnValue !== true && hook_eventNames.indexOf(this.type) >= 0) {
                        this.returnValue = true;
                    }
                });
            }
        }
        function addEventListener(type, func, useCapture) {
            var _addEventListener = this === document ? document_addEventListener : EventTarget_addEventListener;
            if (hook_eventNames.indexOf(type) >= 0) {
                _addEventListener.apply(this, [ type, returnTrue, useCapture ]);
            } else if (unhook_eventNames.indexOf(type) >= 0) {
                var funcsName = storageName + type + (useCapture ? "t" : "f");
                if (this[funcsName] === undefined) {
                    this[funcsName] = [];
                    _addEventListener.apply(this, [ type, useCapture ? unhook_t : unhook_f, useCapture ]);
                }
                this[funcsName].push(func);
            } else {
                _addEventListener.apply(this, arguments);
            }
        }
        function clearLoop() {
            rule = clear();
            var elements = getElements();
            for (var i in elements) {
                for (var j in eventNames) {
                    var name = "on" + eventNames[j];
                    if (Object.prototype.toString.call(elements[i]) == "[object String]") {
                        continue;
                    }
                    if (elements[i][name] !== null && elements[i][name] !== onxxx) {
                        if (unhook_eventNames.indexOf(eventNames[j]) >= 0) {
                            elements[i][storageName + name] = elements[i][name];
                            elements[i][name] = onxxx;
                        } else {
                            elements[i][name] = null;
                        }
                    }
                }
            }
            document.onmousedown = function() {
                return true;
            };
        }
        function returnTrue(e) {
            return true;
        }
        function unhook_t(e) {
            return unhook(e, this, storageName + e.type + "t");
        }
        function unhook_f(e) {
            return unhook(e, this, storageName + e.type + "f");
        }
        function unhook(e, self, funcsName) {
            var list = self[funcsName];
            for (var i in list) {
                list[i](e);
            }
            e.returnValue = true;
            return true;
        }
        function onxxx(e) {
            var name = storageName + "on" + e.type;
            this[name](e);
            e.returnValue = true;
            return true;
        }
        function getElements() {
            var elements = Array.prototype.slice.call(document.getElementsByTagName("*"));
            elements.push(document);
            var frames = document.querySelectorAll("frame");
            if (frames) {
                hasFrame = frames;
                var frames_element;
                for (let i = 0; i < frames.length; i++) {
                    frames_element = Array.prototype.slice.call(frames[i].contentWindow.document.querySelectorAll("*"));
                    elements.push(frames[i].contentWindow.document);
                    elements = elements.concat(frames_element);
                }
            }
            return elements;
        }
        var settingData = {
            status: 1,
            version: .1,
            message: "",
            positionTop: "0",
            positionLeft: "0",
            positionRight: "auto",
            addBtn: false,
            connectToTheServer: false,
            waitUpload: [],
            currentURL: "null",
            shortcut: 3,
            rules: {},
            data: []
        };
        var rwl_userData = null;
        var rule = null;
        var hasFrame = false;
        var storageName = "storageName";
        var hook_eventNames, unhook_eventNames, eventNames;
        var EventTarget_addEventListener = EventTarget.prototype.addEventListener;
        var document_addEventListener = document.addEventListener;
        var Event_preventDefault = Event.prototype.preventDefault;
        rwl_userData = GM_getValue("rwl_userData");
        if (!rwl_userData) {
            rwl_userData = settingData;
        }
        for (let value in settingData) {
            if (!rwl_userData.hasOwnProperty(value)) {
                rwl_userData[value] = settingData[value];
                GM_setValue("rwl_userData", rwl_userData);
            }
        }
        // @thanks 特别感谢 wyn大佬 提供的 字典匹配表 原作者 wyn665817@163.com 开源地址 https://scriptcat.org/script-show-page/432/code
        function removeF() {
            var $tip = $("style:contains(font-cxsecret)");
            if (!$tip.length) return;
            var font = $tip.text().match(/base64,([\w\W]+?)'/)[1];
            font = Typr.parse(base64ToUint8Array(font))[0];
            var table = JSON.parse(GM_getResourceText("Table"));
            var match = {};
            for (var i = 19968; i < 40870; i++) {
                $tip = Typr.U.codeToGlyph(font, i);
                if (!$tip) continue;
                $tip = Typr.U.glyphToPath(font, $tip);
                $tip = MD5(JSON.stringify($tip)).slice(24);
                match[i] = table[$tip];
            }
            $(".font-cxsecret").html(function(index, html) {
                $.each(match, function(key, value) {
                    key = String.fromCharCode(key);
                    key = new RegExp(key, "g");
                    value = String.fromCharCode(value);
                    html = html.replace(key, value);
                });
                return html;
            }).removeClass("font-cxsecret");
            function base64ToUint8Array(base64) {
                var data = window.atob(base64);
                var buffer = new Uint8Array(data.length);
                for (var i = 0; i < data.length; ++i) {
                    buffer[i] = data.charCodeAt(i);
                }
                return buffer;
            }
        }
        function start() {
            try {
                removeF();
            } catch (e) {}
            try {
                init();
            } catch (e) {}
        }
        WorkerJSPlus({
            name: "学习通作业",
            match: location.pathname === "/mooc2/work/dowork" || location.pathname === "/mooc-ans/mooc2/work/dowork",
            root: ".questionLi",
            elements: {
                question: "h3",
                options: ".stem_answer .answerBg .answer_p, .textDIV, .eidtDiv",
                $options: ".stem_answer .answerBg, .textDIV, .eidtDiv",
                type: "input[type^=hidden]:eq(0)"
            },
            wrap: obj => {
                obj.question = obj.question.replace(obj.$item.find(".colorShallow").text(), "").replace(/^(\d+\.\s)/, "");
            },
            ignore_click: $item => {
                return Boolean($item.find(".check_answer,.check_answer_dx").length);
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2 || type === 5) {
                    UE$1.getEditor($option.find("textarea").attr("name")).setContent(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "超星旧版考试",
            match: (location.pathname === "/exam/test/reVersionTestStartNew" || location.pathname === "/exam-ans/exam/test/reVersionTestStartNew") && !location.href.includes("newMooc=true"),
            root: ".TiMu",
            elements: {
                question: ".Cy_TItle .clearfix",
                options: ".Cy_ulTop .clearfix",
                $options: ":radio, :checkbox, .Cy_ulTk textarea",
                type: "[name^=type]:not([id])"
            },
            ignore_click: $item => {
                return $item.get(0).checked;
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2 || type === 5) {
                    UE$1.getEditor($option.attr("name")).setContent(answer);
                }
            },
            finished: auto_jump => {
                auto_jump && setInterval(function() {
                    const btn = $(".saveYl:contains(下一题)").offset();
                    var mouse = document.createEvent("MouseEvents"), arr = [ btn.left + Math.ceil(Math.random() * 80), btn.top + Math.ceil(Math.random() * 26) ];
                    mouse.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, arr[0], arr[1], false, false, false, false, 0, null);
                    _self.event = $.extend(true, {}, mouse);
                    delete _self.event.isTrusted;
                    _self.getTheNextQuestion(1);
                }, Math.ceil(GLOBAL.fillAnswerDelay * Math.random()) * 2);
            }
        });
        WorkerJSPlus({
            name: "超星章节测验",
            match: location.pathname === "/work/doHomeWorkNew" || location.pathname === "/mooc-ans/work/doHomeWorkNew",
            init: start,
            root: ".clearfix .TiMu",
            elements: {
                question: ".Zy_TItle .clearfix",
                options: "ul:eq(0) li .after",
                $options: "ul:eq(0) li :radio,:checkbox,textarea,.num_option_dx,.num_option",
                type: "input[name^=answertype]"
            },
            ignore_click: $item => {
                if ($item.is("input")) {
                    return $item.get(0).checked;
                }
                return $item.attr("class").includes("check_answer");
            },
            fill: async (type, answer, $option) => {
                if (type === 4 || type === 2 || type === 5) {
                    UE$1.getEditor($option.attr("name")).setContent(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "超星新版考试",
            match: () => {
                const cxSinglePage = (location.pathname === "/exam/test/reVersionTestStartNew" || location.pathname === "/exam-ans/exam/test/reVersionTestStartNew" || location.pathname === "/mooc-ans/exam/test/reVersionTestStartNew") && location.href.includes("newMooc=true");
                const cxAll = location.pathname === "/mooc2/exam/preview" || location.pathname === "/exam-ans/mooc2/exam/preview" || location.pathname === "/mooc-ans/mooc2/exam/preview";
                return cxSinglePage || cxAll;
            },
            root: ".questionLi",
            elements: {
                question: "h3 div",
                options: ".answerBg .answer_p, .textDIV, .eidtDiv",
                $options: ".answerBg, .textDIV, .eidtDiv",
                type: "input[name^=type]:eq(" + GLOBAL.i + ")"
            },
            ignore_click: $item => {
                return Boolean($item.find(".check_answer,.check_answer_dx").length);
            },
            hook: () => {
                GLOBAL.i = Number((location.pathname === "/exam/test/reVersionTestStartNew" || location.pathname === "/exam-ans/exam/test/reVersionTestStartNew" || location.pathname === "/mooc-ans/exam/test/reVersionTestStartNew") && location.href.includes("newMooc=true"));
            },
            wrap: obj => {
                if (obj.type === 6) {
                    obj.type = 4;
                }
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2 || type === 5) {
                    const name = $option.find("textarea").attr("name");
                    UE$1.getEditor(name).setContent(answer);
                    if (GLOBAL.i === 0) {
                        console.log("#" + name.replace("answerEditor", "save_"));
                        $("#" + name.replace("answerEditor", "save_")).click();
                    }
                }
            },
            finished: a => {
                a && $('.nextDiv .jb_btn:contains("下一题")').click();
            }
        });
        WorkerJSPlus({
            name: "超星随堂测验",
            match: location.pathname.includes("/page/quiz/stu/answerQuestion"),
            root: ".question-item",
            elements: {
                question: ".topic-txt",
                options: ".topic-option-list",
                $options: ".topic-option-list input",
                type: "input[class^=que-type]"
            },
            ignore_click: $item => {
                return Boolean($item.find(".check_answer,.check_answer_dx").length);
            },
            wrap: obj => {
                if (obj.type === 16) {
                    obj.type = 3;
                }
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.val(answer);
                }
            }
        });
        function JSONParseHook(func) {
            const parse = JSON.parse;
            JSON.parse = function(...args) {
                const o = parse.call(this, ...args);
                func(o);
                return o;
            };
        }
        function hookZhiHuiShuWork(o, arr) {
            function format(item) {
                let options = [];
                let options_id;
                if (item.questionOptions && item.questionOptions.length) {
                    options = item.questionOptions.map(o => {
                        return formatString(o.content);
                    });
                    options_id = item.questionOptions.map(o => {
                        return o.id;
                    });
                }
                return {
                    qid: item.id,
                    question: formatString(item.name),
                    type: getQuestionType(item.questionType.name),
                    options_id: options_id,
                    options: options
                };
            }
            if (o.rt && o.rt.examBase && o.rt.examBase.workExamParts.length > 0) {
                GLOBAL.content = o.rt;
                GLOBAL.json = o.rt.examBase.workExamParts.map(part => {
                    return part.questionDtos.map(item => {
                        if ("阅读理解(选择)/完型填空" === item.questionType.name || "听力训练" === item.questionType.name || !(item.questionType.name.includes("填空") || item.questionType.name.includes("问答")) && item.questionChildrens && item.questionChildrens.length > 0) {
                            return item.questionChildrens.map(i => {
                                console.log(format(i));
                                return format(i);
                            }).flat();
                        } else {
                            return format(item);
                        }
                    });
                }).flat();
            } else if (o.rt && Object.keys(o.rt).length > 0 && !isNaN(Object.keys(o.rt)[0])) {
                GLOBAL.img = o.rt;
            }
        }
        WorkerJSPlus({
            name: "智慧树作业/考试",
            match: !location.href.includes("checkHomework") && location.host.includes("zhihuishu") && (location.pathname === "/stuExamWeb.html" || location.href.includes("/webExamList/dohomework/") || location.href.includes("/webExamList/doexamination/")),
            root: ".examPaper_subject",
            elements: {
                question: ".subject_describe div,.smallStem_describe p",
                options: ".subject_node .nodeLab .node_detail",
                $options: ".subject_node .nodeLab .node_detail",
                type: ".subject_type span:first-child"
            },
            hook: () => {
                JSONParseHook(hookZhiHuiShuWork);
            },
            intv: () => {
                return $(".answerCard").length;
            },
            wrap: obj => {
                Object.assign(obj, GLOBAL.json[GLOBAL.index - 1]);
                console.log(obj);
                if ($(".yidun_popup").hasClass("yidun_popup--light")) {
                    iframeMsg("tip", {
                        type: "stop",
                        tip: "答题暂停,请自行通过验证"
                    });
                    GLOBAL.stop = true;
                }
            },
            ignore_click: $item => {
                return $item.hasClass("onChecked");
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    UE$1.getEditor($option.find("textarea").attr("name")).setContent(answer);
                }
            },
            finished: async () => {
                vm.zhihuishuSaveTip();
                const len = $(".answerCard_list li").length;
                for (let i = 0; i < len; i++) {
                    await sleep(500);
                    try {
                        $(".answerCard_list1 li").eq(i).click();
                        await sleep(300);
                        $(".el-button:contains(下一题)").click();
                    } catch (e) {
                        $(".el-button:contains(保存)").click();
                    }
                    const process = ((i + 1) / len * 100).toFixed(0);
                    $("#gs_p").val(process);
                    $("#gs_text").text(process + "%");
                }
                if (top.document.querySelector("#gs_p").value == 100) {
                    top.document.querySelector("#zhihuishuSaveTip").remove();
                }
            },
            fillFinish: () => {
                $(".answerCard_list li").eq(GLOBAL.index - 1).click();
                $(".el-button:contains(下一题)").click();
            }
        });
        WorkerJSPlus({
            name: "智慧树学分课作业",
            match: location.href.includes("/atHomeworkExam/stu/homeworkQ/exerciseList") || location.href.includes("atHomeworkExam/stu/examQ/examexercise"),
            root: ".questionBox:eq(0)",
            elements: {
                question: ".questionContent",
                options: ".optionUl label .el-radio__label,.el-checkbox__label",
                $options: ".optionUl label",
                type: ".questionTit"
            },
            intv: () => {
                return $(".answerCard").length || $(".questionTit").length;
            },
            wrap: async obj => {
                obj.options = obj.options.map(item => {
                    return formatString(item.replaceAll(/^[a-zA-Z][.|\s+]/g, ""));
                });
                if ($(".yidun_popup").hasClass("yidun_popup--light")) {
                    iframeMsg("tip", {
                        type: "stop",
                        tip: "答题暂停,请自行通过验证"
                    });
                    GLOBAL.stop = true;
                }
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            finished: () => {
                if ($(".Nextbtndiv .Topicswitchingbtn-gray:contains(下一题)").hasClass("Topicswitchingbtn-gray")) return false;
                $(".Topicswitchingbtn:contains(下一题)").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "智慧树学分课考试",
            match: location.host === "studentexambaseh5.zhihuishu.com",
            root: ".ques-detail",
            elements: {
                question: ".questionName .centent-pre",
                options: ".radio-view li  .preStyle,.checkbox-views label .preStyle",
                $options: ".radio-view li,.checkbox-views label",
                type: ".letterSortNum"
            },
            intv: () => {
                return $(".questionContent").length;
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            wrap: obj => {
                obj.options = obj.options.map(item => {
                    return formatString(item.replaceAll(/^[a-zA-Z][.|\s+]/g, ""));
                });
                if ($(".yidun_popup").hasClass("yidun_popup--light")) {
                    iframeMsg("tip", {
                        type: "stop",
                        tip: "答题暂停,请自行通过验证"
                    });
                    GLOBAL.stop = true;
                }
                if (obj.type === 15) {
                    obj.question = formatString($(".centent-son-pre").text());
                    obj.type = 1;
                }
            },
            finished: auto_jump => {
                if (auto_jump) {
                    const btn = $(".next-topic:contains(下一题)");
                    btn.click();
                    return !btn.hasClass("noNext");
                }
            }
        });
        WorkerJSPlus({
            match: location.href.includes("checkHomework") && location.host.includes("zhihuishu"),
            hook: () => {
                JSONParseHook(hookZhiHuiShuWork);
            },
            init: () => {
                R({
                    type: 2,
                    content: GLOBAL.content,
                    img: GLOBAL.img
                });
            }
        });
        GLOBAL.timeout = 10 * 1e3;
        function uploadAnswer(data) {
            const arr2 = division(data, 100);
            for (let arr2Element of arr2) {
                GM_xmlhttpRequest({
                    method: "POST",
                    url: "https://lyck6.cn/pcService/api/uploadAnswer",
                    headers: {
                        "Content-Type": "application/json;charset=utf-8"
                    },
                    data: JSON.stringify(arr2Element),
                    timeout: GLOBAL.timeout
                });
            }
        }
        function uploadAnswerToPlat(data, plat) {
            const arr2 = division(data, 100);
            for (let arr2Element of arr2) {
                GM_xmlhttpRequest({
                    method: "POST",
                    url: "https://lyck6.cn/collect-service/v1/uploadAnswerToPlat?plat=" + plat,
                    headers: {
                        "Content-Type": "application/json;charset=utf-8"
                    },
                    data: JSON.stringify(arr2Element),
                    timeout: GLOBAL.timeout
                });
            }
        }
        WorkerJSPlus({
            name: "职教云考试",
            match: location.pathname === "/exam/examflow_index.action",
            intv: () => {
                return $(".divQuestionTitle").length;
            },
            init: () => {
                instance.get("/api/init/zjy?id=" + unsafeWindow.examRecordId);
            },
            root: ".q_content",
            elements: {
                question: ".divQuestionTitle",
                options: ".questionOptions .q_option",
                $options: ".questionOptions .q_option div,div[id^=_baidu_editor_]"
            },
            ignore_click: $item => {
                return $($item).attr("class") === "checkbox_on";
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.next().attr("answertype"));
                obj.type = obj.type ? obj.type : defaultWorkTypeResolver(obj.$options);
                obj.options = $.map(obj.options, val => {
                    return formatString(val.replace(/[A-G][.|\\.\s+]/, "")).trim();
                });
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2 || type === 5) {
                    UE$1.getEditor($option.attr("id")).setContent(answer);
                }
            },
            finished: async () => {
                if ($(".paging_next").attr("style").includes("block") || !$(".paging_next").attr("style").includes("none")) {
                    $(".paging_next").click();
                    await sleep(1e3);
                    return true;
                }
            }
        });
        WorkerJSPlus({
            name: "职教云测验",
            match: location.pathname === "/study/directory/dir_course.html",
            intv: () => {
                return $(".panel_item").length;
            },
            root: ".panel_item .panel_item",
            elements: {
                question: ".preview_cm .preview_stem",
                options: ".preview_cm ul li span:last-child",
                $options: ".preview_cm ul li input"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".panel_title").text());
                obj.options = obj.options.map(i => {
                    return i.trim().replace(/^[abAB]\)\s+/, "").replace(/^[A-Za-z]\s+/, "").trim();
                });
            },
            ignore_click: $item => {
                return $item.attr("checked") === "checked";
            }
        });
        WorkerJSPlus({
            name: "职教云MOOC",
            match: location.pathname === "/study/homework/do.html" || location.pathname === "/study/workExam/testWork/preview.html" || location.pathname === "/study/onlineExam/preview.html" || location.pathname === "/study/workExam/homeWork/preview.html" || location.pathname === "/study/workExam/onlineExam/preview.html",
            root: ".e-q-r",
            elements: {
                question: ".e-q-q .ErichText",
                options: ".e-a-g li",
                $options: ".e-a-g li",
                type: ".quiz-type"
            },
            ignore_click: $item => {
                return $item.hasClass("checked");
            },
            wrap: obj => {
                if (obj.type === "A1A2题") {
                    obj.type = 1;
                }
                obj.question = obj.question.replace(/<img src="https:\/\/cdn-zjy.icve.com.cn\/common\/images\/question_button\/blankspace(\d+).gif">/gi, "");
                obj.options = obj.options.map(i => {
                    return i.trim().replace(/^[abAB]\)\s+/, "").replace(/^[A-Za-z]\s+/, "").trim();
                });
            }
        });
        function parseIcve(questions) {
            return questions.map(item => {
                const options = item.Selects.map(opt => {
                    return formatString(opt);
                });
                const type = getQuestionType(item.ACHType.QuestionTypeName);
                const answer = item.Answers.map(key => {
                    if (type === 0 || type === 1) {
                        return options[key.charCodeAt() - 65];
                    } else if (type === 3) {
                        return key === "1" ? "正确" : "错误";
                    }
                });
                const answerKey = type === 0 || type === 1 ? item.Answers : answer;
                return {
                    id: item.Id,
                    question: item.ContentText,
                    answerKey: answerKey,
                    options: type === 3 ? [ "正确", "错误" ] : options,
                    answer: answer,
                    type: type
                };
            });
        }
        WorkerJSPlus({
            name: "资源库 WWW开头",
            match: location.pathname === "/study/works/works.html" || location.pathname === "/study/exam/exam.html",
            root: ".questions",
            elements: {
                question: ".preview_stem",
                options: "li .preview_cont",
                $options: "li input",
                type: "input:hidden"
            },
            hook: () => {
                JSONParseHook(o => {
                    if (location.pathname === "/study/works/works.html") {
                        if (o.paper) {
                            GLOBAL.json = parseIcve(o.paper.PaperQuestions);
                            uploadAnswer(GLOBAL.json);
                        }
                    } else if (location.pathname === "/study/exam/exam.html") {
                        if (o.array) {
                            GLOBAL.json = parseIcve(o.array.map(item => {
                                return item.Questions;
                            }).flat());
                            uploadAnswer(GLOBAL.json);
                        }
                    }
                });
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                function get_element(id) {
                    for (let jsonElement of GLOBAL.json) {
                        if (jsonElement.id === id) {
                            return jsonElement;
                        }
                    }
                }
                const ele = get_element(obj.$item.find("input:hidden").val());
                obj.question = ele.question;
                obj.answer = ele.answerKey ? ele.answerKey : ele.answer;
                obj.type = ele.type;
                obj.options = ele.options;
                console.log(obj);
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    UE$1.getEditor($option.attr("name")).setContent(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "智慧职教 作业/考试",
            match: location.host.includes("zjy2.icve.com.cn"),
            intv: () => {
                return $(".subjectDet").length;
            },
            root: ".subjectDet",
            elements: {
                question: "h5,.titleT .htmlP",
                options: ".optionList .el-radio__label,.el-checkbox__label",
                $options: ".optionList input",
                type: ".titleTwo,.xvhao"
            },
            hook: () => {
                const parse = ques => {
                    return ques.map(i => {
                        const options = [];
                        const answer = [];
                        if (i.typeId === "3") {
                            answer.push(i.optionAnswer === "1" ? "正确" : "错误");
                        } else if (/[12]/.test(i.typeId)) {
                            options.push(...JSON.parse(i.dataJson).map(i => {
                                if (i.IsAnswer) {
                                    answer.push(formatString(i.Content));
                                }
                                return formatString(i.Content);
                            }));
                        }
                        return {
                            options: options,
                            qid: i.id,
                            answer: answer
                        };
                    });
                };
                JSONParseHook(o => {
                    if (o.name && o.questions && o.totalScore) {
                        GLOBAL.json = parse(o.questions);
                    } else if (o.data && o.data.questions) {
                        GLOBAL.json = parse(o.data.questions);
                    }
                });
            },
            ignore_click: $item => {
                return $($item).parent().attr("class") === "is-checked";
            },
            wrap: obj => {
                function findAnswer(id) {
                    for (let jsonElement of GLOBAL.json) {
                        if (jsonElement.qid === id) {
                            return jsonElement.answer;
                        }
                    }
                }
                obj.answer = findAnswer(obj.$item.attr("id"));
            }
        });
        function parseYkt(problems) {
            return problems.map(item => {
                const question = formatString(item.Body);
                const type = getQuestionType(item.TypeText);
                const options = [];
                const answer = [];
                if (type <= 1) {
                    options.push(...item.Options.sort((a, b) => {
                        return a.key.charCodeAt(0) - b.key.charCodeAt(0);
                    }).map(item => {
                        return formatString(item.value);
                    }));
                    if (item.Answer) {
                        if (Array.isArray(item.Answer)) {
                            answer.push(...item.Answer);
                        } else {
                            answer.push(...item.Answer.split(""));
                        }
                    }
                } else if (type === 3 && item.Answer && item.Answer.length === 1) {
                    answer.push(item.Answer[0].replace("true", "正确").replace("false", "错误"));
                }
                return {
                    answer: answer,
                    options: options,
                    type: type,
                    qid: item.problem_id,
                    question: question
                };
            });
        }
        function parsehnzkwText(problems) {
            return problems.map(item => {
                const type = item.flag === 1 ? 2 : item.flag === 0 ? 0 : item.flag === 4 ? 1 : item.flag === 3 ? 3 : undefined;
                let answer = [];
                let options = [];
                if (type === 2) {
                    answer.push(item.answer);
                    return {
                        question: formatString(item.content),
                        options: options,
                        type: type,
                        answer: answer
                    };
                } else if (type === 0) {
                    for (let subjectOption of item.optionss) {
                        const opt = formatString(subjectOption);
                        options.push(opt);
                    }
                    if (type === 1) {
                        item.answer.split("|").map(i => {
                            answer.push(options[i.toUpperCase().charCodeAt(0) - 65]);
                        });
                    } else {
                        answer.push(options[item.answer.toUpperCase().charCodeAt(0) - 65]);
                    }
                    return {
                        question: formatString(item.content),
                        options: options,
                        type: type,
                        answer: answer
                    };
                } else if (type === 3) {
                    for (let subjectOption of item.selectOption) {
                        const opt = formatString(subjectOption);
                        options.push(opt);
                    }
                    answer.push(item.answer);
                    return {
                        question: formatString(item.content),
                        options: options,
                        type: type,
                        answer: answer
                    };
                }
            });
        }
        function parseDanWei(pro) {
            return pro.map(i => {
                const type = getQuestionType(i.ttop010);
                const question = i.ttop011;
                const options = [];
                const answer = [];
                if (type === 0 || type === 1 || type === 3) {
                    options.push(...i.ttop018.length > 0 ? i.ttop018.split("$$") : [ "正确", "错误" ]);
                    answer.push(...i.ttop022.split("").map(item => {
                        return options[item.charCodeAt(0) - 65];
                    }));
                } else if (type === 2 || type === 4) {
                    answer.push(...i.ttop021.split("$$"));
                }
                return {
                    question: question,
                    type: type,
                    answer: answer,
                    options: options
                };
            }).filter(i => i);
        }
        function parseYxbyunExam(problems) {
            return problems.map(item => {
                const type = getQuestionType(item.bigName);
                return item.smallContent.map(item => {
                    let answer = [];
                    let options = [];
                    if (type === 2) {
                        answer.push(item.answer);
                        return {
                            question: formatString(item.content),
                            options: options,
                            type: type,
                            answer: answer
                        };
                    } else if (type === 0 || type === 3 || type === 1) {
                        let answer = [];
                        let options = [];
                        for (let subjectOption of item.question.optionList) {
                            const opt = formatString(subjectOption.questionContent);
                            options.push(opt);
                        }
                        if (type === 1) {
                            item.question.questionAnswer.split(",").map(i => {
                                answer.push(options[i.toUpperCase().charCodeAt(0) - 65]);
                            });
                        } else {
                            answer.push(options[item.question.questionAnswer.toUpperCase().charCodeAt(0) - 65]);
                        }
                        return {
                            question: formatString(item.question.questionTitle),
                            options: options,
                            type: type,
                            answer: answer
                        };
                    }
                });
            });
        }
        WorkerJSPlus({
            name: "雨课堂旧版考试",
            match: location.pathname.includes("/v/quiz/quiz_result"),
            intv: () => {
                return $("#cover").attr("style").includes("display: none;");
            },
            root: ".problem_item",
            elements: {
                question: ".notBullet:eq(0)",
                options: ".notBullet:gt(0)",
                $options: ".problembullet"
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            wrap: async obj => {
                const $item = obj.$item;
                const tmp = $item.find(".ptype").clone();
                tmp.children().remove();
                obj.type = getQuestionType(tmp.text());
                obj.question = await yuketangOcr(obj.question.attr("data-background"));
                if (obj.$options.length === 2) {
                    obj.options = [ "正确", "错误" ];
                } else {
                    const opt = [];
                    for (const tmpElement of $item.find(".notBullet:gt(0)")) {
                        opt.push(await yuketangOcr(jQuery(tmpElement).attr("data-background")));
                    }
                    obj.options = opt;
                }
            }
        });
        WorkerJSPlus({
            name: "学堂在线",
            match: location.host === "www.xuetangx.com" && location.pathname.includes("/exercise/"),
            intv: () => {
                return $(".answer").length;
            },
            root: ".content:eq(0)",
            elements: {
                question: ".question .fuwenben",
                options: ".question .leftQuestion .leftradio > span:last-child",
                $options: ".question .leftradio",
                type: ".question .title"
            },
            ignore_click: $item => {
                return $item.find(".radio_jqq").hasClass("active");
            },
            wrap: obj => {
                if (obj.type === 3) {
                    obj.$options = $(".answerList .radio_jqq");
                }
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    UE.getEditor($option.find("textarea")).setContent(answer);
                }
            },
            finished: () => {
                const $right = $(".tabbar").find(".right");
                $right.click();
                return !$right.hasClass("unselect");
            }
        });
        WorkerJSPlus({
            name: "雨课堂新版考试",
            match: location.host.includes("yuketang.cn") && location.pathname.includes("/result/"),
            hook: () => {
                JSONParseHook(async o => {
                    if (o.data && o.data.problems && o.data.problems.length > 0) {
                        uploadAnswerToPlat(parseYkt(o.data.problems), 50);
                    }
                });
            }
        });
        WorkerJSPlus({
            name: "雨课堂新版考试",
            match: (location.host === "examination.xuetangx.com" || location.host === "changjiang-exam.yuketang.cn") && (location.pathname.includes("/exam/") || location.pathname.includes("/cover/")),
            hook: () => {
                JSONParseHook(async o => {
                    if (o.data && o.data.problems && o.data.problems.length > 0) {
                        GLOBAL.json = parseYkt(o.data.problems);
                    }
                });
                const intv = setInterval(() => {
                    try {
                        top.document.querySelector(".exam").__vue__.handleHangUpTip = function() {};
                        const querySelector = top.document.querySelector;
                        top.document.querySelector = function(...args) {
                            if (args[0] === "#model-id") return false;
                            return querySelector.call(this, ...args);
                        };
                        const getElementById = top.document.getElementById;
                        top.document.getElementById = function(...args) {
                            if (args[0] === "model-id") return false;
                            return getElementById.call(this, ...args);
                        };
                        clearInterval(intv);
                    } catch (e) {}
                }, 100);
            },
            intv: () => {
                return jQuery(".subject-item").length;
            },
            root: ".exam-main--body .subject-item",
            elements: {
                question: ".item-body h4,.item-body span:eq(0)",
                options: ".item-body ul li",
                $options: ".item-body ul label, .blank-item-dynamic, .edui-editor-iframeholder",
                type: ".item-type"
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            wrap: obj => {
                obj.options = obj.type === 3 ? [ "正确", "错误" ] : obj.options.map(i => {
                    return i.replace(/^[A-G]\s/, "");
                });
                try {
                    obj.qid = GLOBAL.json[GLOBAL.index - 1].qid;
                    obj.plat = 50;
                } catch (e) {
                    console.log(e);
                }
            }
        });
        WorkerJSPlus({
            name: "雨课堂新版作业,需要一个一个点下一题的",
            match: location.pathname.includes("/v2/web/cloud/student/exercise/"),
            hook: () => {
                async function parseYkt(problems, font) {
                    const res = problems.map(i => {
                        const type = getQuestionType(i.content.TypeText);
                        const question = i.content.Body;
                        let options = [];
                        if (type <= 1) {
                            options = i.content.Options;
                        } else if (type === 3) {
                            options = i.content.Options.map(item => {
                                return item.key.replace("true", "正确").replace("false", "错误");
                            });
                        }
                        return {
                            qid: i.problem_id,
                            question: question,
                            type: type,
                            options: options,
                            user: i.user
                        };
                    }).filter(i => i);
                    for (const item of res) {
                        item.question = await getEncryptString(item.question, font);
                        const answerArray = [];
                        if (item.type <= 1) {
                            const optionsArray = [];
                            for (const itemElement of item.options) {
                                const opt = await getEncryptString(itemElement.value, font);
                                if (item.user && item.user.is_show_answer && item.user.answer.includes(itemElement.key)) {
                                    answerArray.push(opt);
                                }
                                optionsArray.push(opt);
                            }
                            item.options = optionsArray;
                        } else if (item.type === 3) {
                            if (item.user && item.user.is_show_answer && item.user.answer.length === 1) {
                                answerArray.push(item.user.answer[0].replace("true", "正确").replace("false", "错误"));
                            }
                        }
                        delete item.user;
                        item.answer = answerArray;
                    }
                    return res;
                }
                JSONParseHook(async o => {
                    if (o.data && o.data.problems) {
                        GLOBAL.json = await parseYkt(o.data.problems, o.data.font);
                        uploadAnswerToPlat(GLOBAL.json, 50);
                    }
                });
            },
            intv: () => {
                return jQuery(".subject-item").length;
            },
            root: ".container-problem .subject-item",
            elements: {
                question: ".problem-body",
                options: "label .radioText,.checkboxText",
                $options: "ul input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: async obj => {
                const index = jQuery(".item-type").text().match(/(\d+)\./)[1];
                Object.assign(obj, GLOBAL.json[parseInt(index) - 1]);
                obj.plat = 50;
            },
            finished: need_jump => {
                if ($(".el-button--text:contains(下一题)").hasClass("is-disabled")) return false;
                need_jump && setTimeout(() => {
                    $(".el-button--text:contains(下一题)").click();
                }, GLOBAL.fillAnswerDelay);
                return need_jump;
            }
        });
        WorkerJSPlus({
            name: "云班课",
            match: location.pathname === "/web/index.php" && location.href.includes("m=reply"),
            root: ".topic-item",
            elements: {
                question: ".t-con .t-subject",
                options: ".t-option  label .option-content",
                $options: ".el-radio__input,.el-checkbox__input",
                type: ".t-info .t-type"
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            wrap: obj => {
                if (obj.type === "A1A2题") {
                    obj.type = 1;
                }
                obj.question = obj.question.replace(/<img src="https:\/\/cdn-zjy.icve.com.cn\/common\/images\/question_button\/blankspace(\d+).gif">/gi, "");
                obj.options = obj.options.map(i => {
                    return i.trim().replace(/^[abAB]\)\s+/, "").replace(/^[A-Za-z]\s+/, "").trim();
                });
            }
        });
        WorkerJSPlus({
            name: "中国地质大学",
            match: location.pathname.includes("/Exam/OnlineExamV2/"),
            root: ".stViewItem",
            elements: {
                question: ".stViewHead  div",
                options: ".stViewCont  .stViewOption a",
                $options: ".stViewCont  .stViewOption a,input"
            },
            intv: () => {
                return $(".ExamTime").length;
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().parent().prev().find(".E_E_L_I_C_R_C_T_SubType").text());
                obj.question = obj.question.replace(/\(\d+分\)/, "");
                obj.options = obj.options.map(i => {
                    return i.replace(/\([A-Za-z]\)/, "").trim();
                });
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.val(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "单位",
            match: (location.host === "61.183.163.9:8089" || location.host === "zjpt.nnjjtgs.com:8081") && (location.href.includes("ksnr") || location.href.includes("lxnr")),
            hook: () => {
                JSONParseHook(o => {
                    if (o.topicList && o.topicList.length > 0) {
                        GLOBAL.json = parseDanWei(o.topicList);
                        uploadAnswer(GLOBAL.json);
                    }
                });
            },
            root: ".tm",
            elements: {
                question: ".tmnrbj span:last-child",
                options: ".van-radio-group .dxt .van-radio__label,.van-checkbox__label",
                $options: ".van-radio-group .dxt .van-radio__label,.van-checkbox__label,.van-field__control",
                type: ".tmnrbj span"
            },
            intv: () => {
                return $(".ExamTime").length || document.getElementById("pup-b");
            },
            wrap: obj => {
                obj.answer = GLOBAL.json[jQuery(".tmnrbj span:last-child").text().match(/^(\d+)、/)[1] - 1].answer;
            },
            finished: () => {
                jQuery(".xyt").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "小鹅通",
            match: location.pathname.includes("/evaluation_wechat/examination/detail/"),
            root: ".question-title,.title__text",
            elements: {
                question: "#detail_div",
                options: "label  .image-text-box p",
                $options: "label,.simulation_inp"
            },
            ignore_click: ($item, type) => {
                if (type === 0) {
                    return $item.html().includes("single-exam-radio-active");
                } else if (type === 1) {
                    return $item.html().includes("check-i-active");
                }
            },
            wrap: obj => {
                const $item = obj.$item;
                obj.$options = $item.parent().next().find(".option-item,.checking-option__container,.fill_blank");
                obj.type = getQuestionType($item.next().text());
                if (obj.type === 2) {
                    obj.$options = $item.parent().parent();
                }
                if (obj.type === 3) {
                    obj.options = [ "正确", "错误" ];
                } else {
                    obj.options = jQuery.map($item.parent().next().find(".option-item #detail_div"), function(val) {
                        return formatString(filterImg(val));
                    });
                }
            },
            fill: (type, answer, $option) => {
                if (type === 2) {
                    const vue = $option.get(0).__vue__;
                    vue.content[0] = answer;
                    vue.emitAnswer();
                    $option.find(".simulation_inp").text(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "小饿通H5",
            match: location.host.includes("h5.xiaoeknow") || location.href.includes("/exam/h5_evaluation/"),
            root: ".practice-detail__body",
            elements: {
                question: ".question-wrap__title #detail_div",
                options: ".question-option #detail_div",
                $options: ".question-option #detail_div",
                type: ".question-wrap__title-tag"
            },
            wrap: obj => {
                const $item = obj.$item;
                obj.$options = $item.parent().next().find(".option-item,.checking-option__container,.fill_blank");
                obj.type = TYPE[$item.next().text().replace(/\s+/, "").replace("(", "").replace(")", "")];
                if (obj.type === 2) {
                    obj.$options = $item.parent().parent();
                }
                if (obj.type === 3) {
                    obj.options = [ "正确", "错误" ];
                } else {
                    obj.options = jQuery.map($item.parent().next().find(".option-item #detail_div"), function(val) {
                        return formatString(filterImg(val));
                    });
                }
            },
            finished: () => {
                $(".practice-detail__bottom-item:last-child").click();
                return $(".next").text() === "下一题";
            }
        });
        WorkerJSPlus({
            name: "人卫慕课测验",
            match: location.pathname.includes("/memberFront/paper.zhtml"),
            intv: () => {
                return $("#question_").attr("style").length === 0;
            },
            root: ".quesinfo",
            elements: {
                question: "dl dt",
                options: "dd label",
                $options: "dd input"
            },
            wrap: obj => {
                if (obj.$options.length === 2) {
                    obj.type = 3;
                    obj.options = [ "正确", "错误" ];
                } else {
                    obj.type = 0;
                }
            }
        });
        WorkerJSPlus({
            name: "青书学堂考试",
            match: location.host.includes("qingshuxuetang") && (location.pathname.includes("/Student/MakeupExamPaper") || location.pathname.includes("Student/ExamPaper")),
            intv: () => {
                return $(".paper-container .question-detail-container").length;
            },
            root: ".paper-container .question-detail-container",
            elements: {
                question: ".question-detail-description .detail-description-content",
                options: ".question-detail-options label .option-description",
                $options: ".question-detail-options label input",
                type: ".question-detail-type .question-detail-type-desc"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            }
        });
        WorkerJSPlus({
            name: "青书学堂测验",
            match: location.host.includes("qingshuxuetang") && location.pathname.includes("/Student/ExercisePaper") || location.host === "quiz.qingshuxuetang.com" && location.pathname.includes("/Student/Quiz/Detail"),
            intv: () => {
                return $(".question-detail-container").length;
            },
            root: ".question-detail-container",
            elements: {
                question: ".question-detail-description  span",
                options: ".question-detail-options label .option-description",
                $options: ".question-detail-options div input,.question-detail-solution-textarea",
                type: ".question-detail-type"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return i.replace(/\([A-Za-z]\)/, "").trim();
                });
            },
            ignore_click: ($item, type) => {
                if (type === 1) {
                    return $item.prop("checked");
                }
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.parents().find(".question-controller-wrapper .next").click();
                }
            }
        });
        WorkerJSPlus({
            name: "优学院测验",
            match: location.pathname === "/learnCourse/learnCourse.html",
            intv: () => {
                return $(".question-setting-panel").length;
            },
            root: ".split-screen-wrapper",
            elements: {
                question: ".question-title-scroller .question-title-html",
                options: ".choice-list .content-wrapper .text",
                $options: ".choice-list .checkbox ,.question-body-wrapper .choice-btn",
                type: ".question-title-scroller .question-type-tag"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.hasClass("selected");
            }
        });
        WorkerJSPlus({
            name: "优学院作业",
            match: location.pathname === "/quiz/pc.html",
            intv: () => {
                return $(".questions").length;
            },
            root: ".question-item",
            elements: {
                question: ".question-title",
                options: "ul label .choice-title",
                $options: "ul label input",
                type: ".title"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.prop("checked");
            }
        });
        WorkerJSPlus({
            name: "优学院考试",
            match: location.host === "utest.ulearning.cn" && location.pathname === "/",
            intv: () => {
                return $(".section-area").length;
            },
            root: ".question-area .question-item",
            elements: {
                question: ".base-question .title .rich-text",
                options: ".choice-list label .rich-text",
                $options: ".choice-list  label, .iconfont",
                type: ".base-question .title .tip"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            finished: () => {
                if ($(".next-part:contains(下个部分)").length) {
                    $(".next-part").click();
                    return true;
                } else {
                    return false;
                }
            }
        });
        WorkerJSPlus({
            name: "优学院作业",
            match: location.pathname === "/umooc/learner/homework.do",
            intv: () => {
                return $(".multiple-choices").length;
            },
            root: ".multiple-choices,.judge",
            elements: {
                question: "h5 .position-rltv span:last-child",
                options: "ul label span:last-child",
                $options: "ul label input,.radios .radio input",
                type: "h5 .typeName"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.prev().hasClass("checkbox-checked");
            }
        });
        WorkerJSPlus({
            name: "万学",
            match: location.pathname.includes("/sls/N2014_StudyController/next"),
            root: ".question",
            elements: {
                question: "tr .nm2",
                options: ".grey td p",
                $options: ".option li label",
                type: "tr .nm2"
            },
            wrap: obj => {
                obj.question = obj.question.parent().find("td p").text();
            }
        });
        WorkerJSPlus({
            name: "wenJuanAutoFill",
            match: location.host.includes("wenjuan.com") && location.pathname === "/s/",
            root: "questionContent",
            elements: {
                question: ".title",
                options: ".icheckbox_div .option_label",
                $options: ".icheckbox_div label",
                type: ".question_num"
            },
            ignore_click: $item => {
                return $item.attr("class").includes("checked");
            }
        });
        WorkerJSPlus({
            name: "学起(考试)",
            match: location.pathname.includes("/oxer/page/ots/examIndex.html"),
            intv: () => {
                return $(".tika_topline").length;
            },
            root: ".queItemClass",
            elements: {
                question: "dt .din:eq(1)",
                options: ".clearfix div",
                $options: ".clearfix .xuan,input"
            },
            ignore_click: $item => {
                return $item.parent().hasClass("cur");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find("div .fb:eq(0)").text());
                if (obj.type === 3) {
                    obj.options = [ "正确", "错误" ];
                }
            }
        });
        WorkerJSPlus({
            name: "学起(测试)",
            match: location.pathname.includes("/oxer/page/ots/UniversityStart.html"),
            intv: () => {
                return $(".uniQueList").length;
            },
            root: ".uniQueItem",
            elements: {
                question: ".QueStem",
                options: "ul li span",
                $options: "ul li"
            },
            ignore_click: $item => {
                return $item.parent().hasClass("lichecked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parents(".uniQueList").find(".fir").text());
                if (obj.type === 3) {
                    obj.options = [ "正确", "错误" ];
                }
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "易班考试",
            match: location.host === "exam.yooc.me" && location.pathname.includes("/group"),
            intv: () => {
                return $(".jsx-3527395752").length;
            },
            root: "main:last",
            elements: {
                question: "h3 div",
                options: ".mb ul li .flex-auto",
                $options: ".mb ul li",
                type: ".mb-s"
            },
            ignore_click: $item => {
                return $item.hasClass("_c");
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $(".exam-input").val("answer");
                }
            },
            finished: need_jump => {
                if ($('.round:contains("下一题")').hasClass("ghost")) return false;
                $('.round:contains("下一题")').click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "英华学堂",
            match: () => {
                const pathMatch = location.pathname.includes("/user/work") || location.pathname.includes("/user/exam");
                const matchHostArr = [ "mooc.kdcnu.com", "mooc.yncjxy.com", "mooc.cdcas.com", "mooc.cqcst.edu.cn", "mooc.kmcc.edu.cn", "mooc.wuhues.com" ];
                return pathMatch && matchHostArr.includes(location.host);
            },
            intv: () => {
                return $("#stateName").text().trim() === "进行中";
            },
            root: ".courseexamcon-main",
            elements: {
                question: ".name",
                options: ".list li .txt",
                $options: ".list li .exam-inp",
                type: ".type"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            fill: (type, answer, $option) => {},
            finished: auto_jump => {
                if ($(".next_exam").eq(3).prop("style")[0] == "display") return false;
                $(".next_exam").click();
            }
        });
        WorkerJSPlus({
            name: "厦门在线教育测验",
            match: location.pathname.includes("/nec/student/exam/exam-paper!test"),
            root: "#paper_form > div:nth-child(4) > table:nth-child(1) > tbody:nth-child(2)>tr:even",
            elements: {
                question: "td:eq(1)",
                options: ".optionUl label .el-radio__label,.el-checkbox__label",
                $options: ".optionUl label"
            },
            wrap: obj => {
                obj.options = obj.$item.next().find("tbody:first > tr tbody").map((i, y) => {
                    return $(y).find("td:eq(1)").text();
                }).toArray();
                obj.$options = obj.$item.next().find("tbody:first > tr tbody").map((i, y) => {
                    return $(y).find("input");
                });
                obj.type = 0;
            }
        });
        WorkerJSPlus({
            name: "金牌学堂",
            match: location.host === "www.goldgame.com.cn" && location.href.includes("/TestPage"),
            intv: () => {
                return $(".tab-btn-box li").length;
            },
            root: ".test-type-box ul .white-bg",
            elements: {
                question: ".position-relative h3",
                options: ".test-option label p:last-child",
                $options: ".test-option label input"
            },
            wrap: obj => {
                obj.question = obj.question.replace(/题目\d+\:/, "").trim().replace(/^\d+./, "");
                obj.type = getQuestionType(obj.$item.parent().parent().find(".test-type-tips").text());
                if (obj.$options.length > 2 && obj.$options.eq(0).hasClass("radiobox")) {
                    obj.type = 0;
                }
            },
            fillFinish: data => {
                $(".answer-sheet li").eq(GLOBAL.index).click();
            }
        });
        WorkerJSPlus({
            name: "青岛开放大学",
            match: location.pathname.includes("/pages/exam/exam.html"),
            intv: () => {
                return $(".exam-content-block .exam-content-topic").length;
            },
            root: ".exam-content-block .exam-content-topic",
            elements: {
                question: ".exam-topic-title",
                options: ".exam-topic-answer .layui-unselect span",
                $options: ".exam-topic-answer .layui-unselect"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".exam-content-title .exam-content-num").text());
            }
        });
        WorkerJSPlus({
            name: "点墨考试",
            match: location.pathname.includes("/Exam/StartExam"),
            root: "#question div div:first",
            elements: {
                question: "div:first",
                options: "div:first ~ div",
                $options: "div:first ~ div input"
            },
            wrap: obj => {
                obj.type = getQuestionType($(".alert #groupNameSpan").text());
            },
            finished: () => {
                $(".w-100 .btn-light:eq(1)").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "点墨测验",
            match: location.pathname.includes("/Course/TestPaper"),
            root: ".question",
            elements: {
                question: " div div:first div:first",
                options: " div div:first div:first ~ div",
                $options: " div div:first div:first ~ div input"
            },
            wrap: obj => {
                obj.type = getQuestionType($("h3").text());
                obj.question = obj.question.replace(/^\d+\./, "");
            }
        });
        WorkerJSPlus({
            name: "警官学院",
            match: location.pathname.includes("/bsmytest/startTi.do"),
            root: ".wrapper > div",
            elements: {
                question: ".dx",
                options: "p",
                $options: "p input"
            },
            wrap: obj => {
                if ($(".wrapper .cl").length > 0) {
                    obj.question = obj.$item.text().replace(/[0-9]、/, "").replace(/\(.*?\)/g, "").trim().split("$")[0].replace(/\(.*?\)/g, "").trim();
                } else {
                    obj.question = obj.question.replace(/[0-9]、/, "").replace(/\(.*?\)/g, "").trim();
                }
                obj.type = getQuestionType(obj.$item.parent().find("h2").text());
                obj.options = obj.options.map(item => {
                    return item.replace(/[A-Za-z][\:]/, "").replace(/[A-Za-z][\:,\:]/, "").replace(/\;/, "").trim();
                });
            }
        });
        WorkerJSPlus({
            name: "exam2_euibe_com_exam",
            match: location.hostname === "exam2.euibe.com" && location.pathname === "/KaoShi/ShiTiYe.aspx",
            root: ".question",
            elements: {
                question: ".wenti",
                options: "li label span",
                $options: "li label"
            },
            wrap: obj => {
                obj.type = getQuestionType($(".question_head").text());
            },
            finished: need_jump => {
                $(".paginationjs-next").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "lzwyedu_jijiaool_com_exam",
            match: () => {
                const pathMatch = location.pathname.includes("/learnspace/course/test/") || location.pathname.includes("/Student/ExamManage/CourseOnlineExamination");
                const matchHostArr = [ "lzwyedu.jijiaool.com", "cgjx.jsnu.edu.cn", "learn-cs.icve.com.cn", "nwnu.jijiaool.com", "lut.jijiaool.com", "learn.courshare.cn", "cj1027-kfkc.webtrn.cn" ];
                return pathMatch && matchHostArr.includes(location.host);
            },
            root: ".test_item",
            elements: {
                question: ".test_item_tit",
                options: ".test_item_theme label .zdh_op_con",
                $options: "label input"
            },
            wrap: obj => {
                obj.question = obj.question.replace(/该题未做$/, "").replace(/^\d+\./, "").replace(/^\d+、/, "").replace(/[((](\d+\s?(\.\d+)?分)[))]$/, "").replace(/^((\d+.(\s+)?)?)[\[((【](.*?)[】))\]]/, "").trim();
                obj.type = getQuestionType(obj.$item.prevAll(".test_item_type:first").text());
                if (obj.type === 3) {
                    obj.options = [ "对", "错" ];
                }
            }
        });
        WorkerJSPlus({
            name: "zzx_ouchn_edu_cn_exam",
            match: location.hostname === "zzx.ouchn.edu.cn" && location.pathname.includes("/edu/public/student/"),
            root: ".subject",
            elements: {
                question: ".question span",
                options: ".answer>span>p:first-child",
                $options: ".answer>span>p:first-child"
            },
            wrap: obj => {
                if (obj.$options.length > 1) {
                    obj.type = 0;
                }
            }
        });
        WorkerJSPlus({
            name: "zzx_ouchn_edu_cn_exam",
            match: location.hostname === "zzx.ouchn.edu.cn" && location.pathname.includes("/edu/public/student/"),
            root: ".subject",
            elements: {
                question: ".question span",
                options: ".answer>span>p:first-child",
                $options: ".answer>span>p:first-child"
            },
            wrap: obj => {
                if (obj.$options.length > 1) {
                    obj.type = 0;
                }
            }
        });
        WorkerJSPlus({
            name: "havust_hnscen_cn_exam",
            match: location.hostname === "havust.hnscen.cn" && location.pathname.includes("/stuExam/examing/"),
            root: ".main .mt_2 > div",
            elements: {
                question: ".flex_row+div",
                options: ".flex_row+div+div .el-radio__label,.el-checkbox__label",
                $options: ".flex_row+div+div .el-radio__label,.el-checkbox__label",
                type: ".flex_row .mr_2"
            }
        });
        WorkerJSPlus({
            name: "www_zygbxxpt_com_exam",
            match: location.hostname === "www.zygbxxpt.com" && location.pathname.includes("/exam"),
            root: ".Body",
            elements: {
                question: ".QName",
                options: ".QuestinXuanXiang p:parent",
                $options: ".QuestinXuanXiang p:parent",
                type: ".QName span"
            },
            wrap: obj => {
                obj.question = obj.question.replace(/\([^\)]*\)/g, "").replace(/\【.*?\】/g, "");
                obj.options = obj.options.map(item => {
                    return item.split(">").pop().trim();
                });
            }
        });
        WorkerJSPlus({
            name: "xuexi_jsou_cn_work",
            match: location.hostname === "xuexi.jsou.cn" && location.pathname.includes("/jxpt-web/student/newHomework/showHomeworkByStatus"),
            root: ".insert",
            elements: {
                question: ".window-title",
                options: ".questionId-option .option-title div[style^=display]",
                $options: ".questionId-option .option-title .numberCover"
            },
            wrap: obj => {
                obj.type = {
                    1: 0,
                    2: 1,
                    7: 3
                }[obj.$item.find(".question-type").val()];
                if (obj.options.length == 2) {
                    obj.type = 3;
                }
            }
        });
        WorkerJSPlus({
            name: "czvtc_cjEdu_com_exam",
            match: () => {
                const pathMatch = location.pathname.includes("/ExamInfo") || location.pathname.includes("/Examination");
                const matchHostArr = [ "czvtc.cj-edu.com", "hbkjxy.cj-edu.com", "bhlgxy.cj-edu.com", "hbsi.cj-edu.com", "czys.cj-edu.com", "hbjd.cj-edu.com", "xttc.cj-edu.com", "bvtc.cj-edu.com" ];
                return pathMatch && matchHostArr.includes(location.host);
            },
            intv: () => {
                return $(".el-container .all_subject>.el-row").length;
            },
            root: ".el-container .all_subject>.el-row",
            elements: {
                question: ".stem div:last-child",
                options: ".el-radio-group .el-radio__label,.el-checkbox-group .el-checkbox__label",
                $options: ".el-radio-group .el-radio__original,.el-checkbox-group .el-checkbox__original"
            },
            wrap: obj => {
                if (obj.$options.length < 3 && obj.$options.eq(0).attr("type") === "radio") {
                    obj.type = 3;
                } else if (obj.$options.length > 2 && obj.$options.eq(0).attr("type") === "radio") {
                    obj.type = 0;
                } else if (obj.$options.length > 2 && obj.$options.eq(0).attr("type") === "checkbox") {
                    obj.type = 1;
                }
            }
        });
        WorkerJSPlus({
            name: "learning_mhtall_com_exam",
            match: location.host.includes("learning.mhtall.com") && location.pathname.includes("/rest/course/exercise/item"),
            root: "#div_item",
            elements: {
                question: ".item_title",
                options: ".opt div label",
                $options: ".opt div input:not(.button_short)",
                type: "h4"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                if (obj.type === 0 || obj.type === 3) {
                    obj.answer = $(".div_answer").text().match(/[a-zA-Z]/).map(i => {
                        return obj.options[i.charCodeAt(0) - 65];
                    });
                } else if (obj.type === 2) {
                    obj.answer = $(".div_answer").text().replace("参考答案:", "").split(",");
                }
            },
            fill: (type, answer, $option) => {
                if (type === 2 || type === 4) {
                    $option.val(answer);
                    $(".DIV_TYPE_BLANK .button_short").click();
                }
            },
            fillFinish: () => {
                if ($(".opt+div+div input:eq(1)").val() === "下一题") {
                    $(".opt+div+div input:eq(1)").click();
                } else {
                    $(".button_short:eq(2)").click();
                }
            }
        });
        WorkerJSPlus({
            name: "168网校(测验)",
            match: location.host.includes("168wangxiao.com") && location.pathname.includes("/web/learningCenter/details/"),
            intv: () => {
                return $(".ret-answer").length === 0 && $(".info-container").length;
            },
            root: ".question-item-container",
            elements: {
                question: ".title-content",
                options: ".options .opt-content",
                $options: ".options label",
                type: ".top .type"
            }
        });
        WorkerJSPlus({
            name: "168网校(考试)",
            match: location.host.includes("168wangxiao.com") && location.pathname.includes("/web/examination/answer"),
            intv: () => {
                return $(".Answer-area").length;
            },
            root: ".Answer-area",
            elements: {
                question: ".listTit",
                options: ".el-radio__label span:last-child,.el-checkbox__label span:last-child",
                $options: ".el-radio__input,.el-checkbox__input input,.ql-editor p"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                if (obj.options.length === 0) {
                    obj.type = 2;
                }
                console.log(obj);
            },
            fill: (type, answer, $option) => {
                if (type === 2 || type === 4) {
                    console.log(answer);
                    document.querySelector(".ql-editor p").textContent = answer;
                }
            },
            finished: () => {
                if ($(".ctrl .el-button:contains(下一题)").length != 0) {
                    $(".ctrl .el-button:contains(下一题)").click();
                    return true;
                } else if ($(".ctrl .el-button:contains(上一题)").length && $(".ctrl button").length === 1) {
                    return false;
                }
            }
        });
        WorkerJSPlus({
            name: "法宣在线",
            match: location.host.includes("faxuanyun.com") && location.pathname.includes("/bps/examination"),
            intv: () => {
                return $("#timucontent").length;
            },
            root: "#timucontent",
            elements: {
                question: "h2",
                options: "ul li",
                $options: "ul input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/[\((].+?[)\)]/g, "");
                if ($(".layui-layer-content").length) {
                    iframeMsg("tip", {
                        type: "stop",
                        tip: "答题暂停,请自行通过验证"
                    });
                    $("#lastButton").click();
                    GLOBAL.stop = true;
                    return false;
                }
            },
            finished: need_jump => {
                if ($("#nextButton").length) {
                    $("#nextButton").click();
                    return true;
                } else {
                    return false;
                }
            }
        });
        WorkerJSPlus({
            name: "山财培训网 (补考)",
            match: location.host.includes("training.sdufe.edu.cn") && location.pathname.includes("/Exam/OnlineExam/"),
            intv: () => {
                return $(".exam_r_m").length;
            },
            root: ".exam_r_m",
            elements: {
                question: ".bt",
                options: ".btm",
                $options: ".btm input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/[\((].+?[)\)]/g, "");
                obj.options = $("br").parent().text().split(/[A-Z]\./).slice(1).map(item => {
                    return item.trim();
                });
                if (obj.type === 3) {
                    obj.answer = $("#answerDiv").text().replace("正确答案:", "").split();
                } else {
                    obj.answer = $("#answerDiv").text().match(/[A-Z]/g).map(item => {
                        return obj.options[item.charCodeAt(0) - 65];
                    });
                }
            },
            finished: () => {
                document.querySelector("#next").click();
                if (document.querySelector("#noAskCount").textContent == "0") {
                    return false;
                }
                return true;
            }
        });
        WorkerJSPlus({
            name: "和学在线",
            match: (location.host.includes("student.hexuezx") || location.host.includes("student.jxjyzx")) && location.hash.includes("homework-questions"),
            intv: () => {
                return $(".el-card__body").length;
            },
            root: ".el-card__body",
            elements: {
                question: ".stem",
                options: ".el-radio__label,.el-checkbox__label span",
                $options: ".el-radio__input,.el-checkbox__input input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/[\((].+?[)\)]/g, "");
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "高教在线",
            match: location.host === "www.cqooc.com" && (location.href.includes("/learn/mooc/exam/do") || location.href.includes("/learn/mooc/testing/do")),
            intv: () => {
                return $("#test-form").length;
            },
            root: "#test-form .cat",
            elements: {
                question: ".stem",
                options: ".option label",
                $options: ".option input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/\(\d+分\)\d+\.\d+/, "");
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "柠檬文才(考试)",
            match: () => {
                const pathMatch = location.pathname.includes("/separation/exam/");
                const matchHostArr = [ "learning.wuxuejiaoyu.cn", "learning.wencaischool.net", "learning.zk211.com", "study.wencaischool.net", "www.wencaischool.net" ];
                return pathMatch && matchHostArr.includes(location.host);
            },
            intv: () => {
                return $("#paperExam").css("display") != "none";
            },
            root: ".paperWrapper .tmList",
            elements: {
                question: ".tmTitleTxt",
                options: ".ansbox .opCont",
                $options: ".ansbox input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                if (obj.options.length === 0) {
                    obj.type = 2;
                }
                console.log(obj);
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.val(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "柠檬文才(作业)",
            match: () => {
                const matchHostArr = [ "learning.wuxuejiaoyu.cn", "learning.wencaischool.net", "learning.zk211.com", "study.wencaischool.net" ];
                return (location.pathname.includes("/hblearning/exam/") || location.pathname.includes("/xbsflearning/exam/") || location.pathname.includes("/openlearning/exam/") || location.pathname.includes("/jxlearning/exam/") || location.pathname.includes("/shandonglearning/exam")) && matchHostArr.includes(location.host);
            },
            intv: () => {
                return $("#paperExam").css("display") !== "none";
            },
            root: "#_block_content_exam #tblDataList>tbody>tr",
            elements: {
                question: "tbody:first>tr>td:last table",
                options: ".ansbox .opCont",
                $options: ".ansbox input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = $("#_block_content_exam #tblDataList>tbody>tr>td").find(" tbody:first>tr>td:last table:first").eq(GLOBAL.index - 1).find("tr:first").text();
                obj.options = [];
                $("#_block_content_exam #tblDataList>tbody>tr>td").find(" tbody:first>tr>td:last table:first").eq(GLOBAL.index - 1).find("tr:first").next().find("label").map((i, y) => {
                    obj.options.push($(y).text());
                });
                obj.$options = $("#_block_content_exam #tblDataList>tbody>tr>td").find(" tbody:first>tr>td:last table:first").eq(GLOBAL.index - 1).find("tr:first").next().find("input").map((i, y) => {
                    return y;
                });
                obj.type = 0;
                if (obj.options.length == 2) {
                    obj.type = 3;
                } else if (obj.$options.eq(0).attr("type") != "radio") {
                    obj.type = 1;
                }
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "福建师范",
            match: location.host === "neo.fjnu.cn" && location.pathname.includes("/resource/index"),
            intv: () => {
                return $(".content").length && !$(".answer-content").length;
            },
            root: ".content",
            elements: {
                question: ".title",
                options: "label .el-radio__label,.el-checkbox__label",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "优课学堂",
            match: location.host.includes("youkexuetang.cn") && location.pathname.includes("/student/"),
            intv: () => {
                return $(".paperItemBox").length;
            },
            root: ".paperItemBox",
            elements: {
                question: ".stem",
                options: ".el-radio__label,.el-checkbox__label",
                $options: ".el-radio__input,.el-checkbox__input input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/[\((].+?[)\)]/g, "");
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "亿学宝云",
            match: location.host.includes("yxbyun.com") && location.pathname.includes("/yxbstudent/"),
            intv: () => {
                return $(".time_header").length || $(".pager_wrap").length;
            },
            hook: () => {
                JSONParseHook(o => {
                    if (o.data && o.data.bigContent) {
                        GLOBAL.json = parseYxbyunExam(o.data.bigContent).reduce((acc, cur) => {
                            return acc.concat(cur);
                        }, []);
                        console.log(GLOBAL.json);
                    }
                });
            },
            root: ".test",
            elements: {
                question: ".type",
                options: ".el-radio-group,.el-checkbox-group label",
                $options: ".el-radio__input,.el-checkbox__input input",
                type: ".el-tag"
            },
            wrap: obj => {
                Object.assign(obj, GLOBAL.json[GLOBAL.index - 1]);
            },
            ignore_click: $item => {
                return $item.prop("checked");
            }
        });
        WorkerJSPlus({
            name: "考试星(单题)",
            match: Boolean(location.host === "exam.kaoshixing.com" && location.pathname.includes("/exam/exam_start")),
            intv: () => {
                return $("#nextQuestions").length;
            },
            root: ".questions .questions-content",
            elements: {
                question: ".question-name",
                options: ".answers label .words",
                $options: ".answers label"
            },
            ignore_click: $item => {
                return $item.parent().find("input").prop("checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace(/[\((].+?[)\)]/g, "");
                console.log(obj);
            },
            finished: () => {
                if ($("#nextQuestions:contains(下一题)").length && $("#nextQuestions").css("display") !== "none") {
                    $("#nextQuestions:contains(下一题)").click();
                    return true;
                } else {
                    return false;
                }
            }
        });
        WorkerJSPlus({
            name: "易考云",
            match: location.host === "exam.beeouc.com" && location.pathname.includes("/client"),
            intv: () => {
                return $(".question-body").length;
            },
            root: ".question-body",
            elements: {
                question: ".question-stem",
                options: ".question-option label",
                $options: ".question-option input",
                type: ".question-type"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                console.log(obj);
            },
            finished: () => {
                if ($(".question-footer button:contains(下一题)")) {
                    $(".question-footer button:contains(下一题)").click();
                    return true;
                } else {
                    return false;
                }
            }
        });
        WorkerJSPlus({
            name: "伊犁师范成人教育",
            match: location.host === "exam.weirenzheng.cn" && (location.pathname.includes("//GeneralTestPaper/Testing/") || location.pathname.includes("//GeneralTestPaper/SNTesting")),
            intv: () => {
                return $(".topic").length;
            },
            root: ".topic",
            elements: {
                question: ".qsctt",
                options: ".xuan li",
                $options: ".choice input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return i.replace(/^[A-Z] \. /, "");
                });
                if (obj.$options.length == 2) {
                    obj.options = [ "正确", "错误" ];
                    obj.type = 3;
                }
            }
        });
        WorkerJSPlus({
            name: "绎通云课堂 (作业)",
            match: location.host.includes("ytccr.com") && (location.hash.includes("#/learning-work") || location.hash.includes("#/learning-details")),
            intv: () => {
                return $(".left-question").length;
            },
            root: ".border-item",
            elements: {
                question: ".qa-title",
                options: "label .opt-title-cnt",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            }
        });
        WorkerJSPlus({
            name: "重庆大学网络教育学院 (作业)",
            match: location.host === "exercise.5any.com" && location.pathname.includes("/Exercise/WebUI/Test/Answer"),
            intv: () => {
                return $(".examtime-content").length;
            },
            root: ".subject .font-16",
            elements: {
                question: ".stem .richtextcontent",
                options: ".option .richtextcontent",
                $options: ".option label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            }
        });
        WorkerJSPlus({
            name: "毕节幼儿师范",
            match: location.host === "px.gzbjyzjxjy.cn" || location.host === "px.ggcjxjy.cn" && location.pathname.includes("/exam/shiti/dopapers"),
            intv: () => {
                return $(".panel-body").length;
            },
            root: ".panel-body>div",
            elements: {
                question: ".testpaper-question-stem",
                options: ".testpaper-question-choices li",
                $options: ".testpaper-question-footer input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "贵州继续教育",
            match: location.host === "www.gzjxjy.gzsrs.cn" && location.pathname.includes("/personback/"),
            intv: () => {
                return $(".question-title").length;
            },
            root: ".question-title",
            elements: {
                question: ".show-text",
                options: "label",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "和学自考",
            match: location.host === "zkpt.qdu.edu.cn" && location.pathname.includes("/examStu/exam/examPaper"),
            intv: () => {
                return $(".ant-spin-container").length;
            },
            root: ".ant-row",
            elements: {
                options: "label",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.question = obj.$item.parent().parent().prev().text();
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "专技天下",
            match: location.host.includes("zgzjzj.com") && location.pathname.includes("/examination/perpar.html"),
            intv: () => {
                return $(".question_index").length;
            },
            root: ".question_index",
            elements: {
                question: "p",
                options: ".options li p,li>span:last-child",
                $options: ".options li",
                type: "p span"
            },
            ignore_click: $item => {
                return $item.hasClass("active");
            }
        });
        WorkerJSPlus({
            name: "睿学补考",
            match: location.href.includes("exam-app-exam-paper") && location.host.includes("ks.hustsnde.com"),
            intv: () => {
                return $("#paper").length;
            },
            root: "#paper .content-box",
            elements: {
                question: "ul li:eq(0) .desc",
                options: "ul li:eq(1)",
                $options: "ul label input",
                type: ".title"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                const options = obj.options[0].trim().split(/\[[A-Z]:?\]/).splice(1).map(i => {
                    return i.trim();
                }).filter(i => i);
                if (options.length === 0) {
                    obj.options = obj.options[0].trim().split(/\(?[A-Z\.?]\)?/).splice(1).map(i => {
                        return i.trim();
                    }).filter(i => i);
                } else {
                    obj.options = options;
                }
                if (obj.type === 3) {
                    obj.options = [ "正确", "错误" ];
                }
            }
        });
        WorkerJSPlus({
            name: "云上河开",
            match: location.host === "jx.open.ha.cn" && location.pathname.includes("/jxpt-web/student/homework/showHomeworkByStatus"),
            intv: () => {
                return $("#shiti-content").length;
            },
            root: ".insert",
            elements: {
                question: ".window-title",
                options: "ul li div:last-child",
                $options: "ul li .numberCover"
            },
            ignore_click: $item => {
                return $item.parent().hasClass("answer-title");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parents(".layui-colla-item").find(".titleType").text());
            }
        });
        WorkerJSPlus({
            name: "ycjy.lut.edu.cn",
            match: location.host === "ycjy.lut.edu.cn" && location.pathname.includes("/learnspace/course/test/coursewareTest_intoTestPage.action"),
            intv: () => {
                return $(".bank_cont").length;
            },
            root: ".test_item",
            elements: {
                options: "label",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".test_item_type").text());
                obj.question = obj.$item.find(".test_item_tit").contents()[0].nodeValue.trim();
            }
        });
        WorkerJSPlus({
            name: "exam.euibe.com",
            match: location.host === "exam.euibe.com" && location.pathname.includes("/KaoShi/ShiTiYe.aspx"),
            intv: () => {
                return $(".question_list").length;
            },
            root: ".question",
            elements: {
                question: ".wenti .stem",
                options: "label span",
                $options: "label input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parents(".question_list").find(".question_head").text());
            },
            finished: need_jump => {
                if ($(".paginationjs-next").hasClass("disabled")) {
                    return false;
                }
                $(".paginationjs-next").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "学晖教育",
            match: location.host === "xhjy.ldzxjy.com" && location.pathname.includes("tikuUserBatch/keepTopic"),
            intv: () => {
                return $(".radio").length;
            },
            root: ".radio",
            elements: {
                question: ".issueTitle",
                options: "ul li span",
                $options: "ul li",
                type: ".issueTypes"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            finished: need_jump => {
                if ($(".next").text().includes("交卷")) {
                    return false;
                }
                $(".next").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "东财在线",
            match: location.host === "classroom.edufe.com.cn" && (location.pathname.includes("/PracticePaper") || location.pathname.includes("/HomeWorkPaper")),
            intv: () => {
                return $(".TK-main").length;
            },
            root: ".CBTPaperMain-trunk",
            elements: {
                question: ".CBTPaperMain-divInline",
                options: "ul li label",
                $options: "ul li label"
            },
            ignore_click: $item => {
                return $item.hasClass("_CheckBox_checked");
            }
        });
        WorkerJSPlus({
            name: "北华大学在线教育",
            match: location.host === "beihua.peishenjy.com" && location.pathname.includes("/Learning/CourseOnlineExamination"),
            intv: () => {
                return $(".s_mi").length;
            },
            root: ".test_item",
            elements: {
                question: ".test_item_tit",
                options: "ul label",
                $options: "ul input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "上海立达学院",
            match: location.host === "kkzxsx.lidapoly.edu.cn" && location.pathname.includes("/exam/"),
            intv: () => {
                return $(".exam-question").length;
            },
            root: ".main .item",
            elements: {
                question: ".text",
                options: ".options label .el-radio__label,.el-checkbox__label",
                $options: ".options label"
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".text").text());
                console.log(obj);
            }
        });
        WorkerJSPlus({
            name: "国开",
            match: location.host === "lms.ouchn.cn" && location.pathname.includes("/exam/"),
            intv: () => {
                return $(".loading-gif").hasClass("ng-hide") && $(".hd .examinee .submit-label").eq(0).text() === "";
            },
            root: ".card ol .single_selection,.multiple_selection,.true_or_false,.short_answer",
            elements: {
                question: ".summary-title .subject-description",
                options: ".subject-options li .option-content",
                $options: ".subject-options label .left",
                type: ".summary-sub-title span:eq(0)"
            },
            ignore_click: ($item, type) => {
                return type === 1 && $item.find("input").hasClass("ng-not-empty");
            }
        });
        WorkerJSPlus({
            name: "广开",
            match: () => {
                const pathMatch = location.pathname.includes("/mod/quiz/attempt.php");
                const matchHostArr = [ "moodle.syxy.ouchn.cn", "xczxzdbf.moodle.qwbx.ouchn.cn", "elearning.bjou.edu.cn", "whkpc.hnqtyq.cn:5678", "course.ougd.cn", "study.ouchn.cn" ];
                return pathMatch && matchHostArr.includes(location.host);
            },
            root: ".que",
            elements: {
                question: ".qtext",
                options: ".answer div label,.flex-fill",
                $options: ".answer div input:visible"
            },
            wrap: data => {
                if (data.type === undefined) {
                    try {
                        data.type = 4;
                        data.$item.find(".qtext .accesshide").remove();
                        data.question = formatString(data.$item.find(".qtext").html());
                        data.$options = data.$item.find("input[id$=_answer]");
                    } catch (e) {}
                }
            },
            ignore_click: $item => {
                return Boolean($item.parent().find("input").eq(-1).prop("checked"));
            },
            finished: () => {
                $(".submitbtns .btn-primary").click();
            },
            fill: (type, answer, $option) => {
                if (type === 4) {
                    console.log(type, answer, $option);
                    console.log($option.attr("id"));
                    $option.val(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "保定继续教育",
            match: location.pathname.includes("/exam/answer.html"),
            root: ".stem-container",
            elements: {
                question: ".stem  span",
                options: ".option div .optStem",
                $options: ".option div input"
            },
            intv: () => {
                return $("#question").length;
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().parent().find(".description").text());
            }
        });
        WorkerJSPlus({
            name: "noNiExam.js",
            match: location.pathname === "/app-afstudy/self_test.html",
            root: ".lineClass .b-papp-root",
            elements: {
                question: ".b-exam-top  .b-exam-tit",
                options: ".b-exam-box li label",
                $options: ".b-exam-box li  input",
                type: ".b-exam-top .b-exam-type"
            },
            ignore_click($item) {
                return $item.prop("checked");
            },
            wrap(obj) {
                obj.options = obj.options.map(i => {
                    return i.replace(/[A-Za-z][\:]/, "").replace(/[A-Za-z][\:,\:]/, "").replace(/\;/, "").trim();
                });
            }
        });
        WorkerJSPlus({
            name: "www_pbaqks_com_text",
            match: location.host === "www.pbaqks.com" && location.pathname.includes("/P_ExamDetail/OnlineStuday"),
            root: ".main-container .single-box",
            elements: {
                question: ".single-main:first",
                options: ".choose-box label",
                $options: ".choose-box label",
                type: ".single-container .font-title",
                answer: "input:eq(1)"
            },
            ignore_click: $i => {
                return $i.find("input").is(":checked");
            },
            wrap: obj => {
                obj.question = obj.question.replace("标准答案", "").replace(/^\d+\./, "").replace(/\[.+?\]/g, "").trim();
            },
            fillFinish: () => {
                if ($(".main-container .single-box").find("input:eq(1)").eq(GLOBAL.index - 1).attr("value").split("").length > 1) {
                    jQuery(".main-container .confirm a:last-child").click();
                }
            }
        });
        WorkerJSPlus({
            name: "安徽继续教育",
            match: location.pathname.includes("/study/html/content/studying/") || (location.pathname === "/study/html/content/tkOnline/" || location.pathname === "/study/html/content/sxsk/"),
            intv: () => {
                return ($(".e-save-b").length || $(".e-b-g").length) && $(".totalscore").length === 0;
            },
            root: ".e-q",
            elements: {
                question: ".e-q-q .ErichText",
                options: ".e-a-g li",
                $options: ".e-a-g li"
            },
            ignore_click: $item => {
                return $item.attr("class").includes("checked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().prev().find(".e-text").text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/^[ab]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            }
        });
        WorkerJSPlus({
            name: "大连/九江",
            match: location.href.includes("/onlineclass/exam/"),
            intv: () => {
                return $(".excer_list_view___2Ahg9") || $(".excer_list_view___YOSCa");
            },
            root: ".single_excer_item___lFMCm,.single_excer_item___2lGB8",
            elements: {
                plat: 40,
                question: ".title_content___1Qagx .title_content_text___27NIL, .title_content___24J6D .title_content_text___8ruL4",
                options: ".options_content___nXSwG label .option_text___udjiE, .options_content___2YgyG label .option_text___1mfcu",
                $options: ".options_content___nXSwG label input,.options_content___2YgyG label input",
                type: ".title_content___1Qagx span:eq(1),.title_content___24J6D span:eq(1)"
            },
            ignore_click: $item => {
                return $($item).parent().hasClass("ant-checkbox-checked");
            },
            wrap: obj => {
                console.log(obj);
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.val(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "新疆继续教育",
            hook: () => {
                function parseXinJiangAgain(questions) {
                    return questions.map(item => {
                        const answer = [];
                        const options = item.answers.map(opt => {
                            if (opt.isAnswer === "0") answer.push(formatString(opt.name));
                            return formatString(opt.name);
                        });
                        const type = item.types === "2" ? 3 : parseInt(item.types);
                        return {
                            question: item.name,
                            options: options,
                            answer: answer,
                            type: type
                        };
                    });
                }
                JSONParseHook(o => {
                    if (o.success && o.data.exam) {
                        const arr = o.data.exam.assessList.map(i => {
                            return i.questionList;
                        }).flat();
                        GLOBAL.json = parseXinJiangAgain(arr);
                    }
                });
            },
            match: location.host === "www.ttcdw.cn" && location.pathname.includes("/p/uExam/goExam/"),
            root: ".question-item",
            elements: {
                question: ".question-item-title span",
                options: ".question-item-option label .el-checkbox__label,.el-radio__label",
                $options: ".question-item-option label"
            },
            wrap: obj => {
                Object.assign(obj, GLOBAL.json[GLOBAL.index - 1]);
            },
            intv: () => {
                return !$("div").hasClass("entrying-wrap");
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            fill: (type, answer, $option) => {
                if (type === 4 || type === 2) {
                    $option.val(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "华侨继续教育",
            match: location.pathname.includes("/exam/student/exam/resource/paper_card2"),
            intv: () => {
                return $(".ui-question-answer-right").length === 0;
            },
            root: ".ui-question-group .ui-question",
            elements: {
                question: ".ui-question-title  div",
                options: ".ui-question-options  div",
                $options: ".ui-question-options .ui-question-options-order,.ke-container"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find("h2").text());
            },
            ignore_click: $item => {
                return $item.parent().hasClass("ui-option-selected");
            },
            fill: (type, answer) => {
                if (type === 4 || type === 2 || type === 6) {
                    const x = GLOBAL.index - $(".ui-question-options ").length - 1;
                    KindEditor.instances[x].html(answer);
                }
            }
        });
        WorkerJSPlus({
            name: "上海开放大学",
            match: location.pathname.includes("/study/assignment/preview.aspx") || location.pathname.includes("/study/assignment/continuation.aspx"),
            hook: () => {
                if (GLOBAL.finish || $("a:contains(已完成批阅)").length === 1) {
                    iframeMsg("tip", {
                        type: "hidden",
                        tip: "本页面已做完,无需自动答题"
                    });
                    return true;
                }
            },
            root: ".e-q",
            elements: {
                question: ".e-q-q .ErichText",
                options: ".e-a-g li",
                $options: ".e-a-g li"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().parent().parent().find(".e-text").eq(0).text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.attr("class").includes("checked");
            }
        });
        WorkerJSPlus({
            name: "浙江考试",
            match: location.pathname === "/web-qz/moni/exam/exam_toExam.action",
            root: ".dt_tmcon",
            elements: {
                question: "div:eq(0) span:eq(1)",
                options: "div:eq(1) p",
                $options: "div:eq(1) p input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parents().find(".dt_rtitle1").eq(0).text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
                if (obj.type === 0) {
                    obj.answer = [ JSON.parse($("#quesSSForm #userAnssStr_0").val()).rightAnswer ];
                    uploadAnswer([ obj ]);
                }
            },
            finished: () => {
                return $(".page li input:eq(2)").attr("disabled") !== "disabled";
            },
            fillFinish: () => {
                $(".page li input:eq(2)").click();
            }
        });
        WorkerJSPlus({
            name: "在浙学考试",
            match: location.host === "www.zjooc.cn" && (location.pathname.includes("/homework/") || location.pathname.includes("/test/") || location.pathname.includes("/exam/")),
            hook: () => {
                function parseZaiZheXue(problems) {
                    return problems.map(item => {
                        if (!item.rightAnswer) return undefined;
                        const subjectType = item.subjectType;
                        let type = -1;
                        const question = formatString(item.subjectName);
                        const answer = [];
                        const options = [];
                        if (subjectType === 1 || subjectType === 2) {
                            type = subjectType - 1;
                            for (let subjectOption of item.subjectOptions) {
                                const opt = formatString(subjectOption.optionContent);
                                options.push(opt);
                                if (item.rightAnswer.includes(subjectOption.optionHead)) {
                                    answer.push(opt);
                                }
                            }
                        } else if (subjectType === 3) {
                            type = 3;
                            answer.push(item.rightAnswer === "yes" ? "正确" : "错误");
                        } else {
                            return undefined;
                        }
                        return {
                            question: question,
                            options: options,
                            type: type,
                            answer: answer
                        };
                    }).filter(i => i && i.answer.length > 0);
                }
                if (!(location.pathname.includes("/homework/do") || location.pathname.includes("/test/do") || location.pathname.includes("/exam/do"))) {
                    JSONParseHook(o => {
                        if (o.data && o.data.paperName && o.data.clazzIds && o.data.paperSubjectList) {
                            const data = parseZaiZheXue(o.data.paperSubjectList);
                            console.log(data);
                        }
                    });
                    return true;
                }
            },
            root: ".questiono-item",
            elements: {
                question: "h6 .processing_img",
                options: ".questiono-main label .el-radio__label,.el-checkbox__label",
                $options: ".questiono-main label"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().prev().text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            }
        });
        WorkerJSPlus({
            name: "在浙学(测验/考试)",
            match: location.host === "www.zjooc.cn" && location.pathname.includes("/singleQuestion/do/"),
            intv: () => {
                return $(".settingsel-dialog").css("display") === "none";
            },
            root: ".question_content:first",
            elements: {
                question: ".question_title",
                options: ".question_content .radio_content div",
                $options: ".question_content  label"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".question_title p").eq(0).text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").replace(".", "").trim());
                });
            },
            ignore_click: $item => {
                return $item.hasClass("is-checked");
            },
            finished: () => {
                if ($(".question_btn .el-button:contains(下一题)").hasClass("is-disabled")) return false;
                $(".el-button:contains(下一题)").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "福建继续教育测验|作业",
            match: location.pathname === "/Web_Study/Student/Center/MyWorkOnView" || location.pathname === "/Web_Study/Student/Center/MyExamOnView",
            intv: () => {
                return $(".samllTopicNav").length;
            },
            root: ".topic-cont",
            elements: {
                question: "p",
                options: ".options li span",
                $options: ".options li"
            },
            wrap: obj => {
                obj.options = obj.options.map(i => {
                    return i.replace(/选项[A-Za-z]/, "").trim();
                });
                obj.type = {
                    1: 0,
                    2: 1,
                    3: 3,
                    6: 4
                }[obj.$item.attr("itemtype")];
                if (obj.type === undefined) obj.type = 4;
            },
            ignore_click: $item => {
                return $item.hasClass("correct");
            },
            fill: (type, answer, $option) => {}
        });
        WorkerJSPlus({
            name: "湖南继续教育",
            match: () => {
                const pathMatch = location.pathname.includes("/User/Student/myhomework.aspx") || location.pathname.includes("/examing.aspx");
                const matchHostArr = [ "www.jwstudy.cn", "hdjt.wuxuekeji.com" ];
                return pathMatch && (matchHostArr.includes(location.host) || location.host.includes("ls365.net") || location.host.includes("ls365.com"));
            },
            root: ".exam_question",
            elements: {
                question: ".exam_question_title  div",
                options: ".question_select  .select_detail",
                $options: ".question_select li",
                type: ".exam_question_title div strong"
            },
            ignore_click: $item => {
                return $item.hasClass("cur");
            }
        });
        WorkerJSPlus({
            name: "德阳继续教育",
            match: location.href.includes("/dypx/OnlineExam/Exam.aspx"),
            root: "#divProblemArea",
            elements: {
                question: "#ulProblems li:first",
                options: "#ulProblems .answer",
                $options: "#ulProblems .answer input"
            },
            ignore_click: $item => {
                return $item.prop("checked");
            },
            wrap: obj => {
                if ($("#ulProblems .answer input").length < 3 && $("#ulProblems .answer input").eq(0).attr("type") === "radio") {
                    obj.type = 3;
                    obj.options = [ "正确", "错误" ];
                } else if ($("#ulProblems .answer input").length > 2 && $("#ulProblems .answer input").eq(0).attr("type") === "radio") {
                    obj.type = 0;
                } else if ($("#ulProblems .answer input").length > 2 && $("#ulProblems .answer input").eq(0).attr("type") === "checkbox") {
                    obj.type = 1;
                }
            },
            finished: () => {
                if ($(".dlg").length) return false;
                $("#divBtns input:eq(1)").click();
                return true;
            }
        });
        WorkerJSPlus({
            name: "淄博继续教育",
            match: location.pathname.includes("/practice/start"),
            root: ".header-left .trueorfalse .sub",
            elements: {
                question: ".mb10",
                options: ".options li",
                $options: ".options li"
            },
            ignore_click: $item => {
                return $item.hasClass("active");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().prev().text());
                obj.options = obj.options.map(i => {
                    return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, "").replaceAll(/^[a-z]\s+/g, "").replaceAll(/^[a-z]、\s+/g, "").trim());
                });
            }
        });
        WorkerJSPlus({
            name: "河北继续教育",
            match: location.pathname.includes("paperid"),
            root: ".examItem",
            elements: {
                question: ".examItemRight  .question",
                options: ".examItemRight  ul li span",
                $options: ".examItemRight  ul li"
            },
            ignore_click: $item => {
                return $item.hasClass("cur");
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find(".questTitle b").text());
            }
        });
        WorkerJSPlus({
            name: "保定继续教育",
            match: () => {
                const pathnameArr = [ "/cuggw/rs/olex_exam", "/hebic/rs/olex_exam", "/sjzkjxy/rs/olex_exam", "/hbfsh/rs/olex_exam", "/jxycu/rs/olex_exam", "/jlufe/rs/olex_exam" ];
                return pathnameArr.includes(location.pathname);
            },
            intv: () => {
                return $(".paper_body").length;
            },
            root: ".item_li",
            elements: {
                question: ".item_title",
                options: "ul li label",
                $options: "ul li input"
            },
            wrap: obj => {
                if (obj.$options.length === 2) {
                    obj.type = 3;
                } else if (obj.$options.length > 2 && obj.$options.eq(0).attr("type") === "radio") {
                    obj.type = 0;
                } else if (obj.$options.length > 2 && obj.$options.eq(0).attr("type") !== "radio") {
                    obj.type = 1;
                } else {
                    obj.type = 4;
                }
            }
        });
        WorkerJSPlus({
            name: "唐山继续教育",
            match: location.pathname.includes("/exam/student/exam/"),
            intv: () => {
                return $(".ui-question-group").length;
            },
            root: ".ui-question-group .ui-question",
            elements: {
                question: ".ui-question-title .ui-question-content-wrapper",
                options: ".ui-question-options .ui-question-content-wrapper",
                $options: ".ui-question-options .ui-question-options-order"
            },
            wrap: obj => {
                obj.type = getQuestionType(obj.$item.parent().find("h2").text());
            }
        });
        WorkerJSPlus({
            name: "zzcjxy.hnzkw.org.cn",
            match: location.host.includes("hnzkw.org.cn"),
            intv: () => {
                return $(".answer").length;
            },
            hook: () => {
                JSONParseHook(o => {
                    if (o.data && o.data.bookdatas) {
                        GLOBAL.json = parsehnzkwText(o.data.bookdatas);
                    }
                });
            },
            root: ".examList",
            elements: {
                question: ".text",
                options: ".el-radio-group label,.el-checkbox-group label",
                $options: ".el-radio-group input,.el-checkbox-group input",
                type: ".status"
            },
            wrap: obj => {
                Object.assign(obj, GLOBAL.json[GLOBAL.index - 1]);
            },
            fill: (type, answer, $option) => {}
        });
        WorkerJSPlus({
            name: "问卷星考试",
            match: location.pathname.includes("/exam/ExamRd/Answer"),
            root: ".g-mn",
            elements: {
                question: ".m-question .tigan",
                options: ".question-block .xuanxiang",
                $options: ".question-block .xuanxiang",
                type: ".tixing"
            },
            ignore_click: ($item, type) => {
                if (type === 1) {
                    return $item.parent().find(".icheckbox_square-green").hasClass("checked");
                } else {
                    const isIgnore = $item.parent().find(".iradio_square-green").hasClass("checked");
                    return isIgnore;
                }
            },
            wrap: obj => {
                if ($(".layui-layer-content").length) {
                    iframeMsg("tip", {
                        type: "stop",
                        tip: "答题暂停,请自行通过验证"
                    });
                    GLOBAL.stop = true;
                    return true;
                }
            },
            fillFinish: data => {
                if (data.style === "warning-row" || $(".g-mn").parent().find(".iradio_square-green").hasClass("checked") || data.type === 1) {
                    $('.u-btn-next:contains("下一题")').click();
                }
            },
            finished: () => {
                return parseInt($(".num-dangqian:last").attr("qindex")) !== $(".num-item").length;
            }
        });
    })();

学习助手

答题
// ==UserScript==
// @name         💯【超星学习通满分助手】支持任务点自动跳转|章节测验、作业、考试全网检索答案,简答题支持chatgpt对接|音频、视频全自动静音播放|可视化参数配置
// @namespace    askAuto
// @version      2.1.2
// @author       shushoujiu
// @description  💯超星学习通满分助手,挂机解放时间,无需任何操作自动完成所有任务点。汇集全网免费、付费题库接口支持一键对接,答案更全更靠谱。
// @icon         https://vitejs.dev/logo.svg
// @match        *://*.chaoxing.com/*
// @match        *://*.edu.cn/*
// @match        *://*.nbdlib.cn/*
// @match        *://*.hnsyu.net/*
// @match        *://*.gdhkmooc.com/*
// @require      https://cdn.staticfile.org/vue/3.3.4/vue.global.prod.js
// @require      https://cdn.staticfile.org/vue-demi/0.14.0/index.iife.min.js
// @require      https://cdn.staticfile.org/element-plus-icons-vue/2.1.0/global.iife.min.js
// @require      data:application/javascript,window.Vue%3DVue%3B
// @require      https://cdn.staticfile.org/pinia/2.1.6/pinia.iife.prod.js
// @require      https://cdn.staticfile.org/element-plus/2.3.12/index.full.min.js
// @require      https://cdn.staticfile.org/blueimp-md5/2.19.0/js/md5.min.js
// @require      https://cdn.staticfile.org/jquery/3.7.1/jquery.min.js
// @resource     element-plus  https://cdn.staticfile.org/element-plus/2.3.12/index.css
// @resource     ttf           https://www.forestpolice.org/ttf/2.0/table.json
// @connect      cx.icodef.com
// @connect      tk.enncy.cn
// @connect      api.muketool.com
// @connect      api.tikuhai.com
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @grant        GM_getValue
// @grant        GM_info
// @grant        GM_setValue
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @run-at       document-end
// @antifeature  ads      脚本可能包含第三方接口广告
// @antifeature  payment  脚本存在第三方答题接口付费功能
// @downloadURL https://update.greasyfork.org/scripts/436994/%F0%9F%92%AF%E3%80%90%E8%B6%85%E6%98%9F%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%BB%A1%E5%88%86%E5%8A%A9%E6%89%8B%E3%80%91%E6%94%AF%E6%8C%81%E4%BB%BB%E5%8A%A1%E7%82%B9%E8%87%AA%E5%8A%A8%E8%B7%B3%E8%BD%AC%7C%E7%AB%A0%E8%8A%82%E6%B5%8B%E9%AA%8C%E3%80%81%E4%BD%9C%E4%B8%9A%E3%80%81%E8%80%83%E8%AF%95%E5%85%A8%E7%BD%91%E6%A3%80%E7%B4%A2%E7%AD%94%E6%A1%88%EF%BC%8C%E7%AE%80%E7%AD%94%E9%A2%98%E6%94%AF%E6%8C%81chatgpt%E5%AF%B9%E6%8E%A5%7C%E9%9F%B3%E9%A2%91%E3%80%81%E8%A7%86%E9%A2%91%E5%85%A8%E8%87%AA%E5%8A%A8%E9%9D%99%E9%9F%B3%E6%92%AD%E6%94%BE%7C%E5%8F%AF%E8%A7%86%E5%8C%96%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE.user.js
// @updateURL https://update.greasyfork.org/scripts/436994/%F0%9F%92%AF%E3%80%90%E8%B6%85%E6%98%9F%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%BB%A1%E5%88%86%E5%8A%A9%E6%89%8B%E3%80%91%E6%94%AF%E6%8C%81%E4%BB%BB%E5%8A%A1%E7%82%B9%E8%87%AA%E5%8A%A8%E8%B7%B3%E8%BD%AC%7C%E7%AB%A0%E8%8A%82%E6%B5%8B%E9%AA%8C%E3%80%81%E4%BD%9C%E4%B8%9A%E3%80%81%E8%80%83%E8%AF%95%E5%85%A8%E7%BD%91%E6%A3%80%E7%B4%A2%E7%AD%94%E6%A1%88%EF%BC%8C%E7%AE%80%E7%AD%94%E9%A2%98%E6%94%AF%E6%8C%81chatgpt%E5%AF%B9%E6%8E%A5%7C%E9%9F%B3%E9%A2%91%E3%80%81%E8%A7%86%E9%A2%91%E5%85%A8%E8%87%AA%E5%8A%A8%E9%9D%99%E9%9F%B3%E6%92%AD%E6%94%BE%7C%E5%8F%AF%E8%A7%86%E5%8C%96%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE.meta.js
// ==/UserScript==

(t=>{if(typeof GM_addStyle=="function"){GM_addStyle(t);return}const d=document.createElement("style");d.textContent=t,document.head.append(d)})(" .dialog-footer button[data-v-468a4ec0]:first-child{margin-right:10px}#csbutton[data-v-468a4ec0]{position:fixed;bottom:20px;right:20px;z-index:99999}#zeokdjg[data-v-f2d2b132]{position:fixed;left:10px;bottom:50vh;z-index:9999}.question_btn[data-v-f2d2b132]{width:40px;height:40px;border-radius:5px;margin:5px}.question_div[data-v-f2d2b132]{height:200px}.question_ti[data-v-f2d2b132]{margin:10px 0 20px}.cx_log[data-v-f2d2b132]{margin:2px 0}.status_log[data-v-f2d2b132]{margin-top:10px} ");

(async function (vue, pinia$1, ElementPlus, md5, $$1) {
'use strict';

var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => {
    __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
    return value;
};
((e) => {
    const t = GM_getResourceText(e);
    GM_addStyle(t);
})("element-plus");
var _GM_getResourceText = (() => "undefined" != typeof GM_getResourceText ? GM_getResourceText : void 0)(), _GM_getValue = (() => "undefined" != typeof GM_getValue ? GM_getValue : void 0)(), _GM_info = (() => "undefined" != typeof GM_info ? GM_info : void 0)(), _GM_setValue = (() => "undefined" != typeof GM_setValue ? GM_setValue : void 0)(), _GM_xmlhttpRequest = (() => "undefined" != typeof GM_xmlhttpRequest ? GM_xmlhttpRequest : void 0)(), _unsafeWindow = (() => "undefined" != typeof unsafeWindow ? unsafeWindow : void 0)();
const getConfig = () => {
    const config = _GM_getValue("config");
    return config || defaultConfig$1;
}, defaultConfig$1 = { debugger: false, autoAnswer: true, autoVideo: true, autoJump: true, autoSubmit: true, thtoken: "", yztoken: "", gptKey: "", gptModel: "gpt-3.5-turbo", gpt: false, gptType: ["0", "1", "2", "3", "4", "5", "6", "7"], interval: 3, answerInterval: 3, minAccuracy: 0.8, autoExam: true, hideExam: false, notice: "本脚本仅供学习交流使用,严禁用于商业用途,否则后果自负!" }, userConfig = [{ name: "base", label: "基础配置", config: [{ name: "interval", label: "通用间隔(秒)", type: "number", value: defaultConfig$1.interval, desc: "通用间隔,用于脚本运行切换" }, { name: "answerInterval", label: "答题间隔(秒)", type: "number", value: defaultConfig$1.answerInterval, desc: "控制答题速度" }, { name: "thtoken", label: "题库海token", type: "input", value: defaultConfig$1.thtoken, desc: "非必填,购买后可获得" }, { name: "yztoken", label: "一之题库token", type: "input", value: defaultConfig$1.yztoken, desc: "非必填,购买后可获得" }, { name: "enncytoken", label: "言溪题库token", type: "input", value: defaultConfig$1.enncytoken, desc: "非必填,购买后可获得" }] }, { name: "chapter", label: "章节配置", config: [{ name: "autoAnswer", label: "自动答题", type: "switch", value: defaultConfig$1.autoAnswer, desc: "开启后,会自动答题" }, { name: "autoVideo", label: "自动视频", type: "switch", value: defaultConfig$1.autoVideo, desc: "开启后,会自动观看视频" }, { name: "autoJump", label: "自动切换", type: "switch", value: defaultConfig$1.autoVideo, desc: "开启后,会自动切换章节" }, { name: "autoSubmit", label: "自动提交", type: "switch", value: defaultConfig$1.autoSubmit, desc: "开启后,会自动提交答案" }, { name: "minAccuracy", label: "最低正确率", type: "input", value: defaultConfig$1.minAccuracy, desc: "不满足最低正确率则不会自动提交答案" }] }, { name: "exam", label: "作业/考试配置", config: [{ name: "autoExam", label: "考试自动切换", type: "switch", value: defaultConfig$1.autoExam, desc: "开启后,会考试会自动切换" }] }, { name: "gpt", label: "GPT配置", config: [{ name: "gptKey", label: "GPT Key", type: "input", value: defaultConfig$1.gptKey, desc: "正在内测中,敬请期待" }, { name: "gptModel", label: "GPT 模型", type: "select", value: defaultConfig$1.gptModel, desc: "正在内测中,敬请期待", options: [{ label: "gpt-3.5-turbo", value: "gpt-3.5-turbo" }, { label: "gpt4", value: "gpt4" }] }, { name: "gpt", label: "题库无答案时,是否使用gpt", type: "switch", value: defaultConfig$1.gpt, desc: "开启后,题库无答案时,会使用gpt" }, { name: "gptType", label: "允许使用gpt的题型", type: "checkbox", value: defaultConfig$1.gptType, desc: "选中后,会使用gpt答题相应题型", options: [{ label: "单选题", value: "0" }, { label: "多选题", value: "1" }, { label: "填空题", value: "2" }, { label: "判断题", value: "3" }, { label: "简答题", value: "4" }, { label: "名词解释", value: "5" }, { label: "论述题", value: "6" }, { label: "计算题", value: "7" }] }] }], useformStore = pinia$1.defineStore({ id: "formstore", state: () => ({ forminput: getConfig(), dialogV: false, activeName: "base" }), actions: { saveConfig(forminput) {
    _GM_setValue("config", forminput);
} } });
var export_helper_default = (sfc, props) => {
    let target = sfc.__vccOpts || sfc;
    for (let [key, val] of props)
    target[key] = val;
    return target;
}, aim_vue_vue_type_script_lang_default = { name: "Aim" }, _hoisted_12$1 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_42 = [vue.createElementVNode("path", { fill: "currentColor", d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896z" }, null, -1), vue.createElementVNode("path", { fill: "currentColor", d: "M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32zm0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32zM96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32zm576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32z" }, null, -1)];
var aim_default = export_helper_default(aim_vue_vue_type_script_lang_default, [["render", function(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("svg", _hoisted_12$1, _hoisted_42);
}], ["__file", "aim.vue"]]), setting_vue_vue_type_script_lang_default = { name: "Setting" }, _hoisted_1231 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_3230 = [vue.createElementVNode("path", { fill: "currentColor", d: "M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z" }, null, -1)];
var setting_default = export_helper_default(setting_vue_vue_type_script_lang_default, [["render", function(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("svg", _hoisted_1231, _hoisted_3230);
}], ["__file", "setting.vue"]]);
const _sfc_main$1 = vue.defineComponent({ components: {}, setup() {
    const formstoreObj = useformStore(), { forminput, dialogV, activeName } = pinia$1.storeToRefs(formstoreObj), ruleFormRef = vue.ref(), rules = vue.reactive({ interval: [{ required: true, message: "间隔时间不能为空" }, { type: "number", message: "间隔时间必须为数字" }, { validator: (rule, value) => value >= 1 ? Promise.resolve() : Promise.reject("间隔时间必须大于等于1") }], answerInterval: [{ required: true, message: "答题间隔不能为空" }, { type: "number", message: "答题间隔必须为数字" }, { validator: (rule, value) => value >= 1 ? Promise.resolve() : Promise.reject("答题间隔必须大于等于1") }], token: [{ validator: (rule, value) => {
    if (value) {
        return /^[a-zA-Z0-9]{6,}$/.test(value) ? Promise.resolve() : Promise.reject("token格式错误");
    }
    return Promise.resolve();
    } }] });
    return { dialogV, activeName, ruleFormRef, forminput, rules, submitForm: async (formEl) => {
    formEl && await formEl.validate((valid, fields) => {
        valid && (formstoreObj.saveConfig(forminput.value), ElementPlus.ElNotification({ title: "Success", message: "配置保存成功,请自行刷新页面", type: "success" }), dialogV.value = false);
    });
    }, userConfig, Setting: setting_default };
} }), _export_sfc = (sfc, props) => {
    const target = sfc.__vccOpts || sfc;
    for (const [key, val] of props)
    target[key] = val;
    return target;
}, _hoisted_1$1 = { class: "dialog-footer" };
const App = _export_sfc(_sfc_main$1, [["render", function(_ctx, _cache, $props, $setup, $data, $options) {
    const _component_el_button = vue.resolveComponent("el-button"), _component_el_switch = vue.resolveComponent("el-switch"), _component_el_input = vue.resolveComponent("el-input"), _component_el_input_number = vue.resolveComponent("el-input-number"), _component_el_option = vue.resolveComponent("el-option"), _component_el_select = vue.resolveComponent("el-select"), _component_el_checkbox = vue.resolveComponent("el-checkbox"), _component_el_checkbox_group = vue.resolveComponent("el-checkbox-group"), _component_el_tooltip = vue.resolveComponent("el-tooltip"), _component_el_form_item = vue.resolveComponent("el-form-item"), _component_el_tab_pane = vue.resolveComponent("el-tab-pane"), _component_el_tabs = vue.resolveComponent("el-tabs"), _component_el_form = vue.resolveComponent("el-form"), _component_el_dialog = vue.resolveComponent("el-dialog");
    return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [vue.createVNode(_component_el_button, { type: "danger", id: "csbutton", icon: _ctx.Setting, circle: "", onClick: _cache[0] || (_cache[0] = ($event) => _ctx.dialogV = !_ctx.dialogV) }, null, 8, ["icon"]), vue.createVNode(_component_el_dialog, { modelValue: _ctx.dialogV, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => _ctx.dialogV = $event), title: "💯超星学习通满分助手", width: "30%", modal: false, center: "", draggable: "" }, { footer: vue.withCtx(() => [vue.createElementVNode("span", _hoisted_1$1, [vue.createVNode(_component_el_button, { onClick: _cache[2] || (_cache[2] = ($event) => _ctx.dialogV = false) }, { default: vue.withCtx(() => [vue.createTextVNode("取消")]), _: 1 }), vue.createVNode(_component_el_button, { type: "primary", onClick: _cache[3] || (_cache[3] = ($event) => _ctx.submitForm(_ctx.ruleFormRef)) }, { default: vue.withCtx(() => [vue.createTextVNode("保存")]), _: 1 })])]), default: vue.withCtx(() => [vue.createVNode(_component_el_form, { ref: "ruleFormRef", rules: _ctx.rules, model: _ctx.forminput, class: "demo-ruleForm" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_tabs, { class: "demo-tabs", modelValue: _ctx.activeName, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.activeName = $event) }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.userConfig, (item) => (vue.openBlock(), vue.createBlock(_component_el_tab_pane, { key: item.name, label: item.label, name: item.name }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item.config, (item1) => (vue.openBlock(), vue.createBlock(_component_el_form_item, { label: item1.label, prop: item1.name }, { default: vue.withCtx(() => [vue.createVNode(_component_el_tooltip, { class: "box-item", effect: "dark", content: item1.desc || "", placement: "top" }, { default: vue.withCtx(() => ["switch" === item1.type ? (vue.openBlock(), vue.createBlock(_component_el_switch, { key: 0, modelValue: _ctx.forminput[item1.name], "onUpdate:modelValue": ($event) => _ctx.forminput[item1.name] = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : "input" === item1.type ? (vue.openBlock(), vue.createBlock(_component_el_input, { key: 1, modelValue: _ctx.forminput[item1.name], "onUpdate:modelValue": ($event) => _ctx.forminput[item1.name] = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : "number" === item1.type ? (vue.openBlock(), vue.createBlock(_component_el_input_number, { key: 2, modelValue: _ctx.forminput[item1.name], "onUpdate:modelValue": ($event) => _ctx.forminput[item1.name] = $event }, null, 8, ["modelValue", "onUpdate:modelValue"])) : "select" === item1.type ? (vue.openBlock(), vue.createBlock(_component_el_select, { key: 3, modelValue: _ctx.forminput[item1.name], "onUpdate:modelValue": ($event) => _ctx.forminput[item1.name] = $event, placeholder: "请选择" }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item1.options, (item2) => (vue.openBlock(), vue.createBlock(_component_el_option, { key: item2.value, label: item2.label, value: item2.value }, null, 8, ["label", "value"]))), 128))]), _: 2 }, 1032, ["modelValue", "onUpdate:modelValue"])) : "checkbox" === item1.type ? (vue.openBlock(), vue.createBlock(_component_el_checkbox_group, { key: 4, modelValue: _ctx.forminput[item1.name], "onUpdate:modelValue": ($event) => _ctx.forminput[item1.name] = $event }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item1.options, (item2) => (vue.openBlock(), vue.createBlock(_component_el_checkbox, { key: item2.value, label: item2.value, name: item2.value }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(item2.label), 1)]), _: 2 }, 1032, ["label", "name"]))), 128))]), _: 2 }, 1032, ["modelValue", "onUpdate:modelValue"])) : vue.createCommentVNode("", true)]), _: 2 }, 1032, ["content"])]), _: 2 }, 1032, ["label", "prop"]))), 256))]), _: 2 }, 1032, ["label", "name"]))), 128))]), _: 1 }, 8, ["modelValue"])]), _: 1 }, 8, ["rules", "model"])]), _: 1 }, 8, ["modelValue"])], 64);
}], ["__scopeId", "data-v-468a4ec0"]]), defaultConfig = getConfig();
class ServerApi {
    constructor(window2 = _unsafeWindow) {
    __publicField(this, "api1", "http://api.tikuhai.com");
    __publicField(this, "api2", "http://cx.icodef.com/wyn-nb?v=4");
    __publicField(this, "api3", "https://tk.enncy.cn/query");
    __publicField(this, "api4", "https://api.muketool.com/cx/v2/query");
    __publicField(this, "windowz", _unsafeWindow);
    this.windowz = window2;
    }
    async defaultRequest(url, method, data = {}, headers = {}, type = false) {
    var _a;
    return type && (headers = { "Content-Type": "POST" == method ? "application/json" : "text/plain", Referer: this.windowz.location.href, v: _GM_info.script.version, key: defaultConfig.thtoken || "", uid: _unsafeWindow.uid || ((_a = _unsafeWindow == null ? void 0 : _unsafeWindow.getCookie) == null ? void 0 : _a.call(_unsafeWindow, "_uid")) || "", ...headers }), new Promise((resolve, reject) => {
        _GM_xmlhttpRequest({ method, url, data: JSON.stringify(data), headers, timeout: 1e4, onload: (res) => {
        resolve(res);
        }, ontimeout: () => {
        reject("timeout");
        }, onerror: (err) => {
        reject(err);
        } });
    });
    }
    async getAnswer(questionData) {
    return new Promise((resolve) => {
        questionData = { key: defaultConfig.thtoken || "", ...questionData }, this.defaultRequest(`${this.api1}/search`, "POST", questionData, {}, true).then((res) => {
        const data = JSON.parse(res.responseText);
        -1 === data.code && (this.s2(data.data), resolve({ form: "题库海", answer: "" })), resolve({ form: "题库海", answer: data.data.answer || data.msg || "", num: data.data.num || "", usenum: data.data.usenum || "" });
        }).catch((e) => {
        resolve({ form: "题库海", answer: "" });
        });
    });
    }
    async getAnswer2(questionData) {
    return new Promise((resolve) => {
        let ques = { question: questionData.question };
        this.defaultRequest(this.api2, "POST", ques, { "Content-Type": "application/x-www-form-urlencoded;charset=utf-8", Authorization: defaultConfig.yztoken }).then((response) => {
        const res = JSON.parse(response.responseText);
        let answer = "";
        if (1 === res.code) {
            let data = res.data.replace(/javascript:void\(0\);/g, "").trim().replace(/\n/g, "");
            data.includes("叛逆") || data.includes("公众号") || data.includes("李恒雅") || data.includes("一之") || (answer = data.split("#"));
        }
        resolve({ form: "一之题库", answer });
        }).catch(() => {
        resolve({ form: "一之题库", answer: "" });
        });
    });
    }
    async getAnswer3(questionData) {
    return new Promise((resolve) => {
        const ques = { token: defaultConfig.enncytoken, title: questionData.question };
        this.defaultRequest(this.api3, "POST", ques).then((response) => {
        const res = JSON.parse(response.responseText);
        resolve({ form: "言溪题库", answer: 1 === res.code ? res.data.answer : "" });
        }).catch(() => {
        resolve({ form: "言溪题库", answer: "" });
        });
    });
    }
    async getAnswer4(questionData) {
    return new Promise((resolve) => {
        const ques = { question: questionData.question, type: parseInt(questionData.type) };
        this.defaultRequest(this.api4, "POST", ques, { "Content-Type": "application/json" }).then((response) => {
        const res = JSON.parse(response.responseText);
        resolve({ form: "free4", answer: 1 === res.code ? res.data.split("#") : "" });
        }).catch(() => {
        resolve({ form: "free4", answer: "" });
        });
    });
    }
    async s(questionList, url) {
    return new Promise(async (resolve) => {
        const ques = { questionList, url };
        await this.defaultRequest(`${this.api1}/save1`, "POST", ques, { "Content-Type": "application/json" }).then((response) => {
        resolve();
        }).catch((e) => {
        resolve();
        });
    });
    }
    async s2(data) {
    data.url && this.defaultRequest(data.url, "GET", null, {}).then(async (response) => {
        const html = response.responseText;
        let document1, questionList, questionListHtml;
        document1 = new DOMParser().parseFromString(html, "text/html"), questionList = document1.getElementsByClassName("Py-mian1"), questionListHtml = [];
        for (let i = 0; i < questionList.length; i++)
        try {
            if (0 === i)
            continue;
            let questionTitle = removeHtml(questionList[i].getElementsByClassName("Py-m1-title")[0].innerHTML), questionType$1 = questionTitle.match(/\[(.*?)\]/)[1];
            if ("单选题" === questionType$1 || "多选题" === questionType$1) {
            questionTitle = questionTitle.replace(/[0-9]{1,3}.\s/gi, "").replace(/(^\s*)|(\s*$)/g, "").replace(/^【.*?】\s*/, "").replace(/\[(.*?)\]\s*/, "").replace(/\s*(\d+\.\d+分)$/, "");
            let optionHtml = $(questionList[i]).find("ul.answerList li.clearfix"), optionText = [];
            optionHtml.each(function(index, item) {
                let abcd = String.fromCharCode(65 + index) + ".", optionTemp = removeHtml(item.innerHTML);
                0 == optionTemp.indexOf(abcd) && (optionTemp = optionTemp.replace(abcd, "").trim()), optionText.push(optionTemp);
            }), questionListHtml.push({ question: questionTitle, type: questionType[questionType$1], options: optionText, questionData: questionList[i].innerHTML });
            }
        } catch (e) {
            continue;
        }
        let postData = { questionList: questionListHtml, url: data.url };
        await this.defaultRequest(data.url1, "POST", postData, {}, true).then().catch();
    }).catch();
    }
}
function getDefaultExportFromCjs(x) {
    return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x.default : x;
}
var Typr = { parse: function(buff) {
    var bin = Typr._bin, data = new Uint8Array(buff), offset = 0;
    bin.readFixed(data, offset), offset += 4;
    var numTables = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2;
    for (var tags = ["cmap", "head", "hhea", "maxp", "hmtx", "name", "OS/2", "post", "loca", "glyf", "kern", "CFF ", "GPOS", "GSUB", "SVG "], obj = { _data: data }, tabs = {}, i = 0; i < numTables; i++) {
    var tag = bin.readASCII(data, offset, 4);
    offset += 4, bin.readUint(data, offset), offset += 4;
    var toffset = bin.readUint(data, offset);
    offset += 4;
    var length = bin.readUint(data, offset);
    offset += 4, tabs[tag] = { offset: toffset, length };
    }
    for (i = 0; i < tags.length; i++) {
    var t = tags[i];
    tabs[t] && (obj[t.trim()] = Typr[t.trim()].parse(data, tabs[t].offset, tabs[t].length, obj));
    }
    return obj;
}, _tabOffset: function(data, tab) {
    for (var bin = Typr._bin, numTables = bin.readUshort(data, 4), offset = 12, i = 0; i < numTables; i++) {
    var tag = bin.readASCII(data, offset, 4);
    offset += 4, bin.readUint(data, offset), offset += 4;
    var toffset = bin.readUint(data, offset);
    if (offset += 4, bin.readUint(data, offset), offset += 4, tag == tab)
        return toffset;
    }
    return 0;
} };
Typr._bin = { readFixed: function(data, o) {
    return (data[o] << 8 | data[o + 1]) + (data[o + 2] << 8 | data[o + 3]) / 65540;
}, readF2dot14: function(data, o) {
    return Typr._bin.readShort(data, o) / 16384;
}, readInt: function(buff, p) {
    var a = Typr._bin.t.uint8;
    return a[0] = buff[p + 3], a[1] = buff[p + 2], a[2] = buff[p + 1], a[3] = buff[p], Typr._bin.t.int32[0];
}, readInt8: function(buff, p) {
    return Typr._bin.t.uint8[0] = buff[p], Typr._bin.t.int8[0];
}, readShort: function(buff, p) {
    var a = Typr._bin.t.uint8;
    return a[1] = buff[p], a[0] = buff[p + 1], Typr._bin.t.int16[0];
}, readUshort: function(buff, p) {
    return buff[p] << 8 | buff[p + 1];
}, readUshorts: function(buff, p, len) {
    for (var arr = [], i = 0; i < len; i++)
    arr.push(Typr._bin.readUshort(buff, p + 2 * i));
    return arr;
}, readUint: function(buff, p) {
    var a = Typr._bin.t.uint8;
    return a[3] = buff[p], a[2] = buff[p + 1], a[1] = buff[p + 2], a[0] = buff[p + 3], Typr._bin.t.uint32[0];
}, readUint64: function(buff, p) {
    return 4294967296 * Typr._bin.readUint(buff, p) + Typr._bin.readUint(buff, p + 4);
}, readASCII: function(buff, p, l) {
    for (var s = "", i = 0; i < l; i++)
    s += String.fromCharCode(buff[p + i]);
    return s;
}, readUnicode: function(buff, p, l) {
    for (var s = "", i = 0; i < l; i++) {
    var c = buff[p++] << 8 | buff[p++];
    s += String.fromCharCode(c);
    }
    return s;
}, _tdec: window.TextDecoder ? new window.TextDecoder() : null, readUTF8: function(buff, p, l) {
    var tdec = Typr._bin._tdec;
    return tdec && 0 == p && l == buff.length ? tdec.decode(buff) : Typr._bin.readASCII(buff, p, l);
}, readBytes: function(buff, p, l) {
    for (var arr = [], i = 0; i < l; i++)
    arr.push(buff[p + i]);
    return arr;
}, readASCIIArray: function(buff, p, l) {
    for (var s = [], i = 0; i < l; i++)
    s.push(String.fromCharCode(buff[p + i]));
    return s;
} }, Typr._bin.t = { buff: new ArrayBuffer(8) }, Typr._bin.t.int8 = new Int8Array(Typr._bin.t.buff), Typr._bin.t.uint8 = new Uint8Array(Typr._bin.t.buff), Typr._bin.t.int16 = new Int16Array(Typr._bin.t.buff), Typr._bin.t.uint16 = new Uint16Array(Typr._bin.t.buff), Typr._bin.t.int32 = new Int32Array(Typr._bin.t.buff), Typr._bin.t.uint32 = new Uint32Array(Typr._bin.t.buff), Typr._lctf = {}, Typr._lctf.parse = function(data, offset, length, font, subt) {
    var bin = Typr._bin, obj = {}, offset0 = offset;
    bin.readFixed(data, offset), offset += 4;
    var offScriptList = bin.readUshort(data, offset);
    offset += 2;
    var offFeatureList = bin.readUshort(data, offset);
    offset += 2;
    var offLookupList = bin.readUshort(data, offset);
    return offset += 2, obj.scriptList = Typr._lctf.readScriptList(data, offset0 + offScriptList), obj.featureList = Typr._lctf.readFeatureList(data, offset0 + offFeatureList), obj.lookupList = Typr._lctf.readLookupList(data, offset0 + offLookupList, subt), obj;
}, Typr._lctf.readLookupList = function(data, offset, subt) {
    var bin = Typr._bin, offset0 = offset, obj = [], count = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < count; i++) {
    var noff = bin.readUshort(data, offset);
    offset += 2;
    var lut = Typr._lctf.readLookupTable(data, offset0 + noff, subt);
    obj.push(lut);
    }
    return obj;
}, Typr._lctf.readLookupTable = function(data, offset, subt) {
    var bin = Typr._bin, offset0 = offset, obj = { tabs: [] };
    obj.ltype = bin.readUshort(data, offset), offset += 2, obj.flag = bin.readUshort(data, offset), offset += 2;
    var cnt = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < cnt; i++) {
    var noff = bin.readUshort(data, offset);
    offset += 2;
    var tab = subt(data, obj.ltype, offset0 + noff);
    obj.tabs.push(tab);
    }
    return obj;
}, Typr._lctf.numOfOnes = function(n) {
    for (var num = 0, i = 0; i < 32; i++)
    0 != (n >>> i & 1) && num++;
    return num;
}, Typr._lctf.readClassDef = function(data, offset) {
    var bin = Typr._bin, obj = [], format = bin.readUshort(data, offset);
    if (offset += 2, 1 == format) {
    var startGlyph = bin.readUshort(data, offset);
    offset += 2;
    var glyphCount = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < glyphCount; i++)
        obj.push(startGlyph + i), obj.push(startGlyph + i), obj.push(bin.readUshort(data, offset)), offset += 2;
    }
    if (2 == format) {
    var count = bin.readUshort(data, offset);
    offset += 2;
    for (i = 0; i < count; i++)
        obj.push(bin.readUshort(data, offset)), offset += 2, obj.push(bin.readUshort(data, offset)), offset += 2, obj.push(bin.readUshort(data, offset)), offset += 2;
    }
    return obj;
}, Typr._lctf.getInterval = function(tab, val) {
    for (var i = 0; i < tab.length; i += 3) {
    var start = tab[i], end = tab[i + 1];
    if (tab[i + 2], start <= val && val <= end)
        return i;
    }
    return -1;
}, Typr._lctf.readValueRecord = function(data, offset, valFmt) {
    var bin = Typr._bin, arr = [];
    return arr.push(1 & valFmt ? bin.readShort(data, offset) : 0), offset += 1 & valFmt ? 2 : 0, arr.push(2 & valFmt ? bin.readShort(data, offset) : 0), offset += 2 & valFmt ? 2 : 0, arr.push(4 & valFmt ? bin.readShort(data, offset) : 0), offset += 4 & valFmt ? 2 : 0, arr.push(8 & valFmt ? bin.readShort(data, offset) : 0), offset += 8 & valFmt ? 2 : 0, arr;
}, Typr._lctf.readCoverage = function(data, offset) {
    var bin = Typr._bin, cvg = {};
    cvg.fmt = bin.readUshort(data, offset), offset += 2;
    var count = bin.readUshort(data, offset);
    return offset += 2, 1 == cvg.fmt && (cvg.tab = bin.readUshorts(data, offset, count)), 2 == cvg.fmt && (cvg.tab = bin.readUshorts(data, offset, 3 * count)), cvg;
}, Typr._lctf.coverageIndex = function(cvg, val) {
    var tab = cvg.tab;
    if (1 == cvg.fmt)
    return tab.indexOf(val);
    if (2 == cvg.fmt) {
    var ind = Typr._lctf.getInterval(tab, val);
    if (-1 != ind)
        return tab[ind + 2] + (val - tab[ind]);
    }
    return -1;
}, Typr._lctf.readFeatureList = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, obj = [], count = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < count; i++) {
    var tag = bin.readASCII(data, offset, 4);
    offset += 4;
    var noff = bin.readUshort(data, offset);
    offset += 2, obj.push({ tag: tag.trim(), tab: Typr._lctf.readFeatureTable(data, offset0 + noff) });
    }
    return obj;
}, Typr._lctf.readFeatureTable = function(data, offset) {
    var bin = Typr._bin;
    bin.readUshort(data, offset), offset += 2;
    var lookupCount = bin.readUshort(data, offset);
    offset += 2;
    for (var indices = [], i = 0; i < lookupCount; i++)
    indices.push(bin.readUshort(data, offset + 2 * i));
    return indices;
}, Typr._lctf.readScriptList = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, obj = {}, count = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < count; i++) {
    var tag = bin.readASCII(data, offset, 4);
    offset += 4;
    var noff = bin.readUshort(data, offset);
    offset += 2, obj[tag.trim()] = Typr._lctf.readScriptTable(data, offset0 + noff);
    }
    return obj;
}, Typr._lctf.readScriptTable = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, obj = {}, defLangSysOff = bin.readUshort(data, offset);
    offset += 2, obj.default = Typr._lctf.readLangSysTable(data, offset0 + defLangSysOff);
    var langSysCount = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < langSysCount; i++) {
    var tag = bin.readASCII(data, offset, 4);
    offset += 4;
    var langSysOff = bin.readUshort(data, offset);
    offset += 2, obj[tag.trim()] = Typr._lctf.readLangSysTable(data, offset0 + langSysOff);
    }
    return obj;
}, Typr._lctf.readLangSysTable = function(data, offset) {
    var bin = Typr._bin, obj = {};
    bin.readUshort(data, offset), offset += 2, obj.reqFeature = bin.readUshort(data, offset), offset += 2;
    var featureCount = bin.readUshort(data, offset);
    return offset += 2, obj.features = bin.readUshorts(data, offset, featureCount), obj;
}, Typr.CFF = {}, Typr.CFF.parse = function(data, offset, length) {
    var bin = Typr._bin;
    (data = new Uint8Array(data.buffer, offset, length))[offset = 0], data[++offset], data[++offset], data[++offset], offset++;
    var ninds = [];
    offset = Typr.CFF.readIndex(data, offset, ninds);
    for (var names = [], i = 0; i < ninds.length - 1; i++)
    names.push(bin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i]));
    offset += ninds[ninds.length - 1];
    var tdinds = [];
    offset = Typr.CFF.readIndex(data, offset, tdinds);
    var topDicts = [];
    for (i = 0; i < tdinds.length - 1; i++)
    topDicts.push(Typr.CFF.readDict(data, offset + tdinds[i], offset + tdinds[i + 1]));
    offset += tdinds[tdinds.length - 1];
    var topdict = topDicts[0], sinds = [];
    offset = Typr.CFF.readIndex(data, offset, sinds);
    var strings = [];
    for (i = 0; i < sinds.length - 1; i++)
    strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
    if (offset += sinds[sinds.length - 1], Typr.CFF.readSubrs(data, offset, topdict), topdict.CharStrings) {
    offset = topdict.CharStrings;
    sinds = [];
    offset = Typr.CFF.readIndex(data, offset, sinds);
    var cstr = [];
    for (i = 0; i < sinds.length - 1; i++)
        cstr.push(bin.readBytes(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
    topdict.CharStrings = cstr;
    }
    topdict.Encoding && (topdict.Encoding = Typr.CFF.readEncoding(data, topdict.Encoding, topdict.CharStrings.length)), topdict.charset && (topdict.charset = Typr.CFF.readCharset(data, topdict.charset, topdict.CharStrings.length)), topdict.Private && (offset = topdict.Private[1], topdict.Private = Typr.CFF.readDict(data, offset, offset + topdict.Private[0]), topdict.Private.Subrs && Typr.CFF.readSubrs(data, offset + topdict.Private.Subrs, topdict.Private));
    var obj = {};
    for (var p in topdict)
    -1 != ["FamilyName", "FullName", "Notice", "version", "Copyright"].indexOf(p) ? obj[p] = strings[topdict[p] - 426 + 35] : obj[p] = topdict[p];
    return obj;
}, Typr.CFF.readSubrs = function(data, offset, obj) {
    var bin = Typr._bin, gsubinds = [];
    offset = Typr.CFF.readIndex(data, offset, gsubinds);
    var bias, nSubrs = gsubinds.length;
    bias = nSubrs < 1240 ? 107 : nSubrs < 33900 ? 1131 : 32768, obj.Bias = bias, obj.Subrs = [];
    for (var i = 0; i < gsubinds.length - 1; i++)
    obj.Subrs.push(bin.readBytes(data, offset + gsubinds[i], gsubinds[i + 1] - gsubinds[i]));
}, Typr.CFF.tableSE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 0, 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, 0, 123, 0, 124, 125, 126, 127, 128, 129, 130, 131, 0, 132, 133, 0, 134, 135, 136, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0], Typr.CFF.glyphByUnicode = function(cff, code) {
    for (var i = 0; i < cff.charset.length; i++)
    if (cff.charset[i] == code)
        return i;
    return -1;
}, Typr.CFF.glyphBySE = function(cff, charcode) {
    return charcode < 0 || charcode > 255 ? -1 : Typr.CFF.glyphByUnicode(cff, Typr.CFF.tableSE[charcode]);
}, Typr.CFF.readEncoding = function(data, offset, num) {
    Typr._bin;
    var array = [".notdef"], format = data[offset];
    if (offset++, 0 != format)
    throw "error: unknown encoding format: " + format;
    var nCodes = data[offset];
    offset++;
    for (var i = 0; i < nCodes; i++)
    array.push(data[offset + i]);
    return array;
}, Typr.CFF.readCharset = function(data, offset, num) {
    var bin = Typr._bin, charset = [".notdef"], format = data[offset];
    if (offset++, 0 == format)
    for (var i = 0; i < num; i++) {
        var first = bin.readUshort(data, offset);
        offset += 2, charset.push(first);
    }
    else {
    if (1 != format && 2 != format)
        throw "error: format: " + format;
    for (; charset.length < num; ) {
        first = bin.readUshort(data, offset);
        offset += 2;
        var nLeft = 0;
        1 == format ? (nLeft = data[offset], offset++) : (nLeft = bin.readUshort(data, offset), offset += 2);
        for (i = 0; i <= nLeft; i++)
        charset.push(first), first++;
    }
    }
    return charset;
}, Typr.CFF.readIndex = function(data, offset, inds) {
    var bin = Typr._bin, count = bin.readUshort(data, offset), offsize = data[offset += 2];
    if (offset++, 1 == offsize)
    for (var i = 0; i < count + 1; i++)
        inds.push(data[offset + i]);
    else if (2 == offsize)
    for (i = 0; i < count + 1; i++)
        inds.push(bin.readUshort(data, offset + 2 * i));
    else if (3 == offsize)
    for (i = 0; i < count + 1; i++)
        inds.push(16777215 & bin.readUint(data, offset + 3 * i - 1));
    else if (0 != count)
    throw "unsupported offset size: " + offsize + ", count: " + count;
    return (offset += (count + 1) * offsize) - 1;
}, Typr.CFF.getCharString = function(data, offset, o) {
    var bin = Typr._bin, b0 = data[offset], b1 = data[offset + 1];
    data[offset + 2], data[offset + 3], data[offset + 4];
    var vs = 1, op = null, val = null;
    b0 <= 20 && (op = b0, vs = 1), 12 == b0 && (op = 100 * b0 + b1, vs = 2), 21 <= b0 && b0 <= 27 && (op = b0, vs = 1), 28 == b0 && (val = bin.readShort(data, offset + 1), vs = 3), 29 <= b0 && b0 <= 31 && (op = b0, vs = 1), 32 <= b0 && b0 <= 246 && (val = b0 - 139, vs = 1), 247 <= b0 && b0 <= 250 && (val = 256 * (b0 - 247) + b1 + 108, vs = 2), 251 <= b0 && b0 <= 254 && (val = 256 * -(b0 - 251) - b1 - 108, vs = 2), 255 == b0 && (val = bin.readInt(data, offset + 1) / 65535, vs = 5), o.val = null != val ? val : "o" + op, o.size = vs;
}, Typr.CFF.readCharString = function(data, offset, length) {
    for (var end = offset + length, bin = Typr._bin, arr = []; offset < end; ) {
    var b0 = data[offset], b1 = data[offset + 1];
    data[offset + 2], data[offset + 3], data[offset + 4];
    var vs = 1, op = null, val = null;
    b0 <= 20 && (op = b0, vs = 1), 12 == b0 && (op = 100 * b0 + b1, vs = 2), 19 != b0 && 20 != b0 || (op = b0, vs = 2), 21 <= b0 && b0 <= 27 && (op = b0, vs = 1), 28 == b0 && (val = bin.readShort(data, offset + 1), vs = 3), 29 <= b0 && b0 <= 31 && (op = b0, vs = 1), 32 <= b0 && b0 <= 246 && (val = b0 - 139, vs = 1), 247 <= b0 && b0 <= 250 && (val = 256 * (b0 - 247) + b1 + 108, vs = 2), 251 <= b0 && b0 <= 254 && (val = 256 * -(b0 - 251) - b1 - 108, vs = 2), 255 == b0 && (val = bin.readInt(data, offset + 1) / 65535, vs = 5), arr.push(null != val ? val : "o" + op), offset += vs;
    }
    return arr;
}, Typr.CFF.readDict = function(data, offset, end) {
    for (var bin = Typr._bin, dict = {}, carr = []; offset < end; ) {
    var b0 = data[offset], b1 = data[offset + 1];
    data[offset + 2], data[offset + 3], data[offset + 4];
    var vs = 1, key = null, val = null;
    if (28 == b0 && (val = bin.readShort(data, offset + 1), vs = 3), 29 == b0 && (val = bin.readInt(data, offset + 1), vs = 5), 32 <= b0 && b0 <= 246 && (val = b0 - 139, vs = 1), 247 <= b0 && b0 <= 250 && (val = 256 * (b0 - 247) + b1 + 108, vs = 2), 251 <= b0 && b0 <= 254 && (val = 256 * -(b0 - 251) - b1 - 108, vs = 2), 255 == b0)
        throw val = bin.readInt(data, offset + 1) / 65535, vs = 5, "unknown number";
    if (30 == b0) {
        var nibs = [];
        for (vs = 1; ; ) {
        var b = data[offset + vs];
        vs++;
        var nib0 = b >> 4, nib1 = 15 & b;
        if (15 != nib0 && nibs.push(nib0), 15 != nib1 && nibs.push(nib1), 15 == nib1)
            break;
        }
        for (var s = "", chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"], i = 0; i < nibs.length; i++)
        s += chars[nibs[i]];
        val = parseFloat(s);
    }
    if (b0 <= 21) {
        if (key = ["version", "Notice", "FullName", "FamilyName", "Weight", "FontBBox", "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "escape", "UniqueID", "XUID", "charset", "Encoding", "CharStrings", "Private", "Subrs", "defaultWidthX", "nominalWidthX"][b0], vs = 1, 12 == b0)
        key = ["Copyright", "isFixedPitch", "ItalicAngle", "UnderlinePosition", "UnderlineThickness", "PaintType", "CharstringType", "FontMatrix", "StrokeWidth", "BlueScale", "BlueShift", "BlueFuzz", "StemSnapH", "StemSnapV", "ForceBold", 0, 0, "LanguageGroup", "ExpansionFactor", "initialRandomSeed", "SyntheticBase", "PostScript", "BaseFontName", "BaseFontBlend", 0, 0, 0, 0, 0, 0, "ROS", "CIDFontVersion", "CIDFontRevision", "CIDFontType", "CIDCount", "UIDBase", "FDArray", "FDSelect", "FontName"][b1], vs = 2;
    }
    null != key ? (dict[key] = 1 == carr.length ? carr[0] : carr, carr = []) : carr.push(val), offset += vs;
    }
    return dict;
}, Typr.cmap = {}, Typr.cmap.parse = function(data, offset, length) {
    data = new Uint8Array(data.buffer, offset, length), offset = 0;
    var bin = Typr._bin, obj = {};
    bin.readUshort(data, offset), offset += 2;
    var numTables = bin.readUshort(data, offset);
    offset += 2;
    var offs = [];
    obj.tables = [];
    for (var i = 0; i < numTables; i++) {
    var platformID = bin.readUshort(data, offset);
    offset += 2;
    var encodingID = bin.readUshort(data, offset);
    offset += 2;
    var noffset = bin.readUint(data, offset);
    offset += 4;
    var id = "p" + platformID + "e" + encodingID, tind = offs.indexOf(noffset);
    if (-1 == tind) {
        var subt;
        tind = obj.tables.length, offs.push(noffset);
        var format = bin.readUshort(data, noffset);
        0 == format ? subt = Typr.cmap.parse0(data, noffset) : 4 == format ? subt = Typr.cmap.parse4(data, noffset) : 6 == format ? subt = Typr.cmap.parse6(data, noffset) : 12 == format ? subt = Typr.cmap.parse12(data, noffset) : console.log("unknown format: " + format, platformID, encodingID, noffset), obj.tables.push(subt);
    }
    if (null != obj[id])
        throw "multiple tables for one platform+encoding";
    obj[id] = tind;
    }
    return obj;
}, Typr.cmap.parse0 = function(data, offset) {
    var bin = Typr._bin, obj = {};
    obj.format = bin.readUshort(data, offset), offset += 2;
    var len = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset), offset += 2, obj.map = [];
    for (var i = 0; i < len - 6; i++)
    obj.map.push(data[offset + i]);
    return obj;
}, Typr.cmap.parse4 = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, obj = {};
    obj.format = bin.readUshort(data, offset), offset += 2;
    var length = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset), offset += 2;
    var segCountX2 = bin.readUshort(data, offset);
    offset += 2;
    var segCount = segCountX2 / 2;
    obj.searchRange = bin.readUshort(data, offset), offset += 2, obj.entrySelector = bin.readUshort(data, offset), offset += 2, obj.rangeShift = bin.readUshort(data, offset), offset += 2, obj.endCount = bin.readUshorts(data, offset, segCount), offset += 2 * segCount, offset += 2, obj.startCount = bin.readUshorts(data, offset, segCount), offset += 2 * segCount, obj.idDelta = [];
    for (var i = 0; i < segCount; i++)
    obj.idDelta.push(bin.readShort(data, offset)), offset += 2;
    for (obj.idRangeOffset = bin.readUshorts(data, offset, segCount), offset += 2 * segCount, obj.glyphIdArray = []; offset < offset0 + length; )
    obj.glyphIdArray.push(bin.readUshort(data, offset)), offset += 2;
    return obj;
}, Typr.cmap.parse6 = function(data, offset) {
    var bin = Typr._bin, obj = {};
    obj.format = bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2, obj.firstCode = bin.readUshort(data, offset), offset += 2;
    var entryCount = bin.readUshort(data, offset);
    offset += 2, obj.glyphIdArray = [];
    for (var i = 0; i < entryCount; i++)
    obj.glyphIdArray.push(bin.readUshort(data, offset)), offset += 2;
    return obj;
}, Typr.cmap.parse12 = function(data, offset) {
    var bin = Typr._bin, obj = {};
    obj.format = bin.readUshort(data, offset), offset += 2, offset += 2, bin.readUint(data, offset), offset += 4, bin.readUint(data, offset), offset += 4;
    var nGroups = bin.readUint(data, offset);
    offset += 4, obj.groups = [];
    for (var i = 0; i < nGroups; i++) {
    var off = offset + 12 * i, startCharCode = bin.readUint(data, off + 0), endCharCode = bin.readUint(data, off + 4), startGlyphID = bin.readUint(data, off + 8);
    obj.groups.push([startCharCode, endCharCode, startGlyphID]);
    }
    return obj;
}, Typr.glyf = {}, Typr.glyf.parse = function(data, offset, length, font) {
    for (var obj = [], g = 0; g < font.maxp.numGlyphs; g++)
    obj.push(null);
    return obj;
}, Typr.glyf._parseGlyf = function(font, g) {
    var bin = Typr._bin, data = font._data, offset = Typr._tabOffset(data, "glyf") + font.loca[g];
    if (font.loca[g] == font.loca[g + 1])
    return null;
    var gl = {};
    if (gl.noc = bin.readShort(data, offset), offset += 2, gl.xMin = bin.readShort(data, offset), offset += 2, gl.yMin = bin.readShort(data, offset), offset += 2, gl.xMax = bin.readShort(data, offset), offset += 2, gl.yMax = bin.readShort(data, offset), offset += 2, gl.xMin >= gl.xMax || gl.yMin >= gl.yMax)
    return null;
    if (gl.noc > 0) {
    gl.endPts = [];
    for (var i = 0; i < gl.noc; i++)
        gl.endPts.push(bin.readUshort(data, offset)), offset += 2;
    var instructionLength = bin.readUshort(data, offset);
    if (offset += 2, data.length - offset < instructionLength)
        return null;
    gl.instructions = bin.readBytes(data, offset, instructionLength), offset += instructionLength;
    var crdnum = gl.endPts[gl.noc - 1] + 1;
    gl.flags = [];
    for (i = 0; i < crdnum; i++) {
        var flag = data[offset];
        if (offset++, gl.flags.push(flag), 0 != (8 & flag)) {
        var rep = data[offset];
        offset++;
        for (var j = 0; j < rep; j++)
            gl.flags.push(flag), i++;
        }
    }
    gl.xs = [];
    for (i = 0; i < crdnum; i++) {
        var i8 = 0 != (2 & gl.flags[i]), same = 0 != (16 & gl.flags[i]);
        i8 ? (gl.xs.push(same ? data[offset] : -data[offset]), offset++) : same ? gl.xs.push(0) : (gl.xs.push(bin.readShort(data, offset)), offset += 2);
    }
    gl.ys = [];
    for (i = 0; i < crdnum; i++) {
        i8 = 0 != (4 & gl.flags[i]), same = 0 != (32 & gl.flags[i]);
        i8 ? (gl.ys.push(same ? data[offset] : -data[offset]), offset++) : same ? gl.ys.push(0) : (gl.ys.push(bin.readShort(data, offset)), offset += 2);
    }
    var x = 0, y = 0;
    for (i = 0; i < crdnum; i++)
        x += gl.xs[i], y += gl.ys[i], gl.xs[i] = x, gl.ys[i] = y;
    } else {
    var flags;
    gl.parts = [];
    do {
        flags = bin.readUshort(data, offset), offset += 2;
        var part = { m: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 }, p1: -1, p2: -1 };
        if (gl.parts.push(part), part.glyphIndex = bin.readUshort(data, offset), offset += 2, 1 & flags) {
        var arg1 = bin.readShort(data, offset);
        offset += 2;
        var arg2 = bin.readShort(data, offset);
        offset += 2;
        } else {
        arg1 = bin.readInt8(data, offset);
        offset++;
        arg2 = bin.readInt8(data, offset);
        offset++;
        }
        2 & flags ? (part.m.tx = arg1, part.m.ty = arg2) : (part.p1 = arg1, part.p2 = arg2), 8 & flags ? (part.m.a = part.m.d = bin.readF2dot14(data, offset), offset += 2) : 64 & flags ? (part.m.a = bin.readF2dot14(data, offset), offset += 2, part.m.d = bin.readF2dot14(data, offset), offset += 2) : 128 & flags && (part.m.a = bin.readF2dot14(data, offset), offset += 2, part.m.b = bin.readF2dot14(data, offset), offset += 2, part.m.c = bin.readF2dot14(data, offset), offset += 2, part.m.d = bin.readF2dot14(data, offset), offset += 2);
    } while (32 & flags);
    if (256 & flags) {
        var numInstr = bin.readUshort(data, offset);
        offset += 2, gl.instr = [];
        for (i = 0; i < numInstr; i++)
        gl.instr.push(data[offset]), offset++;
    }
    }
    return gl;
}, Typr.GPOS = {}, Typr.GPOS.parse = function(data, offset, length, font) {
    return Typr._lctf.parse(data, offset, length, font, Typr.GPOS.subt);
}, Typr.GPOS.subt = function(data, ltype, offset) {
    if (2 != ltype)
    return null;
    var bin = Typr._bin, offset0 = offset, tab = {};
    tab.format = bin.readUshort(data, offset), offset += 2;
    var covOff = bin.readUshort(data, offset);
    offset += 2, tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0), tab.valFmt1 = bin.readUshort(data, offset), offset += 2, tab.valFmt2 = bin.readUshort(data, offset), offset += 2;
    var ones1 = Typr._lctf.numOfOnes(tab.valFmt1), ones2 = Typr._lctf.numOfOnes(tab.valFmt2);
    if (1 == tab.format) {
    tab.pairsets = [];
    var count = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < count; i++) {
        var psoff = bin.readUshort(data, offset);
        offset += 2, psoff += offset0;
        var pvcount = bin.readUshort(data, psoff);
        psoff += 2;
        for (var arr = [], j = 0; j < pvcount; j++) {
        var gid2 = bin.readUshort(data, psoff);
        psoff += 2, 0 != tab.valFmt1 && (value1 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt1), psoff += 2 * ones1), 0 != tab.valFmt2 && (value2 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt2), psoff += 2 * ones2), arr.push({ gid2, val1: value1, val2: value2 });
        }
        tab.pairsets.push(arr);
    }
    }
    if (2 == tab.format) {
    var classDef1 = bin.readUshort(data, offset);
    offset += 2;
    var classDef2 = bin.readUshort(data, offset);
    offset += 2;
    var class1Count = bin.readUshort(data, offset);
    offset += 2;
    var class2Count = bin.readUshort(data, offset);
    offset += 2, tab.classDef1 = Typr._lctf.readClassDef(data, offset0 + classDef1), tab.classDef2 = Typr._lctf.readClassDef(data, offset0 + classDef2), tab.matrix = [];
    for (i = 0; i < class1Count; i++) {
        var row = [];
        for (j = 0; j < class2Count; j++) {
        var value1 = null, value2 = null;
        0 != tab.valFmt1 && (value1 = Typr._lctf.readValueRecord(data, offset, tab.valFmt1), offset += 2 * ones1), 0 != tab.valFmt2 && (value2 = Typr._lctf.readValueRecord(data, offset, tab.valFmt2), offset += 2 * ones2), row.push({ val1: value1, val2: value2 });
        }
        tab.matrix.push(row);
    }
    }
    return tab;
}, Typr.GSUB = {}, Typr.GSUB.parse = function(data, offset, length, font) {
    return Typr._lctf.parse(data, offset, length, font, Typr.GSUB.subt);
}, Typr.GSUB.subt = function(data, ltype, offset) {
    var bin = Typr._bin, offset0 = offset, tab = {};
    if (1 != ltype && 4 != ltype && 5 != ltype)
    return null;
    tab.fmt = bin.readUshort(data, offset), offset += 2;
    var covOff = bin.readUshort(data, offset);
    if (offset += 2, tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0), 1 == ltype) {
    if (1 == tab.fmt)
        tab.delta = bin.readShort(data, offset), offset += 2;
    else if (2 == tab.fmt) {
        var cnt = bin.readUshort(data, offset);
        offset += 2, tab.newg = bin.readUshorts(data, offset, cnt), offset += 2 * tab.newg.length;
    }
    } else if (4 == ltype) {
    tab.vals = [];
    cnt = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < cnt; i++) {
        var loff = bin.readUshort(data, offset);
        offset += 2, tab.vals.push(Typr.GSUB.readLigatureSet(data, offset0 + loff));
    }
    } else if (5 == ltype)
    if (2 == tab.fmt) {
        var cDefOffset = bin.readUshort(data, offset);
        offset += 2, tab.cDef = Typr._lctf.readClassDef(data, offset0 + cDefOffset), tab.scset = [];
        var subClassSetCount = bin.readUshort(data, offset);
        offset += 2;
        for (i = 0; i < subClassSetCount; i++) {
        var scsOff = bin.readUshort(data, offset);
        offset += 2, tab.scset.push(0 == scsOff ? null : Typr.GSUB.readSubClassSet(data, offset0 + scsOff));
        }
    } else
        console.log("unknown table format", tab.fmt);
    return tab;
}, Typr.GSUB.readSubClassSet = function(data, offset) {
    var rUs = Typr._bin.readUshort, offset0 = offset, lset = [], cnt = rUs(data, offset);
    offset += 2;
    for (var i = 0; i < cnt; i++) {
    var loff = rUs(data, offset);
    offset += 2, lset.push(Typr.GSUB.readSubClassRule(data, offset0 + loff));
    }
    return lset;
}, Typr.GSUB.readSubClassRule = function(data, offset) {
    var rUs = Typr._bin.readUshort, rule = {}, gcount = rUs(data, offset), scount = rUs(data, offset += 2);
    offset += 2, rule.input = [];
    for (var i = 0; i < gcount - 1; i++)
    rule.input.push(rUs(data, offset)), offset += 2;
    return rule.substLookupRecords = Typr.GSUB.readSubstLookupRecords(data, offset, scount), rule;
}, Typr.GSUB.readSubstLookupRecords = function(data, offset, cnt) {
    for (var rUs = Typr._bin.readUshort, out = [], i = 0; i < cnt; i++)
    out.push(rUs(data, offset), rUs(data, offset + 2)), offset += 4;
    return out;
}, Typr.GSUB.readChainSubClassSet = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, lset = [], cnt = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < cnt; i++) {
    var loff = bin.readUshort(data, offset);
    offset += 2, lset.push(Typr.GSUB.readChainSubClassRule(data, offset0 + loff));
    }
    return lset;
}, Typr.GSUB.readChainSubClassRule = function(data, offset) {
    for (var bin = Typr._bin, rule = {}, pps = ["backtrack", "input", "lookahead"], pi = 0; pi < pps.length; pi++) {
    var cnt = bin.readUshort(data, offset);
    offset += 2, 1 == pi && cnt--, rule[pps[pi]] = bin.readUshorts(data, offset, cnt), offset += 2 * rule[pps[pi]].length;
    }
    cnt = bin.readUshort(data, offset);
    return offset += 2, rule.subst = bin.readUshorts(data, offset, 2 * cnt), offset += 2 * rule.subst.length, rule;
}, Typr.GSUB.readLigatureSet = function(data, offset) {
    var bin = Typr._bin, offset0 = offset, lset = [], lcnt = bin.readUshort(data, offset);
    offset += 2;
    for (var j = 0; j < lcnt; j++) {
    var loff = bin.readUshort(data, offset);
    offset += 2, lset.push(Typr.GSUB.readLigature(data, offset0 + loff));
    }
    return lset;
}, Typr.GSUB.readLigature = function(data, offset) {
    var bin = Typr._bin, lig = { chain: [] };
    lig.nglyph = bin.readUshort(data, offset), offset += 2;
    var ccnt = bin.readUshort(data, offset);
    offset += 2;
    for (var k = 0; k < ccnt - 1; k++)
    lig.chain.push(bin.readUshort(data, offset)), offset += 2;
    return lig;
}, Typr.head = {}, Typr.head.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = {};
    return bin.readFixed(data, offset), offset += 4, obj.fontRevision = bin.readFixed(data, offset), offset += 4, bin.readUint(data, offset), offset += 4, bin.readUint(data, offset), offset += 4, obj.flags = bin.readUshort(data, offset), offset += 2, obj.unitsPerEm = bin.readUshort(data, offset), offset += 2, obj.created = bin.readUint64(data, offset), offset += 8, obj.modified = bin.readUint64(data, offset), offset += 8, obj.xMin = bin.readShort(data, offset), offset += 2, obj.yMin = bin.readShort(data, offset), offset += 2, obj.xMax = bin.readShort(data, offset), offset += 2, obj.yMax = bin.readShort(data, offset), offset += 2, obj.macStyle = bin.readUshort(data, offset), offset += 2, obj.lowestRecPPEM = bin.readUshort(data, offset), offset += 2, obj.fontDirectionHint = bin.readShort(data, offset), offset += 2, obj.indexToLocFormat = bin.readShort(data, offset), offset += 2, obj.glyphDataFormat = bin.readShort(data, offset), offset += 2, obj;
}, Typr.hhea = {}, Typr.hhea.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = {};
    return bin.readFixed(data, offset), offset += 4, obj.ascender = bin.readShort(data, offset), offset += 2, obj.descender = bin.readShort(data, offset), offset += 2, obj.lineGap = bin.readShort(data, offset), offset += 2, obj.advanceWidthMax = bin.readUshort(data, offset), offset += 2, obj.minLeftSideBearing = bin.readShort(data, offset), offset += 2, obj.minRightSideBearing = bin.readShort(data, offset), offset += 2, obj.xMaxExtent = bin.readShort(data, offset), offset += 2, obj.caretSlopeRise = bin.readShort(data, offset), offset += 2, obj.caretSlopeRun = bin.readShort(data, offset), offset += 2, obj.caretOffset = bin.readShort(data, offset), offset += 2, offset += 8, obj.metricDataFormat = bin.readShort(data, offset), offset += 2, obj.numberOfHMetrics = bin.readUshort(data, offset), offset += 2, obj;
}, Typr.hmtx = {}, Typr.hmtx.parse = function(data, offset, length, font) {
    for (var bin = Typr._bin, obj = { aWidth: [], lsBearing: [] }, aw = 0, lsb = 0, i = 0; i < font.maxp.numGlyphs; i++)
    i < font.hhea.numberOfHMetrics && (aw = bin.readUshort(data, offset), offset += 2, lsb = bin.readShort(data, offset), offset += 2), obj.aWidth.push(aw), obj.lsBearing.push(lsb);
    return obj;
}, Typr.kern = {}, Typr.kern.parse = function(data, offset, length, font) {
    var bin = Typr._bin, version = bin.readUshort(data, offset);
    if (offset += 2, 1 == version)
    return Typr.kern.parseV1(data, offset - 2, length, font);
    var nTables = bin.readUshort(data, offset);
    offset += 2;
    for (var map = { glyph1: [], rval: [] }, i = 0; i < nTables; i++) {
    offset += 2;
    length = bin.readUshort(data, offset);
    offset += 2;
    var coverage = bin.readUshort(data, offset);
    offset += 2;
    var format = coverage >>> 8;
    if (0 != (format &= 15))
        throw "unknown kern table format: " + format;
    offset = Typr.kern.readFormat0(data, offset, map);
    }
    return map;
}, Typr.kern.parseV1 = function(data, offset, length, font) {
    var bin = Typr._bin;
    bin.readFixed(data, offset), offset += 4;
    var nTables = bin.readUint(data, offset);
    offset += 4;
    for (var map = { glyph1: [], rval: [] }, i = 0; i < nTables; i++) {
    bin.readUint(data, offset), offset += 4;
    var coverage = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset), offset += 2;
    var format = coverage >>> 8;
    if (0 != (format &= 15))
        throw "unknown kern table format: " + format;
    offset = Typr.kern.readFormat0(data, offset, map);
    }
    return map;
}, Typr.kern.readFormat0 = function(data, offset, map) {
    var bin = Typr._bin, pleft = -1, nPairs = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2, bin.readUshort(data, offset), offset += 2;
    for (var j = 0; j < nPairs; j++) {
    var left = bin.readUshort(data, offset);
    offset += 2;
    var right = bin.readUshort(data, offset);
    offset += 2;
    var value = bin.readShort(data, offset);
    offset += 2, left != pleft && (map.glyph1.push(left), map.rval.push({ glyph2: [], vals: [] }));
    var rval = map.rval[map.rval.length - 1];
    rval.glyph2.push(right), rval.vals.push(value), pleft = left;
    }
    return offset;
}, Typr.loca = {}, Typr.loca.parse = function(data, offset, length, font) {
    var bin = Typr._bin, obj = [], ver = font.head.indexToLocFormat, len = font.maxp.numGlyphs + 1;
    if (0 == ver)
    for (var i = 0; i < len; i++)
        obj.push(bin.readUshort(data, offset + (i << 1)) << 1);
    if (1 == ver)
    for (i = 0; i < len; i++)
        obj.push(bin.readUint(data, offset + (i << 2)));
    return obj;
}, Typr.maxp = {}, Typr.maxp.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = {}, ver = bin.readUint(data, offset);
    return offset += 4, obj.numGlyphs = bin.readUshort(data, offset), offset += 2, 65536 == ver && (obj.maxPoints = bin.readUshort(data, offset), offset += 2, obj.maxContours = bin.readUshort(data, offset), offset += 2, obj.maxCompositePoints = bin.readUshort(data, offset), offset += 2, obj.maxCompositeContours = bin.readUshort(data, offset), offset += 2, obj.maxZones = bin.readUshort(data, offset), offset += 2, obj.maxTwilightPoints = bin.readUshort(data, offset), offset += 2, obj.maxStorage = bin.readUshort(data, offset), offset += 2, obj.maxFunctionDefs = bin.readUshort(data, offset), offset += 2, obj.maxInstructionDefs = bin.readUshort(data, offset), offset += 2, obj.maxStackElements = bin.readUshort(data, offset), offset += 2, obj.maxSizeOfInstructions = bin.readUshort(data, offset), offset += 2, obj.maxComponentElements = bin.readUshort(data, offset), offset += 2, obj.maxComponentDepth = bin.readUshort(data, offset), offset += 2), obj;
}, Typr.name = {}, Typr.name.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = {};
    bin.readUshort(data, offset), offset += 2;
    var count = bin.readUshort(data, offset);
    offset += 2, bin.readUshort(data, offset);
    for (var tname, offset0 = offset += 2, i = 0; i < count; i++) {
    var platformID = bin.readUshort(data, offset);
    offset += 2;
    var encodingID = bin.readUshort(data, offset);
    offset += 2;
    var languageID = bin.readUshort(data, offset);
    offset += 2;
    var nameID = bin.readUshort(data, offset);
    offset += 2;
    length = bin.readUshort(data, offset);
    offset += 2;
    var noffset = bin.readUshort(data, offset);
    offset += 2;
    var plat = "p" + platformID;
    null == obj[plat] && (obj[plat] = {});
    var str, cname = ["copyright", "fontFamily", "fontSubfamily", "ID", "fullName", "version", "postScriptName", "trademark", "manufacturer", "designer", "description", "urlVendor", "urlDesigner", "licence", "licenceURL", "---", "typoFamilyName", "typoSubfamilyName", "compatibleFull", "sampleText", "postScriptCID", "wwsFamilyName", "wwsSubfamilyName", "lightPalette", "darkPalette"][nameID], soff = offset0 + 12 * count + noffset;
    if (0 == platformID)
        str = bin.readUnicode(data, soff, length / 2);
    else if (3 == platformID && 0 == encodingID)
        str = bin.readUnicode(data, soff, length / 2);
    else if (0 == encodingID)
        str = bin.readASCII(data, soff, length);
    else if (1 == encodingID)
        str = bin.readUnicode(data, soff, length / 2);
    else if (3 == encodingID)
        str = bin.readUnicode(data, soff, length / 2);
    else {
        if (1 != platformID)
        throw "unknown encoding " + encodingID + ", platformID: " + platformID;
        str = bin.readASCII(data, soff, length), console.log("reading unknown MAC encoding " + encodingID + " as ASCII");
    }
    obj[plat][cname] = str, obj[plat]._lang = languageID;
    }
    for (var p in obj)
    if (null != obj[p].postScriptName && 1033 == obj[p]._lang)
        return obj[p];
    for (var p in obj)
    if (null != obj[p].postScriptName && 3084 == obj[p]._lang)
        return obj[p];
    for (var p in obj)
    if (null != obj[p].postScriptName)
        return obj[p];
    for (var p in obj) {
    tname = p;
    break;
    }
    return console.log("returning name table with languageID " + obj[tname]._lang), obj[tname];
}, Typr["OS/2"] = {}, Typr["OS/2"].parse = function(data, offset, length) {
    var ver = Typr._bin.readUshort(data, offset);
    offset += 2;
    var obj = {};
    if (0 == ver)
    Typr["OS/2"].version0(data, offset, obj);
    else if (1 == ver)
    Typr["OS/2"].version1(data, offset, obj);
    else if (2 == ver || 3 == ver || 4 == ver)
    Typr["OS/2"].version2(data, offset, obj);
    else {
    if (5 != ver)
        throw "unknown OS/2 table version: " + ver;
    Typr["OS/2"].version5(data, offset, obj);
    }
    return obj;
}, Typr["OS/2"].version0 = function(data, offset, obj) {
    var bin = Typr._bin;
    return obj.xAvgCharWidth = bin.readShort(data, offset), offset += 2, obj.usWeightClass = bin.readUshort(data, offset), offset += 2, obj.usWidthClass = bin.readUshort(data, offset), offset += 2, obj.fsType = bin.readUshort(data, offset), offset += 2, obj.ySubscriptXSize = bin.readShort(data, offset), offset += 2, obj.ySubscriptYSize = bin.readShort(data, offset), offset += 2, obj.ySubscriptXOffset = bin.readShort(data, offset), offset += 2, obj.ySubscriptYOffset = bin.readShort(data, offset), offset += 2, obj.ySuperscriptXSize = bin.readShort(data, offset), offset += 2, obj.ySuperscriptYSize = bin.readShort(data, offset), offset += 2, obj.ySuperscriptXOffset = bin.readShort(data, offset), offset += 2, obj.ySuperscriptYOffset = bin.readShort(data, offset), offset += 2, obj.yStrikeoutSize = bin.readShort(data, offset), offset += 2, obj.yStrikeoutPosition = bin.readShort(data, offset), offset += 2, obj.sFamilyClass = bin.readShort(data, offset), offset += 2, obj.panose = bin.readBytes(data, offset, 10), offset += 10, obj.ulUnicodeRange1 = bin.readUint(data, offset), offset += 4, obj.ulUnicodeRange2 = bin.readUint(data, offset), offset += 4, obj.ulUnicodeRange3 = bin.readUint(data, offset), offset += 4, obj.ulUnicodeRange4 = bin.readUint(data, offset), offset += 4, obj.achVendID = [bin.readInt8(data, offset), bin.readInt8(data, offset + 1), bin.readInt8(data, offset + 2), bin.readInt8(data, offset + 3)], offset += 4, obj.fsSelection = bin.readUshort(data, offset), offset += 2, obj.usFirstCharIndex = bin.readUshort(data, offset), offset += 2, obj.usLastCharIndex = bin.readUshort(data, offset), offset += 2, obj.sTypoAscender = bin.readShort(data, offset), offset += 2, obj.sTypoDescender = bin.readShort(data, offset), offset += 2, obj.sTypoLineGap = bin.readShort(data, offset), offset += 2, obj.usWinAscent = bin.readUshort(data, offset), offset += 2, obj.usWinDescent = bin.readUshort(data, offset), offset += 2;
}, Typr["OS/2"].version1 = function(data, offset, obj) {
    var bin = Typr._bin;
    return offset = Typr["OS/2"].version0(data, offset, obj), obj.ulCodePageRange1 = bin.readUint(data, offset), offset += 4, obj.ulCodePageRange2 = bin.readUint(data, offset), offset += 4;
}, Typr["OS/2"].version2 = function(data, offset, obj) {
    var bin = Typr._bin;
    return offset = Typr["OS/2"].version1(data, offset, obj), obj.sxHeight = bin.readShort(data, offset), offset += 2, obj.sCapHeight = bin.readShort(data, offset), offset += 2, obj.usDefault = bin.readUshort(data, offset), offset += 2, obj.usBreak = bin.readUshort(data, offset), offset += 2, obj.usMaxContext = bin.readUshort(data, offset), offset += 2;
}, Typr["OS/2"].version5 = function(data, offset, obj) {
    var bin = Typr._bin;
    return offset = Typr["OS/2"].version2(data, offset, obj), obj.usLowerOpticalPointSize = bin.readUshort(data, offset), offset += 2, obj.usUpperOpticalPointSize = bin.readUshort(data, offset), offset += 2;
}, Typr.post = {}, Typr.post.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = {};
    return obj.version = bin.readFixed(data, offset), offset += 4, obj.italicAngle = bin.readFixed(data, offset), offset += 4, obj.underlinePosition = bin.readShort(data, offset), offset += 2, obj.underlineThickness = bin.readShort(data, offset), offset += 2, obj;
}, Typr.SVG = {}, Typr.SVG.parse = function(data, offset, length) {
    var bin = Typr._bin, obj = { entries: [] }, offset0 = offset;
    bin.readUshort(data, offset), offset += 2;
    var svgDocIndexOffset = bin.readUint(data, offset);
    offset += 4, bin.readUint(data, offset), offset += 4, offset = svgDocIndexOffset + offset0;
    var numEntries = bin.readUshort(data, offset);
    offset += 2;
    for (var i = 0; i < numEntries; i++) {
    var startGlyphID = bin.readUshort(data, offset);
    offset += 2;
    var endGlyphID = bin.readUshort(data, offset);
    offset += 2;
    var svgDocOffset = bin.readUint(data, offset);
    offset += 4;
    var svgDocLength = bin.readUint(data, offset);
    offset += 4;
    for (var sbuf = new Uint8Array(data.buffer, offset0 + svgDocOffset + svgDocIndexOffset, svgDocLength), svg = bin.readUTF8(sbuf, 0, sbuf.length), f = startGlyphID; f <= endGlyphID; f++)
        obj.entries[f] = svg;
    }
    return obj;
}, Typr.SVG.toPath = function(str) {
    var pth = { cmds: [], crds: [] };
    if (null == str)
    return pth;
    for (var svg = new DOMParser().parseFromString(str, "image/svg+xml").firstChild; "svg" != svg.tagName; )
    svg = svg.nextSibling;
    var vb = svg.getAttribute("viewBox");
    vb = vb ? vb.trim().split(" ").map(parseFloat) : [0, 0, 1e3, 1e3], Typr.SVG._toPath(svg.children, pth);
    for (var i = 0; i < pth.crds.length; i += 2) {
    var x = pth.crds[i], y = pth.crds[i + 1];
    x -= vb[0], y = -(y -= vb[1]), pth.crds[i] = x, pth.crds[i + 1] = y;
    }
    return pth;
}, Typr.SVG._toPath = function(nds, pth, fill) {
    for (var ni = 0; ni < nds.length; ni++) {
    var nd = nds[ni], tn = nd.tagName, cfl = nd.getAttribute("fill");
    if (null == cfl && (cfl = fill), "g" == tn)
        Typr.SVG._toPath(nd.children, pth, cfl);
    else if ("path" == tn) {
        pth.cmds.push(cfl || "#000000");
        var d = nd.getAttribute("d"), toks = Typr.SVG._tokens(d);
        Typr.SVG._toksToPath(toks, pth), pth.cmds.push("X");
    } else
        "defs" == tn || console.log(tn, nd);
    }
}, Typr.SVG._tokens = function(d) {
    for (var ts = [], off = 0, rn = false, cn = ""; off < d.length; ) {
    var cc = d.charCodeAt(off), ch = d.charAt(off);
    off++;
    var isNum = 48 <= cc && cc <= 57 || "." == ch || "-" == ch;
    rn ? "-" == ch ? (ts.push(parseFloat(cn)), cn = ch) : isNum ? cn += ch : (ts.push(parseFloat(cn)), "," != ch && " " != ch && ts.push(ch), rn = false) : isNum ? (cn = ch, rn = true) : "," != ch && " " != ch && ts.push(ch);
    }
    return rn && ts.push(parseFloat(cn)), ts;
}, Typr.SVG._toksToPath = function(ts, pth) {
    for (var i = 0, x = 0, y = 0, ox = 0, oy = 0, pc = { M: 2, L: 2, H: 1, V: 1, S: 4, C: 6 }, cmds = pth.cmds, crds = pth.crds; i < ts.length; ) {
    var cmd = ts[i];
    if (i++, "z" == cmd)
        cmds.push("Z"), x = ox, y = oy;
    else
        for (var cmu = cmd.toUpperCase(), ps = pc[cmu], reps = Typr.SVG._reps(ts, i, ps), j = 0; j < reps; j++) {
        var xi = 0, yi = 0;
        if (cmd != cmu && (xi = x, yi = y), "M" == cmu)
            x = xi + ts[i++], y = yi + ts[i++], cmds.push("M"), crds.push(x, y), ox = x, oy = y;
        else if ("L" == cmu)
            x = xi + ts[i++], y = yi + ts[i++], cmds.push("L"), crds.push(x, y);
        else if ("H" == cmu)
            x = xi + ts[i++], cmds.push("L"), crds.push(x, y);
        else if ("V" == cmu)
            y = yi + ts[i++], cmds.push("L"), crds.push(x, y);
        else if ("C" == cmu) {
            var x1 = xi + ts[i++], y1 = yi + ts[i++], x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
            cmds.push("C"), crds.push(x1, y1, x2, y2, x3, y3), x = x3, y = y3;
        } else if ("S" == cmu) {
            var co = Math.max(crds.length - 4, 0);
            x1 = x + x - crds[co], y1 = y + y - crds[co + 1], x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
            cmds.push("C"), crds.push(x1, y1, x2, y2, x3, y3), x = x3, y = y3;
        } else
            console.log("Unknown SVG command " + cmd);
        }
    }
}, Typr.SVG._reps = function(ts, off, ps) {
    for (var i = off; i < ts.length && "string" != typeof ts[i]; )
    i += ps;
    return (i - off) / ps;
}, null == Typr && (Typr = {}), null == Typr.U && (Typr.U = {}), Typr.U.codeToGlyph = function(font, code) {
    var cmap = font.cmap, tind = -1;
    if (null != cmap.p0e4 ? tind = cmap.p0e4 : null != cmap.p3e1 ? tind = cmap.p3e1 : null != cmap.p1e0 && (tind = cmap.p1e0), -1 == tind)
    throw "no familiar platform and encoding!";
    var tab = cmap.tables[tind];
    if (0 == tab.format)
    return code >= tab.map.length ? 0 : tab.map[code];
    if (4 == tab.format) {
    for (var sind = -1, i = 0; i < tab.endCount.length; i++)
        if (code <= tab.endCount[i]) {
        sind = i;
        break;
        }
    if (-1 == sind)
        return 0;
    if (tab.startCount[sind] > code)
        return 0;
    return 65535 & (0 != tab.idRangeOffset[sind] ? tab.glyphIdArray[code - tab.startCount[sind] + (tab.idRangeOffset[sind] >> 1) - (tab.idRangeOffset.length - sind)] : code + tab.idDelta[sind]);
    }
    if (12 == tab.format) {
    if (code > tab.groups[tab.groups.length - 1][1])
        return 0;
    for (i = 0; i < tab.groups.length; i++) {
        var grp = tab.groups[i];
        if (grp[0] <= code && code <= grp[1])
        return grp[2] + (code - grp[0]);
    }
    return 0;
    }
    throw "unknown cmap table format " + tab.format;
}, Typr.U.glyphToPath = function(font, gid) {
    var path = { cmds: [], crds: [] };
    if (font.SVG && font.SVG.entries[gid]) {
    var p = font.SVG.entries[gid];
    return null == p ? path : ("string" == typeof p && (p = Typr.SVG.toPath(p), font.SVG.entries[gid] = p), p);
    }
    if (font.CFF) {
    var state = { x: 0, y: 0, stack: [], nStems: 0, haveWidth: false, width: font.CFF.Private ? font.CFF.Private.defaultWidthX : 0, open: false };
    Typr.U._drawCFF(font.CFF.CharStrings[gid], state, font.CFF, path);
    } else
    font.glyf && Typr.U._drawGlyf(gid, font, path);
    return path;
}, Typr.U._drawGlyf = function(gid, font, path) {
    var gl = font.glyf[gid];
    null == gl && (gl = font.glyf[gid] = Typr.glyf._parseGlyf(font, gid)), null != gl && (gl.noc > -1 ? Typr.U._simpleGlyph(gl, path) : Typr.U._compoGlyph(gl, font, path));
}, Typr.U._simpleGlyph = function(gl, p) {
    for (var c = 0; c < gl.noc; c++) {
    for (var i0 = 0 == c ? 0 : gl.endPts[c - 1] + 1, il = gl.endPts[c], i = i0; i <= il; i++) {
        var pr = i == i0 ? il : i - 1, nx = i == il ? i0 : i + 1, onCurve = 1 & gl.flags[i], prOnCurve = 1 & gl.flags[pr], nxOnCurve = 1 & gl.flags[nx], x = gl.xs[i], y = gl.ys[i];
        if (i == i0)
        if (onCurve) {
            if (!prOnCurve) {
            Typr.U.P.moveTo(p, x, y);
            continue;
            }
            Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]);
        } else
            prOnCurve ? Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]) : Typr.U.P.moveTo(p, (gl.xs[pr] + x) / 2, (gl.ys[pr] + y) / 2);
        onCurve ? prOnCurve && Typr.U.P.lineTo(p, x, y) : nxOnCurve ? Typr.U.P.qcurveTo(p, x, y, gl.xs[nx], gl.ys[nx]) : Typr.U.P.qcurveTo(p, x, y, (x + gl.xs[nx]) / 2, (y + gl.ys[nx]) / 2);
    }
    Typr.U.P.closePath(p);
    }
}, Typr.U._compoGlyph = function(gl, font, p) {
    for (var j = 0; j < gl.parts.length; j++) {
    var path = { cmds: [], crds: [] }, prt = gl.parts[j];
    Typr.U._drawGlyf(prt.glyphIndex, font, path);
    for (var m = prt.m, i = 0; i < path.crds.length; i += 2) {
        var x = path.crds[i], y = path.crds[i + 1];
        p.crds.push(x * m.a + y * m.b + m.tx), p.crds.push(x * m.c + y * m.d + m.ty);
    }
    for (i = 0; i < path.cmds.length; i++)
        p.cmds.push(path.cmds[i]);
    }
}, Typr.U._getGlyphClass = function(g, cd) {
    var intr = Typr._lctf.getInterval(cd, g);
    return -1 == intr ? 0 : cd[intr + 2];
}, Typr.U.getPairAdjustment = function(font, g1, g2) {
    if (font.GPOS) {
    for (var ltab = null, i = 0; i < font.GPOS.featureList.length; i++) {
        var fl = font.GPOS.featureList[i];
        if ("kern" == fl.tag)
        for (var j = 0; j < fl.tab.length; j++)
            2 == font.GPOS.lookupList[fl.tab[j]].ltype && (ltab = font.GPOS.lookupList[fl.tab[j]]);
    }
    if (ltab)
        for (i = 0; i < ltab.tabs.length; i++) {
        var tab = ltab.tabs[i], ind = Typr._lctf.coverageIndex(tab.coverage, g1);
        if (-1 != ind) {
            if (1 == tab.format) {
            var right = tab.pairsets[ind];
            for (j = 0; j < right.length; j++)
                right[j].gid2 == g2 && (adj = right[j]);
            if (null == adj)
                continue;
            } else if (2 == tab.format)
            var c1 = Typr.U._getGlyphClass(g1, tab.classDef1), c2 = Typr.U._getGlyphClass(g2, tab.classDef2), adj = tab.matrix[c1][c2];
            return adj.val1[2];
        }
        }
    }
    if (font.kern) {
    var ind1 = font.kern.glyph1.indexOf(g1);
    if (-1 != ind1) {
        var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2);
        if (-1 != ind2)
        return font.kern.rval[ind1].vals[ind2];
    }
    }
    return 0;
}, Typr.U.stringToGlyphs = function(font, str) {
    for (var gls = [], i = 0; i < str.length; i++) {
    var cc = str.codePointAt(i);
    cc > 65535 && i++, gls.push(Typr.U.codeToGlyph(font, cc));
    }
    var gsub = font.GSUB;
    if (null == gsub)
    return gls;
    for (var llist = gsub.lookupList, flist = gsub.featureList, wsep = '\n    " ,.:;!?()  ،', R = "آأؤإاةدذرزوٱٲٳٵٶٷڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙۀۃۄۅۆۇۈۉۊۋۍۏےۓەۮۯܐܕܖܗܘܙܞܨܪܬܯݍݙݚݛݫݬݱݳݴݸݹࡀࡆࡇࡉࡔࡧࡩࡪࢪࢫࢬࢮࢱࢲࢹૅેૉ૊૎૏ૐ૑૒૝ૡ૤૯஁ஃ஄அஉ஌எஏ஑னப஫஬", ci = 0; ci < gls.length; ci++) {
    var gl = gls[ci], slft = 0 == ci || -1 != wsep.indexOf(str[ci - 1]), srgt = ci == gls.length - 1 || -1 != wsep.indexOf(str[ci + 1]);
    slft || -1 == R.indexOf(str[ci - 1]) || (slft = true), srgt || -1 == R.indexOf(str[ci]) || (srgt = true), srgt || -1 == "ꡲ્૗".indexOf(str[ci + 1]) || (srgt = true), slft || -1 == "ꡲ્૗".indexOf(str[ci]) || (slft = true);
    var feat = null;
    feat = slft ? srgt ? "isol" : "init" : srgt ? "fina" : "medi";
    for (var fi = 0; fi < flist.length; fi++)
        if (flist[fi].tag == feat)
        for (var ti = 0; ti < flist[fi].tab.length; ti++) {
            1 == (tab = llist[flist[fi].tab[ti]]).ltype && Typr.U._applyType1(gls, ci, tab);
        }
    }
    var cligs = ["rlig", "liga", "mset"];
    for (ci = 0; ci < gls.length; ci++) {
    gl = gls[ci];
    var rlim = Math.min(3, gls.length - ci - 1);
    for (fi = 0; fi < flist.length; fi++) {
        var fl = flist[fi];
        if (-1 != cligs.indexOf(fl.tag)) {
        for (ti = 0; ti < fl.tab.length; ti++)
            for (var tab = llist[fl.tab[ti]], j = 0; j < tab.tabs.length; j++)
            if (null != tab.tabs[j]) {
                var ind = Typr._lctf.coverageIndex(tab.tabs[j].coverage, gl);
                if (-1 != ind) {
                if (4 == tab.ltype)
                    for (var vals = tab.tabs[j].vals[ind], k = 0; k < vals.length; k++) {
                    var lig = vals[k], rl = lig.chain.length;
                    if (!(rl > rlim)) {
                        for (var good = true, l = 0; l < rl; l++)
                        lig.chain[l] != gls[ci + (1 + l)] && (good = false);
                        if (good) {
                        gls[ci] = lig.nglyph;
                        for (l = 0; l < rl; l++)
                            gls[ci + l + 1] = -1;
                        }
                    }
                    }
                else if (5 == tab.ltype) {
                    var ltab = tab.tabs[j];
                    if (2 != ltab.fmt)
                    continue;
                    var cind = Typr._lctf.getInterval(ltab.cDef, gl), cls = ltab.cDef[cind + 2], scs = ltab.scset[cls];
                    for (i = 0; i < scs.length; i++) {
                    var sc = scs[i], inp = sc.input;
                    if (!(inp.length > rlim)) {
                        for (good = true, l = 0; l < inp.length; l++) {
                        var cind2 = Typr._lctf.getInterval(ltab.cDef, gls[ci + 1 + l]);
                        if (-1 == cind && ltab.cDef[cind2 + 2] != inp[l]) {
                            good = false;
                            break;
                        }
                        }
                        if (good) {
                        var lrs = sc.substLookupRecords;
                        for (k = 0; k < lrs.length; k += 2)
                            lrs[k], lrs[k + 1];
                        }
                    }
                    }
                }
                }
            }
        }
    }
    }
    return gls;
}, Typr.U._applyType1 = function(gls, ci, tab) {
    for (var gl = gls[ci], j = 0; j < tab.tabs.length; j++) {
    var ttab = tab.tabs[j], ind = Typr._lctf.coverageIndex(ttab.coverage, gl);
    -1 != ind && (1 == ttab.fmt ? gls[ci] = gls[ci] + ttab.delta : gls[ci] = ttab.newg[ind]);
    }
}, Typr.U.glyphsToPath = function(font, gls, clr) {
    for (var tpath = { cmds: [], crds: [] }, x = 0, i = 0; i < gls.length; i++) {
    var gid = gls[i];
    if (-1 != gid) {
        for (var gid2 = i < gls.length - 1 && -1 != gls[i + 1] ? gls[i + 1] : 0, path = Typr.U.glyphToPath(font, gid), j = 0; j < path.crds.length; j += 2)
        tpath.crds.push(path.crds[j] + x), tpath.crds.push(path.crds[j + 1]);
        clr && tpath.cmds.push(clr);
        for (j = 0; j < path.cmds.length; j++)
        tpath.cmds.push(path.cmds[j]);
        clr && tpath.cmds.push("X"), x += font.hmtx.aWidth[gid], i < gls.length - 1 && (x += Typr.U.getPairAdjustment(font, gid, gid2));
    }
    }
    return tpath;
}, Typr.U.pathToSVG = function(path, prec) {
    null == prec && (prec = 5);
    for (var out = [], co = 0, lmap = { M: 2, L: 2, Q: 4, C: 6 }, i = 0; i < path.cmds.length; i++) {
    var cmd = path.cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0);
    for (out.push(cmd); co < cn; ) {
        var c = path.crds[co++];
        out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " "));
    }
    }
    return out.join("");
}, Typr.U.pathToContext = function(path, ctx) {
    for (var c = 0, crds = path.crds, j = 0; j < path.cmds.length; j++) {
    var cmd = path.cmds[j];
    "M" == cmd ? (ctx.moveTo(crds[c], crds[c + 1]), c += 2) : "L" == cmd ? (ctx.lineTo(crds[c], crds[c + 1]), c += 2) : "C" == cmd ? (ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]), c += 6) : "Q" == cmd ? (ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]), c += 4) : "#" == cmd.charAt(0) ? (ctx.beginPath(), ctx.fillStyle = cmd) : "Z" == cmd ? ctx.closePath() : "X" == cmd && ctx.fill();
    }
}, Typr.U.P = {}, Typr.U.P.moveTo = function(p, x, y) {
    p.cmds.push("M"), p.crds.push(x, y);
}, Typr.U.P.lineTo = function(p, x, y) {
    p.cmds.push("L"), p.crds.push(x, y);
}, Typr.U.P.curveTo = function(p, a, b, c, d, e, f) {
    p.cmds.push("C"), p.crds.push(a, b, c, d, e, f);
}, Typr.U.P.qcurveTo = function(p, a, b, c, d) {
    p.cmds.push("Q"), p.crds.push(a, b, c, d);
}, Typr.U.P.closePath = function(p) {
    p.cmds.push("Z");
}, Typr.U._drawCFF = function(cmds, state, font, p) {
    for (var stack = state.stack, nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open, i = 0, x = state.x, y = state.y, c1x = 0, c1y = 0, c2x = 0, c2y = 0, c3x = 0, c3y = 0, c4x = 0, c4y = 0, jpx = 0, jpy = 0, o = { val: 0, size: 0 }; i < cmds.length; ) {
    Typr.CFF.getCharString(cmds, i, o);
    var v = o.val;
    if (i += o.size, "o1" == v || "o18" == v)
        stack.length % 2 != 0 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX), nStems += stack.length >> 1, stack.length = 0, haveWidth = true;
    else if ("o3" == v || "o23" == v) {
        stack.length % 2 != 0 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX), nStems += stack.length >> 1, stack.length = 0, haveWidth = true;
    } else if ("o4" == v)
        stack.length > 1 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX, haveWidth = true), open && Typr.U.P.closePath(p), y += stack.pop(), Typr.U.P.moveTo(p, x, y), open = true;
    else if ("o5" == v)
        for (; stack.length > 0; )
        x += stack.shift(), y += stack.shift(), Typr.U.P.lineTo(p, x, y);
    else if ("o6" == v || "o7" == v)
        for (var count = stack.length, isX = "o6" == v, j = 0; j < count; j++) {
        var sval = stack.shift();
        isX ? x += sval : y += sval, isX = !isX, Typr.U.P.lineTo(p, x, y);
        }
    else if ("o8" == v || "o24" == v) {
        count = stack.length;
        for (var index = 0; index + 6 <= count; )
        c1x = x + stack.shift(), c1y = y + stack.shift(), c2x = c1x + stack.shift(), c2y = c1y + stack.shift(), x = c2x + stack.shift(), y = c2y + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y), index += 6;
        "o24" == v && (x += stack.shift(), y += stack.shift(), Typr.U.P.lineTo(p, x, y));
    } else {
        if ("o11" == v)
        break;
        if ("o1234" == v || "o1235" == v || "o1236" == v || "o1237" == v)
        "o1234" == v && (c1y = y, c2x = (c1x = x + stack.shift()) + stack.shift(), jpy = c2y = c1y + stack.shift(), c3y = c2y, c4y = y, x = (c4x = (c3x = (jpx = c2x + stack.shift()) + stack.shift()) + stack.shift()) + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy), Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y)), "o1235" == v && (c1x = x + stack.shift(), c1y = y + stack.shift(), c2x = c1x + stack.shift(), c2y = c1y + stack.shift(), jpx = c2x + stack.shift(), jpy = c2y + stack.shift(), c3x = jpx + stack.shift(), c3y = jpy + stack.shift(), c4x = c3x + stack.shift(), c4y = c3y + stack.shift(), x = c4x + stack.shift(), y = c4y + stack.shift(), stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy), Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y)), "o1236" == v && (c1x = x + stack.shift(), c1y = y + stack.shift(), c2x = c1x + stack.shift(), jpy = c2y = c1y + stack.shift(), c3y = c2y, c4x = (c3x = (jpx = c2x + stack.shift()) + stack.shift()) + stack.shift(), c4y = c3y + stack.shift(), x = c4x + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy), Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y)), "o1237" == v && (c1x = x + stack.shift(), c1y = y + stack.shift(), c2x = c1x + stack.shift(), c2y = c1y + stack.shift(), jpx = c2x + stack.shift(), jpy = c2y + stack.shift(), c3x = jpx + stack.shift(), c3y = jpy + stack.shift(), c4x = c3x + stack.shift(), c4y = c3y + stack.shift(), Math.abs(c4x - x) > Math.abs(c4y - y) ? x = c4x + stack.shift() : y = c4y + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy), Typr.U.P.curveTo(p, c3x, c3y, c4x, c4y, x, y));
        else if ("o14" == v) {
        if (stack.length > 0 && !haveWidth && (width = stack.shift() + font.nominalWidthX, haveWidth = true), 4 == stack.length) {
            var adx = stack.shift(), ady = stack.shift(), bchar = stack.shift(), achar = stack.shift(), bind = Typr.CFF.glyphBySE(font, bchar), aind = Typr.CFF.glyphBySE(font, achar);
            Typr.U._drawCFF(font.CharStrings[bind], state, font, p), state.x = adx, state.y = ady, Typr.U._drawCFF(font.CharStrings[aind], state, font, p);
        }
        open && (Typr.U.P.closePath(p), open = false);
        } else if ("o19" == v || "o20" == v) {
        stack.length % 2 != 0 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX), nStems += stack.length >> 1, stack.length = 0, haveWidth = true, i += nStems + 7 >> 3;
        } else if ("o21" == v)
        stack.length > 2 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX, haveWidth = true), y += stack.pop(), x += stack.pop(), open && Typr.U.P.closePath(p), Typr.U.P.moveTo(p, x, y), open = true;
        else if ("o22" == v)
        stack.length > 1 && !haveWidth && (width = stack.shift() + font.Private.nominalWidthX, haveWidth = true), x += stack.pop(), open && Typr.U.P.closePath(p), Typr.U.P.moveTo(p, x, y), open = true;
        else if ("o25" == v) {
        for (; stack.length > 6; )
            x += stack.shift(), y += stack.shift(), Typr.U.P.lineTo(p, x, y);
        c1x = x + stack.shift(), c1y = y + stack.shift(), c2x = c1x + stack.shift(), c2y = c1y + stack.shift(), x = c2x + stack.shift(), y = c2y + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
        } else if ("o26" == v)
        for (stack.length % 2 && (x += stack.shift()); stack.length > 0; )
            c1x = x, c1y = y + stack.shift(), x = c2x = c1x + stack.shift(), y = (c2y = c1y + stack.shift()) + stack.shift(), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
        else if ("o27" == v)
        for (stack.length % 2 && (y += stack.shift()); stack.length > 0; )
            c1y = y, c2x = (c1x = x + stack.shift()) + stack.shift(), c2y = c1y + stack.shift(), x = c2x + stack.shift(), y = c2y, Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y);
        else if ("o10" == v || "o29" == v) {
        var obj = "o10" == v ? font.Private : font;
        if (0 == stack.length)
            console.log("error: empty stack");
        else {
            var ind = stack.pop(), subr = obj.Subrs[ind + obj.Bias];
            state.x = x, state.y = y, state.nStems = nStems, state.haveWidth = haveWidth, state.width = width, state.open = open, Typr.U._drawCFF(subr, state, font, p), x = state.x, y = state.y, nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open;
        }
        } else if ("o30" == v || "o31" == v) {
        var count1 = stack.length, alternate = (index = 0, "o31" == v);
        for (index += count1 - (count = -3 & count1); index < count; )
            alternate ? (c1y = y, c2x = (c1x = x + stack.shift()) + stack.shift(), y = (c2y = c1y + stack.shift()) + stack.shift(), count - index == 5 ? (x = c2x + stack.shift(), index++) : x = c2x, alternate = false) : (c1x = x, c1y = y + stack.shift(), c2x = c1x + stack.shift(), c2y = c1y + stack.shift(), x = c2x + stack.shift(), count - index == 5 ? (y = c2y + stack.shift(), index++) : y = c2y, alternate = true), Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y), index += 4;
        } else {
        if ("o" == (v + "").charAt(0))
            throw console.log("Unknown operation: " + v, cmds), v;
        stack.push(v);
        }
    }
    }
    state.x = x, state.y = y, state.nStems = nStems, state.haveWidth = haveWidth, state.width = width, state.open = open;
};
const Typr$1 = getDefaultExportFromCjs(Typr), questionType = { "单选题": "0", "多选题": "1", "填空题": "2", "判断题": "3", "简答题": "4", "名词解释": "5", "论述题": "6", "计算题": "7" }, log = (data, type = "info") => {
    var _a;
    const style = `color: ${{ info: "orange", success: "green", error: "red" }[type]}; font-weight: bold;`;
    if (Array.isArray(data) || "object" == typeof data ? console.log(`%c${JSON.stringify(data, null, 2)}`, style) : console.log(`%c${data}`, style), defaultConfig$1.debugger) {
    const caller = (((_a = new Error().stack) == null ? void 0 : _a.split("\n")) || [])[2].trim();
    console.log(`${caller}`);
    }
}, sleep = (time) => new Promise((resolve) => {
    setTimeout(() => {
    resolve();
    }, 1e3 * time);
}), waitIframeLoaded = (iframe) => new Promise((resolve) => {
    const timer = setInterval(() => {
    var _a;
    iframe.contentDocument && "complete" === ((_a = iframe.contentDocument) == null ? void 0 : _a.readyState) ? (clearInterval(timer), resolve()) : iframe.addEventListener("load", () => {
        clearInterval(timer), resolve();
    });
    }, 100);
}), waitElementLoaded = (iframeWindow, selector) => new Promise((resolve) => {
    const timer = setInterval(() => {
    iframeWindow.document.querySelector(selector) && (clearInterval(timer), resolve());
    }, 100);
}), removeHtml = (html) => null == html ? "" : html.replace(/<((?!img|sub|sup|br)[^>]+)>/g, "").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").replace(/<br\s*\/?>/g, "\n").replace(/<img.*?src="(.*?)".*?>/g, '<img src="$1"/>').trim(), cl = (str) => str.replace(/^【.*?】\s*/, "").replace(/\s*(\d+\.\d+分)$/, ""), getQuestion = (type, html) => {
    let questionHtml, questionText, questionTypeId, optionHtml, tokenHtml, workType, optionText, index;
    switch (type) {
    case "1":
        return workType = "zj", questionHtml = Array.from(html.querySelectorAll(".clearfix .fontLabel")), questionText = cl(removeHtml(questionHtml[0].innerHTML)), questionTypeId = html.querySelectorAll("input[name^=answertype]")[0].value, optionHtml = Array.from(html.querySelectorAll("ul")[0].querySelectorAll("li .after")), tokenHtml = html.innerHTML, optionText = [], optionHtml.forEach(function(item) {
        optionText.push(removeHtml(item.innerHTML));
        }), { question: questionText, options: optionText, type: questionTypeId, questionData: tokenHtml, workType };
    case "2":
        workType = "zy", questionHtml = Array.from(html.querySelectorAll(".mark_name")), index = questionHtml[0].innerHTML.indexOf("</span>"), questionText = cl(removeHtml(questionHtml[0].innerHTML.substring(index + 7))), questionHtml[0].getElementsByTagName("span")[0].innerHTML.replace("(", "").replace(")", "").split(",")[0], questionTypeId = html.querySelectorAll("input[name^=answertype]")[0].value, optionHtml = Array.from(html.querySelectorAll(".answer_p")), tokenHtml = html.innerHTML, optionText = [];
        for (let i = 0; i < optionHtml.length; i++)
        optionText.push(removeHtml(optionHtml[i].innerHTML));
        return { question: questionText, options: optionText, type: questionTypeId, questionData: tokenHtml, workType };
    case "3":
        workType = "ks", questionHtml = Array.from(document.getElementsByClassName("mark_name colorDeep")), index = questionHtml[0].innerHTML.indexOf("</span>"), questionText = cl(removeHtml(questionHtml[0].innerHTML.substring(index + 7))), questionHtml[0].getElementsByTagName("span")[0].innerHTML.replace("(", "").replace(")", "").split(",")[0], questionTypeId = document.querySelectorAll("input[name^=type]")[1].value, optionHtml = Array.from(document.getElementsByClassName("answer_p")), tokenHtml = document.getElementsByClassName("mark_table")[0].innerHTML, optionText = [];
        for (let i = 0; i < optionHtml.length; i++)
        optionText.push(removeHtml(optionHtml[i].innerHTML));
        return { question: questionText, options: optionText, type: questionTypeId, questionData: tokenHtml, workType };
    }
}, decode = (iframeWindow) => {
    var _a;
    const styleElements = iframeWindow.document.querySelectorAll("style");
    let tipElement = null;
    if (styleElements.forEach((styleElement) => {
    var _a2;
    -1 !== ((_a2 = styleElement.textContent) == null ? void 0 : _a2.indexOf("font-cxsecret")) && (tipElement = styleElement);
    }), !tipElement)
    return;
    const fontMatch = (_a = tipElement.textContent) == null ? void 0 : _a.match(/base64,([\w\W]+?)'/);
    if (!fontMatch)
    return;
    const fontData = ((base64) => {
    const decodedData = atob(base64), array = new Uint8Array(decodedData.length);
    for (let i = 0; i < decodedData.length; i++)
        array[i] = decodedData.charCodeAt(i);
    return array;
    })(fontMatch[1]), font = Typr$1.parse(fontData), table = JSON.parse(_GM_getResourceText("ttf"));
    let text = {};
    for (let i = 19968; i < 40870; i++) {
    let t = Typr$1.U.codeToGlyph(font, i);
    t && (t = Typr$1.U.glyphToPath(font, t), t = md5(JSON.stringify(t)).slice(24), text[i] = table[t]);
    }
    iframeWindow.document.querySelectorAll(".font-cxsecret").forEach((fontElement) => {
    let html = fontElement.innerHTML;
    Object.keys(text).forEach((key) => {
        const regex = new RegExp(String.fromCharCode(key), "g");
        html = html.replace(regex, String.fromCharCode(text[key]));
    }), fontElement.innerHTML = html, fontElement.classList.remove("font-cxsecret");
    });
}, getAnswers = (questionData, windowz = _unsafeWindow) => {
    let server = new ServerApi(windowz);
    const promises = [server.getAnswer(questionData), server.getAnswer2(questionData), server.getAnswer4(questionData)];
    return Promise.all(promises);
}, fillAnswer = (answer, questionData, html, iframeWindow) => {
    answer = answer.filter((item) => item.answer.length > 0);
    for (let i = 0; i < answer.length; i++) {
    let tmp = setAnswer(answer[i].answer, questionData, html, iframeWindow);
    if (tmp)
        return tmp;
    }
    return false;
}, setAnswer = (answer, questionData, html, iframeWindow) => {
    switch (questionData.type) {
    case "0":
    case "1":
        const matchArr = matchAnswer(answer, questionData.options);
        matchArr.length > 0 && clearCurrent(html, iframeWindow);
        for (var i = 0; i < matchArr.length; i++)
        console.log($$1(html).find("li").eq(matchArr[i]), matchArr[i]), $$1(html).find("ul:eq(0) li :radio,:checkbox,textarea").eq(matchArr[i]).click(), $$1(html).find(".answerBg").eq(matchArr[i]).click(), $$1(html).find("li").eq(matchArr[i]).click();
        return matchArr.length > 0 && answer;
    case "3":
        return answer instanceof Array && (answer = answer[0]), $$1(html).find("ul:eq(0) li :radio,:checkbox,textarea").each(function() {
        "true" == $$1(this).val() ? answer.match(/(^|,)(True|true|正确|是|对|√|T|ri)(,|$)/) && $$1(this).click() : answer.match(/(^|,)(False|false|错误|否|错|×|F|wr)(,|$)/) && $$1(this).click();
        }), $$1(html).find(".answerBg").each(function() {
        "true" == $$1(this).find(".num_option").attr("data") ? answer.match(/(^|,)(True|true|正确|是|对|√|T|ri)(,|$)/) && $$1(this).click() : answer.match(/(^|,)(False|false|错误|否|错|×|F|wr)(,|$)/) && $$1(this).click();
        }), !!($$1(html).find("ul:eq(0) li :radio,:checkbox,textarea").is(":checked") || $$1(html).find(".check_answer").length > 0 || $$1(html).find(".check_answer_dx").length > 0) && answer;
    case "2":
    case "9":
    case "4":
    case "5":
    case "6":
    case "7":
        return $$1(html).find("textarea").length == answer.length && (clearCurrent(html, iframeWindow), $$1(html).find("textarea").each(function(index) {
        iframeWindow.UE.getEditor($$1(this).attr("name")).ready(function() {
            this.setContent(answer[index].replace(/第.空:/g, ""));
        });
        }), answer);
    default:
        return false;
    }
}, matchAnswer = (answer, options) => {
    answer = ((answer2) => {
    if (answer2 instanceof Array) {
        answer2 = answer2.filter(function(item) {
        return null !== item;
        });
        for (let i2 = 0; i2 < answer2.length; i2++)
        answer2[i2] = removeHtml(answer2[i2]);
    } else
        "string" == typeof answer2 && (answer2 = cl(answer2));
    return answer2;
    })(answer);
    for (var matchArr = [], i = 0; i < answer.length; i++)
    for (var j = 0; j < options.length; j++)
        answer[i] == options[j] && matchArr.push(j);
    return matchArr;
}, clearCurrent = (item, iframeWindow) => {
    $$1(item).find(".answerBg, .textDIV, .eidtDiv").each(function() {
    ($$1(this).find(".check_answer").length || $$1(this).find(".check_answer_dx").length) && $$1(this).click();
    }), $$1(item).find("textarea").each(function() {
    iframeWindow.UE.getEditor($$1(this).attr("name")).ready(function() {
        this.setContent("");
    });
    }), $$1(item).find(":radio, :checkbox").prop("checked", false), $$1(item).find("textarea").each(function() {
    iframeWindow.UE.getEditor($$1(this).attr("name")).ready(function() {
        this.setContent("");
    });
    });
}, useAskStore = pinia$1.defineStore({ id: "ask", state: () => ({ dialogVisible: true, count: 0, questionList: [], task: { name: "暂未加载", work: { questionList: [], inx: 0 }, video: [], log: [], status: "" } }), actions: { reset() {
    this.task.name = "暂未加载", this.task.work = { questionList: [], inx: 0 }, this.task.video = [], this.task.status = "", this.count = 0;
}, select(index) {
    this.task.work.questionList[index].selected = true, this.task.work.inx = index;
    try {
    this.task.work.questionList[index].dom.scrollIntoView({ block: "center" });
    } catch (e) {
    log(e, "error");
    }
}, get(index) {
    return this.task.work.questionList[index];
}, insert(question) {
    this.task.work.questionList.push(question);
}, update(index, question) {
    this.task.work.questionList[index] = question;
}, log(msg, level = "info") {
    this.task.log.length > 20 && this.task.log.shift(), this.task.log.push({ time: (/* @__PURE__ */ new Date()).toLocaleTimeString(), msg, type: level });
}, msg(msg) {
    this.task.status = msg;
} } }), _sfc_main = vue.defineComponent({ setup() {
    const askstore = useAskStore(), { dialogVisible, count, questionList, task } = pinia$1.storeToRefs(askstore);
    return { count, dialogVisible, questionList, activeName: vue.ref("first"), activeNames: vue.ref(["1"]), task, msg: vue.ref("本脚本仅用于学习交流,请24h内删除<br>禁止用于各种非法用途,否则后果自负<br>本脚本题库接口来源于网络,若您有更好的接口可以反馈给我"), Aim: aim_default, handleClick: (e) => {
    askstore.select(e);
    } };
} }), _hoisted_1 = { key: 0 }, _hoisted_2 = { class: "question_div" }, _hoisted_3 = { class: "question_ti" }, _hoisted_4 = { key: 0 }, _hoisted_5 = { key: 1 }, _hoisted_6 = { key: 2 }, _hoisted_7 = ["innerHTML"], _hoisted_8 = { key: 0, style: { "margin-top": "20px" } }, _hoisted_9 = { key: 1 }, _hoisted_10 = { key: 2 }, _hoisted_11 = { height: "100px" }, _hoisted_12 = ["innerHTML"];
const Ask = _export_sfc(_sfc_main, [["render", function(_ctx, _cache, $props, $setup, $data, $options) {
    const _component_el_button = vue.resolveComponent("el-button"), _component_el_text = vue.resolveComponent("el-text"), _component_el_skeleton = vue.resolveComponent("el-skeleton"), _component_el_card = vue.resolveComponent("el-card"), _component_el_divider = vue.resolveComponent("el-divider"), _component_el_col = vue.resolveComponent("el-col"), _component_el_row = vue.resolveComponent("el-row"), _component_el_scrollbar = vue.resolveComponent("el-scrollbar"), _component_el_tag = vue.resolveComponent("el-tag"), _component_el_tab_pane = vue.resolveComponent("el-tab-pane"), _component_el_tabs = vue.resolveComponent("el-tabs"), _component_el_alert = vue.resolveComponent("el-alert"), _component_el_empty = vue.resolveComponent("el-empty"), _component_el_dialog = vue.resolveComponent("el-dialog");
    return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [vue.createVNode(_component_el_button, { id: "zeokdjg", primary: "", round: "", icon: _ctx.Aim, onClick: _cache[0] || (_cache[0] = ($event) => _ctx.dialogVisible = !_ctx.dialogVisible) }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString("暂未加载" == _ctx.task.name ? "等待任务加载" : "正在完成:" + _ctx.task.name), 1)]), _: 1 }, 8, ["icon"]), vue.createVNode(_component_el_dialog, { modelValue: _ctx.dialogVisible, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.dialogVisible = $event), width: "400px", title: "💯超星学习通满分助手", modal: false, "append-to-body": false, "lock-scroll": false, center: "", draggable: "" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_tabs, { modelValue: _ctx.activeName, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.activeName = $event), class: "demo-tabs" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_tab_pane, { label: "运行框", name: "first" }, { default: vue.withCtx(() => [_ctx.task.work.questionList.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [vue.createElementVNode("div", _hoisted_2, [vue.createVNode(_component_el_card, { shadow: "hover" }, { default: vue.withCtx(() => [vue.createElementVNode("h1", _hoisted_3, [vue.createVNode(_component_el_text, { size: "large", truncated: "" }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(_ctx.task.work.inx + 1 + "." + _ctx.task.work.questionList[_ctx.task.work.inx].question), 1)]), _: 1 })]), _ctx.task.work.questionList[_ctx.task.work.inx].answer ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_5, [vue.createElementVNode("p", null, [vue.createElementVNode("pre", null, vue.toDisplayString(_ctx.task.work.questionList[_ctx.task.work.inx].answer), 1)])])) : (vue.openBlock(), vue.createElementBlock("p", _hoisted_4, [vue.createVNode(_component_el_skeleton, { rows: 3, animated: "" })]))]), _: 1 })]), "考试" != _ctx.task.name ? (vue.openBlock(), vue.createBlock(_component_el_divider, { key: 0 }, { default: vue.withCtx(() => [vue.createTextVNode(" 题号 ")]), _: 1 })) : vue.createCommentVNode("", true), "考试" != _ctx.task.name ? (vue.openBlock(), vue.createBlock(_component_el_scrollbar, { key: 1, height: "100px" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_row, null, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.task.work.questionList, (item, index) => (vue.openBlock(), vue.createBlock(_component_el_col, { span: 4, key: index }, { default: vue.withCtx(() => [vue.createVNode(_component_el_button, { type: item.status || "info", plain: "", class: "question_btn", onClick: ($event) => _ctx.handleClick(index) }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(index + 1), 1)]), _: 2 }, 1032, ["type", "onClick"])]), _: 2 }, 1024))), 128))]), _: 1 })]), _: 1 })) : vue.createCommentVNode("", true), _ctx.task.work.questionList[_ctx.task.work.inx].allAnswer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [vue.createVNode(_component_el_divider, null, { default: vue.withCtx(() => [vue.createTextVNode(" 接口返回 ")]), _: 1 }), vue.createVNode(_component_el_tabs, { "tab-position": "left", style: { height: "200px" }, class: "demo-tabs" }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.task.work.questionList[_ctx.task.work.inx].allAnswer, (item, index) => (vue.openBlock(), vue.createBlock(_component_el_tab_pane, { label: item.form }, { default: vue.withCtx(() => [vue.createElementVNode("div", null, [vue.createElementVNode("div", { innerHTML: item.answer || "暂无答案" }, null, 8, _hoisted_7), null != item.num ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8, [vue.createElementVNode("div", null, [vue.createVNode(_component_el_tag, { class: "ml-2", type: "info" }, { default: vue.withCtx(() => [vue.createTextVNode("已用次数:" + vue.toDisplayString(item.usenum), 1)]), _: 2 }, 1024)]), vue.createElementVNode("div", null, [vue.createVNode(_component_el_tag, { class: "ml-2", type: "success" }, { default: vue.withCtx(() => [vue.createTextVNode("剩余次数:" + vue.toDisplayString(item.num), 1)]), _: 2 }, 1024)])])) : vue.createCommentVNode("", true)])]), _: 2 }, 1032, ["label"]))), 256))]), _: 1 })])) : vue.createCommentVNode("", true)])) : _ctx.task.video.status ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9, [vue.createVNode(_component_el_alert, { title: "倍速有风险,挂科两行泪", type: "error", center: "", "show-icon": "" }), vue.createVNode(_component_el_text, { class: "mx-1", size: "large", type: "danger" }, { default: vue.withCtx(() => [vue.createTextVNode(" 正在完成视频任务 ")]), _: 1 })])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [vue.createElementVNode("div", _hoisted_11, [vue.createVNode(_component_el_empty, { description: _ctx.task.name }, null, 8, ["description"])])]))]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "运行日志", name: "second" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_scrollbar, { height: "200px" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_row, null, { default: vue.withCtx(() => [vue.createVNode(_component_el_col, { span: 24 }, { default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.task.log, (item, index) => (vue.openBlock(), vue.createElementBlock("p", { key: index, class: "cx_log" }, [vue.createVNode(_component_el_text, { size: "small", type: "info", class: "mx-1" }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(item.time), 1)]), _: 2 }, 1024), vue.createVNode(_component_el_text, { class: "mx-1", type: "info" == item.type ? "" : item.type }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(" " + item.msg), 1)]), _: 2 }, 1032, ["type"])]))), 128))]), _: 1 })]), _: 1 })]), _: 1 })]), _: 1 }), vue.createVNode(_component_el_tab_pane, { label: "公告", name: "msg" }, { default: vue.withCtx(() => [vue.createVNode(_component_el_card, { shadow: "hover" }, { default: vue.withCtx(() => [vue.createElementVNode("div", { innerHTML: _ctx.msg }, null, 8, _hoisted_12)]), _: 1 })]), _: 1 })]), _: 1 }, 8, ["modelValue"]), vue.createElementVNode("p", null, [_ctx.task.status ? (vue.openBlock(), vue.createBlock(_component_el_tag, { key: 0 }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(_ctx.task.status), 1)]), _: 1 })) : vue.createCommentVNode("", true)])]), _: 1 }, 8, ["modelValue"])]);
}], ["__scopeId", "data-v-f2d2b132"]]);
class Cx {
    constructor() {
    __publicField(this, "app");
    __publicField(this, "askStore");
    __publicField(this, "ServerApi");
    __publicField(this, "defaultConfig");
    this.app = vue.createApp(Ask).use(ElementPlus).use(pinia$1.createPinia()), this.askStore = useAskStore(), this.ServerApi = new ServerApi(), this.defaultConfig = getConfig(), this.app.mount((() => {
        const div = _unsafeWindow.top.document.createElement("div");
        return div.id = "xxxxzx", _unsafeWindow.top.document.getElementById(div.id) || _unsafeWindow.top.document.body.append(div), div;
    })());
    }
    innerbook() {
    }
    async audio(iframeWindow) {
    this.askStore.reset(), this.askStore.task.name = "视频音频";
    const audio = iframeWindow.document.getElementById("audio_html5_api");
    return audio.muted = true, audio.autoplay = true, audio.volume = 0, audio.play().then(function() {
        console.log("播放成功");
    }).catch(function(error) {
        "NotAllowedError" === error.name ? ElementPlus.ElMessageBox.alert("由于自动播放需要用户点击过浏览器,请确认即可", "温馨提示", { confirmButtonText: "确认", callback: () => {
        audio.play();
        } }) : console.error("视频播放失败,原因:", error);
    }), new Promise((resolve) => {
        const intervalId = setInterval(() => {
        audio.ended ? (clearInterval(intervalId), log("监听到音频已完成", "success"), resolve()) : audio.paused && audio.play();
        }, 1e3);
        audio.addEventListener("ended", function() {
        log("监听到音频已完成1", "success"), audio.pause(), clearInterval(intervalId), resolve();
        });
    });
    }
    async video(iframeWindow) {
    this.askStore.reset(), this.askStore.task.name = "视频", this.askStore.task.video.status = 1, await waitElementLoaded(iframeWindow, "#video_html5_api"), console.log("视频加载完成");
    const player = iframeWindow.videojs("video_html5_api"), playerButton = iframeWindow.document.querySelector(".vjs-big-play-button");
    player.muted(true), player.playbackRate(16), player.play(), await new Promise((resolve) => {
        const intervalId = setInterval(() => {
        "isUnFinishJob" in iframeWindow && iframeWindow.isUnFinishJob() ? player.paused() && (playerButton == null ? void 0 : playerButton.click()) : (clearInterval(intervalId), resolve());
        }, 1e3), pauseBase = player.pause;
        player.pause = function() {
        player.currentTime() >= player.duration() && (console.log("视频播放完成"), player.pause = pauseBase, resolve());
        }, player.on("ended", () => {
        console.log("视频播放完成1"), player.pause = pauseBase, player.pause(), clearInterval(intervalId), resolve();
        });
    }), console.log("任务点完成");
    }
    work(iframeWindow) {
    return new Promise(async (resolve) => {
        decode(iframeWindow);
        const Timu = iframeWindow.document.querySelectorAll(".TiMu");
        if (!Timu)
        return void resolve();
        let ques = [], succ = 0;
        for (let i = 0; i < Timu.length; i++) {
        let data = getQuestion("1", Timu[i]);
        console.log(data), ques.push(data);
        }
        this.askStore.reset(), this.askStore.count = ques.length, this.askStore.task.name = "章节测验";
        for (let i = 0; i < ques.length; i++) {
        await sleep(this.defaultConfig.answerInterval), this.askStore.insert(ques[i]), this.askStore.task.work.inx = i;
        let data = await getAnswers(ques[i], iframeWindow);
        this.askStore.get(i).allAnswer = data;
        let tmp = fillAnswer(data, ques[i], Timu[i], iframeWindow);
        tmp ? (this.askStore.get(i).status = "primary", this.askStore.get(i).answer = tmp, succ++) : (this.askStore.get(i).status = "danger", this.askStore.get(i).answer = "暂无答案"), this.askStore.get(i).dom = Timu[i];
        }
        this.defaultConfig.autoSubmit ? (succ / ques.length < this.defaultConfig.minAccuracy ? (this.askStore.log("章节测验正确率不足,暂存", "error"), iframeWindow.alert = function(e) {
        console.log("alert 方法被阻止", e);
        }, iframeWindow.noSubmit()) : (iframeWindow.btnBlueSubmit(), await sleep(3), iframeWindow.submitCheckTimes(), this.askStore.log("章节测验已完成", "success")), this.askStore.task.status = `章节测验已完成,等待切换,正确率:${succ}/${ques.length}`, resolve()) : (this.askStore.log("已完成答题,未开启自动提交,等待手动提交中", "success"), this.askStore.task.status = `正在等待手动提交,正确率:${succ}/${ques.length}`);
    });
    }
    homework() {
    return new Promise(async (resolve) => {
        const Timu = _unsafeWindow.document.querySelectorAll(".questionLi");
        if (!Timu)
        return void resolve();
        let ques = [];
        for (let i = 0; i < Timu.length; i++) {
        let data = getQuestion("2", Timu[i]);
        ques.push(data);
        }
        this.askStore.reset(), this.askStore.count = ques.length, this.askStore.task.name = "作业";
        for (let i = 0; i < ques.length; i++) {
        await sleep(this.defaultConfig.answerInterval), this.askStore.insert(ques[i]), this.askStore.task.work.inx = i;
        let data = await getAnswers(ques[i]);
        this.askStore.get(i).allAnswer = data;
        let tmp = fillAnswer(data, ques[i], Timu[i], _unsafeWindow);
        tmp ? (this.askStore.get(i).status = "primary", this.askStore.get(i).answer = tmp) : (this.askStore.get(i).status = "danger", this.askStore.get(i).answer = "暂无答案"), this.askStore.get(i).dom = Timu[i];
        }
    });
    }
    exam() {
    return new Promise(async (resolve) => {
        this.askStore.reset(), this.askStore.count = 1, this.askStore.task.name = "考试";
        let data = getQuestion("3", _unsafeWindow.document.body);
        this.askStore.insert(data), this.askStore.task.work.inx = 0;
        let data1 = await getAnswers(data);
        this.askStore.get(0).allAnswer = data1;
        let tmp = fillAnswer(data1, data, document.getElementsByClassName("mark_table")[0], _unsafeWindow);
        if (tmp ? (this.askStore.get(0).status = "primary", this.askStore.get(0).answer = tmp) : (this.askStore.get(0).status = "danger", this.askStore.get(0).answer = "暂无答案"), this.defaultConfig.autoExam) {
        await sleep(this.defaultConfig.answerInterval);
        const nextButton = $('.nextDiv .jb_btn:contains("下一题")');
        nextButton ? nextButton.click() : (this.askStore.log("已完成答题,请自行检查答案填写后自行提交", "success"), this.askStore.task.status = "已完成答题,请自行检查答案填写后自行提交");
        } else
        this.askStore.task.status = "未开启自动切换,等待手动切换";
    });
    }
    pdf(iframeWindow) {
    return new Promise(async (resolve) => {
        const contentWindow = iframeWindow.document.querySelector("#panView").contentWindow;
        contentWindow.scrollTo(0, contentWindow.document.body.scrollHeight), resolve();
    });
    }
    async s(iframeWindow) {
    const questionList = $(iframeWindow.document).find(".TiMu").map(function(index, element) {
        try {
        let questionHtml, questionText, questionType$1, questionAnswer, questionOption = [], questionAnalysis = "";
        switch (questionHtml = $(element).find(".Zy_TItle .clearfix"), questionText = removeHtml(questionHtml[0].innerHTML), questionType$1 = questionText.match(/^\【(.+?)\】/)[1], questionText = questionText.replace(questionText.match(/^\【(.+?)\】/)[0], ""), questionType$1) {
            case "单选题":
            case "多选题":
            return questionOption = $(element).find("ul>li").map(function(inx, item) {
                return removeHtml($(item).find("a").html());
            }).get(), null;
            case "判断题":
            if (questionAnalysis = removeHtml($(element).find(".Py_addpy:eq(0)").html() || ""), element.innerHTML.includes("正确答案"))
                questionAnswer = removeHtml($(element).find(".Py_answer.clearfix>span").html());
            else {
                const match = $(element).find(".Py_answer.clearfix").html().match(/^(.*?)(?=<i class="fr (dui|cuo)"><\/i>)/s), result = match ? match[1] : "";
                questionAnswer = removeHtml(result);
            }
            if (questionAnswer.includes("正确答案"))
                questionAnswer = questionAnswer.replace("正确答案:", "").trim();
            else if ($(element).find(".fr.dui").length > 0)
                questionAnswer = questionAnswer.replace("我的答案:", "").trim();
            else {
                if (!questionAnswer.replace("我的答案:", "").trim().includes("√") && !questionAnswer.replace("我的答案:", "").trim().includes("×"))
                return null;
                questionAnswer = "√" == questionAnswer.replace("我的答案:", "").trim() ? "×" : "√";
            }
            break;
            case "填空题":
            if (questionAnswer = $("span.font14", $(element)).map(function(inx, item) {
                return removeHtml($(item).html()).replace(/^第.空:/, "").trim();
            }).get(), 0 == questionAnswer.length) {
                if (questionAnswer = $(element).find(".Py_answer.clearfix>div>div[class='font14']"), !(questionAnswer.length = $(element).find(".Py_answer.clearfix>div>div[class='font14']>>.fr.dui").length))
                return null;
                questionAnswer = questionAnswer.map(function(inx, item) {
                return removeHtml($(item).html()).replace(/^第.空:/, "").trim();
                }).get();
            }
            break;
            default:
            return null;
        }
        return { question: questionText, options: questionOption, type: questionType[questionType$1], answer: questionAnswer };
        } catch {
        return null;
        }
    }).get();
    await this.ServerApi.s(questionList, iframeWindow.location.href);
    }
}
const pinia = pinia$1.createPinia(), app = vue.createApp(App).use(ElementPlus).use(pinia), _self = _unsafeWindow, top = _self.top, formStore = useformStore();
var iframeCom = null;
switch (app.mount((() => {
    try {
    const div = top.document.createElement("div");
    return div.id = "cccxapp", top.document.getElementById(div.id) ? div : (top.document.body.append(div), div);
    } catch (e) {
    log(e, "error");
    }
})()), (() => {
    document.body.oncopy = null, document.body.oncut = null, document.body.onpaste = null, document.body.onselectstart = null, document.body.ondragstart = null;
    const style = document.createElement("style");
    style.innerHTML = "\n       * {\n           -webkit-user-select: auto !important;\n           -moz-user-select: auto !important;\n           -o-user-select: auto !important;\n           user-select: auto !important;\n       }\n   ", document.head.appendChild(style);
})(), _self.location.pathname) {
    case "/work/doHomeWorkNew":
    case "/mooc-ans/work/doHomeWorkNew":
    case "/mooc2-ans/work/doHomeWorkNew":
    location.href.includes("mooc2=1") && (location.href = location.href.replace(/&mooc2=1/g, ""));
    break;
    case "/mycourse/studentstudy":
    if (!_self.location.href.match(/mooc2=1/)) {
        ElementPlus.ElNotification({ title: "Auto Ask", message: "暂不支持旧版章节,请自行切换至新版", type: "error" });
        break;
    }
    const cxModel = new Cx();
    cxModel.askStore.log("脚本初始化成功!", "success");
    const startWork = async () => {
        var _a, _b, _c, _d, _e;
        await waitElementLoaded(_self, "#iframe");
        const cardsIframe = _self.document.querySelector("#iframe");
        await waitIframeLoaded(cardsIframe);
        const _self1 = cardsIframe.contentWindow;
        top.scroll2Job();
        let jobList = _self1.document.querySelectorAll(".ans-job-icon") || [];
        for (let i = 0; i < jobList.length; i++) {
        const item = jobList[i];
        if ((_a = item.parentElement) == null ? void 0 : _a.classList.contains("ans-job-finished")) {
            const iframe = (_b = item.parentElement) == null ? void 0 : _b.querySelector("iframe");
            if (iframe == null ? void 0 : iframe.src.match(/\/ananas\/modules\/work\/index.html/)) {
            await waitIframeLoaded(iframe), JSON.parse(iframe.getAttribute("data"));
            const workIframe = (_c = iframe.contentWindow) == null ? void 0 : _c.document.querySelector("iframe");
            workIframe && (await waitIframeLoaded(workIframe), cxModel.s(workIframe.contentWindow));
            }
            console.log(iframe.src, "已完成"), cxModel.askStore.log("已完成的任务点,跳过");
        } else {
            const iframe = (_d = item.parentElement) == null ? void 0 : _d.querySelector("iframe");
            await waitIframeLoaded(iframe);
            const otherInfo = JSON.parse(iframe.getAttribute("data"));
            if (cxModel.askStore.log(`正在完成任务:${otherInfo.name || otherInfo.title}`), iframe == null ? void 0 : iframe.src.match(/\/ananas\/modules\/video\/index\.html/))
            await cxModel.video(iframe.contentWindow), cxModel.askStore.log("视频任务已完成", "success");
            else if (iframe == null ? void 0 : iframe.src.match(/\/ananas\/modules\/work\/index.html/)) {
            const workIframe = (_e = iframe.contentWindow) == null ? void 0 : _e.document.querySelector("iframe");
            workIframe && (await waitIframeLoaded(workIframe), await cxModel.work(workIframe.contentWindow), cxModel.askStore.log("作业任务已完成", "success"));
            } else
            (iframe == null ? void 0 : iframe.src.match(/\/ananas\/modules\/audio\/index.html/)) ? (log("音频", "error"), iframe && (await waitIframeLoaded(iframe), await cxModel.audio(iframe.contentWindow), cxModel.askStore.log("音频任务已完成", "success"))) : (iframe == null ? void 0 : iframe.src.match(/\/ananas\/modules\/pdf\/index.html/)) ? (log("文档", "error"), iframe && (await waitIframeLoaded(iframe), await cxModel.pdf(iframe.contentWindow), cxModel.askStore.log("pdf任务已完成", "success"))) : (console.log(iframe == null ? void 0 : iframe.src, "未知"), cxModel.askStore.log("未知任务跳过", "success"));
        }
        }
        await sleep(formStore.forminput.interval), !formStore.forminput.autoJump && cxModel.askStore.msg("由于未开启自动切换,请手动切换"), formStore.forminput.autoJump && (top == null ? void 0 : top.document.querySelector(".nextChapter").click());
    };
    setInterval(async () => {
        await waitElementLoaded(_self, "#iframe");
        const cardsIframe = _self.document.querySelector("#iframe");
        await waitIframeLoaded(cardsIframe);
        const _self1 = cardsIframe.contentWindow;
        iframeCom != _self1.location.href && (iframeCom = _self1.location.href, cxModel.askStore.reset(), startWork());
    }, 2e3);
    break;
    case "/work/selectWorkQuestionYiPiYue":
    case "/knowledge/cards":
    break;
    case "/mooc2/work/dowork":
    const cxModel1 = new Cx();
    cxModel1.askStore.log("脚本初始化成功!", "success"), await( cxModel1.homework());
    break;
    case "/exam-ans/exam/test/reVersionTestStartNew":
    const cxModel2 = new Cx();
    cxModel2.askStore.log("脚本初始化成功!", "success"), await( cxModel2.exam());
}

})(Vue, Pinia, ElementPlus, md5, $);






视频

// ==UserScript==
// @name          ❤【超星学习通小助手】【正则改】【完全免费】视频-章节测试|自动挂机|防清进度|不占资源
// @namespace    unrival
// @version      2.7
// @description  ▶▶▶上次更新:2023.04.15◀◀◀【💻可最小化💻】🆒支持超星视频、文档、答题、自定义正确率、掉线自动登录🤘取消视频文件加载,多开也不占用网速,放心追剧🍊自定义答题正确率,提高学习效率🍆每日功能测试,在发现问题前就解决问题,防清进度,无不良记录
// @author       unrival
// @run-at       document-end
// @storageName  unrivalxxt
// @match        *://*.chaoxing.com/*
// @match        *://*.edu.cn/*
// @match        *://*.nbdlib.cn/*
// @match        *://*.hnsyu.net/*
// @match        *://*.ac.cn/*
// @icon         http://pan-yz.chaoxing.com/favicon.ico
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_addValueChangeListener
// @grant        GM_info
// @connect      mooc1-1.chaoxing.com
// @connect      mooc1.chaoxing.com
// @connect      mooc1-2.chaoxing.com
// @connect      passport2-api.chaoxing.com
// @connect      14.29.190.187
// @connect      cx.icodef.com
// @license      GPL-3.0-or-later
// @original-script https://scriptcat.org/script-show-page/878/
// @original-author unrival
// @original-license GPL-3.0-or-later
//如果脚本提示添加安全网址,请将脚本提示内容填写到下方区域,一行一个,如果不会,请加群询问



//安全网址请填写在上方空白区域
// ==/UserScript==
(() => {
    var token = '', //关注微信公众号:一之哥哥,发送 “token” 领取你的token,填写在两个单引号中间并保存,可以提高答题并发数量。
        jumpType = 1, // 0:智能模式,1:遍历模式,2:不跳转,如果智能模式出现无限跳转/不跳转情况,请切换为遍历模式
        disableMonitor = 0, // 0:无操作,1:解除多端学习监控,开启此功能后可以多端学习,不会被强制下线。
        accuracy = 75, //章节测试正确率百分比,在答题正确率在规定之上并且允许自动提交时才会提交答案
        randomDo = 1, //将0改为1,找不到答案的单选、多选、判断就会自动选【B、ABCD、错】,只在规定正确率不为100%时才生效
        backGround = 0, //是否对接超星挂机小助手,需要先安装对应脚本
        //-----------------------------------------------------------------------------------------------------
        autoLogin = 0, //掉线是否自动登录,1为自动登录,需要配置登录信息(仅支持手机号+密码登陆)
        phoneNumber = '', //自动登录的手机号,填写在单引号之间。
        password = ''; //自动登录的密码,填写在单引号之间。
    //-----------------------------------------------------------------------------------------------------
    var host = 'http://14.29.190.187:54223/',
        rate = GM_getValue('unrivalrate', '1'),
        ctUrl = 'https://cx.icodef.com/wyn-nb?v=4',
        getQueryVariable = (variable) => {
            let q = _l.search.substring(1),
                v = q.split("&"),
                r = false;
            for (let i = 0, l = v.length; i < l; i++) {
                let p = v[i].split("=");
                p[0] == variable && (r = p[1]);
            }
            return r;
        },
        getCookie = name => `; ${document.cookie}`.split(`; ${name}=`).pop().split(';').shift(),
        isCat = GM_info.scriptHandler == 'ScriptCat',
        _w = unsafeWindow,
        _d = _w.document,
        _l = _w.location,
        _p = _l.protocol,
        _h = _l.host,
        //isEdge = _w.navigator.userAgent.includes("Edg/"),
        isFf = _w.navigator.userAgent.includes("Firefox"),
        isMobile = _w.navigator.userAgent.includes("Android"),
        stop = false,
        handleImgs = (s) => {
            imgEs = s.match(/(<img([^>]*)>)/);
            if (imgEs) {
                for (let j = 0, k = imgEs.length; j < k; j++) {
                    let urls = imgEs[j].match(
                        /http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/),
                        url;
                    if (urls) {
                        url = urls[0].replace(/http[s]?:\/\//, '');
                        s = s.replaceAll(imgEs[j], url);
                    }
                }
            }
            return s;
        },
        trim = (s) => {
            return handleImgs(s).replaceAll('javascript:void(0);', '').replaceAll("&nbsp;", '').replaceAll(",", ',').replaceAll(
                "。", '.').replaceAll(":", ':').replaceAll(";",
                    ';').replaceAll("?", '?').replaceAll("(", '(').replaceAll(")", ')').replaceAll("“", '"')
                .replaceAll("”", '"').replaceAll("!", '!').replaceAll("-", ' ').replace(/(<([^>]+)>)/ig, '')
                .replace(/^\s+/ig, '').replace(/\s+$/ig, '');
        },
        cVersion = 999,
        classId = getQueryVariable('clazzid') || getQueryVariable('clazzId') || getQueryVariable('classid') ||
            getQueryVariable('classId'),
        courseId = getQueryVariable('courseid') || getQueryVariable('courseId'),
        UID = getCookie('_uid') || getCookie('UID'),
        FID = getCookie('fid'),
        jq = _w.top.$ || _w.top.jQuery;
    _w.confirm = (msg) => {
        return true;
    }
    setInterval(function () {
        _w.confirm = (msg) => {
            return true;
        }
    }, 2000);
    if (parseFloat(rate) == parseInt(rate)) {
        rate = parseInt(rate);
    } else {
        rate = parseFloat(rate);
    }
    try {
        _w.top.unrivalReviewMode = GM_getValue('unrivalreview', '0') || '0';
        _w.top.unrivalDoWork = GM_getValue('unrivaldowork', '1') || '1';
        _w.top.unrivalAutoSubmit = GM_getValue('unrivalautosubmit', '1') || '1';
        _w.top.unrivalAutoSave = GM_getValue('unrivalautosave', '0') || '0';
    } catch (e) { }
    if (_l.href.indexOf("knowledge/cards") > 0) {
        let allowBackground = false,
            spans = _d.getElementsByTagName('span');
        for (let i = 0, l = spans.length; i < l; i++) {
            if (spans[i].innerHTML.indexOf('章节未开放') != -1) {
                if (_l.href.indexOf("ut=s") != -1) {
                    _l.href = _l.href.replace("ut=s", "ut=t").replace(/&cpi=[0-9]{1,10}/, '');
                } else if (_l.href.indexOf("ut=t") != -1) {
                    spans[i].innerHTML = '此课程为闯关模式,请回到上一章节完成学习任务!'
                    return;
                }
                break;
            }
        }
        _w.top.unrivalPageRd = String(Math.random());
        if (!isFf) {
            try {
                cVersion = parseInt(navigator.userAgent.match(/Chrome\/[0-9]{2,3}./)[0].replace('Chrome/', '')
                    .replace('.', ''));
            } catch (e) { }
        }
        var busyThread = 0,
            getStr = (str, start, end) => {
                let res = str.substring(str.indexOf(start), str.indexOf(end)).replace(start, '');
                return res;
            },
            scripts = _d.getElementsByTagName('script'),
            param = null;
        for (let i = 0, l = scripts.length; i < l; i++) {
            if (scripts[i].innerHTML.indexOf('mArg = "";') != -1 && scripts[i].innerHTML.indexOf(
                '==UserScript==') == -1) {
                param = getStr(scripts[i].innerHTML, 'try{\n    mArg = ', ';\n}catch(e){');
            }
        }
        if (param == null) {
            return;
        }
        try {
            vrefer = _d.getElementsByClassName('ans-attach-online ans-insertvideo-online')[0].src;
        } catch (e) {
            vrefer = _p + '//' + _h + '/ananas/modules/video/index.html?v=2022-1118-1729';
        }
        GM_setValue('vrefer', vrefer);
        GM_setValue('host', _h);
        _d.getElementsByTagName("html")[0].innerHTML = `
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>学习通小助手</title>
        <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
        <link href="https://z.chaoxing.com/yanshi/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="row" style="margin: 10px;">
            <div class="col-md-6 col-md-offset-3">
                <div class="header clearfix">
                    <h3 class="text-muted" style="margin-top: 20px;margin-bottom: 0;float: left;"><a href="https://scriptcat.org/script-show-page/336" target="view_window">学习通小助手v1.0&ensp;</a></h3><div id="onlineNum"></div>
                </div>
                <hr style="margin-top: 10px;margin-bottom: 20px;">
                <div class="panel panel-info" id="normalQuery">
                    <div class="panel-heading">任务配置</div>
                    <div class="panel-body">
                        <div>
                            <div style="padding: 0;font-size: 20px;float: left;">视频倍速:</div>
                            <div>
                                <input type="number" id="unrivalRate" style="width: 80px;">
                                &ensp;
                                <a id='updateRateButton' class="btn btn-default">保存</a>
                                &nbsp;|&nbsp;
                                <a id='reviewModeButton' class="btn btn-default">复习模式</a>
                                &nbsp;|&nbsp;
                                <a id='videoTimeButton' class="btn btn-default">查看学习进度</a>
                                &nbsp;|&nbsp;
                                <a id='fuckMeModeButton' class="btn btn-default" href="https://scriptcat.org/script-show-page/379" target="view_window">后台挂机</a>
                                &nbsp;
                                <a id='backGround' class="btn btn-default" target="view_window">激活挂机</a>
                            </div><br>
                            <div style="padding: 0;font-size: 20px;float: left;">章节测试:</div>
                            <a id='autoDoWorkButton' class="btn btn-default">自动答题</a>&nbsp;|&nbsp;
                            <a id='autoSubmitButton' class="btn btn-default">自动提交</a>&nbsp;|&nbsp;
                            <a id='autoSaveButton' class="btn btn-default">自动保存</a>
                        </div>
                    </div>
                </div>
                <div class="panel panel-info" id='videoTime' style="display: none;height: 300px;">
                    <div class="panel-heading">学习进度</div>
                    <div class="panel-body" style="height: 100%;">
                        <iframe id="videoTimeContent" src="" frameborder="0" scrolling="auto"
                            style="width: 100%;height: 85%;"></iframe>
                    </div>
                </div>
                <div class="panel panel-info">
                    <div class="panel-heading">任务列表</div>
                    <div class="panel-body" id='joblist'>
                    </div>
                </div>
                <div class="panel panel-info">
                    <div class="panel-heading">运行日志</div>
                    <div class="panel-body">
                        <div id="result" style="overflow:auto;line-height: 30px;">
                            <div id="log">
                                <span style="color: red">[00:00:00]如果此提示不消失,说明页面出现了错误,请联系作者</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="panel panel-info" id='workPanel' style="display: none;height: 1000px;">
                    <div class="panel-heading">章节测试</div>
                    <div class="panel-body" id='workWindow' style="height: 100%;">
                        <iframe id="frame_content" name="frame_content" src="" frameborder="0" scrolling="auto"
                            style="width: 100%;height: 95%;"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>
`;
        var logs = {
            "logArry": [],
            "addLog": function (str, color = "black") {
                if (this.logArry.length >= 50) {
                    this.logArry.splice(0, 1);
                }
                var nowTime = new Date();
                var nowHour = (Array(2).join(0) + nowTime.getHours()).slice(-2);
                var nowMin = (Array(2).join(0) + nowTime.getMinutes()).slice(-2);
                var nowSec = (Array(2).join(0) + nowTime.getSeconds()).slice(-2);
                this.logArry.push("<span style='color: " + color + "'>[" + nowHour + ":" + nowMin + ":" +
                    nowSec + "] " + str + "</span>");
                let logStr = "";
                for (let logI = 0, logLen = this.logArry.length; logI < logLen; logI++) {
                    logStr += this.logArry[logI] + "<br>";
                }
                _d.getElementById('log').innerHTML = logStr;
                var logElement = _d.getElementById('log');
                logElement.scrollTop = logElement.scrollHeight;
            }
        },
            htmlHook = setInterval(function () {
                if (_d.getElementById('unrivalRate') && _d.getElementById('updateRateButton') && _d
                    .getElementById('reviewModeButton') && _d.getElementById('autoDoWorkButton') && _d
                        .getElementById('autoSubmitButton') && _d.getElementById('autoSaveButton')) {
                    if (!backGround) {
                        _d.getElementById('fuckMeModeButton').style.display = "none";
                    }
                    allowBackground = Math.round(new Date() / 1000) - parseInt(GM_getValue(
                        'unrivalBackgroundVideoEnable',
                        '6')) < 15;
                    if (allowBackground) {
                        _d.getElementById('fuckMeModeButton').setAttribute('href', 'unrivalxxtbackground/');
                    }
                    clearInterval(htmlHook);
                    if (cVersion < 86) {
                        logs.addLog(
                            '\u60a8\u7684\u6d4f\u89c8\u5668\u5185\u6838\u8fc7\u8001\uff0c\u8bf7\u66f4\u65b0\u7248\u672c\u6216\u4f7f\u7528\u4e3b\u6d41\u6d4f\u89c8\u5668\uff0c\u63a8\u8350\u003c\u0061\u0020\u0068\u0072\u0065\u0066\u003d\u0022\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006d\u0069\u0063\u0072\u006f\u0073\u006f\u0066\u0074\u002e\u0063\u006f\u006d\u002f\u007a\u0068\u002d\u0063\u006e\u002f\u0065\u0064\u0067\u0065\u0022\u0020\u0074\u0061\u0072\u0067\u0065\u0074\u003d\u0022\u0076\u0069\u0065\u0077\u005f\u0077\u0069\u006e\u0064\u006f\u0077\u0022\u003e\u0065\u0064\u0067\u0065\u6d4f\u89c8\u5668\u003c\u002f\u0061\u003e',
                            'red');
                        stop = true;
                        return;
                    }
                    if (isMobile) {
                        logs.addLog('手机浏览器不保证能正常运行此脚本', 'orange');
                    }
                    _d.addEventListener('visibilitychange', function () {
                        let isH = _d.hidden;
                        if (!isH) {
                            logs.addLog('挂机功能不稳定,不建议长时间最小化窗口', 'orange');
                        }
                    });
                    _d.getElementById('unrivalRate').value = rate;
                    _d.getElementById('updateRateButton').onclick = function () {
                        let urate = _d.getElementById('unrivalRate').value;
                        if (parseFloat(urate) == parseInt(urate)) {
                            urate = parseInt(urate);
                        } else {
                            urate = parseFloat(urate);
                        }
                        GM_setValue('unrivalrate', urate);
                        rate = urate;
                        if (urate > 0) {
                            logs.addLog('视频倍速已更新为' + urate + '倍,将在3秒内生效', 'green');
                        } else {
                            logs.addLog('奇怪的倍速,将会自动跳过视频任务', 'orange');
                        }
                    }
                    _d.getElementById('backGround').onclick = function () {
                        logs.addLog('挂机激活成功,您现在可以最小化页面了', 'green');
                        _w.top.backNow = 1;
                    }
                    _d.getElementById('reviewModeButton').onclick = function () {
                        let reviewButton = _d.getElementById('reviewModeButton');
                        if (reviewButton.getAttribute('class') == 'btn btn-default') {
                            _d.getElementById('reviewModeButton').setAttribute('class', 'btn btn-success');
                            logs.addLog('复习模式已开启,遇到已完成的视频任务不会跳过', 'green');
                            GM_setValue('unrivalreview', '1');
                            _w.top.unrivalReviewMode = '1';
                        } else {
                            _d.getElementById('reviewModeButton').setAttribute('class', 'btn btn-default');
                            logs.addLog('复习模式已关闭,遇到已完成的视频任务会自动跳过', 'green');
                            GM_setValue('unrivalreview', '0');
                            _w.top.unrivalReviewMode = '0';
                        }
                    }
                    _d.getElementById('autoDoWorkButton').onclick = function () {
                        let autoDoWorkButton = _d.getElementById('autoDoWorkButton');
                        if (autoDoWorkButton.getAttribute('class') == 'btn btn-default') {
                            _d.getElementById('autoDoWorkButton').setAttribute('class', 'btn btn-success');
                            logs.addLog('自动做章节测试已开启,将会自动做章节测试', 'green');
                            GM_setValue('unrivaldowork', '1');
                            _w.top.unrivalDoWork = '1';
                        } else {
                            _d.getElementById('autoDoWorkButton').setAttribute('class', 'btn btn-default');
                            logs.addLog('自动做章节测试已关闭,将不会自动做章节测试', 'green');
                            GM_setValue('unrivaldowork', '0');
                            _w.top.unrivalDoWork = '0';
                        }
                    }
                    _d.getElementById('autoSubmitButton').onclick = function () {
                        let autoSubmitButton = _d.getElementById('autoSubmitButton');
                        if (autoSubmitButton.getAttribute('class') == 'btn btn-default') {
                            _d.getElementById('autoSubmitButton').setAttribute('class', 'btn btn-success');
                            logs.addLog('符合提交标准的章节测试将会自动提交', 'green');
                            GM_setValue('unrivalautosubmit', '1');
                            _w.top.unrivalAutoSubmit = '1';
                        } else {
                            _d.getElementById('autoSubmitButton').setAttribute('class', 'btn btn-default');
                            logs.addLog('章节测试将不会自动提交', 'green');
                            GM_setValue('unrivalautosubmit', '0');
                            _w.top.unrivalAutoSubmit = '0';
                        }
                    }
                    _d.getElementById('autoSaveButton').onclick = function () {
                        let autoSaveButton = _d.getElementById('autoSaveButton');
                        if (autoSaveButton.getAttribute('class') == 'btn btn-default') {
                            _d.getElementById('autoSaveButton').setAttribute('class', 'btn btn-success');
                            logs.addLog('不符合提交标准的章节测试将会自动保存', 'green');
                            GM_setValue('unrivalautosave', '1');
                            _w.top.unrivalAutoSave = '1';
                        } else {
                            _d.getElementById('autoSaveButton').setAttribute('class', 'btn btn-default');
                            logs.addLog('不符合提交标准的章节测试将不会自动保存,等待用户自己操作', 'green');
                            GM_setValue('unrivalautosave', '0');
                            _w.top.unrivalAutoSave = '0';
                        }
                    }
                    _d.getElementById('videoTimeButton').onclick = function () {
                        _d.getElementById('videoTime').style.display = 'block';
                        _d.getElementById('videoTimeContent').src = _p +
                            '//stat2-ans.chaoxing.com/task/s/index?courseid=' + courseId + '&clazzid=' +
                            classId;
                    }
                }
            }, 100),
            loopjob = () => {
                if (_w.top.unrivalScriptList.length > 1) {
                    logs.addLog('您同时开启了多个刷课脚本,会挂科,会挂科,会挂科,会挂科,会挂科,会挂科,会挂科,会挂科', 'red');
                }
                if (cVersion < 8.6 * 10) {
                    logs.addLog(
                        '\u60a8\u7684\u6d4f\u89c8\u5668\u5185\u6838\u8fc7\u8001\uff0c\u8bf7\u66f4\u65b0\u7248\u672c\u6216\u4f7f\u7528\u4e3b\u6d41\u6d4f\u89c8\u5668\uff0c\u63a8\u8350\u003c\u0061\u0020\u0068\u0072\u0065\u0066\u003d\u0022\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u006d\u0069\u0063\u0072\u006f\u0073\u006f\u0066\u0074\u002e\u0063\u006f\u006d\u002f\u007a\u0068\u002d\u0063\u006e\u002f\u0065\u0064\u0067\u0065\u0022\u0020\u0074\u0061\u0072\u0067\u0065\u0074\u003d\u0022\u0076\u0069\u0065\u0077\u005f\u0077\u0069\u006e\u0064\u006f\u0077\u0022\u003e\u0065\u0064\u0067\u0065\u6d4f\u89c8\u5668\u003c\u002f\u0061\u003e',
                        'red');
                    stop = true;
                    return;
                }
                if (stop) {
                    return;
                }
                let missionli = missionList;
                if (missionli == []) {
                    setTimeout(loopjob, 500);
                    return;
                }
                for (let itemName in missionli) {
                    if (missionli[itemName]['running']) {
                        setTimeout(loopjob, 500);
                        return;
                    }
                }
                for (let itemName in missionli) {
                    if (!missionli[itemName]['done']) {
                        switch (missionli[itemName]['type']) {
                            case 'video':
                                doVideo(missionli[itemName]);
                                break;
                            case 'document':
                                doDocument(missionli[itemName]);
                                break;
                            case 'work':
                                doWork(missionli[itemName]);
                                break;
                        }
                        setTimeout(loopjob, 500);
                        return;
                    }
                }
                if (busyThread <= 0) {
                    if (jumpType != 2) {
                        _w.top.jump = true;
                        logs.addLog('所有任务处理完毕,5秒后自动下一章', 'green');
                    } else {
                        logs.addLog('所有任务处理完毕,用户设置为不跳转,脚本已结束运行,如需自动跳转,请编辑脚本代码参数', 'green');
                    }
                    clearInterval(loopjob);
                } else {
                    setTimeout(loopjob, 500);
                }
            },
            readyCheck = () => {
                setTimeout(function () {
                    try {
                        if (!isCat) {
                            logs.addLog(
                                '推荐使用<a href="https://docs.scriptcat.org/use/#%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95" target="view_window">脚本猫</a>运行此脚本,使用其他脚本管理器不保证能正常运行',
                                'orange');
                        }
                        if (_w.top.unrivalReviewMode == '1') {
                            logs.addLog('复习模式已开启,遇到已完成的视频任务不会跳过', 'green');
                            _d.getElementById('reviewModeButton').setAttribute('class', ['btn btn-default',
                                'btn btn-success'
                            ][_w.top.unrivalReviewMode]);
                        }
                        if (_w.top.unrivalDoWork == '1') {
                            logs.addLog('自动做章节测试已开启,将会自动做章节测试', 'green');
                            _d.getElementById('autoDoWorkButton').setAttribute('class', ['btn btn-default',
                                'btn btn-success'
                            ][_w.top.unrivalDoWork]);
                        }
                        _d.getElementById('autoSubmitButton').setAttribute('class', ['btn btn-default',
                            'btn btn-success'
                        ][_w.top.unrivalAutoSubmit]);
                        _d.getElementById('autoSaveButton').setAttribute('class', ['btn btn-default',
                            'btn btn-success'
                        ][_w.top.unrivalAutoSave]);
                    } catch (e) {
                        console.log(e);
                        readyCheck();
                        return;
                    }
                }, 500);
            }
        readyCheck();
        try {
            var pageData = JSON.parse(param);
        } catch (e) {
            if (jumpType != 2) {
                _w.top.jump = true;
                logs.addLog('此页无任务,5秒后自动下一章', 'green');
            } else {
                logs.addLog('此页无任务,用户设置为不跳转,脚本已结束运行,如需自动跳转,请编辑脚本代码参数', 'green');
            }
            return;
        }
        var data = pageData['defaults'],
            jobList = [],
            classId = data['clazzId'],
            chapterId = data['knowledgeid'],
            reportUrl = data['reportUrl'],
            ktoken = data['ktoken'];
        UID = UID || data['userid'];
        FID = FID || data['fid'];
        for (let i = 0, l = pageData['attachments'].length; i < l; i++) {
            let item = pageData['attachments'][i];
            if (item['job'] != true || item['isPassed'] == true) {
                if (_w.top.unrivalReviewMode == '1' && item['type'] == 'video') {
                    jobList.push(item);
                }
                continue;
            } else {
                jobList.push(item);
            }
        }
        var video_getReady = (item) => {
            let statusUrl = _p + '//' + _h + '/ananas/status/' + item['property']['objectid'] + '?k=' +
                FID + '&flag=normal&_dc=' + String(Math.round(new Date())),
                doubleSpeed = item['property']['doublespeed'];
            busyThread += 1;
            GM_xmlhttpRequest({
                method: "get",
                headers: {
                    'Host': _h,
                    'Referer': vrefer,
                    'Sec-Fetch-Site': 'same-origin'
                },
                url: statusUrl,
                onload: function (res) {
                    try {
                        busyThread -= 1;
                        let videoInfo = JSON.parse(res.responseText),
                            duration = videoInfo['duration'],
                            dtoken = videoInfo['dtoken'];
                        if (duration == undefined) {
                            _d.getElementById('joblist').innerHTML += `
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '[无效视频]' + item['property']['name'] + `
                                </div>
                            </div>`
                            return;
                        }
                        missionList['m' + item['jobid']] = {
                            'module': item['property']['module'],
                            'type': 'video',
                            'dtoken': dtoken,
                            'duration': duration,
                            'objectId': item['property']['objectid'],
                            'rt': item['property']['rt'] || '0.9',
                            'otherInfo': item['otherInfo'],
                            'doublespeed': doubleSpeed,
                            'jobid': item['jobid'],
                            'name': item['property']['name'],
                            'done': false,
                            'running': false
                        };
                        var base222 = `data:image/png;base64,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`
                        _d.getElementById('joblist').innerHTML += `
                            
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '<img src="' + base222 + '" alt="Smiley face" width="120" height="120">' + `
                                </div>
                                <div class="panel-body">
                                    ` + '[视频]' + item['property']['name'] + `
                                </div>
                            </div>`
                    } catch (e) { }
                },
                onerror: function (err) {
                    console.log(err);
                    if (err.error.indexOf('@connect list') >= 0) {
                        logs.addLog('请添加安全网址,将 【 //@connect      ' + _h +
                            ' 】方括号里的内容(不包括方括号)添加到脚本代码内指定位置,否则脚本无法正常运行,如图所示:', 'red');
                        logs.addLog(
                            '<img src="https://pan-yz.chaoxing.com/thumbnail/0,0,0/609a8b79cbd6a91d10c207cf2b5f368d">'
                        );
                        stop = true;
                    } else {
                        logs.addLog('获取任务详情失败', 'red');
                        logs.addLog('错误原因:' + err.error, 'red');
                    }
                }
            });
        },
            doVideo = (item) => {
                if (rate <= 0) {
                    missionList['m' + item['jobid']]['running'] = true;
                    logs.addLog('奇怪的倍速,视频已自动跳过', 'orange');
                    setTimeout(function () {
                        missionList['m' + item['jobid']]['running'] = false;
                        missionList['m' + item['jobid']]['done'] = true;
                    }, 5000);
                    return;
                }
                if (allowBackground && backGround) {
                    if (_w.top.document.getElementsByClassName('catalog_points_sa').length > 0 || _w.top.document
                        .getElementsByClassName('lock').length > 0) {
                        logs.addLog('您已安装超星挂机小助手,但此课程可能为闯关模式,不支持后台挂机,将为您在线完成', 'blue');
                    } else {
                        item['userid'] = UID;
                        item['classId'] = classId;
                        item['review'] = [false, true][_w.top.unrivalReviewMode];
                        item['reportUrl'] = reportUrl;
                        item['rt'] = missionList['m' + item['jobid']]['rt'];
                        GM_setValue('unrivalBackgroundVideo', item);
                        _d.cookie = "videojs_id=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
                        logs.addLog(
                            '您已安装超星挂机小助手,已添加至后台任务,<a href="unrivalxxtbackground/" target="view_window">点我查看后台</a>',
                            'green');
                        missionList['m' + item['jobid']]['running'] = true;
                        setTimeout(function () {
                            missionList['m' + item['jobid']]['running'] = false;
                            missionList['m' + item['jobid']]['done'] = true;
                        }, 5000);
                        return;
                    }
                }
                let videojs_id = String(parseInt(Math.random() * 9999999));
                _d.cookie = 'videojs_id=' + videojs_id + ';path=/'
                logs.addLog('开始刷视频:' + item['name'] + ',倍速:' + String(rate) + '倍');
                logs.addLog('视频观看信息每60秒上报一次,请耐心等待', 'green');
                logs.addLog('如遇脚本使用异常情况,请检查脚本版本是否为最新版,<a href="https://scriptcat.org/script-show-page/878" target="view_window">点我(脚本猫)</a>或<a href="https://greasyfork.org/zh-CN/scripts/462748" target="view_window">点我(greasyfork)</a>检查', 'orange');
                if (disableMonitor) {
                    logs.addLog('解除多端学习监控有清除进度风险,请谨慎使用', 'orange');
                }
                let dtype = 'Video';
                if (item['module'].includes('audio')) {
                    dtype = 'Audio';
                    rt = '';
                }
                let playTime = 0,
                    playsTime = 0,
                    isdrag = '3',
                    times = 0,
                    encUrl = '',
                    first = true,
                    loop = setInterval(function () {
                        if (rate <= 0) {
                            clearInterval(loop);
                            logs.addLog('奇怪的倍速,视频已自动跳过', 'orange');
                            setTimeout(function () {
                                missionList['m' + item['jobid']]['running'] = false;
                                missionList['m' + item['jobid']]['done'] = true;
                            }, 5000);
                            return;
                        } else if (item['doublespeed'] == 0 && rate > 1 && _w.top.unrivalReviewMode == '0') {
                            rate = 1;
                            logs.addLog('该视频不允许倍速播放,已恢复至一倍速,高倍速会被清空进度挂科,勿存侥幸', 'red');
                        }
                        rt = missionList['m' + item['jobid']]['rt'];
                        playsTime += rate;
                        playTime = Math.ceil(playsTime);
                        if (times == 0 || times % 60 == 0 || playTime >= item['duration']) {
                            if (first) {
                                playTime = 0;
                            }
                            if (playTime >= item['duration']) {
                                clearInterval(loop);
                                playTime = item['duration'];
                                isdrag = '4';
                            } else if (playTime > 0) {
                                isdrag = '0';
                            }
                            encUrl = host + 'chaoXing/v3/getEnc.php?classid=' + classId +
                                '&playtime=' + playTime + '&duration=' + item['duration'] + '&objectid=' + item[
                                'objectId'] + '&jobid=' + item['jobid'] + '&uid=' + UID;
                            busyThread += 1;
                            var _bold_playTime = playTime;
                            function ecOnload(res) {
                                let enc = '';
                                if (res && res.status == 200) {
                                    enc = res.responseText;
                                    if (enc.includes('--#')) {
                                        let warnInfo = enc.match(new RegExp('--#(.*?)--#', "ig"))[0]
                                            .replace(/--#/ig, '');
                                        logs.addLog(warnInfo, 'red');
                                        enc = enc.replace(/--#(.*?)--#/ig, '');
                                    }
                                    if (enc.indexOf('.stop') >= 0) {
                                        clearInterval(loop);
                                        stop = true;
                                        return;
                                    }
                                } else {
                                    strEc = `[${classId}][${UID}][${item['jobid']}][${item['objectId']}][${playTime * 1000}][d_yHJ!$pdA~5][${item['duration'] * 1000}][0_${item['duration']}]`,
                                        enc = jq.md5(strEc);
                                }
                                if (enc.length != 32) {
                                    clearInterval(loop);
                                    stop = true;
                                    return;
                                }
                                let reportsUrl = reportUrl + '/' + item['dtoken'] +
                                    '?clazzId=' + classId + '&playingTime=' + playTime +
                                    '&duration=' + item['duration'] + '&clipTime=0_' + item[
                                    'duration'] + '&objectId=' + item['objectId'] +
                                    '&otherInfo=' + item['otherInfo'] + '&jobid=' + item[
                                    'jobid'] + '&userid=' + UID + '&isdrag=' + isdrag +
                                    '&view=pc&enc=' + enc + '&rt=' + rt + '&dtype=' + dtype +
                                    '&_t=' + String(Math.round(new Date()));
                                GM_xmlhttpRequest({
                                    method: "get",
                                    headers: {
                                        'Host': _h,
                                        'Referer': vrefer,
                                        'Sec-Fetch-Site': 'same-origin',
                                        'Content-Type': 'application/json'
                                    },
                                    url: reportsUrl,
                                    onload: function (res) {
                                        try {
                                            let today = new Date(),
                                                todayStr = today.getFullYear() +
                                                    'd' + today.getMonth() + 'd' + today
                                                        .getDate(),
                                                timelong = GM_getValue(
                                                    'unrivaltimelong', {});
                                            if (timelong[UID] == undefined ||
                                                timelong[UID]['today'] != todayStr
                                            ) {
                                                timelong[UID] = {
                                                    'time': 0,
                                                    'today': todayStr
                                                };
                                            } else {
                                                timelong[UID]['time']++;
                                            }
                                            GM_setValue('unrivaltimelong',
                                                timelong);
                                            busyThread -= 1;
                                            if (timelong[UID]['time'] / 60 > 22 &&
                                                item['doublespeed'] == 0 && _w.top
                                                    .unrivalReviewMode == '0') {
                                                clearInterval(loop);
                                                logs.addLog(
                                                    '今日学习时间过长,继续学习会导致清空进度,请明天再来',
                                                    'red');
                                                setTimeout(function () {
                                                    missionList['m' + item[
                                                        'jobid']][
                                                        'running'
                                                    ] = false;
                                                    missionList['m' + item[
                                                        'jobid']][
                                                        'done'
                                                    ] = true;
                                                }, 5000);
                                                return;
                                            }
                                            let ispass = JSON.parse(res
                                                .responseText);
                                            first = false;
                                            if (ispass['isPassed'] && _w.top
                                                .unrivalReviewMode == '0') {
                                                logs.addLog('视频任务已完成', 'green');
                                                missionList['m' + item['jobid']]['running'] = false;
                                                missionList['m' + item['jobid']]['done'] = true;
                                                clearInterval(loop);
                                                return;
                                            } else if (isdrag == '4') {
                                                if (_w.top.unrivalReviewMode ==
                                                    '1') {
                                                    logs.addLog('视频已观看完毕', 'green');
                                                } else {
                                                    logs.addLog('视频已观看完毕,但视频任务未完成',
                                                        'red');
                                                }
                                                missionList['m' + item['jobid']][
                                                    'running'
                                                ] = false;
                                                missionList['m' + item['jobid']][
                                                    'done'
                                                ] = true;
                                                try {
                                                    clearInterval(loop);
                                                } catch (e) {

                                                }
                                            } else {
                                                logs.addLog(item['name'] + '已观看' +
                                                    _bold_playTime + '秒,剩余大约' +
                                                    String(item['duration'] -
                                                        _bold_playTime) + '秒');
                                            }
                                        } catch (e) {
                                            console.log(e);
                                            if (res.responseText.indexOf('验证码') >=
                                                0) {
                                                logs.addLog('已被超星风控,请<a href="' +
                                                    reportsUrl +
                                                    '" target="_blank">点我处理</a>,60秒后自动刷新页面',
                                                    'red');
                                                missionList['m' + item['jobid']][
                                                    'running'
                                                ] = false;
                                                clearInterval(loop);
                                                stop = true;
                                                setTimeout(function () {
                                                    _l.reload();
                                                }, 60000);
                                                return;
                                            }
                                            logs.addLog('超星返回错误信息,十秒后重试', 'red');
                                            times = -10;
                                            return;
                                        }
                                    },
                                    onerror: function (err) {
                                        console.log(err);
                                        if (err.error.indexOf('@connect list') >=
                                            0) {
                                            logs.addLog(
                                                '请添加安全网址,将 【 //@connect      ' +
                                                _h +
                                                ' 】方括号里的内容(不包括方括号)添加到脚本代码内指定位置,否则脚本无法正常运行,如图所示:',
                                                'red');
                                            logs.addLog(
                                                '<img src="https://pan-yz.chaoxing.com/thumbnail/0,0,0/609a8b79cbd6a91d10c207cf2b5f368d">'
                                            );
                                            stop = true;
                                        } else {
                                            logs.addLog('观看视频失败', 'red');
                                            logs.addLog('错误原因:' + err.error, 'red');
                                        }
                                        missionList['m' + item['jobid']][
                                            'running'
                                        ] = false;
                                        clearInterval(loop);
                                    }
                                });
                            };
                            GM_xmlhttpRequest({
                                method: "get",
                                url: encUrl,
                                timeout: 2000,
                                onload: ecOnload,
                                onerror: function (err) {
                                    console.log(err);
                                    ecOnload(false);
                                },
                                ontimeout: function (err) {
                                    console.log(err);
                                    ecOnload(false);
                                }
                            });
                        }
                        times += 1;
                    }, 1000);
                missionList['m' + item['jobid']]['running'] = true;
            },
            doDocument = (item) => {
                missionList['m' + item['jobid']]['running'] = true;
                logs.addLog('开始刷文档:' + item['name']);
                setTimeout(function () {
                    busyThread += 1;
                    GM_xmlhttpRequest({
                        method: "get",
                        url: _p + '//' + _h + '/ananas/job/document?jobid=' + item['jobid'] +
                            '&knowledgeid=' + chapterId + '&courseid=' + courseId + '&clazzid=' +
                            classId + '&jtoken=' + item['jtoken'],
                        onload: function (res) {
                            try {
                                busyThread -= 1;
                                let ispass = JSON.parse(res.responseText);
                                if (ispass['status']) {
                                    logs.addLog('文档任务已完成', 'green');
                                } else {
                                    logs.addLog('文档已阅读完成,但任务点未完成', 'red');
                                }

                            } catch (err) {
                                console.log(err);
                                console.log(res.responseText);
                                logs.addLog('解析文档内容失败', 'red');
                            }
                            missionList['m' + item['jobid']]['running'] = false;
                            missionList['m' + item['jobid']]['done'] = true;
                        },
                        onerror: function (err) {
                            console.log(err);
                            if (err.error.indexOf('@connect list') >= 0) {
                                logs.addLog('请添加安全网址,将 【 //@connect      ' + _h +
                                    ' 】方括号里的内容(不包括方括号)添加到脚本代码内指定位置,否则脚本无法正常运行,如图所示:', 'red');
                                logs.addLog(
                                    '<img src="https://pan-yz.chaoxing.com/thumbnail/0,0,0/609a8b79cbd6a91d10c207cf2b5f368d">'
                                );
                                stop = true;
                            } else {
                                logs.addLog('阅读文档失败', 'red');
                                logs.addLog('错误原因:' + err.error, 'red');
                            }
                            missionList['m' + item['jobid']]['running'] = false;
                            missionList['m' + item['jobid']]['done'] = true;
                        }
                    });
                }, parseInt(Math.random() * 2000 + 9000, 10))
            },
            doWork = (item) => {
                missionList['m' + item['jobid']]['running'] = true;
                logs.addLog('开始刷章节测试:' + item['name']);
                logs.addLog('您设置的答题正确率为:' + String(accuracy) + '%,只有在高于此正确率时才会提交测试', 'blue');
                _d.getElementById('workPanel').style.display = 'block';
                _d.getElementById('frame_content').src = _p + '//' + _h + '/work/phone/work?workId=' + item['jobid']
                    .replace('work-', '') + '&courseId=' + courseId + '&clazzId=' + classId + '&knowledgeId=' +
                    chapterId + '&jobId=' + item['jobid'] + '&enc=' + item['enc'];
                _w.top.unrivalWorkInfo = '';
                _w.top.unrivalDoneWorkId = '';
                setInterval(function () {
                    if (_w.top.unrivalWorkInfo != '') {
                        logs.addLog(_w.top.unrivalWorkInfo);
                        _w.top.unrivalWorkInfo = '';
                    }
                }, 100);
                let checkcross = setInterval(function () {
                    if (_w.top.unrivalWorkDone == false) {
                        clearInterval(checkcross);
                        return;
                    }
                    let ifW = _d.getElementById('frame_content').contentWindow;
                    try {
                        ifW.location.href;
                    } catch (e) {
                        console.log(e);
                        if (e.message.indexOf('cross-origin') != -1) {
                            clearInterval(checkcross);
                            _w.top.unrivalWorkDone = true;
                            return;
                        }
                    }
                }, 2000);
                let workDoneInterval = setInterval(function () {
                    if (_w.top.unrivalWorkDone) {
                        _w.top.unrivalWorkDone = false;
                        clearInterval(workDoneInterval);
                        _w.top.unrivalDoneWorkId = '';
                        _d.getElementById('workPanel').style.display = 'none';
                        _d.getElementById('frame_content').src = '';
                        setTimeout(function () {
                            missionList['m' + item['jobid']]['running'] = false;
                            missionList['m' + item['jobid']]['done'] = true;
                        }, 5000);
                    }
                }, 500);
            },
            missionList = [];
        if (jobList.length <= 0) {
            if (jumpType != 2) {
                _w.top.jump = true;
                logs.addLog('此页无任务,5秒后自动下一章', 'green');
            } else {
                logs.addLog('此页无任务,用户设置为不跳转,脚本已结束运行,如需自动跳转,请编辑脚本代码参数', 'green');
            }
            return;
        }
        for (let i = 0, l = jobList.length; i < l; i++) {
            let item = jobList[i];
            if (item['type'] == 'video') {
                video_getReady(item);
            } else if (item['type'] == 'document') {
                missionList['m' + item['jobid']] = {
                    'type': 'document',
                    'jtoken': item['jtoken'],
                    'jobid': item['jobid'],
                    'name': item['property']['name'],
                    'done': false,
                    'running': false
                };
                _d.getElementById('joblist').innerHTML += `
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '[文档]' + item['property']['name'] + `
                                </div>
                            </div>`
            } else if (item['type'] == 'workid' && _w.top.unrivalDoWork == '1') {
                missionList['m' + item['jobid']] = {
                    'type': 'work',
                    'workid': item['property']['workid'],
                    'jobid': item['jobid'],
                    'name': item['property']['title'],
                    'enc': item['enc'],
                    'done': false,
                    'running': false
                };
                _d.getElementById('joblist').innerHTML += `
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '[章节测试]' + item['property']['title'] + `
                                </div>
                            </div>`
            } else {
                try {
                    let jobName = item['property']['name'];
                    if (jobName == undefined) {
                        jobName = item['property']['title'];
                    }
                    _d.getElementById('joblist').innerHTML += `
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '已跳过:' + jobName + `
                                </div>
                            </div>`
                } catch (e) { }
            }
        }
        loopjob();
    } else if (_l.href.includes("mycourse/studentstudy")) {
        var audiofile =
            'data:audio/ogg;base64,T2dnUwACAAAAAAAAAABwRPFFAAAAAGFtEqwBHgF2b3JiaXMAAAAAAUAfAAAAAAAAUHgAAAAAAACZAU9nZ1MAAAAAAAAAAAAAcETxRQEAAAA7J4IBDP8F////////////tQN2b3JiaXMvAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxNDAxMjIgKFR1cnBha8OkcsOkamlpbikGAAAAJQAAAEVOQ09ERVI9U291bmQgU3R1ZGlvLCBsaWJWb3JiaXMgMS4zLjEbAAAAQUxCVU0gQVJUSVNUPUFkdmVudHVyZSBMYW5kFAAAAEFMQlVNPUFkdmVudHVyZSBMYW5kIQAAAEVOQ09ESU5HIEFQUExJQ0FUSU9OPVNvdW5kIFN0dWRpbxUAAABBUlRJU1Q9QWR2ZW50dXJlIExhbmQjAAAAVElUTEU9RW1wdHkgTG9vcCBGb3IgSlMgUGVyZm9ybWFuY2UBBXZvcmJpcxJCQ1YBAAABAAxSFCElGVNKYwiVUlIpBR1jUFtHHWPUOUYhZBBTiEkZpXtPKpVYSsgRUlgpRR1TTFNJlVKWKUUdYxRTSCFT1jFloXMUS4ZJCSVsTa50FkvomWOWMUYdY85aSp1j1jFFHWNSUkmhcxg6ZiVkFDpGxehifDA6laJCKL7H3lLpLYWKW4q91xpT6y2EGEtpwQhhc+211dxKasUYY4wxxsXiUyiC0JBVAAABAABABAFCQ1YBAAoAAMJQDEVRgNCQVQBABgCAABRFcRTHcRxHkiTLAkJDVgEAQAAAAgAAKI7hKJIjSZJkWZZlWZameZaouaov+64u667t6roOhIasBADIAAAYhiGH3knMkFOQSSYpVcw5CKH1DjnlFGTSUsaYYoxRzpBTDDEFMYbQKYUQ1E45pQwiCENInWTOIEs96OBi5zgQGrIiAIgCAACMQYwhxpBzDEoGIXKOScggRM45KZ2UTEoorbSWSQktldYi55yUTkompbQWUsuklNZCKwUAAAQ4AAAEWAiFhqwIAKIAABCDkFJIKcSUYk4xh5RSjinHkFLMOcWYcowx6CBUzDHIHIRIKcUYc0455iBkDCrmHIQMMgEAAAEOAAABFkKhISsCgDgBAIMkaZqlaaJoaZooeqaoqqIoqqrleabpmaaqeqKpqqaquq6pqq5seZ5peqaoqp4pqqqpqq5rqqrriqpqy6ar2rbpqrbsyrJuu7Ks256qyrapurJuqq5tu7Js664s27rkearqmabreqbpuqrr2rLqurLtmabriqor26bryrLryratyrKua6bpuqKr2q6purLtyq5tu7Ks+6br6rbqyrquyrLu27au+7KtC7vourauyq6uq7Ks67It67Zs20LJ81TVM03X9UzTdVXXtW3VdW1bM03XNV1XlkXVdWXVlXVddWVb90zTdU1XlWXTVWVZlWXddmVXl0XXtW1Vln1ddWVfl23d92VZ133TdXVblWXbV2VZ92Vd94VZt33dU1VbN11X103X1X1b131htm3fF11X11XZ1oVVlnXf1n1lmHWdMLqurqu27OuqLOu+ruvGMOu6MKy6bfyurQvDq+vGseu+rty+j2rbvvDqtjG8um4cu7Abv+37xrGpqm2brqvrpivrumzrvm/runGMrqvrqiz7uurKvm/ruvDrvi8Mo+vquirLurDasq/Lui4Mu64bw2rbwu7aunDMsi4Mt+8rx68LQ9W2heHVdaOr28ZvC8PSN3a+AACAAQcAgAATykChISsCgDgBAAYhCBVjECrGIIQQUgohpFQxBiFjDkrGHJQQSkkhlNIqxiBkjknIHJMQSmiplNBKKKWlUEpLoZTWUmotptRaDKG0FEpprZTSWmopttRSbBVjEDLnpGSOSSiltFZKaSlzTErGoKQOQiqlpNJKSa1lzknJoKPSOUippNJSSam1UEproZTWSkqxpdJKba3FGkppLaTSWkmptdRSba21WiPGIGSMQcmck1JKSamU0lrmnJQOOiqZg5JKKamVklKsmJPSQSglg4xKSaW1kkoroZTWSkqxhVJaa63VmFJLNZSSWkmpxVBKa621GlMrNYVQUgultBZKaa21VmtqLbZQQmuhpBZLKjG1FmNtrcUYSmmtpBJbKanFFluNrbVYU0s1lpJibK3V2EotOdZaa0ot1tJSjK21mFtMucVYaw0ltBZKaa2U0lpKrcXWWq2hlNZKKrGVklpsrdXYWow1lNJiKSm1kEpsrbVYW2w1ppZibLHVWFKLMcZYc0u11ZRai621WEsrNcYYa2415VIAAMCAAwBAgAlloNCQlQBAFAAAYAxjjEFoFHLMOSmNUs45JyVzDkIIKWXOQQghpc45CKW01DkHoZSUQikppRRbKCWl1losAACgwAEAIMAGTYnFAQoNWQkARAEAIMYoxRiExiClGIPQGKMUYxAqpRhzDkKlFGPOQcgYc85BKRljzkEnJYQQQimlhBBCKKWUAgAAChwAAAJs0JRYHKDQkBUBQBQAAGAMYgwxhiB0UjopEYRMSielkRJaCylllkqKJcbMWomtxNhICa2F1jJrJcbSYkatxFhiKgAA7MABAOzAQig0ZCUAkAcAQBijFGPOOWcQYsw5CCE0CDHmHIQQKsaccw5CCBVjzjkHIYTOOecghBBC55xzEEIIoYMQQgillNJBCCGEUkrpIIQQQimldBBCCKGUUgoAACpwAAAIsFFkc4KRoEJDVgIAeQAAgDFKOSclpUYpxiCkFFujFGMQUmqtYgxCSq3FWDEGIaXWYuwgpNRajLV2EFJqLcZaQ0qtxVhrziGl1mKsNdfUWoy15tx7ai3GWnPOuQAA3AUHALADG0U2JxgJKjRkJQCQBwBAIKQUY4w5h5RijDHnnENKMcaYc84pxhhzzjnnFGOMOeecc4wx55xzzjnGmHPOOeecc84556CDkDnnnHPQQeicc845CCF0zjnnHIQQCgAAKnAAAAiwUWRzgpGgQkNWAgDhAACAMZRSSimllFJKqKOUUkoppZRSAiGllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimVUkoppZRSSimllFJKKaUAIN8KBwD/BxtnWEk6KxwNLjRkJQAQDgAAGMMYhIw5JyWlhjEIpXROSkklNYxBKKVzElJKKYPQWmqlpNJSShmElGILIZWUWgqltFZrKam1lFIoKcUaS0qppdYy5ySkklpLrbaYOQelpNZaaq3FEEJKsbXWUmuxdVJSSa211lptLaSUWmstxtZibCWlllprqcXWWkyptRZbSy3G1mJLrcXYYosxxhoLAOBucACASLBxhpWks8LR4EJDVgIAIQEABDJKOeecgxBCCCFSijHnoIMQQgghREox5pyDEEIIIYSMMecghBBCCKGUkDHmHIQQQgghhFI65yCEUEoJpZRSSucchBBCCKWUUkoJIYQQQiillFJKKSGEEEoppZRSSiklhBBCKKWUUkoppYQQQiillFJKKaWUEEIopZRSSimllBJC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',
            audioPlayer = new Audio(audiofile);
        _w.top.backNow = 0;
        audioPlayer.loop = true;
        _w.audioPlayer = audioPlayer;
        setInterval(function () {
            try {
                _w.jQuery.fn.viewer.Constructor.prototype.show = () => { };
            } catch (e) {
            }
        }, 1000);
        try {
            _w.unrivalScriptList.push('Fuck me please');
        } catch (e) {
            _w.unrivalScriptList = ['Fuck me please'];
        }
        
        function checkOffline() {
            let dleft = _d.getElementsByClassName('left');
            if (dleft.length == 1) {
                let img = dleft[0].getElementsByTagName('img');
                if (img.length == 1) {
                    if (img[0].src.indexOf('loading.gif') != -1) {
                        return true;
                    }
                }
            }
            return false;
        }
        setInterval(function () {
            if (checkOffline()) {
                setTimeout(function () {
                    if (checkOffline()) {
                        _l.reload();
                    }
                }, 10000)
            }
        }, 3000);
        _d.addEventListener('visibilitychange', function () {
            var c = 0;
            if (_w.top.backNow == 0) {
                _d.title = '⚠️请先激活挂机';
                return
            } else {
                _d.title = '学生学习页面';
            }
            if (_d.hidden) {
                audioPlayer.play();
                var timer = setInterval(function () {
                    if (c) {
                        _d.title = '🙈挂机中';
                        c = 0;
                    } else {
                        _d.title = '🙉挂机中';
                        c = 1;
                    }
                    if (!_d.hidden) {
                        clearInterval(timer);
                        _d.title = '学生学习页面';
                    }
                }, 1300);
            } else {
                audioPlayer.pause();
            }
        });
        _w.unrivalgetTeacherAjax = _w.getTeacherAjax;
        _w.getTeacherAjax = (courseid, classid, cid) => {
            if (cid == getQueryVariable('chapterId')) {
                return;
            }
            _w.top.unrivalPageRd = '';
            _w.unrivalgetTeacherAjax(courseid, classid, cid);
        }
        if (disableMonitor == 1) {
            _w.appendChild = _w.Element.prototype.appendChild;
            _w.Element.prototype.appendChild = function () {
                try {
                    if (arguments[0].src.indexOf('detect.chaoxing.com') > 0) {
                        return;
                    }
                } catch (e) { }
                _w.appendChild.apply(this, arguments);
            };
        }

        _w.jump = false;
        setInterval(function () {
            if (getQueryVariable('mooc2') == '1') {
                let tabs = _d.getElementsByClassName('posCatalog_select');
                for (let i = 0, l = tabs.length; i < l; i++) {
                    let tabId = tabs[i].getAttribute('id');
                    if (tabId.indexOf('cur') >= 0 && tabs[i].getAttribute('class') == 'posCatalog_select') {
                        tabs[i].setAttribute('onclick', "getTeacherAjax('" + courseId + "','" + classId +
                            "','" + tabId.replace('cur', '') + "');");
                    }
                }
            } else {
                let h4s = _d.getElementsByTagName('h4'),
                    h5s = _d.getElementsByTagName('h5');
                for (let i = 0, l = h4s.length; i < l; i++) {
                    if (h4s[i].getAttribute('id').indexOf('cur') >= 0) {
                        h4s[i].setAttribute('onclick', "getTeacherAjax('" + courseId + "','" + classId +
                            "','" + h4s[i].getAttribute('id').replace('cur', '') + "');");
                    }
                }
                for (let i = 0, l = h5s.length; i < l; i++) {
                    if (h5s[i].getAttribute('id').indexOf('cur') >= 0) {
                        h5s[i].setAttribute('onclick', "getTeacherAjax('" + courseId + "','" + classId +
                            "','" + h5s[i].getAttribute('id').replace('cur', '') + "');");
                    }
                }
            }
        }, 1000);
        setInterval(function () {
            let but = null;
            if (_w.jump) {
                _w.jump = false;
                _w.top.unrivalDoneWorkId = '';
                _w.jjump = (rd) => {
                    if (rd != _w.top.unrivalPageRd) {
                        return;
                    }
                    try {
                        setTimeout(function () {
                            if (jumpType == 1) {
                                if (getQueryVariable('mooc2') == '1') {
                                    but = _d.getElementsByClassName(
                                        'jb_btn jb_btn_92 fs14 prev_next next');
                                } else {
                                    but = _d.getElementsByClassName('orientationright');
                                }
                                try {
                                    setTimeout(function () {
                                        if (rd != _w.top.unrivalPageRd) {
                                            return;
                                        }
                                        but[0].click();
                                    }, 2000);
                                } catch (e) { }
                                return;
                            }
                            if (getQueryVariable('mooc2') == '1') {
                                let ul = _d.getElementsByClassName('prev_ul')[0],
                                    lis = ul.getElementsByTagName('li');
                                for (let i = 0, l = lis.length; i < l; i++) {
                                    if (lis[i].getAttribute('class') == 'active') {
                                        if (i + 1 >= l) {
                                            break;
                                        } else {
                                            try {
                                                lis[i + 1].click();
                                            } catch (e) { }
                                            return;
                                        }
                                    }
                                }
                                let tabs = _d.getElementsByClassName('posCatalog_select');
                                for (let i = 0, l = tabs.length; i < l; i++) {
                                    if (tabs[i].getAttribute('class') ==
                                        'posCatalog_select posCatalog_active') {
                                        while (i + 1 < tabs.length) {
                                            let nextTab = tabs[i + 1];
                                            if ((nextTab.innerHTML.includes(
                                                'icon_Completed prevTips') && _w.top
                                                    .unrivalReviewMode == '0') || nextTab
                                                        .innerHTML.includes(
                                                            'catalog_points_er prevTips')) {
                                                i++;
                                                continue;
                                            }
                                            if (nextTab.id.indexOf('cur') < 0) {
                                                i++;
                                                continue;
                                            }
                                            let clickF = setInterval(function () {
                                                if (rd != _w.top.unrivalPageRd) {
                                                    clearInterval(clickF);
                                                    return;
                                                }
                                                nextTab.click();
                                            }, 2000);
                                            break;
                                        }
                                        break;
                                    }
                                }
                            } else {
                                let div = _d.getElementsByClassName('tabtags')[0],
                                    spans = div.getElementsByTagName('span');
                                for (let i = 0, l = spans.length; i < l; i++) {
                                    if (spans[i].getAttribute('class').indexOf('currents') >=
                                        0) {
                                        if (i + 1 == l) {
                                            break;
                                        } else {
                                            try {
                                                spans[i + 1].click();
                                            } catch (e) { }
                                            return;
                                        }
                                    }
                                }
                                let tabs = _d.getElementsByTagName('span'),
                                    newTabs = [];
                                for (let i = 0, l = tabs.length; i < l; i++) {
                                    if (tabs[i].getAttribute('style') != null && tabs[i]
                                        .getAttribute('style').indexOf(
                                            'cursor:pointer;height:18px;') >= 0) {
                                        newTabs.push(tabs[i]);
                                    }
                                }
                                tabs = newTabs;
                                for (let i = 0, l = tabs.length; i < l; i++) {
                                    if (tabs[i].parentNode.getAttribute('class') ==
                                        'currents') {
                                        while (i + 1 < tabs.length) {
                                            let nextTab = tabs[i + 1].parentNode;
                                            if ((nextTab.innerHTML.includes(
                                                'roundpoint  blue') && _w.top
                                                    .unrivalReviewMode == '0') || nextTab
                                                        .innerHTML.includes('roundpointStudent  lock')
                                            ) {
                                                i++;
                                                continue;
                                            }
                                            if (nextTab.id.indexOf('cur') < 0) {
                                                i++;
                                                continue;
                                            }
                                            let clickF = setInterval(function () {
                                                if (rd != _w.top.unrivalPageRd) {
                                                    clearInterval(clickF);
                                                    return;
                                                }
                                                nextTab.click();
                                            }, 2000);
                                            break;
                                        }
                                        break;
                                    }
                                }
                            }
                        }, 2000);
                    } catch (e) { }
                }
                _w.onReadComplete1();
                setTimeout('jjump("' + _w.top.unrivalPageRd + '")', 2856);
            }
        }, 200);
    } else if (_l.href.indexOf("work/phone/doHomeWork") > 0) {
        var wIdE = _d.getElementById('workLibraryId') || _d.getElementById('oldWorkId'),
            wid = wIdE.value;
        _w.top.unrivalWorkDone = false;
        _w.aalert = _w.alert;
        _w.alert = (msg) => {
            if (msg == '保存成功') {
                _w.top.unrivalDoneWorkId = getQueryVariable('workId');
                return;
            }
            aalert(msg);
        }
        if (_w.top.unrivalDoneWorkId == getQueryVariable('workId')) {
            _w.top.unrivalWorkDone = true;
            return;
        }
        _w.confirm = (msg) => {
            return true;
        }
        var questionList = [],
            questionsElement = _d.getElementsByClassName('Py-mian1'),
            questionNum = questionsElement.length,
            totalQuestionNum = questionNum;
        for (let i = 0; i < questionNum; i++) {
            let questionElement = questionsElement[i],
                idElements = questionElement.getElementsByTagName('input'),
                questionId = '0',
                question = questionElement.getElementsByClassName('Py-m1-title fs16')[0].innerHTML;
            question = handleImgs(question).replace(/(<([^>]+)>)/ig, '').replace(/[0-9]{1,3}.\[(.*?)\]/ig, '').replaceAll('\n',
                '').replace(/^\s+/ig, '').replace(/\s+$/ig, '');
            for (let z = 0, k = idElements.length; z < k; z++) {
                try {
                    if (idElements[z].getAttribute('name').indexOf('answer') >= 0) {
                        questionId = idElements[z].getAttribute('name').replace('type', '');
                        break;
                    }
                } catch (e) {
                    console.log(e);
                    continue;
                }
            }
            if (questionId == '0' || question == '') {
                continue;
            }
            typeE = questionElement.getElementsByTagName('input');
            if (typeE == null || typeE == []) {
                continue;
            }
            let typeN = 'fuckme';
            for (let g = 0, h = typeE.length; g < h; g++) {
                if (typeE[g].id == 'answertype' + questionId.replace('answer', '').replace('check', '')) {
                    typeN = typeE[g].value;
                    break;
                }
            }
            if (['0', '1', '3'].indexOf(typeN) < 0) {
                continue;
            }
            type = {
                '0': '单选题',
                '1': '多选题',
                '3': '判断题'
            }[typeN];
            let optionList = {
                length: 0
            };
            if (['单选题', '多选题'].indexOf(type) >= 0) {
                let answersElements = questionElement.getElementsByClassName('answerList')[0].getElementsByTagName(
                    'li');
                for (let x = 0, j = answersElements.length; x < j; x++) {
                    let optionE = answersElements[x],
                        optionTextE = trim(optionE.innerHTML.replace(/(^\s*)|(\s*$)/g, "")),
                        optionText = optionTextE.slice(1).replace(/(^\s*)|(\s*$)/g, ""),
                        optionValue = optionTextE.slice(0, 1),
                        optionId = optionE.getAttribute('id-param');
                    if (optionText == '') {
                        break;
                    }
                    optionList[optionText] = {
                        'id': optionId,
                        'value': optionValue
                    }
                    optionList.length++;
                }
                if (answersElements.length != optionList.length) {
                    continue;
                }
            }
            questionList.push({
                'question': question,
                'type': type,
                'questionid': questionId,
                'options': optionList
            });
        }
        var qu = null,
            nowTime = -4000,
            busyThread = questionList.length,
            ctOnload = function (res, quu) {
                busyThread -= 1;
                var ctResult = {
                    'code': -1,
                    'finalUrl': '',
                    'data': '未找到答案'
                };
                if (res) {
                    try {
                        var responseText = res.responseText,
                            ctResult = JSON.parse(responseText);
                    } catch (e) {
                        console.log(e);
                        if (res.finalUrl.includes('getAnswer.php')) {
                            _w.top.unrivalWorkInfo = '查题错误,服务器连接失败';
                            return;
                        }
                    }
                }
                try {
                    let choiceEs = _d.getElementsByTagName('li');
                    if (ctResult['code'] == -1 ) {
                        try {
                            if (ctResult['msg'] !== undefined) {
                                _w.top.unrivalWorkInfo = ctResult['msg'] ;
                            }
                        } catch (e) { }
                        busyThread += 1;
                        GM_xmlhttpRequest({
                            method: "GET",
                            headers: {
                                'Authorization': token,
                            },
                            timeout: 6000,
                            url: host + 'chaoXing/v3/getAnswer.php?tm=' + encodeURIComponent(quu['question']
                                .replace(/(^\s*)|(\s*$)/g, '')) + '&type=' + {
                                    '单选题': '0',
                                    '多选题': '1',
                                    '判断题': '3'
                                }[quu['type']] + '&wid=' + wid + '&courseid=' + courseId,
                            onload: function (res) {
                                ctOnload(res, quu);
                            },
                            onerror: function (err) {
                                _w.top.unrivalWorkInfo = '查题错误,服务器连接失败';
                                console.log(err);
                                busyThread -= 1;
                            },
                            ontimeout: function (err) {
                                _w.top.unrivalWorkInfo = '查题错误,服务器连接失败';
                                console.log(err);
                                busyThread -= 1;
                            }
                        });
                        return;
                    }
                    try {
                        var result = ctResult['data'];
                    } catch (e) {
                        _w.top.unrivalWorkInfo = '答案解析失败';
                        return;
                    }
                    _w.top.unrivalWorkInfo = '题目:' + quu['question'] + ':' + result;
                    switch (quu['type']) {
                        case '判断题':
                            (function () {
                                let answer = 'abaabaaba';
                                if ('正确是对√Tri'.indexOf(result) >= 0) {
                                    answer = 'true';
                                } else if ('错误否错×Fwr'.indexOf(result) >= 0) {
                                    answer = 'false';
                                }
                                for (let u = 0, k = choiceEs.length; u < k; u++) {
                                    if (choiceEs[u].getAttribute('val-param') ==
                                        answer && choiceEs[u].getAttribute(
                                            'id-param') == quu['questionid'].replace(
                                                'answer', '')) {
                                        choiceEs[u].click();
                                        questionNum -= 1;
                                        return;
                                    }
                                }
                                if (randomDo == 1 && accuracy < 100) {
                                    _w.top.unrivalWorkInfo = quu['question'] +
                                        ':未找到正确答案,自动选【错】';
                                    for (let u = 0, k = choiceEs.length; u <
                                        k; u++) {
                                        if (choiceEs[u].getElementsByTagName('em')
                                            .length < 1) {
                                            continue;
                                        }
                                        if (choiceEs[u].getAttribute('val-param') ==
                                            'false' && choiceEs[u].getAttribute(
                                                'id-param') == quu['questionid']
                                                    .replace('answer', '')) {
                                            choiceEs[u].click();
                                            return;
                                        }
                                    }
                                }
                            })();
                            break;
                        case '单选题':
                            (function () {
                                let answerData = result;
                                for (let option in quu['options']) {
                                    if (trim(option).replace(/\s/ig, '') == trim(answerData).replace(/\s/ig, '') || trim(
                                        option).replace(/\s/ig, '').includes(trim(answerData).replace(/\s/ig, '')) ||
                                        trim(answerData).replace(/\s/ig, '').includes(trim(option).replace(/\s/ig, ''))) {
                                        for (let y = 0, j = choiceEs.length; y <
                                            j; y++) {
                                            if (choiceEs[y].getElementsByTagName(
                                                'em').length < 1) {
                                                continue;
                                            }
                                            if (choiceEs[y].getElementsByTagName(
                                                'em')[0].getAttribute(
                                                    'id-param') == quu['options'][
                                                    option
                                                    ]['value'] && choiceEs[y]
                                                        .getAttribute('id-param') == quu[
                                                            'questionid'].replace('answer',
                                                                '')) {
                                                if (!choiceEs[y].getAttribute(
                                                    'class').includes('cur')) {
                                                    choiceEs[y].click();
                                                }
                                                questionNum -= 1;
                                                return;
                                            }
                                        }
                                    }
                                }
                                if (randomDo == 1 && accuracy < 100) {
                                    _w.top.unrivalWorkInfo = quu['question'] +
                                        ':未找到正确答案,自动选【B】';
                                    for (let y = 0, j = choiceEs.length; y <
                                        j; y++) {
                                        if (choiceEs[y].getElementsByTagName('em')
                                            .length < 1) {
                                            continue;
                                        }
                                        if (choiceEs[y].getElementsByTagName('em')[
                                            0].getAttribute('id-param') ==
                                            'B' && choiceEs[y].getAttribute(
                                                'id-param') == quu['questionid']
                                                    .replace('answer', '')) {
                                            if (!choiceEs[y].getAttribute('class')
                                                .includes('cur')) {
                                                choiceEs[y].click();
                                            }
                                            return;
                                        }
                                    }
                                }
                            })();
                            break;
                        case '多选题':
                            (function () {
                                let answerData = trim(result).replace(/\s/ig, ''),
                                    hasAnswer = false;
                                for (let option in quu['options']) {
                                    if (answerData.includes(trim(option).replace(/\s/ig, ''))) {
                                        for (let y = 0, j = choiceEs.length; y <
                                            j; y++) {
                                            if (choiceEs[y].getElementsByTagName(
                                                'em').length < 1) {
                                                continue;
                                            }
                                            if (choiceEs[y].getElementsByTagName(
                                                'em')[0].getAttribute(
                                                    'id-param') == quu['options'][
                                                    option
                                                    ]['value'] && choiceEs[y]
                                                        .getAttribute('id-param') == quu[
                                                            'questionid'].replace('answer',
                                                                '')) {
                                                if (!choiceEs[y].getAttribute(
                                                    'class').includes('cur')) {
                                                    choiceEs[y].click();
                                                }
                                                hasAnswer = true;
                                                break;
                                            }
                                        }
                                    }
                                }
                                if (hasAnswer) {
                                    questionNum -= 1;
                                } else if (randomDo == 1 && accuracy < 100) {
                                    _w.top.unrivalWorkInfo = quu['question'] +
                                        ':未找到正确答案,自动全选';
                                    for (let y = 0, j = choiceEs.length; y <
                                        j; y++) {
                                        if (choiceEs[y].getElementsByTagName('em')
                                            .length < 1) {
                                            continue;
                                        }
                                        if (choiceEs[y].getAttribute('id-param') ==
                                            quu['questionid'].replace('answer', '')
                                        ) {
                                            if (!choiceEs[y].getAttribute('class')
                                                .includes('cur')) {
                                                choiceEs[y].click();
                                            }
                                        }
                                    }
                                }
                            })();
                            break;
                    }
                } catch (e) {
                    console.log(e);
                }
            }
        for (let i = 0, l = questionList.length; i < l; i++) {
            nowTime += parseInt(Math.random() * 2000 + 2500, 10);
            setTimeout(function () {
                qu = questionList[i];
                let param = 'question=' + encodeURIComponent(
                    qu['question']);
                if (ctUrl.includes('icodef')) {
                    param += '&type=' + {
                        '单选题': '0',
                        '多选题': '1',
                        '判断题': '3'
                    }[qu['type']] + '&id=' + wid;
                }
                GM_xmlhttpRequest({
                    method: "POST",
                    headers: {
                        'Content-type': 'application/x-www-form-urlencoded',
                        'Authorization': token,
                    },
                    url: ctUrl,
                    timeout: 2000,
                    data: param,
                    onload: function (res) {
                        ctOnload(res, qu);
                    },
                    onerror: function () {
                        ctOnload(false, qu);
                    },
                    ontimeout: function () {
                        ctOnload(false, qu);
                    }
                });
            }, nowTime);
        }
        var workInterval = setInterval(function () {
            if (busyThread != 0) {
                return;
            }
            clearInterval(workInterval);
            if (Math.floor((totalQuestionNum - questionNum) / totalQuestionNum) * 100 >= accuracy && _w.top
                .unrivalAutoSubmit == '1') {
                _w.top.unrivalDoneWorkId = getQueryVariable('workId');
                _w.top.unrivalWorkInfo = '正确率符合标准,已提交答案';
                setTimeout(function () {
                    submitCheckTimes();
                    escapeBlank()
                    submitAction()
                    //    setTimeout(function() {
                    //          document.querySelector(".cx_alert-blue").click()
                    //    }, parseInt(1000));
                }, parseInt(Math.random() * 2000 + 3000, 10));

            } else if (_w.top.unrivalAutoSave == 1) {
                _w.top.unrivalWorkInfo = '正确率不符合标准或未设置自动提交,已自动保存答案';
                if (Math.floor((totalQuestionNum - questionNum) / totalQuestionNum) >= 0) {
                    setTimeout(function () {
                        _w.top.unrivalDoneWorkId = getQueryVariable('workId');
                        _w.noSubmit();
                    }, 2000);
                }
            } else {
                _w.top.unrivalWorkInfo = '用户设置为不自动保存答案,请手动提交或保存作业';
            }
        }, 1000);
    } else if (_l.href.includes('work/phone/selectWorkQuestionYiPiYue')) {
        _w.top.unrivalWorkDone = true;
        _w.top.unrivalDoneWorkId = getQueryVariable('workId');
    } else if (_l.href.includes('stat2-ans.chaoxing.com/task/s/index')) {
        if (_w.top == _w) {
            return;
        }
        _d.getElementsByClassName('page-container studentStatistic')[0].setAttribute('class', 'studentStatistic');
        _d.getElementsByClassName('page-item item-task-list minHeight390')[0].remove();
        _d.getElementsByClassName('subNav clearfix')[0].remove();
        setInterval(function () {
            _l.reload();
        }, 90000);
    } else if (_l.href.includes('passport2.') && _l.href.includes('login?refer=http') && autoLogin == 1) {
        if (!(/^1[3456789]\d{9}$/.test(phoneNumber))) {
            alert('自动登录的手机号填写错误,无法登陆')
            return;
        }
        if (password == '') {
            alert('未填写登录密码,无法登陆')
            return;
        }
        GM_xmlhttpRequest({
            method: "get",
            url: 'https://passport2-api.chaoxing.com/v11/loginregister?cx_xxt_passport=json&uname=' +
                phoneNumber + '&code=' + encodeURIComponent(password),
            onload: function (res) {
                try {
                    let ispass = JSON.parse(res.responseText);
                    if (ispass['status']) {
                        _l.href = decodeURIComponent(getQueryVariable('refer'));
                    } else {
                        alert(ispass['mes']);
                    }
                } catch (err) {
                    console.log(res.responseText);
                    alert('登陆失败');
                }
            },
            onerror: function (err) {
                alert('登陆错误');
            }
        });
    } else if (_l.href.includes('unrivalxxtbackground')) {
        _d.getElementsByTagName("html")[0].innerHTML = `
    <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>学习通挂机小助手</title>
        <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
        <link href="https://z.chaoxing.com/yanshi/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="row" style="margin: 10px;">
            <div class="col-md-6 col-md-offset-3">
                <div class="header clearfix">
                    <h3 class="text-muted" style="margin-top: 20px;margin-bottom: 0;float: left;">学习通挂机小助手&ensp;</h3>
                </div>
                <hr style="margin-top: 10px;margin-bottom: 20px;">
                <div class="panel panel-info">
                    <div class="panel-heading">任务列表</div>
                    <div class="panel-body" id='joblist'>
                    </div>
                </div>
                <div class="panel panel-info">
                    <div class="panel-heading">运行日志</div>
                    <div class="panel-body">
                        <div id="result" style="overflow:auto;line-height: 30px;">
                            <div id="log">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>
    `;
        var logs = {
            "logArry": [],
            "addLog": function (str, color = "black") {
                if (this.logArry.length >= 50) {
                    this.logArry.splice(0, 1);
                }
                var nowTime = new Date(),
                    nowHour = (Array(2).join(0) + nowTime.getHours()).slice(-2),
                    nowMin = (Array(2).join(0) + nowTime.getMinutes()).slice(-2),
                    nowSec = (Array(2).join(0) + nowTime.getSeconds()).slice(-2),
                    logElement = _d.getElementById('log'),
                    logStr = "";
                this.logArry.push("<span style='color: " + color + "'>[" + nowHour + ":" + nowMin + ":" +
                    nowSec + "] " + str + "</span>");
                for (let logI = 0, logLen = this.logArry.length; logI < logLen; logI++) {
                    logStr += this.logArry[logI] + "<br>";
                }
                _d.getElementById('log').innerHTML = logStr;
                logElement.scrollTop = logElement.scrollHeight;
            }
        };
        logs.addLog('此页面不必保持在最前端,后台会自动进行任务', 'green');
        setInterval(function () {
            logs.addLog('此页面不必保持在最前端,后台会自动进行任务', 'green');
            logs.addLog('如想禁用后台刷视频功能,请关闭脚本并重启浏览器', 'blue');
        }, 120000)
        GM_addValueChangeListener('unrivalxxtbackgroundinfo', function (name, old_value, new_value, remote) {
            if (old_value != new_value) {
                logs.addLog(new_value);
            }
        });
        setInterval(function () {
            if (Math.round(new Date() / 1000) - parseInt(GM_getValue('unrivalBackgroundVideoEnable', '6')) >
                15) {
                logs.addLog('超星挂机小助手可能运行异常,如页面无反应,请尝试重启脚本猫或重启浏览器(脚本猫0.9.0版本有此问题)');
            }
        }, 10000);
        var loopShow = () => {
            let jobList = GM_getValue('unrivalBackgroundList', '1');
            if (jobList == '1') {
                _d.getElementById('joblist').innerHTML = '请将“超星挂机小助手”升级到最新版并重启浏览器';
            } else {
                try {
                    let jobHtml = '';
                    for (let i = 0, l = jobList.length; i < l; i++) {
                        let status = '';
                        if (jobList[i]['done']) {
                            status = '已完成';
                        } else if (parseInt(jobList[i]['playTime']) > 0) {
                            status = '进行中';
                        } else {
                            status = '等待中';
                        }
                        if (jobList[i]['review']) {
                            status += ':复习模式';
                        }
                        jobHtml += `
                            <div class="panel panel-default">
                                <div class="panel-body">
                                    ` + '[' + status + ']' + jobList[i]['name'] + `
                                </div>
                            </div>`
                    }
                    _d.getElementById('joblist').innerHTML = jobHtml;
                } catch (e) {
                    _d.getElementById('joblist').innerHTML = '请将“超星挂机小助手”升级到最新版并重启浏览器!';
                }
            }
        }
        loopShow();
        setInterval(loopShow, 10000);
    }
})();

JAVA-ArrayList

在不知道数组大小的情况的,可以使用ArrayList动态数组

    
    import java.util.ArrayList;
    //创建角色结构
    class Role{
        
        private String name;
        private int  type;


        public Role(int  type,String name){

this.type=type;
this.name=name;

        }

    public String getName(){
    
    
    return  name;
}
    



    public int getType(){
    
    
    return  type;
}
    
    }
    
    
    public class RoleMAIN {
        public static void main(String[] args) throws Exception {
//创建列表ArrayList<结构类> 名字;
    ArrayList<Role> arrrole;
    //初始化为空;
    arrrole=new ArrayList<Role>();

                int  type[]  =  {  9,8,7 };
                String  name[]  =  {  "a",  "b",  "c"  };

//增加方法 对象.add(new 结构类())
                for(int a=0;a<type.length;a++){

arrrole.add(new Role(type[a],name[a]));

                }


//获取的方法  对象.get(第几个).对应方法;

        for(int a=0;a<type.length;a++){

System.out.println(arrrole.get(a).getType()+" type");
System.out.println(arrrole.get(a).getName()+" name");


                }
/*
9 type
a name
8 type
b name
7 type
c name
*/



//设置方法    对象.set(第几个,结构类)
    
arrrole.set(0,new Role(888, "k"));

    for(int a=0;a<type.length;a++){

System.out.println(arrrole.get(a).getType()+" type");
System.out.println(arrrole.get(a).getName()+" name");

/*
888 type
k name
8 type
b name
7 type
c name

*/
                }

//






        }
    }
">