// ==UserScript== // @name 学习通纯免费刷课答题(D-Whaler) // @namespace xinghong // @version 0.5.1.0.1 // @author X.H // @description D-Whaler:超星学习通学习辅助助手。AI 自动答题(DeepSeek)、视频倍速与卡顿自动重播、文档图书自动完成、章节作业自动提交、PC端0学分考试、API 用量与花费可视化,刷完一门课程的token花销不到0.8元。(好用的话,还请帮忙推广,谢谢!!!) // @tag 学习通刷课 免费答题 视频倍速 全自动托管 后台挂机 PC0学分考试 好用推广 分享同学 // @license MIT // @homepageURL https://github.com/Dream-Architect1026/D-Whaler // @supportURL https://github.com/Dream-Architect1026/D-Whaler/issues // @icon data:image/png;base64,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 // @match *://*.chaoxing.com/* // @match *://*.nbdlib.cn/* // @match *://*.hnsyu.net/* // @match *://*.gdhkmooc.com/* // @require https://lib.baomitu.com/vue/3.4.31/vue.global.prod.js // @require https://lib.baomitu.com/vue-demi/0.14.7/index.iife.js // @require data:application/javascript,window.Vue%3DVue%3B // @require https://lib.baomitu.com/element-plus/2.7.2/index.full.min.js // @require https://lib.baomitu.com/pinia/2.3.1/pinia.iife.min.js // @require https://lib.baomitu.com/rxjs/7.8.2/rxjs.umd.min.js // @require https://lib.baomitu.com/blueimp-md5/2.19.0/js/md5.min.js // @resource ElementPlus https://lib.baomitu.com/element-plus/2.7.2/index.css // @resource ElementPlusStyle https://lib.baomitu.com/element-plus/2.8.2/index.min.css // @resource ttf https://www.forestpolice.org/ttf/2.0/table.json // @connect api.deepseek.com // @connect localhost // @connect 127.0.0.1 // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_getValue // @grant GM_info // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-start // ==/UserScript== // ── 自诊断:把运行期错误直接显示在页面上,避免"面板不出现却看不到原因" ── (() => { // 无害噪音:ResizeObserver 通知循环、跨域 "Script error."、非 Error 的 Promise 拒绝 const BENIGN = /ResizeObserver loop|Script error\.?\s*$|Non-Error promise rejection|^undefined$|^null$/; const isBenign = (m) => BENIGN.test(String(m || "").trim()); const box = (title, detail) => { try { const el = document.createElement("div"); el.style.cssText = "position:fixed;left:8px;bottom:8px;z-index:2147483647;max-width:82vw;" + "background:#1b0f10;color:#ff8b8b;border:1px solid #ff5a5a;border-radius:8px;" + "padding:8px 11px;font:12px/1.6 Consolas,Monaco,monospace;white-space:pre-wrap;" + "box-shadow:0 6px 24px rgba(0,0,0,.5);max-height:40vh;overflow:auto"; el.textContent = "【" + title + "】\n" + String(detail).slice(0, 900) + "\n\n脚本出现异常,请使用 Edge 浏览器。本脚本只针对 Edge 进行适配。"; document.documentElement.appendChild(el); } catch (e) { /* 忽略 */ } }; window.addEventListener("error", (e) => { if (isBenign(e.message)) return; // 忽略 ResizeObserver 等无害噪音 if (String(e.message || "").startsWith("ResizeObserver")) return; const where = e.filename ? " @ " + String(e.filename).split("/").pop() + ":" + e.lineno : ""; const st = e.error && e.error.stack ? "\n" + String(e.error.stack).split("\n").slice(0, 7).join("\n") : ""; box("脚本运行错误", (e.message || "未知错误") + where + st); }); window.addEventListener("unhandledrejection", (e) => { const r = e.reason; const msg = r && r.message ? r.message : String(r); if (isBenign(msg)) return; // 忽略无害噪音 const st = r && r.stack ? "\n" + String(r.stack).split("\n").slice(0, 7).join("\n") : ""; box("Promise 未捕获异常", msg + st); }); const ce = console.error; console.error = function (...a) { try { box("console.error", a.map(String).join(" ").slice(0, 600)); } catch (e) { /* */ } ce.apply(console, a); }; })(); (function (vue, pinia, rxjs, md5, ElementPlus) { 'use strict'; const DONATE_KEY = "WjyR5yvUaK8="; const DONATE_SIG = "65b70dd2"; const DONATE_SALT = "HXWHALE-DONATE-V1"; const DONATE_B64 = [ "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", "aw==" ]; const decryptDonateImage = () => { try { const key = Uint8Array.from(atob(DONATE_KEY), (ch) => ch.charCodeAt(0)); const bytes = Uint8Array.from(atob(DONATE_B64.join("")), (ch) => ch.charCodeAt(0)); for (let i = 0; i < bytes.length; i++) bytes[i] ^= key[i % key.length]; const cut = bytes.length - DONATE_SALT.length; const raw = bytes.subarray(0, cut); let tail = ""; for (let i = cut; i < bytes.length; i++) tail += String.fromCharCode(bytes[i]); if (tail !== DONATE_SALT) return ""; let digest = 7; for (let i = 0; i < raw.length; i++) { digest = ((digest * 33 + raw[i]) >>> 0) + (i % 7); digest = digest >>> 0; } if (digest.toString(16) !== DONATE_SIG) return ""; let binary = ""; const step = 8192; for (let i = 0; i < raw.length; i += step) { binary += String.fromCharCode.apply(null, raw.subarray(i, i + step)); } return "data:image/jpeg;base64," + btoa(binary); } catch (err) { return ""; } }; 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; }; /*! Element Plus Icons Vue v2.3.2 */ var _sfc_main118 = /* @__PURE__ */ vue.defineComponent({ name: "FullScreen", __name: "full-screen", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z" }) ])); } }), full_screen_default = _sfc_main118; var _sfc_main169 = /* @__PURE__ */ vue.defineComponent({ name: "Minus", __name: "minus", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64" }) ])); } }), minus_default = _sfc_main169; var _sfc_main288 = /* @__PURE__ */ vue.defineComponent({ name: "Warning", __name: "warning", setup(__props) { return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, [ vue.createElementVNode("path", { fill: "currentColor", d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32" }) ])); } }), warning_default = _sfc_main288; var _GM_getResourceText = /* @__PURE__ */ (() => typeof GM_getResourceText != "undefined" ? GM_getResourceText : void 0)(); var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)(); var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)(); const getScriptInfo = () => { return { name: _GM_info.script.name, author: _GM_info.script.author, namespace: _GM_info.script.namespace, version: _GM_info.script.version, description: _GM_info.script.description }; }; const DEEPSEEK_API_URL = "https://api.deepseek.com/chat/completions"; const isObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value); const apiError = (message, status) => ({ success: false, data: null, error: { code: status && status >= 400 ? `HTTP_${status}` : "CLIENT_ERROR", message, details: null }, meta: null }); const getAnswerValues = (response, question) => { var _a; if (!response.success || !response.data || !Array.isArray(response.data.items)) return null; const items = response.data.items; const stem = ((_a = question.searchText) == null ? void 0 : _a.stem) ?? question.title; const matches = items.length === 1 ? items : items.filter((item) => item.stem === stem); const answer = matches.length === 1 ? matches[0].answer : null; if (!answer || !Array.isArray(answer.values) || answer.values.length === 0) return null; if (answer.kind === "none" || answer.kind === "missing") return null; return answer.values; }; function extractRawTextFromElement(element) { if (!element) return ""; const visit = (node) => { if (node.nodeType === 3 || node.nodeType === 4) return node.nodeValue || ""; if (node.nodeType === 11) { return Array.from(node.childNodes).map(visit).join(""); } if (node.nodeType !== 1) return ""; const current = node; if (current.tagName.toLowerCase() === "img") { const src = current.getAttribute("src"); return src == null ? "" : ``; } if (current.tagName.toLowerCase() === "br") return "\n"; return Array.from(current.childNodes).map(visit).join(""); }; return visit(element); } function extractRawTextFromHtml(html, ownerDocument) { if (html == null || html === "") return ""; const documentRef = ownerDocument || (typeof document !== "undefined" ? document : null); if (!documentRef) return html; const container = documentRef.createElement("div"); container.innerHTML = html; return extractRawTextFromElement(container); } function stripOptionLabel(text) { if (text == null) return ""; return text.replace(/^\s*[A-Za-z]\s*[..、::\]\)]/, ""); } function stripQuestionTypeLabel(text) { if (text == null) return ""; return text.replace(/^\s*[【\[]\s*(?:(?:单选|多选|单项选择|多项选择|选择|判断|填空|简答|问答|论述|计算|分析|阅读理解|完形填空|排序|连线|其它|其他)题|名词解释)\s*[】\]]/u, ""); } function extractJudgementToken(element, text = "") { const values = [text]; if (element) { const collect = (candidate) => values.push( candidate.getAttribute("aria-label") || "", candidate.getAttribute("data") || "", candidate.getAttribute("data-value") || "", candidate.getAttribute("value") || "", candidate.getAttribute("title") || "", candidate.textContent || "" ); collect(element); if (typeof element.querySelectorAll === "function") { element.querySelectorAll("[aria-label],[data],[data-value],[value],[title]").forEach(collect); } } const normalize2 = (value) => value.trim().toLowerCase().replace(/^[a-z0-9]+[..、::\]\)]\s*/i, "").replace(/[\s..、::()[\]{}]/g, ""); for (const value of values) { const normalized = normalize2(value); if (/^(?:正确|是|对|√|t|true|right)$/.test(normalized) || /^(?:正确|是|对)选择$/.test(normalized)) return "对"; if (/^(?:错误|否|错|×|x|f|false|wrong)$/.test(normalized) || /^(?:错误|否|错)选择$/.test(normalized)) return "错"; } return ""; } const VIDEO_QUIZ_INPUTS = '.ans-videoquiz-opt input[type="radio"], .ans-videoquiz-opt input[type="checkbox"], input[name="ans-videoquiz-opt"][type="radio"], input[name="ans-videoquiz-opt"][type="checkbox"]'; const parseVideoQuiz = (root, inputs) => { const titles = root.querySelectorAll(".tkItem_title, .ans-videoquiz-title"); if (titles.length !== 1 || !inputs.length || new Set(inputs.map((input) => `${input.type}:${input.name}`)).size !== 1) return null; const stem = stripQuestionTypeLabel(extractRawTextFromElement(titles[0])); const rows = inputs.map((input) => input.closest("label, .ans-videoquiz-opt") || input); const texts = rows.map((row, index) => { const raw = extractRawTextFromElement(row); const withoutLabel = stripOptionLabel(raw); return raw === withoutLabel ? raw.replace(new RegExp(`^\\s*${String.fromCharCode(65 + index)}\\s+(?=\\S)`), "") : withoutLabel; }); if (!stem.trim() || texts.some((text) => !text.trim())) return null; const judgements = texts.map((text) => extractJudgementToken(null, text)); const isJudgement = inputs[0].type === "radio" && texts.length === 2 && judgements.includes("对") && judgements.includes("错"); const type = inputs[0].type === "checkbox" ? "1" : isJudgement ? "3" : "0"; return { inputs, texts, judgements, question: { element: root, type, title: stem, options: Object.fromEntries(texts.map((text, index) => [text, rows[index]])), optionsText: texts, searchText: { stem, options: isJudgement ? judgements : texts }, answer: [], answerStatus: "searching", workType: "video", refer: root.ownerDocument.URL } }; }; const normalize = (text, document2) => stripOptionLabel(extractRawTextFromHtml(text, document2)).replace(//g, "$1").replace(/[\s\u00a0]+/g, "").toLowerCase(); const similarity = (left, right) => { if (!left || !right) return 0; if (left === right) return 100; const a = Array.from(left); const b = Array.from(right); const distances = Array.from({ length: a.length + 1 }, (_, i) => i); b.forEach((character, row) => { let diagonal = distances[0]; distances[0] = row + 1; a.forEach((other, column) => { const above = distances[column + 1]; distances[column + 1] = character === other ? diagonal : Math.min(diagonal, above, distances[column]) + 1; diagonal = above; }); }); return Math.round((1 - distances[a.length] / Math.max(a.length, b.length)) * 100); }; const matchVideoQuizAnswers = (parsed, answers, threshold = 85) => { if (!answers.length || parsed.question.type !== "1" && answers.length !== 1) return null; const document2 = parsed.question.element.ownerDocument; const texts = parsed.texts.map((text) => normalize(text, document2)); const minimum = Number.isFinite(threshold) ? Math.max(0, Math.min(100, threshold)) : 85; const selected = /* @__PURE__ */ new Set(); for (const answer of answers) { if (!["string", "number", "boolean"].includes(typeof answer)) return null; const raw = String(answer).trim(); const normalized = normalize(raw, document2); if (!normalized) return null; let matches; if (parsed.question.type === "3") { const token = extractJudgementToken(null, raw); matches = token ? parsed.judgements.flatMap((value, index) => value === token ? [index] : []) : []; } else { matches = texts.flatMap((text, index) => text === normalized ? [index] : []); } const letter = raw.match(/^([A-Z])[..、::\]\)]?$/i); if (letter) { const index = letter[1].toUpperCase().charCodeAt(0) - 65; if (index < parsed.inputs.length) matches = [.../* @__PURE__ */ new Set([...matches, index])]; } if (!matches.length && !letter && parsed.question.type !== "3") { const scores = texts.map((text) => similarity(text, normalized)); const best = Math.max(...scores); if (best >= minimum && best > 0) matches = scores.flatMap((score, index) => score === best ? [index] : []); } if (matches.length !== 1) return null; selected.add(parsed.inputs[matches[0]]); } return selected.size ? selected : null; }; const applyVideoQuizAnswers = (parsed, selected, isCurrent) => { if (parsed.inputs.some((input) => input.disabled && input.checked !== selected.has(input))) return false; for (const input of parsed.inputs) { if (!isCurrent() || !input.isConnected) return false; const wanted = selected.has(input); if (input.checked === wanted) continue; if (input.type === "checkbox" || wanted) input.click(); } return isCurrent() && parsed.inputs.every((input) => input.checked === selected.has(input)); }; const HX_LOGO_SRC = "data:image/png;base64,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"; const VIDEO_QUIZ_SETTING = "弹题作答"; const OPTION_INPUTS = VIDEO_QUIZ_INPUTS; const visible = (element) => { if (!element.isConnected || !element.getClientRects().length) return false; const view = element.ownerDocument.defaultView; for (let current = element; current; current = current.parentElement) { const style2 = view == null ? void 0 : view.getComputedStyle(current); if (current.hidden || current.getAttribute("aria-hidden") === "true" || (style2 == null ? void 0 : style2.display) === "none" || (style2 == null ? void 0 : style2.visibility) === "hidden" || (style2 == null ? void 0 : style2.visibility) === "collapse") return false; } return true; }; const usable = (element) => !!element && visible(element) && !element.matches(':disabled, [disabled], [aria-disabled="true"], .disabled'); const findQuiz = (document2) => Array.from(document2.querySelectorAll(".ans-videoquiz")).find(visible); const questionKey = (root) => JSON.stringify([ root.getAttribute("data-question-id"), Array.from(root.querySelectorAll(".tkItem_title, .ans-videoquiz-title, .ans-videoquiz-opt")).map((element) => [ element.textContent, Array.from(element.querySelectorAll("img")).map((image) => image.getAttribute("src")) ]), Array.from(root.querySelectorAll(OPTION_INPUTS)).map((input) => [input.name, input.type, input.value]) ]); const watchVideoQuiz = (options) => { const { document: document2, signal } = options; let state; let disposed = false; let timer2; let poll; let observer; const cancelPending = () => { if (timer2 !== void 0) clearTimeout(timer2); timer2 = void 0; }; const cancelSearch = () => { var _a; const request = state == null ? void 0 : state.request; if (request && ((_a = state == null ? void 0 : state.question) == null ? void 0 : _a.answerStatus) === "searching" && !signal.aborted && options.isCurrent()) { state.question.answerStatus = "error"; state.question.answer = ["题目已关闭或查询已取消"]; } if (state) state.request = void 0; request == null ? void 0 : request.abort(); }; const dispose = () => { if (disposed) return; disposed = true; cancelPending(); cancelSearch(); if (poll !== void 0) clearInterval(poll); observer == null ? void 0 : observer.disconnect(); document2.removeEventListener("click", trackManualClick, true); signal.removeEventListener("abort", dispose); state = void 0; }; const current = () => !disposed && !signal.aborted && options.isCurrent(); const hasActiveQuiz = () => current() && !!findQuiz(document2); const actionFor = (quiz) => { if (quiz.blocked || quiz.request) return; if (quiz.submittedAt === null && usable(quiz.root.querySelector("#videoquiz-submit"))) return "submit"; if (!quiz.continued && usable(quiz.root.querySelector("#videoquiz-continue"))) return "continue"; }; const scan = () => { if (!current()) return dispose(); const root = findQuiz(document2); if (!root) { const released = !!state; cancelSearch(); state = void 0; cancelPending(); if (released) options.onRelease(); return; } const key = questionKey(root); if (!state || state.root !== root || state.key !== key) { cancelPending(); cancelSearch(); state = { root, key, submittedAt: null, continued: false, blocked: false, warned: false }; options.log("检测到视频弹题,正在使用 AI 搜索答案。", "primary"); } if (!options.isEnabled()) { cancelPending(); if (state.request && state.question) { state.question.answerStatus = "error"; state.question.answer = ["已关闭视频弹题自动处理"]; } return cancelSearch(); } const quiz = state; const action = actionFor(quiz); if (!action) { if (quiz.submittedAt !== null && Date.now() - quiz.submittedAt >= 15e3 && !quiz.warned) { quiz.warned = true; options.log("视频弹题仍未关闭,请检查提交结果并手动处理;不会重复提交。", "warning"); } return cancelPending(); } if (timer2 !== void 0) return; const delay = options.delayMs(); timer2 = setTimeout(async () => { var _a, _b, _c, _d, _e; timer2 = void 0; if (!current()) return dispose(); if (!options.isEnabled() || state !== quiz || findQuiz(document2) !== root || questionKey(root) !== key || actionFor(quiz) !== action) return scan(); let activeRequest; let awaitingAnswer = false; try { if (action === "submit") { const inputs = Array.from(root.querySelectorAll(OPTION_INPUTS)).filter((input) => visible(input.closest(".ans-videoquiz-opt, label") || input)); const editable = root.querySelectorAll('textarea, select, input[type="text"], input:not([type]), [contenteditable="true"]'); const parsed = Array.from(editable).some(visible) ? null : parseVideoQuiz(root, inputs); if (!parsed || inputs.every((input) => input.disabled)) { quiz.blocked = true; options.log("视频弹题题干或选项无法识别,请手动作答后继续播放。", "warning"); return; } const request = new AbortController(); activeRequest = request; quiz.request = request; const stillCurrent = () => current() && options.isEnabled() && state === quiz && quiz.request === request && !request.signal.aborted && quiz.submittedAt === null && findQuiz(document2) === root && questionKey(root) === key; const question = quiz.question = ((_a = options.publishQuestion) == null ? void 0 : _a.call(options, parsed.question)) ?? parsed.question; options.log("正在搜索视频弹题答案…", "primary"); awaitingAnswer = true; const response = await options.search(question, { signal: request.signal, isCurrent: stillCurrent }); awaitingAnswer = false; if (!stillCurrent()) return scan(); const answers = getAnswerValues(response, question); const selected = (answers == null ? void 0 : answers.length) ? matchVideoQuizAnswers(parsed, answers, (_b = options.similarityThreshold) == null ? void 0 : _b.call(options)) : null; if (!selected) { quiz.request = void 0; quiz.blocked = true; question.answerStatus = "error"; question.answer = [(answers == null ? void 0 : answers.length) ? "AI 答案无法完整且唯一地匹配视频选项,请手动作答" : ((_c = response.error) == null ? void 0 : _c.message) || "AI 未返回可用答案,请手动作答"]; options.log(`视频弹题搜题未完成,点击查看原因`, "warning"); return; } quiz.applying = true; const applied = applyVideoQuizAnswers(parsed, selected, stillCurrent); quiz.applying = false; if (!stillCurrent()) return scan(); if (!applied) { quiz.request = void 0; quiz.blocked = true; question.answerStatus = "error"; question.answer = ["AI 答案已找到,但页面选项无法完整选择,请手动作答"]; options.log("视频弹题选项未完整填写,已停止自动提交。", "warning"); return; } question.answer = answers; question.answerStatus = "success"; quiz.request = void 0; const submit = root.querySelector("#videoquiz-submit"); if (!current() || !options.isEnabled() || findQuiz(document2) !== root || questionKey(root) !== key || !usable(submit)) { quiz.blocked = true; options.log("已填写视频弹题答案,但提交按钮不可用,请手动确认。", "warning"); return scan(); } quiz.submittedAt = Date.now(); submit.click(); options.log("已按 AI 答案提交视频弹题,等待页面反馈。", "primary"); } else { quiz.continued = true; (_e = root.querySelector("#videoquiz-continue")) == null ? void 0 : _e.click(); } } catch { if (!current() || state !== quiz || !options.isEnabled() || findQuiz(document2) !== root || questionKey(root) !== key || awaitingAnswer && quiz.request !== activeRequest) return scan(); quiz.request = void 0; quiz.applying = false; quiz.blocked = true; if (quiz.question) { quiz.question.answerStatus = "error"; quiz.question.answer = ["视频弹题搜题或填写失败,请手动处理"]; } options.log("视频弹题自动处理失败,请在播放器内手动完成。", "danger"); } scan(); }, Number.isFinite(delay) ? Math.max(1e3, delay) : 3e3); }; const trackManualClick = (event) => { var _a, _b; if (!current() || !state) return; const element = event.target; if (state.request && !state.applying && ((_a = element == null ? void 0 : element.closest) == null ? void 0 : _a.call(element, '.ans-videoquiz-opt, input[name="ans-videoquiz-opt"]')) && state.root.contains(element)) { if (state.question) { state.question.answerStatus = "error"; state.question.answer = ["已切换为手动作答"]; } state.blocked = true; cancelSearch(); } const button = (_b = element == null ? void 0 : element.closest) == null ? void 0 : _b.call(element, "#videoquiz-submit, #videoquiz-continue"); if (!button || !state.root.contains(button)) return; if (button.id === "videoquiz-submit") state.submittedAt = Date.now(); else state.continued = true; if (state.request && state.question) { state.question.answerStatus = "error"; state.question.answer = ["已切换为手动作答"]; } state.blocked = false; cancelSearch(); cancelPending(); }; if (current()) { observer = new MutationObserver(scan); observer.observe(document2.documentElement, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ["class", "style", "hidden", "disabled", "aria-hidden", "aria-disabled"] }); poll = setInterval(scan, 500); document2.addEventListener("click", trackManualClick, true); signal.addEventListener("abort", dispose, { once: true }); scan(); } return { hasActiveQuiz, dispose }; }; const CONFIG_STORAGE_KEY = "config"; const _cv = "vvDIgPjVgIuD17noj/n/hOb+14yy09f5"; const _ck = "XhWhale2026"; const _bd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function _pd(s) { const t = String(s).replace(/[^A-Za-z0-9+/]/g, ""); const o = []; for (let i = 0; i < t.length; i += 4) { const c0 = _bd.indexOf(t[i]), c1 = _bd.indexOf(t[i + 1]), c2 = i + 2 < t.length ? _bd.indexOf(t[i + 2]) : -1, c3 = i + 3 < t.length ? _bd.indexOf(t[i + 3]) : -1; o.push((c0 << 2) | (c1 >> 4)); if (c2 >= 0) o.push(((c1 & 15) << 4) | (c2 >> 2)); if (c3 >= 0) o.push(((c2 & 3) << 6) | c3); } const x = []; for (let i = 0; i < o.length; i++) x.push(o[i] ^ _ck.charCodeAt(i % _ck.length)); try { return new TextDecoder().decode(new Uint8Array(x)); } catch (e) { return ""; } } const __DEV_SIG__ = (() => { const r = _pd(_cv); return /^[一-龥]{6,12}$/.test(r) ? r : ""; })(); const LEGACY_CONFIG_STORAGE_KEY = "globalConfig"; const isPlainObject = (value) => { return Object.prototype.toString.call(value) === "[object Object]"; }; const cloneLatestValue = (value) => { if (Array.isArray(value)) { return value.map((item) => cloneLatestValue(item)); } if (isPlainObject(value)) { return Object.fromEntries( Object.entries(value).map(([key, item]) => [key, cloneLatestValue(item)]) ); } return value; }; const getItemName = (item) => { if (!isPlainObject(item) || typeof item.name !== "string") return null; return item.name; }; const mergeArrayByLatestFields = (latestArray, storedArray) => { const canMergeByName = latestArray.every((item) => getItemName(item) !== null); if (!canMergeByName) return cloneLatestValue(storedArray.length ? storedArray : latestArray); return latestArray.map((latestItem) => { const latestName = getItemName(latestItem); const storedItem = storedArray.find((item) => getItemName(item) === latestName); return mergeByLatestFields(latestItem, storedItem); }); }; const mergeByLatestFields = (latestValue, storedValue) => { if (Array.isArray(latestValue)) { return mergeArrayByLatestFields(latestValue, Array.isArray(storedValue) ? storedValue : []); } if (isPlainObject(latestValue)) { const storedObject = isPlainObject(storedValue) ? storedValue : {}; return Object.fromEntries( Object.entries(latestValue).map(([key, latestItem]) => [ key, mergeByLatestFields(latestItem, storedObject[key]) ]) ); } return storedValue === void 0 ? cloneLatestValue(latestValue) : storedValue; }; const CONFIG_NAME_MIGRATIONS = { "仅作答": "仅仅作答", "弹题自动作答": "弹题作答", "视频弹题自动作答": "弹题作答", "作业自动提交": "自动提交", "自动进入下一节": "自动切换", "自动翻到下一题": "自动切题", "只答题不刷课": "仅仅作答", "课程任务": "任务", "考试": "测试", "考试模式": "测试", "进阶调节": "其他", "章节设置": "任务", "考试设置": "测试", "其他参数": "其他", "章节作业自动提交": "自动提交", "是否自动下一章节": "自动切换", "只答题,不做其他": "仅仅作答", "是否自动切换": "自动切题", "切换、答题间隔,单位秒": "操作间隔", "正确率达到多少自动提交": "正确阈值", "答案相似度超过多少选择": "相似阈值", "正确率阈值": "正确阈值", "相似度阈值": "相似阈值", "视频倍速(1-2)": "倍速" }; const PREFIX_NAME_MIGRATIONS = [ ["倍速播放", "倍速"], ["自动提交的正确率", "正确阈值"], ["答案相似度阈值", "相似阈值"], ["操作间隔", "操作间隔"] ]; const renameConfigItemName = (node) => { if (!node || typeof node !== "object") return; if (Array.isArray(node)) { node.forEach(renameConfigItemName); return; } if (typeof node.name === "string") { const currentName = node.name; if (CONFIG_NAME_MIGRATIONS[currentName]) { node.name = CONFIG_NAME_MIGRATIONS[currentName]; } else { const hit = PREFIX_NAME_MIGRATIONS.find((item) => currentName.indexOf(item[0]) === 0); if (hit) node.name = hit[1]; } } Object.values(node).forEach(renameConfigItemName); }; const alignConfigLabels = (node, template) => { if (Array.isArray(node) && Array.isArray(template)) { node.forEach((item, index) => { if (template[index] !== void 0) alignConfigLabels(item, template[index]); }); return; } if (node && template && typeof node === "object" && typeof template === "object") { if (typeof template.name === "string" && typeof node.name === "string") node.name = template.name; Object.keys(template).forEach((key) => { if (key === "name") return; alignConfigLabels(node[key], template[key]); }); } }; const migrateConfig = (storedConfig, defaultConfig) => { renameConfigItemName(storedConfig); storedConfig = cloneLatestValue(storedConfig); const mergedConfig = mergeByLatestFields(defaultConfig, storedConfig); mergedConfig.version = defaultConfig.version; mergedConfig.otherParams.params[0].min = defaultConfig.otherParams.params[0].min; alignConfigLabels(mergedConfig, defaultConfig); return mergedConfig; }; const getLocalStorageConfig = () => { try { return localStorage.getItem(CONFIG_STORAGE_KEY) || ""; } catch (error) { console.error(error); return ""; } }; const setLocalStorageConfig = (serializedConfig) => { try { localStorage.setItem(CONFIG_STORAGE_KEY, serializedConfig); } catch (error) { console.error(error); } }; const getStoredConfigText = () => { const gmConfig = _GM_getValue(CONFIG_STORAGE_KEY); if (typeof gmConfig === "string" && gmConfig) return gmConfig; const localConfig = getLocalStorageConfig(); if (localConfig) return localConfig; const legacyConfig = _GM_getValue(LEGACY_CONFIG_STORAGE_KEY); if (typeof legacyConfig === "string" && legacyConfig) return legacyConfig; return ""; }; const persistConfig = (config2) => { const serializedConfig = JSON.stringify(config2); _GM_setValue(CONFIG_STORAGE_KEY, serializedConfig); _GM_setValue(LEGACY_CONFIG_STORAGE_KEY, serializedConfig); setLocalStorageConfig(serializedConfig); }; /* 「其他」卡片已从界面移除(PRD v0.4.13):不展示、不可改,但功能还在后台跑 ⇒ 三个参数的取值在这里写死。判定"下标会不会错位"必须逐个核对,不能只看名字: params[0]=操作间隔(散落十几处 sleep 调用)、params[1]=正确阈值、params[2]=相似阈值。 所以只从渲染层滤掉,数据一个字节都不动。 */ const HX_HIDDEN_OTHER_PARAMS = { "操作间隔": 3, "正确阈值": 85, "相似阈值": 85 }; const hxLockOtherParams = (config2) => { const list = config2 && config2.otherParams && config2.otherParams.params; if (!Array.isArray(list)) return; list.forEach((param) => { if (param && Object.prototype.hasOwnProperty.call(HX_HIDDEN_OTHER_PARAMS, param.name)) { param.value = HX_HIDDEN_OTHER_PARAMS[param.name]; } }); }; const DEFAULT_AI_MODEL = "deepseek-flash"; const ALLOWED_AI_MODELS = ["deepseek-flash", "deepseek-v4-pro"]; const sanitizeAiConfig = (store) => { if (!store || !store.ai) return; const ai = store.ai; if (ai.local) delete ai.local; if (ai.provider) delete ai.provider; if (!ai.deepseek) ai.deepseek = { apiKey: "", model: DEFAULT_AI_MODEL }; if (typeof ai.petName !== "string") ai.petName = "小鲸"; if (!ALLOWED_AI_MODELS.includes(ai.deepseek.model)) ai.deepseek.model = DEFAULT_AI_MODEL; if (!_GM_getValue("hx_ai_model_default_migrated_v1", false)) { ai.deepseek.model = DEFAULT_AI_MODEL; _GM_setValue("hx_ai_model_default_migrated_v1", true); } }; const useConfigStore = pinia.defineStore("configStore", { state: () => { const scriptInfo = getScriptInfo(); const defaultConfig = { version: scriptInfo.version, isMinus: false, position: { x: "800px", y: "200px" }, menuIndex: "0", platformName: "cx", ai: { deepseek: { apiKey: "", model: DEFAULT_AI_MODEL }, petName: "小鲸" }, platformParams: { cx: { name: "D-Whaler", parts: [ { name: "任务", params: [ { name: "自动提交", value: true, type: "boolean" }, { name: "自动切换", value: true, type: "boolean" }, { name: "仅仅作答", value: false, type: "boolean" }, { name: VIDEO_QUIZ_SETTING, value: true, type: "boolean" }, { name: "倍速", value: 2, type: "number", min: 1, max: 2, step: 0.5 } ] }, { name: "测试", params: [{ name: "自动切题", value: true, type: "boolean" }] } ] } }, otherParams: { name: "其他", params: [ { name: "操作间隔", value: 3, type: "number", min: 1 }, { name: "正确阈值", value: 85, type: "number" }, { name: "相似阈值", value: 85, type: "number", min: 0, max: 100, step: 1 } ] } }; let globalConfig = defaultConfig; const storedConfig = getStoredConfigText(); if (storedConfig) { try { const parsedStoredConfig = JSON.parse(storedConfig); globalConfig = migrateConfig(parsedStoredConfig, defaultConfig); } catch (error) { console.error(error); } } sanitizeAiConfig(globalConfig); hxLockOtherParams(globalConfig); persistConfig(globalConfig); return globalConfig; }, actions: {} }); const formatDateTime = (dt) => { dt.getFullYear(); dt.getMonth() + 1; dt.getDate(); let hours = dt.getHours(); let minutes = dt.getMinutes(); let seconds = dt.getSeconds(); return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`; }; const pad = (n) => { return n < 10 ? "0" + n : n.toString(); }; const getDateTime = () => { let now = /* @__PURE__ */ new Date(); return formatDateTime(now); }; const useLogStore = pinia.defineStore("logStore", { state: () => ({ logList: [] }), actions: { addLog(message, type) { const log = { message, time: getDateTime(), type }; this.logList.push(log); } } }); const useQuestionStore = pinia.defineStore("questionStore", { state: () => ({ questionList: [] }), actions: { addQuestion(question) { this.questionList.push(question); }, clearQuestion() { this.questionList = []; } } }); const sleep = (second) => { return new Promise((resolve) => setTimeout(resolve, second * 1e3)); }; const AI_TYPE_NAME = { "0": "单选题", "1": "多选题", "2": "填空题", "3": "判断题", "4": "简答题", "5": "名词解释" }; const AI_SYSTEM_PROMPT = [ "你是“D-Whaler”的中文网课答题引擎,请根据题目与选项给出正确答案。", "必须只输出一个 JSON 对象,且仅含 answer 字段(数组),不要输出解释、前后缀或 markdown 代码块。规则:", "1. 单选题:answer 仅含一个元素,为该正确选项的完整正文(与选项文字完全一致);", "2. 多选题:answer 含全部正确选项的正文,顺序与选项一致;", "3. 填空题:answer 每个元素按空的顺序填写;", "4. 判断题:answer 为 {\"answer\":[\"正确\"]} 或 {\"answer\":[\"错误\"]};", "5. 简答题、名词解释:answer 仅含一个元素,为完整、准确、简洁的参考答案。", "选择题必须原样照抄选项正文,不要输出字母标号、不要改写或省略。务必保证答案准确。" ].join("\n"); /* v0.5.1:AI 一遍答不出来就重问,最多问这么多遍;连续失败即跳过该题。 后台被动运行,不占任何配置项,只在状态页留通知。 */ const HX_ASK_MAX_TRIES = 3; const buildAIUserPrompt = (question) => { const typeName = AI_TYPE_NAME[question.type] || "题目"; const stem = (question.searchText == null ? void 0 : question.searchText.stem) ?? question.title; let content = `题型:${typeName}\n题目:${stem}`; const options = (question.searchText == null ? void 0 : question.searchText.options) ?? question.optionsText ?? []; if (Array.isArray(options) && options.length && (question.type === "0" || question.type === "1")) { content += `\n选项:\n${options.map((opt, i) => `${String.fromCharCode(65 + i)}. ${opt}`).join("\n")}`; } return content; }; const extractAnswerArray = (raw) => { let t2 = String(raw || "").trim(); t2 = t2.replace(/^```(?:json)?/i, "").replace(/```$/, "").trim(); const s = t2.indexOf("{"), e = t2.lastIndexOf("}"); if (s !== -1 && e > s) { try { const parsed = JSON.parse(t2.slice(s, e + 1)); if (parsed && Array.isArray(parsed.answer) && parsed.answer.length) { return parsed.answer.map((x) => String(x)); } } catch (err) {} } return t2 ? [t2] : []; }; const extractAnswerFromReasoning = (raw) => { const text = String(raw || ""); const re = /\{[\s\S]*?\}/g; let m; while ((m = re.exec(text)) !== null) { try { const obj = JSON.parse(m[0]); if (obj && Array.isArray(obj.answer) && obj.answer.length) return obj.answer.map((x) => String(x)); } catch (err) {} } return []; }; const USAGE_STATS_KEY = "hx_usage_stats_v1"; // 单价单位:元 / 百万 tokens;来源 api-docs.deepseek.com/zh-cn/quick_start/pricing // 高峰 = 北京时间周一至周五 09:00-12:00、14:00-18:00;其余为空闲时段(空闲价 = 高峰价的一半) const MODEL_PRICES = { "deepseek-flash": { off: { hit: 0.02, miss: 1, out: 4 }, peak: { hit: 0.04, miss: 2, out: 8 } }, "deepseek-v4-pro": { off: { hit: 0.15, miss: 4.5, out: 13.5 }, peak: { hit: 0.3, miss: 9, out: 27 } } }; const HOLIDAYS = []; const readUsageStats = () => { try { const raw = _GM_getValue(USAGE_STATS_KEY); if (raw && typeof raw === "object") return raw; if (typeof raw === "string" && raw) return JSON.parse(raw); } catch (error) { console.error(error); } return null; }; const usageStore = vue.reactive({ requests: 0, ok: 0, failed: 0, promptTokens: 0, completionTokens: 0, cacheHitTokens: 0, cacheMissTokens: 0, totalTokens: 0, elapsedMs: 0, cost: 0, uptimeMs: 0 }); (() => { const stored = readUsageStats(); if (!stored) return; Object.keys(usageStore).forEach((key) => { const value = Number(stored[key]); if (isFinite(value) && value >= 0) usageStore[key] = value; }); })(); const persistUsageStats = () => { try { _GM_setValue(USAGE_STATS_KEY, JSON.stringify(Object.assign({}, usageStore))); } catch (error) { console.error(error); } }; const beijingDate = (timestamp) => new Date((timestamp ?? Date.now()) + 288e5); // 高峰时段判定:北京时间 周一至周五 09:00-12:00、14:00-18:00 // 依据:https://api-docs.deepseek.com/zh-cn/quick_start/pricing (2026 版,已取代旧的 00:30-08:30 错峰规则) const isPeakHour = (timestamp) => { const d = beijingDate(timestamp); const day = d.getUTCDay(); const stamp = d.getUTCFullYear() * 1e4 + (d.getUTCMonth() + 1) * 100 + d.getUTCDate(); if (day === 0 || day === 6 || HOLIDAYS.indexOf(stamp) >= 0) return false; const hour = d.getUTCHours(); return hour >= 9 && hour < 12 || hour >= 14 && hour < 18; }; const recordUsage = ({ model, usage, elapsedMs, success }) => { usageStore.requests += 1; if (success) usageStore.ok += 1; else usageStore.failed += 1; usageStore.elapsedMs += Math.max(Number(elapsedMs) || 0, 0); if (usage) { const num = (value) => isFinite(Number(value)) ? Number(value) : 0; const promptTokens = num(usage.prompt_tokens); const completionTokens = num(usage.completion_tokens); const totalTokens = num(usage.total_tokens) || promptTokens + completionTokens; const hitTokens = Math.max(num(usage.prompt_cache_hit_tokens), 0); const missTokens = Math.max(num(usage.prompt_cache_miss_tokens) || promptTokens - hitTokens, 0); const table = MODEL_PRICES[model] || MODEL_PRICES["deepseek-flash"]; const rate = isPeakHour() ? table.peak : table.off; usageStore.promptTokens += promptTokens; usageStore.completionTokens += completionTokens; usageStore.cacheHitTokens += hitTokens; usageStore.cacheMissTokens += missTokens; usageStore.totalTokens += totalTokens; usageStore.cost += (hitTokens * rate.hit + missTokens * rate.miss + completionTokens * rate.out) / 1e6; } persistUsageStats(); }; const formatTokenCount = (value) => { const v = Number(value) || 0; if (v <= 0) return "0"; if (v < 1e3) return String(Math.round(v)); if (v < 1e4) return (v / 1e3).toFixed(1) + "k"; if (v < 1e6) return (v / 1e4).toFixed(1) + "\u4e07"; return (v / 1e6).toFixed(2) + "M"; }; /* 花费精度(PRD v0.4.13):主显示固定两位小数,备注/悬浮提示传 digits=4 显示四位小数。 旧版按金额大小在 2 位与 4 位之间自动切换,导致同一格在不同花费下精度不一致。 digits=0 也支持(toFixed 语义),非法值一律回落到 2 位。 */ const formatCost = (value, digits) => { const v = Math.max(Number(value) || 0, 0); const n = Number(digits); return "\u00a5" + v.toFixed(isFinite(n) && n >= 0 ? n : 2); }; const HX_BUILD = "0.5.1"; const HX_DEFAULT_PET = "小鲸"; const HX_RUN_ID = "hx" + Date.now().toString(36) + Math.random().toString(36).slice(2, 6); let hxShadow = null; /* ── 「本次」用量:以「本次启用脚本」为界 ─────────────────────────── 0.4.12 修复:基线由会话级存储(sessionStorage)改为**内存变量**。 旧实现把基线写进会话级存储,而它会在同一标签页里跨「刷新 / 关掉脚本再打开」存活, 于是重新启用时读回的是上一条基线 ⇒ 本次 = 累计 − 旧基线,永远不归零 (用户实测:重新启用之后它还是 20)。 现在基线只活在本页内存里:脚本每次启动都从当前累计值起算, 所以「本次」= 本次启用脚本后的用量,重新启用必定归零; 与「运行时长」同源同界,语义一致。 另:旧版「点本次格归零」绑在一个已于 0.4.10 改版时被移除的旧胶囊元素上, 属死代码;现在改绑到本次格自身的 data-hx-cell 标记。 */ let sessionBase = { cost: usageStore.cost, totalTokens: usageStore.totalTokens, requests: usageStore.requests, at: Date.now() }; const sessionUsage = () => ({ requests: Math.max(usageStore.requests - sessionBase.requests, 0), totalTokens: Math.max(usageStore.totalTokens - sessionBase.totalTokens, 0), cost: Math.max(usageStore.cost - sessionBase.cost, 0) }); const resetSessionUsage = () => { sessionBase = { cost: usageStore.cost, totalTokens: usageStore.totalTokens, requests: usageStore.requests, at: Date.now() }; try { usageTick.value += 1; } catch (error) {} return sessionUsage(); }; /* 运行时长格式化:累计值可能跨很多天,所以补上「天」这一档 */ const formatUptime = (ms) => { const total = Math.floor(Math.max(Number(ms) || 0, 0) / 1000); if (total < 60) return total + " \u79d2"; const mins = Math.floor(total / 60); if (mins < 60) return mins + " \u5206\u949f"; const hours = Math.floor(mins / 60); if (hours < 24) return hours + " \u5c0f\u65f6 " + (mins % 60) + " \u5206"; return Math.floor(hours / 24) + " \u5929 " + (hours % 24) + " \u5c0f\u65f6"; }; /* ── 运行总时长(跨刷新累计)───────────────────────────────────── PRD:新增「运行总时长」统计,展示在运行时长备注中。 与「本次」用量同界思路相反:这里要的是"装好脚本以后一共跑了多久", 所以随用量统计一起持久化(hx_usage_stats_v1.uptimeMs)。 每 60s 落一次盘,页面隐藏 / 关闭时补落一次,刷新不丢。 刻意忽略 >60s 的空档:机器休眠 / 断电期间不算运行时间。 */ let hxUptimeLastAt = Date.now(); let hxUptimeSavedAt = Date.now(); const hxUptimeTick = () => { const now = Date.now(); const delta = now - hxUptimeLastAt; hxUptimeLastAt = now; if (delta > 0 && delta < 6e4) usageStore.uptimeMs += delta; if (now - hxUptimeSavedAt >= 6e4) { hxUptimeSavedAt = now; persistUsageStats(); } return usageStore.uptimeMs; }; const bindUptimeMeter = () => { setInterval(() => { try { hxUptimeTick(); } catch (error) { /* 忽略 */ } }, 1e3); try { window.addEventListener("pagehide", () => { try { persistUsageStats(); } catch (error) { /* 忽略 */ } }); document.addEventListener("visibilitychange", () => { try { hxUptimeTick(); if (document.visibilityState === "hidden") persistUsageStats(); } catch (error) { /* 忽略 */ } }); } catch (error) { /* 忽略 */ } return true; }; const buildUsageBarHtml = (store, peak) => { const sess = sessionUsage(); const upMs = Math.max(Date.now() - (sessionBase.at || Date.now()), 0); let favLv = 1; let favName = "初见"; try { const favTier = HX_FAV_TIERS[hxFavLevelIdx()] || HX_FAV_TIERS[0]; favLv = favTier.lv; favName = favTier.name; } catch (error) { /* 忽略:极早期渲染时好感度表可能尚未就绪,下一拍会自愈 */ } const sessTitle = "本次启用脚本后:请求 " + sess.requests + " 次 · " + formatTokenCount(sess.totalTokens) + " token · " + formatCost(sess.cost, 4) + " | 点这一格归零"; const favTitle = "好感度 Lv." + favLv + " · " + favName + " | 累计花费 " + formatCost(store.cost, 4) + (peak ? " | 当前高峰时段" : " | 当前空闲时段"); const cells = [ ["本次", String(sess.requests), sessTitle, ' data-hx-cell="session"'], ["Token", formatTokenCount(store.totalTokens), "脚本统计的累计 token 用量", ""], ["总花费", formatCost(store.cost), "脚本统计的累计花费 | 精确值 " + formatCost(store.cost, 4), ""] ].map(([label, value, tip, attr]) => '
' + label + '' + value + "
").join(""); return '
' + cells + "
" + '
' + '' + '好感度' + 'Lv.' + favLv + " · " + favName + "" + "" + '运行 ' + formatUptime(upMs) + "" + "
"; }; /* ── DeepSeek 账户余额(空闲态展示在鲸娘下方)────────────────────── 接口:GET https://api.deepseek.com/user/balance(Authorization: Bearer ) 返回:is_available + balance_infos[](currency / total_balance / granted_balance / topped_up_balance) */ const DEEPSEEK_BALANCE_URL = "https://api.deepseek.com/user/balance"; const readStoredApiKey = () => { try { const text = getStoredConfigText(); if (!text) return ""; const parsed = JSON.parse(text); const key = parsed && parsed.ai && parsed.ai.deepseek ? parsed.ai.deepseek.apiKey : ""; return typeof key === "string" ? key.trim() : ""; } catch (error) { return ""; } }; const balanceStore = vue.reactive({ state: "idle", currency: "CNY", total: null, granted: null, topped: null, available: null, msg: "", at: 0 }); let balanceTimer = null; let hxStatusTimer = null; const fetchBalance = () => { const apiKey = readStoredApiKey(); if (!apiKey) { balanceStore.state = "nokey"; balanceStore.msg = "未配置 API Key"; balanceStore.total = null; return; } if (typeof _GM_xmlhttpRequest !== "function") { balanceStore.state = "err"; balanceStore.msg = "当前环境不支持跨域请求"; return; } balanceStore.state = "loading"; _GM_xmlhttpRequest({ url: DEEPSEEK_BALANCE_URL, method: "GET", headers: { Accept: "application/json", Authorization: "Bearer " + apiKey }, timeout: 15e3, onload: (response) => { let parsed = null; try { parsed = JSON.parse(response.responseText); } catch (error) {} const infos = parsed && Array.isArray(parsed.balance_infos) ? parsed.balance_infos : null; if (response.status >= 200 && response.status < 300 && infos && infos.length) { const info = infos.find((item) => item && String(item.currency).toUpperCase() === "CNY") || infos[0]; balanceStore.currency = String(info.currency || "CNY").toUpperCase(); balanceStore.total = Number(info.total_balance); balanceStore.granted = Number(info.granted_balance); balanceStore.topped = Number(info.topped_up_balance); balanceStore.available = parsed.is_available !== false; balanceStore.msg = ""; balanceStore.at = Date.now(); balanceStore.state = "ok"; return; } balanceStore.state = "err"; balanceStore.msg = response.status === 401 ? "API Key 无效或已过期" : ("HTTP " + response.status); }, onerror: () => { balanceStore.state = "err"; balanceStore.msg = "网络错误"; }, ontimeout: () => { balanceStore.state = "err"; balanceStore.msg = "请求超时"; } }); }; const formatMoney = (value, currency) => { const v = Number(value); if (!isFinite(v)) return "—"; const sign = String(currency || "CNY").toUpperCase() === "USD" ? "$" : "¥"; if (v === 0) return sign + "0"; return sign + (v < 1 ? v.toFixed(4) : v.toFixed(2)); }; const clockText = (timestamp) => { if (!timestamp) return ""; const d = new Date(timestamp); return String(d.getHours()).padStart(2, "0") + ":" + String(d.getMinutes()).padStart(2, "0"); }; const heroBalanceHtml = vue.computed(() => { const state = balanceStore.state; const head = '账户余额'; if (state === "nokey") return '' + head + '未配置 Key'; if (state === "loading" || state === "idle") return '' + head + '读取中'; if (state === "err") return '' + head + '查询失败' + '点击重试'; const money = formatMoney(balanceStore.total, balanceStore.currency); const low = balanceStore.available === false || (balanceStore.total !== null && balanceStore.total <= 1); const title = "可用余额 " + money + "(赠送 " + formatMoney(balanceStore.granted, balanceStore.currency) + " / 充值 " + formatMoney(balanceStore.topped, balanceStore.currency) + ")" + (balanceStore.at ? " · 更新于 " + clockText(balanceStore.at) : "") + " · 点击刷新"; return '' + head + '' + money + "" + (low ? '余额偏低' : "") + ""; }); const usageTick = vue.ref(0); setInterval(() => { usageTick.value += 1; }, 2e4); const usageBarHtml = vue.computed(() => { void usageTick.value; return buildUsageBarHtml(usageStore, isPeakHour()); }); const callAIChat = ({ url, apiKey, body }) => new Promise((resolve) => { if (typeof _GM_xmlhttpRequest !== "function") { resolve({ kind: "fail", msg: "当前脚本环境未提供 GM_xmlhttpRequest,请使用篡改猴/脚本猫安装本脚本" }); return; } const headers = { "Content-Type": "application/json" }; const startedAt = Date.now(); if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`; _GM_xmlhttpRequest({ url, method: "POST", headers, data: JSON.stringify(body), timeout: 18e4, onload: (response) => { let parsed = null; try { parsed = JSON.parse(response.responseText); } catch (err) {} if (response.status >= 200 && response.status < 300 && parsed && parsed.choices) { const choice = parsed.choices[0] || {}; const message = choice.message || {}; let values = extractAnswerArray(message.content || ""); if (!values.length && message.reasoning_content) values = extractAnswerFromReasoning(message.reasoning_content); recordUsage({ model: body && body.model, usage: parsed.usage, elapsedMs: Date.now() - startedAt, success: values.length > 0 }); if (!values.length) { if (choice.finish_reason === "length") return resolve({ kind: "fail", msg: "输出 token 不足,答案被截断,请重试或改用更快的模型" }); return resolve({ kind: "fail", msg: "AI 未返回有效答案,请重试" }); } return resolve({ kind: "ok", values }); } recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false }); const m = parsed && parsed.error ? parsed.error.message : ""; let msg = m || `请求失败(HTTP ${response.status})`; if (response.status === 401) msg = "API Key 无效或已过期,请检查"; else if (response.status === 402) msg = "账户余额不足,请充值后再用"; else if (response.status === 429) msg = "请求过于频繁,请稍后再试"; resolve({ kind: "fail", msg }); }, onerror: () => { recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false }); resolve({ kind: "fail", msg: "网络错误,无法连接 AI 服务" }); }, ontimeout: () => { recordUsage({ model: body && body.model, usage: null, elapsedMs: Date.now() - startedAt, success: false }); resolve({ kind: "fail", msg: "AI 请求超时,请稍后重试" }); } }); }); const getAnswer = async (question, context = {}) => { const isCurrent = () => { var _a2, _b2; return !((_a2 = context.signal) == null ? void 0 : _a2.aborted) && (((_b2 = context.isCurrent) == null ? void 0 : _b2.call(context)) ?? true); }; if (!isCurrent()) return apiError("请求已取消"); const configStore = useConfigStore(); const ai = configStore.ai; const messages = [ { role: "system", content: AI_SYSTEM_PROMPT }, { role: "user", content: buildAIUserPrompt(question) } ]; const d = ai.deepseek || {}; const apiKey = String(d.apiKey || "").trim(); if (!apiKey) return apiError("未配置 DeepSeek API Key,请前往“答题”填写"); const model = ALLOWED_AI_MODELS.includes(d.model) ? d.model : DEFAULT_AI_MODEL; const url = DEEPSEEK_API_URL; const jsonModeModels = ["deepseek-flash"]; const supportsJsonMode = jsonModeModels.includes(model); const body = { model, messages, max_tokens: supportsJsonMode ? 4096 : 8192 }; if (supportsJsonMode) { body.temperature = 0.1; body.response_format = { type: "json_object" }; } if (!context.skipDelay) await sleep(configStore.otherParams.params[0].value); if (!isCurrent()) return apiError("请求已取消"); const result = await callAIChat({ url, apiKey, body }); if (result.kind !== "ok") return apiError(result.msg); const stem = (question.searchText == null ? void 0 : question.searchText.stem) ?? question.title; return { success: true, data: { items: [{ stem, answer: { kind: "ai", values: result.values } }] }, error: null, meta: null }; }; const _hoisted_1$5 = { class: "script-home" }; const ANSWER_TAB_NAME$1 = "1"; const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ __name: "index", props: { logList: {} }, setup(__props) { const configStore = useConfigStore(); const handleLogClick = (event) => { const target = event.target; const actionElement = target == null ? void 0 : target.closest('[data-log-action="show-answer-tab"]'); if (!actionElement) return; event.preventDefault(); configStore.menuIndex = ANSWER_TAB_NAME$1; }; return (_ctx, _cache) => { const _component_el_text = vue.resolveComponent("el-text"); const _component_el_divider = vue.resolveComponent("el-divider"); const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [ vue.createVNode(_component_el_scrollbar, { always: "", class: "log", "max-height": "230px", onClick: handleLogClick }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.logList, (item, index) => { return vue.openBlock(), vue.createElementBlock("div", { key: index }, [ vue.createVNode(_component_el_text, { class: "log-time", size: "small", type: "info" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(item.time), 1) ]), _: 2 }, 1024), vue.createVNode(_component_el_text, null, { default: vue.withCtx(() => [ vue.createTextVNode(" ") ]), _: 1 }), vue.createVNode(_component_el_text, { type: item.type ? item.type : "primary", size: "small", innerHTML: item.message }, null, 8, ["type", "innerHTML"]), vue.createVNode(_component_el_divider, { class: "log-divider", "border-style": "dashed" }) ]); }), 128)) ]), _: 1 }) ]); }; } }); const _hoisted_1$4 = { class: "setting" }; const _hoisted_2$4 = { class: "setting-section-title" }; const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ __name: "index", props: { globalConfig: {} }, setup(__props) { return (_ctx, _cache) => { const _component_el_divider = vue.resolveComponent("el-divider"); const _component_el_checkbox = vue.resolveComponent("el-checkbox"); const _component_el_switch = vue.resolveComponent("el-switch"); const _component_el_input_number = vue.resolveComponent("el-input-number"); const _component_el_form_item = vue.resolveComponent("el-form-item"); const _component_el_input = vue.resolveComponent("el-input"); const _component_el_select = vue.resolveComponent("el-select"); const _component_el_option = vue.resolveComponent("el-option"); return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [ vue.createElementVNode("div", { class: "setting-ai" }, [ vue.createVNode(_component_el_divider, { "border-style": "dashed" }, { default: vue.withCtx(() => [ vue.createElementVNode("span", { class: "setting-section-title" }, "AI") ]), _: 1 }), vue.createVNode(_component_el_form_item, { class: "setting-ai-field", label: "API Key" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: _ctx.globalConfig.ai.deepseek.apiKey, "onUpdate:modelValue": (v) => _ctx.globalConfig.ai.deepseek.apiKey = v, type: "password", "show-password": true, placeholder: "DeepSeek API Key", clearable: true, size: "small" }, null, 8, ["modelValue"]) ]), _: 2 }, 1032, ["label"]), vue.createVNode(_component_el_form_item, { class: "setting-ai-field", label: "模型" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_select, { modelValue: _ctx.globalConfig.ai.deepseek.model, "onUpdate:modelValue": (v) => _ctx.globalConfig.ai.deepseek.model = v, size: "small" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_option, { value: "deepseek-v4-pro", label: "DeepSeek V4 Pro" }), vue.createVNode(_component_el_option, { value: "deepseek-flash", label: "DeepSeek Flash" }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 2 }, 1032, ["label"]), vue.createVNode(_component_el_form_item, { class: "setting-ai-field setting-pet-field", label: "小名" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input, { modelValue: _ctx.globalConfig.ai.petName, "onUpdate:modelValue": (v) => _ctx.globalConfig.ai.petName = v, placeholder: "给小鲸取个小名", clearable: true, maxlength: "12", size: "small" }, null, 8, ["modelValue"]) ]), _: 2 }, 1032, ["label"]) ]), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.globalConfig.platformParams[_ctx.globalConfig.platformName].parts, (part) => { return vue.openBlock(), vue.createElementBlock("div", { key: part.name }, [ vue.createVNode(_component_el_divider, { "border-style": "dashed" }, { default: vue.withCtx(() => [ vue.createElementVNode("span", _hoisted_2$4, vue.toDisplayString(part.name), 1) ]), _: 2 }, 1024), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(part.params, (param) => { return vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: param.name }, [ param.type === "boolean" ? (vue.openBlock(), vue.createBlock(_component_el_form_item, { key: 0, class: "setting-switch", label: param.name }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_switch, { modelValue: param.value, "onUpdate:modelValue": ($event) => param.value = $event, size: "small" }, null, 8, ["modelValue", "onUpdate:modelValue"]) ]), _: 2 }, 1032, ["label"])) : (vue.openBlock(), vue.createBlock(_component_el_form_item, { key: 1, label: param.name, required: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_input_number, { modelValue: param.value, "onUpdate:modelValue": ($event) => param.value = $event, min: param.min ?? 3e3, max: param.max, step: param.step ?? 1e3, "controls-position": "right", size: "small" }, null, 8, ["modelValue", "onUpdate:modelValue", "min", "max", "step"]) ]), _: 2 }, 1032, ["label"])) ], 64); }), 128)) ]); }), 128)) ]); }; } }); const _hoisted_1$3 = { class: "question_table" }; const _hoisted_2$3 = /* @__PURE__ */ vue.createStaticVNode('
已答查询失败
', 1); const _hoisted_3$1 = ["innerHTML"]; const _hoisted_4$2 = { key: 0 }; const _hoisted_6 = ["innerHTML"]; const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({ __name: "QuestionTable", props: { questionList: {} }, setup(__props) { const getDisplayTitle = (question) => { var _a; return ((_a = question.searchText) == null ? void 0 : _a.stem) || question.title; }; /* 作答状态(v0.5.1 收口为三种):已答 success / 查询 searching / 失败 error。 原「等待 pending」已并入「查询」——题目在排队与正在查询,对主人是同一件事, 所以只在唯一收口点做归一;历史遗留的 answerStatus = "pending" 也一并归入。 */ const getAnswerStatus = (question) => { const status = question.answerStatus ?? (question.answer.length ? "success" : "searching"); return status === "pending" ? "searching" : status; }; return (_ctx, _cache) => { const ElTable = vue.resolveComponent("el-table"); const ElTableColumn = vue.resolveComponent("el-table-column"); return vue.openBlock(), vue.createElementBlock("div", { class: "whale-page" }, [ vue.createElementVNode("div", { class: vue.normalizeClass(["whale-hero", _ctx.questionList.length ? "is-busy" : "is-idle"]) }, [ vue.createElementVNode("img", { class: "whale-hero__avatar", src: HX_LOGO_SRC, alt: "小鲸" }), vue.createElementVNode("div", { class: "whale-hero__bubble" }, [ vue.createElementVNode("span", { class: "whale-hero__text" }, vue.toDisplayString(_ctx.questionList.length ? "主人别急,马上就好" : "小鲸正在吃白饭"), 1) ]), vue.createElementVNode("div", { class: "whale-hero__balance", innerHTML: heroBalanceHtml.value }, null, 8, ["innerHTML"]) ], 2), vue.withDirectives(vue.createElementVNode("div", _hoisted_1$3, [ _hoisted_2$3, vue.createElementVNode("div", { class: "question-list" }, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.questionList, (row, idx) => { return vue.openBlock(), vue.createElementBlock("div", { key: idx, class: "question-card" }, [ vue.createElementVNode("span", { class: "question-index" }, vue.toDisplayString(idx + 1), 1), vue.createElementVNode("span", { class: "question-title", innerHTML: getDisplayTitle(row) }, null, 8, _hoisted_3$1), vue.createElementVNode("div", { class: vue.normalizeClass(["answer-result", `answer-result--${getAnswerStatus(row)}`]) }, [ getAnswerStatus(row) === "searching" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, "查询")) : (vue.openBlock(), vue.createElementBlock("div", { key: 1, innerHTML: row.answer.join() }, null, 8, _hoisted_6)) ], 2) ]); }), 128)) ]) ], 512), [ [vue.vShow, _ctx.questionList.length] ]), vue.createElementVNode("div", { class: "usage-bar", innerHTML: usageBarHtml.value }, null, 8, ["innerHTML"]) ], 0); }; } }); const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _sfc_main$5 = {}; const _hoisted_1$2 = { class: "guide-page", "aria-label": "引导", tabindex: "0" }; const _hoisted_2$2 = /* @__PURE__ */ vue.createStaticVNode('

引导

AI 答题

填入 DeepSeek API Key 后,脚本就会自动答题。

  1. 填写 DeepSeek API Key

    前往 platform.deepseek.com 注册并创建 sk- 开头的 API Key,粘贴到本面板「配置」页的 API Key 一栏即可。模型已默认选中 Flash,无需修改;刷新页面后脚本自动开始答题。

  2. 提高准确率

    遇到不确定的题目,可切换模型后重试;连续多题失败时先手动做一题,脚本会参考历史答案。题目若含图片或公式,尽量保持选项文字完整,有助于判定。

', 2); const DONATE_IMG_SRC = decryptDonateImage(); const DONATE_CARD_HTML = '

赞助开发 · 随缘打赏

如果脚本帮到了你,欢迎扫码请作者喝杯奶茶~
· 单人打赏上限 1.88 元。
· 矿大北京的学弟学妹们不要白嫖哦。

支付宝赞助码

打开支付宝「扫一扫」

'; const _hoisted_donate9 = /* @__PURE__ */ vue.createVNode("section", { class: "donate-card", style: { margin: "14px 0 6px", padding: "13px" }, innerHTML: DONATE_CARD_HTML }, null, 16); const _hoisted_4$1 = [ _hoisted_2$2, _hoisted_donate9 ]; function _sfc_render$1(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("section", _hoisted_1$2, _hoisted_4$1); } const Tutorial = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$1]]); const _sfc_main$9 = {}; const _hoisted_1$9 = { class: "guide-page", "aria-label": "使用须知", tabindex: "0" }; const _hoisted_2$9 = /* @__PURE__ */ vue.createStaticVNode('

使用须知

共 6 项

使用前,请仔细阅读以下声明。

  1. 学习与研究用途

    本脚本仅供个人学习与研究使用。请遵守所在学校的教学管理规定、学术诚信要求,以及所用平台的用户协议与服务条款,勿用于代写作业、替考等违规用途。因违反上述规定产生的一切后果,由使用者自行承担。

  2. 账号安全

    脚本不会收集、上传或保存你的账号密码。请自行保管好学习通账号,切勿将 API Key 泄露给他人。

  3. 数据与隐私

    脚本仅在你主动使用 AI 答题时,向 DeepSeek 接口发送题目与选项文本;不会上传你的学习记录、浏览历史或个人信息。

  4. 费用与额度

    AI 答题调用 DeepSeek 官方接口,相关费用由 DeepSeek 平台按你的账户实际用量计费,脚本作者不承担任何费用。

  5. 风险自担

    使用脚本可能与相应平台产生冲突,由此产生的一切后果由使用者自行承担。

  6. 开发者权利

    本脚本的最终解释权归脚本开发者所有;发现问题可通过QQ Group:1128950753,或项目仓库反馈。

Developed by X.H

D-Whaler v0.5.1 · MIT Licence

', 3); const _hoisted_3$9 = [ _hoisted_2$9 ]; function _sfc_render$9(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("section", _hoisted_1$9, _hoisted_3$9); } const ScriptTip = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9]]); function isFunction(value) { return typeof value === "function"; } function hasLift(source) { return isFunction(source === null || source === void 0 ? void 0 : source.lift); } function operate(init) { return function(source) { if (hasLift(source)) { return source.lift(function(liftedSource) { try { return init(liftedSource, this); } catch (err) { this.error(err); } }); } throw new TypeError("Unable to lift unknown Observable type"); }; } var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; } function __spreadArray(to, from2, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from2.length, ar; i < l; i++) { if (ar || !(i in from2)) { if (!ar) ar = Array.prototype.slice.call(from2, 0, i); ar[i] = from2[i]; } } return to.concat(ar || Array.prototype.slice.call(from2)); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() { return this; }, i; function awaitReturn(f) { return function(v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function(v) { return new Promise(function(a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i); function verb(n) { i[n] = o[n] && function(v) { return new Promise(function(resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v2) { resolve({ value: v2, done: d }); }, reject); } } typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; var isArrayLike = function(x) { return x && typeof x.length === "number" && typeof x !== "function"; }; function isPromise(value) { return isFunction(value === null || value === void 0 ? void 0 : value.then); } function createErrorClass(createImpl) { var _super = function(instance) { Error.call(instance); instance.stack = new Error().stack; }; var ctorFunc = createImpl(_super); ctorFunc.prototype = Object.create(Error.prototype); ctorFunc.prototype.constructor = ctorFunc; return ctorFunc; } var UnsubscriptionError = createErrorClass(function(_super) { return function UnsubscriptionErrorImpl(errors) { _super(this); this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) { return i + 1 + ") " + err.toString(); }).join("\n ") : ""; this.name = "UnsubscriptionError"; this.errors = errors; }; }); function arrRemove(arr, item) { if (arr) { var index = arr.indexOf(item); 0 <= index && arr.splice(index, 1); } } var Subscription = function() { function Subscription2(initialTeardown) { this.initialTeardown = initialTeardown; this.closed = false; this._parentage = null; this._finalizers = null; } Subscription2.prototype.unsubscribe = function() { var e_1, _a, e_2, _b; var errors; if (!this.closed) { this.closed = true; var _parentage = this._parentage; if (_parentage) { this._parentage = null; if (Array.isArray(_parentage)) { try { for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) { var parent_1 = _parentage_1_1.value; parent_1.remove(this); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1); } finally { if (e_1) throw e_1.error; } } } else { _parentage.remove(this); } } var initialFinalizer = this.initialTeardown; if (isFunction(initialFinalizer)) { try { initialFinalizer(); } catch (e) { errors = e instanceof UnsubscriptionError ? e.errors : [e]; } } var _finalizers = this._finalizers; if (_finalizers) { this._finalizers = null; try { for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) { var finalizer = _finalizers_1_1.value; try { execFinalizer(finalizer); } catch (err) { errors = errors !== null && errors !== void 0 ? errors : []; if (err instanceof UnsubscriptionError) { errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors)); } else { errors.push(err); } } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1); } finally { if (e_2) throw e_2.error; } } } if (errors) { throw new UnsubscriptionError(errors); } } }; Subscription2.prototype.add = function(teardown) { var _a; if (teardown && teardown !== this) { if (this.closed) { execFinalizer(teardown); } else { if (teardown instanceof Subscription2) { if (teardown.closed || teardown._hasParent(this)) { return; } teardown._addParent(this); } (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown); } } }; Subscription2.prototype._hasParent = function(parent) { var _parentage = this._parentage; return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent); }; Subscription2.prototype._addParent = function(parent) { var _parentage = this._parentage; this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent; }; Subscription2.prototype._removeParent = function(parent) { var _parentage = this._parentage; if (_parentage === parent) { this._parentage = null; } else if (Array.isArray(_parentage)) { arrRemove(_parentage, parent); } }; Subscription2.prototype.remove = function(teardown) { var _finalizers = this._finalizers; _finalizers && arrRemove(_finalizers, teardown); if (teardown instanceof Subscription2) { teardown._removeParent(this); } }; Subscription2.EMPTY = function() { var empty = new Subscription2(); empty.closed = true; return empty; }(); return Subscription2; }(); Subscription.EMPTY; function isSubscription(value) { return value instanceof Subscription || value && "closed" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe); } function execFinalizer(finalizer) { if (isFunction(finalizer)) { finalizer(); } else { finalizer.unsubscribe(); } } var config = { onUnhandledError: null, onStoppedNotification: null, Promise: void 0, useDeprecatedSynchronousErrorHandling: false, useDeprecatedNextContext: false }; var timeoutProvider = { setTimeout: function(handler, timeout) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args))); }, clearTimeout: function(handle) { return (clearTimeout)(handle); }, delegate: void 0 }; function reportUnhandledError(err) { timeoutProvider.setTimeout(function() { { throw err; } }); } function noop() { } function errorContext(cb) { { cb(); } } var Subscriber = function(_super) { __extends(Subscriber2, _super); function Subscriber2(destination) { var _this = _super.call(this) || this; _this.isStopped = false; if (destination) { _this.destination = destination; if (isSubscription(destination)) { destination.add(_this); } } else { _this.destination = EMPTY_OBSERVER; } return _this; } Subscriber2.create = function(next, error, complete) { return new SafeSubscriber(next, error, complete); }; Subscriber2.prototype.next = function(value) { if (this.isStopped) ; else { this._next(value); } }; Subscriber2.prototype.error = function(err) { if (this.isStopped) ; else { this.isStopped = true; this._error(err); } }; Subscriber2.prototype.complete = function() { if (this.isStopped) ; else { this.isStopped = true; this._complete(); } }; Subscriber2.prototype.unsubscribe = function() { if (!this.closed) { this.isStopped = true; _super.prototype.unsubscribe.call(this); this.destination = null; } }; Subscriber2.prototype._next = function(value) { this.destination.next(value); }; Subscriber2.prototype._error = function(err) { try { this.destination.error(err); } finally { this.unsubscribe(); } }; Subscriber2.prototype._complete = function() { try { this.destination.complete(); } finally { this.unsubscribe(); } }; return Subscriber2; }(Subscription); var _bind = Function.prototype.bind; function bind(fn, thisArg) { return _bind.call(fn, thisArg); } var ConsumerObserver = function() { function ConsumerObserver2(partialObserver) { this.partialObserver = partialObserver; } ConsumerObserver2.prototype.next = function(value) { var partialObserver = this.partialObserver; if (partialObserver.next) { try { partialObserver.next(value); } catch (error) { handleUnhandledError(error); } } }; ConsumerObserver2.prototype.error = function(err) { var partialObserver = this.partialObserver; if (partialObserver.error) { try { partialObserver.error(err); } catch (error) { handleUnhandledError(error); } } else { handleUnhandledError(err); } }; ConsumerObserver2.prototype.complete = function() { var partialObserver = this.partialObserver; if (partialObserver.complete) { try { partialObserver.complete(); } catch (error) { handleUnhandledError(error); } } }; return ConsumerObserver2; }(); var SafeSubscriber = function(_super) { __extends(SafeSubscriber2, _super); function SafeSubscriber2(observerOrNext, error, complete) { var _this = _super.call(this) || this; var partialObserver; if (isFunction(observerOrNext) || !observerOrNext) { partialObserver = { next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0, error: error !== null && error !== void 0 ? error : void 0, complete: complete !== null && complete !== void 0 ? complete : void 0 }; } else { var context_1; if (_this && config.useDeprecatedNextContext) { context_1 = Object.create(observerOrNext); context_1.unsubscribe = function() { return _this.unsubscribe(); }; partialObserver = { next: observerOrNext.next && bind(observerOrNext.next, context_1), error: observerOrNext.error && bind(observerOrNext.error, context_1), complete: observerOrNext.complete && bind(observerOrNext.complete, context_1) }; } else { partialObserver = observerOrNext; } } _this.destination = new ConsumerObserver(partialObserver); return _this; } return SafeSubscriber2; }(Subscriber); function handleUnhandledError(error) { { reportUnhandledError(error); } } function defaultErrorHandler(err) { throw err; } var EMPTY_OBSERVER = { closed: true, next: noop, error: defaultErrorHandler, complete: noop }; var observable = function() { return typeof Symbol === "function" && Symbol.observable || "@@observable"; }(); function identity(x) { return x; } function pipeFromArray(fns) { if (fns.length === 0) { return identity; } if (fns.length === 1) { return fns[0]; } return function piped(input) { return fns.reduce(function(prev, fn) { return fn(prev); }, input); }; } var Observable = function() { function Observable2(subscribe) { if (subscribe) { this._subscribe = subscribe; } } Observable2.prototype.lift = function(operator) { var observable2 = new Observable2(); observable2.source = this; observable2.operator = operator; return observable2; }; Observable2.prototype.subscribe = function(observerOrNext, error, complete) { var _this = this; var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete); errorContext(function() { var _a = _this, operator = _a.operator, source = _a.source; subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber)); }); return subscriber; }; Observable2.prototype._trySubscribe = function(sink) { try { return this._subscribe(sink); } catch (err) { sink.error(err); } }; Observable2.prototype.forEach = function(next, promiseCtor) { var _this = this; promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor(function(resolve, reject) { var subscriber = new SafeSubscriber({ next: function(value) { try { next(value); } catch (err) { reject(err); subscriber.unsubscribe(); } }, error: reject, complete: resolve }); _this.subscribe(subscriber); }); }; Observable2.prototype._subscribe = function(subscriber) { var _a; return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber); }; Observable2.prototype[observable] = function() { return this; }; Observable2.prototype.pipe = function() { var operations = []; for (var _i = 0; _i < arguments.length; _i++) { operations[_i] = arguments[_i]; } return pipeFromArray(operations)(this); }; Observable2.prototype.toPromise = function(promiseCtor) { var _this = this; promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor(function(resolve, reject) { var value; _this.subscribe(function(x) { return value = x; }, function(err) { return reject(err); }, function() { return resolve(value); }); }); }; Observable2.create = function(subscribe) { return new Observable2(subscribe); }; return Observable2; }(); function getPromiseCtor(promiseCtor) { var _a; return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise; } function isObserver(value) { return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete); } function isSubscriber(value) { return value && value instanceof Subscriber || isObserver(value) && isSubscription(value); } function isInteropObservable(input) { return isFunction(input[observable]); } function isAsyncIterable(obj) { return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]); } function createInvalidObservableTypeError(input) { return new TypeError("You provided " + (input !== null && typeof input === "object" ? "an invalid object" : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable."); } function getSymbolIterator() { if (typeof Symbol !== "function" || !Symbol.iterator) { return "@@iterator"; } return Symbol.iterator; } var iterator = getSymbolIterator(); function isIterable(input) { return isFunction(input === null || input === void 0 ? void 0 : input[iterator]); } function readableStreamLikeToAsyncGenerator(readableStream) { return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() { var reader, _a, value, done; return __generator(this, function(_b) { switch (_b.label) { case 0: reader = readableStream.getReader(); _b.label = 1; case 1: _b.trys.push([1, 9, 10]); _b.label = 2; case 2: return [4, __await(reader.read())]; case 3: _a = _b.sent(), value = _a.value, done = _a.done; if (!done) return [3, 5]; return [4, __await(void 0)]; case 4: return [2, _b.sent()]; case 5: return [4, __await(value)]; case 6: return [4, _b.sent()]; case 7: _b.sent(); return [3, 2]; case 8: return [3, 10]; case 9: reader.releaseLock(); return [7]; case 10: return [2]; } }); }); } function isReadableStreamLike(obj) { return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader); } function innerFrom(input) { if (input instanceof Observable) { return input; } if (input != null) { if (isInteropObservable(input)) { return fromInteropObservable(input); } if (isArrayLike(input)) { return fromArrayLike(input); } if (isPromise(input)) { return fromPromise(input); } if (isAsyncIterable(input)) { return fromAsyncIterable(input); } if (isIterable(input)) { return fromIterable(input); } if (isReadableStreamLike(input)) { return fromReadableStreamLike(input); } } throw createInvalidObservableTypeError(input); } function fromInteropObservable(obj) { return new Observable(function(subscriber) { var obs = obj[observable](); if (isFunction(obs.subscribe)) { return obs.subscribe(subscriber); } throw new TypeError("Provided object does not correctly implement Symbol.observable"); }); } function fromArrayLike(array) { return new Observable(function(subscriber) { for (var i = 0; i < array.length && !subscriber.closed; i++) { subscriber.next(array[i]); } subscriber.complete(); }); } function fromPromise(promise) { return new Observable(function(subscriber) { promise.then(function(value) { if (!subscriber.closed) { subscriber.next(value); subscriber.complete(); } }, function(err) { return subscriber.error(err); }).then(null, reportUnhandledError); }); } function fromIterable(iterable) { return new Observable(function(subscriber) { var e_1, _a; try { for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) { var value = iterable_1_1.value; subscriber.next(value); if (subscriber.closed) { return; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1); } finally { if (e_1) throw e_1.error; } } subscriber.complete(); }); } function fromAsyncIterable(asyncIterable) { return new Observable(function(subscriber) { process(asyncIterable, subscriber).catch(function(err) { return subscriber.error(err); }); }); } function fromReadableStreamLike(readableStream) { return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream)); } function process(asyncIterable, subscriber) { var asyncIterable_1, asyncIterable_1_1; var e_2, _a; return __awaiter(this, void 0, void 0, function() { var value, e_2_1; return __generator(this, function(_b) { switch (_b.label) { case 0: _b.trys.push([0, 5, 6, 11]); asyncIterable_1 = __asyncValues(asyncIterable); _b.label = 1; case 1: return [4, asyncIterable_1.next()]; case 2: if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4]; value = asyncIterable_1_1.value; subscriber.next(value); if (subscriber.closed) { return [2]; } _b.label = 3; case 3: return [3, 1]; case 4: return [3, 11]; case 5: e_2_1 = _b.sent(); e_2 = { error: e_2_1 }; return [3, 11]; case 6: _b.trys.push([6, 9, 10]); if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8]; return [4, _a.call(asyncIterable_1)]; case 7: _b.sent(); _b.label = 8; case 8: return [3, 10]; case 9: if (e_2) throw e_2.error; return [7]; case 10: return [7]; case 11: subscriber.complete(); return [2]; } }); }); } function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) { return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize); } var OperatorSubscriber = function(_super) { __extends(OperatorSubscriber2, _super); function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) { var _this = _super.call(this, destination) || this; _this.onFinalize = onFinalize; _this.shouldUnsubscribe = shouldUnsubscribe; _this._next = onNext ? function(value) { try { onNext(value); } catch (err) { destination.error(err); } } : _super.prototype._next; _this._error = onError ? function(err) { try { onError(err); } catch (err2) { destination.error(err2); } finally { this.unsubscribe(); } } : _super.prototype._error; _this._complete = onComplete ? function() { try { onComplete(); } catch (err) { destination.error(err); } finally { this.unsubscribe(); } } : _super.prototype._complete; return _this; } OperatorSubscriber2.prototype.unsubscribe = function() { var _a; if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) { var closed_1 = this.closed; _super.prototype.unsubscribe.call(this); !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this)); } }; return OperatorSubscriber2; }(Subscriber); function executeSchedule(parentSubscription, scheduler, work, delay, repeat) { if (delay === void 0) { delay = 0; } if (repeat === void 0) { repeat = false; } var scheduleSubscription = scheduler.schedule(function() { work(); if (repeat) { parentSubscription.add(this.schedule(null, delay)); } else { this.unsubscribe(); } }, delay); parentSubscription.add(scheduleSubscription); if (!repeat) { return scheduleSubscription; } } function map(project, thisArg) { return operate(function(source, subscriber) { var index = 0; source.subscribe(createOperatorSubscriber(subscriber, function(value) { subscriber.next(project.call(thisArg, value, index++)); })); }); } function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) { var buffer = []; var active = 0; var index = 0; var isComplete = false; var checkComplete = function() { if (isComplete && !buffer.length && !active) { subscriber.complete(); } }; var outerNext = function(value) { return active < concurrent ? doInnerSub(value) : buffer.push(value); }; var doInnerSub = function(value) { expand && subscriber.next(value); active++; var innerComplete = false; innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) { onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); if (expand) { outerNext(innerValue); } else { subscriber.next(innerValue); } }, function() { innerComplete = true; }, void 0, function() { if (innerComplete) { try { active--; var _loop_1 = function() { var bufferedValue = buffer.shift(); if (innerSubScheduler) { executeSchedule(subscriber, innerSubScheduler, function() { return doInnerSub(bufferedValue); }); } else { doInnerSub(bufferedValue); } }; while (buffer.length && active < concurrent) { _loop_1(); } checkComplete(); } catch (err) { subscriber.error(err); } } })); }; source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() { isComplete = true; checkComplete(); })); return function() { additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer(); }; } function mergeMap(project, resultSelector, concurrent) { if (concurrent === void 0) { concurrent = Infinity; } if (isFunction(resultSelector)) { return mergeMap(function(a, i) { return map(function(b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent); } else if (typeof resultSelector === "number") { concurrent = resultSelector; } return operate(function(source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); }); } function mergeAll(concurrent) { if (concurrent === void 0) { concurrent = Infinity; } return mergeMap(identity, concurrent); } function concatAll() { return mergeAll(1); } function concatMap(project, resultSelector) { return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1); } class IframeUtils { static getIframes(element) { return Array.from(element.querySelectorAll("iframe")); } static getAllNestedIframes(element) { const iframes = IframeUtils.getIframes(element); if (iframes.length === 0) { return rxjs.of([]); } else { return rxjs.from(iframes).pipe( mergeMap( (iframe) => new rxjs.Observable((subscriber) => { if (iframe.contentDocument) { const iframeDocument = iframe.contentDocument; const nestedIframes = IframeUtils.getAllNestedIframes(iframeDocument.documentElement); nestedIframes.subscribe((nestedIframes2) => { subscriber.next([iframe, ...nestedIframes2]); subscriber.complete(); }); } else { subscriber.next([]); subscriber.complete(); } }) ), concatAll(), rxjs.toArray() ); } } } var Typr$1 = {}; var Typr = {}; Typr.parse = function(buff) { var bin = Typr._bin; var data = new Uint8Array(buff); 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(Typr._readFont(data, foff)); } return fnts; } else return [Typr._readFont(data, 0)]; }; Typr._readFont = function(data, offset) { var bin = Typr._bin; var ooff = offset; 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; var tags = [ "cmap", "head", "hhea", "maxp", "hmtx", "name", "OS/2", "post", //"cvt", //"fpgm", "loca", "glyf", "kern", //"prep" //"gasp" "CFF ", "GPOS", "GSUB", "SVG " //"VORG", ]; var obj = { _data: data, _offset: ooff }; var tabs = {}; for (var 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 (var i = 0; i < tags.length; i++) { var t = tags[i]; if (tabs[t]) obj[t.trim()] = Typr[t.trim()].parse(data, tabs[t].offset, tabs[t].length, obj); } return obj; }; Typr._tabOffset = function(data, tab, foff) { var bin = Typr._bin; 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); offset += 4; bin.readUint(data, offset); offset += 4; var toffset = bin.readUint(data, offset); offset += 4; bin.readUint(data, offset); offset += 4; if (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]) / (256 * 256 + 4); }, readF2dot14: function(data, o) { var num = Typr._bin.readShort(data, o); return num / 16384; }, readInt: function(buff, p) { return Typr._bin._view(buff).getInt32(p); }, readInt8: function(buff, p) { return Typr._bin._view(buff).getInt8(p); }, readShort: function(buff, p) { return Typr._bin._view(buff).getInt16(p); }, readUshort: function(buff, p) { return Typr._bin._view(buff).getUint16(p); }, readUshorts: function(buff, p, len) { var arr = []; for (var i = 0; i < len; i++) arr.push(Typr._bin.readUshort(buff, p + i * 2)); return arr; }, readUint: function(buff, p) { return Typr._bin._view(buff).getUint32(p); }, readUint64: function(buff, p) { return Typr._bin.readUint(buff, p) * (4294967295 + 1) + Typr._bin.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; }, 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: typeof window !== "undefined" && window["TextDecoder"] ? new window["TextDecoder"]() : null, readUTF8: function(buff, p, l) { var tdec = Typr._bin._tdec; if (tdec && p == 0 && l == buff.length) return tdec["decode"](buff); return Typr._bin.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; }, _view: function(buff) { return buff._dataView || (buff._dataView = buff.buffer ? new DataView(buff.buffer, buff.byteOffset, buff.byteLength) : new DataView(new Uint8Array(buff).buffer)); } }; Typr._lctf = {}; Typr._lctf.parse = function(data, offset, length, font, subt) { var bin = Typr._bin; var obj = {}; var 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); 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); return obj; }; Typr._lctf.readLookupList = function(data, offset, subt) { var bin = Typr._bin; var offset0 = offset; var obj = []; var 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; var offset0 = offset; var 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; var ltype = obj.ltype; for (var i = 0; i < cnt; i++) { var noff = bin.readUshort(data, offset); offset += 2; var tab = subt(data, ltype, offset0 + noff, obj); obj.tabs.push(tab); } return obj; }; Typr._lctf.numOfOnes = function(n) { var num = 0; for (var i = 0; i < 32; i++) if ((n >>> i & 1) != 0) num++; return num; }; Typr._lctf.readClassDef = function(data, offset) { var bin = Typr._bin; var obj = []; var format = bin.readUshort(data, offset); offset += 2; if (format == 1) { 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 (format == 2) { var count = bin.readUshort(data, offset); offset += 2; for (var 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]; tab[i + 2]; if (start <= val && val <= end) return i; } return -1; }; Typr._lctf.readCoverage = function(data, offset) { var bin = Typr._bin; var cvg = {}; cvg.fmt = bin.readUshort(data, offset); offset += 2; var count = bin.readUshort(data, offset); offset += 2; if (cvg.fmt == 1) cvg.tab = bin.readUshorts(data, offset, count); if (cvg.fmt == 2) cvg.tab = bin.readUshorts(data, offset, count * 3); return cvg; }; Typr._lctf.coverageIndex = function(cvg, val) { var tab = cvg.tab; if (cvg.fmt == 1) return tab.indexOf(val); if (cvg.fmt == 2) { var ind = Typr._lctf.getInterval(tab, val); if (ind != -1) return tab[ind + 2] + (val - tab[ind]); } return -1; }; Typr._lctf.readFeatureList = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = []; var 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; var feat = Typr._lctf.readFeatureTable(data, offset0 + noff); feat.tag = tag.trim(); obj.push(feat); } return obj; }; Typr._lctf.readFeatureTable = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var feat = {}; var featureParams = bin.readUshort(data, offset); offset += 2; if (featureParams > 0) { feat.featureParams = offset0 + featureParams; } var lookupCount = bin.readUshort(data, offset); offset += 2; feat.tab = []; for (var i = 0; i < lookupCount; i++) feat.tab.push(bin.readUshort(data, offset + 2 * i)); return feat; }; Typr._lctf.readScriptList = function(data, offset) { var bin = Typr._bin; var offset0 = offset; var obj = {}; var 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; var offset0 = offset; var obj = {}; var defLangSysOff = bin.readUshort(data, offset); offset += 2; if (defLangSysOff > 0) { 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; var obj = {}; bin.readUshort(data, offset); offset += 2; obj.reqFeature = bin.readUshort(data, offset); offset += 2; var featureCount = bin.readUshort(data, offset); offset += 2; obj.features = bin.readUshorts(data, offset, featureCount); return 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]; offset++; data[offset]; offset++; data[offset]; offset++; data[offset]; offset++; var ninds = []; offset = Typr.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 = Typr.CFF.readIndex(data, offset, tdinds); var topDicts = []; for (var 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]; var sinds = []; offset = Typr.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]; Typr.CFF.readSubrs(data, offset, topdict); if (topdict.CharStrings) { offset = topdict.CharStrings; var sinds = []; offset = Typr.CFF.readIndex(data, offset, sinds); var cstr = []; for (var i = 0; i < sinds.length - 1; i++) cstr.push(bin.readBytes(data, offset + sinds[i], sinds[i + 1] - sinds[i])); topdict.CharStrings = cstr; } if (topdict.ROS) { offset = topdict.FDArray; var fdind = []; offset = Typr.CFF.readIndex(data, offset, fdind); topdict.FDArray = []; for (var i = 0; i < fdind.length - 1; i++) { var dict = Typr.CFF.readDict(data, offset + fdind[i], offset + fdind[i + 1]); Typr.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.Encoding) topdict.Encoding = Typr.CFF.readEncoding(data, topdict.Encoding, topdict.CharStrings.length); if (topdict.charset) topdict.charset = Typr.CFF.readCharset(data, topdict.charset, topdict.CharStrings.length); Typr.CFF._readFDict(data, topdict, strings); return topdict; }; Typr.CFF._readFDict = function(data, dict, ss) { var offset; if (dict.Private) { offset = dict.Private[1]; dict.Private = Typr.CFF.readDict(data, offset, offset + dict.Private[0]); if (dict.Private.Subrs) Typr.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]; }; Typr.CFF.readSubrs = function(data, offset, obj) { var bin = Typr._bin; var gsubinds = []; offset = Typr.CFF.readIndex(data, offset, gsubinds); var bias, nSubrs = gsubinds.length; if (nSubrs < 1240) bias = 107; else if (nSubrs < 33900) bias = 1131; else bias = 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) { if (charcode < 0 || charcode > 255) return -1; return Typr.CFF.glyphByUnicode(cff, Typr.CFF.tableSE[charcode]); }; Typr.CFF.readEncoding = function(data, offset, num) { Typr._bin; var array = [".notdef"]; var format = data[offset]; offset++; if (format == 0) { var nCodes = data[offset]; offset++; for (var i = 0; i < nCodes; i++) array.push(data[offset + i]); } else throw "error: unknown encoding format: " + format; return array; }; Typr.CFF.readCharset = function(data, offset, num) { var bin = Typr._bin; 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; }; Typr.CFF.readIndex = function(data, offset, inds) { var bin = Typr._bin; 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 (count != 1) throw "unsupported offset size: " + offsize + ", count: " + count; offset += count * offsize; return offset - 1; }; Typr.CFF.getCharString = function(data, offset, o) { var bin = Typr._bin; 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; }; Typr.CFF.readCharString = function(data, offset, length) { var end = offset + length; var bin = Typr._bin; 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; }; Typr.CFF.readDict = function(data, offset, end) { var bin = Typr._bin; 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", 0, 0, "LanguageGroup", "ExpansionFactor", "initialRandomSeed", "SyntheticBase", "PostScript", "BaseFontName", "BaseFontBlend", 0, 0, 0, 0, 0, 0, "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.cmap = {}; Typr.cmap.parse = function(data, offset, length) { data = new Uint8Array(data.buffer, offset, length); offset = 0; var bin = Typr._bin; var 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; var tind = offs.indexOf(noffset); if (tind == -1) { tind = obj.tables.length; var subt; offs.push(noffset); var format = bin.readUshort(data, noffset); if (format == 0) subt = Typr.cmap.parse0(data, noffset); else if (format == 4) subt = Typr.cmap.parse4(data, noffset); else if (format == 6) subt = Typr.cmap.parse6(data, noffset); else if (format == 12) subt = Typr.cmap.parse12(data, noffset); else console.warn("unknown format: " + format, platformID, encodingID, noffset); obj.tables.push(subt); } if (obj[id] != null) throw "multiple tables for one platform+encoding"; obj[id] = tind; } return obj; }; Typr.cmap.parse0 = function(data, offset) { var bin = Typr._bin; var 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; var offset0 = offset; var 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 += segCount * 2; offset += 2; obj.startCount = bin.readUshorts(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 = bin.readUshorts(data, offset, segCount); offset += segCount * 2; obj.glyphIdArray = []; while (offset < offset0 + length) { obj.glyphIdArray.push(bin.readUshort(data, offset)); offset += 2; } return obj; }; Typr.cmap.parse6 = function(data, offset) { var bin = Typr._bin; var 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; var 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 + i * 12; var startCharCode = bin.readUint(data, off + 0); var endCharCode = bin.readUint(data, off + 4); var startGlyphID = bin.readUint(data, off + 8); obj.groups.push([startCharCode, endCharCode, startGlyphID]); } return obj; }; Typr.glyf = {}; Typr.glyf.parse = function(data, offset, length, font) { var obj = []; for (var g = 0; g < font.maxp.numGlyphs; g++) obj.push(null); return obj; }; Typr.glyf._parseGlyf = function(font, g) { var bin = Typr._bin; var data = font._data; var offset = Typr._tabOffset(data, "glyf", font._offset) + font.loca[g]; if (font.loca[g] == font.loca[g + 1]) return null; 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.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, ltable) { var bin = Typr._bin, offset0 = offset, tab = {}; tab.fmt = bin.readUshort(data, offset); offset += 2; if (ltype == 1 || ltype == 2 || ltype == 3 || ltype == 7 || ltype == 8 && tab.fmt <= 2) { var covOff = bin.readUshort(data, offset); offset += 2; tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0); } if (ltype == 1 && tab.fmt == 1) { var valFmt1 = bin.readUshort(data, offset); offset += 2; var ones1 = Typr._lctf.numOfOnes(valFmt1); if (valFmt1 != 0) tab.pos = Typr.GPOS.readValueRecord(data, offset, valFmt1); } else if (ltype == 2 && tab.fmt >= 1 && tab.fmt <= 2) { var valFmt1 = bin.readUshort(data, offset); offset += 2; var valFmt2 = bin.readUshort(data, offset); offset += 2; var ones1 = Typr._lctf.numOfOnes(valFmt1); var ones2 = Typr._lctf.numOfOnes(valFmt2); if (tab.fmt == 1) { tab.pairsets = []; var psc = bin.readUshort(data, offset); offset += 2; for (var i = 0; i < psc; i++) { var psoff = offset0 + bin.readUshort(data, offset); offset += 2; var pvc = bin.readUshort(data, psoff); psoff += 2; var arr = []; for (var j = 0; j < pvc; j++) { var gid2 = bin.readUshort(data, psoff); psoff += 2; var value1, value2; if (valFmt1 != 0) { value1 = Typr.GPOS.readValueRecord(data, psoff, valFmt1); psoff += ones1 * 2; } if (valFmt2 != 0) { value2 = Typr.GPOS.readValueRecord(data, psoff, valFmt2); psoff += ones2 * 2; } arr.push({ gid2, val1: value1, val2: value2 }); } tab.pairsets.push(arr); } } if (tab.fmt == 2) { 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 (var i = 0; i < class1Count; i++) { var row = []; for (var j = 0; j < class2Count; j++) { var value1 = null, value2 = null; if (valFmt1 != 0) { value1 = Typr.GPOS.readValueRecord(data, offset, valFmt1); offset += ones1 * 2; } if (valFmt2 != 0) { value2 = Typr.GPOS.readValueRecord(data, offset, valFmt2); offset += ones2 * 2; } row.push({ val1: value1, val2: value2 }); } tab.matrix.push(row); } } } else if (ltype == 9 && tab.fmt == 1) { var extType = bin.readUshort(data, offset); offset += 2; var extOffset = bin.readUint(data, offset); offset += 4; if (ltable.ltype == 9) { ltable.ltype = extType; } else if (ltable.ltype != extType) { throw "invalid extension substitution"; } return Typr.GPOS.subt(data, ltable.ltype, offset0 + extOffset); } else console.warn("unsupported GPOS table LookupType", ltype, "format", tab.fmt); return tab; }; Typr.GPOS.readValueRecord = function(data, offset, valFmt) { var bin = Typr._bin; var arr = []; arr.push(valFmt & 1 ? bin.readShort(data, offset) : 0); offset += valFmt & 1 ? 2 : 0; arr.push(valFmt & 2 ? bin.readShort(data, offset) : 0); offset += valFmt & 2 ? 2 : 0; arr.push(valFmt & 4 ? bin.readShort(data, offset) : 0); offset += valFmt & 4 ? 2 : 0; arr.push(valFmt & 8 ? bin.readShort(data, offset) : 0); offset += valFmt & 8 ? 2 : 0; return arr; }; 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, ltable) { var bin = Typr._bin, offset0 = offset, tab = {}; tab.fmt = bin.readUshort(data, offset); offset += 2; if (ltype != 1 && ltype != 4 && ltype != 5 && ltype != 6) return null; if (ltype == 1 || ltype == 4 || ltype == 5 && tab.fmt <= 2 || ltype == 6 && tab.fmt <= 2) { var covOff = bin.readUshort(data, offset); offset += 2; tab.coverage = Typr._lctf.readCoverage(data, offset0 + covOff); } if (ltype == 1 && tab.fmt >= 1 && tab.fmt <= 2) { if (tab.fmt == 1) { tab.delta = bin.readShort(data, offset); offset += 2; } else if (tab.fmt == 2) { var cnt = bin.readUshort(data, offset); offset += 2; tab.newg = bin.readUshorts(data, offset, cnt); offset += tab.newg.length * 2; } } else if (ltype == 4) { tab.vals = []; var 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 (ltype == 5 && tab.fmt == 2) { if (tab.fmt == 2) { 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 (var i = 0; i < subClassSetCount; i++) { var scsOff = bin.readUshort(data, offset); offset += 2; tab.scset.push(scsOff == 0 ? null : Typr.GSUB.readSubClassSet(data, offset0 + scsOff)); } } } else if (ltype == 6 && tab.fmt == 3) { if (tab.fmt == 3) { for (var i = 0; i < 3; i++) { var cnt = bin.readUshort(data, offset); offset += 2; var cvgs = []; for (var j = 0; j < cnt; j++) cvgs.push(Typr._lctf.readCoverage(data, offset0 + bin.readUshort(data, offset + j * 2))); offset += cnt * 2; if (i == 0) tab.backCvg = cvgs; if (i == 1) tab.inptCvg = cvgs; if (i == 2) tab.ahedCvg = cvgs; } var cnt = bin.readUshort(data, offset); offset += 2; tab.lookupRec = Typr.GSUB.readSubstLookupRecords(data, offset, cnt); } } else if (ltype == 7 && tab.fmt == 1) { var extType = bin.readUshort(data, offset); offset += 2; var extOffset = bin.readUint(data, offset); offset += 4; if (ltable.ltype == 9) { ltable.ltype = extType; } else if (ltable.ltype != extType) { throw "invalid extension substitution"; } return Typr.GSUB.subt(data, ltable.ltype, offset0 + extOffset); } else console.warn("unsupported GSUB table LookupType", ltype, "format", tab.fmt); return tab; }; Typr.GSUB.readSubClassSet = function(data, offset) { var rUs = Typr._bin.readUshort, offset0 = offset, lset = []; var 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 = {}; var gcount = rUs(data, offset); offset += 2; var scount = rUs(data, offset); offset += 2; rule.input = []; for (var i = 0; i < gcount - 1; i++) { rule.input.push(rUs(data, offset)); offset += 2; } rule.substLookupRecords = Typr.GSUB.readSubstLookupRecords(data, offset, scount); return rule; }; Typr.GSUB.readSubstLookupRecords = function(data, offset, cnt) { var rUs = Typr._bin.readUshort; var out = []; for (var 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 = []; var 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) { var bin = Typr._bin, rule = {}; var pps = ["backtrack", "input", "lookahead"]; for (var pi = 0; pi < pps.length; pi++) { var cnt = bin.readUshort(data, offset); offset += 2; if (pi == 1) cnt--; rule[pps[pi]] = bin.readUshorts(data, offset, cnt); offset += rule[pps[pi]].length * 2; } var cnt = bin.readUshort(data, offset); offset += 2; rule.subst = bin.readUshorts(data, offset, cnt * 2); offset += rule.subst.length * 2; return rule; }; Typr.GSUB.readLigatureSet = function(data, offset) { var bin = Typr._bin, offset0 = offset, lset = []; var 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; 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.hhea = {}; Typr.hhea.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; 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 += 4 * 2; obj.metricDataFormat = bin.readShort(data, offset); offset += 2; obj.numberOfHMetrics = bin.readUshort(data, offset); offset += 2; return obj; }; Typr.hmtx = {}; Typr.hmtx.parse = function(data, offset, length, font) { var bin = Typr._bin; var obj = {}; obj.aWidth = []; obj.lsBearing = []; var aw = 0, lsb = 0; for (var i = 0; i < font.maxp.numGlyphs; i++) { if (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; var version = bin.readUshort(data, offset); offset += 2; if (version == 1) return Typr.kern.parseV1(data, offset - 2, length, font); var nTables = bin.readUshort(data, offset); offset += 2; var map2 = { 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 = Typr.kern.readFormat0(data, offset, map2); else throw "unknown kern table format: " + format; } return map2; }; 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; var map2 = { 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 >>> 8; format &= 15; if (format == 0) offset = Typr.kern.readFormat0(data, offset, map2); else throw "unknown kern table format: " + format; } return map2; }; Typr.kern.readFormat0 = function(data, offset, map2) { var bin = Typr._bin; var pleft = -1; var 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; if (left != pleft) { map2.glyph1.push(left); map2.rval.push({ glyph2: [], vals: [] }); } var rval = map2.rval[map2.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; 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.maxp = {}; Typr.maxp.parse = function(data, offset, length) { var bin = Typr._bin; var obj = {}; var ver = bin.readUint(data, offset); offset += 4; obj.numGlyphs = bin.readUshort(data, offset); offset += 2; if (ver == 65536) { 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; } return obj; }; Typr.name = {}; Typr.name.parse = function(data, offset, length) { var bin = Typr._bin; 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; for (var 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; var slen = bin.readUshort(data, offset); offset += 2; var noffset = bin.readUshort(data, offset); offset += 2; var cname = names[nameID]; 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 (platformID == 1) { str = bin.readASCII(data, soff, slen); console.warn("reading unknown MAC encoding " + encodingID + " as ASCII"); } else throw "unknown encoding " + encodingID + ", platformID: " + platformID; var tid = "p" + platformID + "," + languageID.toString(16); if (obj[tid] == null) obj[tid] = {}; obj[tid][cname !== void 0 ? cname : nameID] = str; obj[tid]._lang = languageID; } for (var p in obj) if (obj[p].postScriptName != null && obj[p]._lang == 1033) return obj[p]; for (var p in obj) if (obj[p].postScriptName != null && obj[p]._lang == 0) return obj[p]; for (var p in obj) if (obj[p].postScriptName != null && obj[p]._lang == 3084) return obj[p]; for (var p in obj) if (obj[p].postScriptName != null) return obj[p]; var tname; for (var p in obj) { tname = p; break; } console.warn("returning name table with languageID " + obj[tname]._lang); return obj[tname]; }; Typr["OS/2"] = {}; Typr["OS/2"].parse = function(data, offset, length) { var bin = Typr._bin; var ver = bin.readUshort(data, offset); offset += 2; var obj = {}; if (ver == 0) Typr["OS/2"].version0(data, offset, obj); else if (ver == 1) Typr["OS/2"].version1(data, offset, obj); else if (ver == 2 || ver == 3 || ver == 4) Typr["OS/2"].version2(data, offset, obj); else if (ver == 5) Typr["OS/2"].version5(data, offset, obj); else throw "unknown OS/2 table version: " + ver; return obj; }; Typr["OS/2"].version0 = function(data, offset, obj) { var bin = Typr._bin; 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; return offset; }; Typr["OS/2"].version1 = function(data, offset, obj) { var bin = Typr._bin; offset = Typr["OS/2"].version0(data, offset, obj); obj.ulCodePageRange1 = bin.readUint(data, offset); offset += 4; obj.ulCodePageRange2 = bin.readUint(data, offset); offset += 4; return offset; }; Typr["OS/2"].version2 = function(data, offset, obj) { var bin = Typr._bin; 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; return offset; }; Typr["OS/2"].version5 = function(data, offset, obj) { var bin = Typr._bin; offset = Typr["OS/2"].version2(data, offset, obj); obj.usLowerOpticalPointSize = bin.readUshort(data, offset); offset += 2; obj.usUpperOpticalPointSize = bin.readUshort(data, offset); offset += 2; return offset; }; Typr.post = {}; Typr.post.parse = function(data, offset, length) { var bin = Typr._bin; 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.SVG = {}; Typr.SVG.parse = function(data, offset, length) { var bin = Typr._bin; 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.SVG.toPath = function(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.firstChild; while (svg.tagName != "svg") svg = svg.nextSibling; var vb = svg.getAttribute("viewBox"); if (vb) vb = vb.trim().split(" ").map(parseFloat); else vb = [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 -= vb[1]; y = -y; 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; var cfl = nd.getAttribute("fill"); if (cfl == null) cfl = fill; if (tn == "g") Typr.SVG._toPath(nd.children, pth, cfl); else if (tn == "path") { pth.cmds.push(cfl ? cfl : "#000000"); var d = nd.getAttribute("d"); var toks = Typr.SVG._tokens(d); Typr.SVG._toksToPath(toks, pth); pth.cmds.push("X"); } else if (tn == "defs") ; else console.warn(tn, nd); } }; Typr.SVG._tokens = function(d) { var ts = [], off = 0, rn = false, cn = ""; while (off < d.length) { var cc = d.charCodeAt(off), ch = d.charAt(off); off++; var isNum = 48 <= cc && cc <= 57 || ch == "." || ch == "-"; if (rn) { if (ch == "-") { 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); } } if (rn) ts.push(parseFloat(cn)); return ts; }; Typr.SVG._toksToPath = function(ts, pth) { var i = 0, x = 0, y = 0, ox = 0, oy = 0; var pc = { "M": 2, "L": 2, "H": 1, "V": 1, "S": 4, "C": 6 }; var cmds = pth.cmds, crds = pth.crds; while (i < ts.length) { var cmd = ts[i]; i++; if (cmd == "z") { cmds.push("Z"); x = ox; y = oy; } else { var cmu = cmd.toUpperCase(); var ps = pc[cmu], reps = Typr.SVG._reps(ts, i, ps); for (var j = 0; j < reps; j++) { 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 == "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 - 4, 0); 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 console.warn("Unknown SVG command " + cmd); } } } }; Typr.SVG._reps = function(ts, off, ps) { var i = off; while (i < ts.length) { if (typeof ts[i] == "string") break; i += ps; } return (i - off) / ps; }; if (Typr == null) Typr = {}; if (Typr.U == null) Typr.U = {}; Typr.U.codeToGlyph = function(font, code) { var cmap = font.cmap; for (var _i = 0, _a = [cmap.p0e4, cmap.p3e1, cmap.p3e10, cmap.p0e3, cmap.p1e0]; _i < _a.length; _i++) { var tind = _a[_i]; if (tind == null) continue; var tab = cmap.tables[tind]; if (tab.format == 0) { if (code >= tab.map.length) continue; return tab.map[code]; } else if (tab.format == 4) { var sind = -1; for (var i = 0; i < tab.endCount.length; i++) { if (code <= tab.endCount[i]) { sind = i; break; } } if (sind == -1) continue; if (tab.startCount[sind] > code) continue; 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]; } return gli & 65535; } else if (tab.format == 12) { if (code > tab.groups[tab.groups.length - 1][1]) continue; for (var 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]); } continue; } else { throw "unknown cmap table format " + tab.format; } } return 0; }; Typr.U.glyphToPath = function(font, gid) { var path = { cmds: [], crds: [] }; if (font.SVG && font.SVG.entries[gid]) { var p = font.SVG.entries[gid]; if (p == null) return path; if (typeof p == "string") { p = Typr.SVG.toPath(p); font.SVG.entries[gid] = p; } return p; } else 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 }; var cff = font.CFF, pdct = font.CFF.Private; if (cff.ROS) { var gi = 0; while (cff.FDSelect[gi + 2] <= gid) gi += 2; pdct = cff.FDArray[cff.FDSelect[gi + 1]].Private; } Typr.U._drawCFF(font.CFF.CharStrings[gid], state, cff, pdct, path); } else if (font.glyf) { Typr.U._drawGlyf(gid, font, path); } return path; }; Typr.U._drawGlyf = function(gid, font, path) { var gl = font.glyf[gid]; if (gl == null) gl = font.glyf[gid] = Typr.glyf._parseGlyf(font, gid); if (gl != null) { if (gl.noc > -1) { Typr.U._simpleGlyph(gl, path); } else { Typr.U._compoGlyph(gl, font, path); } } }; Typr.U._simpleGlyph = function(gl, 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) { Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]); } else { Typr.U.P.moveTo(p, x, y); continue; } } else { if (prOnCurve) { Typr.U.P.moveTo(p, gl.xs[pr], gl.ys[pr]); } else { Typr.U.P.moveTo(p, (gl.xs[pr] + x) / 2, (gl.ys[pr] + y) / 2); } } } if (onCurve) { if (prOnCurve) Typr.U.P.lineTo(p, x, y); } else { if (nxOnCurve) { Typr.U.P.qcurveTo(p, x, y, gl.xs[nx], gl.ys[nx]); } else { 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: [] }; 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]); } } }; Typr.U._getGlyphClass = function(g, cd) { var intr = Typr._lctf.getInterval(cd, g); return intr == -1 ? 0 : cd[intr + 2]; }; Typr.U.getPairAdjustment = function(font, g1, g2) { var hasGPOSkern = false; if (font.GPOS) { var gpos = font["GPOS"]; var llist = gpos.lookupList, flist = gpos.featureList; var tused = []; for (var i = 0; i < flist.length; i++) { var fl = flist[i]; if (fl.tag != "kern") continue; hasGPOSkern = true; for (var ti = 0; ti < fl.tab.length; ti++) { if (tused[fl.tab[ti]]) continue; tused[fl.tab[ti]] = true; var tab = llist[fl.tab[ti]]; for (var j = 0; j < tab.tabs.length; j++) { if (tab.tabs[j] == null) continue; var ltab = tab.tabs[j], ind; if (ltab.coverage) { ind = Typr._lctf.coverageIndex(ltab.coverage, g1); if (ind == -1) continue; } if (tab.ltype == 1) ; else if (tab.ltype == 2) { var adj = null; if (ltab.fmt == 1) { var right = ltab.pairsets[ind]; for (var i = 0; i < right.length; i++) { if (right[i].gid2 == g2) adj = right[i]; } } else if (ltab.fmt == 2) { var c1 = Typr.U._getGlyphClass(g1, ltab.classDef1); var c2 = Typr.U._getGlyphClass(g2, ltab.classDef2); adj = ltab.matrix[c1][c2]; } if (adj) { var offset = 0; if (adj.val1 && adj.val1[2]) offset += adj.val1[2]; if (adj.val2 && adj.val2[0]) offset += adj.val2[0]; return offset; } } } } } } if (font.kern && !hasGPOSkern) { var ind1 = font.kern.glyph1.indexOf(g1); if (ind1 != -1) { var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2); if (ind2 != -1) return font.kern.rval[ind1].vals[ind2]; } } return 0; }; Typr.U.stringToGlyphs = function(font, str) { 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)); } for (var i = 0; i < str.length; i++) { var cc = str.codePointAt(i); if (cc == 2367) { var t = gls[i - 1]; gls[i - 1] = gls[i]; gls[i] = t; } if (cc > 65535) i++; } var gsub = font["GSUB"]; if (gsub == null) return gls; var llist = gsub.lookupList, flist = gsub.featureList; var cligs = [ "rlig", "liga", "mset", "isol", "init", "fina", "medi", "half", "pres", "blws" /* Tibetan fonts like Himalaya.ttf */ ]; var tused = []; for (var fi = 0; fi < flist.length; fi++) { var fl = flist[fi]; if (cligs.indexOf(fl.tag) == -1) continue; for (var ti = 0; ti < fl.tab.length; ti++) { if (tused[fl.tab[ti]]) continue; tused[fl.tab[ti]] = true; var tab = llist[fl.tab[ti]]; for (var ci = 0; ci < gls.length; ci++) { var feat = Typr.U._getWPfeature(str, ci); if ("isol,init,fina,medi".indexOf(fl.tag) != -1 && fl.tag != feat) continue; Typr.U._applySubs(gls, ci, tab, llist); } } } return gls; }; Typr.U._getWPfeature = function(str, ci) { var wsep = '\n " ,.:;!?() ،'; var R = "آأؤإاةدذرزوٱٲٳٵٶٷڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙۀۃۄۅۆۇۈۉۊۋۍۏےۓەۮۯܐܕܖܗܘܙܞܨܪܬܯݍݙݚݛݫݬݱݳݴݸݹࡀࡆࡇࡉࡔࡧࡩࡪࢪࢫࢬࢮࢱࢲࢹૅેૉ૊૎૏ૐ૑૒૝ૡ૤૯஁ஃ஄அஉ஌எஏ஑னப஫஬"; var L = "ꡲ્૗"; var slft = ci == 0 || wsep.indexOf(str[ci - 1]) != -1; var srgt = ci == str.length - 1 || wsep.indexOf(str[ci + 1]) != -1; if (!slft && R.indexOf(str[ci - 1]) != -1) slft = true; if (!srgt && R.indexOf(str[ci]) != -1) srgt = true; if (!srgt && L.indexOf(str[ci + 1]) != -1) srgt = true; if (!slft && L.indexOf(str[ci]) != -1) slft = true; var feat = null; if (slft) { feat = srgt ? "isol" : "init"; } else { feat = srgt ? "fina" : "medi"; } return feat; }; Typr.U._applySubs = function(gls, ci, tab, llist) { var rlim = gls.length - ci - 1; for (var j = 0; j < tab.tabs.length; j++) { if (tab.tabs[j] == null) continue; var ltab = tab.tabs[j], ind; if (ltab.coverage) { ind = Typr._lctf.coverageIndex(ltab.coverage, gls[ci]); if (ind == -1) continue; } if (tab.ltype == 1) { gls[ci]; if (ltab.fmt == 1) gls[ci] = gls[ci] + ltab.delta; else gls[ci] = ltab.newg[ind]; } else if (tab.ltype == 4) { var vals = ltab.vals[ind]; for (var k = 0; k < vals.length; k++) { var lig = vals[k], rl = lig.chain.length; if (rl > rlim) continue; var good = true, em1 = 0; for (var l = 0; l < rl; l++) { while (gls[ci + em1 + (1 + l)] == -1) em1++; if (lig.chain[l] != gls[ci + em1 + (1 + l)]) good = false; } if (!good) continue; gls[ci] = lig.nglyph; for (var l = 0; l < rl + em1; l++) gls[ci + l + 1] = -1; break; } } else if (tab.ltype == 5 && ltab.fmt == 2) { var cind = Typr._lctf.getInterval(ltab.cDef, gls[ci]); var cls = ltab.cDef[cind + 2], scs = ltab.scset[cls]; for (var i = 0; i < scs.length; i++) { var sc = scs[i], inp = sc.input; if (inp.length > rlim) continue; var good = true; for (var l = 0; l < inp.length; l++) { var cind2 = Typr._lctf.getInterval(ltab.cDef, gls[ci + 1 + l]); if (cind == -1 && ltab.cDef[cind2 + 2] != inp[l]) { good = false; break; } } if (!good) continue; var lrs = sc.substLookupRecords; for (var k = 0; k < lrs.length; k += 2) { lrs[k]; lrs[k + 1]; } } } else if (tab.ltype == 6 && ltab.fmt == 3) { if (!Typr.U._glsCovered(gls, ltab.backCvg, ci - ltab.backCvg.length)) continue; if (!Typr.U._glsCovered(gls, ltab.inptCvg, ci)) continue; if (!Typr.U._glsCovered(gls, ltab.ahedCvg, ci + ltab.inptCvg.length)) continue; var lr = ltab.lookupRec; for (var i = 0; i < lr.length; i += 2) { var cind = lr[i], tab2 = llist[lr[i + 1]]; Typr.U._applySubs(gls, ci + cind, tab2, llist); } } } }; Typr.U._glsCovered = function(gls, cvgs, ci) { for (var i = 0; i < cvgs.length; i++) { var ind = Typr._lctf.coverageIndex(cvgs[i], gls[ci + i]); if (ind == -1) return false; } return true; }; Typr.U.glyphsToPath = function(font, gls, clr) { var tpath = { cmds: [], crds: [] }; var x = 0; for (var i = 0; i < gls.length; i++) { var gid = gls[i]; if (gid == -1) continue; var gid2 = i < gls.length - 1 && gls[i + 1] != -1 ? gls[i + 1] : 0; var path = Typr.U.glyphToPath(font, gid); for (var j = 0; j < path.crds.length; j += 2) { tpath.crds.push(path.crds[j] + x); tpath.crds.push(path.crds[j + 1]); } if (clr) tpath.cmds.push(clr); for (var j = 0; j < path.cmds.length; j++) tpath.cmds.push(path.cmds[j]); if (clr) tpath.cmds.push("X"); x += font.hmtx.aWidth[gid]; if (i < gls.length - 1) x += Typr.U.getPairAdjustment(font, gid, gid2); } return tpath; }; Typr.U.pathToSVG = function(path, prec) { if (prec == null) prec = 5; var out = [], co = 0, lmap = { "M": 2, "L": 2, "Q": 4, "C": 6 }; for (var i = 0; i < path.cmds.length; i++) { var cmd = path.cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0); out.push(cmd); while (co < cn) { var c = path.crds[co++]; out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " ")); } } return out.join(""); }; Typr.U.pathToContext = function(path, ctx) { var c = 0, crds = path.crds; for (var j = 0; j < path.cmds.length; j++) { var cmd = path.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(); } } }; 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, 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 o = { val: 0, size: 0 }; while (i < cmds.length) { Typr.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() + pdct.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() + pdct.nominalWidthX; } nStems += stack.length >> 1; stack.length = 0; haveWidth = true; } else if (v == "o4") { if (stack.length > 1 && !haveWidth) { width = stack.shift() + pdct.nominalWidthX; haveWidth = true; } if (open) Typr.U.P.closePath(p); y += stack.pop(); Typr.U.P.moveTo(p, x, y); open = true; } else if (v == "o5") { while (stack.length > 0) { x += stack.shift(); y += stack.shift(); Typr.U.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; Typr.U.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(); Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y); index += 6; } if (v == "o24") { x += stack.shift(); y += stack.shift(); Typr.U.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(); Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.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(); Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.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(); Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.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(); } Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, jpx, jpy); Typr.U.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 bind2 = Typr.CFF.glyphBySE(font, bchar); var aind = Typr.CFF.glyphBySE(font, achar); Typr.U._drawCFF(font.CharStrings[bind2], state, font, pdct, p); state.x = adx; state.y = ady; Typr.U._drawCFF(font.CharStrings[aind], state, font, pdct, p); } if (open) { Typr.U.P.closePath(p); open = false; } } else if (v == "o19" || v == "o20") { var hasWidthArg; hasWidthArg = stack.length % 2 !== 0; if (hasWidthArg && !haveWidth) { width = stack.shift() + pdct.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() + pdct.nominalWidthX; haveWidth = true; } y += stack.pop(); x += stack.pop(); if (open) Typr.U.P.closePath(p); Typr.U.P.moveTo(p, x, y); open = true; } else if (v == "o22") { if (stack.length > 1 && !haveWidth) { width = stack.shift() + pdct.nominalWidthX; haveWidth = true; } x += stack.pop(); if (open) Typr.U.P.closePath(p); Typr.U.P.moveTo(p, x, y); open = true; } else if (v == "o25") { while (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 (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(); Typr.U.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; Typr.U.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.warn("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; } Typr.U.P.curveTo(p, c1x, c1y, c2x, c2y, x, y); index += 4; } } else if ((v + "").charAt(0) == "o") { console.warn("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; }; Typr$1.Typr = Typr; var Typr_js_1 = Typr$1; var friendlyTags = { "aalt": "Access All Alternates", "abvf": "Above-base Forms", "abvm": "Above - base Mark Positioning", "abvs": "Above - base Substitutions", "afrc": "Alternative Fractions", "akhn": "Akhands", "blwf": "Below - base Forms", "blwm": "Below - base Mark Positioning", "blws": "Below - base Substitutions", "calt": "Contextual Alternates", "case": "Case - Sensitive Forms", "ccmp": "Glyph Composition / Decomposition", "cfar": "Conjunct Form After Ro", "cjct": "Conjunct Forms", "clig": "Contextual Ligatures", "cpct": "Centered CJK Punctuation", "cpsp": "Capital Spacing", "cswh": "Contextual Swash", "curs": "Cursive Positioning", "c2pc": "Petite Capitals From Capitals", "c2sc": "Small Capitals From Capitals", "dist": "Distances", "dlig": "Discretionary Ligatures", "dnom": "Denominators", "dtls": "Dotless Forms", "expt": "Expert Forms", "falt": "Final Glyph on Line Alternates", "fin2": "Terminal Forms #2", "fin3": "Terminal Forms #3", "fina": "Terminal Forms", "flac": "Flattened accent forms", "frac": "Fractions", "fwid": "Full Widths", "half": "Half Forms", "haln": "Halant Forms", "halt": "Alternate Half Widths", "hist": "Historical Forms", "hkna": "Horizontal Kana Alternates", "hlig": "Historical Ligatures", "hngl": "Hangul", "hojo": "Hojo Kanji Forms(JIS X 0212 - 1990 Kanji Forms)", "hwid": "Half Widths", "init": "Initial Forms", "isol": "Isolated Forms", "ital": "Italics", "jalt": "Justification Alternates", "jp78": "JIS78 Forms", "jp83": "JIS83 Forms", "jp90": "JIS90 Forms", "jp04": "JIS2004 Forms", "kern": "Kerning", "lfbd": "Left Bounds", "liga": "Standard Ligatures", "ljmo": "Leading Jamo Forms", "lnum": "Lining Figures", "locl": "Localized Forms", "ltra": "Left - to - right alternates", "ltrm": "Left - to - right mirrored forms", "mark": "Mark Positioning", "med2": "Medial Forms #2", "medi": "Medial Forms", "mgrk": "Mathematical Greek", "mkmk": "Mark to Mark Positioning", "mset": "Mark Positioning via Substitution", "nalt": "Alternate Annotation Forms", "nlck": "NLC Kanji Forms", "nukt": "Nukta Forms", "numr": "Numerators", "onum": "Oldstyle Figures", "opbd": "Optical Bounds", "ordn": "Ordinals", "ornm": "Ornaments", "palt": "Proportional Alternate Widths", "pcap": "Petite Capitals", "pkna": "Proportional Kana", "pnum": "Proportional Figures", "pref": "Pre - Base Forms", "pres": "Pre - base Substitutions", "pstf": "Post - base Forms", "psts": "Post - base Substitutions", "pwid": "Proportional Widths", "qwid": "Quarter Widths", "rand": "Randomize", "rclt": "Required Contextual Alternates", "rkrf": "Rakar Forms", "rlig": "Required Ligatures", "rphf": "Reph Forms", "rtbd": "Right Bounds", "rtla": "Right - to - left alternates", "rtlm": "Right - to - left mirrored forms", "ruby": "Ruby Notation Forms", "rvrn": "Required Variation Alternates", "salt": "Stylistic Alternates", "sinf": "Scientific Inferiors", "size": "Optical size", "smcp": "Small Capitals", "smpl": "Simplified Forms", "ssty": "Math script style alternates", "stch": "Stretching Glyph Decomposition", "subs": "Subscript", "sups": "Superscript", "swsh": "Swash", "titl": "Titling", "tjmo": "Trailing Jamo Forms", "tnam": "Traditional Name Forms", "tnum": "Tabular Figures", "trad": "Traditional Forms", "twid": "Third Widths", "unic": "Unicase", "valt": "Alternate Vertical Metrics", "vatu": "Vattu Variants", "vert": "Vertical Writing", "vhal": "Alternate Vertical Half Metrics", "vjmo": "Vowel Jamo Forms", "vkna": "Vertical Kana Alternates", "vkrn": "Vertical Kerning", "vpal": "Proportional Alternate Vertical Metrics", "vrt2": "Vertical Alternates and Rotation", "vrtr": "Vertical Alternates for Rotation", "zero": "Slashed Zero" }; var Font = ( /** @class */ function() { function Font2(data) { var obj = Typr_js_1.Typr.parse(data); if (!obj.length || typeof obj[0] !== "object" || typeof obj[0].hasOwnProperty !== "function") { throw "unable to parse font"; } for (var n in obj[0]) { this[n] = obj[0][n]; } this.enabledGSUB = {}; } Font2.prototype.getFamilyName = function() { return this.name && (this.name.typoFamilyName || this.name.fontFamily) || ""; }; Font2.prototype.getSubFamilyName = function() { return this.name && (this.name.typoSubfamilyName || this.name.fontSubfamily) || ""; }; Font2.prototype.glyphToPath = function(gid) { return Typr_js_1.Typr.U.glyphToPath(this, gid); }; Font2.prototype.getPairAdjustment = function(gid1, gid2) { return Typr_js_1.Typr.U.getPairAdjustment(this, gid1, gid2); }; Font2.prototype.stringToGlyphs = function(str) { return Typr_js_1.Typr.U.stringToGlyphs(this, str); }; Font2.prototype.glyphsToPath = function(gls) { return Typr_js_1.Typr.U.glyphsToPath(this, gls); }; Font2.prototype.pathToSVG = function(path, prec) { return Typr_js_1.Typr.U.pathToSVG(path, prec); }; Font2.prototype.pathToContext = function(path, ctx) { return Typr_js_1.Typr.U.pathToContext(path, ctx); }; Font2.prototype.lookupFriendlyName = function(table, feature) { if (this[table] !== void 0) { var tbl = this[table]; var feat = tbl.featureList[feature]; return this.featureFriendlyName(feat); } return ""; }; Font2.prototype.featureFriendlyName = function(feature) { if (friendlyTags[feature.tag]) { return friendlyTags[feature.tag]; } if (feature.tag.match(/ss[0-2][0-9]/)) { var name_1 = "Stylistic Set " + Number(feature.tag.substr(2, 2)).toString(); if (feature.featureParams) { var version = Typr_js_1.Typr._bin.readUshort(this._data, feature.featureParams); if (version === 0) { var nameID = Typr_js_1.Typr._bin.readUshort(this._data, feature.featureParams + 2); if (this.name && this.name[nameID] !== void 0) { return name_1 + " - " + this.name[nameID]; } } } return name_1; } if (feature.tag.match(/cv[0-9][0-9]/)) { return "Character Variant " + Number(feature.tag.substr(2, 2)).toString(); } return ""; }; Font2.prototype.enableGSUB = function(featureNumber) { if (this.GSUB) { var feature = this.GSUB.featureList[featureNumber]; if (feature) { for (var i = 0; i < feature.tab.length; ++i) { this.enabledGSUB[feature.tab[i]] = (this.enabledGSUB[feature.tab[i]] || 0) + 1; } } } }; Font2.prototype.disableGSUB = function(featureNumber) { if (this.GSUB) { var feature = this.GSUB.featureList[featureNumber]; if (feature) { for (var i = 0; i < feature.tab.length; ++i) { if (this.enabledGSUB[feature.tab[i]] > 1) { --this.enabledGSUB[feature.tab[i]]; } else { delete this.enabledGSUB[feature.tab[i]]; } } } } }; Font2.prototype.codeToGlyph = function(code) { var g = Typr_js_1.Typr.U.codeToGlyph(this, code); if (this.GSUB) { var gls = [g]; for (var n in this.enabledGSUB) { var l = this.GSUB.lookupList[n]; Typr_js_1.Typr.U._applySubs(gls, 0, l, this.GSUB.lookupList); } if (gls.length === 1) return gls[0]; } return g; }; return Font2; }() ); var Font_1 = Font; function decrypt(iframeDocument) { var _a, _b, _c; const styles = iframeDocument.querySelectorAll("style"); let tip; for (let i = 0; i < styles.length; i++) { if ((_a = styles[i].textContent) == null ? void 0 : _a.includes("font-cxsecret")) { tip = styles[i]; break; } } if (!tip) return; const fontData = (_c = (_b = tip.textContent) == null ? void 0 : _b.match(/base64,([\w\W]+?)'/)) == null ? void 0 : _c[1]; if (!fontData) return; const fontBuffer = base64ToArrayBuffer(fontData); const font = new Font_1(fontBuffer); const table = JSON.parse(_GM_getResourceText("ttf")); const match = {}; for (let i = 19968; i < 40870; i++) { const glyph = font.codeToGlyph(i); if (!glyph) continue; const path = font.glyphToPath(glyph); const hash = md5(JSON.stringify(path)).slice(24); match[i] = table[hash]; } const elements = iframeDocument.querySelectorAll(".font-cxsecret"); for (let i = 0; i < elements.length; i++) { const el = elements[i]; let html = el.innerHTML; for (const key in match) { const value = String.fromCharCode(match[key]); const regExp = new RegExp(String.fromCharCode(Number(key)), "g"); html = html.replace(regExp, value); } el.innerHTML = html; el.classList.remove("font-cxsecret"); } function base64ToArrayBuffer(base64) { const data = window.atob(base64); const buffer = new ArrayBuffer(data.length); const bytes = new Uint8Array(buffer); for (let i = 0; i < data.length; ++i) { bytes[i] = data.charCodeAt(i); } return buffer; } } class BaseQuestionHandler { constructor() { __publicField(this, "_document", document); __publicField(this, "_window", _unsafeWindow); __publicField(this, "addLog"); __publicField(this, "addQuestion"); __publicField(this, "questions", []); __publicField(this, "correctNum", 0); __publicField(this, "parseHtml", () => { throw new Error("请使用继承类的重写方法"); }); __publicField(this, "fillQuestion", (question) => { throw new Error("请使用继承类的重写方法"); }); __publicField(this, "removeHtml", (html) => { if (html == null) { return ""; } return html.replace(/<((?!img|sub|sup|br)[^>]+)>/g, "").replace(/ /g, " ").replace(/\s+/g, " ").replace(//g, "\n").replace(//g, '').trim(); }); __publicField(this, "clean", (str) => { return str.replace(/^【*?】\s*/, "").replace(/\s*(\d+\.\d+分)$/, ""); }); __publicField(this, "extractAnswerLetters", (answer) => { const raw = String(answer == null ? "" : answer).trim(); if (!raw) return []; const upper = raw.toUpperCase(); const fullwidth = upper.match(/[A-Z]/g) || []; const ascii = upper.match(/[A-Z]/g) || []; if (ascii.length) return ascii; if (fullwidth.length) return fullwidth.map((ch) => String.fromCharCode(ch.charCodeAt(0) - 65248)); return []; }); __publicField(this, "isPureLetterAnswer", (answer) => { const raw = String(answer == null ? "" : answer).trim(); if (!raw) return false; return /^[A-Za-zA-Z]([A-Za-zA-Z,,、\s]*)$/.test(raw); }); __publicField(this, "findMatchedOption", (options, answer) => { const entries = Object.entries(options || {}); if (entries.length && this.isPureLetterAnswer(answer)) { const letters = this.extractAnswerLetters(answer); const picked = []; for (const letter of letters) { const index = letter.charCodeAt(0) - 65; if (index >= 0 && index < entries.length) picked.push(entries[index]); } if (picked.length === 1) return picked[0][1]; if (picked.length > 1) { const virtual = {}; for (const [text, element] of picked) virtual[text] = element; return virtual; } } const normalizedAnswer = this.normalizeOptionMatchText(String(answer)); if (!normalizedAnswer) return null; let bestElement = null; let bestScore = -1; for (const [optionText, optionElement] of entries) { const score = this.calculateTextSimilarity( this.normalizeOptionMatchText(optionText), normalizedAnswer ); if (score > bestScore) { bestElement = optionElement; bestScore = score; } } if (!bestElement) return null; return bestScore >= this.getAnswerSimilarityThreshold() ? bestElement : null; }); __publicField(this, "inferQuestionTypeByStructure", (questionElement, optionElements, optionTexts) => { if (this.hasCheckboxControl(questionElement, optionElements)) return "1"; if (this.isJudgementQuestion(questionElement, optionElements, optionTexts)) return "3"; if (this.hasRadioControl(questionElement, optionElements)) return "0"; if (optionElements.length > 0) return "0"; if (this.hasFillBlankControl(questionElement)) return "2"; if (this.hasLongTextControl(questionElement)) return "4"; return "8"; }); __publicField(this, "hasFillBlankControl", (questionElement) => { const textInputs = Array.from(questionElement.querySelectorAll("input")).filter((input) => { const type = (input.getAttribute("type") || "text").toLowerCase(); return ["", "text", "search", "number", "tel", "url", "email"].includes(type) && !input.disabled && !input.hidden; }); const textareas = questionElement.querySelectorAll("textarea"); const editableElements = questionElement.querySelectorAll('[contenteditable="true"]'); const inputLikeElements = questionElement.querySelectorAll('input, textarea, [contenteditable="true"]'); const hasBlankCue = Array.from(inputLikeElements).some((element) => { const attrs = [ element.getAttribute("class") || "", element.getAttribute("name") || "", element.getAttribute("placeholder") || "" ].join(" ").toLowerCase(); return attrs.includes("blank") || attrs.includes("填空"); }); const hasTextCue = /(?:___+|[{(\\[][^)}\\]]*[)}\\]])/.test(questionElement.textContent || "") && /填|空|blank/i.test(questionElement.textContent || ""); return textInputs.length > 0 || editableElements.length > 0 || textareas.length > 1 || hasBlankCue || textareas.length === 1 && hasTextCue; }); __publicField(this, "hasLongTextControl", (questionElement) => { return questionElement.querySelectorAll("textarea").length > 0; }); __publicField(this, "hasCheckboxControl", (questionElement, optionElements) => { if (questionElement.querySelector('input[type="checkbox"]')) return true; return optionElements.some((optionElement) => this.hasControlCue(optionElement, ["checkbox", "multi", "multiple"])); }); __publicField(this, "isJudgementQuestion", (questionElement, optionElements, optionTexts) => { if (optionTexts.length !== 2) return false; const judgementValues = optionTexts.map((optionText) => this.normalizeJudgementText(optionText)); return judgementValues.includes("true") && judgementValues.includes("false") && this.hasJudgementStructureCue(questionElement, optionElements); }); __publicField(this, "hasJudgementStructureCue", (questionElement, optionElements) => { const cueText = [ this.collectElementCueText(questionElement), ...optionElements.map((optionElement) => this.collectElementCueText(optionElement)) ].join(" ").toLowerCase(); const judgementCues = [ "judge", "judgement", "judgment", "truefalse", "true-false", "true_false", "判断", "对错" ]; if (judgementCues.some((cue) => cueText.includes(cue))) return true; const optionAriaLabels = optionElements.map((optionElement) => { var _a; return [ optionElement.getAttribute("aria-label"), (_a = optionElement.querySelector("[aria-label]")) == null ? void 0 : _a.getAttribute("aria-label") ].filter(Boolean).join(" "); }).join(" "); return optionAriaLabels.includes("对选择") && optionAriaLabels.includes("错选择"); }); __publicField(this, "hasRadioControl", (questionElement, optionElements) => { if (questionElement.querySelector('input[type="radio"]')) return true; return optionElements.some((optionElement) => this.hasControlCue(optionElement, ["radio"])); }); __publicField(this, "hasControlCue", (optionElement, cues) => { const cueText = this.collectElementCueText(optionElement).toLowerCase(); return cues.some((cue) => cueText.includes(cue)); }); __publicField(this, "collectElementCueText", (element) => { const cueAttributes = [ "aria-label", "class", "data", "data-qtype", "data-question-type", "data-type", "name", "role", "type", "value" ]; const cueElements = [ element, ...Array.from(element.querySelectorAll( cueAttributes.map((attribute) => `[${attribute}]`).join(",") )) ]; return cueElements.flatMap((cueElement) => cueAttributes.map((attribute) => cueElement.getAttribute(attribute) || "")).filter(Boolean).join(" "); }); __publicField(this, "getAnswerSimilarityThreshold", () => { const configStore = useConfigStore(); const thresholdParam = configStore.otherParams.params.find((param) => param.name.includes("相似")); const threshold = Number((thresholdParam == null ? void 0 : thresholdParam.value) ?? 85); if (!Number.isFinite(threshold)) return 85; return Math.min(100, Math.max(0, threshold)); }); __publicField(this, "normalizeOptionMatchText", (text) => { return this.clean(this.removeHtml(text)).replace(/\s]+).*?>/gi, "$1").replace(/&[a-z]+;/gi, "").replace(/^[a-z]\s*[..、:\]]\s*/i, "").replace(/[\s\u00a0]+/g, "").replace(/[,.,。、:;?!'""''「」【】《》()()\[\]{}【】<>]/g, "").toLowerCase(); }); __publicField(this, "calculateTextSimilarity", (left, right) => { if (!left || !right) return 0; if (left === right) return 100; const leftChars = Array.from(left); const rightChars = Array.from(right); const distance = this.getLevenshteinDistance(leftChars, rightChars); const maxLength = Math.max(leftChars.length, rightChars.length); return Math.round((1 - distance / maxLength) * 100); }); __publicField(this, "getLevenshteinDistance", (left, right) => { const distances = Array.from({ length: left.length + 1 }, (_, index) => index); right.forEach((rightChar, rightIndex) => { let previous = distances[0]; distances[0] = rightIndex + 1; left.forEach((leftChar, leftIndex) => { const current = distances[leftIndex + 1]; distances[leftIndex + 1] = leftChar === rightChar ? previous : Math.min(previous, distances[leftIndex], current) + 1; previous = current; }); }); return distances[left.length]; }); __publicField(this, "normalizeJudgementText", (optionText) => { const text = this.clean(optionText).replace(/[..、:\s]/g, "").toLowerCase(); if (/^(a)?(正确|是|对|√|t|true|right)$/.test(text)) return "true"; if (/^(b)?(错误|否|错|×|x|f|false|wrong)$/.test(text)) return "false"; return ""; }); const logStore = useLogStore(); const questionStore = useQuestionStore(); this.addLog = logStore.addLog; this.addQuestion = questionStore.addQuestion; } } class CxQuestionHandler extends BaseQuestionHandler { constructor(type, iframe) { super(); __publicField(this, "type"); __publicField(this, "init", async (isCurrent = () => true) => { var _a, _b; if (!isCurrent()) return 0; this.questions = []; this.correctNum = 0; this.parseHtml(); if (this.questions.length) { this.addLog(`嗅到 ${this.questions.length} 道题,开动啦~`, "primary"); for (const [index, parsedQuestion] of this.questions.entries()) { if (!isCurrent()) return 0; const question = vue.reactive({ ...parsedQuestion, answerStatus: "searching" }); this.addQuestion(question); /* v0.5.1:AI 一遍答不出来就重问,最多 HX_ASK_MAX_TRIES 遍; 连续 HX_ASK_MAX_TRIES 遍都拿不到答案,就跳过本题、继续下一道。 全程后台被动运行,不占配置项;每次重问与最终跳过都会在状态页留通知。 */ let answerData = null; let values = null; for (let attempt = 1; attempt <= HX_ASK_MAX_TRIES; attempt += 1) { if (!isCurrent()) return 0; answerData = await getAnswer(question); if (!isCurrent()) return 0; values = getAnswerValues(answerData, question); if (values == null ? void 0 : values.length) { if (attempt > 1) this.addLog(`第 ${index + 1} 题重问第 ${attempt} 遍,答出来啦~`, "primary"); break; } if (attempt < HX_ASK_MAX_TRIES) this.addLog(`第 ${index + 1} 题第 ${attempt} 遍没答出来,小鲸再问一遍(第 ${attempt + 1}/${HX_ASK_MAX_TRIES} 遍)~`, "warning"); } if (values == null ? void 0 : values.length) { question.answer = values; question.answerStatus = "success"; this.fillQuestion(question); this.addLog(`第 ${index + 1} 题拿下啦~`, "success"); this.correctNum += 1; } else { this.addLog(`第 ${index + 1} 题连问 ${HX_ASK_MAX_TRIES} 遍都没答出来,先跳过这题~ 看看为啥`, "warning"); question.answerStatus = "error"; question.answer = [((_b = answerData.error) == null ? void 0 : _b.message) || "未查询到答案"]; } } } else this.addLog("哦?这页没捞到题目喹", "danger"); return this.questions.length ? this.correctNum / this.questions.length * 100 : 0; }); __publicField(this, "parseHtml", () => { if (!this._document) return []; if (["zj"].includes(this.type)) { const questionElements = this._document.querySelectorAll(".TiMu"); this.addQuestions(questionElements); } else if (["zy", "ks"].includes(this.type)) { const questionElements = this._document.querySelectorAll(".questionLi"); this.addQuestions(questionElements); } }); __publicField(this, "fillQuestion", (question) => { var _a, _b; if (!this._window) return; if (question.type === "0" || question.type === "1") { const clickOption = (optionElement) => { if (!optionElement) return; if (["zj", "zy"].includes(this.type)) { if (optionElement.getAttribute("aria-checked") === "true") return; optionElement.click(); } else if (["ks"].includes(this.type)) { if (optionElement.querySelector(".check_answer")) return; if (optionElement.querySelector(".check_answer_dx")) return; optionElement.click(); } }; const joined = question.answer.map((answer) => String(answer)).join(","); if (this.isPureLetterAnswer(joined)) { for (const letter of this.extractAnswerLetters(joined)) { clickOption(this.findMatchedOption(question.options, letter)); } return; } question.answer.forEach((answer) => { clickOption(this.findMatchedOption(question.options, String(answer))); }); } else if (question.type === "2") { const textareaElements = question.element.querySelectorAll("textarea"); if (textareaElements.length === 0) return; textareaElements.forEach((textareaElement, index) => { try { const ueditor = this._window.UE.getEditor(textareaElement.name); ueditor.setContent(String(question.answer[index] ?? "")); } catch (e) { textareaElement.value = String(question.answer[index] ?? ""); } }); } else if (question.type === "3") { let answer = "true"; const judgeText = String(question.answer[0] ?? ""); if (judgeText.match(/(^|,)(错误|否|错|×|X|F|wr|wrong|false)(,|$)/)) { answer = "false"; } else if (judgeText.match(/(^|,)(正确|是|对|√|T|ri|right|true)(,|$)/)) { answer = "true"; } else { const entries = Object.entries(question.options || {}); if (entries.length && this.isPureLetterAnswer(judgeText)) { const index = this.extractAnswerLetters(judgeText)[0].charCodeAt(0) - 65; if (index >= 0 && index < entries.length) { const token = this.normalizeJudgementText(entries[index][0]); if (token) answer = token; } } } const trueOrFalse = { "true": "对", "false": "错" }; for (const key in question.options) { if (["zj", "zy"].includes(this.type)) { if ((_a = question.options[key].getAttribute("aria-label")) == null ? void 0 : _a.includes(`${trueOrFalse[answer]}选择`)) { if (question.options[key].getAttribute("aria-checked") === "true") return; (_b = question.options[key]) == null ? void 0 : _b.click(); } } else if (["ks"].includes(this.type)) { const optionElement = question.options[key].querySelector(`span[data='${answer}']`); if (optionElement == null ? void 0 : optionElement.querySelector(".check_answer")) return; optionElement == null ? void 0 : optionElement.click(); } } } else if (question.type === "4" || question.type === "6") { const textareaElement = question.element.querySelector("textarea"); if (!textareaElement) return; const ueditor = this._window.UE.getEditor(textareaElement.name); ueditor.setContent(String(question.answer[0] ?? "")); } else ; }); this.type = type; if (iframe) { this._document = iframe.contentDocument; this._window = iframe.contentWindow; } } extractOptions(optionElements, optionSelector) { const optionsObject = {}; const optionTexts = []; optionElements.forEach((optionElement) => { var _a; const optionTextContent = this.removeHtml(((_a = optionElement.querySelector(optionSelector)) == null ? void 0 : _a.innerHTML) || ""); optionsObject[optionTextContent] = optionElement; optionTexts.push(optionTextContent); }); return [optionsObject, optionTexts]; } addQuestions(questionElements) { questionElements.forEach((questionElement) => { var _a, _b, _c; let questionTitle = ""; let optionElements = []; let optionsObject = {}; let optionTexts = []; let searchStem = ""; let searchOptions = []; let questionKind; if (["zy", "ks"].includes(this.type)) { const titleElement = ((_a = questionElement == null ? void 0 : questionElement.querySelector("h3")) == null ? void 0 : _a.innerHTML) || ""; const colorShallowElement = ((_b = questionElement.querySelector(".colorShallow")) == null ? void 0 : _b.outerHTML) || ""; const titleSource = titleElement.split(colorShallowElement || "")[1] || ""; questionTitle = this.removeHtml(titleSource); const searchTitleSource = colorShallowElement ? titleSource : titleElement; searchStem = stripQuestionTypeLabel( extractRawTextFromHtml(searchTitleSource, this._document) ); const matchedOptionElements = questionElement.querySelectorAll(".answerBg"); optionElements = Array.from(matchedOptionElements); [optionsObject, optionTexts] = this.extractOptions(matchedOptionElements, ".answer_p"); searchOptions = Array.from(matchedOptionElements).map((optionElement) => stripOptionLabel(extractRawTextFromElement(optionElement.querySelector(".answer_p")))); } else if (["zj"].includes(this.type)) { const titleSource = ((_c = questionElement.querySelector(".fontLabel")) == null ? void 0 : _c.innerHTML) || ""; questionTitle = this.removeHtml(titleSource); searchStem = stripQuestionTypeLabel( extractRawTextFromHtml(titleSource, this._document) ); const matchedOptionElements = questionElement.querySelectorAll('[class*="before-after"]'); optionElements = Array.from(matchedOptionElements); [optionsObject, optionTexts] = this.extractOptions(matchedOptionElements, ".fl.after"); searchOptions = Array.from(matchedOptionElements).map((optionElement) => stripOptionLabel(extractRawTextFromElement(optionElement.querySelector(".fl.after")))); } questionKind = this.inferQuestionTypeByStructure(questionElement, optionElements, optionTexts); if (questionKind === "3") { searchOptions = optionElements.map((optionElement, index) => extractJudgementToken(optionElement, searchOptions[index] || optionTexts[index]) || searchOptions[index]); } this.questions.push({ element: questionElement, type: questionKind, title: this.clean(questionTitle), optionsText: optionTexts, options: optionsObject, searchText: { stem: searchStem, options: searchOptions }, answer: [], workType: this.type, refer: this._window.location.href }); }); } } const useCxChapterLogic = () => { const logStore = useLogStore(); const questionStore = useQuestionStore(); const init = () => { const currentUrl = window.location.href; if (!currentUrl.includes("&mooc2=1")) { window.location.href = currentUrl + "&mooc2=1"; } questionStore.clearQuestion(); logStore.addLog(`潜入章节页啦~`, "primary"); logStore.addLog(`正在翻任务点的贝壳…`, "warning"); }; const configStore = useConfigStore(); const HOME_TAB_NAME = "0"; const ANSWER_TAB_NAME2 = "1"; const PDF_COMPLETION_WAIT_SECONDS = 5; let runningIframeDocumentTasks = /* @__PURE__ */ new WeakMap(); let processedIframeDocuments = /* @__PURE__ */ new WeakSet(); let currentPage; let chapterController = new AbortController(); let currentWatchIframeTaskId = 0; let disposed = false; const isFinishedTask = (iframe) => { var _a; let element = iframe; while (element) { const className = typeof element.className === "string" ? element.className : ""; if (className.split(/\s+/).includes("ans-job-finished") || ((_a = element.classList) == null ? void 0 : _a.contains("ans-job-finished"))) return true; element = element.parentElement; } return false; }; const getChapterPage = () => { const iframe = document.documentElement.querySelector("iframe"); return { url: window.location.href, iframe, src: (iframe == null ? void 0 : iframe.src) || "", document: (iframe == null ? void 0 : iframe.contentDocument) || null }; }; const isSamePage = (left, right) => left.url === right.url && left.iframe === right.iframe && left.src === right.src && left.document === right.document; const onRootIframeLoad = () => processIframeTask(true); const processIframeTask = (force = false) => { var _a, _b; if (disposed) return; const page = getChapterPage(); const changed = !currentPage || !isSamePage(currentPage, page); if (!changed && !force) return; if (changed) { (_a = currentPage == null ? void 0 : currentPage.iframe) == null ? void 0 : _a.removeEventListener("load", onRootIframeLoad); chapterController.abort(); chapterController = new AbortController(); ++currentWatchIframeTaskId; runningIframeDocumentTasks = /* @__PURE__ */ new WeakMap(); processedIframeDocuments = /* @__PURE__ */ new WeakSet(); questionStore.clearQuestion(); configStore.menuIndex = HOME_TAB_NAME; currentPage = page; (_b = page.iframe) == null ? void 0 : _b.addEventListener("load", onRootIframeLoad); } if (!page.iframe || !page.document || page.document.readyState !== "complete" || page.document.URL === "about:blank") return; const signal = chapterController.signal; watchIframe(document.documentElement, { signal, // 直接检查页面,避免在轮询发现切换之前,旧请求已返回。 isCurrent: () => !signal.aborted && isSamePage(page, getChapterPage()) }); }; const watchIframe = (documentElement, context) => { const thisTaskId = ++currentWatchIframeTaskId; IframeUtils.getAllNestedIframes(documentElement).subscribe((allIframes) => { rxjs.from(allIframes).pipe(concatMap((iframe) => { if (thisTaskId !== currentWatchIframeTaskId || !context.isCurrent()) return Promise.resolve(); return processIframe(iframe, context); })).subscribe({ complete: async () => { var _a; if (thisTaskId === currentWatchIframeTaskId && context.isCurrent()) { logStore.addLog(`本页啃完,游向下一章!`, "success"); if (configStore.platformParams.cx.parts[0].params[1].value) { const nextBtn = documentElement.querySelector("#prevNextFocusNext"); if (!nextBtn || nextBtn.style.display === "none") { logStore.addLog(`到最后一章啦,前面没路了`, "danger"); } else { await sleep(configStore.otherParams.params[0].value); if (thisTaskId !== currentWatchIframeTaskId || !context.isCurrent()) return; (_a = document.querySelector(".jb_btn.jb_btn_92.fr.fs14.nextChapter")) == null ? void 0 : _a.click(); } } else { logStore.addLog(`自动翻章关掉了哦`, "danger"); } } }, error: (error) => { if (context.isCurrent()) { logStore.addLog(`任务卡住了,呜…`, "danger"); } } }); }); }; const processMedia = async (mediaType, iframe, iframeDocument, context) => { return new Promise((resolve, reject) => { logStore.addLog(`捡到${mediaType},正在拆解~`, "warning"); logStore.addLog(`正在放${mediaType},小声点~`, "primary"); let isExecuted = false; let settled = false; let mediaElement = null; let quiz; let resuming = false; const cleanup = () => { clearInterval(intervalId2); quiz == null ? void 0 : quiz.dispose(); mediaElement == null ? void 0 : mediaElement.removeEventListener("pause", resume); mediaElement == null ? void 0 : mediaElement.removeEventListener("ended", ended); context.signal.removeEventListener("abort", finish); }; const finish = () => { if (settled) return; settled = true; cleanup(); mediaElement == null ? void 0 : mediaElement.pause(); resolve(); }; const fail = (error) => { if (settled) return; settled = true; cleanup(); reject(error); }; const resume = async () => { if (settled || resuming || (quiz == null ? void 0 : quiz.hasActiveQuiz())) return; resuming = true; try { await sleep(configStore.otherParams.params[0].value); if (settled) return; if (!context.isCurrent()) return finish(); if (isFinishedTask(iframe)) return finish(); if ((quiz == null ? void 0 : quiz.hasActiveQuiz()) || (mediaElement == null ? void 0 : mediaElement.ended)) return; await (mediaElement == null ? void 0 : mediaElement.play()); const resumeRateParam = configStore.platformParams.cx.parts[0].params.find((p) => p.name.includes("倍速")); mediaElement.playbackRate = Number(resumeRateParam == null ? void 0 : resumeRateParam.value) || 1; } catch (error) { fail(error); } finally { resuming = false; } }; const ended = () => { if (quiz == null ? void 0 : quiz.hasActiveQuiz()) return; if (context.isCurrent()) logStore.addLog(`${mediaType}放完啦~`, "success"); finish(); }; const intervalId2 = setInterval(async () => { if (settled) return; if (!context.isCurrent()) return finish(); if (!isExecuted) mediaElement = iframeDocument.documentElement.querySelector(mediaType); if (isFinishedTask(iframe)) { logStore.addLog(`${mediaType}早看过了,跳过~`, "success"); return finish(); } if (mediaElement && !isExecuted) { isExecuted = true; try { mediaElement.pause(); mediaElement.muted = true; const rateParam = configStore.platformParams.cx.parts[0].params.find((p) => p.name.includes("倍速")); mediaElement.playbackRate = Number(rateParam == null ? void 0 : rateParam.value) || 1; if (mediaType === "video") { quiz = watchVideoQuiz({ document: iframeDocument, signal: context.signal, isCurrent: () => !settled && context.isCurrent() && !isFinishedTask(iframe), isEnabled: () => { var _a; return ((_a = configStore.platformParams.cx.parts[0].params.find((param) => param.name === VIDEO_QUIZ_SETTING)) == null ? void 0 : _a.value) !== false; }, delayMs: () => Number(configStore.otherParams.params[0].value) * 1e3, search: (question, searchContext) => getAnswer(question, { ...searchContext, skipDelay: true }), similarityThreshold: () => { var _a; return Number(((_a = configStore.otherParams.params.find((param) => param.name.includes("相似"))) == null ? void 0 : _a.value) ?? 85); }, publishQuestion: (question) => { configStore.menuIndex = ANSWER_TAB_NAME2; const row = vue.reactive(question); questionStore.addQuestion(row); return row; }, onRelease: () => { if (mediaElement == null ? void 0 : mediaElement.ended) ended(); else if (mediaElement == null ? void 0 : mediaElement.paused) void resume(); }, log: (message, type) => logStore.addLog(message, type) }); } if (!(quiz == null ? void 0 : quiz.hasActiveQuiz())) await mediaElement.play(); if (settled) return; if (!context.isCurrent()) return finish(); if (isFinishedTask(iframe)) return finish(); if (!(quiz == null ? void 0 : quiz.hasActiveQuiz())) logStore.addLog("放得很顺,搞定~", "success"); mediaElement.addEventListener("pause", resume); mediaElement.addEventListener("ended", ended); if (mediaElement.ended) ended(); } catch (error) { fail(error); } } }, 2500); context.signal.addEventListener("abort", finish, { once: true }); if (!context.isCurrent()) finish(); }); }; const processWork = async (iframe, iframeDocument, iframeWindow, context) => { if (!context.isCurrent()) return; configStore.menuIndex = ANSWER_TAB_NAME2; logStore.addLog("发现作业,小鲸去瞄一眼~", "warning"); if (iframeDocument.documentElement.innerText.includes("已完成") || iframeDocument.documentElement.innerText.includes("待批阅")) { logStore.addLog("作业早就写完啦,跳过~", "success"); return; } decrypt(iframeDocument); logStore.addLog(`题目到手啦~`, "primary"); const correctRate = await new CxQuestionHandler("zj", iframe).init(context.isCurrent); if (!context.isCurrent()) return; iframeWindow.alert = () => { }; if (configStore.platformParams.cx.parts[0].params[0].value) { logStore.addLog("准备交卷咐…", "primary"); if (correctRate < Number(configStore.otherParams.params[1].value)) { logStore.addLog(`正确率才${configStore.otherParams.params[1].value}%,先攒着~`, "danger"); await iframeWindow.noSubmit(); } else { logStore.addLog(`正确率达标,交卷!`, "success"); await iframeWindow.btnBlueSubmit(); if (!context.isCurrent()) return; await sleep(configStore.otherParams.params[0].value / 2); if (!context.isCurrent()) return; await iframeWindow.submitCheckTimes(); if (!context.isCurrent()) return; logStore.addLog("交卷成功,耶~", "success"); } } else { logStore.addLog("没开自动交卷,先存着~", "primary"); await iframeWindow.noSubmit(); } if (context.isCurrent()) logStore.addLog("作业搞定啦~", "success"); }; const processPpt = async (iframeWindow, context) => { logStore.addLog("发现文档,正在啃~", "warning"); const document2 = iframeWindow.document; const viewerFrame = document2.querySelector("#panView"); const scrollViewer = () => { var _a, _b, _c; const viewerDocument = (viewerFrame == null ? void 0 : viewerFrame.contentDocument) || document2; const viewerWindow = (viewerFrame == null ? void 0 : viewerFrame.contentDocument) ? viewerFrame.contentWindow : iframeWindow; const top = Math.max( ((_a = viewerDocument.body) == null ? void 0 : _a.scrollHeight) || 0, ((_b = viewerDocument.documentElement) == null ? void 0 : _b.scrollHeight) || 0, ((_c = viewerDocument.scrollingElement) == null ? void 0 : _c.scrollHeight) || 0 ); viewerWindow == null ? void 0 : viewerWindow.scrollTo({ top, behavior: "smooth" }); }; scrollViewer(); const configuredInterval = Number(configStore.otherParams.params[0].value); await sleep(Math.max( PDF_COMPLETION_WAIT_SECONDS, Number.isFinite(configuredInterval) ? configuredInterval : 0 )); if (!context.isCurrent()) return; scrollViewer(); logStore.addLog("读完啦~", "success"); }; const processBook = async (iframeWindow) => { logStore.addLog("发现电子书,嗅嗅~", "warning"); _unsafeWindow.top.onchangepage(iframeWindow.getFrameAttr("end")); logStore.addLog("读完啦~", "success"); return Promise.resolve(); }; const runIframeDocumentTask = (iframeDocument, task) => { const processed = processedIframeDocuments; const running = runningIframeDocumentTasks; if (processed.has(iframeDocument)) return Promise.resolve(); const runningTask = running.get(iframeDocument); if (runningTask) return runningTask; const taskPromise = Promise.resolve().then(task).then(() => { processed.add(iframeDocument); }).finally(() => { running.delete(iframeDocument); }); running.set(iframeDocument, taskPromise); return taskPromise; }; const waitIframeLoad = async (iframe, context) => { return new Promise((resolve) => { const finish = () => { clearInterval(intervalId2); context.signal.removeEventListener("abort", finish); resolve(); }; const check = () => { var _a; if (!context.isCurrent() || !iframe.isConnected || ((_a = iframe.contentDocument) == null ? void 0 : _a.readyState) === "complete") finish(); }; const intervalId2 = setInterval(check, 500); context.signal.addEventListener("abort", finish, { once: true }); check(); }); }; const processIframeBody = async (iframe, iframeSrc, iframeDocument, iframeWindow, context) => { var _a, _b; if (!context.isCurrent()) return; if (iframeSrc.includes("javascript:")) return Promise.resolve(); if (isFinishedTask(iframe)) { configStore.menuIndex = iframeSrc.includes("api/work") ? ANSWER_TAB_NAME2 : HOME_TAB_NAME; if (iframeSrc.includes("video") || iframeSrc.includes("audio")) { (_a = iframeDocument.documentElement.querySelector("video, audio")) == null ? void 0 : _a.pause(); } logStore.addLog("任务点清空啦~", "success"); } else { if (iframeSrc.includes("api/work")) { return processWork(iframe, iframeDocument, iframeWindow, context); } if (configStore.platformParams.cx.parts[0].params[2].value) { logStore.addLog("仅仅作答模式开启~", "primary"); } else { const ansJobIcon = (_b = iframe.parentElement) == null ? void 0 : _b.querySelector(".ans-job-icon"); if (ansJobIcon) { configStore.menuIndex = HOME_TAB_NAME; if (iframeSrc.includes("video")) { return processMedia("video", iframe, iframeDocument, context); } else if (iframeSrc.includes("audio")) { return processMedia("audio", iframe, iframeDocument, context); } else if (["ppt", "doc", "pptx", "docx", "pdf"].some((type) => iframeSrc.includes("modules/" + type))) { return processPpt(iframeWindow, context); } else if (["innerbook"].some((type) => iframeSrc.includes("modules/" + type))) { return processBook(iframeWindow); } } } } return Promise.resolve(); }; const processIframe = async (iframe, context) => { if (iframe.src.includes("javascript:")) return Promise.resolve(); if (!iframe.contentDocument || !iframe.contentWindow) return Promise.resolve(); await waitIframeLoad(iframe, context); if (!context.isCurrent() || !iframe.isConnected) return; const iframeSrc = iframe.src; const iframeDocument = iframe.contentDocument; const iframeWindow = iframe.contentWindow; if (!iframeDocument || !iframeWindow) return Promise.resolve(); const iframeContext = { signal: context.signal, isCurrent: () => context.isCurrent() && iframe.isConnected && iframe.contentDocument === iframeDocument && iframe.src === iframeSrc }; return runIframeDocumentTask(iframeDocument, () => processIframeBody( iframe, iframeSrc, iframeDocument, iframeWindow, iframeContext )); }; init(); processIframeTask(); const intervalId = setInterval(processIframeTask, 500); const observer = new MutationObserver(() => processIframeTask()); observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ["src"] }); vue.onBeforeUnmount(() => { var _a; disposed = true; clearInterval(intervalId); observer.disconnect(); (_a = currentPage == null ? void 0 : currentPage.iframe) == null ? void 0 : _a.removeEventListener("load", onRootIframeLoad); chapterController.abort(); }); }; const useCxWorkLogic = async () => { const logStore = useLogStore(); const questionStore = useQuestionStore(); questionStore.clearQuestion(); logStore.addLog(`游进作业页,准备答题~`, "primary"); logStore.addLog(`正在读题…`, "warning"); await new CxQuestionHandler("zy").init(); }; const NEXT_STEP_TEXT = "下一步"; const isVisibleElement = (element) => { const style2 = window.getComputedStyle(element); return style2.display !== "none" && style2.visibility !== "hidden" && style2.opacity !== "0" && element.getClientRects().length > 0; }; const clickNextStepButton = () => { const examDocument = _unsafeWindow.document || document; const buttons = Array.from(examDocument.querySelectorAll(".nextDiv a")); const nextStepButton = buttons.find((button) => { var _a, _b; return isVisibleElement(button) && (((_a = button.getAttribute("onclick")) == null ? void 0 : _a.includes("topreview")) || ((_b = button.textContent) == null ? void 0 : _b.trim()) === NEXT_STEP_TEXT); }); if (!nextStepButton) return false; nextStepButton.click(); return true; }; const useCxExamLogic = async () => { const logStore = useLogStore(); const configStore = useConfigStore(); const questionStore = useQuestionStore(); questionStore.clearQuestion(); logStore.addLog("进考场啦,加油~", "primary"); logStore.addLog("正在解析题目", "warning"); await new CxQuestionHandler("ks").init(); if (configStore.platformParams.cx.parts[1].params[0].value) { logStore.addLog("自动翻到下一题~", "success"); await sleep(configStore.otherParams.params[0].value); if (clickNextStepButton()) { logStore.addLog("这是最后一题咐~", "success"); return; } _unsafeWindow.getTheNextQuestion(1); } else { logStore.addLog("自动翻题关掉了哦", "danger"); } }; const DEFAULT_CARD_WIDTH = "310px"; const PANEL_HEIGHT = 500; const ANSWER_CARD_WIDTH = DEFAULT_CARD_WIDTH; const ANSWER_TAB_NAME = "1"; const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ __name: "Index", emits: ["customEvent"], setup(__props, { emit: __emit }) { var _a; const isShow = vue.ref(false); const configStore = useConfigStore(); const logStore = useLogStore(); const questionStore = useQuestionStore(); const emit = __emit; const url2 = window.location.href; const cardWidth = vue.computed(() => configStore.menuIndex === ANSWER_TAB_NAME ? ANSWER_CARD_WIDTH : DEFAULT_CARD_WIDTH); (_a = document.querySelector("li>a.experience:not([onclick])")) == null ? void 0 : _a.click(); logStore.addLog("协议按过爪印啦~", "success"); logStore.addLog("面板 0.5.1 已就位,D-Whaler 开工~", "success"); logStore.addLog("怪怪的…换个 Edge 浏览器试试?", "warning"); const urlLogicPairs = [ { keyword: "/mycourse/studentstudy", logic: useCxChapterLogic }, { keyword: "/mooc2/work/dowork", logic: useCxWorkLogic }, { keyword: "/exam-ans/exam", logic: useCxExamLogic }, { keyword: "mycourse/stu?courseid", logic: () => { logStore.addLog("这页没活儿,小鲸歇会儿~", "error"); } } ]; const updateVisible = (visible2) => { isShow.value = visible2; emit("customEvent", visible2); }; const executeLogicByUrl = (currentUrl) => { const matchedPair = urlLogicPairs.find(({ keyword }) => currentUrl.includes(keyword)); if (matchedPair) { matchedPair.logic(); updateVisible(true); return; } updateVisible(false); }; executeLogicByUrl(url2); const tabs = vue.computed(() => [ { name: "0", label: "状态", component: _sfc_main$8, props: { logList: logStore.logList } }, { name: ANSWER_TAB_NAME, label: "小鲸", component: _sfc_main$6, props: { questionList: questionStore.questionList } }, { name: "2", label: "配置", component: _sfc_main$7, props: { globalConfig: configStore } }, { name: "3", label: "引导", component: Tutorial }, { name: "4", label: "须知", component: ScriptTip } ]); return (_ctx, _cache) => { const _component_el_tab_pane = vue.resolveComponent("el-tab-pane"); const _component_el_tabs = vue.resolveComponent("el-tabs"); return vue.openBlock(), vue.createElementBlock("div", { style: vue.normalizeStyle({ width: cardWidth.value }), class: "card_content" }, [ vue.createVNode(_component_el_tabs, { modelValue: vue.unref(configStore).menuIndex, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(configStore).menuIndex = $event), class: "demo-tabs" }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tabs.value, (tab) => { return vue.openBlock(), vue.createBlock(_component_el_tab_pane, { key: tab.name, name: tab.name, label: tab.label }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tab.component), vue.mergeProps({ ref_for: true }, tab.props), null, 16)) ]), _: 2 }, 1032, ["name", "label"]); }), 128)) ]), _: 1 }, 8, ["modelValue"]) ], 4); }; } }); const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({ __name: "ZoomButtons", emits: ["toggleZoom"], setup(__props, { emit: __emit }) { const emit = __emit; const toggleZoom = (value) => { emit("toggleZoom", value); }; return (_ctx, _cache) => { const _component_el_icon = vue.resolveComponent("el-icon"); return vue.openBlock(), vue.createElementBlock("div", { onMousedown: _cache[2] || (_cache[2] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createVNode(_component_el_icon, { onClick: _cache[0] || (_cache[0] = ($event) => toggleZoom(true)), class: "zoom-icon", size: "small" }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(minus_default)) ]), _: 1 }), vue.createVNode(_component_el_icon, { onClick: _cache[1] || (_cache[1] = ($event) => toggleZoom(false)), class: "zoom-icon is-spaced", size: "small" }, { default: vue.withCtx(() => [ vue.createVNode(vue.unref(full_screen_default)) ]), _: 1 }) ], 32); }; } }); const _hoisted_1 = { class: "overlay" }; const _hoisted_2 = { class: "title" }; const _hoisted_3 = { class: "minus" }; const WINDOW_EDGE_OFFSET = 11; const PANEL_WIDTH = 310; const MINIMIZED_PANEL_HEIGHT = 35; const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({ __name: "layout", setup(__props) { const isShow = vue.ref(false); const configStore = useConfigStore(); sanitizeAiConfig(configStore); const currentPlatformName = vue.computed(() => configStore.platformParams[configStore.platformName].name); vue.watch(configStore, (newVal) => { persistConfig(newVal); }, { deep: true }); const isDragging = vue.ref(false); const offsetX = vue.ref(0); const offsetY = vue.ref(0); const moveStyle = vue.ref({ left: configStore.position.x, top: configStore.position.y }); const handleVisibleChange = (visible2) => { isShow.value = visible2; }; const startDrag = (event) => { isDragging.value = true; const header = event.currentTarget; offsetX.value = event.clientX - header.getBoundingClientRect().left; offsetY.value = event.clientY - header.getBoundingClientRect().top; document.addEventListener("mousemove", drag); document.addEventListener("mouseup", endDrag); }; const drag = (event) => { if (!isDragging.value) return; const x = event.clientX - offsetX.value; const y = event.clientY - offsetY.value; const nextLeft = `${x - WINDOW_EDGE_OFFSET}px`; const nextTop = `${y - WINDOW_EDGE_OFFSET}px`; moveStyle.value = { left: nextLeft, top: nextTop }; configStore.position.x = nextLeft; configStore.position.y = nextTop; if (x < 0) { moveStyle.value.left = "0px"; configStore.position.x = "0px"; } if (y < 0) { moveStyle.value.top = "0px"; configStore.position.y = "0px"; } if (x > window.innerWidth - PANEL_WIDTH) { const maxLeft = `${window.innerWidth - PANEL_WIDTH}px`; moveStyle.value.left = maxLeft; configStore.position.x = maxLeft; } if (y > window.innerHeight - MINIMIZED_PANEL_HEIGHT) { const maxTop = `${window.innerHeight - MINIMIZED_PANEL_HEIGHT}px`; moveStyle.value.top = maxTop; configStore.position.y = maxTop; } }; const endDrag = () => { isDragging.value = false; document.removeEventListener("mousemove", drag); document.removeEventListener("mouseup", endDrag); }; return (_ctx, _cache) => { const _component_el_icon = vue.resolveComponent("el-icon"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); const _component_el_text = vue.resolveComponent("el-text"); const _component_el_divider = vue.resolveComponent("el-divider"); const _component_el_card = vue.resolveComponent("el-card"); return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { style: vue.normalizeStyle(moveStyle.value), class: "main-page" }, [ vue.withDirectives(vue.createElementVNode("div", _hoisted_1, null, 512), [ [vue.vShow, isDragging.value] ]), vue.createVNode(_component_el_card, { "close-on-click-modal": false, "lock-scroll": false, modal: false, "show-close": false, "modal-class": "modal" }, { header: vue.withCtx(() => [ vue.createElementVNode("div", { class: "card-header", onMousedown: startDrag }, [ vue.createElementVNode("div", _hoisted_2, [ vue.createElementVNode("img", { class: "card-header__logo", src: HX_LOGO_SRC, alt: "" }), vue.createElementVNode("span", null, vue.toDisplayString(currentPlatformName.value), 1) ]), vue.createVNode(_sfc_main$2, { onToggleZoom: _cache[0] || (_cache[0] = ($event) => vue.unref(configStore).isMinus = $event) }) ], 32) ]), default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode(_sfc_main$3, { onCustomEvent: handleVisibleChange }, null, 512), [ [vue.vShow, !vue.unref(configStore).isMinus] ]), vue.withDirectives(vue.createElementVNode("div", _hoisted_3, [ vue.createVNode(_component_el_text, { type: "info", size: "small" }, { default: vue.withCtx(() => [ vue.createTextVNode("已最小化,点击上方按钮恢复") ]), _: 1 }), vue.createVNode(_component_el_divider, { class: "compact-divider", "border-style": "dashed" }) ], 512), [ [vue.vShow, vue.unref(configStore).isMinus] ]) ]), _: 1 }) ], 4)), [ [vue.vShow, isShow.value] ]); }; } }); const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "App", setup(__props) { const platformMatchers = [ { keyword: "chaoxing", platformName: "cx" } ]; const configStore = useConfigStore(); const url2 = window.location.href; const matchedPlatform = platformMatchers.find(({ keyword }) => url2.includes(keyword)); if (matchedPlatform) { configStore.platformName = matchedPlatform.platformName; } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(_sfc_main$1); }; } }); const cssLoader = (e) => { const t = GM_getResourceText(e); return GM_addStyle(t), t; }; cssLoader("ElementPlus"); const LAYOUT_CSS_PARTS = [ ".main-page .guide-page{box-sizing:border-box;max-height:min(400px,calc(100vh - 160px));max-height:min(400px,calc(100dvh - 160px));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:2px 4px 2px 0;color:#4e5969;font-size:12px;line-height:1.7;scrollbar-width:thin;scrollbar-color:#c7d7eb transparent}.main-page .guide-page:focus-visible{outline:2px solid #176ae5;outline-offset:2px;border-radius:8px}.main-page .guide-header{margin:0 0 10px;padding:11px 12px;border:1px solid #d9e8fc;border-radius:9px;background:linear-gradient(120deg,#edf5ff 0%,#f8fbff 100%)}.main-page .guide-heading-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.main-page .guide-title{margin:0;color:#174b94;font-size:13px;font-weight:600;line-height:1.6}.main-page .guide-tag{flex-shrink:0;padding:1px 7px;border:1px solid #d4e5fc;border-radius:20px;background-color:#fff;color:#2262", "b5;font-size:10px;line-height:18px}.main-page .guide-subtitle{margin:3px 0 0;color:#61758e;font-size:11px}.main-page .guide-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.main-page .guide-card{min-width:0;padding:10px;border:1px solid #e4eaf2;border-radius:8px;background-color:#fff}.main-page .guide-card-heading{display:flex;align-items:center;gap:8px;margin-bottom:6px}.main-page .guide-number{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;height:24px;border-radius:7px;background-color:#eaf3ff;color:#176ae5;font-size:11px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}.main-page .guide-card-title{margin:0;color:#263a55;font-size:12px;font-weight:600;line-height:1.6}.main-page .guide-copy{margin:0;overflow-wrap:anywhere}.main-page .guide-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin:10px 0 0;padd", "ing:9px 4px 7px;border-radius:7px;background-color:#f3f7fd;list-style:none}.main-page .guide-flow-step{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;color:#3a5a83;font-size:10px;line-height:18px;text-align:center}.main-page .guide-flow-step+.guide-flow-step:before{position:absolute;top:8px;left:-5px;width:5px;height:5px;border-top:1px solid #9cb8da;border-right:1px solid #9cb8da;content:\"\";transform:rotate(45deg)}.main-page .guide-flow-number{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid #d5e4f8;border-radius:50%;background-color:#fff;color:#176ae5;font-size:11px;font-weight:600;line-height:1}.main-page{--app-font-family: \"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Co", "lor Emoji\";--el-font-family: var(--app-font-family);z-index:100003;position:fixed;color:#1f2329;font-family:var(--app-font-family)!important;font-size:14px;line-height:1.5715;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.main-page *,.main-page input,.main-page button,.main-page textarea{font-family:var(--app-font-family)!important;letter-spacing:0}.main-page .el-card,.main-page .el-tabs,.main-page .el-text,.main-page .el-button,.main-page .el-input,.main-page .el-input__inner,.main-page .el-input-number,.main-page .el-table{font-family:var(--app-font-family)!important}.main-page .overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1001}.main-page .el-card{border:0}.main-page .card-header{display:flex;justify-content:space-between;flex-direction:row;align-items:center;margin:0;padding:0;cursor:move}.main-page .card-header ", ".title{font-size:14px;display:flex;align-items:center;justify-content:center;font-weight:500}.main-page .warning-icon{margin-left:5px}.main-page .zoom-icon{cursor:pointer}.main-page .zoom-icon.is-spaced{margin-left:8px}.main-page .minus{margin:5px 10px -10px 0}.main-page .compact-divider{margin:0}.main-page .demo-tabs{display:initial}.main-page .el-card__header{background-color:#1f71e0;color:#fff;padding:7px 10px 7px 16px;margin:0}.main-page .el-card__body{padding:0 16px 20px}.main-page .el-tabs__nav-wrap:after{height:1px}.main-page .el-tabs__active-bar{background-color:#176ae5}.main-page .el-tabs__item{font-size:13px;height:34px}.main-page .el-tabs__item.is-top{font-weight:400;color:#4e5969;padding:0 8px 0 12px}.main-page .el-tabs__item.is-active{font-weight:500;color:#176ae5;padding:0 8px 0 12px}.main-page .script-home{padding-top:2px}.main-page .announcement-board{box-sizing:border-bo", "x;margin:2px 0 10px;padding:8px 10px;border:1px solid #bae0ff;border-radius:6px;background-color:#e6f4ff}.main-page .announcement-heading{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:#0958d9;font-size:12px;font-weight:600;line-height:20px}.main-page .announcement-heading:before{content:\"\";width:6px;height:6px;flex:0 0 auto;border-radius:50%;background-color:#1677ff}.main-page .announcement-list{display:grid;gap:3px;margin:0;padding:0;list-style:none}.main-page .announcement-item{color:#1f2329;font-size:12px;line-height:20px;word-break:break-word}.main-page .log .el-text{font-weight:400;white-space:normal}.main-page .log-time{font-weight:400}.main-page .log-action-link{color:#176ae5;cursor:pointer;text-decoration:none}.main-page .log-action-link:hover{color:#409eff;text-decoration:underline}.main-page .log-divider{margin:0}.main-page .token-input,.main-page .question-li", "st{font-size:12px}.main-page .token-label{border-radius:0}.main-page .question_table{width:625px}.main-page .answer-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;padding:10px 2px 8px;font-size:11px;line-height:18px}.main-page .answer-legend>span{display:inline-flex;align-items:center;gap:5px}.main-page .answer-legend>span:before{content:\"\";width:6px;height:6px;border-radius:50%;background:currentColor}.main-page .answer-result{line-height:1.7;overflow-wrap:anywhere}.main-page .answer-result--success{color:#15803d}.main-page .answer-result--searching{color:#a15c08}.main-page .answer-result--error{color:#c73e38}.main-page .setting{margin-top:-8px;font-size:14px}.main-page .setting-section-title{font-size:13px}.main-page .setting-checkbox{margin-bottom:6px}.main-page .setting-number{margin-top:6px}.main-page .setting .el-", "form-item{margin-bottom:0}\n\n\n.main-page{--hx-bg:URL(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wgARCAM0AeADASIAAhEBAxEB/8QAGgABAQEBAQEBAAAAAAAAAAAAAQACAwYEBf/EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAwDAQACEAMQAAAB8jW+3PKVjrOk2CjobNIppNWO87Zt53cujTLo1cujVy6NsmrVzNpJmybSCqEthMCwTBMZtBm0GTZLg2Lg2LjOxcZ2S+Tq4/TUUU0WjSWjViyy6NWOzTLo1cuzVw6NXLo2zatXM2km1ZNpkVsFQlQlCZCaiaM2gzaFzaFyaDBslxnplcZ2NeQZ4fUk0lo0kzYtpFtWWrTLpbm2auHVq5dGmXVq5tWrmbSStzMpKoM2CwMoTBMEwGgJlyajJolznYuDeVxnpmXx1PD61oUdZ0imrHRpHRq5dGrnWjbLo1cOzVy7NXLo0y6NXNq0zM2WpSasm2YVTLSUwTBMBoCRQ0AaFyaJc53lc52L4yrz/WWR1nVjoUd51c63nTPUzq51vO7l0auNaNM60auXRu5tG2Zm5WUUbJlJomkqbCYLRBNRIQ0oMZkUNC5zvMuTWV8ZD5/r9cdeSa1nVjrOk1rOrnes6Z1rO7nW8budazu51vOrjWmZdG", "rl0auVNIppJq5USaSasqQaKoqgmAYKlBZcGgM6FzneZrxVXn+u6zqx1naWhTW86udaNXOtZ2zreN3GtZ3c63nVxrRq51vGmdJqx1nTKjYoooo1JU1VJTFUQwSFrNKDUDS5NC5NC5NZl8S15/sKasdCjo0jo1c7TVy7zu41vOmdbzu4d51c60audazpnSauXWdIo3KiNTLTVUjUVRVFUVQSBaypIA0uRFBJrxCPn+w6zqx1nSOhudbxtN6zq41vOrnes6uN7xtnWs7udazq51rO2XWdXOkUUblRRRskSRSqKoqiqKohCEWECSUO3GaM6zXiE+vzfZ+bVWOs6TSNzreNpvWdXG9Z1c70NxveNs63jdzrQ3Ot42y6zq50iijcqKKNkiSKVRVFUVRVEIQiwhCSgimdZXxMPm+zpy2b1jSa1jVzvWNpvWN3G9Y3c73jVxveNM73jVzvWdXOt40zrWdXOnOkUblRFK5USSRqKoqiqKoiiEWEIiWIWzrM14hHz/YUbNazpHWdJvWNXO9Z1c73jVxveNs63jdxvWN3OtZ1c71jTO3OrnWsaTTls3ZU1CjDYwkkjUVRVFQVSlQURCNAgDma8S15/sKNmtZ0jrOrNazpnesbudbxtnXTnu43rG7nesbuNazpN6xq5251c63z0mnOrlSTTlRSsahhKpGIqioVKIQipQRQRTKS+Kq8/wBjTls+75UR1nSa1jdzvWNXO989s73jVzvfPdzvfPdxvWNM71jVzvWNJty3O3KmnLZqFFJGqxhJIYhKKgSiKliFigHM1Zcr4yHz/XUbHpz0mnOk1rHWy1lZ6axq56axu53rGmN757ud6xq53rGrnesaZ251ZrWFNuVFK51CMKMRooqrKqJyrECQtQRC2XM1EL42Lz", "/W05a7ZyprWNJrWNXPRxpN6xq56b57Z3rnu46a56uemsaud6xpnesas240zty2a1hTpAmnLYuVFzGohiGIS0ZIHrxpqIqIlswWXM14/WHh9VRp1jSac6TXXjqzblZ3rGrN757Z3vnq56axpjo41c9Nc9XO9Y0m9c9XO9YU25bNOVNOFNOWxiNRDEjQqQMAkSxCxBFmaiyvkquH1Zmy1nSWs6R1nSaRs1rKzvfPdm9Y0zvWNXPTXPVzvfPTPRxq5240m9c9XO3KmnLZpzJpymrMmnMasxq1zVgRgVHJQKgSxZWzC+Uq4fUUUtZ1VrKmtZU0jZrWNM71jVm9c9M9Nc93PRxpnesNz01z0nRw3O9YU6OGzbhTbhTThs05jUSMQxCErZhAlQBAWLMrmGvL1cfpyKKKLls05U25U1rGrN657TWsaud656Tprnq56b5aZ3rnq56OFOjhuejhTbhs24TvjIbszO7MasxqzDZhsyoAgKgSoC2bM15yjl9FSTTlsXKacqbsqbcas3rnpN656Z3rnqzprms9Nc9WdNc9M71zbOmsSdHDc7cKbcKacNbsSdLEbsRuxGrEa6cSXQAgLoyKhmVDLX4AnL3yJI2MKKSaSNaxpNaw2bcaTbjTO3LZvXPSb3y1c9HCm9c9WbcLO3Cm3DW7Cm7Mm7EbsxqyGrMaMy6MhoyS6M6XJrmrmzL+INz9w0SNkiSKNSOsprWNMrlrblTblZ1rDZvWFN656s24WellTThrbhTbzU3YTdkToZjVmNGZdGY0ZF0ANkl3gyqAv5A3P2E1VINIwjUi5UdZTTlTTls24U240m3DZtwptwp0cVnR5qdLCm7CnQwm7FW7EbsRqzRozGjIujIaAVDMqAv5smfVVEiDRIjCkkjrLS5U05", "U1Em3Cm3Gk04bNuFNuE3YU24bN2I6WJOliN2I3YjViNWRdWQ0ZpWzLBCAvxDZ9BMoyGsxUpVUwpIpJCkmnMm7Ka1jSLhTaKNms3ZjbhTVmN2E3Yk3YjdiNWZdGY0AaAVswgSoC/PJO9TRMEwTFIlSVKFQyIwpJGnCmok1EbsybgTbhNWY3YbNWY1ZjVmNWQ1ZpdAGjMNmVCKBcGp2JqLUZtRm1GbQEwMyZaKlCZCYqkkhcqaiRiNOVJIYjUBqzGrKUQlCQJCsREFErNrqSrlYzajNqM2hCYyzGZgmSGkJCqSqKpGIYk04RcyasxsIYhcwwGgjQC6DoYgEiVKO1p31xaqJTNqM2gDYZNhm1Ri0IGghJIYJpAYKioRiFypQwxWMQxDEMQlKkQxFCRS1B9lo6dC1USmZiSA1GTUZmjJoMzGTRIVBVIVEVJUFQMKUUMRoJGIXMMSsQxFELmGIol/Sy3bZaVzajP0cYzqjJsMmxM2gyaowbIznYYNkmWAGgESEgkKpKKKpEoqiSKoqDRAxLJFUU5P1LV36FprNqM2ozajJsMmwyaowbIwbEznpmMGyMGxMGiMmiA0SA7OdQVEJIiFUSIVFUVQlFUEykx+ut6ehaTK1ZtRm1GTZGTcc7VJg0GDZGc7JMG8xk0Rg3lMmiMmiMySEgCFVFQjEMJFFayIhVEiFRVH7lq9XUtVpKmbUubQBqTJqlwbEwdMxg0SZzsjBokwbIOeyMZ3mQNZAaM28SAgSFVFUV05lUVRVFUVRVFUfvzezrTAtRMExm0Rk1GTRJk0Rg3mM52SYNZjJokwazBnRGc6zICQVSAixSQkVRJJVLVCUlUt9HzyVS06T95X29hkLVWbUZtRk2Rg2GLRGDYYN5kwbzlg3mTBojGd5kzn", "eYzneZMmswDRkaQEIfoPmqiqSqKoqiqKoqiqPSK+7sMqS1Z1GZgNEmbQZNEYNhjOyTGemcsZ3mTBvMYzvOZg3mM53mTBojJogEkyaA68w+74GkKQqKopCqKkKiqPTze/vTFNRMEwGiAYyaJM53mMmsxnO8yZzvMYNZzM51mTOd5jOdEmDWcgQBJASIQhCqkqiqKoqiqKoqj1DPv71NVITKTAMmTQA0ZzokznRGc6zJnO85YNZkznRGM7zmZz0xGDWZM1RkSQGgEIQqZCoqikKoqQqKo9VT9DvI1MhMBqMjAJAJAJJk1mM53mTOdZjOdGZjOsxkTMMdOchnWYyJAOZISN84KoqpKIYhoGIYSiGI9Uj9Duo2zSUylQCIDRmQyaIznRJnOsyZzrOWTWZM51nLOdZkznpzzDOsxkSASQEizrJVFvEhVFUI7OdRIhUVR6uH6HdRptZGoKgECqAQBJMiRnOsyZzoyznWZM51nLOdZkzneczOdZjJojIkgNBnQEhVITBMSQdecDQTBMepS9/dRt1ZUYlSBISEgEgEkM6zBlzIZ+nllxHMmc6zBlzIJvM451mMiQCSAkQgVFUlUVRVFUVRVFUeocvv76iNRUxLoKSoHMFRFlJDLmJzSZxrMGUzM5cyGdZysdOcmRzAJICQCEJBUVSVRVFUVRVFUVR6dze7tpy2rlGIQjtxiRIWikCCzrEllzAWcrLmQy5zLMQZSQy5iKkCIhCKiiJJKoqhNZKokiqKo9K5fb2XOqnMurMaCEhEgoIiJAiLLmAcyGUyyOZLDmSy5iykAkgJBRFUFSVRVFUVRVFUVRVHo4vZ1105Nu8kNAxCQJCREREA5iy5kBzARmGUjIkhnWTJrUnKSASAaCQJEqQqKopCqKkKiqPQOH", "19dOatOY1ZjQQkCBCERZhzEkWYizJEZBCBEWXMlBEVAIRUVCVRIhUVQiFUSIVFUfu2X1ddWWtWUYhsxoAXJCEkFEBDmJLMRESBEBvtJ8pBERUQVBVEIlUSgVFUJrJVEiFRVH7Vm9PTdhNOGtWI3YjVkjQQgQgIgQlmIsyIUBBOKSIiIioKgqpKgYhhKIYhoGIYSiGI/Wq9G1pb7ak+Kq2qIoigqkM0RUBUhmgqjJUgUWaiKgqKoKpIoqiaCot0ZKKomgqKo//EACcQAAEDAgUEAwEBAAAAAAAAAAECEVASYAADITBAIDFBcBATgCIE/9oACAEBAAEFAuqotLKSUj0yO9xMR6NaEGFNd1KqZs5hKOC2kAz84crRrQe5Df3802BkZgy8HU7Y/Fo3BrcKRl/TNpUwnCeQIhIcQr8Gn+eX24dIoiPG8Q28C2wql/ayiG9VoInPFkJWw9cgVFaSgzTsVKKjcuje0EqIs5z8hsJpa7PG6PwKhTWJ4sNXeSacBKT1Eo+vAb1GNImrS4zB6NChpJtOCourZXS9jZhS08MLaq5TkqGXyNG5oDnoOYopVkpH+f8AD4BUTN+dlReSdjZSSxjNOLSWm3LYNNO0A84/LSkqwZLKKQvMYr60LKMHUwZZ/nxsBNWDNgkbKlPEKKWhz35ZgFEqVC6NBBnm0hydDbASoj3UBUrPyfq3wH6jDlRVcCctJyeeS52x22v/xAAcEQACAQUBAAAAAAAAAAAAAAABEVAQMEBgcJD/2gAIAQMBAT8B6YDcMoumqgmVvq9azmf/xAAXEQADAQAAAAAAAAAAAAAAAAABEZBA/9oACAECAQE/AbSqK52f/8QAJxAAAQMBBwUAAwAAAAAAAAAAAREhUGAAEiIxQGFwECAwQYADUY", "H/2gAIAQEABj8C7kVpcFn59fjJquvI05d0Sz71WnMW9AlRYn6mUnFOHevS8useq0dhCcrtxY/FgfhNBZDNqLKam3+H09dStiv8rt/klKEbKr272z6PyYlSNB7wz0ISAniwEkUPhn3sbripr/rU765B23Vaw/Jef4gQZ0MGSvXCxpXSrOJ03qJhJ48rG7l4GhW0xk28I2iGqRTnDbwb8LEgZZ81gfuwdV0rQ7kmoL3uAU+Q+P8A/8QAJRAAAwADAQEAAwADAQEBAQAAAAERECAxIUEwQGFQUYFxkaHB/9oACAEBAAE/IW3SsrKys+iS6tXULCPohCEfRCwsoQsr9d6vLw+jROFqj0+6/RYQj6IQhYQhCyv3Hox91+iwsfRCEI+iEIWEIQsL916vuv3RH0QhCwhCFhCEL8aLrhP03q+6/dEfRCELCEIR9EIX+Aev0un3Cwj6IQhsxGmfRCELCEIX+E+6/coWEIR3uEIQsIQhZX7j1+6/cIQj6IQhYSEIWEIQsT8KdqjUY5FF/wC/rM+6/RYQsRVeCrChH0QhCwhCF+OuT9d4+vX7lCwhCFlCFhCEL9JJvn6X0o1Izf0UR9yhH0QhCPohCFhCEL/BsfcIjyYR9whCwhCFhCEIuPEYhCFhC/aTcLd90R9whCPohCFhCELCETfAvxT87X/r+N90R9whCP6IQhH0QhCwhC/wjH3RZQhFT14IQhH0QhCwhCyvyvz9Rl9KUomylExMWEIQsIQhYQhZX7CT7fxfdfuEIWEIQsIQhYQhZX+C+5WPuEIWEIQsIQhYQhZX7yVW3o+iwsfcIQsIQhYQhCwhCyv8F9GXqv1DpIom+Cx9whCwhCPD5hCEITl8EIWV/gr6UpSl9KJiYmUQmIWEIQsIQsr/AAX3dC", "FhCEI+iEIWEIWV/gHPmPuULCEIR9EIQj6IQhYQhZWk8v7rH3KEfRCEI+iEIR9EIQsIQv2vPb+Jj7lY+4QhH0QhCIvvD6IQsIQhZR8L/A30pSlL6UTExMomJiYnhMQmLCEIWEJ5tf7jx90fb/6OUIR9EIQj6IQhYQhC/wAGz69GKKeI6j7hCEfRCELCEIWEIQtV+48/dEUeUI+iEIR9EIQsLCFqzTq6X8Snt3aa/K+6/coQw1UXif0+iEIWEIQsIQhfruvyMb9KUo2XoX0TKJiZfRMTExMomJiYmUTEJieKLRDVT9NMbt+H7pXJfD6LCFhCEI+iEIWF+P8A2vv+vzqRR/gev0c1Wn3KHZLJPrPohCFhCELCFhYX+CfdfuFn6IQhYQhZQhZQv0fJ/fxvRj7r90R9ELCPohCFhCFohfvPDfpSlKX0pRMpfRMomJlExMTEyiYmJiZSlKUpSlLilzSlKMp9FLmnspSlKNlKUo+6/dfuELH0TghCynhbX8lLm/hbLo+6/d0LH0QhCwhCeKLWl2v6FHo2Puv3X7hZ+5QsIQ3eKCeKJ7UuEWy2q5wuaUpcXWlLh5pR91fdfotPuiwnhYuFinXrSr49KXFLpSlKeviLq8XLfpSlZS+lKUpfSlKUvpSlKX0TKJlKUpSlKUpSlKUpSlKUpSlGOUGylKUbKUbGx91+6/dfu1EUuKUaSUI7/wDgmXFLi4uaUpSlKUulKUbKUuH3X7r91+70pS4uKUpcUpSlLilKXFKUo2UpSjZcXD7r91+6/dfuaJlEy4uKUpSlKUpSlKUpSlw2UpSjk9ngJcUfdX3X7r91+630pS4vpcUpSlKUuH45mlKUo2UuKJ7EaKBrKUbG/SlKUb9KUpS+lZSlL6UpSl9KUpSlKJlKUp", "SlKUv9KUpSlKUpSjZSlKNlKUo+6vur7r91+70pSlKUuKU6+vC70pRspSlGylLh91fdX3X7r91+7UpSlKUuLrSlKUbKUpRv3V91fdX3X7r91+630pSlKUpSlKUpRv0pSlGylKUb1fdX3X7r91+6/dfuaUuaUbKUpRv0pSlGylLh91fdX3DGr/U9y+lxcX0pSlL6UpWUd/pSlKX3pS/0pf6X0pf6UpS/0v8AS/0v9G/SlKy/0b9KUpRt0pf6Uo+6vur7q+6/dXD1/wCMvMG3PBvDbc+j7r91fdX3V6vuLl91fdX3V91fdfut9KXFL7ilw37q36XFKN+lKUo37q+6vur7q+5nV/5h9Em7FzR91fcRRSl9Li4b9KUpRv0uKUb9KXL7q+6vur7q+6vur7r91fc0o36UpSjfpS5fdX3V9x7j/o+6vp7o+59w+lKUo36UpSjfpWUr/wBlG/S/0rKUb9L/AEv9L/S/0b9KUrKxv3pSspRv0pSso+6vur7q+6vur7q+6vur6UpSj7i5fdX3V91fdX3Mw+6vur7q+6vur7q+6vpcId1DdbY+6tekcpCEJ7pBr3EJhr3V91fdX3V91fdX3V91fdX0r6eLR91fczD7q+6vur7q+6vur7q+6vuv09P+59p6ei76/CE9t/FH3Hp7h91fT3R9xS4b9KUpRt0rKylG/el/pf6X+l/o370v9KUrG3elZSlG/SlKVlN+LX7q+5mH3V91fdX3V91fdX3V91fdXhu0+avuJKT/AOcJDp34PuJl91fdW/JP+6vur7q+6vur7q+6/cTP0hMtEJl91fdX3V91fdX3V91fdX3Kkd/5j7r9IQmHq+6vur7q+6vur7q+6vuGq5fdffxM90er7q+6vuKIVY36UpSjfpWVlZWN+l", "KUo36VlKUb9KUpcwhMQhCDRNHq+6vur7q+6vur7q+6vu8Jj7q1iCq+qsPV91fdX3V91fdX3PX1/wAYfdX38KS+k0g9Xq9X09PDa/mj7q+6vur7q+6vv53qyKdV/wBaPV6Mfcrxpy/wUoEb4h91fdEVPALqno+6vur7+d6vV6vujH3V91b9KUpRv0pSlG/SlKUbT6KUpf0Hq9GPur6PR91fdX3V91fcxV8fRFU7r43op9xMzD1ery8PuHl6vur7q+6vur7rPyzDWry8PDy+6vur6Kzyv7o+6vur7+Pp5+E9Xhjw8PL1fRkCtjU8eX0RXefgvFvPP/5l91fdX39R6vDwx9HhjH3Dy+la9TLlv0pX/spWN+lKUo36UpSjfpSlL+g8vDwxjH0eHhjHl91fdX3V91ff1HmeXDHh4eGPD6PR6vur7q+6vv6jyxjyxj7hjGPLw+6vur7q+6vv6j1YxjGMY8xPWEacfjQx4fdXq+6vur7+o9WMYxjGPDK1SbTKMdwz3HuEoiSOtfS6N+lKUo36UpSjfpSlL+K+Qery8MYxjH0Y8MTOan/cMYx6vur7q+6vv53q8vDHhjH0Y8MeGMY+6vuqXtPl+PV91ff1Hox9HhjH0YxjP9h35hjw+6vur7q+id/r0ff1Hox9HhjH0YxjHhjw+6vur7q+iV6eYSLTwffwsSrZ6vRjHhjH0bGxjY2UbGyjfpSlw+6UfdX3V9/CmXHs9Xoxjwxj6MYxj6N37QSOMeH3V91fdX3V9/UejHi0WwO4WfIxjwxj6V/Pv+x2xvrHh91fdX3V91ffyLvo9Ji0aUO+/wCsvRjHcfDw2nhjHlnnX/MPL7q+6vur7q+/qPLwzqh4Y+jyxio58eLV91fdX3V91ffxUpS4cT71elGNjY", "yjY2NjZRv0bKNlG/SlKUb9KVlKN+lKU9KTJ1MpSlG/SlKX9B5WPx3DwxjH0eHh9Hh4fdX3V90TadTjQ0NrfdX39R6vDwxjx09YY+6vur7q+6vur7+DyVEPvn43q8f+jGMY8vV6vur7q+6vv4FSbFqk/wAb1eXh91fdX3V91fdX3V91pSlKU9l+FKUpSlKNlKUo2Uo2Njfo2UpRv0pRiJpL/BRv0pSlH0uj7q+6vv47+F6vV6MfR4rVj73D7q+6vur7q+/qPV6vV91fdX3V91fdX39JOOyjY9Xq+6vur7q+6vur7q+70pd7o9Xq8uQ9aDn4v4H3V91fdGI354Pus3U+60pSl/pfSlKX+jZS/wBKUbKUpRv0pSlG/SlKOq8/rGylKUb9KUpRv0pSlY36UpSjfpSlKN+lKUu10o9Xq+6vur7q+4ajjy+6vur7q+/iYGT8N38T1erw8vV9LHUMcyt5fdX3T/U+D7q+6//aAAwDAQACAAMAAAAQGE8XlPcqoCuML5bMKDZcgAAklyywYbdt6qoX8mOhNLxaYLx0baDBDnugN/XYpLjVTQyQlxO2xaV9z5kpV89VI5HQlzYiPYCo86flk+NzVjEohnCOKXm1QuURXyMikjlQ9W+461XN5WG5x3x1ebtQXFbf1rVD7cYly85YalK2hYgAAwYsa1RSWp53j5av+lxPYPssODYNxARlTYaywnGJEC2w9GDu0OZLFKXQFRBABBll1b9uuo+1+B0dK6U6tW9/poJAAEAAVUVjDV6g+V+DU1qqcq9W9/popAAwAAVUVDBVaMKNaZQlnmQuxa16lgFABABhZUVPNS+9++O4ly7IwPZPMMeYIlAAAFkovSxmmdWIWIi/IJyOcMptLlQIxBxEYVL1w72NRr7Jr0", "opv9+VHMYn1YgAQkZ6O52ULxhLM2VQDr89/QEC1QbWyxzvXUhdWAfMUq5a0ibNxzweQuHopsCOCVVqQid2LAMaIH86sDbNytmgSvp8AxAUFzy1mgDxprrQ3oC+MucatzxFyfnPAnmxsOgZ/DosCw9Uv5b1+UmACCtkxxxYI+/5nSS6SJVLpKhK8L9W1LBAETDCDru59/B+mnBIAeYAroH6DEuxzDgdBMJtnz+EnmTq4Z10qEabwKsWozzwYTPCGrYNPLpXaitAo1qL8Wztmo3T88Le3TzabMBXnpaxQhYQN2CYM6UC2EMWbrMMMibO/wAR/wCc8uOou+wwD09v22p7FwUgAS2S1qLkFvbo7vx3mXW1wQIdVQFZo88+J7FDkPaYhTDCXlHwE2A1VQZcJYn330WpJu5mxo1UEGXyu4jnBWakHQGHYY5rpEFQBWgEiTDC0Gv7FPb1DEDUiV1HGWVkxA1ZNJxjCRRTKdQ9jNCjXynoH330FBYPtKYZFE8khgpSj+j/AIfk05qybznyCq+vD+N6W+q2VFJSe7VaF+0ROzbznz3HOuzn+ZXPLNUce9U+1P8As3QCF1/6/wD+tMfLKRoX3l5Ss3zmZ7UDi+VW681l31X2n31NTvIYkrXg/ovJJ8Uyc3WoJYIKoJYIIQaQwybhc/bu7ORp/wCrUJ2ynyyby3yzoPV9pD0uwlujsdU9FYbFYKXDDrDXDD5qYQ8/tOwZyd0/iLqWr1k7bPPnPbPP0WV9pWY/WO/AnPQZjEBLBUXDDrDXDDifbyiL1YZYN3nYzchoN7NU7PPnPbPPTtxzx5PevmzET8qfD2HzNoTPPnPbPP8AwN8qre4MGCf5Qlfx3g116AfvkvqvvnwVw6/awAaLelQnM3sj235jccWMJM", "cR+KTljc9s0j0r/jO6/g1w6lQQaQVQQbF1fL4/JkXjEAzcoZlw8A/FQAKAFAAD6Kg3/wBavhVC5T8rlZt7DoyTDTjCTDCK24551Wyv9SFKH20BVS6rlQACgBQABchb7pQFUKYWS9qsTGARqKVgwyQxgwwuWONPF/zR2yXqmg89rRq/yjzxTyjzxphjCxybmk5lwGve0wairfyDzxTyjzwAvn02/h72CDdrCnr7STOYxgwyQxgwz2J8IJ5yNxyN2KN1wLxwNzyDyBzyDzz/xAAfEQEBAQEAAwADAQEAAAAAAAABABEQIDBAITFQYEH/2gAIAQMBAT8QnjMzLLLLLLLLLLbbbbbbbbbDDDDM8ZmWWWWWWWWWW3m22222222wwwzxmZllllllllllttt8tthhhhnjMzLLLLLLLLLLLAvNttttt4MMQzxmZmZllmWZl5uW+W28GInjMzMzMyzMsy2+G+JrwY6zMzMzMszMzPnhv44REcZmZ4ZZmZmZn0pjw4cZmZmZmZmePsJxkcZmZmZmZmeM+s4cZmZmZmZmePsOHGZmZmZmZmZn0BwiI6zMzMzMzfj/ALMz6jhHWZmZmZmSZJ5noyIgjrMzMySSSTJxO5ZPMgLOhEdZmZkkkkkkkmZLO5ZZCTeIH8mwREE8ZmZJJJJJJJJJLLLLLLLLLLLIIIOMzMySSSSSSSSSWWWWWWThssssggg48Z4ySSSSSSSSSWWWWWWWWWWQQQceM8ZJJJJJJJJLLJ/WWWWWWQWQQQQdeNkkkkkkkkkkklllllllkafqyCCCDr4MySSSSSSSSWWWWWWWWWQRMg82TiSSSSSWWWWWWWWWWWWQWQeOWWSWcySSSSSyyyyyyyyyyyCCDxyzmSSWSSSWWWWWWWWWWWWWWW", "QeeeGSWSWWWWWWWWWWWWWWWWehOZZZZZZZZZZZZZZZZZZZZZ55ZZzLLLLLLLLLLLLLLLLLLLPTllnMsssssssssssssssss9WcyzuWWWWWWWWWWWWe7LLLLLOZ3LPLLPDPTnhllnlllnjlllln05ZZZZZ/Cz5c8s8M/wA2/GfcfcfK+k+49e/nPjP4YZ5vxFv8DfPbf7+/4x//xAAfEQADAQACAwEBAQAAAAAAAAAAAREQMEAgUGAhYXD/2gAIAQIBAT8Q+DXeQu4tQvcoXQa+ATv+AIQhe8QvJedxr3KfyV4n++F6d4bl69L4Xs32t9dCEIQhCE60IQhCEyEJ1YQhCZCZCE6UIQhCEJ14QmIQhCEIQhCdCEIQhCEITJ04QhCEIQhBoaIQgyc0IQhCEIQg1jHjHzQhCEIQg0NDQ0Na+lPGDQxjGMePlSIQhCEIQY0NDQ0PGNc0IQhMYxjGMY8Yx8iWzYQeNDQxj6C4GPGMY8Yx9RjGMYx6x818njGMYx4x8i4HjG/2DGMeMfTY8f8ABjGPHj6KUWMeMYxjHj5aUpS5SjGNjGPHj5biZSlKUo2NjY2N6x8tKUpSlKNlGxsb1j5qUpSlylGxsY8bx81KUpSlKUbKN48fRfjePn//xAApEAEBAAEEAwEBAQEAAgIDAQABABEhMVFxEEGRIGGBMKGxQMHR4fDx/9oACAEBAAE/EMhq78xyP2OR+xyP2OR+yuWrvzGFMOTRZPL9heX7J5fsrlq7yeWTy/ZPLZctly1d7LlstssZ5bLljOXV3jO2Wy5bLlst8sDnfWB5gwPMEGsEEDA2NYHmxYbDzY192LFixJ3Y/thn+2P7DXWRkkkgySQedJLc7lNMEFQzjXiIid3cQRBY1dwghCxqh7hCHuxqwh", "8hCDX+wcQggg1gggg5sa6QWLFixYsWLElixYkk1kk5kkhrpJxJxJD5bncRETu78AhFjV3CEIWNXcPcIfIe4NVhD5D3D7BrCCCCxrBBBxBYgsQWLH8sWLFiT+WLEliSSSTiSGskkkludxERO7uCIIWNXcIQ9Qg1e4Qh6hmxqsPsIe4QawQQQQawcwcwQSANMtUkZcOT1BYsWLFixYsWLFiSSxJJJDWSSSS3O4iInd3EEQsaoQhCDV7h6hDBD1Bq7h9h6hBBrBBBBY1ggggsQWLFix4xYsSWLFixJJJJJDWSSSSVy1d4XLC8v2F5YXl+2XLV35heWTy/YXlk8tly1d5PLJ5fsnljigDh4suWrZY3bLlst8tlyxnLrZf2DtnwyjOYiMxpG8EEEHjHnD4x+MWP7+GZJJJnMzmczu7iIid3cR4C9vcLlCFWUrjGtjXH9hDSEPcGuIQhD3BrBCCCDWCCCCxYsWLFix5x4xYkkkk8JJCSSSSd3cEEQSau4IQ28MQQ9Qh6g1X+3ohrCH/iDVhD3CEEQIPcEEEQeNgQgQEQ9llyQ41Lu2LFix5xYsWPKWJJkkkkkhO/uIiJ3d+B4Da9vcUTxlqz+UcmuHMNoQQaQhD1G7DSEIQa5gggggiDwEFgdOPGLH/LEkySSTJJJCZ/8kRETu7jaIbeGNf98Bt4DaDV7g2PAbeAa+A9QhBrEEEQQRB4xB+lcDLvY84/CeEkkmSSZJXLV35hcsOA9soXL9k53fsrlq7wud2F5ZOd37J5bLlqycGrJ5ZOmrJ5Yz7SeWy0MyebLTWM5dbLTWy38hERHgiI/wCBps/8WZmZmfDc7i0YEDONUNiPD27i9PDde3u3Q08BtG7DbwG3hgY5CYzr4DbwEQ8CIiIg/wCGLH/FJj", "DLjOkzMyTbncRFsvaLdengf+3k2W6LdDS3Q2jdht4YdQmHZ9+GNYgiPBESgFN9v++LR+58NlNnEzMzJbncRF6Xt3Hk2WHLg4y63p4etsg8A1LZbo/+/D08CN2IiIiI/wDgvlmZmfDc7iCPD29wWy3XpZcyxchbi2Q1vSN0IQ28De2W7wI8CIiI8H4DOhvBSJhP+b5ZmZnwVlq7wuX7C5YXLZG7Ky6u8Llk01ZOWTpq2XLq7yc7snTVk66snTVhcureusnG9lndssbwuXWy01srKNo3tkRHgj8nhVcv/MFgGjOSfLMzMzu7iIid3cXp5Pf++B28hu9262W69I3b0tlujaN7YREREeDwf9Xwz4ZmZmd3cRekT/7Relst0b/74etst0e+7dbC9r0j33br08D1Hu9IiIiIjwf9Xw+WZ3uH3rn1pMzO7u1RekT/AO0XpbLdG/8Avh62y3R77t1sL2vSPfduvTwPUe70iIiIiPB/wfy+HyzMzM7u57fGAAp/P/7iFiwg9fy9In/2i9LZbo3/AN8PW2SMiHT3Hvu3Wwva9IgUOdBfVuvTwPUe70iIiI8Hg/6vh8szMzKy1d+YXLC5fsLl+wuWVlq7wuWTTV+ycv2TlssurvJ5ZtNWTyyeYXLq7ydNZON5Od5OmsLl1k6ay0t0Okb2wiIiPJ4P+WdMY/3y+GfDMzMzu7iIid3uL08PS9vduth4ekbr18N1sjdvTw9IjfwIiIj8n/VnwzMzNOhD+zO7uI8N07vdutluvSN3duLZbrYRutnh6eBvbLd4EW6IiErRgeYjwf8AwHyzMzPhudxHh6Tu7vTw9LZG69PD0/AWpbLdH/3bpbeB6jdhiIiIj/4AgwK40wz5ZmZnw3O4i3Re0W7yf/bwWpbLdIFKh1", "CE2bO3hulG7LbwW3hnXMTmGUM6RHgiP+Gf+L4WZmZmWVlq7wuWFy/YXL9hcv2Vlq7wuX7Jpq/ZOWTl+2WXV3kzuyY3ZM7smmrC5dWTG7J5k01k8wud5PMnTWUoZTDopDDjWUi7sMRD5zZ/GbNn8Zs+GWWWWWWUs7u4iIbxg6bh9AcbXt7jfw3Wy9paHgtvAfAtDwW0bstpepeAwxDHgYfA2fzmz5z+18LMssyyn/yREQ3s0gU1zpe0fgZ1d+C28FtG73LZ8Ft4Dr4KUodYhhslwGV2hhiHyP8A1WXwsyzLKWWd/cRHgmdAxpoYiPBbXt3LbwWz4DF6lKUOsoZepQ6wwwwpMDZslVcvuIfA+Rh8ZDIjjTB+wMpgs2Zlll8LLLL6ltzuIiJ3dxEtpZDmyPbYs6u/Be7hLZvbL3LWUodUlL1KUOsMMMMMMMPjMPnNmzZs2bNmYg+V8L4WWWWWUmWrvzC5fsLlhcv2Cd+JWWrvJy/YXLJy/ZOWyy1d5OWTbLJyycsLO7JyyY3ZN8ybZYWd5OZPMnMm2YXO8RQw2dbUgbzKkyOHDDDZs2bNmzZs2bNmzZlsyzAwGdPXVmWWWWVllnd3ERZgl/GZ3dyjyZ1e/BSl/wCIdXgvctZQ6y9Qww+odYYYYYdYbBhhycciGGzZs+M2bNmzZs2ZSyLZsy6yyyyyllllnd3YUCompnwRO7uIbdKBUCZnONbOqUpS9w6p/Ze5S0lDrL1KGUOsvcMMNmGGHmGzD4zZs2fOZbNmzZllllll1lllltzuIiJ3dwyiGzq7lKXuUOr/ABlL1KGHVJS9yhh1lKGGHXWGHEMNmzDZs2bPkcojq0c2bNmzZllll4llrLLLLi3O4jwTu7iGGUuruUoZerOp/spS9y9Q6pL7KX", "yGzrDKUNnWGGGGzDZh/tmzZ/tn+2f7Z/stmzZllllll4l1lllxLJlq7wuWFy/bLl+wuX7Ky1d+YXL9hcv2Tl+wuWVlq78ycsPlk5fsnLZZdWTbLJy5k5cSc2WXVk51k3yycuJNs2Wd4XMLmFzH9Rq0Y/qITKzro+B/Vmz/AGyzZeQAOOkq7WbLzMwnmYHG/g/1P9TE11n+pXMrmVzbnfgiJ3dxERe3ceQbOruZaOGXuXyXqzq9w+zwDLmzrDDDDboYYYbMNmGzZ1s3a7WZfDLZsy6yy8Sy2prPKWWW3O/BETu7iIYl1e4ZShs6u5Sl8l6s5XmUvZ4B+W6UMPMNnWIcIYebOtmHwz/bNmzZsy2f7Zsyyyy8yzwlqyyy+Dc7jwRO7uIhiXV3DL1DDZ1dwwy+S9WdXmUvcKEBjGDwZ1j4vhDDZ1cQwxDg2dbEEdNMmZjDGWh/I/qzZ18O12u0vgtmzLrMeExZassvE8J4W53Hg8bncQxDLq7l6hhhs6u4YYZerOr34B4lD7I1OIZcQxDOA3s40YYYebc6xlCtejnTEf14Zt2/hmzZnVvdvBgAqIbobTF/2WXiWWrmWYvyWTLV3suX7C5b+j9hcsrLV35hcv2Fy/YXL9hcv2Vlq78wuX7C5fsLlhctllq7w+WHywuWFy2eWrvLy5h8uZeWFy2WXCw+dYfMP2wuYY7sL0x/VlC5t3uFz4n9wuZWfD/V/q/1Oqyn+57woDnUc2o6srmf6ZXtlcy5cMrlle2X2y+23O/B4J3d+CIZdXcMMMNnV3DDDDZ1e45S5j6j6s6sco5TNgWUJwW6GIcLNudbMf1Zszq3j+rtdrtOp18jMy6ssx4TNRnhPCYvNudx4PDu78jDO7uGGGGzq7hhhhs6vcMco5Rytz", "nmGIPEf4tzmP8AUQeY4M6mP68naXX8gurdrt4M1GYx5M8LUfc8pczwltzv8u7uIiJdXcQwwy6u4YYYZdXcMMfHg3OLgiDHKzq4j/EQ4Mcrc6+B/UK6SMthdrtdpGW6WU/1ZtRmP+JjybHzk0zaY1xkR0SeUszc7/O534HwM7u4YYYZdXcMMMNnV3DDDDbncQ5RB4nUjlDwxyjgzqcx/UeDtOp1hXbFkixk4s2Z1Ot2sPB/q1Gf8TFZEVQrIlnxwYyzwmckmWrvZctly2XL9suWTLV35suX7C5fsLl+2XL9lZau/Mcj9hcv2Hy/YXLKy1d+YfLC5YfLD5bPLV3h8sPl+w+WHyy8urD5fsPmX0sPll5dYfpYfLD5j+2Vlwtnd2HM5eX/APN/u/3f7v8AcvL/APmzl8z/AG2f9ly6z/bL9S+WXzLlwsv2svmX6WX6W3O/zud+TxudwxEMuruGHmGGXV3DDDDLq9wxDlH+rc4fcco/qIRdXuP68ByEMjBjTFknU6wvNlstll1dZTmwukq1Hwf6mP8Aq1H1PCf9Tyltzv8AO53+C3O/B4JdXcMQwy6u4YYeIZdXcMMPEP8AkurmODEP6iOp18AXazOps2bNmdT4M7eGo9zGP9TNR3LzLLLbnf53O/wW535Ind3DDDDLq7hhhh5l1dww8QwzqYfcco8B/U6mP6hXSwnU63a7Xa7Wo19z5D/VqPcx8DNR7llll4tzvxix4Grv8u7v8DO7uIhhl1dwwwwy6u4YeYYZdXcMMeB1OtmzdrtJl7ul0ul0ky7lT/U+DUdZjGLLV3LLxLLzJy1d7Ly2XlsvLZeX7Jy1d7LyyPGqtDO9l5bLy/ZOWrvzC5bLy/bLlsvL9lZau9ly/bLlsuX7C5ZWWrvzD5fsPl", "+x6Fhcv2Q1dCoMPlh+lh8v2Hyy8sLez5fsPlZ8sPlLy1d7PlhzPmz/AL9nW6t3WfKz5WfK1WrvZ/2znml8pctXez5l8svll8v2zmrvzL5ZftS+X7L5Yau7FixYhq7sWLFiGrux5xDV3H4d3cMfyGzzOzpCpwh4swicao4w/wBhAtwRgDn3Lq7hsw/2zLq7s2bJZ/stWvuzZs2Zau7P9slksy1dfdkllJZau5Z4Syw1d+MWLENXdixY8bnf53O/zud+Bs8wy6sc2bMNmdTX3HKP6sx/U6lm7eGbUd2bNmzajvwzdvDUdz/Xgxms7llsy2534xYsQ1d2LFixDV3+dzvyFWERxyfG53HpEGV48ZhlqzzZhswy1dw2dZIYdj3HB8EZd3az4ZtRr7u12u12tRr7u1nwZqNffgqzZlq7syy2Yau7FixYhq7sWLFiGrvxix/LFud/nc7hQcO+/wCFq7s2YbMuruzZs2Zau7Nm7WUmXd0ul0ulqO7Ky5s/2zLV3Z/tmzZlq7lsyyyctXfmy8v2zybXlsvKTlq782Xl+2Xl+2Xl+2Xlk5au9nk/bLy2XlsvLJy1d+bLy/bLy/bPJ+2Xl+yctXey5bLlsuX7ZcsmWrvzZctly2fL9h8v2XLV3v7Nny/Y5lny/ZctXey5fb+jZ8v2z5fsuWrvZ8rPlZ8rPlLlq72fLZ8v2/s39GXLVvZ8v2/s2fLZ8v2XLV3s+X7L5fs8z9suX7DV3Y84/kHLuw2Gw2P5DV34xYsQ1d+Medzv87nfjPjMtXdmzZsy1d2bNn+2Zau/yC1d2btZ/tmWruzZsyy1dy2bNmGruxY/lixDV3YsWLENXdix4Ybc7sWLFi3O/wA7nd3+Fq78Zs2Zau7P9s2bMtXdn+2f7Z/tn+y1d2", "bNmz/Zau/DMmM5NEiEMC5xxLV3Zs2bNqO7SI0dM+HS6Tqd2LFi6Wo092PJi1HdixYsW53+dzv8ZtzvxmzZlq7s+M2f7LV3Zs2bMnLuy2f7Zsy1d2bNmzLV3Zs+Rq7lyktkLFixDV3YsWLENXdix/PDENXcljixYtzvy+Nzvx153O/GbNm3O7NmzZlq7/K1d2fGbMtXdmzZs253+MyuWrvdn7a8rXltf7Opr7u3/m7f+bUMhlqmsCTDq0KWWW+9ry3Zs8my8v2Tlq7znlnPLZeWy8s3LV3l5Nl5bLy2Xl+yctXey8tly2XL9svLJlq72XL9suWy5bLl+2Q1d+b+jf2ftny2fLLlq3s+X2z5fbPl9s+X2XLVvZ8rPls+X7f2ftkNW9/R+2XL9suX7ZcsmWrvZcv2y5bLl+39H7CYi6uAzoWLFixJq7sfyx/LH8sQ1d2LH88E/kNXcnNiSSGruSx53O/zvd/nc7/O53+dzv8AK1d2bNmzLV3Z/D90KR9NhsWP5Y/kHLuxJGmnXdn3rYZDgBpDOWGrT3YPBP5Yhq7kkksR1dySSc+CdKIryZ8Pjc7n8bnf53O7NmzZtzvxmzZlq785s253+U1d2I/ixYk1XS6WLFqPfkxJzDV3JJJJDV3JJJJbnc+Gbc7/ADud/lau/wArV3Zs2bNud/nc7858hHGw38Jq7sWLH8sSau/wMQ1dPdixJJDV3JJxJJHV3JJxJJHV3JJ53O/D53O/zud/nc7/ADud2ZRGMnJLlV9+Nzv8up1d4zyxnm15bXl+znLva/21/tr/AG/1+2WXV3uzOeW15Zzy2WXV3nPLOeWV9rOeWyy1d5zyyvLOeWV5ZuWrvK8sryyvLK8snLV3leWy5YBoc839GTLV3suX7Zctly2XL9", "ky1d+b+jf0b+jf0ZMtXfmy5ftly/bLlsuWTLV35v6Nly/bLl+2XL9ky1d7LlsuWy5bLlk1YPA/jwTV/Iajp4YZJIasnMkkkNXckkkkdXckkklvdyeW3O/zud/nc7s2fO53+dzv841bEfx4Yk1aWP5Y/lj+WLUbHgEZsBuY1khq5kkkkjqkkkkjq7kkkktzuSTwx1dzPnc7/O535DMdQYw0Txud/nc7/KauYLFj+WA5I40xOpsWLHgNWxYkk5hqycSSSR1e5JJJI6u7GnEHRY1kkkjq7mZmOruSxY8bnf53O/zud/nc7/KatiDgsWJNXSx/LH8sfyxDVksEliGrZGkED2ZJJI6vckkkkdXuSSSFvdzMxQAcq2bPBQbRbnczPjc7/BtnEuZo1P8A+/8A3bnf53O/zud/lzl1Yzy2vMZ/trzI5dW/1v8AWw8th5sstryzm15Zzy2WXVnPLOeWc8s55bLLqznlnPLOeWV5ZuWrvK8sryyvLJ5ZuWrvK8sryyvLK8snLV3leWV5bLyyvLJlq72XL9suWy5bLlky1d7LlsuWy5bLlky1d7LlsuWy5bLlic4Lrgxg/vNly2XLZctlyyasEFixJq6WLFix/JNWSxJJDVkk4kkjqySSQjq7kkkkjq78GZtzuZmbc7/O53+dzv8AO535CJJnqDKHUGM6LhSxqwWIh0KY9WGdVix4Yhq5LEkknENWSSSSOrJiSEkdUkJkjq9yTM293Mz43O/D53O/zud/nc7/ADuYIILEmu1ixYsSasliRJajJJJJHVkkhJHV7khJJHV3JJJJHV3Yknxudwk4w4NQOz/6/G53+dzv87nf5xrBBYsSasOErUYc6Y84k1bEkkkNWSSSSGrJCHuSOrJCZ3jq9zJM253BkbAJEg", "iOEfUzbnctdtf/ALTSgLUYV3H9P/p87nf53O/zud/nXLqxnm15tebXlnOW15tebW15Zzl1teZzOeZzy2WXWc8s55nM55bPLqznlk8s55bLlm5au8nllcbsnlk8s3LV3leWTyyvLK8s3LV3hggTZGVy/ZXlleX7Nlq72XLODd9suX7f0fsmWrvzZcv2y5ftly/bLl+yZau/Nly/bLl+2XL9suX7Jlq782XL9suX7Zcv2y5ftjV8B4xJq2LFixJqySeEhqySQkhqzCHgdXg7wm3vfgJm3u5mZtzv87nf53O/zud/nGrBBBYk1sWLFiTVk8J4GrJJKww0fckdWEngnq3vc+Rt7wZm3vczM293+G3O/wA7nf53O/z7YPAeE1sWLHhNfCTJbmSbh6hbmSYb+B1TC2W63vczbp2t7uZ3mbe7/Dbnf53O/wA7nf5xrEHlNbFix4d2SZm3MyTtMdXwHgN7f/t7eCbzCUswBOhUYR3G9vBtzuZmbc9z4fG53+dzv87nf51zGefGvNrzOc7+Nb/Wc8znLrOZzM55k53leZzzOc7znmzy6yeWTyyeWTy2eXWTyyeWVzuyeX7OOQciOpKfb9k53ZYbsrndm5dXfmXk/ZXl+y8n7K8v2cCHCHOrdlctl5bLy/bLy/ZMtXey5bLlsuWy5ZMtXey5bLlsuWy5ZMtXey5bLlsuWy5b3ERBe/GPGQ9GFztbmfDNuZnwbc9262W7w3PD2m9owEomjO8+/DY263vczM293P43O/zud/nc7/PuIjx7/PtMzNumb2m3vdunbwGlueRt1ve53tl7eG9MzNud/kMMhq4F9/nc7/O53+fbER+md5mdpt07zNst7wffhsbeva3Wy3QIwA2BuzvbL2m3pmZtzv8AO53+dzuQjG", "HrOv43O/z7YiI/LO8zO026d5m2W94Pvw2NvXtbrZbre9zvbL2m3pmZtzv87nf53O5aWP14F6g9658bnf5y53heYXmF5lno/tlzZ/tn+2bMt9ZXmV5lZf7JzvK8yvMrzJ5m5dZPMrjeTyycbs3LVk5ZM7snlkzuzZdXeVndkxu/ZNdWVyzZasrllcv2VyyvLJy1d7Ly2XlsvLZcsnLV3svLZeWy8tl5ZOWrvZeWy8tl5bLyyctXey8tl5bLy2XlvcREemAd73Z/C1mZm3Phnw3Pduna3eG9bL28Pa3u4IZjL6xIgIjhH1bGbe7mZm3u58Pjc7/O53+dzv8APuPObOtmzZlnd8MzbpmZb25mDAyMZMg/0+2WUOjGPDe+Dbr2t6ceQOoJQ8plf7bJ3t7uZmbc7nw+Nzv87nf53O/znWIfLu2ZGGCmdQkMmXQXPh3fAMWpTkTNuZmXwerNJieysHQCOGb2t73e0z78EeTR4G83tM293MzNudz+Nzv87nf53O/z7h8D4XWzZs+F1llmbcyzKW3souDO81crldVl8Hq8GdrdFEAYYBdfczPjenwzbnfh8Nud/nc7/O53+cuXWy8wtl5svMrPh/qysvMQjA30xK2XmV5svMnLrK8yvMryyuZOXVk5ZOWTyyuWbLq7ycsnLJyyuX7Nlqycsrl+yY3ZXLNlq7yuWy5ZXL9lcs2WrvzZct/R+2XLK5fsmWrvzZcv2y5ftly/bPJjjEKI6JZcv2y5ftly/bLl+yZau/Nly/bLl+2XL9suX7Z1hhs2ZdbNmzZl1ll8LLVllgIHMHJMtWWUvB6vB3lNvd+D4NvdzMzbnf53O/wTcjIm4zDWZV+dzv8AOdWHxmzLq2bNmzLq+Myyy1ZZZZfU9WWUsrcynaxlOA", "mDGiSt7uWZm3u5mZt7vw+dzv8AO53+dzv851hhsgNl1QsMslPSzu2bPldWzLLLLVlllllqyxjOpOpSnq9+Cmd56vcyzNve/DM2934fO53+dzv87nf5zq5sw2kcYzp7iyIDvLrZs2bMurLZlllqyyyyz1ZZfcpZ6u5ZlmeruZmbe78Mzbnfl8bnf53O/wA7nf5yy6x/VlC9LZczqdWBs5wcLZctly2X9lZdbtK5lellcyZdZXMrllcsrlmymWVyyuWTlk5ZstXeTl+yuWVyyuX7Nlq78yuWVy2ZR4PSVy/ZstXfmVyyuWVy2XLJy1d+bLlsvL9svL9svL9k5au/Nl5ftl5ftl5ftl5fsnLV35svL9svL9svL9svL9k5au/Nl5ftl5ftl5ftl5ftnVsw2bP9l1bLGPXFmzZl1syyyy1cSyyyy1ZZZZZ6p/ZZZlPV3KYIEAYA7k253MzNud/nc7/O53+dzv8AK6sPFmGzLq2f7Z/tmzLqyyyy8y1ZZeJZZasssss9XuWWWZ6u5mZt7uZ87nf53O/zud/nc7/K6tmFs2f7Lq62bNmz/ZdWyy/2MUAOz7gVQnqyyyyy1ZZZZZ6u5ZZZZ6u5mZt7uZnxud/nc7/O53+dzv8AK6sMeQplslkslmXVn+rMsstXEsvMss9XuWWWWer3Ms4IAC7ZWBUFcOhE/wD9tzuZZm3O58tud/gROBy5cW53+U3gh/X3+dzv8ry6sPlh82fLZ8peWtnzZ82fNnFy6tnzL5WfLK5ZMurL9LL5ZXLL5ZstWVyy+WVyyuWbLV3lcsrl+y98v2OCBgWdJsurvK5fsrl+yuWVy/ZMtXfmy5ZXLZctly/ZMtXey5ftly/bLl+39H7Jlq782XL9suX7Zcv2y5fsmWrvzZcv2y", "5ftly/bLl+yZau/Nly/bLl+2XL9suX7Lq2bNn+2Z1NmzZ8Fqy2ZebMtWWWXiWWruWWWWeruWWXMtudy+Fm3O/CICI4R9T43O/zud/nc7/O53+c5WzDnzoGEZbY/wD8s2bPh3Z2svjM8L4XMztPV7mdvDtb3ufBne3vcz53O4QIiORPU8BWVfO53+dzv8YaoU0L61tzv87nf5//2Q==);--hx-hero:URL(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wgARCAIcA8ADASIAAhEBAxEB/8QAGgAAAwEBAQEAAAAAAAAAAAAAAQIDAAQFBv/EABgBAQEBAQEAAAAAAAAAAAAAAAABAgME/9oADAMBAAIQAxAAAAH5kk+3nodELI7HnaT9Dg3B3cPfZ0PzNrnek6YcfH64t8fdfLrSqwlFEoWzrLONJ1THbyDtZgwAdgMGhc5rqsp5WK8995i8bqKRYfAY3SmfluRcoGGCRglsibYGOUBgLhOwKZ9MqQ+pSa0RRqXMI0OrRkdBJ5rLs4+qUrhrPZ0cluGoc3VzasUGWuBqiNBEWiY2cCYgo7ze6U7XO6OboufT5X4MuszrrmjZbZytPe06EyNxdXJiz2py3cy3TFZYVFl3Dfo8BXTd/B6OsuJ9G+fO3RCnaSHbKy8nkLaXTeOSW4lQCkxQHdJtsmxwNiA7Fenlvi0", "l0csSOTcwdIsjbUR1ljXRfkfnvrM3xTsTbEZQU22NtjbYAbVKF+bpnWSmucnjS3B5SIvQmh2FCDFUpNqqrKl3hs2sK8uNyxegGCbEyrFxKpZZq0yLgK6q+AKVgdTuWK612vydWOSbbWYq1N7RLILy9fJixIPHpZq7rzWfbyVzYHj06Oe8NQ3hfWaK79Mbs4RHVN75POsec82bL20UcSu4nnWwNlNtvO2UbAhwYDYh7Zvzp5xOjC8NZbFVo08jBgMGbj0pVKZux0bbVtsbAQ2VwHagrhJcrU3FlaXXGwpQpNpNgUmunquheUC8kbGdFWnLaPTyZ0MzEheMOQ8sU7uOVdtKboqUg6aEikoO2p3qwnWmVZUxn181Uask2cZJx9/BNcpI59PTEB2x1cjRIkbhvt47R3D083ZvMmS281bNMxslTphROM8tWHbZHVGI6s1xDq+23ko2F2MZlpWOtHXx9nn86qPPpm8GMMM9kNSedO8nsxa2bOyjLo06c+m2xp0MITlx2s22NAyzVvK28QS8+2AUNCisioNqGVjKpqJDCqAR9qkznnRIamDrS8/TzZudTnXTydPLmkAjhXsCuti9nH2TclZdO/NPPVglQlkcVbltvnZZtk/D1ck1y4Hnvs3Edzq500bbYvTz9PN0h7eK+4+pulTo59OTVBjoFufjOTmdOm+mYFNOs5QysVBnvL5dBIw2LUOvlvlWIfN5pUXecrLFkeqTDuRJWWdFNVrC2Yx2zXKbG3KNNHAm2xorLNL7KxaW+bIg7c8UpWk4FeHRWdpZjrhatQ5JOiCym4tZnmUBWhzdXNLsdmlKIDYm6eXoIowhevk62wrpqejCj89xu+nOUnO+nOOiWsTsmuK8Xdx898eI53YYZcA7aOiHXy9Yenm", "6d2qBt0oUsbs4ujPPs5inKcKna1Qk5s52jYWU2Wnm1FYMMCtZ1tKorOHRgiqzWSWwDWDyVB0m5bxumaNhegHJijQ2KyNzdMsaenA2O3bzSaMwobY1TldOvNp9HJ1w9keQTtIXoh0A5evlpxOltEUQKSNonQDIyh2NNy9UIV1ZdOsoIGXdPNeIYiF6ubpawI1PUyrxjgpQWk9dDGuqTq15Hj7eHLlItz6Q20YMDbE6uXs4+sbq5OvVV1p1zEvVmXQvTzvJraTzhVaXW0TnaIw2lqybWSUReqU7Jqxem2xidC0GBgLCUMC83Tc9ssnjddqLM0yPFBmxZzeGq6M/DtIsZSQbNjt5jTL1w/NaGs3KNFJlYmyjayyaAGalWvRm8zOVkvQ8c0/XXLyG64dEpOmoDjASsVczKqRsKuLact4dSRWkrfS2HPqWKzCuruaJbN8226Zpx9XLmchtXl04ttm4EB21dEKz6zdfL0atSlN8zd35TnZ5IrwbV5EKLVcuaVIonEYMthQlVqlLA2NiVnUY7IjYi6z4sh2nF4GZdxsFiFkbedSRHZGlYpoYzpncK89eW20q0zA7zlZRoV2onPW2s8zmdlMGJUxJucB26caPO88axO1Bji8AI2G04lpPrkq+rRpLNzK01u3i9FnnVpWq6dJCbY9B+c4tm5eTM9ePmvF7y6LIso6aaF0zjzgTjogY5qFljbYbbbh6uXu6S9JdWMCNOCPQbytb0K5084UVQQTHYBDIwZKwKjUlSxihrWjZGGMYhw9vD2ctSn0c6hW2iqTUwy6wtZ6XqSb5r8zefjXZ1JCWdRqNJ6uvbJtsRS0rDOfJL6A5L9ceji3GyFRUznHntNAgDHnYrLDRsGsGIOVDuuWR0oRvHNB2g+n5fYLGstN", "SaZdMlXOqjo0ef1dTWz6Z6ZoYImDjenR4558GK56KVbGsGQOJsBzUvbx9vQjYbnRTgeY7qce5uvlnRfPxGqcGjYVItjYyuoFZTWjWzEbU1+d4uC0Dp59i9ujbloctpaoG2gky2FQms3EZ53fcYsoEGdenxRbJnmNzs5E2b7B8s6npz4jHVPcxEMJX6qBCQ24MwlNAY2rDKxlq58x5bStGpHi3TGIfU4z3Ss5BRekSN0lltoF4rLddSWZB3i/N1crp6GJxcG0Gax1yZGO82C051ZWRPPV0nVayry0Y9HPDMd0zl6t1zzd0ehpWVsd0l1T1iJM+vFrQMqKKc07wvK06wRSDqUZWSczeWFVrqKU1mZXKWnfCRbZ0NMzVQBDKuppspHk7/PrbZcSNTKRirivLVDI2ZilM0zpXY9uYIJurj7eeqhnyR9qE7QjotOmYOHp55pgCputIU4Dw6mTjfDpmkdqEOuGpCN4dINjmqrjNaq0xqLjdcU53TWvVObgQGGpBhu2KmezlrQrDJWeL5qkTqMG56AZTXhTc7zyP159SzdKKUz26pxM00bLdc5sm+XL0QpjKdHI5fQCbNtL7azmdGh6I9IrpZqysVtxdvOCXSnLpz5zqzplDipOiNR8n0eCUNOmxwHXOQby72FudMfR87UZpv0mYHcbYdM5cM6PqcffyqurplZaGxgUVyM3Tno01TbZNtlF4E0urn1lal6ELxTm5+iHfKZsKwfFWqrnRwHTIzpu+qDLzm5emfTM9tuYq0mtGuY8qJl5eInbDbFKnAtGmnoJyNpUJTRnBdBiquUaVoWhcc7LnIMrI6Bh1Za6QuslSdIpK1U5Cx1UorJuiVObp5Gnx7Uy7eXCgBUmOFJx9vBKjAUygS4E8qO7m7dxfP7+", "JEbLjVTKvbLYL1yGHZy1S0wlnwjbAR1xUoSC0TGrsrRtsm2ygEFVUoxkd5rxX49xFpPrFYsSqlcNK8lpM7UmHS30Ubc9TFRZLUFqujKaTOc3mi5nnBhbInc9bbUXlSmtOnSK/XSOM3S9EzhvA5Dz3ikAGcBiB1VltOq1XOGeeqUpmXZkbT6bZ42kkrJjWIM2RmRQQNgg0nmHk7uZecMsuOwCcddjrnkhWSgMqjNbCWw2f0OfrkwLWU2xkcQ9dLMVZvuvz1li9BBl22NtgbYBDAVR1y0XGsxndOmSKaWLdHXzsOX0uCFnaXXKIy3Xpii8EkuNOfdGuomuEFDCTukx5qsuqjr1ZvOOsWcdJNNUybofOdo2VObqv595roI6Jvnh18lnLWba45WEaiAtirXUAGJNM6PMixuuHVgnTOfLXR59YzRJFuyzqgLIpOpGKQeEpapJBiAdXP6ENgE4psq4HBI1ehKl8lxSxil4xVqGGLcVY4udcrHWg7Y22NtgbYDLhHVumdKk9RA3RrKWo3G4CeaOaqdbONF680Dz09LTrwbIFdGANkspparQEKhsudqwbN2ygIMp2O5dw3XdKpTneKHspMcFa8+nTDr5ZrlGOuTBkSiWQqr2llm1zEutKCa3Zyd2EolcdGky4tCprJriUpdJc1eGx+bN1iigpcTpNXbna3qednmB5eptp5tC46qd3m+hlRysLSdAbYVo0BOs86zLXFcg2bbG2AQQbbABAGU9MgbqRXO5ikpatFB0GbVzTtz9MFOnn1HxqkXpTKc7rAh1RsizbdRHmuYHy9OU427ABIIxO0s53XXQVbnWKvmAzyDn6I7vIcdctK00sU0Wvy0GENc2WVbcr6jeFMVQhxsAjFzr3EugOmmXzF5+pdODm9fz", "+qG27YU7Kvoyv59g4ws7QOVXX0ZAOzcDoSqzzfYmNzOSKysgDRAyqsuddz1TI1h2wcMEHA2wAcIp251pzFHXNoMQZlY22I83XDeRKktzopCmcuyUzJBRq1m8lbFU0mkqK689jDZ1qy6CDKS0g2naFp02aytlSVk5wMNIebq49SJQdcPG0U7ZrbnqBK9MsXWxaJUBbZIzJnSbHOkduzLMdIJWWGM3CrAQM2nnc/rcfVx2X07ClTwsWbVHm9DztXn23oyMRGFrY1x07BgrssPtjTfF8FyPOFzp8BnRpCpQq2s7bG2xtsDbAOnvLZW3DiYXBSmnqoEJuTq5dwxtHcpgYqrLw6K08Z9rNjOXStCxQdCnYFZtKjAhKnc6LSp03asm50uq5jmdZNx1l0kAw3jJWKEqc1ujm6awZUW8OhGYDm5eVRz691Y+nqbHYgOAcCZXBiAHEBRsQvlphjAJwPK9Xj24aehbbhvfc3NumdsthSOrxttSHWhOTr8+XodKc9hHJzW0s3rKtvB21bbG2wMQPydnDvPTIW3IZtoCWjbYxXE5vt5nLp57HmVNtue5spgjCXA4GIMQIOXU1Y0lnaV4nn21aI+9PaFMiD0Zih+fMSd4dbIYb5GdBCliJ28/ZirbnTN615ylkMpPPa78+nVeVLGwaQHYAbAIAw2FJUbIRsuCy4bKQrsEHAJAMRSw6J2xc6hsg1OZhuDmXnr0Onh7pVdGNzdMZbvz9GpiDZtsbbGBA/J0x1nmdJ98emvnenz1lsmUtZNElZdZkWXU3P0c9KRprDLmr18rYtq8eze6POB5suoAwFzNbOjBEZXt2J1Oh1e9NeNsw2m/LJkwsHJ1c3SpNn6YmLpEdWZumVpGxONScHUKrTlqVefpD0c1xztibbG2", "wAymOFEYgO0bYg2AdsbbG2xtsDDUJWlaMRQlTglrXh6Y41K41T0/I9aARrWm6kuvj6UoRtQ7Y22MNjKzWeWVb0cwGxe/A0dteWuXTuKmVo1c5uT1ObbnR56s3VIzZs6Go9kEYQNgOuArK0uBAWV6xbbvQcXTNQZzdotzwwyAhaPTSXjW8wKJCytPU1ZlLGT40p5ji9Xn0jnXV08vVqCk2roMqYhwMbYBGxtiKrCg2UYyqA4wDsbbG2xtgbHAR50hrLVXyPW8jNasRmmLpK3peZ3S3IazKVEdD1x0lWxrbYOGNtjEKcUurm9HLENoNsjeh5voYteL0o4QzPqcvRGGr6fA3bl5K9HNu9FJ0KBVk6pNTMj53r+U0qkNKwOQZWBWdtCNul6HQzVxLZlDNzMjQ0OiLKMU3llZULoZGGMutNc6nz9iZvLAbGu/o579MkqRnnouYmLCapQx1t9BpGRltLycfAyNgcsRg7Y22MCAg4CsKM6Ic3D1cc2FywFZYXr5KzXpkazI41ClV78tXnvx6NgZdtjbYGwI8nbxdcHHdcba8D08vDU5BOo25qJTh7eWyd400vx9vBi1rO1rupx0WidExLyfa8axCNaWXLhqRNlNEg7Xoh1p8DKWVsizNjJheTKxpPpmuXpyiXfJYvBqtuOR0qq4vnuj41235ejrl2RjEYOGCVw2Uh2wHUFFUlGk8OUMPlaQ4aDhgjYxBFKtQQa3zud441sQKpXNxzHqGFtGYN0wVc6xx9EGm74Hno7Y2wMCAcXbz7zE2brhfQ8+Wb6k/P1egvHrKLy2XrC5nnqKWryOube0L2llM62dDz5v4/p+bqTIapM1JYsy0hGHO2nSyPreOEM8Wmehp154E6IRm1ukN58+LaSDZOdTm1QtqJXm", "ty1ysrY1Xr4Ozcq8n1HwMYgm2wDsYqQ7A22DhhymKmRipmZKKgKGRHaGWioawMDzjtjQUzgAjNLKdOrr8+us9VV3XDUk5xldqdbSp5+pIwRgYYGepZ4pdnP2iDqjpM02kwyXMAu569Lct9M2drnj1xzndEK2owarUj1crPyu/h1lSa2TMBnXQkhTBno5K21ZH1Aw0yXN8QYNhgIW9HPPdIQNoZ0lEM6Sl5kWiPz1zY7no3itd7RfrmzSaKZTB2wcMYYUSmKBTDYYJGDtjEYOGg4YOGDhg8fZ5UoULi5cM3bExLah659fbDLk3hnkTnaVbX6OTp4dHKnNwwBWb6hstZNKqIuYW8o6k6Xl5ergucrbN6cR35v18PTi34+3nxZ9Mq2uyvz0eTq5LOdQNKiaplYZoBFNfNqTfNaX56XL9U3xK6e5nysbh7uLoXHbDHUIdEIRdpcRozK+dc7K/PWV8T6+Mna8H65s0mihkSmQjAgGKhww5mw+Bg4E22NtjYYIKhIJLyunk5aI2zRtlzjWGserpm/Qr9OaZ1ozrCOSsq6ppJsXoZNx6MjNqHBt5u+HOHLg5Fp+PcU0oZNVaz9DriOdeuFrNk6zz9HHUmE7quaBaBSpo8804MIlZIwD5vY9sxON+bZ+a20pLoM1Cl1llGsrmizZLSOV9CzWSs05MryAgmZDLFxuWmwCgMuWooL15H6TpPNtTp3OS7c+Oo8ZjqE60pwHaTFChGK6GykBUhGAyjkl4xty1tsbYmOFm6+Tu1L537c0nWI8mkQrNlbbWdBhbh1dlbecVIX5Yx6DcFI7vPlGXY6sunFPS4OzplVfdMyLLqHo5bRSS2zYoZ3VNFZOg84OinKbJhTz2Gns3pENuWC4cI4pzIgYiktS9MRZUZAY", "HSzQaWDVfKAeYjLs0pWWKwGzWQkxUwGXRYSptUCm4mqxF6hFR8K6inaZKFCOZkppYcLhsAHzevj56GwxSMTYAOxp/Xi3XnduZtYtMKtOHr565yNa+2h7B86ZElm3hFIZAM1guhspHAFEZjs6Jv255GG5PK+iumRnQxpuSIqmdhKShzEyoVOWUiXbCC6PWZG1GUrWwMP1c/TqHmtGy0Kz1NttRsdi3nufGlBNTzDNpz9EcXAGUY4YYSEBc3HUo3TdJdkexipNOoJFhS6igOASuHyEOXDoZxCK7js4aNtlx2se0O/pntWB6cs2OmKiJsW04lcLqQ6MadJpjWRlBisLmGau2y22HVl2159Os2edOmRG0tQHLoQrWOCYwwArrnSBnxY7p2dcR2pSGFB0DOYmbvbDdJt53uxzHqazk1W1iK9HPrI2NjbDNE13PTbbQI6ZuZNm5LrESwBmqRa2FYbU1J1sj0ZZa4PQOxtsAMABsLiABgKSg/NeebxY7joZtWGwSG1Onvk2s1uHk2yRuPr5+km+beeOfZxaumDy22CjACUjaBmTNG2y2JrbHcf0PM9eyHW1UlPpXLz4dEfRFoNvLkpnTqAUlljo5socq5uPpjPTgXs5VheHXMnpDWDUGdhSLpS+zVBO87HonHji+6Z5mZdmBMce6Oflp2k1MlJS4bZrvJ4XEi1J1EUME5Q1D6lZnojlIKuVUpkI2BMDgA4XEAGwErOXhJ3HS59SanQnJbqO5DvjTcvXlaS+L4Kh56eQHXFvK7uDOhis1sBBG2bmygDLm7FhC4pC+pu7htZ1tzV1LcogdcnXpnbbcoJ92Ncg6I0jIzODjUCUmtXZ/P6pcvXy2c/XydjHSyUzWJ3PPPQHe50OieI3HsOK8Umd2gZSY4WM", "jmXh3ZyctZpldmXN22GZCUnjYWk42XpNht5LyBQMc6VlIdiAPhMwMpBhsItAI2wUYiF8K2IA1CVUfUYqabq4zg4bGzCZ82QN0A2lXFM3bNGz7Umca2E5divLTUSmo5bWelyJ2anlN0JVFYamdN0lBJZeznmst3gGenmY0GFyi2ly7bj7+Gzl7ePuyuxTO7rEzNFw0IZ7zSdY2JAjtnYizbaXEasRkYBCM+qPLc6T2dNnWwHUhCQKwuUY7plCzxDMKdqrizVsqlSMRg4EytoUHUp2BmwmfE84ATgdC0jkctWzLqFlYbBYaR5Ugcs0AdgM+XMV3nAGsDOBmHHanaD0TbR9kqvTwepqTbi7E51MtuldOgZ6OhS2dwSi7wratnRDu8rD/xAAsEAABAwMEAgMBAAMBAQADAAABAAIRECExAxIgMiJBEzBCMwQjQEMUNERQ/9oACAEBAAEFAg7UgO1Fv1E4kuo/Jpp9GvbGwFbiFAeH6EIgjk3G8reU90tGfs0+jrab3f7inZKFWWJ0wrhGXANjlH0kysLsuoNlkyohiZg4o/q2rTB/GQ4JvcleyU3MKW82iVCIITRKfd3+N/QkBOduTUTKCGTW6kA6t9Sg+TaPkU6idO5DJ/xyUaaV2Oy1+1NeCApRAcn6ELHBuNqLSnNhDP1EJrdxOHmA5ZWpgGQQg6hTXbhzH0bkXTQhAq0+k25f1chkXq/DbPJp+j1YfFxjVf4cGo3RR5NML5ETKbCOf8f+mqbbHNTTIigyTZYUU1O6aJHyOA+Vy+VycdxQz/8AUjemldl0WmgTnlDUpqNGyhQK3FSaDP1ASAPjatbLxtTcai07VwhdYO4c5+mQFEp69AJzRRuH5XusyYoEcnLTbWzqQaCoKN07bwb/ACr6ajn", "RMPDxue5acEG1SLwrKBTV7/Rt8aaR/wBQ1HBDVBRbKgtRvSFqfyiyOKCXL3+/qATbkrV7uuZgvw3CKhXB3JrggR/wPMDJFyTCOWm1miNxhOxR5X5oEe0olanU9YuLK1ACU5poFNJIZWULKSU3tO1XctKQ81E0tXU7UkLxQAPD/wAaMMA0a8tQcHpzEKav8psvS2LT7HIz9IVyWjaj21Bf1+vyLEUwjiyu1NIIH3QjDUZ27gBck+II2ltzU2W6mUwX/ScvT07+ZpegKDi1F7iOE2YDtfVvZ3bT/pskNa0UaVN5Uo0glfG5a4hyC+FyGkUNwRzS/wANG4BXiUWxRuoi0Gmr/LgPjiYKGeQ4aTUTB3RptNP1CF0E1013QyF1+iVKBnjC1PJfkMl24Be23Ty3TQwvXsIXUII9wivybrUsrqKFtkDfc1aVw7tRgEcNpCdO7T/pJ4FsUawlQwLcty8VrRupueg5y3uTs0//AFqMxRplbJJYQmGKav8AL1TFZQz9HoCT+NQ3PRZR7jBCm/tqvSHoJp5Q6bqOT3SndfTmbkJh1jZw2DdgIlBHtEBuAEPJxp4rcGK5K209UiVpYd2BgTKa4gReKvxqd9P+vCNy2hqIc5Q0KQpUsWvEoL53r53r53Iums/6qaY8EBKaIW8BblKBWt/Kmkzc17YLBdemxz90YEezsnCwj5JtMr0g5ChUIO+x7oQCPUdf1cIhEiA6hKhEwmthGzAnG2BCNqE3qc+qWW8I5qCQpq/rqd2f0xQGgsnExk3W5TKha+afM1fK1fI1E1P8Kaf8gJUkJh8omumFrfyDWwtPVLA5xcmkhe/TazwFAm9if9mqE6re0SphBwRCYA4FpCEtf8hQvW4U/S98ICgEpt2fpxlHAG5yJ3KIUgI", "NRWUSggE+hPEr0jegCOaNy9oAq/qe7BOtYLJDUGo5cF1RoGgoyFrfSf8A8ejSYFBYzfsoWG63T0hhN1NqJk+m55BbZQTD5uNz5N9LCGRTaKFsH5LMo3aVtHC6nk5/BuN0Nyjn21dlgJrV7Oc0AoboghFRKJ4eqhHNAjqFwq/qezP6kSg2pzQtVggVla6H0Ef6qM6nyaLKVFNM7qavSjY2+KMRRqmrUeAXsq4XtRFGweE3PkW9Q5q7OuOHtbnMc3Ua6pfuoK+vYEn9gSoAR66mGNqbkGQhh58QSF8hRKko8PyoW2wRyDFfjltXdT2Z/av6NSLNtSy1/pcP9FG9JIUoUumWQ1PLUMsFG9LJ2KDNWo1ARCd2rmm1e91XWVmtFlta4YUoL2va1AolAuCu7k8rCb09Czv16fiYqbObmk8AOBW7xqEc1Go4Crun6Z/YlBSm9nFGmEU0orWppNDncnT8FNPpQVsNMBO6UgqHBEmEUKek1GoRWV7oUVKMFZQshcBFkKVucwMRQQ4PKieA4ewv/Jyyvadh+WlfIiQVtUlEWW0rYVtW0lfG5bDSyJEVOFZWq0StlNsgiE3+nugME59enYGMJ2NbCk83/wAKafSJMW2wV7fG0NWo0fCD47k14CL0SDQoZ4SgVPD1U1GU3GHRIyhT1wNk4QmdVCil1CNgRCCJKmUMNyTB3hZ4RSEGBgyYo0wUTCPknNtwPXixHCBEOw3+hyKHJyKOwE5NuzWxpsa9fEzm5sadGdG9UBf4lscn9Wu2l5nQ/OUAoUVGSgjUYpdDEIiKe/aY3ethaULCEcALLZhTKIrKKzpts6sVKN1ikbT7pChRIgqBRrC5Boan3fwB8SZPI9KRCbn42p7Q2sI4b3dloRIUStqdqNav/oTX72e", "8ph89cR9JdLaN6NppBFSU6aO/l+VAhRVuTlFNyctwKjFIQFGslbgsp7fLC3ImUBBC9C9AbIKfIdXO8gZRN2meDsAzSYUBOaryK4qxm5bgETKPbhPB3agR61blaimy22JCaPI6jEGPenfFpiXFbihovch/jraGg0w//I6ofVEM0QCzaxNDYLmQwjUaRZP6VleomgyaFAwTkWC9IY4AyUamm1Rf21NbuQRYFtK1Hhi0R44GULU088C1SgWhDUE7wtwK2h6+NbCtq2JrJRr+prnic1PWrc/EVqCKBPcIbs2Bh1H6mn8S+Z+25I0SUzTa1TQ2BQC9a/8ANDKlTzI/16OCnNBB0DJa8LfqhaRL1rNjTDZEV/MGgyco1i11eg61usUARMmmFMLB/TVhB196fqFoKaNrdd0NBt7kFNPnwcYULVfQOTUCAg4lF4COop3kulTW63hbwnXFIqMI0d0qM7nhOk1hFr4E7nMlN02oACkWhEppr+tU+H2FBxCGspEusnIOgaxlnpNz7g7ZoMnPAYRdaU10r3RrAtoWE4w2kqV7UoWFNzUXy4EbgQVI1NTdtTbqwDnXzUuhAQnu2ijG7iRCzwaKyhT1WZVoXoDxihTunDfKPB/T9FCgQTnUwcr07tr4rZSOAycpyhEUlPfuLtRwTXytT+PpFNppmE7sMnMKK+kaNse1cIaikFP4ELci60hHVC+RTNZUhNEu2rahKhBzgN7l8j0NQhfKEbkoDcQNo9+xSLygCUGhOMvBRNkBKhELCzTIbpt2uDUWqE7oSNvBxT6v6fooZQy90JtIlMRTs6/T1TYJbp7qW2tztNexoRUmUFqOGwxtTkG+DgPi0yAjkZOUeLqDDRQ5rulW4FPAa2Z5EVDii8xJUqVPEttpthqGNoU", "CntrZoTAQKJlC6ioanN2FB0IuqbJ3Wnqj0+gzqRtGRmk7QUERTBNNfpVpatzIVvjbmkLTygoUIigTqBOw3+ZP+lri3lsaiKGvplHCm4qZ44EWd09Uil+WfoJWlfTOODLoOpq9atEcAURIwprtTxd3Snqj8PxCCKGavNZU0F2rX6c2dhZCFAQC94d4lbEWwixQn0izh46f8nfy09Lc1DNRklXTqjqyhw7FJWa5OU4+P0ZXxojaajhKA3ECF+qu60C1M0aOQK1BUCmonYPBglzzd2IoUM+yVgSvZHACE7Gr/PmMy4L5Ct4QKBglTQ4o7puMfI5FAwJtJXq2+V6Qy5SE6o6JuGrVzXFDX9uEOQ5MEnAN0ORppttgDNYvV/dNHMFZDeobV5Cc5pRQMEmV60+7u6i0Iodip8i4KyK9L0gitXpzZ23KGFbJW1X5ZWpivqfFfkdrKKNu94hBrisqKwphlmNcZPCY4Bavep4abYBsygPD0mjcQvTOtRPB3dN682ldXbluUytUy4q9AvWn3d2RbYYK9u4QoQaVFtt4utb+dJ4iklSgU3m7FfSAlW2jsc00++otEjbPlM1AX6cZNJUqeBwVqd6TQ0Y3c7atfoKygjVjIocVdigM0dQY+h2eDsUCGNOz3XMKLBOaRQoqLbDEVlSa6vXlFl6Gm4oghNxwC9lPwEBKIIodsgwvH429lNNPvqLTaC2Ezaop7dmpoaQi6FPkXJ/blpCGrWyjwmaMEuZT9VyQwBQE91wU+NiGPoP81Kd19OwmgEDAw0Xbopwh7uvs9UQiYMmKwopdQtXpP0bim6jmka7XIhkBrHIsIPF+EEeH/mO8IhYTO2pljoXtjAivjsWwjkcfcwruW0UiA5tuIEmmr34NAe1zS2mk220OCb2", "qMrUftAQTuv1C7ZlReF6OE3ACZpkhrQ1Gwfl3UheqRKi0CYCty1f5oqFscthW08I4B7wvlvY02lQtTCEQ7ht8B/RHEymGC8gmml1aJcrccLcFepKAhE7U5xceOk2r+/Bp2uhfE0oBOdC8SmdKEwhYbgpmkomUBP1Ny3FHI4hNagwVcU7qT4r0BKm0lCYvKkLcFvW6VKkrWcYKCJs3VAb8zUdVpFZpEjYUbIPQ1oGaStWnqmaW2N73Rx6FWxIsh4tL03C2raiKQGijvFNbZz9qPIDccBFO78dJ0tyiYW2E7pU0OKhs/Z74NZwlGno2Uimh0leK8F/rW/TXyNXyBfKvmK+Up7y7keQwzs5gcnaJFB4jeXU1K+grKE7+cbTuRdaU2yMSh2WofJeqlC9A0lHbptDU/VmkKKRXTbArnkww4m4tTOpWfNHFAJ+39IqE1kVJRdNCoTrOKtRuKNRkqEcUAKhHDWFx+FyhQo5jDFKyICfpSGtLXytav5lMiDkzsItChFqCNB2HfPAYUyg1BqsB2dqPLjyKYze4NW26OG45aMFiKZwGUcUGPs/SALiBtphF/J+fb2AAJgXxkr4k1m1EtgBsWUhEoGESphfIQ7530lSpqajDcKygKRXVwoK/K02yHZe5OwNQSXhF4TMuygm5EFEQjQG0FyDdqFOxMFHSaU7S28o3FrdorqfzR4RTSdt1E6wAgUdZoHCF+fscruIhgOoFuKknm+hfZadAEdwFHNIpEqFAT0axaOBiAfJNwIiEAjiCrxdapml49JpLVMo4LgR+qMoBdNXvcasbuW2FmnakUsnsg8NNsDhq9OZTXbmnNT2RoaD7dTo07R9T8OgOcZo0w6QmvAc/UYW72reE7WBW9DVgF+9FHls/1qL6g21b1QQ", "svYzKkrWXqRt9JjJaWumF7Pc0aihlevdAzemt2rKwid/ItlOZXTZvO0KJW1baauOUEr4ymN2gd6t7BbQtgRzQH7Hfy+qQjdeoqwSWgS+x9AEiCSGHaUGnbCdnj/4+67k3qEAiVIVl4oLWMmg6puq5oGq4p93KPMi6Y2U4QgEAiRHpBm5DhC3cnNlObK+Myxu0cIWt2rlDScUNJoUKKNxQmA0WRetx4ex9br6XkRKkUwtwW5TwNuIJBb8m5++PkcBveE0Pco1I2OJAO5zPI8pXvgMMTigoUrKK1K/mLwoXt7No/wDQ9lpIi4sH6kOLv9iY3csDlEci2UGw7lqf0QY4oaC+OFBHB/XAo5NnctTU2ECpFGmfrbdMdAyiI+l11Cjhvci5xoJKMtUlSeO68KFC/YzFLoL01EIBTTq1OzQ9eD3Er9nK08bleE/vpDeAIFY+wI8To+TdJrVjhtWKHg0bn0/yB5aZllXhNs76m5w5rkRbmTHE0EhFxrBUFQVBUcJpKcPNufwMekMCxJU2glNCc2aOyphHFfbrhuxbWlfGF8aiE7rpiX6jSdbSaGt+vCBB4jj7U8JRvT9V0+pTnBq1dUPWgfGpRQ+pq1basJuqWIbNRbCF4lERXFZ4gkIkmmj1Dr7mzvag5qdG7k3q3P4HU4XqkQps4SLtTgnC8I1AUKLuhC9JK3Fb1qO8GN+NaYMgwBj6yAV5K6urq/2Y4v6tTy7YaaB8uBWnj6Qv8jNAS06eoHotmm1QVCI4eqTUAKFCgUIHMdGq8XhBek0SLyexTgSYhjso/Q7KhWCuUbBuF6/6poUeDrkuDSHAhQtMw/g5Czvq1b6PBus4L5A5by1DUUhy2hbUQopsKLbBSIQpCsF7OQoucoMJTmbREAL0vVWJmQr", "p2TYOz7hejCA8FtRQwetG3fqOGk0VH/FI+i6vSCrzS61NVwe3T3BrQ1YRQzwKd1aZH05byY9HTLVKDyvkQe0ranaS2mYK2yoQZK+NyDILwyNjltK2mk8CpQXoSr8Am4wLo5T8hso7fjDZR0nTEaYFC1AQjhMG9ziGrvqMvUfbNJ+88HXcCWn5E6gTOlSsubZ30jLxD+IWi6Q9m5EJhlFi3EJusiGvGppliBimngFSg7chIq7McDRq/IwaBNCihLluuXKU65uif9ZO3SujuikrcgVq6m1aTtrSd7iVpdag/XIViif+GJRsjZtTQZ0scG/Zr9+WgLJ0I6aBkagutN6kOGpp7StPCeYQMu3lXi8v7TyCvtGCvSaUTQ0mjszb04zWV4lbFtC2NCezTULU8WlM4zylSpW77/dW4Tl/kW0zjjpHyqcRb2zH06vTjp6e8pz4W4uTHQvbrikyD/s03ATp4WxQAoUWhOyospqEXeIIgrdYGymnqnp2YUomed3F8BoEJxlxTccZUqVKmu5QCo/4Shhe/wDIN8cmGHVPaE4IdvpfdnBmnvWA7BXt4THSMh2U3GlZhzpIIG5NYTs0hbajHqoxUVKPajbqFChbQpuJecLOtreLKM6/duVv+A0NNY/7G7eYMhDIyndCh9W2wozTlCwL2hfMxfM1fK0o6gkKU8SEwStUxTSoMlRV/YG+6l6f+YxU8oUIo5PVNMOKysJ9gnPK3FMPl/k10z4/8U/acomaE/7eIXvSPivX6RuxM+r2GblLGo6jjUVf2YZEKYQaSsNNNOgNzSVKf2pCgqEeowgvaGK24OT8pjYRhHUQdCfqeRJJ9KYX+QZp+dPsP+OVP0zSVNJgVNRTSPlYBsqVZBFA3+n4gnu3fQ7sDBYfEgVeKaa", "9ZTUKuyKbHTsctpTmkIYQmPZNm3FQve1eol3Yt0yi8BFxNc0CxTU6ptJn/mlSpU0lTy1jGnzCb2u8tFz2ocppkc2t2ow5O0ltIWy21QoobCjTYOmhEoIpqmzTcUhap2l1AQvkG75AvkCe8OQwhMHJwLUFGi8wvaGNwanPJ4P61mxw/qva0z9kqf8Al1zfnhNC0wm9nHyBKlfpNN+JKb40aIocojdwc6hQsEHJvVQQmJmAopqkgkk0bd2oAC0SG5oMFvigE7FIQ01gEUyi+eTjc34ej/P2s0Dtw/8A4D3bn8RQCSgIbMEm69UxybRo5FsrYtbwFBd1WGKGWuAlN3BNrrZKOLym4Z2C9tTukAoS0nBQTWLPAIi/F3fiP50CKBgh00B/7dR21n0aaYJdSAtqeNrasxXsaN61iheAtTUJBJeaMHD0CjcBbiFvIXzL5mrUcHI0GU3DOwQyGotK2kJwe5EPCGqm6zY+Vq+Vq+Vq3tK3NW4I9lHDU4nDOoqaCQQ6aTWVP/R/kO8uIrp2GnYFbUWlCQtXpUdqRNRcqVK3Lcrp8NRJcUaMaNpEcNM0K9tKMTZORmoTWyhlqGQH7SNQLa7a2SHSGpoG0gIIAIhq23+NMCIoIKijh48DjTx7qaXQct1J4Styn7hX2ETtBMn6NO7dqhXRcQd5jW4gyFPCVekOXUP1+BTRJRQF0ct7HrkRC3bSXoPARcCpUlSnAbWuAoDCamddV20abpY3qWyNlhYEU3NCOs1fMvlcvkK3uWUZBa6UUevB2GZd2HOVEK63FbitzlLlLlJXyFDUWfrHCVru+rRHiAV6anDyWr34NNBwOoAi9xQ1Xhf/AEOT37zIU0JppdlFDmhwDCyoRHG6l1RzvSTy8oMq6maB6f1QUUKbl/b", "6A6KZUcYUIiEHmk/a47nfQ1pcWBoZlBqAUSiy2p3Qq0VlbgE55ciYW4qeM10RahqV+Qhg3W0qKzfxUBDkCpCBvuWFdQoChbVtQoeHoacl42ihQy/r9OFYoFRWFFdqg/bqnwU8wJWm0NYrhbnLc4LcvklagkViSgi6FuK3K/1tsFhEiRX88LKOfpTWFZWUq9WiT8bl8aA8iIUVCf1bh5Ek0NMs+sFNUf8AJqGXcwE0SYYoZSFBTugwetWYRdTP2NF6+hx9oqFFL84rHPTMOOoV8jkMlRVq1OgPgTU0bkj6QEGyoAQHixwcOBUVikfQ520/S1sCkKKGYAlRUomBP3BaYnh6qKAUhRQpjy1HUBU6RVqgI8ZV1sK+NbAtoCtRovB4NT8Gw5eyFChXV1dbCtiihwi2HByj/h1ucU0dPeXoaSADakbg7DVKflSFJJ+/QHhtO4aa+Nq+JOY5q90sgd1DZAiDE7AUfF1lZSt1AnZhbStqDQFZXW1y+Mr42qGIkCkQtTsatTsOMmfoI4N4/pFshD/h1evKULkPY1g6jFJo8JqsVqtsTH2hGsrTIazc0GhcGj5nOKFAFdq3KLQoUUdlWULa5OlqOQ2UNNNZtT5QaKShcgSW5KGdISjfV1BDqBOEigNCjUUhQoV1PBtGGHObtcpWfv1OnMBaen5WC3rdPBxaoG1bbHP/AAMbLlBWFuKJOq4s2t4SrL0iFC9/pyO1q3o3Wov2zNPZF5soWKt6gQJ26hfKjg5s1niLcAiYoKGoWpfTpAV1NJ+g1f12lbStpW0oMcUNIINaEUDCyrIEIEGjjFHUe6GfXCgLxWVtcocg5zEwv1Sfl0014ctR6Bv2Iwim9iwLZZ8BtitqAKjy9mkEI41Ee+nT1F6MR7QKYAHiTAc", "ZNM8HN3VB5hE8WiahDUg7YPCOMqVIUhe4JUCknjdXoMVFjutmkStpWo6XVj6SQFKkrcUNRy+Rabg3UT9OChluaAgJzGwCVudDpcg1sAhG6koFAbiWomR61F+9LgcAKUAE5Qva1H7j65uaHIggqVn6o3HiD4/XH2sF/wBc/TnQ3mAoRqaGgEqFtYF4ph2Jrg8P0iExqdYNxUkre4LeV8pW8KWlbSgIXTSOVFtVfvSQypRx+StyvN1+nP3BDH0WIc2K54RUUDQBChASoozOPtNIUKFHLA/Q4zQmGu1JZyDeWeAzFQiwrT1ZccleiVuaiRMhb2rwKcADTyWkHPWs/e8Z9uWsv/TR7fo5pPBxTTJCKH0Spo8QKDHAoY0h48tMSx1Hf8rV7ITRKIjk/wDnxaJIoeBQ4YAoTCkww7manjrlHEo9TVuICNWDc/V8dNf/xAAjEQABBAIDAQADAQEAAAAAAAABABARIAIwITFAEjJBUFEi/9oACAEDAQE/AaZPKneNMtKJoEanusYrhEr5kMGhY9tKloWVRqNBqLTcVFgVkOWENj20ow58n3/unLhRoGqEAoRxhw0IhzuNigaTTNzYOHlwj+SDZcvi3yoocaxcUly/1SGzYahUILL8kCAjnPAUBEKQosF2skRpAkoiNePahQ+XiCz7XygFjlKyC6QNse1KlHKfAKik6YUKFGqVML6lh3YVGyFCioCCnwhcQwc5ILhcLJDvzChaEBaFCIaFGkWhih2jGg4RuAvDzY6C0MHjhsu3Jb6U1lAscZ6R480NGgax0WyMliaChUNhKCie18xrFQi0MEXFhrlixNBWUIQRY0NhYNDFyNAqWNR2ioXyFAUKNAfLqhFA2PflFzYvKlwuVJeF0hkpR6oWPbhCw2hRoLR", "aVKlSpQvDE8UyU1GgPOgbjcdoULlQEetAvG4bjWFCANS4Y6BohAbANxYd34oGLHqp840nfCFSx6oEWjyw4salg4UqaChRb9fwDU1m0qdEtCNQgPILT/1Y0ItGiaE8KfSKlhXKp4cNCyAGs9e/Jsa5UlHmp6RUWlSjlqPpFZaF8FxC6YILJ4plqHjFcqDpzT6KAeWm8qUTNYYeYVNMdJUORxI0hoCh+FGiPEbToyYiDWFBeNM+UVyLT4RvHpNh4BaF8r5RxoLSpU7BUudxFZb5RxgOGlFHvcNs2GwqFNsumhj/AIp/SJ/gm4G3E/pTOKC7XyxyQNwdI/gwi/8A/8QAJxEAAgICAgMAAgICAwAAAAAAAAEQEQIgITESMEFAURNhAzIiQnH/2gAIAQIBAT8B0xK+oZ5fuH6vpVH2MlfpqUo+w+hQ1KGPVrgxUoZn0UeKPFSjkuzxVC79TMe4+w+B0/SkMp6qGtXCizso+xYmZ9Rz+xXDMYeNltdi79WTvgSrV4enBiOvQitVyVPM2kcjuosuGYxz8H1yLv1YbWNejEvZFlS4ooSGI+aNFD6jzHnxOKioXLjgsWuQuJcf+FDGitLjEocOENiej1cfIbEJj/ofUWNwzGc1wJNem7FqtckWXOIuR9iGYxXs+FQoZ82xGWZMeW1+h7uVifDHSobotnk0fys8vQ9Lm9GYjHlydjQy/U8jzZe1jQlpeuWX6EuZS0ZzcKfmrilpiZf7CPEv2ZicqORnzWyxUzktlueNFDjn5Ds508fRiWh4I8GeNPdRUMdmOvY0ijxZ2eLPFiQ+BaXouYWZY4Yso+SsfujGIR4IqhmOQuRqPuqnLuL2podM4R5s5QsnHZlWji9OxcCfMsXzRK4ocOcdKE2jy9WSL2w7LMs", "r6OzJUY5WhQ368WWLsUPoSlIUvVFCsYvTdKcxbXQ8r4Gm3Qkds/16MMkyxj1eqKMFzL6EtLLmtMY8v2eXpZ/1MnwXRl0Lfo6hD7KE/wB7VwPdTlmjBu7EIstHkWWXyMpFIxdHkih4w3QtvkZj5ZQtWitFFbMT3Qh5UPIoQofdTX9Hizx+j2y7PI7FDng+RnDlsxViRUZSseCoeuXoQ3UJTiJloeSEzFw+jLyvjRR9ihdw4oo+RlD0TMc/3OTty5erXoR4laYx9HdwmWeS1UZTh3DORQz4Nw9sMzPP9FlmPLjoeReryhbY6VGMZdHNnJbhRTORS+5xVacxl1Fl+vB0x/5P0Wy9XPT2wOtVxD38mMUsuhC0yKPFjv8ABWjcsWuPY0O0JlieuStDwTPBTQ0IqMhiMdGfYbEP3qGy4Ur0eKGl9PA5QsooooqUMU2NFGIzkUNGWXwoX4NmUPRY/wDHbHqc+jHIv6ikznEuKOpUY9TU496vaiiivWpcpXDVPXCW/JiSGvpjH9RyNi0WtmIhumXFSuvxGLmMYzX3XDssab7P40eCEVp9GKKKFo0MRdIpspFRlGPsoooqHoihL4MatbKhMua+6MYuo8mXq3CVixqHOU9/gPShKj6NRl3KQxQsjyO4zQhjMe5cqMvJlOMLLhy5WVfgN8yjHuLnNcQlt2XzLVM7KTFipdRfIos8hMufm9iyL9j1x7L1S59GMIaOpstRZ5s8i9khrjR96p+zJ8644lMpiv7Dmy9Vu9VorhRl1o9UvWy9MStGh+hL0M8jgQ4qbhOMutvFHieKhFV16cutUNxgMvg73UPJnkzB6UeMWWKLiyxuLiqh7of79L6OYpixEh4wkJb0zxcJouMYbosTLhiEPVLyejGq3XP4Ch43FvW", "hIbqFtRxCLhR2eIkdQuNslXpb5/BpaVUOVCFCixQueT//xAAyEAABAwQABQQCAgECBwAAAAABABARICEwMQJAUWFxEjJBgSKRULGhYsEDM1KCktHx/9oACAEBAAY/AnvXBVmuF+Kvg2u+a/ww/TcPloeHiFvkey+2lj3eKIrHJHw1levoxewWlpXf3VXVi11PDVpazQhwhBSg0td55DRe6lAm639Kzx1QUvFIDEHRRHyeQ0/pCld6IfdBoksF7X0rismKdra3kja/1Ff4Qojl5UB9x1UaDAfalRQSppKBQ4uorsaDWUWnkvVR1rNd1bHJU9EGCNdxynYNPy116j+ml/S0OG+lwoU2C02lpu1V21XdawbyWc0+4LeSWheFL+F5eyn5DSFbPsruvwDjrtdRTZaWop8MIXAgOlNlc0wvdC90uHuowaYPptUdqej3c03lWy+pfSnqV6T9URT6d9FZdji0aj0GkEZ0o4ZhAlen/wAVa/FWf0GKl4Q/0i1WpXsYuZFV0MHVWsr8S96EPpaXtznlCuGmRtT+1Cu2lpX4NqDv+6t26YPSPtHw3cKYXdXsCv8AektLF9r8eG/dScJeFajhYK1OvUV+RhfJXtXtWkIp1QBLnAcHfF5QDQ8qGNl3a6iKPy/eSBv+mPhBp+BpEojp8KPTFMnZR5CwptRwsKrVB9LS1QHNFnlFX4miG1khvpcJpsvyCs0FpWqLYoG/6f6Q8I9lLGfj5aAu7eot2VuTurUcKK4cfZDCPNV27tCNU5ZUYfVwruoD6o6+a44f3RK8NCClrNdpNV27ckEUMgwg0lrNduJzLW5Dy3ZWqsivy31X4/HzWRsd136P+OutX2oCMUya/LaCsAFOPTyKAiuHFphh4cMtxOVpDL5p23dXeV3", "VvlaurVgtbi/a/IzX3RLfS+mCiuKJOqYjDFARXDkDXr4cMMab5Yommz7XD/0lGLYZwEseFFjg6rbafRXtK0X1ROHbDIMPDjNG0MOuQvprtf8AdJQNXRiwpsr06f1cVypNzVdSOQGGGI6IIzxQvfXwmuxWkGLbXuW1vlbv3aVOC6Ir+2hiOq84e3VWqnMIpD7a62tPDfeEDpVLdFduIPvKcEmYXSjSjqiEXvRxBo6YurSrfquTpWb6wnEHkooLamYC68S22lcqwcFfeQK4ay91B58vYq7R8r0cG/niRPVvU5psrqd+FA1/S7K3wrqxWlpu1H1h4vOHdESri6gFdVEtJMKfmrwvunVY8Igt0Vrr2/pXlGyK3RHJS5NPlg9rKBssAvT1oHe1V/0vSGuvKtJXRdWvYBW1T8rfI3okoL8uIlaWqLUQj5RfS1WG2rsHObdERRcytNNOl6qdqUFtH/ChRMKF4UvA2upXd+ytTJw9c1+JbpFVqQadLVY8UiFtXpux5CyvVZaKhtViDTAJXuK2tBaUtDeEXHDKs5rkUCygCiIvSPCFApiiK/cvdWMENpBArSNp5K1cxykhT1bzQVJYnD2L2xDwhQKJrFNwtN3mm+MYdtrFArPK3ql46nDBUH4p+q+Hwg5QxhHJuixV6doFFvVPIR1wnh64tqMMKEBRHVW04ea/VSMAoDk4AjysLVVqxSFK4cPhEYpwz1Y4PppwQu7aYeazSKNV8KOHS6ZNvDCu1XdpwziJyeeTP7ojpWW3nPN931i4fPKgY/NBpnGDSKjRfKa5e11cZLtYN3qD6o+sU4Z6sBg8Lu3D+6APt4H7V0cfikMUX/L9Iw5QayNWnOKyjjEKYkdl+PFyVxSS28HhujWa9oVqYf6p7iifn+lB3/a", "J+qCW75uINZXYMW6KzAuUG3h0jRpaWsG1cKRjBw8Txj7qSr1S5r+fDW2roPKhp5o4drdGlpRRGG121KiMYc1FSfluLxT8ru/doG64oNV2tctHW3LHzTddqop9wXvW30tLS016t4LrqrqRxfTisKVpapCjq5wSvXxqOHXJwP8A447Xo+mPIF4wnPCjkJhStIU3YYBhgL/dvUfpRrtg7VRV3+XJ60Sx5D6qtV9NtjDbV1pStLS1ROeaA2qRh+lumwok6+G2rVQooPjB5eHPJ8K9IxhoY4b8htooFNmFJoOHtRBqnMCgKAOTB7q375Da2rGnS1g9WGaeFtvK1RpjQaO1EDXWu237VDzXZXULwKDxP8q2s89DkhCkzwqwXsXsWlK01+U9SFNlsLdJutv/AN0P2ptZXr7qP8tFIotdXMLrRPV5eyI+OQ4x2QV6t0TTZGykhQoBVitr3L0+pR6q/TlhDAL0F7fClu2C1d6LuXvXDgLs0Reiy75CMkVWKvNG8RzDBBoLSxX98uTO8IoJ6WcHqEDTGTiHddl2z2V6dYSaBXdbYYbiKT4QCIA2bKB8ZLc1cwgB8IjkT3bqpC6hRo5LUkytq5wcVAq0oDShWGhtraujHzZdeP8ApHiOzbN3XwVpao3n8sYLmqOmPhLyF04le622l3x7fbbr4ka/FN8c9aLWUD+FAVypBcVecfina6NcP1Wof4r3h2xcUQxKJaH25wd/6/gNra3SQDCmeV4uGuDpTwXHRtq4W2tX+Qsvx4TK0tLWAuK7inu5rPQK0AD5UnkOq2th/jkSe6s0uKQPtEY+IV+lW20FWVivybs5fVBrLjJDe5dX2trsVA2omB8rsFZDx/Ah5rIpnqp6Yweor9XVpOvlTw7ohQVZi1kIb4wlxl8", "Pe66LYW1dH8W9P7YeP4TypFXmjy31jHY1dmsoPyoU0jj+QrItdWDBTgLjLqKrtCkqWHjLdW5bhBrFADArziNPZ/axUUknTHKUc3hooutPCLjkLcoeyvXLyxXfH3eT+l0V+IN8q4YcQaWK9A0xxbW2+0c3mmBtR1VzAUcNgtlH/ieAVwh/H8JxE/JwR0by58NGIqRYdVYT3K3HishS1l6RyEIuMslXVmmFJcjqgX8/wZPTCQpOlJeMnq4/0u2AqaZY5i4rhXeyniVqJol4af4LzzEDak7UKzaV65eUWNVqJoLiq1HnkPT+v4IDFNcV9+tXfDdAqW4n0tIRSWLHBdWe/Jd/n+BJxRXPSqWnBHycPZGKRSWLFrK9EnJ9Y5H8ATi8UmjxR2xToBS812b2q/CtIRSWNftC9tG1tbRUH90g5Lc/6emEl9v5o8v2xfmfpX/WGGmjdO3LD8V7VMra22n1iP8AFE9FOGOpqA7Uzg2V/wC1JMKOD94w3mjTbbS9t0aOCVIXFLbpuVZabTXoNZwXbdeuSHD98rFVrra2vhXxDJttPtbo2+zjv+0easr3zk4YChWxeqntjnn9ttbrhgBSD/BR1xeWst0SKI5EB5oHJbw7eTUDScscr4wxRtvaxonq1swxgZ90bo1hP8iH0tVxyJPTFJqsvy4FqG1h026pq++UnhUHfJDDJ0F4V8Un45EnqVAV2sVqi67PBVl/zF1xbWlpaWltXK0tN6fn5Uc1I+OT+8Ij9LiJwzyY4TRJVj6Rm2tFexfFHwoOH1FFT15eXj4+OSOCwR/tRVBeOV21ltxj0FYMEEW2rq1Bfi/ShFXCteiRvkY60SPh5zlaK02lpXMqwaA/yrVecu1o/tW4VpvaokBb9XC3pFIQVkbIYJYII4J", "L8IYmvvyHqo7I5NtpbXuVjg71S4bxyG2vwr1fB2G9fD+nCPQtfSkL3FbCu8hSrqA0MGLAYAGtrFfLHx81eP4IeUfHJQvkr2qxt0KspGlK7lR1fdOlZrhHi+TSFxYJb6UDHBXUY4G1FXb5UcycJt8V3xWptbiXpO0SfhggeoXtWl7VpdFa9H5e1QNBGgI4uLNOL1fJwcPjmZ689MoFSOqPl+HxTqgBWb//xAApEAACAgEEAQQCAwEBAQAAAAAAAREhMRBBUWFxIIGRoTCxwdHw8eFA/9oACAEBAAE/IUFiYNhPweT4JBnoiDVpRRgha+DvvBDSejj7WXA1hI9L0IcNfB/qhSuHoYI9T28a44UzZg80eCTGfsNHsBNx7n7a5nejZL/wTyWbUediBEhJL8qCR0NpJbG20RH7Ernf2Gphp7o3G+Fwh5cIc085DqRMjFyFgbM5eOw8jcEQ1mCYkvJMDQuKUXEcdCUdim2+XIhNWwkijszZMMYsG+icDmobTSkQWoJGYgg1kQMLLCCLkRKUISB503pMvAVApfI0rWBFQMX+SJ+XRZRcseT+osOBCqCYYjUIG0ghiDKCbqmLqjNwhqUNRrtoSqo2sEPW2vxrwn0QQ1aaGJQgsQ/0jxmxne7I3BuUYvJF8kbG6wIdZExkR5WRH2l+BaHXqhq18DhksCUkOlSb9iSH7USLtgUEDRKYRKnCOqCSCT8Jn3NHFkJQsI/gIbjSyb2UPJEK0YDQD4TEf1PFn0HsLIsjyZDPcJYkDEzfRKXY92T4HrY+6RlqCEp4GOXbyNCDM/hksq0obwRCaJhjmxEaNQPwIXIoBNC6DwjNAeHcMaqk/wAjykRRSaeR1i7khTktE8rYkJ5EOJUCY65aNUggWhcGQ8bvxqezwVp", "oIhzSRl+wagekOLHquGJgaDbyhjS/ol/0GSVgTcy9+xOXAmnj1KKj8E80PuPok8vhDrsaIjokMzMTsSXtLAiUkXVuLHmxvdSEplqnHghh+kMYvCYQ4eBO5ij9Y0iDwizMSqCC5g8kJsfkljUMmWwiKxj09jo59CYy0lSlMoYozgYogSC3yUaJKZkeJIbdTuyypFk/TrsR6Ztts60VuLLcOx3GBPUbOB0iFiOyh9EdJEGB64CUiSrTkhLg9a9CUvhRjvYLEeGi7eCbm0UL4pl/IsnVCwYSWVf8EqjsVQ3alP6INYE5fpj8MLhHSL9icziluJ/ksT5DzP8ADYng8olFsJmpjgQ3NhlGFAzYe5CXEbmE5NoMhJ+MUrKBth5X29CDckytEqSZkcCamaQ8DJO5HiG5YoSLMSbUpOBp7rTCIGlKG6uCOPgUgQSiimKuROdGlVlYS2OCyKXJBj8aI8wnzZgm+BqG1qkpvedYATdYej7lCL+BmcBGqJo+iWVaoItGkMMvoXRJF6LVN3suTymxMPmNMPJlBnb24Mp1Wmcef0e0DbGDLgXg5BSyonHY0zcRIlyJGc/lcReDzkRm/kxmhRyxI0rJpW3wR560j6LLTR8LRu44FY94THZh/YlRS9hsSTHmhCQpngu2Jwo0NGqM8mY+GVA9DQxYFzVJGpBlRAxG5J3UYGBs2U1fa0MA6goGOWQlgscjsawNGhVqizTExq0x0QQ6ZrRoOgM3CEVSk5TnSHEkb6t6CPHwR2hgTaco2/mIZ+zbkj7IsaRWnciEhmXPo2tJJoa9Ep8ImSpv7aAk5cxIW00Zy7Eopn9xSUiwe5DTJhNX+yEzFMk2EI9gpW89MTTJf9PwNFuR7+C/R5Xpi9hkrLF7uxuoQhCI2mxum/u", "S/oeiF9Rk91wJv+DXTiQnMiih7UI2oq4XALFLatNRS9izFUuaRYkzgg8uBOWWE41gQmcicOSe4NWz5ISxufY03GGMcYKEtJQobaV4FTkJ1DxO50TgiXR7DSziFyzyI3Sw9gp5BtssbwwJqHKEVFVaU1p0moIV99VTubibGYD6Ag5Q+KeNatCTaZIyIctvTtDEhZ0wi9yo+SIRYPcqMXybicZ3FjyMQ+dh9johE0nA4lysaaaHyNJsmZcJ0xKdMo7IWnrc8j3xMPh6m6fxBQxCPl6pD9x/AholO0RHcfYiZYYHgUGo0/kdHQcbDZ4Q+CakJvsJWuRYW1tiuxW8IgUFhtI8vwW3RCVNxwhLTZw7McpksihdhqHA8tU+4pE+8SijI5F0NSYZNwsJk7QxaLMRtwN3SCZemHJJYR+mS6WvByvAJv8AZkZxGxZod4cUUNGx4fg6F8HS+DKa1b7BwbaSO40ik1ybGydyJXTNqdDto9jmLGuvA1tHA8lS5KNSYxiEIGYOX+h/tH3uSvQ9G3ZbEEhlZQ1Syh3hwx7l1lGbYfYrzTIqw5JTtNZzIqMRSUe6a2IKo9tj/J9rMQI+4PoG7wQ6dOkWMd7sUqeG0jHMjw2PGCR0KecCE/ggPsuhYHJRSYG7Io3HBpbD4LRliZyLAtJ5aZfAmk7kbJ5Z6LOjCWglMtm2oyCBhEDQ0po49xSyBTyEpQoK0JMGSEjRWTsFOiKb1Z4qnJto0BCEk0MjLGvdwWnAsSTKYwPTgrGjKiOxg21kctpmMeXsZaS7PAlPVbHnI9y3FUfooLsQNGFQ1fR5Mr6Gdh5WhosifsZp8Xgrn56HXMsPgyrT8EhDqOtCyTNiw2yZWJkWCy4YlbjD4f4fsZ6qwu2llDlxkeEWDOuoIlP", "cv4DGtsFiU2HgWOlZdkNELljv/knlHlLdybrJ1G7HgYh5EqNtMh5aPSiC62Jo3IR2EoQfoH1SIDtbtjbmLKErNsawx4ZDDN2JiSZGxjPSlphEsnVLJ8DbRSOwm+JGqcZFwoFCjJRZQYkG+MWhFaYJqZHPiUyZ5FeWo8k8iUuhk6MnRVyQR9hqTjk/hiZkRFbfoygqvuUcnRA5iBUP3HhEppzI4Cba+RmLTYk7fjRZGk6akphw4/sJW4w+H6r5r34CUIShaJHkFCXgLpC/bGlfcx2jsqpMdnwOZarlinM+WVp+xGfAg9gsDlLpcbj/AILp22G4TfAiS/kQftpT2xyKEtlhE3o3Y8hMmMboyhIZkEbjQyItE+h/SKGx1AlCSWB40GNJoguaGu4hdUSFzIPLjWOiOjfWGZl4NtP2ksFibmBc0Q3FomwloeUtCnKGYQYlfdOmxkQHnTITTclp0bCWne8kGycOB7lj6MxTGyc/ZENqckOjvgmNiJViwQUOpGbHacCRBalJjE/+4Suwp2YpIbbXJIjc3DSahqUOXd5LKPJQJxyZ0bhS8D6U+zwJJKEJvrMDLN70XYz5pjjgJQie7fFDgJZ7EvBRV2SfQIQ3gSPMaMo+B1FuMK6FuMN7wCGxycs3l513MhjYWTUKykNyxE/Sn+kXLBnRuYC2Myr00slKIGGjAlZBBHoQncs20x+ROdEHUZKbjzMkoh7YFybEQTAbPvkQEalGrh5oh29MnomzcUxHgp8mjZeSEgk1X2GzcqJ6JmDpBeDsmqEoJSSFKiXsNVM83gmko4oxSSVJxuKESwMJN7F+mm4nYr4aY0o1Jw5xYc3xMLRKTC1pjLYkml3+gj2CUt9mHe7FiXIz4BqYl4eSxFWtFkQ0OnoqbQ3wcHl", "SJZW6+xo/2LJG264JohsRT5OddskFn0CyNCY1gQP0aRE1ohE6EDiCSejcJGqhhiLp4R1r0ZiIk21PcSUN8DMh7o2GwEcipGk0iHwJ9JM4jGUSUjc2SLZEM3kcjKXejcWBoGbMJPw+C6PJBuKq7x5NhBKSDEw9nwYThluzrYYLJpnwLnoVkwnHBEEXKsEo5WzMoMGZzo8SJ2SqH7L+SlJuRGqRrbx8sz8ARUPyJsSIcHBuHsxTZmhFZcOT9ZhckOG/Y3n3HL+yCg1yUmtkLBApbJHUZw68itSe2gNOfi0TTYlEhtoqEoxuJ70Nvg3JZDlsaJTIkUJaCK2mxzWSFhiEA8uRJSnshG3LiZTwYGsPQtsSHT1hc6sjnRxqLxBo4SKxokoDuiiBVvMEgSIEoSbocPKkW9xGE336EyUPGibkRAVsCcyQ4IE4siVxQ0hYjhp6YkiDMPk+J2TMuSW3Z3yRKFhr4LWWns4HDhV8BOnIntsTNaZg7tKPcbDhtDU6UG4yW/sJF55Y8roxOFA0iY8WoZb5pjT40ZVXhirk+5sJD4ZxXtO5j+UMgjw0TNwlLPAhQ18gEOCEeLei1ll0xfQujEZS3Hj0Y9Ub6NCjQRAWNLn3T9RiYZgE+uh05ENGwm52iyPtjzCl3rqSZZxq1bSRNDA93gkpESHZx0iEsSWUBPAa8TwaPzp5CWYCUvUSs5J5EmtiZ76hYWNSxPBKe0bjYQIbEgkSzIqy6Ja9mBM4YnyEmAheH9CFzoumuhQiErcW7mbT0bSyW+hItcV4CQaYlOW+DcSeyGJwUXJC4IbIeXJJTTT8kDuGNGHOjmqBXCe40HCVeiCg3BcatQmuHAoI0xD0bZ6LBEEQjY2MyH2yiFArlESg0LdAwKt9DtUxbuVlDVG", "ZPkRQ9mREhEm+k+hlajjRsDAQixzgacZcixU5NxtQpQ070RdGEz7aMwlR7mA0YyPLuIEnxMh40YxUOyAgj/pkLbEJNB9hCwyJttq5G6z7h614TwOcDxAlORsLJcNJQrfImsIhMv2L8BKTIiwudwlRqknBDnjPoRt4zlCVlDUqGhyxL/gSxU9siUHK72I5s7txp/p7aNSQmhTDxOkHAP3IEINGAJMggdEoS2WF6E+U303a6HLzo7awsChMhE5FuPmwkb7DgvTFOonebx5NuXHBcUXYpRf0hMVEiqE6T4Y1CYYlehuJM/h2F5BSMtkG41BKy+y5+Mia+OS3Qlen2jRMkVsFkxqZEaIlln7EYKngeemMijYhyKFlMRFGdEltjUdaJRsNHgojg3DJIkuCV2SaijVMzFnspSuP0J39qPPg2mt4Skh9mWb3A1gon39O/wDAfI/czCXQSdDeUBzQ5YUhpAVvJbj/APYNG4k6k/YmlbaXcCWlue6yNKrA9P3D0NwhvLbb03YNxpIWT93pUxGSlM6Ja0iVZsnuz5hWNdWmY3NT43FspEcAQmQS7slMdQ7sWTa5Ipy2ozE9I8EeA39OwxtDJOIkjioYmpz2Qpek7I9yXbGIxdyVLsYSwDg4EhKSX0SLsGmnYswFiGiQInglCGjIbVNMvgdpKJl4GuxzydhUntY3VaPBmFrl0RtvsNQLdJZ/ARfYzmEzY4ah9DgqwRJLnfBWkdAohEzZ+CpMeRrDlCxMrYjY36TC3ZN2UHJvpBWBeleApaXlY1wk5HUZECppi94UkaKcuTyMjGoStrExbPYQsxOUbQK/QaW7sWToRAlPJGj0sSWZQYtiuC0kRWQ5ytKMnf5MIiMo3Cb6FqvkSU3Y0Yh9id+Q9oYS+Gnt6Ba", "LI1D0UxwjTjgxxBQJ808jQ7sRuGl7irDrmhCBuGgyNhcpHnOtYG01kjSDWk9jbnb2GOGhSLMOmItEWML6DOmJbMcEinsRFaOGR7IkcwckQ5bYVGE8CQLhaTY1NSnsSMcjM7hJy2YVX7kwe/0EzP8A1DNZedkvSlv7GwgJpEmHeszJx4LTmTLMdlgelo8BkHlOBOFOhVp+lokkkIkwHgWGkf5CbX+SJElE5FpFvBU7WhxKLswejDkW7IlGbJ1xi+w2m7TIREtYE2TYhOEjTFCJDeRNw9K4E4Wx2vk3cCwOI0MRsUCyIcabOhG2JDOqDJINeYsYTMERmmw8C3pNDS0ISiFEBotU1BNEpYGlYRsPAxOTZGNFLS0Poix90JSUyEQt3pPRZBfwLJq7sc0Z4IEk6WWbJmOatPwhvDjWB0GBTnPA0kbbSxrJOjsJCJLaT/uH+qFuTnsT8sh26U+NL0ILQlsRMuBUSvvYtejR0E22NcL7s3wS2nyeCUiJNFgSoawlQuJGm/ydk5aJS+BNFqNou5GpSnPkspMRBpRvq9HJuh9+tyvsEtCXEhJGJzuNlDHmQkS2jAfuRu1cqEhciJUo5MPMiJwY1OVY5m0bEJLhG+iXomRPBmROcleMidjEQcpEw8pyWALiqFgmkPOsURDUtEI2K0JJODD41Tac0HRNQSxHDnSBFPYhLScjdpfq4CGKUIb/ACSC5EiifRPoUvQnAhsz2YvePcRIsze4mza4k4Bo3vYjYFt2dI6MQlRBTwSIWP2JKBIlC0bqCVWMlz9TL3TQimZK41XNISr9ZLXjosoNQmfaEoRlmEWQ0uWRTVCOCVwTAzGR2MnlGws6I7xHFRfJsyY1HcYyGQQINuCGKsNj4scsojUrUlYG+hvbQM34im3", "keuFklPJWwlLkinphsITpybILaob2K4EM2QnuYGJckjlUtkTZUTl8EJKBrVtAoW9xW35SQo1QGmsEi+dJ03EoRuiGtMP0Ru8EvsbRvRVoEoSXBFiyJCQ4ZGuno9fQIV5I1np5EORKYm5Mv7D1IRL2MGs4GxNRrhorMkfuPtG6Nh8InccECbQ+gn4HY9HBCsfb1hckLkhcmzELKoVvaGg5W5O8G8mQk3dzRPtEJwQYuwCIpkkycIhxOxJ3aPGhlTlISu5GVCGbAsDwxDOI55Jh4MkPTERlyQLhu8E1JWBEkNMTITgQQT4BLdgVFtq0LRaSMb0SlCFNf0GShDsgRa4sbPI9K7ikSYQ79xrln6D23JlJJCbamp6b13Wk64JFJFHCn41it6JfvQkajwbCkpqUTR4UCNwjaNhKLlDS35PtGwglbkyB3sUWEN8CQ8ChipI+yPT6JWiwxEnTJzWLcSYn5oRFMRIxplk1EE7olDvRojNvJwUCiiDGbSTfsUOw5QgSFCbRslb5PYEIkmW0wicCgsjhqmixLLftR+wLRpMhsKzj8iVEvGxnrQ6semGjcDemSdeyEkkeT5MbVZ1aXpByfobjFl/FaPAqTZaT8ECUiVQfSmk9vUyJjSe24kpOFM6CxPQpN/5AsSRAuIkmzBGRjFQWPMLeYs+wOk0zegwCmg9CsYG3JhWb9EULAhoRl4mSGniQthig8i2eiSRR0ODRKqDzojg0cdxiOB1YpFSkxMYLFJRcFwSQsidQeRtXhCG0FxSGJYWrsbDr5GYF+Rn7WmCTsyVshuTCIPnI/ghKdNh6IaMaKXbcSCZVvYwt5tozjqyrncRhCZn8LTB+CyDD5E+EeJDApWKiOENwjROVtoWokeXSJYGQamLAs0NDVDlokJs", "DGCCUSUFhgaxgvrw1WmRexVEidEibIpyx6MUwQ2zC8H7yJem49DmhE0wMQzWBOjAbBR02k5HBn2VOskCQhshQ/wCQW3wbixB3OunLnMYOWJbs+6hopfJk0k+BE5MIEiBWytjRJ25GSU3ZgNXomQ0jNMyyOCDG++jw68EYrVod7DaeJgmMMS0VOi441pj8fgTg97rWYRlS9700ifRi+kIKDLBbsYcUYrmES7G6NmiTxFKK5aHOxYmWBTDfJuj7Y1qsaLcl1TGkNYDCIUkawxChZesDQmhPZSGhQYvJkxmA9Q2Hjbo3TJlIiyczCPJ4FCU0pTuZGZMtJoSEkg23b9hY0WRLMDOKy6RhQhYdC6K2J2jXHwhEvd5cG/yh6oVuSTvAeBvCWmBlaYObOjq+wycrG5MgiVcatxyj8i+dvsSNkS06yGzuElLjTB+F8+c6JW4Hhlu6GlLQQPNpylRXwiHBiXwIzfoKTSFlCUJoNPkFkJQyhsTukTb+NfIVsNjXECGE0iOx7jaIE2mSSSLGliCVQFf8ghP3IORuGWZEEEC0xeTdmFG0eiSIpgWsKDIoZGg3oSIbhDhtxI4kOWiUqCyWkY8NGQwWjoTWisml2yrdfsrwPMIJYuc9ksm7GOMYcvfV8I2IvkJQoHmC/jqwyKIA63DKfJNXkcppW7NyJMPcTdJW4SWrYv2IXtpg8sEIoaGNDd6LC/CnYoUHsYv8RLLf+DQUo7NszN4LBQT09xwT6TMZE1HB+43DkkCuUiJTgoTeRORiVFhGFN24IDZKWJylUO0RrIkTXJCZ5ENEwnD8i6fuQ0My8vIihMlMaExSNk4Zg8m7K8mVGSBYsaJF5ZdNGh2OK8iZWLTRlClbDBAcLS1ofQ7bE7jklIlMlCRxMsTRURu", "8ib5NhWyDyFpu7InfsXGi1Zvdx0iIXbHn2/TEvZ0ycYTXBOmkZHEqJMWf/WV81c4YrTHl3ZvpAfBCx8EUDd57kcC5ZKyR7b8TwViPb12QYBSGNUlYp33puTPpCTyCn5Dc5IsSEpgTvNNrcSEIzWKFmhwlanSIF/4JNh8TE2zl5Upp6I3PBLEXGTo8g4q8ehNpEoKCT8DEoaDE8dCooEovgjLlSPMeRq2IvDFGZJhLZL5HvrOwgSKHYlFMebYh4Uza4ILyB7xSGhmhSSbcHkJVuyIw/cxYiRbyRNC4vL6Ipci9x9UM25blvcaEpI1/ehBl+CTULf6Ps+qGWSoq0eGPokmP/SVnbeXyJPI4xoty0Ll6NbwLGviIShQvxJw0LD21dt/BBv0QksKtDdDGGm7i4IMNiypNiE5ayPaU7glO3ZhggVL6GNqwep6A+NEUGLRKskdiRy0uMksRGksjGjAoJJOjIIXCZSVMsWvIeWWOylCpY0ENRRISwmbqHTWPgEfcItpugkdcVpMe2h4NtEll0rCwQY2kckf7JZbbtnEOW70sOolULQ1Ay5eWRLEiJvkSbNjXpieHTG8vcIt0t5fOjocZarBkXCDZ9LWd1+X70no0LvYWCWxF3b/RnxotVIwIto9zhjJkQNh7eR50ymJGRcJEBOg70YwhtNl0RXJs0X7EhMSIYxYNhba6U2SW42uwfQxES3QlZCmYR5D0QpQ7tERSgrXj0QzEcN7GVC0mHpSNyb5eje2lkJgeDHI9wiEKbhYWQ7WEjHgWH8ja1FoS1kVlmeIZEDgMlWfCFheyL+g1Al6G6B6JLc+W/XoeW5v6OT6Wtfy9neip7fQtK+edG0kukPdV71WNVr2OBL1OjYhr3IZyEiUxAlN2UDlRgQ1HRVP", "EDyyZyORPgnFiWWbEkuSfJNq2ZZuYCWDbTXmNLc8j2Au4cNZLPujVFUyFlpJXgWHJEqdDwVMGS8MZTzpQw0VZke18DeQkY0PJlopNPIrFAuztiV28ipQkJcRw5FTbgzsvY3yfQ8iE8IRCG7SJZA0CShaG50idDREcVejSPhSQfBabjSFmKGpR9Cwn7DtQLQvr+Wku2voT5h9CRcLs2CbLpkbMsj1Vn3A8klW2u8DnYsh4ZsXhMRK8kNCfBDjwFDbESajVBuyKSb4NhZRU+4uIjSHInSIGLiPdBkjiUK4JsVCjgzxZtMG5OJuBJq2RksG1mWCCxeh6YBpTqGhOYZDYkm6Q70dCsuUhItsSyxwLBM4Xm+SCGjTKCUPc0vK1YjsD0S31y9taPVY0Yh37kvyn6H+wRGhOUJDn50bK5QnX5KcRRsKW8tuO3Lt96Jfghd7NMwdmTCQhbpqUPjE2dCMWCRkc9SIkkmNeCuL4YkppIdzY4ZUkKDbSGYWUYPImETYlEMnrSVj0LGe+BuWbGpZab0HdGNoWU4My9zot9pKacDdOHsJqGuexfAWHjWX3DwZCHUeRv+7Ey5Y1JcI74JUvfkJJKFjV50g9onbdNy5MU6ZuM6Ql7DkpUsEtxVyNGNz6jFgGxM2L7FQ23uWbwfPot3oQkqxt2+DuD2TTy5JJiyoT/HVuAxkemCNexDQcG5odyZiyEaNIRDEkSYxEpwrQUYkNylHowYVy1kOzqxxdPQQQNVpQ3JbybIWhwLuhJXgniJ5EciSaPBn0iUDOK9h1IpTkiGiLDFGS+TghK3FxLvCJVLllY/ppNlptONzGlHR7axXJ0Ux91jV6oXvknQ6Ql4glKSgd/torc/BnsSZ3Gp6b9CtCtujAHjY4m25eslBduSd", "ZvgiJFwKi6PmN0MKW24tU4hyML8SAFILDQnVLPg7Y8iSeHPgcZQvI/MT2SJb/AAM5IXGjQbbGyk2ZsboqOxoCvBOkNIVwoS6oFkgg4hsA+tSIMvsSHEzrJJMobxSlqh8D2FkeDZwQ0hpcDQosJiSrEEYtCQtx0eBfvoNriCXRwHuWl6HdiWJOz3JlrYRMkdD/ANR/hY3ClD36CSgVJES5ZP8A0m40vTxethOfOkXqpb9mO4CwbGPJnsicvbR4GnoSWmwR5J+fkkkKDcL0M5Rt+xKBNlBIi3yCWINk6jPkUISIG7vkczDrYQJF+JIciGKWVwUv8jP7awQRHodtDCySJWbEUhtoSXZLFEPoTEcr7KokdjJZ76bjZyJkiSGCyxKJ2LNk4MhDOBhG5bHYg+ZkkWLamjKxqWSxO0QcELgSKaKi2mrKNwUkt+WUT2Ra2WRQJQK7+NOj6caZ1akmM/OiJgQ0moYj3cwNssv6FShau0SsZqSNgElgo9D4jloeiy07n0SpihGE1p7aDwZrkQ1gdubDtC/HO8wngVymG2SkUxIgS13IlZYnBbWCLfg2GpFsZk5DM6Ensmb0M6Gd4k2ZKYjR6YwSpHKCiYgznGBWpRJsdm+i8DPmJ0k2Fj0pDLJHo15L4FwFtSZsElcKasaWdyba/DPKUwbW/Z9seTizgTOJbuWZoWPQ1J5+SefRD6ODCe6HrhCbvL9P6Erkh38E9P4PZk9P4PB/BBIafwNNMUtm1SVa4vgb5WbTB/kRBcNMsm4j0Yiygre6seV+LITwCY925mlAdeB78k+VBJUvAxuRBA6djT3yNCaMiciwbiltjIS7ejQ0tKxtG6kSmEN6BMbYr2Heabj1t8BlP46bihaXcMbIqtkkkwbHAWcEMJhkgOw", "lDwQIEs5ILzEShWmJLt+9Ox8iTuE+ETGQK3gRAe5kONpoPrcqkY+zr1dFrF9EzjW1wmGin7MCrh8l2qR5Gm4g9hD5PcfJC4PYsvVi3HFssdi3Ho2HgM02p7Q2iJxTEcy7nfSBXK0eRaZje4j8WRTlyiZQ5FlkNFO/7CJSBtCaOHZ5DXz8M7O2zoYttE+RcC2dm5MWLKyJ3IGFcBpyJXvoEluxDEjGPXMvAmmaE6Ni4U6FoVI8CWm1uWVcWSScZFnwNoBKBKw1Z1MoalwmR2e5LlE2myIYuLsQJBsc0vLgg5cf2IkkYSrROgvU+TJ5+TzpBEfllckDYlI0bCqh2pWitEpyypMow4EzPkhNEw70YtTQvw/oX4lv5z6MFM5eRZl+VaG1bV4lUzkV4sS0Jp9HFK8Mfj9GQu2TszkSv3JnkPU5QnLgaKNMU7DvFFvglwRLNhMQ3SQk6qYqVCFHZiS0gxs+dz9R/EWBppj5FRto2YFhdhjIYr2FgkYRvMcEqFqFCIp3LvsgTUyr2LJ1RdOnGr0bqEsdvZcknE5y/LNtGpdL8Uf80n0t96E9HuSiemWX0Xyjy+jPD4HP/JR/UeBssZTZM4oyjGP8k7FzyW17ZHsajE5SfIxas0Z2IF/iS7xGxK9CYhUy+UXB+l4LWYig+GUU/AYH2MhmPgfn4sdSHIyTI3KrTFpi2iJyOCn8wJm8a952tTeibW5KLGzUM/US9pTSG2g+SBY0eHJnYtlCcYC+MJbjtmEvPgTZwIlqeCwSobzuSUi0izSZfK0yTbcbswHLC3TtLkZWXL0eBoE/xZHKxTgSvHsZINFvpD4EPn4IXreB8Ea3q3bMTj3LkuqpjWGZ/Y89VD9D2Cw/kJX4nhTzZonHoYtGVjwJtT9tDtn7HK/", "gLPEKdU7IQywmeQhHKmSURYQUKuMCWirLjHLZbcFPMJnrIwzDwIoMo2XfmTCMBDUwUcCbUKT2Ao2dDpfB4jREKnGCoIRrLwJslMHuIzpU6ciUaSkJkwmYbX6CD/wFz3HJj+K6CmMH9ix/lnThdiNon8LUWvgmPAyClonKJ/C9l2bm+iv7DTIQPPxUiVEEHDRoQfxGb6uzd7XgdPsn2F+JA2wvQsjUzdFoqPeUIofT7L4hlzpA542FQbn7JKUrjjWQQowK4s7RUXYcoSqMgmVTqsDOTEdGw9TPSWEIUqSysCdj30KB0QoZVIJUOBJS2XTsm8F5Ecn2Mq+Q5ZeBISkkKhTdbGX6Q0C5djAqvFpv7C0QTJJJG2nQl3ohyQ5HxROiXOi/KkSnjTIenkkImmJ7caNjHp8MLXa8CD8MGIsNg8qvxXd/hizrnR8rxz2YpGNZ8i3kqDXnj9DWDfIiF50TZYeV5Kh3CnFpEhJ2FZQjGZI4BRbGfRSlONIcG5zpIp0REjJuA8UFAnQ2K/DSERBWo5qZHDFr9isIPTheSElPwFv4S+iCVS25fYvkDXcnOj6j9aP+NZFq56paF5EbgNkSJk/mw1MyF9FM8FJmZ2G+dGb6SDhi1SelIoH6AaP8X+JIfRM6oe0ugkoEoSGSsm/BbehUhay8wXRy9mOxLIt40ydDrHDY6bNUjAZDa7ESE9mjaCCTM5D08BMR6ALBuh4MHqIwMQ9+Elk0Kpv7FHoRgDVyWGBMit2QkhKEiZuK/obzq03H+M4P69U+q0J97HJToT20kn8HA9awhoWi3E8EsGayfI70Y9ERPJaJIZNeV+w4FnqUjOOlrsaVKw/xcGFeSy0rSxsmWLkS6GCHucDb8IasJh5wVDV9DQD+cFLys6Q1xQl", "FjZHpLJusxEgux2qEaaxikN2y9BwPFx5aDYWDgShKtNhCV6KMYT6jZ+ekQxeRJtCJT5eY/JeTHCU/sH4Iyo8JCX/cWTb2DKrsej2Li5E1pt65J9U6KWkkk+nk3N9RuNBMtC3gGEXox51bSTuRolhvX+zFOCCEDkbJMaF0x4/E688jffDYOTw/8IDl5bflkISFr9KPnEbRxE7dcDZwlIiwt5YzmSR4TYtxGRgJ1VkuDLBbRsSb0pwhmuu9BsYY0HMMwabCEE0SinbRHCy6NjjTvWyKJohSpRsqVltkawlySJlkzoTsjZBB7tMox4jxgahC/wDjJJJJ0bE5XuIUJYnKIJjlo5TskSq9W1yFlkHORLD4TIzPE3hcIjNktRZcB2miBX7MX4G9st4QkN/1ESqwxpGkT6LMI8MSJ2uTYClOt60ZgvJfBgFTDV0SasdLOkVgntPAmHgVHcaFlaaG99BcCPQhqY4Wgw8mdzBZZEogFD+A9gvYobbYN+Cdg6KOzHNvRuL4JbS0y+iFYdPozB5OTcF1kUCXcTE/wR+ORaEdMlPkUiSbJmdZFco1bHeq0bqJRU1sKr0LDIWIEfxjUogX8+ttzBLYQtZJfLM5fSE5ePI2LQni1J72Tl4dLXY1g+Bqh8UeRHloyjO6Fbhyht0dR0EAxEJIHITRJsE7IN6ZWJbkWpJa5YRHZotCEiW+BEswOOhjC2re7JDiXZC4aEJJdI6FceiVFuRpI5HL4P4zkVIOn0y+W9+QmJifqnSdSU9J/Ht7m2qxr4ep0kb9D4JoMavH7LXwoZwsZIkGA3bzpE/KxemDCl7Io5bIyZTzpZhUKTjkNQ4dMdqhomdYQhpEgXR0RVjySamUoZCnn+x5KrkehYqrqSBrgTsith8m3I5i0Io", "GhUgR0BE1TEhvpEJWdCnE8aMELS53RChCO4NQjCcNyPXqwFwcmTeBmw8vBdvCHkMTSQL7LrZoTExP8Sf53gWNeApokb9CWbk+9kKrIb5CRDEOgmNid+9JkgT9DcKWJvy8LhaTW1iNYe3uSXA6gOfqQo3cIbnaFwLAtHto6HgT/wDUS2+wUrQTZBhJDO6G3B7HE2Mlk4JEqkOZs4+xg0EElCcEJbJsRFLFaURG2QfpGtxEDZM7CNMgguYXrEm8k2bDw/Bdl0K2QJAv0NAUsondEiJJJ/CmT+PfRi05swiSfTtBgs2hvRb3GnBC4LBKxDHRtq2O9BaSR4H3ri9KEjsvA1/2XQ8tuRC0ufs0eNJaSOCZJrcXFlY/oZZy/YsRJrhieZ4h2EPwnQ5gZ7iJbHjxmMzGEbFIbUQLGRkhJLwhqyw3Iid5fwdn0LkOEOgLhDpoymxOJtHJWuV6E/R6EZC52aIQgsGFUw+DDkQknUn8E/hW+ryhaSonZ+fUm+sGWw8ctS7Y84E4QeRLmxmlnMPQ8J7NJFbOGe9UgWjTkh2eBJ4+hqEse1jey5f9E62YTC0kJS4I+VkVZYHjTjwWP3aJb5Z8k4Gx0XZkiGAnArWkxzujc5VETKjHwFzJgqPs/pDE5oF0PNQnW8tGkExxKF5RdktbNGzcGEyW2TqsoTatUMntZWhqCTwCvVGQyDplwxapc6fIfib7FF2vJO6c6J1lyS3QlejRaJJEyfXuN9P4GAtrgMc2XfpSGRFskS5sCZ2kTWUJNaYyWTtga+hotHiskAm5lx8sWxYW2stYJN3ZPREzueCbb5Dill7F8Md8ltzbb3I0YqVlmKWMF2JcMTqNDPYa3gTv4WKZ3PBkXgme4kiBHRQtqFexxgYVArk8ngcj7Mn", "4NwUQRrbktSx5jMDICuRFVN4JEqHCiILsaNqbG2yo8RwFNwkNtpp2iD52aE1w+NH1DDQ9co1l0JrJNhPRi9j9HETt+R4NHoR4tLrEnMhD59xNBqNUySdJ13exzpuxCtPl68eTIhzZxhiHI5nJZkDGzH+uidawT70bQJWk8aPIv+htLpwjDfUSc/UfZnhLYg2IErkhwSLPgJSOwlDoSewzY6vgaw5K2JSUNk4fs+dBoaIE7yZUL8k3iTbounYk5EUK5JkxhksTLLG3OXokucvX2L4FKiRCWG7zMrCJNoqeMeS1aMD0NX4NzlCz6GhOdZkbfofKdMVrKY9CQuRBjFkYX9xPB2M6SSSSSSTpNMlb4Q1zuyPwfOx8HWhG4xrVshbgc0iExn9Leb48CUslIs/4Hku+EUWOCOR7HYS50kkTHLWB23oixlCY87aYDefRgfSfAxhLVImlEttopkS5YpSZbZDIaEpWdJAMnG4m8CH4JvLRGIN04JCIdzE0Meo3YtErHOembpnYR50zNjcmBgLcB6baSZIj0JthNFEGcFrQhIg9LTRI0ZB3rLJ9EiFpJDyfqStEmTx6GYIQUs2ZByGISJNXBFMETtVotFD2ZfgmXJRdisnLHBCoabWNtlj9Mm2qQmgTKcrcm02WCbbb0ZMr5Fgn7P7JjIw7kDTl6IUiTgWYqJckkkdxHMlcIbPBBhrOjokLehE9xgEJtsy3NVsWJ9osvaKcnzuTPTHTF9xCGoGLSNGNyKUJeaHat7D3IWrUjUE6+CedZ1WRY0n9lftQgj1Ie5GJuSDid2R2xPsosNM5odkBsNrGt17rROhf9sE7j3XyJS7G3ljVlkar0TI7N9Xn2Y6ZFcaMR+xmJDS1G7Emwmx9rT3F5OhKSS0SlkBB7ae", "7W3ia0TggbInCUy8v0MmfuPYnBM2xLfRaejxHkinokeCJMEksb03GM6ISGBySH3BKlndDonVJOoqIHo+BfknSSa1QxviUST60PcdSp1TPDfBLl8CyOzqaIiQp+9GPI1OCTjk4E9A+eeOB3n0Mj0rOqDYW3RaNN+CTFgbJ1QL3BqbkbQNonVM09xpQydbjxISxIjeI0Kv0SLoJvgLjgXILmZKyRskjpkzLZZHFSno9Nx+0ZuU59BiO0TMuRK2o6MlyeRISfZkuYFzfwJVtptc0IvCHv0TbP7HTRPXJjSPRBfoXPz6II0TROEQciXyxJTfVjnnHgwyLfRZWfD0ZoYSH+dIGC6dcCrSSfQ69KErFpSTHVLRXf4G7le5X+VGZpyiHkIRS/YMadn2NDKjOXJHSxnCFhVbI3OGn7DSckCw3WoTPCE47iwbvySmEE2w5Lw8ifmJFlEnkSiRUoxbl9nwTa8UkUccC03GLyi322FqY6emBENrHoSp1nTKLi9OSEnyimuUPtOi9Max6PIpzsTKFlXxoj1KCdLeDaJhJlk26ltS/6JNPAlA3A20ic7P9kYsupCYr4ZA7PsROqJMkRfohIgmKhxTgqkaQmPe5nGkzYQ2KR2qSZzlKxDCbFQLjTRJ8DS275PMcWSIcljL5IUKWHexMokvIkSfwJNUzYTRI4H45dCNDJTFtkOlI6ZEcUlYJOGBLbFXstjGeY9iZ1gIwjAdGs6yVpgctXG4HJzJPn6E7exTK+CBLet55iyQxJ+Tw0TrNolYPST3L/A8aNS6ybonon0pT0h0XeRjsxngQlRpWxMu0JEozkghIgfqE3s0QqHJmdM970vRKSUh2R6J21iZwr0UdqPIlyewkYZHbLb+xDv8AGRen8hDE5DaCctJMYmJ", "5xpVsRoTZPCIhLQPQiUDnoJQkp4EU9w7E0RKUCi05G00BOFWlmc1FKTYbsxNiFj4yttA21/zEnT0XMyPjVpdD1WEe40TfS9M0EoUIiD9BW9V3FalCpyNlKJTafAkerOPXs862qOP4jvi4mNO4wz+4vvOEYRJbC4ppZb3Zyn5Kbz7CTloLdELsYlz0i+BrlvRaPSSdIkxjXOET3oW83siE3PIhMXQQ1bfAsnB7siBTeELaJfVPgi5HkckaFgtySfY3Zgy2LTOmx6ksUJZiMFkSYoG3I04EydG4RVQxRoQSY/Vol/U2EuOTARcxQzc3g4BKBtN0oG5HwQ9uWImYhZu9XGWedFonpyHKcNQ1pANSRqnolnCSRGREjm7Y8CUabhiX7lyVixt2tEeCnk6UQ+mR1BfJLPAj2joHvDbabOx5AXMIj+VkGUvkceCCOiynCJ5DTeH0YtBKNWciyJH9w22l6fXH5zF4otGy3ohFaw3eFyVup8lijRGzOxiTuOSn7Ev6GI6OKGHaFKRhy0FLt5dsSVQmKo3FllklC+mV92+hz7aZLO00z2GQknwb60xZZwLkwcgveRDjCreRaeAxn4DxMtKbTBK8aErl4QqOFCGrH2JpSx32J+BZ8IosH2LLz6MloTXjRBedmRr/AK0UCYehMkg8G+i6B/iMat6Sf5oan1wQQRogaj0QR6pJbIbho5dCtSmSTohIZMdIYzw2mUQlo3q0SLtjQiGQNCEptjTSxrlZJRAy34Q1/wBBu6FONmU8ocwz02GTNQsItr/wRhfr4YpkgVYCG4kI20EpQ0mKCxMiVleKQ2dA/bFF5abLNngZZBZUTTbbzJCBpEYcjJUJFhSQ9Q1uZv6G2CeTb0i1UEsb2wZKfZqngxqNUz4Eo0sy21k", "EaaXDTSkgT4vgQ2llDUr8iSiEyOvIjSCCJcLLEqETPW4MqHjVUdhux0y5REWt5IQ3A2XpBuCeETHbN50bgyHJGkmm4ULdvknTMcackYaME8GjlWCLpjslyxOh0ODP5GpoVQJVZ7UIIwUSRwLsxBb+x4gFpmoiJgyXgegcJBSgnBlE4EpEPYgRIn0YH8TD1vkTMfREiYFa2DUGDbTDQRqCvRvRbJ3bMX3cHpgn+RfhWp7FarsQuzOfkW7nYQijfRabDMvlDcpiwZvTcRGy3s8acBavZSuRudVtDN6RKKMkjW+WirRR6fMJsaE1G+iJ4lGAqnGqmGGNXXYR/9oADAMBAAIAAwAAABBRn/1L8E6nuNcwKVW29EgfIu4juWbovBCud6ntX3jTnouuI/Igcynkd5GeZw0PaeIJFUjlF1H9IdNpCJbA1Fbglnh9/wD/AKCF2P35jXDbEiYylRJ08kAd8OaX7HnHHWdSALSUYQMxU38Eqo/N2RJczfP+4EzhUXXzXtp3xTsywQkpAVeat2ep8nw/tqfJcIwW9/OnC3oELYbYnznHPKzIAFvfpoQRMc0ktrLhPGEowlIp1PMqnoOlebd4WvU2EujDl3rYGpx2I8czGLCACXH3V+rrzBBF0jvDSSPMkNn3WLtQgkxVURJlaWOo110dTcuKiuBuQDYvLZWDEal9LeWfVHnLo7McP/HJud67XEmjxvcW1Xz+FBJNlXCWGzwpsnDoYJN2cpXcGHaF0vlC44mJkJNN7ALcj7NYsu5j4T3z+YvsN2T2XdFGDBMAXX/kpo8RHAH9rOnuximsyMAy8f8A7gjwA5BCmpf9Arxml8rvfci/YH4vT31RH5yzlljK5gWH0zCKOsX8Ls6a/YMf7YjXzYZC03mhAlroTkC", "2vUdtIfbpa55nrmEVC5mRSuHN3bR6M8drSgKBewmWrYquil8EVy3l9WCkuPK2dbmivbwwdSw15jkzhxZnC2MWudzvcXmC5f3p+3C+/Z1pLPPzryr2hBZKIQnlIwROpr/RK+p1Evq+Oqooq0svXcEWjJmSWTZduID2q7kcnu6T4RyffHBmGxhuuepPr1Mwjb2KqVRU1sDQ1i6JOQrFPmxr6zg6870bv3invZGfENEyyoJVw4NGTZNZeNxuqzp7DjxOF8viVYY12xsjGEJ6VKv76KhZALGWpEIQjXNARs8lhfZSMwh+V4kp+HBhINYRMGcjWb2YENLrV8rR+2ZSAKjx91xFtZpeCzNMwiDmd5XazvcfpHbm2arhTPIgR8sUStOJoLpGFDo5R6gARajy37MTfKcJ1a4uA2JY5U2FFD9AHmPZvxA1QHKCPEB2TrD3RQ0A/a17A53AxCjo4rgY4KoAfdKKe9UZcGlDVw73MYp/Rie9YcVu8MUg08Xj7/jenjEpaBClDyCoE0ntUFhQ1uYtGXKObeWZRcLmZzpyZ2q8HO+/c9cuUfOvi3DZMCnYAwh8AQDbITQpgyz8vDmJrZGfKNq+O0ctvo+4JZOt4uHMNcs8+8t8ecX6Lf2d2n6igABZtVg7ZW/f9bu427JTnx/KE5RXaESdXizUiNEFcXnevPdPuv1Zbr/J8QiGQAB5FLsM0elwaf5i+u9JA1hCTW03eMeNS+KPwEkV+vc8MOGX22M8Rd9gTE0mnw6oZVi2t/sKmbPOnpwcfPDUdBpuVU/5wE6lnJZUhXwjUudHXVOFvDOugfW71r6K7rGeNR53MvOJNo0zlcy0CrKjgxt5JHvO602kzLbQRDk88OM3j+ubI4BA5tIZOMV/RvMPd2mR4FmqD/e", "3M7WxORxNVlnb7qiSI6bhzxTF30bjUm3Wye5jeGQ32/BT1QumCKO+vh/ZDTSmaNLNFTOU1PqTyZ7ILjhYbTCw4op+R+f2NEe9uGn2CYMalTu78ljxw7VO2uqdDpInfIcUe7Rz7yL3xSRHxIjDAwSgkHyj0297puaRzMvMYSei2w5VMaj1PfA31C0fDAJesnP6tOxWEFuXKyCYii1zyxTEHq4TbEAGIcNR2+lvkD6RUYXn5TPHt/IXfaAjibHpoWNgTKdcG4LoxDXAcGXSIVClBaBY3AnEhreDh94WhEr+G9b0TIZOU2tniJNDRcvkiMO/X0eck18w3yVt9DY0FBLSWSN8SdL2BXwUyuqUwlfZm/NJWP8AvIGu6nT69DfJ0JdBFPJI3RO5bqP+mRVFA4i7x1/EeYEFvdN8QCPeZls5rOkK/wDVnAyuUf8AJNMI52Vjb4S7iv221l/nES0fnQ0jg7mNpbtWumy4N7scPrmFKoX6Mo5CRkloub05kV10DH1sKLX8jbMnE0aZvQQYTvQLkK8CNLoOnOJdLjB8UCQuV2SXeJi75oG32HFtC23D0H2o60U/TsRNn2ut6Thsx2/psH//xAAgEQADAAMBAQADAQEAAAAAAAAAAREQITEgQTBRYXFA/9oACAEDAQE/EBj4Jr4cZTISMR8Njv38DdRNJiGhb0i/WbmjQa+mjGyHNF1jo7wnsS3h29hCymLb2OHoZGxNQdWh/gtoo0DcL/ZTwkXDknhriMn30jRYusbOCTRfwN+hv4PTQv2XeFpDF02Yi4SNhyaZNiINL6aIu/wc2YtDBy9Ewj9DfGefK0UTjo8vKQ3dCPhD7UJEE09rxGPDRwP2O6GovFrEaPFEJNokw9CexL6PaC0hq00yiMgozvEXpSY", "SS8XT6IT3Ck8PHA8ceWhFlvMJzwS+nwdFvZWE/pdHwS8i4OcTK5hdOGdiPhR618y1YyBS8IbhVaGnRoamhI6pFKPnhqvWD2hY0L+jpH6wm1wSPvhfthtY0QtjWIQQuZ4LdsRR4cPEhrex3wGqE1rgqRiS1ZWNHZU1+iVKiETYukGPKGQQzQfRiY1hLR9G8MaQP9BQPHGxqLCyxeU4UXMo4Z1E0v0dtsQkENDUaHWZXgktYCexN0rE2+jxBKCbTqG3aOPCWxrKzZ3K/RPDf7H+g3vY+5REQSbIIeFFws0rE97P6O6jZRK0/Y/76tfB46N5SwmHhT6PDykOsaG8JYghh5NUhNzwl+yeX3K0vRjKC2SPYmRG2yJ0WygysGFhWXO2fCJ9ISeloeLinOWJGRdEhA6znjYSQcifsgSLMfhjOMMXBQd+n9EERGhsrGo0dJl9ElujuODwsrY8vDJqiOsnhqsSFAj/AEhmk9lRUUTqNjrJhby4xJk8kQ2ZM1LYbMVMQhj+li29lF7BG0YhuscgnlKjwxPQuE8JaxUxVG2RaaY0eOCs36RWjYmNu7y1rKwlp4BvZJQZvHQvBsbRRViOtJjVQ7QR8L4deYJPTggo6PSGbEjG3MIMfjgeWqj5h+NE1+z6LGf02YjeinWJh9H+wrPZKWhPp8HaTwyN8w1hiSax0SLz0dFGypbGFpHUMQl74/CIo2MH2cQ0ikQuH8jTQmNj4M0JpOjpqHSbomzG9YX8JJP+FeHtiMSbFDd8ruGdG6fBFGv0Px33fMMUokxrR9GsK2xS7Hgo3cG0R/EaIxMJthi6OFodtqMQtCpLQkM2GWbE1gyeGG8PninPKjRnPfAlRIstbGVrD/R/o/2KjgbEUZNiTht/BJrSHNqMRwbn+FI", "XcJXyo3BulhfB7FKXD8X7fR7xMpsmx9GhIgpdkaIibNGsIQX9IsTH8Hi0LpBohHdE3BN4Q3seXXMpRZQtYXlo/wAD9dFY1sgkyvhYk6LmLhk24iq6HyjPrQ97hw8LompBqD/QuiexMWenRDbzdYWxKd9fVkGvT8UuDh+81CoiP9GpkoPHBq7GbembXBIKfSmjrH0Sg9fj6iIpfPWKdXt3y9nWJbwiEwiBJiaohrY04JtujXBYSvDX6Fto4P8A4oKPBrfrRO5bHQjQ0YnQ3G8UbGxI5NXBN07sNikGtH9HtXCUH/xJUaXheiazWb6hBpMSmE0J/rwUYsXQx04NCpjaIpwaSg3htQZKIf8AyFhiH6tHldKbJdMTY9igyI2Ji6OTQ8tqDQS2NQuz5MG68LYkXQl5n5UcYWGNFcNVfKbuZBWiNoJj4dUlaRCGgpdeXwa2JDG8DJoSokUXzD7/AMSwhuYb5h/nnikOcKUWleI3wWhKtCVoIOGi4uHwhMlFuYhKzSKy4X50xMLwyxHdiWxo75dYp8wwQj6fScmnwZIStMRJ4pBISnUNuFKU5sbuF3yZz/iJYoxdFw9yYbwnBy1g0tlpbUYtcFXixcF0YpTRJZjQkf6P9MdZXMtU5+dNZY+DVnyNCw0cw388pHBNQbLuEIjoLao7OlwqMp8Eo0miCGhBCro0TJhc8SjExPxJV5eNUQaFl6ZhGJFw24J/soLCe6d2Q2wQhBCLNKSjexU9kwuC55f5EJiYo4LTGFhK4hPT2yD/AGPDTC8vw8NzWOllcF4SGyr8SRPDReFhDhfTfmEFhP6XwqLwghjWOkPCxWVhWGWrf4eilzsSYXVwkLXtj0QhDEiQ4+Dc1MaxOxFCEbcQ0SQv6OtIo2wmhOMTT4QXts/", "T8K6axUh/oN3w+nN9VFTw0yZr6FSOoaIIvJjSuhzwux6oHTgRNDc8JwTTxfLcytq/leYIqLxRspt4cxw6NVQVXwv8NQ4PpCv+CqDTYtjR0s2zbEhjUY/PCmn5elSlxp+Z4o+54i3CVfl6GsXCZiR4XT//xAAmEQEBAQADAQADAAMAAQUAAAABABEQITFBIFFhMHGBsUCRoeHw/9oACAECAQE/EP8A2jM+R7PY8FyE+Ywsh+yEHd1GfLLOftpm3ojQh7E2CzPLXM38shsIdFgncI7L+A/Wz5dew6ZwOrzw2LWBipHb7PTrPY2wkMDtCXq3+QXhHV2E5R4QRCdiXTJPG8bqPc5zjIdfy7Bvgtnrjq1l2Hsn59W3bL4XRretvUT23qeroyDos4X5wyQkxDQDZ3ZM4aOuTLI99eF0XqyHsT0Z5T4WSaJB3yc6MfJlv6m8ZQnsxm+Tvj+Gkd8DloyPntr2f+y72T5ZOEPdms93Yu0mMoNuyXwLoQLeG2r3gB7JR1b6CaW/+OMfosA9Zx4Lq7Euo1wIYS+Wj0WR7wnBLhsddY8m9LbP1atzeU2zld6vbCzJDou9xgztl7t21t0Op10xHse5LXvAzcherNoSRq58lOtusAXce2rTHD4WzKbbfJd9l2zCJ7Zepch4Hq+4aGTJhlsbsArt+kDKPwfgiKuEYe7of26Loax262L4Ft1PURd2ySyOB7x0PZWWZkK92ki7HAD5/wDMSdGRdgvdidfIO+rSKdz5bEe27HsygawIOrzqZ3j11IHc6yRdGw/spiI99T030l3b9sKxetkH0sCzh79g7njvOpL6cTpsHrdiFPLXs9q87tZjyfOCnN2hBuSGWEh8i26S7dJlhkadT8b5f6gZt52SGQ97JeWD7DHLIF8", "v2QHiCSQPpZ1kYu4fd+6QaR+iNeknCZC3cHVl4vm3s+Edi+5PQl065+cDrdFn6EKjY9G+Y/ERF3splgawD51diN+yfqQnck/chOru2+reRDnUYtE22W2Xyextts3eDskujfQ8tQvEuS9WfTln6gft1YpLX/ZZrl/SQPGPOHjNFAXdlboxtx4yD8D2OVh2Zd2WwvyWkqqWCb9tyenV85My12fYSh08iVeoMkt+GC0tuhF74xHaPO4rMg7NimtmSD7HTbessVnp22WDqL3kJ03xWmfu9Tx/J0j8GTotzq2mDAeww4IcO52X1C9ZPojZdwI6jCYVc8jrLR3bh1Lbess+8CnkyvUK5kDg3Txk02GJvVt1ajCenLfOOvlp9jqT8Jx2Eh02OxEusE3N2yCUPeRKDPTuOC3vu3b2MwzJFHe7QwbDO3Ij7xkITLe7W21941mWcCjpDiBC6Xs8F3/1FmEtoy9MtZDxt7L1z1bRscvvds+3iTo2VJFWBz23jIAibLuNuc7HHaODW1dINEQEusiDPV8TyXe44/sz7+ODk/BbxeO+Pa2x/UT5aXX0v7NvI+T7bzM+PAO+CdwHvH2Iu5la+8OS6hr+L8iH6DbsS7OvlkorYjJ3q/S8RNlkMfx9WYTV7Me11WYWidR1kD7dp1kX2MpJEe8PnXsI6EBeMMjzI4ODG8NjjIDtIHbZYAOHjP3O5dsAIMQYX2w9TlyXyG5v7t04ZVgkGfn1jyX3YGhK0lpDpj9oLb/S3dI6OBrE6IX0kZ1aFieWaTsezx9ssDEGEustdU4l1axvKfY13JevHiydFg+3vV9myOSkuv5dgvUAnYTHC8w9QxTP/wBkD+mGz+EM7F3gdnyPYLepPiP2IQbJ3OW6Rh7w6ZnU8Y6M5nt+mVQ", "nRO4B6sHZGW2B4ZDHeDn1/g83iPZV9v2wZwuoU2Se7P1YHl/C1S21fJkbdx7K3qY+5Y+PA78h0Rs+LPt5NAuxJeoepeuEPL5Qj27Dj3qHU9yQ0vnDxsbwP5bzqD9sfgusgMkmBMvs2d29/kodM+3/ACyCKHdiHdgI31J7i95LxOXZaQz67th+W8N5Jc8sOmyMmrV1Thz1B8lN15z3vUm4Msvy+ru2xtWR741vL9n/AJkx/wDd8tLvOm7cfxnD3wMmJHtwkzz22TPllmjInHc7nU9OvzOpd75HZlizrH78feBmh1Fm8B+ONxt1xvDdGQ7L5J3N1aW33gausOoOB2M/C0973MZksliW16b+sAd2L0SZP/oDeSsRDZafi8MCYw8fJYMFuxMl0HABfYMMshPkkdLxN46n3/q6N+89S7D3duocEsKfyH4j8cfyXGEJl64fZ8/KOI86fLRglHYw/KN94U8cfrhmWSl3ebOr5I8k2FvlobancPdLwzvyQdtOlj7eBmTPxL2TJ/IjV8XZwIm9f338lp5x7nOpgl2Ff2Trsj+2M27WtunHR5Pkjl72TO5yRPfI8nG7PGa/bDZd1jw5eQ0z5JJ+fy9T7+AtAWnloH4vpOFA1ngREmL9JI6X4Lep04zE9Hj/AJN5jyezhkXS8zQvyHrW2+yoJF2H5oNkkln4/IMOVDpEPWXLy/E/F+p3eqj6Wdgcv2Jd6LOo8k6QWODZEUXiJ85MEvtjutOsER9XsO2PZfJP8OSTDkBdDhZvkhLAQWwfiezR1A2Letlj4fZZ9yzq15MGPqDgW+x5Ht8nIwwupekPay8c/X+rIceowaWfjn+J/JZYNbXy6hB64NjnP6svl0t72FnRvydGQZ1dOl3cbzlreDbNd28cB/YY+y/", "qXgX87H9XYx+3HjnsxJ1bLp7P8+3Lp3dobsD9wu+xba/XG3bx62Nj9br5aogEEZ74gCCOyA6SNjH4i1gCDqN5GXuU+EoQs7j+3Z2W7yfeNmEeWli2238Ms/B4bZwHMvY9yw3qJN6vE/OVPk78s/cBLHTbeupaDbIyKttx2z9J+VrAA64FWn7d2MD8sfs6eWBlgkl/XD7enGWXdp1Dv4H56Y/Vt7bF0az8mNIDgsNvLZ1Klt4zYYZDHRPeT3J+uOnBL5Ont/UNu8dHVr9jvbwu0+xPsfvDM9WncCQiaf4UBrZfbT5wEN6hH2X+2dkoWHku/wDUuyTJwcZdsxHG5wzw6tfSyA29WMKy6IjkyG8ekPDNg+8Gf3BQR7Wyn/COuyyyMLpI+sGyxyXfkHtKrW2WZeCwy70cQ/bK9PHu/uxPY1a+smSTwhrdmYPlsvcI+rEYERPMuzJpkpYw3ib+cC8PRDC6p/hHVZMf1DfL9rCGQehKlv2yZ7d+My8LNt8sPYA9hdEa9sljksD7svnAQnr1e5YrPq2/1euQdZPhZhnIExk9WyZZ+A1vzjB6Y66f8W8N4sim36OGYFv7sLzEqwc2TfbdiHHZBMvGLsAjH2wHs48s3q93xvV0tPbDwR5sToTwcIPTYtPLeMswg1CADOdP8hYeth0mCEHZmDXIA64WE9vLbsXqYdFsguxdcT//xAAoEAEAAgIBAwQCAwEBAQAAAAABABEhMUFRYXEQgZGhscHR4fAg8TD/2gAIAQEAAT8QNsXVEy6d0UlphK5FpyVOJueY1HixXoOE1rwsqfkSGWbdHEocje3TC8K3EUW+wS4PuqJBy+nLNIN+8qgACMWRnggNW06cTRElQDuUlSpUqVBVOz8SoEKrQYXT0+5g86/JzAx", "v7Ar81Pxv99QHdV8ipZXsZXYzz6nSX1iCImEpiGyGS+vD7mIlsHoKnsenaHVWnS/zE2su3J/tDIKHV37TSHv/AMBeparEZX/FRxmZdfMrduXq8S7rTEbEANvEDBI5HflKVC61vK466VOB/jvBaTP8hfLKbrgzGC049mSj2mLsWWh8qEyC04+DmHhzmVL2Kj+YmVOT6AIXNbOsdFggY8btB8zK1KWR4MxDqbf2IKpACvYMv4hDct8mIRbi4LQYaYQ21EJSIUS2tRchribTueglm7qIEXUbRfAmaYesJFIV0xAGyUZa/tBDZxsLgsFl6INtg6SoKDFEEVV85hu1xDV4QuBu9xFTa9IGVANO8vTXZU74Hq0BhjEpbvtOO8JKE5lVOJRPAQdRQUXFQs0pOEI7hSC0arZzBMydHiWt0PJE3JpwRmpHcBgtm5ZL2IiKXR9DmJAw8xMQ1nLFZ51wOotrE0ypXoPDE9Klegs3NPcx/HzDvG2H8nzN/bt6HLNVMnj+ZgOeTTrRqbRZcu93BB1+3+5fHskOGzfuWXyLUNMHU6ZmrTrCa6a79oCGHSbHklzB6X/xVd5iE17xbb9KlSoocl7TD1PsV8zbJcXaxhvAGh9x7oxbwFbfaYsJpaFDjAW5wfQxrFFKGC8ueUPuMKrTyZuBd5z0eh+5w9F9y63cHg5YBgtHtMjxfj5ZQv4j1fMx7bfxMHxSWAMv4mFebahlNGE958zMsJyZ7M1tY3ynn5JbxdwenJ95ltU/LDWXSYHzLGsCVKY2bxfoovAwbtAxCEGJQmujKzBGC7LALY5mnsQ5Y33DlUbRwdJ9MW5gMMEAkcdoaMwBG7gE79pZvqWaduOsSwG4aXiByWxLK5GCdAFFkDp+MC5+MSpa9PQWSwGLNB3", "jSKtWcILUXcJcGAcUh7AHUlYLxNiJtiXUgr5h4sGJVrTCWUwZxDc0NwRNQrwvmPd1eYDOnZcz9dSpT1lQzKlQiwVbrY9Sck2wGk9mCjSwV+PBMclijvQ2+7crHoLloVTFMufyHslkt0wv2f1F0pz9uSZIm+Jcpo5XHh7QYgtG268MrqvTxN3rwOB/Msi26M2ATqep65VvQxb/AOqlP5JjhOhkw9nRNe8YrWAXg6B25lWTFI86Ibc6XQQDX1GkkO0avVHVzF0sgA2O7xBrChEDpcsc0CToB/Mv5zGxr+0c1VuMN4eYVdBhomTbEAq0bXoS9tHgSxQu4v7jfLguafa33jQpuj9z2zBMmeD73L73I5vt8ws6yHsmKlLVriBbq7TJss95W4xE9WcnWLCN3MvDHRIPRRcUxxFRVkdmYWIjMi3HcoB2jyzCAR2Q8zEO0YsB1SWalXkiam1FKB+JiUoonDGKkS9kMy4yo1Urq4AVJ5lKb3pgry9AuaYGEpKiTlxBrM0pWlczgh+oYVqzKl2CAKNeY9Zk8mmPLwfhhOFIQ2K726TVWqhqQLQ2RSRIbB6XWorriuIQ3ga7JaCW+F9E5g1xcs8f9ivN53u9vzKZbak3S4Dxt9oBDIA7xUOk3RwnsMwD8AHs/wBwBU9Q/wC8zJVnJ2qKgXrTOLrntHrx0dwpMQwP2d4lhBDjP1uJ+uZ8oMXDgBiYQGqtUqVK9UIiWO//AIYcdeJ/5UeirMXDCcBXXpDI5Le/A/crxtWg2yjRolK06EFWw0d+kTjAKKyr2OZTSOE4DV/mZrV1muL6y4qBBgAcCbS6ky5fQ6RIoxq3xErKKX1Zpd9fc3eInROXzcrh5tmRlBtjquPxGFbF39RulU/MyouLmEqkbkKrFzGAya4", "hxiGVgKt5i5LtZXNBcyyGo1HVu8t9DChBtoHcjuBMXzMKX2Z2gBEmTKiCTYrrEF9G5dqrz0groKcEAWRoz0iEGnRlFKOgGCg9iZtBdRA2esHDRccJjEH64NcDtJMZtmKmzPpnBP4jI2DqV1n+qbg4Xtsxuu6imjwjDXN4nAlNTAJewiUK2xpJieUCUycLDGgoop3Nty2zMvqtoW3NldILXWG2pUqCFNnJy79oUTL6O8FLKWrq8/xBMZNDrwRgJaiOjiD4KHZe8btZQTusRCV/Z/cs7njrB5Fk1qtaL+osHSYPbZBTeDbdeDCLXwXlOkIdYwRQ4Kba/HpX/wAyqH+EumOwJGdrgJae/EuUrgxHt1YvNzGOXlvzB4DtU/1EOKemm6arxLHizoDqyVWgr5BEzLmNDPmG1bOYNjjhSvbkg23PpWApsN2tjgXTo6BKx6LrvDXcV9zFYdmmgcm5cqtox1lIKCU5cv6iRlVT/fMs6MjPlyxNqcQU3UQuIvVjUUSm+IwVHZARCU6EFKJUYNpc8KgJqNhBhDKDEoHJ0R3KlDoUgpwWdXd4l/iHNvEYRs8m2GoA7QEKQAjJ1HIQ6AIbaai0AKyiKb5Jdx8mK4E8fSwudcSw/ZCKVa3Bxg6ht7luI2veVYsQNOXaubnBDftNcu5GdrTLGu3wxvJjqSxKJ0htRADvYI2G8IsCzomjxEzDK9GUt0Q1+fWpZoheL6RTJtZ+CKwZZLplhwwO25weka4hJXqNRStK7HHaVldT939TOXSXvpbv8sHOjbNgfuWghrtT+0TrN4jsd4ZDWbKeTpAFs0XuUQ4R30YmotQ8fwe0dkqVbh0P9wxfaCsriXkPVweOSW/pat44/P58yv8AvZQmWlPKCUAGrqvx/wAqsj2xCiy", "wcLmn4lCxsD8RGAymaS847Q1daKV7oTCtaRdH6hUe6UWORS4YrRmzy/iOwqqqq85nC9W4Vhq8yyenXiW5Zq9oqOHPeJHmXmayw7hwtACOAR+osNRw6zGvRohQbkeHq/qBGXQAdZQwIHzF8EbVznb1iziK1UKKslsFhcchxAtO3GoSmaAykYx86DDSLoA4dYFNN9IAXiJmeSImL5OYzuNOIg7pzT7S1ZcVUA2lMTVx0iM7nJKtjk/EcFQinsAgmle3gmPCOkM7D4IxaTpTN7RyYMbV09JS8x5T4iwG56QHf0iKilWyXL7MSsVyf3OJzGLlXEXKE/hgAPWEYClYnEuB5CHW7cPEchWSXMnE0PaXGALzLaRb6zEjofM6UV0h+kogVmUJEG2ba4mSYyESi2lv1Ke9G10OWNJMqA6TGHI9pl/US8HP7lWQxWTt0lLTDZ3lg8ZEO7kiDj4uBBLoKxtQgmsH7JlPHXZ36y2PYtXAQRCwUBghYViCyDJrsD73iKWtFp8nk5+f+rgPSKfLAHyAzAraq6sr/m4WNF+H7mKDSr4le1ZQhkycbC/EvjH7g+/6IStmC2aeDx2itltgtUOVGoF2ux8mr7yqD0PMeDqx/Mu8WmXYf2/qIlWtw8gy52o/sQjqWdgX9yqtrb35lKG3b9EwJr8pVAWzcXNGfF95UobHR36EdgTawXLEZM7Sg6I18DKmTJiHtHGcsWZu591FoSdXE0CgVKdeWyNaOFlRKIVNmbT75PqEQU3bMJLjLa5uIZCu0MlREBFA8v1AWw8NDFjg++vaFJs9lE0kCdMfOZmCO0uMyXcDK2ukuaPmYKqAZNfuJ211eINIzmDClLdMEdIbjmmixvceyved6OZlBW7WWA0Wypiu8bhUZDicrpAAHaU", "N9oazopIZobVKECiYKR0hsDkUwWOctcVFjcoxFw5m0GYbFTJaLgtHsHxDouiezfy/iXi5VexG5PIPH+JbtJPCZ+4NNygfKp7kwD8sT4kdyBGgyMLuQq/D0RgYsMw8DhiQUo4iVz8OiO+gCtgC3J3jBVUebiqckUR5BdSKipGgx/C9vic5/wDm9kp+w/mEYGIbM/wRZe38RUTtjW/R61e3mJZ3J5FiFRZDQNebMxgrA3ReualkWi8ty0VjQxuhyOstTl4G2KLyX+AhcgK8ribDNalDOn4OWFI4W+0agqn7gBGmrvpbUMNZo3/usY6FmK2HaDpQZREfeaITvBBDiAALR5lCbo4SJFhXDLN5blQQVL3FG8xXcXIhPuEC1F4I5Ns9yWs4tLkZcpz3l4MsGze0yOs5qbBVc7VXWBkL6kOwL0cTbYz2A+hNmf8AgS6lviLaXxLsYnScygp4fQIrjuRqsX0hBUCLRHzElQfZGyhKdMoLtioODU2O6lX6yB1l0sJmtrZUBtbUVEJWDUaq9rmYtXKNvoBYBpiqyCcSUNsrFzJ8RJgs9JZQUWEyjLMIgVTgMS69im+moQLA/DJEo8Up/fzCwKU8y/dLeYShq7+IoBcB48Mvcx0X/wCMOzk4YYjlJjYPtBCRbDdv1K2gdO3lP3GgyEQFDur5ljVe2WPN1scPxGCAF5WGGUDNmElwQ6/rw/pm7OjU/wB+3/xVKnvD+T2gHVzauVer6UeuH1Pch+IrQDgl7XLdhM4ee8VM2/I/+wgSME5Bipkx0lXsNvX+oirursdYIhubXR5jMx0VV3lzpE3nAbP84jVRFdW6P5gRLWQXPSfqyU0pdBjWM/7tDdXNgt83FsMQ4R6NNPMMU7wmiH4ZWJaWFFYl6HhgOoQBA2D", "KgQWQu2YeaPXiHEdMJ9ohvwZkGuYWT2owQHQOI7iteJn/ANQlxXvUoiiCu7zHbOZbh+YSQfEYBXwHMd2d8Soi0S42KJn0lLCckUzt+gJWfKEZZaLFbdjrzHyHdHRQziBQaDz1lkrFtSh1rFwEOh/MoRe49p5YIo3c1UbPAJMBVa6hmsc8TdKYkQdZmNMxkgIQ4Q5YIorC5cOZkgHfAV+Jxow8Fy/iGwttW+/H8Ro/KUzeLAKLTm4MjdD3iREzTSx2JcwLKVjUSi5dROSV8fxCqFiG0+YLc0GVvLIcXjEoZbruajFoLOS8RgQXr6N/YCA0h0YL4uoZ9v5XDjt+yvjh9v8AprYTBZOw6v4gVB/coDn0qltHxKFxk/IpGnNFtOeoystFt419y5mcPzFftGe7C0sH4I2EU3zPgjCpW+RlgeDKfl/iZ7H5SzSsduX9wNStq+Xd6eJo1ilBUzDA8QlNBWUvRyDjokxobwNJBi5SO7Ksb7HVmqUFdAlqLzLISCH4JQJ1iLmWBuAgVXpn2Jg3VxyGqmSOGHSUdItY6fT7JPq4lZvMqpd7gOXywGjUVKEBfMVJzMqMMM2P6QoyrrxBCiOagRkvpCEjLcDI2GKINMprRCxoy/T8yrpVSqonMMtuB4E4eYS4UilAFsRgij1czBuIurR2ZR3pHDDIFFsC7VOZxOAIuTpBVPWUsi3jtLx5vrNX6jLtVcwrHmKnKnc2xJtlVSsxsFPMsLOSmY56s/MSxwb73GqjCVX6+4Ltr0QiyN1X5D3lWqsdXydJTAeL/GZVsL2Vz/cp3Ha6RWQnxLUgFI1MdoXQF4jBN1Bch0qNfUInjZ0zNilshfw5hUCFRYW/RKjhKmfeo5AbdfzMUPeI0r3l4ozB0GBynS2zp9Mxm54", "n+3t6AyAC1WghKy+9H9B3gAADQS9to9UGLgIVX6R6637SwmCDf63j+7hDSGqKsbuCAbYFXUrHCyvlmCaafEDojT9w22wbO7LAeAHnbFyOGHzHnuMNa1YmC2gFODbMa50OQhhBEzunyStExnZ+YDWGldTBFXTuVhwiNzNRL7CHQlzRqYydk2mzzEmq511ACiibMsOIuJU4fRW/ifQwAHSzAqgglgRqVmJR4IicalrO0VQRFpLiD3OJYyj2g8FRiU7ws7qE1XU8p5TymmGUmmGYzkY6eYQ2FWQwR20xMrIQg5VDa5NVAi5Sy20xrFRKnVAEzi0MAkBQhdJeLEI5luXMEA6iUTwiwBgmYIDBLCJsPeWKmu8UFORCgpRT3c/c89X8zA1uGQA7nWNYmPsj2fGqXZKxDrVX5lqRyi8L4YtUHwY9+kMG1mEYglNOShj+jcCCUs8jwjLVSl4U/pj3JZLUO0FQUMVKg0vghu3K8x34qG5pO82OqpcMyvadff5hVId4DTPQ1Pff3KpUDYSn259/REEAoPQ6xAG0VRz2IIqIxWuw/mAdtHlHHjiK9AL/AD+5a3Q9+Ytp/hf6iMNpjzMoLvX2ja0xS9+Y8hpzObnTJcQ8EVq+8SsxvAGTxOKA7N3zmG6oPOmUqt/Q6kvIIh0Mg7fQ7d4pW9u2CCcLEzosyl8EvcK1AtRy+0FqWe05WohSa9DcdSlRcrJEbzAu5dyETOaqOfFip3rHclESWm4Xg5OI1s7RgYR6sAujzGW9BORi5iOKW014iG9GZiXmU3qMQNSWSyXHMNkdz2Uq3HTzCISd2JY1y1AOERRAYHfEqbQiOuYUIji5YNL6zIWzcN0XiLu9sfVq2EWZPyTIoMYiKwNsvgKoiJSBvYNgbWCGKNSDB5j", "a+0yis5qKDccOFdpy/iZIqBfZ7nUiwWcKzUcA0oXY5JgrvUbBftFaIMobQA1hw11gWcm3Ze0EHT0jMmBSnpCuoQSxpxUrW4E+IXvC4Gcm1Op2guFtLt28y4+/HvMO0/qbVwQ1n3gx6tzA7StzWdo6LvcRWRA1xFKkpOGEJSt2+igWtEOBR/jHMoZVCy/T+2WD1bfYuJOqPZuWn/yz9Rp3gbPnoj17R0K1yrnvFZ4hwjBH9wWU6I4WAd50xtp6hKVE80TUbzV9DDBJ3l48pAG5OD4/mHHN9WU7BpTftuWlIq7yxrYtw2SL7bmz9xcs+CL2I85RdWWcTaWjagvMGqVHcsFNy7MLMdhD7mVlUxmCiqd6G1GmLg9TFuXAroj2aoMxm1tubDpFDBV28QGorURDzmYY7rEahIEXSYfcqCAbUYuchLvnZa3rEvCniUdZR1mDW+k5hslLmBGzkHMdeUNT8zLZ4NspRHmOCRCGSYWG/mZEa4ajXAhiEzgNxtg1Ldp7Mypc4ljWvkhyTG3WO2LIdomheLjBgzURaXmE5R6U57yxFAlTCkhQalquogF5x2hobdin8y7gQ6XMhoAHuj+Y9HeCFrRFJOkbRxQzFBsYAQZZA8dvmOXYyLjiDcVLB1jqwhB4Dg+4g20tFOlrmKNjhCVA1a1X36RjQef5hKDuXrEI68viKdoKfDLxVCS9EZS/2P7gnJ7y44RlDawBaq9d5XBTrk/H8xiwvyH+vaMLsw88TX6G3Wt/zFDGt56PEs5bWFFddxV6l/IAuVg7ye0S2WUNtYzp4gAFPFGoNfEHQxAW5F4qfzAyKe5s9pRum6gbQ1O+e0DGIDcugMxPUj2B4Dv3lpkNr8HaHSHiBcSkt4078PpsJwBtZonRRgh0VZaA611", "JX1BY30gMfWO5XorKJDscxCvE/eEBA1CCN0Ex8adCMsusxxWw27vmXCouFTA+UOzU8wyS2jp35heQPYgzd0Aiox3hbEAeJ7TJxM9JzK9O7ERjiY28x5O1gOIBGwWlIqsD2SbqjqoS6Ol7i0AUcx7II6cxuHjHECvWWxjmInpGZJVpph4RNiGniYjoXCGzE1iIbjKyhVOUJRhaIC0zHLMNTD79olgcNZNeY2ayiizRWNl9GcmiUmkjqinYjjFJv3dRCZS5OO0DabWZdFCkJ2dfiIvapQ6a1cMxs57TdPZggaxFcn9QtlcYjrHb9ECr2mQbUsIoIUGWSwh23FPvr02gL13gdr3LX24mZNu1bX3gemZOkX5IHIJe61l1/vmFivfPeMgwrTiIwmBZ5NylECJUek+JhwD43MYO48kQQEsrk94EYl5dV37zZfgV+ZXE4AMK/B1ZjI6rb5Y+ZlU+rlSokyKhrNcmMzxwHQ9DDc79Y8DCmmIOICrDSd4Kpvcq0DmMVS2ZVdLTEhaniZAI3dxNppIVr1nUYqHS8TF+yKz1xL0urliPd2JMgDeriOpR1hyBtkE0fyYhYMYcdJiGxgHGCzzKoXnBOgQqhYkpIEJSWd5zCuvoR8ByvcdxxKQdxZnFwcykxdYO0CWtNcXKIGHCrlmwolmV3KwfmKU5lC5heKpY4PSObKuJQxb+U5jtM3R09EDZLtxQiaXDyZCqhEHsiJRpbMLx23oPgiRhqVI2x4GWrXLzK2Wo1QGmKLj00X3a4gYUBgKoIgUV8UxLh4FZgDC2KbitEjoYIAwWo+vr1lblialDht/mJJaE3V15hMgoXXD3JYQqKb/mHFXGG8Ky1sOtYIBpW4O3vUAQi7zSuvqYd7KQS0bde0vBhNjxHqloex/", "czcBwB1gX68TdeQbgd97ORhtYHYwjBrrBb7uYCsLlmx7y+QDby7u5LAVXIx/BglwiYQp7GB8SnWk0yxqZLLzyXE9HLh1x/wCZQYJg4CbNx0NT6H8zaqKuD5lBagHMsY/Qee8WX6Ys0X+iBDlhBhKb6+gVK3BmV1PzxKEyAd4qhVUTOnNzAkDmZwoK1EqyLVjKGXQN3C7Y0XmvEqdaqFbplEqOHCKKLnU1HjLc4xNMbyFED1zVFb3jhdy5UIkz3ZgQCtwSjrPeUdfQrpHTOI7IQLnLMom10zGiwXvAWtOWoe7jON3xCAOdBtCzvTjcs01Bm8QaXoalGoAUcy029rh4lJuColeZiE4h55hZ0Q0AkxTdSzA2uIBxZHstBl9Dfjj1Mymo9YnpcSi6AcQgDzKoowEqyWcK3pEVtbltjZCnqGVCKzrid0IGH4I5Ww2oXUBhchVK6JLgB9PF9uzLVAd6j43FgTFoF06rDF3qmfAev4jHincP7WKnSF4ICqWmnnO4rK4K+KuNR5qo7XkP0/j/AJS1QzaoAYHmx2lXQiHvMx1r7kenaPZoMC3T3rctCo6UbvEuAqrDCnmOch03+SfpimVbA7W/cHENlthAbh4ov/H5j1YfnLXSVAtg4Jqr3H+GEYMvoFi4li+jh+5f/C8oPjEARbFt3KC8w0fQLeIrWW4FqcsB3THEViCv1LyWsyiF6chmOOKODxEFrqk5FSPSPG2qoflKFtWBBCYNs4kuWaQRxBtjCwwYGYg2eiFi/oQ2l6IbcRV4Ja8fBLdb2hXbxcmq7TZOvo7IQIzQJehIwu4Ll6GpT1VhauO3ZAwYR0SRV7k6Nj8y2scp32l6ADWmawF4ZbJ1CWrqKqM4uXnjtqANUe0qAR7yr6oaZKSs1VSkK2Q", "C5YUvgwRsji8ygAG+0AlDok0jKNgwth1gYSFdrhDAWONQuouey8xnNvUaxcVGUVt7J/dsOjKSJYcsn8QKrI06sB5tvZb/ALhhdEfmIE8YfMAEk5EIInZUFNH85j9YHVZZaBYbHXzwTcHaCJ0nzz9xl34Rr5fxBaKEEJj36SpDpJ/u0QRLmQZgENKgGLdZ8h/yJMnQGWCfhDg89WWLu6cdiXmyVwrGB5P5gWJwHrcrxmA1ZjcxYHabgS13VwSwsq4GiZelNs2xGB5FvwJqZLFOWe8DqEYZwfECNAl5crBT3siQMDWG6uWAtgxA4EOpiAYnOZZ1yn5MOF6jKrDO4wSzrAm3ggZgoLiaVtcS2U5yZrrOqYmUakYq7eIrGuLZgzYFmoNLY0vEHaiOVcKbjsS6DpLIsUMd3DrAbs1mM+5sXMUpo6pAGcMQktAjorpFwUVmf/U4/lA7o5XFTSOmGwQgqcQnJrsgSsVeoiWeHMpFZiyVAosdpVlpsjjS8iWXYekXYMKIhRlVfEv3Cs5YKspUj3OZeZOjiZWflKBhztYIruoWLYm2PSh1DgQAVVQSZg5luhNOzmGoOuGXLCopACrgDmXkFyYCBlYfE4f9HiXlzVI6uD7gADRj0LpHXiGJbcvFRshjlMEGEaKry8xFjmq+8Hb7PPMQcWF9YADeMlv+7Q+cDaZa1qE2m2BNHH1NhSgY9ZW1A0SjvZ7OPjMAzQKDV2/jtHZQZuxvV/iJwSefcm/EUiyhE5TU1soPDn1wEMY4Dq9pkK2n9dDtMPn8buxKqqrlXmESoyZ7vSVEtDHF+OjK1QRrXtFShzA92NW3nI93giLZYODheWKWFNsxMqWhDD46yiEbHmMFDXgmYF4rvhDslOaP8YEUR5lQEe5LvmOR0X4", "mRrQynSGluJycEHyTFVCiNd4OIojZGbY8YjFkDo6xsg37zFFXELwzAjtM1ej8w6Qtg6SsBBFBE03BumGF6wvFg2DAAaSUgHNywpqoi6wmApMO5yxabfMPlHzCmJRQId5UzLzLcNw4QfBGHXwEcBeImWRGDBm8pWZOV1g8zzAly6h1IggVjySlcniUX/EFP1gvQS1XEjLxepYBDygIAHRM0KhDlhzDBbpnOIO8XC3HvLVgL6kwgXcgbXBVLqGBR2Yoy6Yi5o2kIWFzhFAXdr8krjTrFYmCU4s/xHBdk7VLXBLAFIplQ3+I4qaNqqY4ZrGA/uDXrcnbRCOQ+Ir1HwHu7mMYGaCZczMq4WW9HtAFUWtqnMsW1zvrGYuQXkj3lXKX6mpCQ0gOpg+b5DK42W02K6rDMv8AI+8SJa5tr26RGOs2VvPQ6wasDH8zJWvsf6hwFd0+UoKGHUSjBcVNF+yMsIVw1/ATI2rl4lEtnuj5GH8W/v8AEfeN34iZXFMoB0JQA8vSH4M9WYEUnMSll0/zcKgNjKmF4bH1EQUAVXOIdbA2VjsRQqma2+ZalnvNB3cUZNnV6VKJiO4jFNIwsBhbAsJzCBmqplXwvzLPPPhZmuIlF5me+W3SAnuSg3EyDPWM1lbKgoM6ZbqYgW3+KgN/icsocLiUESV1MYPtM3A+Eqwd6AwsZRgHaGpUqeEVAUG4ge6UMI1nqRsacVKGVo5VuKk8BmUNouziEXhws5mpZx0lMXSDWjm+4AAK8COW7HBqUVCh0RKGVxTioJQxU6QIOlVNBC4QaUdQiowVA0lVdIGjWIKDqvzAmCXIV+YVwsch1Y5C1G2Q90d1EO9xuFHXyRCDhbWrU9h4dCXmN8S759eT4TtV5xLD46wWix0oxAkMRoq", "AGh4nZ+E7MFjp/wCHWhORihGsuz2eYWsAF/SFl/EFdCL40fRDavsE0GXvqEpXGYN6IBbsZf8AdotQ8LT/AAJQAABoITumYgBy8vfmPSimn+f5gbAu+r+IgjbAWj0txTKur4hIFir+C/OpQPnT9kObUDrPEouZrZx6ZgcONnhzFGO2FVTHbBLXucRIM+CIqQFBBMuLzMD1HQ3PoIDijmHOMRFK6xHIVREfIuWLuHLAKAYAJTHEaLwxGLSTcOk+HBcsxVahmIQ5njUGc1cTiH2QpG5fZB90E0L4lHZLuIFUrhgbqnMQKLNTmBgaDLZMHDFzFsrZUQI0XrGwUxFBS0lMvkvUrFWCpcJTWKhNKbiixlhSrZ7x/iRY3aGXcwWJq4+xvEoCVCKkXwxEKS61v1uGwghDdjUuUFlB02vmBtUGXsRCzmacV3iG1C0MDmurCoGO/MoiHSVLhQvA9YPIXKmRa7kwuv3HZezXoXeJdxnqTaB8x6BFW17Ralle5LhkdoFrsPaKaYQUE2Q1qa9AhbUMisGh0jr4Fft/7cTrEKPLg+2CToARS6DzAntgNroLWJYBsi9b2/xFhROtQbMZlHSA+DL+P+Mhs+pTr9RIyvwPuUQFSdZkEel6OH3/ACMdwYJcq4lW4jFOT6f7he7c716WFQzE2ljoQFqZdpZE3UQis8QGY5gCoR9BAqVfaJt6ksi4gSXZEUvDMI5KS3VW41NksFuABrC6gtuyViG8+g/wJbv6wgo5FXTuM207SloLbJOGLXEEtCMYBDlUQrViyTO4WbJw57MAoEekRb2mGQGLIzEwxs0MuUAMHLEquXalRC4QGoqOIgoBTMsKY3DZXMNAMR/FNphjaauVFAroS4XUXVeYE3OYMndnHew8wHBLWRcZNru", "F4WQvDv6uC4RskTvNG32cw9FPJGcNuOsKOMNdj+4KsWNHVjgMgcGP/Iql9YcX1l1MtwhAP4JveAjCGXBAtN+sMaLOjHTcQJWAMGevrZmNRm17dJiJVvocsImjA8Tsq1+D+36nMDEXCR5Bq+ZxyfGPeVBdQQEiU3qIvdfiB+/XSPg9BEW4y1CYSEQmB/yXPs+lStRl12lTK9/kB/Urni9eg5gwiYwF2TDGOoBAIwDiYZVnrCQsT1h0dMDi4RPsgkPCX2DcoK7NxAUw8SykVFCYYD3MKA8wqzLHQhlhFnCR3DcXswo0/Es6Px6gQAXhUFafMp1IYsLSIwWOLaSsSz1G5RDo5IlyRJVWCUDi4D0xUoGYKlkqwYEFJbYDXRFyG2w5mOIzuVQjsGFFT+SFLLtuAczK4GahcqI3R0loOVy428y1xVWajv0sCcMFhyukLiX4Tb7spV2/GCvTaHxMgf7zFWw8nSNpBfMVdzuWFWhtOe0GqtFDxv7Z0XoPHHpp8RgC32Iq3A546zajAS48DUEedp9xXtoyhp5hr0xhipMBwRjIigo7QHgBlwmQfu/mVMHMp4MS1hgKCfL8ynMVUQT7I7R0X2voGBYaP+yVcTQgUZbLaDuYlGWzEHV7yxusN1RP2P3L4LHOJZbTXGIOJw0zSBiqJmbUQVh4Y6kwOIqotx3mD31EvsSfLZ9V+YqOJR4CczAVo7i3UKe0Bim67TILxCDN0g4S8VuXPYwyphSCVK8QUaxGibJtgqKVACkRnG584BiKLtODmIgZDKFTZWI4xGEEhm61MC0jw7G7iuul1AqxuLTk4hokdfMWJI3lmIsB2bJXJq45ISmKBohFgXeIYPGagAvlzmBLgeIpIZwqOQjLAaHzAclZ0ah2I2gnAHVwTaS", "gHWoq9otdAqdHqKYaeGEK3ZijntGwzztnXpFmjcKGdESlbzlLDgX8QFwQaAZqX4MwW3QSjkrl1EWfiV5pQ2r5HNs7coPx+ZUR4InDKfpfTYiBdRbFxer5lxxemf4SlcryBb7Qpzg/dv8AFRmRXeNGWsntKDdpy98wXCvNMEx77fk/UJ9H/pmm5QFziXRaYDzh+yHIkDy/ZgOlTxcLgL5cwrAVF3OJT0hNqILULacXLx7MON0hVBdpc4ByYjNvWYL3PzGhlHOalwbySgofQoNFGKoKDa4lEEVxiViynE9oX0lLV35YygmEx7xIkehDOZWIMOIa95gGXkKI0KLDRG1GYmCtaiFUKtiQYxKMhTrCi4gWKQUN9EAovWGo6TTnmcERBbOwjvtD8kAGnRIlvI8QvcL7DC8+svRhthEA5QIGjG0WEx944yA3fAX9EtbY14S7XQxGdCtVxKGKX2lHS/OIrioLfyVeUEBnBi+sc6j9TBGrU94uDnq4IrN4APiBWIg7+IoMYdoJXGAHMry74nJuQ/UoJlmxouUInH2MwV5SrsYlTUZOjD1fPaYEpczY5WKMZOvLGJZ2XeVEG3TzLUAFNGDwR3Atneaj7syys01iGyjykzzZou7iVqXnJk8P919+mP8A1mMRWQ2LRX+T8PqhF4LfaAi1os92WKZakvcqqtBt6xqV0JxLU1zGK6BjrHQimKJcrt1F89yQAGF2MPtPzL2lgFMK1xEwEPiZoHuzF+RFZMDzLtls8wvKoW7bct5FwpG+SfXRLumVc9po9MSDX+ZzKaJlBeSPAQGDwy/J7kFRxcND0iWwFjYpguFjDWCg0xqdHM+iht8YHcxxthsKWOg6uOEiZG2K6WcZgntDtCIQ0ElqbDDJUmQrhgbp3gl0tSo", "0VumWZZrDKzOk5ii9IIVK7MwxYQPdn6PuJRWnmaxPwSwPXDANdsxCye5A6/VEAps+zFkO0ODyymXgvHgJiFloaJ8YYh5l3o92BWdvWC/EF61xGL1mS/biBuESxkZPdhgqC/GHJslU9mUqyxOekFjgNd5aQKoOp14lqiedqup1O8aX1h06l+xR9vqcukKCWqjwaPtmEHnVj4gGC8EBBF9Rh6HeVRh6hn+4rLF0SPMFeI/6Y+hWfD7Lz9LNxIFvh4ZQHR++/qE4q1DckBqPaaCGly1jWxzEUUhQDLEI3Y2Dy8/iAMtANU4/Iwx65gxHGOJQ7fOCw6p+YUKKnEKUVtiW6sOIi235R1qFci+8Dz8IdEAb4lB867mNYUSmSjPSDexQ6llfEsRFVkh2y+StzYwtxbNRSCAEjxsikTFSqFPKf+EYkLt9RNTtCoPXUyTD0OEIWpEurhqdk6CkXdS9hV8zBqBaQTdxI7Yem4FVDpKMONUvuU6uMTRRUYPGoVDBu6mHNpZmsCCJAMpAqArm9QJQXVaYr89fGJl2ivRYPeI51xG1V5hveBXu/wBfmFNL8xeSHRseeIBVodbzCouLgI9bfJ1RTqcEv9ceo/I/h6BcV/YyqhzOWexDPQDUyA8sVB0P3617kbKdEKrycX1i2OHQ0+83GA+4FIrgtWcZgar3BhOn+3B1YUwmh1P4gOEA/L+SXNFyqpyzF9fCw/N+gZTpoWnV9pgmvGdypxvEQJpgnuZjpn1v+n0ZbnOfUoQ0hfjUU1MO6+0Q2HNC6fyxxtR8sTXKBDps1W4ZlW2WDkL5tMvg/mUCtdrK+WXqb0SknX2nX3UJ4Ene60XBzAUnR/cK6GJmqT2h5RL6QVKUrpN6ATCHtEdg6EHK2Bjtquu8zQB5uZk", "GE1AoB3MVUG0dkEBQwi1Wmdf4otrQZcQIajghR36ktx8pyC/EupA4DVzIWjOIxojvdzET0prHUesDhsnp2fSoQxxKkUw1G1mlFTMyDlU37suJUGWGJkgaI2xGhlTbCGOaJkpVcERloM2RqwYkCEMCf+S+cFsqWrhMqzEIMCrKku48xJlgPDfbkiDEwjkURQaXanKwrWUZA4e/eJyoit2cQdYbLk29O0uza07f6lmMGjXoFyj/AMm+x0IviKFGdOx/cQjuoKhy1vdly4KHxLlxywls/qGVoEtvNwp1CyuD91K3QCh/iMB0sDquvZEEMotShOR4jELa3bOcy42h3uYku5Dq8fcB5toXq8/cotd0XXMR7ePQ4JYbVdThhtGHQwnoDb54iPoNsCijj/p9GYDqTuwB9lP1DBGUAAFVfFfykFjdw1UanXMYPeasw2v16DaeOJeU9DzGIcLPJmImrKJ7xKKWolQ6xBRblcEqYQpGRjW1L1RGq7fWCgJDllgfJiDlI46k7RhNqO01FSGyn3lQql9WDKjMsLRKD2kAs7HmWeApol/HxgCQqMk4gYIgFikFWb8wIM2p4h7oUbiuUs2MOUTVy9R2s1piGIb6TDsAaIWBq8MydUOpMFCIgL3gKgA4ngl2yBiChhK6OG5etW7xYsRgJKamLXGoEKD3qBtkezBhiDCtZhocK3RGw1ko32IenttvvMsaf21F+oFLnIDnzEOj8QG3slC2V7lssFEytbZkvboaINgFXgggbFddHViWBvIHfvLkTmX/ACsRu2FtmQe8VasI9euhGMQQY34QhB4K5gI33e86xFL6OX9EQ0auH4/UqVKhEsphqOc9a5+IYXQHuQarpTFd+yFizKfa/iWAyAe7n6uUCjRgnJFldMT5ofB", "/delXlfiCh49KvCXEXR5gAFBx/wBvoy5dGGum+6n9+jDZ4MP3/u0L1eDrFTL0NL/EQVgdOfSu5zqUiC2lR4nVl5gAzm9l4/MQApDOYzQAaDcFRncVEFPbCbYeI0IrfSJXuDBKSwbYbRhOl8QcidL8zohP67CVTDwRLEl95jlhMQGawwULdOImLgjCLDcC15mEGfmeyjB6tTSbJYrA6YZUQhxFuEynPxHfbddZXRUKM5b1DAy1Ba9GXXxmAsBctuYLcJVVjcUAU7wO9iMlBZmaOyRomyt1cQkNPaARSAbOiVukop25+pTGsUWA7r8keXiGnggymVvFBEMWamcvL+vmF23cRodRZZUw4val7JFTgOl9u0VovN/hUrEvkxuRMIb71NFXB0la0q9EwiUXK/r6/MMy8BRBsHBMnD8DiAvy/MobNOSVKlSopLBSz6inRXZ0P29oc0kWmVd4QAQZPI4P36cxftM+D8xb/iUY5n3P4gYlTIOm+8ACgoP/AJMYaP8Aw0fwemWMrA6sZo9jr3lE4PPHhMuvd3mpl2m+viNWNHATJuBQBDqY2g0fgV+ohhXELHWoazFkFL8y3rFRA7GVR1NBBKBK6ygAUqNVPEquYzSNwbBSRlsQVYs2vETrSOoyzpBHEQNR5hmEEG038oGJs8xwe9QXdhgh0o5pE8QdS9iZtAapJrNpoSjjN2LWIM75YO4pLlaijhh+A5IxVOPEwlhZxFiF8xC92VBlQq3mGj2Q3fYh+aZ2cn4H7Z31GXGrLDmOSO32r4xHkhGqhwuc8EqDAovAEenaU3L0IlpAbdEwDos35H4hJ2f/AE9YHM5X0c4inCqHE5HRoiueImjLfd2lwxrrzNg2LxEEhp29ozr4/UtTvKVstbXSKqZaMSVHVSv", "0YVtr195R0iHCt1BdjbSL0w/N+jn3m2usNcsZr4QbQ7HHjiD5P4gSoKXqy/8A5MY4fqnwn8xcxW64C6HV7vSUUKu1uEvfxLCAcsvcDq2w+fTAR9L2OX6f7lFE1bvpMrhsSio0PPSCYBIELazlgtTtXuHVi4RiZmMsd3VQd/hCzRhZqxEDYrVwHBVxKQbXTAJjaViLWK4qql+rAjf4lZ/GNd9EugdQwTvKKzmJWLl6QGmJTd5hpoC5gMXvqQUAMrZUyUunMsKouJaJKxiUes9xaYqDaxWio21AgOG7m2OkAIwwCWPeUfNC8aYNtnEqLqzFd50lOFkrURZTFU3MnCq4hfDMZ1R1Ga04ZcWv8Qq0JICabiE6GyaPE4lyQBlsPEKaGseZWmHo2H8sdavUfogCABoi39v2F18dJWEpyTA9teR7wx8dcv8AMzKlQUvSQvy5SBAAN1zMQ25fEwbhRQKJce4+cSgOhUORlDMCvmIGT3nncQlBWvmuH5/MfMLe2e6dZiHzz9+n4EfKMAOVwQ/YaKKZiroMoLFyJMzO+fMMLY7UX6XL/wC2Mer/ADIBVmy1r1/iASh8rffuwbTPWqJWhS+Ny7C+dEKd3/rJ3S9z+pjJk9aDDJgJYKOMamSBzGULZHKJiq5lwhUhTFpFTMNVEI6u2GJkG7EzVp9A5lMQNtw6iCaE4M+1FBu9Ii1ruARgWHvKSTRArpeWIhsu3iBVCdSBXayXKOrMbrWekFIqn+BEQXRinVM5ut1qWLPujB0Z6QQKr3iJ73rMwpcDlBiBUcVBnY+IBeZh4ZWVAQQAWp2rA+v7idibPETAhQPEGxsNRwZ1Mqbd2nCy8W1wale5Th+4a9zGxqNfgHbrG3OOhidgjtKqoyEu+0es09RrqdYIgjY", "8+m8FQ2Z0P9/vuFrbo2zIoy/XaBAqavQff9ehsgSvQZRIhp8PSdZB8uZlGcr4M/xH0NL1lhsoNe+j9/EKS9s3UrO55g2Qael/9ReJ8mEvHiD/APJixC63WypTOZDZXY6S1y9ZQGDt/wCKtP8AgLiMeBz9XKlIBunTDSK5oiKg8wboJ2QoA5xzdsaIYiXvUKEYdpiYusQYcTf1m2LlAO8RqzwyrMU4nIalDBhk3mDSOsShy/MNjsar0FsmRBcMb8kam7Y0KtAWe7FSpovGIFR0CPtCx+IcwSQN4IBd+0KpzasqApYWVuwBhhk4B3Nst7Q1RpmMEsFE1Jdxl27xCaONQA5r4ggfwg1aVqJlJ0g6OID0iTu1fqe5Welm7BGuS2U32naEJrk7BxAufyQQNt7vpODhonfodurAQACgPU1brEvncYUaCi+ZWDrGDy6PeNpBDCOyOZxopMvVgpg11iGv0hvvESx4LysozF/uIbKj90fA/wA+jmVXqgyoHefMqGPmb8fS7fxMTAqXvMvwXuVv0Ho4JWiZQWPszH5uHTRp10mcavXCK1geKcy0qWGnw/uaRsBszLB2x6A/83/zX+ilILW40getXo9ADPoobQ94lv2m4JhApcGZdvQeRiZq3qcGIhbOIibwaCVwAY7R5KXh5hbcSVup70N5jkUbHE0lW95iVGhluUkU7tyvALOGU0cVMc+hjtnlKE3EK+T8zRG+fMdkvli0PeI4SVvjrDek5l9Up4zWiUZfWXmnxADUsgZRQGJax1nsx3SogsdsdxJiXyTJ1rpgKDmBzF3usqhbx+pW8Fdr4hZ8Ye8oQ07jKa0R+CzKwmL5lk1d1wTUnK5czNLINv4nEAMHL+iUrlP0SnqHjMo/9iWz4OPcgjoDve7kgiC", "IjpPQWeJWQ7+nQR1+jDoXmc1+yIqoZkar+ZR0Bg6TKDTnwiheaA30icV6DoSuH8IJsX1SzpfkNfr/AIT2Cjg8uoGIXTJ/EtD3LEhiGXEEByzzX9mj6D0dhOuaJ54+4V3pT5jvbg5tj2LW0fghSh04PV9zCqneKy48h+/QWP8A5d3F+JeppI32i+C64PxBdPxYnCjuGD8oTgr4n8xTS8twXKN8YfiIChfnMC0D2gdIOsG2F17bfMsoIwr7ENJLEhADRd8R2CmGYxYVqVkFoqYqLFtY5MDLq4tgO6xCPqDglWljfZPvxHcpuggQ1K7qIojsI6HMGrdIW5qFWnzAhcrMN0lkHM/NRNGuajXg8w5mrlALBuYd3qhRPYIISvcSHeC1CgFmXcChIgtWiU0DdNEdegStQwaeP1FK2Z3IN70wYChG5K6CX7D6f+IVszr/AD8ywyB9kyqzY9e0AAaARIbDVcSxY4+nvMCylMdGXKXNeJXz1hcqL5eT+IGFUNj6YJ6wz6VfBNGyEaimQ4X/AHEWrf5gI7tzlRQ46svlZ2a9FSehP9Sat/M5Dl0cvtHQM/u+CHRb9PwQIWhoCvqKch5l36jXBGK6sH5h6AQ9ppibe0okyLbwf3A0gGyItrcGrAInBZuYrtAN5lLpMMLpe2H3HVgm7afeAAxfHSa//LwEfJOCDSu2MRc7JwNnmMUvgaYPakiW92HVC2iAFHzK9AxOcZl1entNePuVuBrrEuTK5qM2NJyRqp2Vtlpg3TGUY9d4EBYvSF7EOlz/ANKclst3FuMy0vGVQXpCi+GVNWRqLW4aJhGdVGmIOlfmAhWswVJswqhtJoXuDoB9xv4xtlJZCeasdhaW3CYPqHBaYM5KgKy+AwLrGW7xu4QREsv0/iPbDKZ", "fQMmUiEZaq6iq6tMuxcotqqW9VYFLhkRZoa6FceWEYAcHBMBw/wAuK6NuohXPrBAmHgtEHe1Njsgmjfo8VORmtJsluuf5n05eYjbnREoteJSax3BtU1jGfeJZ5jo5YAAoPUWHUqPjZUVPu/xAMZO6599sMoh2JfoglJYupvWeGGiU95eJ3Cu9swcypoe8BNZjNLtY5XiM7FT3D/c6jNHySo1VQDhDKhNJ+IgF5TubJrD/AOLpQPYyMg599y9Yhv8A3EsGJs2nmIGK8ksaN79NGfRYZBMYul27xKgCHWVcHUFkIq4xo8StEzapjUpSbd4lHeMtR4ippvNTJWbpU/8AIgyhnxEbEPSUmEm3pQFGXWplIVyR6C8lnifUYqHuNxRhOmLrUwGUwHmKI1TFpVOiKmyDLCuWJEK4JYqektGkgDBxeoitfKVbbZjV4upQBBrSxQTOZXywAgFAGTrNaporT/EMgnksW0DzmNLjnpiFl2ujC/HWXLcfwMu7VV8GYjfOCbHnxB2dW/Of4m9NDnv2jwvv+YXs2/RAox/76B+icRG7weD+50UOjw+qX27xzhfd/D+pc3ybMJ5IkMbcQ6cGItC9Ic7rKxMlXB0OD/lyLxS5XwlzQLuKFoL/APCOvCwcLPEXlmaeE1prrVQ1gpLqsNkWpYLaFwqDhTl1czk9oNfall9txtIhFV8YJYHXPD6LMwKgvXMCKmWnt/UAU0lkP/iqlR8G/h/EK6Y6iV5SdHjpF5I6GB5P3NgrZdMUtffvh/USoeE0xUvNurWg5lhVa2zRA7IobeGC35g8oaDcQ7U9IlQWs4ioQfJRBktVCBMHvB64GmOdjaovadUcuM5iNypxcvNR17yrxpu9mVV63CAKO9wmjrBln5vTF1iMjbQQOCi", "qHESKY2dZR1FdIXcXxGFfDE5QAQYnYhR1jMpWvtEUcI5nZS7jAWwo6SGja1HpwmTinntAtD7ppvfbiyk8jC4mUZRenXF4lJABQMh6eesUJZvXQ293HzA5L8TFOcpV2MBth/wlwsvDuOmHUjl7PECL+3E+4tFxsa7ipP5lFvo7P2RCn+ftOgDL3/ESCiMpbn6jc4/LAeF9aiPJeAld15Z1reWYNGXwCXyZnrM9WCys5eszs9ajyDoRqtW2AcDFwBnn0qZ5Hz39RQ7PhOkRLlAZ8Qt12WbuG5/ob/Z9ZY9DT+ZSnv4mz6/EP/gxUvEFKYC/SfuV7lRIpKiR9ZIHgqyDXkdZiCLVmT/doD9Cr+fuZmM+5ZC70964WbPmBp2Bm0R7RALgZhC9VMWUDE5rXXaMFELKKrEaNXcEt69VMmpA8OkTQysz2j1w9IMZXJWpjJYubtqZjcN6nHvGAVlr8ze7poFhqYFcKuNeIL+YujmGc6lwMlp1iHsD2luKEYQbOKlScZMWINOKmvw0ylbQlEAQKXNAXUAFD3gkzWFjd8Q2C0wa0tb8RWHZkhFTBPfzBRxlXtADQuAC1grYworm+07pg6ZYykCgOq1f57wW0B4EvHmVMdAIKK93v/0cU2fiNcqeElo3g9GnzBzQp+n0fL2gDl3C+CvMz1+o31WB1i5o3+IFemWV62HM7SPUuuhBoUPxAko14i2RNGqlAK8c1uVDRDcbsuDjFfuUkq+77Er4Q54rzMlCy2HpctOlbGL04D81+4zeKMF0xuOF/O/2PeKy4f8AbLqd8h8Gn6YNNTcSUoRRNJshYAnBv7mTC/fPJApT2fAsCveMU82O/hiD+KfUbkLufYRX6Ech9yDwAlOTJFw1cZyp6XFqwuhhWgW5ZU0OcRI", "tBXWAENu8Qk90wZIHEAwUBupwGs7lCcHWUWSwdRV05RUYFq7xQ1fVAFQA8xzzjVEPKYjjzN4A51F9cnSCRV4RUMbYFiBxBB7YuFVdBM85aPBDYQui+Jdot5TMxdtsSV9JcuqM7aa5JWdogveVgpzIDUyCmdsI3GUhaV9kz3Obxx/EFvlvY5hM9LXAHLLQ0XW2A/bAmU58rq/uE7lYI9b9FwxU9pxCemDXeGv+wpr49MCjXVqCmC/D+plg30gc77/8CbB3hqG/EE6fllcoiXKzseeB8yu18yv6kSmDHBq3Aq9HQTrt9xDzPpRKAWkLWGnqQWp7oa+mUyACck7D7ykrW5woe8FC6iC4CTZJbzEyvTiIgwt/ME3QH5m/pWZkDboL8rx9zHNKZOjyfNw/+DqGzz18QtC75hRSzzKiRx3T1mFe7FnmZUNm7aOq5O0SgBfc3GN4O+PiKKyaV6e4zEAPgY20ovOE2m83BKADY4qV6C63mETqBj1MVmqt3NqiHeMBlMrl7lG0zSJ7RqkPaIcHtNMEAW4gL1hqBYR7x2CcZ3L63RiHaMMoCbiGCkOKAYVLoV1iwhEMMAD2wo5GtQosPKMKVsGVFYsFIdIhdMNQuAaKazFu4BCGHotgyaay6RILrCTmUFqzTXJBqbLLOdwgkGLYqegPTrHFKMpz2OY39QoPPY/cVEu2vrRX7YmKm2WA4P8AEsL/AO3r6NmeI0KcwZxRycnhl2UvO0geU8TbfAgqaxLnQcYuFW52FTrW+WABgCXEvmoFYJXoqTAADjETg6uZdrHYlGEB+48+GMcrXggDdB4uWC3hNCOCFuuQjg2vDOnpPqoe08ZfRr9TaBRGaQOifU1959paWBX4n7qH/wAGX7vTK9MDTw5PzE09YmHH4l+", "mn0BWxG1AjV9Hl37xKyIjXcektuQmez+YQ5D5EbvtN4+JSHbpMe5xNyLLEafJHQJcA/DDXCYi3WVDRcpuxCHjQtY8fRQBVRWqisNvtAFTD2gpdFAVDBDMGiIaphI08Qb8ejOV2h+RURQbiwVzBhdxarNxLQzhDGJQA56wLMyNK0viA7vaFVwlkMzdTBHGaIuIYIcLzRWj3lACtrJ5TKRMu5yUzEGQSOCvLr4lo4vaa/vGGgZ+V0TK/jhXWXvBkXm3L/EoXW3yn+IuWbetCsvq3MNoQPqtb9T0bpeYDZs9pWY90zMwwrbAXJKFSnkhTD8//HN61vibhfpAzcy9yyRQz1Nxbc1zGaKEt4I4b3WZeLsOssnUZjuXJ1dPiZTu75P5GGfQwtA5xLNhV78WD+feO47teRTHZ/8ABjMA19o/3AtnJBzKs7k16KhBOo9yG35/HpXw5f6YuQ5KXSFUKTCdGYKYy9+YxLlV8Ht3/M1IGOh/mXmp2t/yO8SfcmTcLtSKqgma6Qpqj7RNAvCWmeLwQV32BIoPqBE2ZSC6VLYOk6lDlUAsrXSIaesOeeYNDipclF1LM/8AKAFSuZcG2xcVc3AQviZi5AiSAPaIKzC0pXEAZEgU7ZcMNGnqYYYnjWfmNXL9Ep/MbWaP+7gTg8GPmLyDxv8AmIsboWe7sRa2kHyB37sDthOnBFSYaXT8dx2xaD0TNDxL5JceieoYqx04i+pP8iIloqfyDGzfWF2I09YDl2zHEVPprUHr/wBph2ITqxAblFnAPQ3TqXMP3+5fxMd1o9Q2ehXRmZtTIvk36ZB/6mf5hxfowuJpVXpe/q4Ehg2HETDYaJ1zX7iZ1qvvWvqpf/bGHrdftCofEqsdJpuYErhgIU3PwIAAAAoDiCmsN8C", "WDgOGoWW20Xy6QBk3gevfzOuKRgpQKZgK2BwP99y5OgonPWNb2wa6dSCNmDcfn2uIsqKrUBAAmQ7i22/qZeZhLCo6GYmAMK5l37o/rHjwgEbdMkpSRDpLxXTE0dSxK4ltwVRMMRWuViAAiksDMraYWC5eISWXoO8RVQHI8SKFaF0Vn4hAlQItLzp46wLxFY5P8EVoWHY0eBDl0A5VwfP4gqt7LwRmbsduh8TLEef/ADSXn2mz5/mXUuCHHogl+CKcxTzLhqKRcgu+YCv23iZlMdoIZbhhAwcep/yy7t7zROIvtNT1v0c/AiUkLHqXRcu/TJi3nGe0Rzp09No4fRxO0ubQj4cfuYEYwUNCflwfRDNjjpKu4vy19ko+h+n9fiDZB/6Yzrm3PJmAFnMMg9dxMR8QitO3l8Q8YFAS52DrlBsE6iw2C8N0mY5lc+Q/mNhAXyJE4RAiaWnosnUMwO+4EElRwPBMvbhx8wl7amgLinLdQECCqiiVg0HLMlUxEwjLriNtCVwVzO7qTd7RbVt4miH2zd4n0o6YahkqOmusD0pSOrh+CVcmvdXBBA6pPeB2RdC33IKWNXNXZLq9HVgsjpbpxiKFVH+k7wB4yIox3v8Anv8AcSxug73C9u46eJY3afCkvCi5fKPrcuECOm/S/XJY/ENg0+4bRXUmSXtt8d4YhSAf+7z4zDAJwOr6KgO9/ENF0JcvtLoD3m5zI6c/uIBwqlsPaK1+nLEVk2X8y4pylkArQMZXEaF3cdtD6/MDWl8xbWT6DEXP06GaWFniDD/ljEHDpwxTY7UdmPmIwauJURBCyD/wJTUHA0T8KyXNV+1MfM/gAgNZfYYMaGy9ie+obxBcnRNwBbVI4Bx5QcnWMazojPTMst2vqwNOJVC4sJj", "vKZFRiK6y4KxtKuYrBZqAnVAW6Ri1spslHlE2vFoQt5lyoz5p9eH4wlWYvyiro4iUxAoSAwJgQC7MytV2xEDAS4t45TUbdvH+qBCYumzHeW04UXU6eNvBKI7triYcvlyRH4zZ8A/fEdYCOR7sSss8oqjbQHNhfzUb3QfacTVdpd1j8OT9witvkg2Ht/zUr5ljeYB18P8Awl7hZ/MGbnclSuZcIIIv/hcfCEbr0L9BYOhXzAFrREXQ4IIj4gY2ZfIXQy1ulxJhM6RbZkpApuksFtvZslzJtVgehy+MeWAAIQhBlcdoAw5D6lATaBcsL3fLqskIf8MYxhp8fmLjKg3SrudWWdX4/YlsFDukBb8yMaqol09cerao5GAptwO+mUIyt9nVw07WHqggrKuzXFzItLZ89iNdKzrpFN3uLyVk1UAinvHsEpFDqlZTK75Y6R3I7hY7uo50y9oUo5jXlgna3LhRF9ofjlHxgx3lWVVmIYsBhmSdpXeopy8ximZRTb8RuS5W2DcAViX8RizaQe/+YsToel4w8rjvAtE+WBXA4oomHM7LdxMoeUjT9X8xdcSuwdA4JknITxH4xgdzJ9kA7q+wlW1GguDMynXyDJNB4iwZyajx4/4PW5hM1CzmzvBNer6DUGEAheEHoXBJ7jWLKwbXLQQrMXyXFly5uM7dcEWDpC/AiIdqz5lYjKCcX19BvFbe0C20PxHmwL9HeUlp38Mft8xtprFQKZFcxgWyEZSToz34nF4+1evv8xQh6sfQBKKKDKyoBwbXRq+rErw0IlzGJC7tKiU+iO6V8TpYMEEY056kZeZfDFvKFjr0/fogzLx2P9xCRyiskB3Ees6yRlUvaYwbi3eIhaUeIbeWYEaWsrQogDUPKXxSu8tq6LaMzMt", "x9clqlwo0ri5lEu+JUqtDgsGukaobHWpfGktTbqYwq7mAlbgG34ERgEVzHF4ut6v+YnqroalQgDIf2y9E63HzLBd0OD0Aq0LYIbHXYnEWL7os7YqlwP3Mw6D8Q+hFYnJZGgWoNj3h6wb/AJPn0OSDB9bm5RKSpqXLj6j6XBGopuA6zuRHiJ7stSoSiuDPoEBIJLqxfSldl7dv0RiygjtFv0dZ94FTuy+VlcPQil2LWGL5a/cpAYKEKg1E5DfaYh2itnSLIurKuO/hSh0TcGEv0WLKD/CC9CPhgy49joQVoldlE2AOmUq63xWblNVNlyHpUyVFfglDmU5YNVL6ueDq8TByt5YCh1B1hGRMMRBKXHDLQXkydkzBEVGj8ksfJaHcz/MMAFI1HdyXFm0GKyjT1JWwdYCy2JF5iyaJYsuVzBDEaLmFlXiLUV+IRyaekQljrB8JDUVQ4gE2qDN6k2oUpYr0JcWtGitIXpdc9JShW7eI4LVGHoG5QnzwdtH+7zB8ahgV7KEW30uT0uvbmYFVSYfSxYczN9dwXBkHvDs9/wBS6OjDl8HZmQ29n2PecEpezv0Bv0v17peLuOEp0ZUhqPtF9FnoP/Fy5cuLhF1Tq16Lj0rlywjuflwfR9xY+jX1wIsgbrfmBlJqBiEDYrXzt/UH1zCP3m0plxtcNyxe0ly4tCvnT+ooMuLFjHYtdRmmVkdZ7dukVyW4g5HHT0Fo0S6sxM0oNcHsxmGjYzIEWytCzMNx3qer1g2vvNQwfmF0cEat05xLQ1rB0+f5nSJk3iD1UIcmsIcFvSyQDkyQmqzxGNj2VA2wEShcLIS6KMhVcy0U1e4IBUAxWM1FF4XDQsqXArUrGafYhJG3bBTBfmWC67DA4GsSxQ9Jk03C+XZ15gY", "w/wAxHW+YJ0WykrZBFsQKDtxKhrk2artBlS+Pn0uOFqqzE0dGL6kSuabQde8GPujvbpPxB8x+IUpPeMX8ckTdLQyJ9MOxRgHfr7wU/wBuX4dnqt36X6XWol9o2b9VN5Jd5Iep/wBrgO7HZ5v0WUX2lzeJQrlTwMEa+it+tluCBduIihirzBXC60H0Q3HIWuq7lnGjcZqUescZlfPtCz7n36ND5W+NP1Mm7gy5cNkoC1YjjoMn+LZctUa16N01viFFeiYijbhqmourC2jO4EqHL83zqBN1Hy9idgNDjz1Z0WW3wTcOV7ShKcjhgAt0v8fqEqhhz+wlQMpw1/JHkQprV/qGyXG53heYNWHzCuQzNcMpcpNIlIA3m5sAfMvq7TrHpgPiZv4zTEEFtfuVUqqhgNFXIdYsHuzn7kSQJiosA7HiHBaq4IEalm80y2mER0GeJgrFv4P49HfpXo6u8j8xJzFe6NxtbrCHXkQqHLD4iydc/UQlTOuuzMAm1BaZMeTowLr5OSKOpxAuPjkhBWBZfqzP9Rrx2fS5RC0uD6X/ANH4WP4ejwHVJo+fSlmke44/mYlHEbRb9dtQxhrlZYL6S9Fir95ewvKvq1/PxLS6hU2GXaUTTMMy2cvMMDxLnGdRW1yW8cfUUuMCJd9+f8Eu/QID39cvHzKTcX5hrlp/mYEG9l2v8mNHlb4Dg7yiO2t8xl1LVCE1eSVAkqUN+GAywLO0UaXmHXr/AAgBOnz+DLVY5Uqu8KMlesaKkecwXcyBfA3ZBbPiMUXmAKwp1L4m4hfKL4GW9lgspnHpljJzyzPVJ3lGoaKxBAuyAH4+MCt7ZlThriG/FTqwHisailCrHyRL+6bSMNcxlZo2AynVIqrhtZD/AIroO78w1FiY9B+CaHe", "phBFW5YeZR3d6sjrC/wAzODuufEHAz16zAOx5IB0zCCIF3Aum5d+jETxL9BhAwf8AtfacvppdlmY+fS62D7j+v+qMpefLEduodGUvxUGsFr7sFtjPSIQBbEAFz0itJA4gm7BPzcvEIztwW8mT9wfQVire6un8y74rscenfSBjHEC1TwZlehe0ehe8VVt0ExAXxeZkg8q+StIarAViD0D0VNURjG1qHwlFvs/1UdydXaG7mRzEzHAehlDucf3Fou6Hnp0ZWQAWHT+0WKlgX88QVN6sPaIKBbtJaESCJg+IiUAVgmCk30jyuoMIL6dYYW8ENvYahtYZA4FhEjRSjMILCL1GY84bpkqbLPEKBdEqAVL5yTcVmAxlS8qWbHxDsQKqFdczQZRAyDuJb1gde0cVs7sw9kipqvIH9d4nh+Yu2oxgzkeTMQVMdukr02mPgixdEYO5B9xXTGDXiUUafzEuXTJT7iPjdXvCS4OB+YBAQdJDiyrzLlwHUBck5+noyx0y3tHkhB6AgYMuXLlxfh+Jy9Fz7D8sX2ZrhLe/QjV2qvMr/izeosVAHk6RTBZKLHgLfxN6JZVCowJuBWVPMpDw6Txr8HorB7R3LPQZPPEDQBcFoNVnoH8xFCosegg3OnrUTFL7uIMYfAQuq70z/EGcTy/RCwYspQ/mDan05V4vXvLUtgrK+8FziUEqxzE7ED0vH7gitoFPEWG9S4Vy0mr7kbNlJhmKOlH1O5jb3lp8wAoEGjzHvq2zuunklFzXQribZR3JeDeSKIGOSY9BgFNPEL2mt3UyVpqoAWUxBKbW0whC6VGiVziqs4cvaKe067hIIaqrV2RkG7rLovm8xEmaMFbwmAGl3CqNtNwZYul3DYR8VPz4jfseCFHL1gNi8kwRvhD", "8nMLg0eyTn/yUaD4T4/iCOkOv8S1huDAmn69DcVeCVdQGUHxY/JFiLRZ6Fy5xgeYCnoBgYMup3Bs03ZiA7U6ZQPYoPoDww5fdZ2j4nSSPOWYFR2czih4VAcZ7SxT6CnokkD6Lg5jz4ReaPMF5nN4gl92ZC3/Sfv4/5C2aIJm5/CLswWwUptCvH9xcUEuzF7w3FtYiCesMF2ljOgPo9HpLvPpf3N09b38P5hgBvler1lVuvpm1B2feLCo2jh7/AMSgg4Bg/mAVYdKVOSO7SGnG7Hw795YxWD8zsPmDhk9YpmV6F+P/AGIi2A27TJLJ1gfKe0VT1NxUByGfAsvORw6xBchzWn/2XouvYTJiL0nBUeyZIsrVsrIPiABA1rMNUFgVIOEzDVoY5mqyh3nuzYHELWAhfV5qLY6y8r5IFgo8sXybywhXNwThsXokFlY94ELA8MBKXfeL2h29Dn3gLb1Xw8MoLfH8v5mS76gwJdNFxetRoGc8nSONxmq7ZV3Rg0P8SKvKXRmDeZcqez9SpTsjNXHuC9u/CPAZ0JqavuqNH+X6V6K9oHK5WpLJZFo6NJEFVOEKH8wxtNdYdL3IJo3BSEknrBl08V+YWHPMGC2bZQKqC16EILmDocEtKZqOe8CiK8MxOYQHumh1YSOEUZy9V7xK4hu5dHb6ym8HpBVbvcWh4lrHkE+D+PRbPeDglxQ5DReOr3mI+Yhz7EVRV9BMfd5D/UJSXe55ZpOfRLDUinN94peX7guGW8wNuJwIehlBUCzpl+2U1aHrxAldzESO7g8xXK6UO3X5YFATb49AttjcWQwrIq/IPWE5EdI7iBlg9ZuZtrnKBLdNeGI2EPMSl2zAtXuXa2zIWJHIupVS3GhpX3YAK4hRqYVmY4GeUiu7gRY", "pyG+IUVTvDm+JChtMrShcXO5uV1tYfBy/qDFGAgYlhPeBIVUKdFpEsd2AZlSA3i56TSn3xLtmpq8xV5RhOwj4ZUVZIdUwK3FK/uDZccvaaloMjsdMvXDjki45dXJAm6+0IkDoMoXVMzMYekQ3UOLM4YuDeD5pgji0ejuUXZAOYdZBHTLlv+ZbpFiKyXHB8xCLSU+G5RzHoIuAqWHV3jnbfoRCrmJYUDu1ZW8MFcK+kFgUKWrF5mevOLIsvEEM21HbZHJZzmKkY9YTP8Vx76ikWOh0llotZb0RurHgy/EdoXYOXywmDftr5mQ9gwSnQmOhKOMRL8wU9FWrhghL2+CdiDPnmMMsWuHSUAxiRWeWJTtatjNKj1KC5gCYWdENX2H3KYaS4wk4CV6MK6ynpMuIatVUsDExBiVY0xcpTLczJrUx2BDkUOSeYLQolxdNRRUWwCSu8SgbmrYBdGOkYAeah4RMsLNLXHAdIt4JrHM+rmAwx/JEt5B9+ZXjqYt7GukZw27qBioPuRHZsgHaaRYp2fc58yx2dTCC2EwutdPRBuPgahWxR7TG5NXw/wARGtLy/wBSx5OkYlm+SGMwhnOHhjJEydIUmYimSyF8r7MsaJ51BslwiyXNhFh5SXctrqpYhw188/cQy/aUG34l8VUyzbiBbU21u0RlVgXoc/UbSoYozqLqZTFMOyj20eZZdCJEYvAgQKpvc19qF8f+w0RqtHHc7enM4mQsKs7cP5lDKqOrUGso6j8H7Y3atO29+WYxeBqVHUUy0RoZcy/TYhCArROdDJ9swcfR3UPOtj8zBvVYsC2dMdh0LYRZdio06gwG8Uu4isX8xhgJavUKJYxRMQohbKTimyJgRFaehCdZXsEBe7IIGBFWWcpGrxfpUcwVFAB", "wUWwS8GIjlpG7lmZCldPB8fmW5SVWoQfFBdDkEQI38FZkRQwd4+22VmWdqEzHQSKkcm+0KOcMV/eoUfiFeUtwTuSgyxVbZg+KbXy8viWooBtmwJMji946S5mPkILWQtB+PQTrJqVS17Ms6SJTDUUbPkh3iLstdpR6fRlOcPeeGW6jHI8mYP3LjYFlTq6l7VbXLPfLm+ZU349CCsrQbYZ9nA7vH6/czAamWSdkxPY+VAipRjlfZLIhjeA/IjaG6EDIU9OPaEAwlAe8DAG3sR758Trz7xKtX24j0j6ZNTLMWjGWOW1tlSpgL0+lTWu2KaVqdbg2zIjhiGixDxMCRjiKYcXLouXSfw7xFmL46SwV1moLBYtRHpA1myJEMdkDMB0YWGK4hxHfVjtHsiq0IFGW2DCLUo6E9pcuRTQZg0z2idjyYvD7EGZaFoMfMcCl5hZoTwQXCsreD/YhMkdReYZIM4TxKhy/Eqkej8k5zIO/+/coxRr1F2dT0CibBslFOspmDLx0Y/xGA6p4Z4nzHpnxNGn1DOo8sIbv7CJXk9XMuO2NsHvCCdNRb5sBtdTqMaoCa6eH8R5QWepWbPeICmAinJKvTG0pP4lSojjHiJbBfjcEVNPI4YOoM+ifiUyu0qCZpSyoqz+SAINH0n1eCVgmHktSvi5kqXTJ+YHjHrtZcFno/Uu0A9TTAiHDdJ0YqEa3Laoqp2WtPecR4EGOqvHxHwEBwQAoi1GKI9osaJcwW46EPWuWLrLstENszrSV4MfzELI10O8ECq9NPmaj2obLpxVW2dGWWC2MpXniJVCPRgv3hyhBEbHCrvvEAwmB2u8yzIVXB5NktcQwsDcAAXOaQmJhlKczAs9012PiUuMxQqOorEDjxB9IlSPM4IPLDOg8EEo", "3UYgTC8QCQ4KGiPAmy73juF3VBrJTF8QPYe0bRLSk5dewgwzEVolUN2kV8xAVRK3TVHmJrDbEXLQXL5/qO2vB0Jdh364U9GC07y5dr75iGzYkTYejkiYv0qOXc6jGPRAueOKvwQLMbjoa4w9wlZQJmYLWTV7/ALiXmUde56pBxHKyXTSRp9CJvJ1lXEm+CHLxKRpabDkP3KIjOogfCM3xDqmDUuLfoIKvHeVcNmQtCLju7tDp/LEOkKdClA+oiXdL+IOTlgC1itYlsemRINGCVx/zUEe4fYdff5lTRa0Sr3ld2wcx6YsWiaMoTOhKGzmLbb6pUcdIpk1MGYgXFoMpQx2QIXi+YeFG6TCwQWhHk9GhR5eYfkF3a8V3l9WcLqykt3LQvBNhsxAiWLZmNigX3uVJzyLMq0GUai7iHEs0ZZGkxMtChvW8ED6fFmbHKqDZJMWuokzNFxrC6lRzyV6stb22W07AMCpxcnaO2mCNpR6VAzZfWGi0XmWtWi1HXEpFLA+Iz+amVBYPLt/UHbUfEVh3OzBmVbMDGdPKnn+4N9nSPpsN/n02+JlXUS4rxsmLtslC+eJwQvbc7GBgKO9kaLw9VdR2XLlBiBU0QZXPHgmMXPi69mVGUvkcez+vTmgO+YDsROYKYdx/9QLih3gnjzEiTU3E5MS5ivExqVmlN/zC0Ckp85gTh7Rtr/neU6jEsd3YPNy3BodB0O7G4QwG7eL/ADKrXelgOeR4jatQboffEMxLjnY2cNSiYLHRmcc3UBzSpJReei+ImLl4rj0ZpLoiLtEP4IrW5j3TPWUd2UdH5lqyvszWIWml8R2jPbv0l8riKs/kqHmWdHRMB7i3+YTRFq/PXsI9AaLcbdv5m1qi1rvLohR5Q8OYSSy6ahAVi4Q", "xl5nCG+jKPNqaTVN6gGvSWWAHtKIbGgIWUnvGCqpeW8EIPcM+oR32auKhgaaOqx6N1Iig9VcsQZ0QxyqxlnKq4VC1x4jVAO8RYDlvcP8A6zQQKhoCsZ8x+SnmFjwg2e0W3DUMw9A5dPLv3iIoImEePTg+UwOzLALjHrkXbf8AM8rhLmUdsEUZ/CV3ufMgcxINhTscsIAwFBCqLTyhljBypuuT4iASxyTTQXaN1EOUYfoS+jhjjhgNLE2gawyolRj6LTrFhvlqCF5gCZqUeVje2DredQfJF/wT8hhcpUQ84H3PkYKD9v1GbE9UmIKW4L/2oQurYs+CDZRtbVQdLXahA2A6NyyIa2aT0Ko212iXLEKuU+q/UE7i/Ce2HL/usdlTAjGLXuKrmCVRQ0LfxEVtu5WLvBMqkfEOUeTLOT2A/Mrf6HgiZwdFYcXmVAbSnuill6hiLhPK4YTkDd5rybJkfDa9/wByotgzODp7x+ErvxLi8mrWUC9jXUwzHYGoEAu1+TmAuNAZUUO6GC5xUtaLZGHKR6zLS+ZnKsbudATG3CYM4lWyvrcK5hi0OllzbcDfkgwdiJbOUSz4ysXalQqxWqDpMlgBg/catuYRqYGY23C8SyyHHeXGh0nXEWeeIp/eeMv3HGia3/lxGCjY0xDZrob9+s1h+YIQyzAY/RgW7YGblmnUI4fDLG8SvSrDrjt6G2dEQx842esBlvwSlWoRL2DlipFAov294Bi3EDbQXC52dBEM7Dfe5H9e3pYbMMMlik4gjQHySgUns2R/2Ew3C+piBdEneoi59w9IbqFXYjyYLu1RDAHQInhfNQYq07DAVeywZY8dl3AOrfBDuQOgfLBwHiCHJ8SFKlB7DEBqlKrvzKnfrCXBT0PvtG96Aw6R3uf", "qJFijVs+H+4IoqBYVl5q2/MOsA2ytBiHW/ER6/MXhBVoa8TRAlvI/RMOV3fqWinB0Cp1C4BQW9Izn44gGi8M03vtwDjsGCvAvX9TMhKCVQ8nvmDYII6RwxwJ3k7n7mS9vZ3jBctRq8yz4bYKyLH6Ls/cAD1L8R1ERd7t1lQO/KhRirlpiYdd3WCAr5SgXnbIAsItMAtwd8TgIVl6hsZSA2TarwRCoOiCIcNw5T7ifVJodz8R1RKoi1leIilReCYoGsQm7hMLe89ZmBb3lQHbmGgu0PQFLwL/NTEW4yszx03q6zP3HqSgZ31mXGvr+ppOXeHaUrAaNkoVV6TXh6Jpk6MAlHkmRpw+tGHJ+JaqHEE7ZdftFxHywnP8AYusWCj4It+iaPRgvaq+9/T9M3gzyQw0waZvJBPVLrEXHsi4wMxMQ7+iZcSjoSnQgDipX/FTLf7Y1FdN3GJUrQzDZU7CWusQ5ovO51YIWRtB9xgEdg+I6JSAYOsOJb3jKCKu4xINVfWLfk49odjldQTNe7MdsDEZZZ4PzBAND7lXBVLnpCxFmrdHmGY7VBZWB2ceTmHBfh4iSwejeQjBb5oW/0hU8NmG/Ew9oKfwe8QoUbOhp+cQhFVwjwxoNNdoLmK9mvqXWHtHe63ZG4oCpXCRdOe7lLWcImqyIE0CbqI1B92pqNBntAM3HKBbkYafNB8B+ILLwyuOtsUqtHaBWW4XUXJmKCHKzUADo2wSnULZn3iyyA4IGzhPl/qJqWKee3iOF2J93/CqXMmsnSJaaZT0Y8EVseJd/KR5/mX0go2QDRbF7zvPapV6gm6eY9y7IkyWNF3p7HWEwWtry9YjhqbhkiWXBG4BZe5U234lrsArPqxFtLWr69H3IOr+pkadkGoMGX6sbv10", "GzJKl0ZinX5lerOxngYo2MpeIQLxBhAPjj7j/AIZzHSRl2df7mViGrgjuZLMTBKYeSEC44rsYvzKPChZAO4e3wRXsdpa5SNu2/MEjRdTCNjocxpjI8sdV3fBHNm+voAt1M5/ftBSqoh6Cd7nSA1LtrHwRt6PXOenDET/pM9SLi1XQtNlcMvomD/uY1Dl3MkYq4VxWeDww2y9WMQ50WZ9Gebm8x7QFt7RIaCKuyDM3UsNrPDEMq+8bKI6m3TxMgfedWEQSxISDQwDDp6N9A/EPwkA65uEYh9XcFW3mJsKK7QBbmEvGIOpjYgfMSoXRx4YKp0nLu1+Zo8f9j3RBMYiDjyVBO5VOy0hp9BqmJJYCx0gqsY8pxMHMU9ljEsoivQ4IRYLAygKMFRFR0NV6VQvO71ggOtCda1CA626hCDLlwb9Es9bSczj/AOHSBpyo9iAb05THCl/ZQ+oV3oCAxYNCRDUNTb0MoYriROaPuKJ0jMG9ocmVgCtx3OBlwmu0RfAFANTe40QaS/8Ag2PARtAoZMV2+jNwlrlYrmBHuA+YVEEmmqzKIcpqcqn3buHKtrCrxq4qaZnBLmL84RMI5E0whYfJKv0IbEEAtly0eymo6UFTHgmSs//Z);\n--hx-cyan:#38e2ff;--hx-blue:#4a8cff;--hx-violet:#9b6bff;--hx-pink:#ff6bc4;\n--hx-ink:#e8f4ff;--hx-ink-dim:#9fb4d0;--hx-line:rgba(120,190,255,.18);\n--hx-glass:rgba(16,28,54,.55);--hx-glass-2:rgba(22,38,70,.42);\n--hx-shadow:0 18px 48px rgba(2,8,24,.55),0 0 0 1px rgba", "(120,190,255,.10) inset;\n--hx-font:\"HarmonyOS Sans SC\",\"MiSans\",\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif}\n.main-page{font-family:var(--hx-font);color:var(--hx-ink)}\n.main-page .el-card{border:none!important;border-radius:16px!important;overflow:hidden;\nbackground:var(--hx-bg) center/cover no-repeat!important;background-size:310px 500px!important;\nbox-shadow:var(--hx-shadow)!important;backdrop-filter:blur(14px) saturate(150%);\n-webkit-backdrop-filter:blur(14px) saturate(150%)}\n.main-page .el-card__body{padding:10px 12px 14px!important;position:relative;z-index:1}\n.main-page .el-card__body::before{content:\"\";position:absolute;inset:0;z-index:-1;\nbackground:linear-gradient(180deg,rgba(8,16,36,.42) 0%,rgba(10,20,44,.62) 45%,rgba(8,16,36,.72) 100%)}\n.main-page .card_content{position:relative;z-index:1}\n\n/* ---- 标题栏:玻璃 + 极光描边 ---- */\n.main-page .card-header{position:relative;display:flex;", "align-items:center;justify-content:space-between;\ngap:8px;padding:11px 13px!important;cursor:move;\nbackground:linear-gradient(120deg,rgba(56,226,255,.16) 0%,rgba(74,140,255,.10) 48%,rgba(155,107,255,.16) 100%);\nborder-bottom:1px solid var(--hx-line);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}\n.main-page .card-header::after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;\nbackground:linear-gradient(90deg,transparent,var(--hx-cyan),var(--hx-violet),transparent);opacity:.75}\n.main-page .card-header .title{display:flex;align-items:center;gap:7px;min-width:0}\n.main-page .card-header .title span{font-size:14px;font-weight:700;letter-spacing:.4px;\nbackground:linear-gradient(92deg,#ffffff 0%,var(--hx-cyan) 55%,var(--hx-violet) 100%);\n-webkit-background-clip:text;background-clip:text;color:transparent;\ntext-shadow:0 0 18px rgba(56,226,255,.25);white", "-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.main-page .card-header .zoom-icon{color:var(--hx-ink-dim)!important;transition:color .18s,transform .18s}\n.main-page .card-header .zoom-icon:hover{color:var(--hx-cyan)!important;transform:scale(1.12)}\n\n/* ---- 标签页:科技指示条 ---- */\n.main-page .demo-tabs .el-tabs__header{margin:0 0 10px!important}\n.main-page .demo-tabs .el-tabs__nav-wrap::after{display:none}\n.main-page .demo-tabs .el-tabs__item{position:relative;height:34px;line-height:34px;padding:0 13px!important;\ncolor:var(--hx-ink-dim)!important;font-size:13px;font-weight:600;letter-spacing:.3px;\nborder:none!important;background:transparent!important;transition:color .2s}\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-cyan)!important}\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important}\n.main-page .demo-tabs .el-tabs__active-bar{height:2px!import", "ant;border-radius:2px;\nbackground:linear-gradient(90deg,var(--hx-cyan),var(--hx-violet))!important;\nbox-shadow:0 0 10px rgba(56,226,255,.75)}\n.main-page .demo-tabs .el-tabs__nav-wrap{border-bottom:1px solid var(--hx-line)}\n\n/* ---- 玻璃卡片容器 ---- */\n.main-page .el-tabs__content{padding:2px 0 0!important}\n.main-page .script-home,.main-page .script-answer,.main-page .script-setting,.main-page .guide-page{\ncolor:var(--hx-ink)}\n.main-page .el-card.is-always-shadow,.main-page .el-card.is-hover-shadow:hover{\nbox-shadow:var(--hx-shadow)!important}\n\n/* ---- 通用玻璃块 ---- */\n.main-page .guide-header,.main-page .guide-card,.main-page .ai-config,.main-page .setting-box,.main-page .answer-list{\nborder:1px solid var(--hx-line)!important;border-radius:12px!important;\nbackground:var(--hx-glass)!important;backdrop-filter:blur(12px) saturate(140%);\n-webkit-backdrop-filter:blur(12px) saturate(14", "0%);box-shadow:none!important}\n.main-page .guide-header{padding:12px 13px!important;\nbackground:linear-gradient(120deg,rgba(56,226,255,.13),rgba(155,107,255,.10))!important}\n.main-page .guide-title{color:#fff!important;font-size:13.5px!important;letter-spacing:.3px}\n.main-page .guide-tag{border:1px solid rgba(56,226,255,.42)!important;background:rgba(56,226,255,.12)!important;\ncolor:var(--hx-cyan)!important}\n.main-page .guide-subtitle{color:var(--hx-ink-dim)!important}\n.main-page .guide-card{padding:11px 12px!important}\n.main-page .guide-card:hover{border-color:rgba(56,226,255,.42)!important;\nbackground:rgba(22,40,74,.60)!important}\n.main-page .guide-number{background:linear-gradient(135deg,var(--hx-cyan),var(--hx-blue))!important;\ncolor:#04121f!important;font-weight:700;box-shadow:0 0 10px rgba(56,226,255,.35)}\n.main-page .guide-card-title{color:#eaf6ff!important}\n.main-pag", "e .guide-copy{color:var(--hx-ink-dim)!important}\n.main-page .guide-card strong{color:var(--hx-cyan)!important;font-weight:600}\n.main-page .guide-flow{background:rgba(8,18,38,.42)!important;border:1px solid var(--hx-line)}\n\n/* ---- 表单控件:暗色玻璃 ---- */\n.main-page .el-input__wrapper,.main-page .el-textarea__inner,.main-page .el-select__wrapper{\nbackground:rgba(6,14,30,.55)!important;border:1px solid var(--hx-line)!important;\nborder-radius:9px!important;box-shadow:none!important;transition:border-color .2s,box-shadow .2s}\n.main-page .el-input__wrapper:hover,.main-page .el-select__wrapper:hover,.main-page .el-textarea__inner:hover{\nborder-color:rgba(56,226,255,.45)!important}\n.main-page .el-input__wrapper.is-focus,.main-page .el-select__wrapper.is-focused,.main-page .el-textarea__inner:focus{\nborder-color:var(--hx-cyan)!important;box-shadow:0 0 0 2px rgba(56,226,255,.16)!important}\n", ".main-page .el-input__inner,.main-page .el-textarea__inner,.main-page .el-select__placeholder,\n.main-page .el-select__selected-item{color:var(--hx-ink)!important}\n.main-page .el-input__inner::placeholder,.main-page .el-textarea__inner::placeholder{color:#6d84a3!important}\n.main-page .el-input-number__decrease,.main-page .el-input-number__increase{\nbackground:rgba(56,226,255,.10)!important;color:var(--hx-cyan)!important;border-color:var(--hx-line)!important}\n.main-page .el-input__inner[type=number]{text-align:left!important}\n\n/* ---- 表格 ---- */\n.main-page .el-table{background:transparent!important;color:var(--hx-ink)!important}\n.main-page .el-table tr{background:transparent!important}\n.main-page .el-table th.el-table__cell{background:rgba(56,226,255,.10)!important;color:var(--hx-cyan)!important;\nfont-weight:600;border-bottom:1px solid var(--hx-line)!important}\n.main-page .el-t", "able td.el-table__cell{background:transparent!important;border-bottom:1px solid rgba(120,190,255,.10)!important}\n.main-page .el-table__body tr:hover>td.el-table__cell{background:rgba(56,226,255,.07)!important}\n.main-page .el-table__inner-wrapper::before{background-color:var(--hx-line)!important}\n.main-page .el-table__empty-block{background:transparent!important}\n.main-page .el-table__empty-text{color:var(--hx-ink-dim)!important}\n\n/* ---- 按钮 ---- */\n.main-page .el-button{border-radius:8px!important;font-weight:600;letter-spacing:.2px;\nborder:1px solid var(--hx-line)!important;background:rgba(56,226,255,.08)!important;color:var(--hx-ink)!important;\ntransition:all .2s}\n.main-page .el-button:hover{background:rgba(56,226,255,.18)!important;border-color:var(--hx-cyan)!important;\ncolor:#fff!important;box-shadow:0 0 12px rgba(56,226,255,.28)}\n.main-page .el-button--primary{border:non", "e!important;\nbackground:linear-gradient(120deg,var(--hx-cyan),var(--hx-blue))!important;color:#04121f!important}\n.main-page .el-button--primary:hover{box-shadow:0 0 18px rgba(56,226,255,.45)!important}\n\n/* ---- 开关 / 复选 / 单选 ---- */\n.main-page .el-switch.is-checked .el-switch__core{background:linear-gradient(120deg,var(--hx-cyan),var(--hx-blue))!important;\nborder-color:transparent!important}\n.main-page .el-switch__core{background:rgba(120,160,200,.28)!important;border-color:var(--hx-line)!important}\n.main-page .el-checkbox__label,.main-page .el-radio__label{color:var(--hx-ink-dim)!important}\n.main-page .el-checkbox__input.is-checked+.el-checkbox__label,.main-page .el-radio__input.is-checked+.el-radio__label{color:var(--hx-ink)!important}\n.main-page .el-checkbox__inner.is-checked,.main-page .el-radio__input.is-checked .el-radio__inner{\nbackground:var(--hx-cyan)!important;border-", "color:var(--hx-cyan)!important}\n\n/* ---- 答案状态色(涨绿跌红不适用于此,用蓝/绿/琥珀/红)---- */\n.main-page .answer-result--success{color:#4ade80!important}\n.main-page .answer-result--searching{color:var(--hx-cyan)!important}\n.main-page .answer-result--error{color:#ff7a7a!important}\n\n/* ---- 答案标记 ---- */\n.main-page .answer-mark{background:rgba(56,226,255,.14)!important;border:1px solid var(--hx-line)!important}\n\n/* ---- 日志 ---- */\n.main-page .el-timeline-item__node{background:var(--hx-cyan)!important;box-shadow:0 0 8px rgba(56,226,255,.5)}\n.main-page .el-timeline-item__tail{border-left-color:var(--hx-line)!important}\n.main-page .log-success,.main-page .el-timeline-item__content{color:var(--hx-ink-dim)!important}\n.main-page .el-timeline-item__content strong{color:var(--hx-cyan)!important}\n\n/* ---- 滚动条 ---- */\n.main-page ::-", "webkit-scrollbar{width:7px;height:7px}\n.main-page ::-webkit-scrollbar-track{background:rgba(255,255,255,.03);border-radius:4px}\n.main-page ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,var(--hx-cyan),var(--hx-violet));\nborder-radius:4px;opacity:.6}\n.main-page ::-webkit-scrollbar-thumb:hover{opacity:.95}\n\n/* ---- 打赏区 ---- */\n.main-page .donate-card{border:1px solid rgba(255,190,110,.28)!important;border-radius:12px!important;\nbackground:linear-gradient(150deg,rgba(56,226,255,.10),rgba(255,140,190,.10))!important;\nbackdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}\n.main-page .donate-card h3{color:#ffd9a0!important}\n.main-page .donate-card p{color:var(--hx-ink-dim)!important}\n.main-page .donate-card strong{color:#ffc46b!important}\n.main-page .donate-card img{border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.42);\nbackground:#fff;padding:5px}\n\n/* -", "--- 最小化提示 ---- */\n.main-page .minus{color:var(--hx-ink-dim)!important}\n.main-page .overlay{background:rgba(4,10,24,.55)!important;backdrop-filter:blur(3px)}\n.main-page .modal{background:transparent!important}\n\n/* ---- Element Plus 弹层(下拉/提示)---- */\n.el-popper.is-light,.el-select-dropdown__item{border:1px solid var(--hx-line)!important;\nbackground:rgba(14,26,50,.94)!important;color:var(--hx-ink)!important;\nbackdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--hx-shadow)!important}\n.el-select-dropdown__item{color:var(--hx-ink-dim)!important}\n.el-select-dropdown__item.is-hovering{background:rgba(56,226,255,.14)!important;color:#fff!important}\n.el-select-dropdown__item.is-selected{color:var(--hx-cyan)!important;font-weight:600}\n.el-popper__arrow::before{background:rgba(14,26,50,.94)!important;border-color:var(--hx-line)!important}\n.el-select__popper{backg", "round:transparent!important;border:none!important}\n.el-popper.is-dark{background:rgba(8,16,34,.95)!important;border:1px solid var(--hx-line)!important}\n" ]; LAYOUT_CSS_PARTS.push("\n/* 答题页自适应:面板固定宽度,表格内部横向滚动 */.main-page .card_content{max-width:100%;overflow:hidden}.main-page .question_table{max-width:100%;overflow-x:auto;border-radius:10px}.main-page .question-list{width:625px}.main-page .question_table::-webkit-scrollbar{height:6px}.main-page .question_table::-webkit-scrollbar-thumb{background:linear-gradient(90deg,var(--hx-cyan),var(--hx-violet));border-radius:3px}.main-page .ai-config{display:grid;gap:8px;margin:0 0 10px}.main-page .ai-config .el-select,.main-page .ai-config .el-input{width:100%}.main-page .answer-result{word-break:break-word}"); // -- panel window hard lock: width 310 (cardWidth const) x height PANEL_HEIGHT -- // Overflow goes INSIDE the panel (body scrolls vertically, question_table scrolls horizontally). // The :has() guard releases the fixed height while minimized, so the 35px minimized bar still works. LAYOUT_CSS_PARTS.push( "\n/* ==== panel window hard lock: 310 wide x 500 tall (bg image fills it exactly) ==== */" + "\n.main-page .el-card{display:flex;flex-direction:column;box-sizing:border-box;width:" + DEFAULT_CARD_WIDTH + ";height:" + PANEL_HEIGHT + "px;max-height:calc(100vh - 24px);overflow:hidden}" + "\n.main-page .el-card__body{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}" + "\n.main-page .card_content{box-sizing:border-box;max-width:100%}" + "\n.main-page .el-card:has(.card_content[style*='display: none']),.main-page .el-card:has(.card_content[style*='display:none']){height:auto;max-height:none;overflow:visible}" ); // ---- v0.5 UI: pinned hero / panes fill remaining space / no vertical scrollbar / centered ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.5 UI: pinned hero, fill panes, no vertical scrollbar, centered ==== */" + "\n.main-page .el-card__header{flex:0 0 auto;position:relative;z-index:3}" + "\n.main-page .el-card__body{flex:1 1 auto;min-height:0;overflow:hidden!important}" + "\n.main-page .card_content{display:flex;flex-direction:column;height:100%;min-height:0;margin:0 auto;box-sizing:border-box;max-width:100%}" + "\n.main-page .demo-tabs{display:flex!important;flex-direction:column;height:100%;min-height:0}" + "\n.main-page .demo-tabs>.el-tabs__header{flex:0 0 auto;margin:0 0 8px!important}" + "\n.main-page .demo-tabs>.el-tabs__content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:0!important}" + "\n.main-page .demo-tabs>.el-tabs__content>.el-tab-pane{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;padding:0 1px 2px 1px}" + "\n.main-page .el-tab-pane>.el-scrollbar,.main-page .el-tab-pane>.setting,.main-page .el-tab-pane>.guide-page,.main-page .el-tab-pane>.question_table{flex:1 1 auto;min-height:0}" + "\n.main-page .el-card__body,.main-page .el-tab-pane,.main-page .setting,.main-page .el-scrollbar__wrap{scrollbar-width:none}" + "\n.main-page .el-card__body::-webkit-scrollbar,.main-page .el-tab-pane::-webkit-scrollbar,.main-page .setting::-webkit-scrollbar,.main-page .script-home .el-scrollbar__wrap::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}" + "\n.main-page .el-scrollbar__bar.is-vertical{display:none!important}" + "\n.main-page .script-home{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding-top:2px}" + "\n.main-page .script-home>.el-scrollbar.log{flex:1 1 auto;min-height:0;max-height:none!important;height:auto!important}" + "\n.main-page .script-home .el-scrollbar__wrap{height:100%;overflow-x:hidden}" + "\n.main-page .script-home .el-scrollbar__view{padding:0 2px 2px 0}" + "\n.main-page .log-divider{margin:3px 0!important;opacity:.45}" + "\n.main-page .setting{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;gap:10px;padding:2px 1px 8px 1px;margin-top:0!important;font-size:12px}" + "\n.main-page .setting>div{flex:0 0 auto;display:flex;flex-direction:column;gap:8px;padding:10px 11px;border:1px solid var(--hx-line);border-radius:12px;background:var(--hx-glass);box-shadow:0 6px 18px rgba(2,8,24,.26);backdrop-filter:blur(10px) saturate(140%);-webkit-backdrop-filter:blur(10px) saturate(140%)}" + "\n.main-page .setting .el-divider{margin:0!important;background:transparent!important;border-top:1px solid var(--hx-line)!important}" + "\n.main-page .setting-section-title{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--hx-cyan)!important;letter-spacing:.4px}" + "\n.main-page .setting-section-title:before{content:'';width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--hx-cyan),var(--hx-violet));box-shadow:0 0 8px rgba(56,226,255,.6)}" + "\n.main-page .setting-checkbox{display:flex;align-items:center;height:28px;margin:0!important;padding:0 9px;border:1px solid var(--hx-line);border-radius:9px;background:rgba(6,14,30,.42);transition:border-color .2s,background .2s}" + "\n.main-page .setting-checkbox:hover{border-color:rgba(56,226,255,.42);background:rgba(56,226,255,.08)}" + "\n.main-page .setting .el-checkbox__label{font-size:12px;color:var(--hx-ink)!important}" + "\n.main-page .setting .el-form-item.setting-switch{display:flex!important;align-items:center;justify-content:space-between;gap:8px;height:28px;margin:0!important;padding:0 9px;border:1px solid var(--hx-line);border-radius:9px;background:rgba(6,14,30,.42);transition:border-color .2s,background .2s}" + "\n.main-page .setting .el-form-item.setting-switch:hover{border-color:rgba(56,226,255,.42);background:rgba(56,226,255,.08)}" + "\n.main-page .setting .el-form-item.setting-switch>.el-form-item__label{flex:1 1 auto;min-width:0;margin:0!important;padding:0!important;font-size:12px;line-height:1.3;color:var(--hx-ink)!important;text-align:left;justify-content:flex-start}" + "\n.main-page .setting .el-form-item.setting-switch>.el-form-item__content{flex:0 0 auto;margin-left:auto!important;display:flex;justify-content:flex-end;align-items:center;min-width:0;line-height:1}" + "\n.main-page .setting .el-form-item.setting-switch .el-form-item__error{display:none}" + "\n.main-page .setting .el-switch{--el-switch-on-color:var(--hx-cyan,#38e2ff);--el-switch-off-color:rgba(255,255,255,.12)}" + "\n.main-page .setting .el-switch .el-switch__core{border-color:rgba(120,190,255,.30)}" + "\n.main-page .setting .el-switch.is-checked .el-switch__core{border-color:transparent}" + "\n.main-page .setting .el-switch.is-checked .el-switch__core .el-switch__action{color:var(--hx-cyan,#38e2ff)}" + "\n.main-page .usage-bar{flex:0 0 auto!important;margin-top:6px!important;padding:7px 9px 8px!important;border:1px solid var(--hx-line);border-radius:11px;background:linear-gradient(135deg,rgba(18,32,62,.52),rgba(12,22,44,.34));box-shadow:0 3px 10px rgba(2,8,24,.18);box-sizing:border-box;max-width:100%}" + "\n.main-page .usage-main{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}" + "\n.main-page .usage-cell{display:flex;align-items:baseline;justify-content:space-between;gap:4px;min-width:0;padding:3px 6px;border-radius:8px;background:rgba(255,255,255,.045);border:1px solid rgba(120,190,255,.13)}" + "\n.main-page .usage-cell__k{flex:0 0 auto;font-size:10px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap}" + "\n.main-page .usage-cell__v{flex:1 1 auto;min-width:0;text-align:right;font-size:11.5px;line-height:15px;font-weight:600;color:var(--hx-cyan);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}" + "\n.main-page .usage-sub{display:flex;align-items:center;justify-content:flex-start;gap:6px;margin-top:5px;padding:0 2px}" + "\n.main-page .usage-tag{flex:0 0 auto;padding:1px 7px;border-radius:20px;font-size:10px;line-height:15px;border:1px solid;white-space:nowrap}" + "\n.main-page .usage-tag.is-peak{color:#ffc46b;border-color:rgba(255,196,107,.38);background:rgba(255,196,107,.10)}" + "\n.main-page .usage-tag.is-off{color:#4ade80;border-color:rgba(74,222,128,.34);background:rgba(74,222,128,.10)}" + "\n.main-page .usage-rate{flex:0 0 auto;font-size:10.5px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap}" + "\n.main-page .setting .el-form-item{display:flex;align-items:center;margin:0!important}" + "\n.main-page .setting .el-form-item__label{flex:1 1 auto;justify-content:flex-start!important;height:auto!important;line-height:1.5!important;padding:0!important;color:var(--hx-ink-dim)!important;font-size:12px}" + "\n.main-page .setting .el-form-item__content{flex:0 0 auto;margin-left:8px!important}" + "\n.main-page .setting .el-input-number{width:112px!important}" + "\n.main-page .whale-page{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:8px;padding:2px 1px 0 1px;box-sizing:border-box;max-width:100%}" + "\n.main-page .whale-page>.question_table{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}" + "\n.main-page .whale-page>.usage-bar{margin-top:0!important}" + "\n.main-page .whale-hero{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;box-sizing:border-box;max-width:100%}" + "\n.main-page .whale-hero__avatar{display:block;width:44px;height:44px;object-fit:contain;border-radius:18px;background:radial-gradient(circle at 50% 40%,rgba(56,226,255,.16),rgba(6,14,30,.30));border:1px solid rgba(56,226,255,.24);box-shadow:0 4px 14px rgba(2,8,24,.30);transition:width .34s cubic-bezier(.34,1.24,.64,1),height .34s cubic-bezier(.34,1.24,.64,1),border-radius .34s ease}" + "\n.main-page .whale-hero__bubble{display:inline-flex;align-items:center;gap:6px;padding:2px 11px;border:1px solid var(--hx-line);border-radius:20px;background:var(--hx-glass);box-shadow:0 4px 14px rgba(2,8,24,.22);max-width:100%;box-sizing:border-box}" + "\n.main-page .whale-hero__text{font-size:12px;line-height:1.6;color:var(--hx-ink-dim);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:font-size .34s ease}" + "\n.main-page .whale-hero.is-idle{flex:1 1 auto;min-height:0;gap:14px;padding:4px 0 16px}" + "\n.main-page .whale-hero.is-idle .whale-hero__avatar{width:132px;height:132px;border-radius:20px}" + "\n.main-page .whale-hero.is-idle .whale-hero__bubble{padding:4px 14px}" + "\n.main-page .whale-hero.is-idle .whale-hero__text{font-size:14px;color:var(--hx-ink)}" + "\n.main-page .whale-hero.is-busy{flex-direction:row;gap:9px;padding:2px 2px 0}" + "\n.main-page .whale-hero.is-busy .whale-hero__avatar{animation:hxWhaleBreath 2.4s ease-in-out infinite}" + "\n.main-page .whale-hero.is-busy .whale-hero__bubble{border-color:rgba(56,226,255,.26);background:rgba(56,226,255,.07)}" + "\n.main-page .whale-hero.is-busy .whale-hero__text{color:var(--hx-cyan)}" + "\n.main-page .whale-hero.is-busy .whale-hero__text:after{content:'';display:inline-block;width:1.1em;text-align:left;animation:hxWhaleDots 1.6s steps(1,end) infinite}" + "\n@keyframes hxWhaleBreath{0%,100%{transform:scale(1);box-shadow:0 4px 14px rgba(2,8,24,.30)}50%{transform:scale(1.07);box-shadow:0 4px 18px rgba(56,226,255,.34)}}" + "\n@keyframes hxWhaleDots{0%{content:''}25%{content:'.'}50%{content:'..'}75%{content:'...'}}" + "\n@media (prefers-reduced-motion:reduce){.main-page .whale-hero.is-busy .whale-hero__avatar,.main-page .whale-hero.is-busy .whale-hero__text:after{animation:none}}" + "\n.main-page .setting .el-form-item.setting-ai-field{display:flex!important;align-items:center;gap:8px}" + "\n.main-page .setting .el-form-item.setting-ai-field>.el-form-item__label{flex:0 0 54px;justify-content:flex-start!important;font-size:12px;color:var(--hx-ink-dim)!important}" + "\n.main-page .setting .el-form-item.setting-ai-field>.el-form-item__content{flex:1 1 auto;min-width:0;margin-left:0!important;display:flex}" + "\n.main-page .setting .el-form-item.setting-ai-field .el-input,.main-page .setting .el-form-item.setting-ai-field .el-select{width:100%!important}" + "\n.main-page .setting>div.setting-ai{border-color:rgba(56,226,255,.24)}" + "\n.main-page .guide-page{max-height:none!important}" + "\n.main-page .answer-legend{justify-content:center!important}" + "\n.main-page .ai-config .el-select,.main-page .ai-config .el-input{justify-self:center;width:100%!important}" + "\n/* ================= 首页通知(日志)卡片化 ================= */" + "\n.main-page .script-home .el-scrollbar__view>div{position:relative;margin:0 0 6px;padding:7px 9px 8px;border:1px solid var(--hx-line);border-radius:10px;background:linear-gradient(135deg,rgba(18,32,62,.62),rgba(12,22,44,.40));box-shadow:0 4px 14px rgba(2,8,24,.22);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);transition:border-color .18s,background .18s}" + "\n.main-page .script-home .el-scrollbar__view>div:hover{border-color:rgba(56,226,255,.40);background:linear-gradient(135deg,rgba(22,40,74,.66),rgba(14,26,52,.46))}" + "\n.main-page .script-home .el-scrollbar__view>div:last-child{margin-bottom:0}" + "\n.main-page .script-home .el-text{display:inline;vertical-align:baseline}" + "\n.main-page .script-home .log-time{display:block;margin:0 0 3px;font-size:10.5px;line-height:1.4;letter-spacing:.5px;font-variant-numeric:tabular-nums;color:#7089a8!important;text-shadow:none}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text:not(.log-time){display:block;padding-left:9px;border-left:3px solid var(--hx-blue);border-radius:2px;font-size:12px;line-height:1.62;letter-spacing:.1px;overflow-wrap:anywhere;word-break:break-word;transition:border-color .18s}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text--primary{border-left-color:var(--hx-cyan);color:#d6e6ff!important}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text--success{border-left-color:#4ade80;color:#86efac!important}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text--warning{border-left-color:#ffc46b;color:#ffd79a!important}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text--danger{border-left-color:#ff7a7a;color:#ffb0b0!important}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text--info{border-left-color:#7f96b8;color:var(--hx-ink-dim)!important}" + "\n.main-page .script-home .log-divider{display:none!important;margin:0!important;height:0!important;border:none!important}" + "\n.main-page .script-home .log-action-link{display:inline-block;margin-left:3px;padding:0 7px;border:1px solid rgba(56,226,255,.45);border-radius:20px;color:var(--hx-cyan)!important;font-size:11px;line-height:17px;text-decoration:none;background:rgba(56,226,255,.10);transition:background .18s,color .18s}" + "\n.main-page .script-home .log-action-link:hover{background:rgba(56,226,255,.24);color:#fff!important}" + "\n/* ================= 答题页美化 ================= */" + "\n.main-page .ai-config{display:grid;grid-template-columns:1fr;gap:6px;padding:9px 10px!important;margin-bottom:8px}" + "\n.main-page .answer-legend{display:flex;flex-wrap:wrap;gap:6px;justify-content:center!important;margin:0 0 8px;padding:7px 8px;border:1px solid var(--hx-line);border-radius:10px;background:rgba(6,14,30,.42)}" + "\n.main-page .answer-legend>span{position:relative;padding:1px 8px 1px 16px;border-radius:20px;font-size:10.5px;line-height:17px;white-space:nowrap;background:rgba(255,255,255,.05);border:1px solid rgba(120,190,255,.16)}" + "\n.main-page .answer-legend>span:before{content:\'\';position:absolute;left:6px;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}" + "\n.main-page .answer-legend>.answer-result--success{color:#4ade80!important;border-color:rgba(74,222,128,.34)}" + "\n.main-page .answer-legend>.answer-result--searching{color:var(--hx-cyan)!important;border-color:rgba(56,226,255,.34)}" + "\n.main-page .answer-legend>.answer-result--error{color:#ff8a8a!important;border-color:rgba(255,138,138,.34)}" + "\n.main-page .question_table{border:1px solid var(--hx-line);border-radius:12px;background:rgba(8,16,34,.30);padding:0 0 2px}" + "\n.main-page .question-list{border-radius:12px;overflow:hidden}" + "\n.main-page .question-list .el-table__cell{padding:6px 8px!important;font-size:11.5px;line-height:1.6}" + "\n.main-page .question-list th.el-table__cell{position:sticky;top:0;z-index:2;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}" + "\n.main-page .question-list .cell{overflow-wrap:anywhere;word-break:break-word}" + "\n.main-page .answer-result{display:inline-block;font-size:11.5px;line-height:1.6}" + "\n.main-page .answer-result--searching{animation:hxPulse 1.4s ease-in-out infinite}" + "\n@keyframes hxPulse{0%,100%{opacity:.55}50%{opacity:1}}" + "\n/* ================= 协议页:底部署名 ================= */" + "\n.main-page .guide-page{padding-bottom:10px!important}" + "\n/* ===== 协议页署名:吸底常驻,永远不被折叠线挡住 ===== */" + "\n.main-page .guide-page{display:flex!important;flex-direction:column!important;padding-bottom:0!important}" + "\n.main-page .guide-page>.guide-list{flex:0 0 auto;padding-bottom:6px!important}" + "\n.main-page .guide-footer{position:static!important;flex:0 0 auto;margin:10px 0 0!important;padding:9px 12px;border:1px solid var(--hx-line);border-radius:12px;background:linear-gradient(120deg,rgba(20,36,68,.62),rgba(28,20,60,.58));text-align:center;box-shadow:0 6px 18px rgba(2,8,24,.24);backdrop-filter:blur(12px) saturate(140%);-webkit-backdrop-filter:blur(12px) saturate(140%)}" + "\n.main-page .guide-sign{margin:0;font-size:11.5px;line-height:1.7;letter-spacing:.3px;color:var(--hx-ink)!important}" + "\n.main-page .guide-sign strong{color:var(--hx-cyan)!important;font-weight:700;letter-spacing:.6px;text-shadow:0 0 12px rgba(56,226,255,.45)}" + "\n.main-page .guide-meta{margin:5px 0 0;font-size:10px;line-height:1.6;letter-spacing:.4px;color:var(--hx-ink-dim)!important;opacity:.9}" + "\n/* ===== 答题页:表格改卡片列表(题号+题目一行 / 答案下一行) ===== */" + "\n.main-page .question_table{overflow-x:hidden!important;overflow-y:auto!important;border:none!important;background:transparent!important;padding:0 1px 2px!important}" + "\n.main-page .answer-legend{position:sticky!important;top:0;z-index:4;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}" + "\n.main-page .question-list{width:auto!important;max-width:100%!important;border:none!important;background:transparent!important;overflow:visible!important;padding:0}" + "\n.main-page .question-card{position:relative;display:flex!important;flex-wrap:wrap!important;align-items:flex-start;margin:0 0 7px!important;padding:8px 10px 9px 12px!important;border:1px solid var(--hx-line);border-radius:11px;background:linear-gradient(135deg,rgba(18,32,62,.58),rgba(12,22,44,.38));box-shadow:0 3px 10px rgba(2,8,24,.20);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);transition:border-color .18s,background .18s}" + "\n.main-page .question-card:last-child{margin-bottom:0!important}" + "\n.main-page .question-card:hover{border-color:rgba(56,226,255,.40);background:linear-gradient(135deg,rgba(22,40,74,.62),rgba(14,26,52,.44))}" + "\n.main-page .question-card:before{content:\'\';position:absolute;left:5px;top:8px;bottom:8px;width:3px;border-radius:2px;background:var(--hx-blue);opacity:.8}" + "\n.main-page .question-index{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;margin-right:7px;padding:0 5px;border-radius:10px;background:linear-gradient(135deg,rgba(56,226,255,.24),rgba(155,107,255,.24));border:1px solid rgba(120,190,255,.22);color:#cfe9ff;font-size:10px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}" + "\n.main-page .question-title{flex:1 1 0;min-width:0;font-size:11.5px;line-height:1.62;color:var(--hx-ink)!important;overflow-wrap:anywhere;word-break:break-word}" + "\n.main-page .question-title img{max-width:100%!important;height:auto!important;border-radius:6px}" + "\n.main-page .question-card>.answer-result{flex:0 0 100%;width:100%;margin-top:6px!important;padding-top:6px!important;border-top:1px dashed rgba(120,190,255,.16);font-size:11.5px;line-height:1.65;overflow-wrap:anywhere;word-break:break-word}" + "\n.main-page .question-card>.answer-result:before{content:\'答案\';display:inline-block;margin-right:6px;padding:0 5px;border-radius:5px;background:rgba(56,226,255,.12);border:1px solid rgba(56,226,255,.26);color:var(--hx-cyan);font-size:10px;line-height:15px;vertical-align:1px}" + "\n/* ================= 鲁棒性 ================= */" + "\n.main-page .el-card{max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px)}" + "\n.main-page .el-tab-pane,.main-page .guide-page,.main-page .setting{-webkit-overflow-scrolling:touch}" + "\n/* ===== 首页:绝对定位撑满,消灭下方空白 ===== */" + "\n.main-page .el-tab-pane>.script-home{position:relative!important;flex:1 1 auto!important;min-height:0!important;display:block!important;height:auto!important;padding:0!important}" + "\n.main-page .script-home>.el-scrollbar{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;height:auto!important;max-height:none!important;width:auto!important;margin:0!important}" + "\n.main-page .script-home .el-scrollbar__wrap{height:100%!important;max-height:none!important;overflow-y:auto!important;overflow-x:hidden!important;box-sizing:border-box}" + "\n.main-page .script-home .el-scrollbar__view{min-height:100%;box-sizing:border-box;padding:0 2px 8px 0}" + "\n/* ===== 彻底隐藏滚动条(保留滚动能力)===== */" + "\n.main-page *{scrollbar-width:none!important;-ms-overflow-style:none!important}" + "\n.main-page *::-webkit-scrollbar{width:0!important;height:0!important;display:none!important;background:transparent!important}" + "\n.main-page *::-webkit-scrollbar-thumb,.main-page *::-webkit-scrollbar-track,.main-page *::-webkit-scrollbar-corner{display:none!important;background:transparent!important;border:none!important}" + "\n/* ===== 设置页:章节标题胶囊化 ===== */" + "\n.main-page .setting .el-divider--horizontal{height:auto!important;min-height:0!important;border-top:none!important;background:transparent!important;display:flex!important;align-items:center;margin:0!important;padding:1px 0 2px}" + "\n.main-page .setting .el-divider__text{position:static!important;left:auto!important;transform:none!important;background-color:transparent!important;background:transparent!important;padding:0!important;display:inline-flex!important}" + "\n.main-page .setting-section-title{display:inline-flex;align-items:center;gap:6px;padding:3px 11px 3px 8px;border:1px solid rgba(56,226,255,.30);border-radius:20px;background:rgba(56,226,255,.09);font-size:12px;font-weight:700;color:var(--hx-cyan)!important;letter-spacing:.6px;line-height:1.5;white-space:nowrap}" + "\n.main-page .setting>div>.el-divider--horizontal+.el-checkbox,.main-page .setting>div>.el-divider--horizontal+.el-form-item{margin-top:2px!important}" + "\n/* ===== 空状态:鲸娘图标 ===== */" + "\n.main-page .el-empty{padding:16px 0 12px!important}" + "\n.main-page .el-empty__image{width:108px!important;height:108px!important;opacity:.96;filter:drop-shadow(0 10px 24px rgba(56,226,255,.30))}" + "\n.main-page .el-empty__image img{width:100%!important;height:100%!important;object-fit:contain;border-radius:20px}" + "\n.main-page .el-empty__description{margin-top:10px!important}" + "\n.main-page .el-empty__description p{color:var(--hx-ink-dim)!important;font-size:12px;letter-spacing:.5px}" + "\n/* ===== 末轮收尾:统一盒模型,消除 1px 横向溢出 ===== */" + "\n.main-page .question_table,.main-page .question-list,.main-page .ai-config,.main-page .answer-legend,.main-page .guide-header,.main-page .guide-card,.main-page .guide-footer,.main-page .setting>div,.main-page .script-home .el-scrollbar__view>div{box-sizing:border-box!important;max-width:100%!important}" + "\n.main-page .el-tab-pane{overflow-x:hidden!important;box-sizing:border-box!important;max-width:100%!important}" + "\n.main-page .el-card__body,.main-page .card_content,.main-page .demo-tabs,.main-page .demo-tabs>.el-tabs__content{box-sizing:border-box!important;max-width:100%!important}" + "\n/* ===== 通知卡片紧凑化:时间内联成徽章,时间↔正文空档归零 ===== */" + "\n.main-page .script-home .el-scrollbar__view>div{position:relative;margin:0 0 5px!important;padding:6px 9px 7px 18px!important;border:1px solid var(--hx-line);border-radius:9px;background:linear-gradient(135deg,rgba(18,32,62,.62),rgba(12,22,44,.40));box-shadow:0 3px 10px rgba(2,8,24,.20);backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%);line-height:1.7;transition:border-color .18s,background .18s}" + "\n.main-page .script-home .el-scrollbar__view>div:before{content:\'\';position:absolute;left:7px;top:7px;bottom:7px;width:3px;border-radius:2px;background:var(--hx-blue);box-shadow:0 0 8px rgba(74,140,255,.5)}" + "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--primary:not(.log-time)):before{background:var(--hx-cyan);box-shadow:0 0 8px rgba(56,226,255,.55)}" + "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--success:not(.log-time)):before{background:#4ade80;box-shadow:0 0 8px rgba(74,222,128,.55)}" + "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--warning:not(.log-time)):before{background:#ffc46b;box-shadow:0 0 8px rgba(255,196,107,.55)}" + "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--danger:not(.log-time)):before{background:#ff7a7a;box-shadow:0 0 8px rgba(255,138,138,.55)}" + "\n.main-page .script-home .el-scrollbar__view>div:has(>.el-text--info:not(.log-time)):before{background:#7f96b8;box-shadow:none}" + "\n.main-page .script-home .log-time{display:inline!important;margin:0 5px 0 0!important;padding:1px 5px;border-radius:5px;background:rgba(120,190,255,.10);font-size:9.5px!important;line-height:1.5!important;letter-spacing:.3px;color:#7f9ab8!important;font-variant-numeric:tabular-nums;vertical-align:1px;white-space:nowrap}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text:not(.log-time){display:inline!important;padding:0!important;border:none!important;font-size:12px;line-height:1.7;letter-spacing:.1px;overflow-wrap:anywhere;word-break:break-word;vertical-align:baseline}" + "\n.main-page .script-home .el-scrollbar__view>div>.el-text[class=\"el-text\"]{display:none!important}" + "\n/* ===== 答题页空状态:图标放大 + 空白区垂直居中 ===== */" + "\n.main-page .el-tab-pane>div:has(>.el-empty){flex:1 1 auto!important;min-height:0!important;display:flex!important;flex-direction:column;align-items:center;justify-content:center;width:100%!important;box-sizing:border-box!important;padding-bottom:34px!important}" + "\n.main-page .el-empty{display:flex!important;flex-direction:column;align-items:center;justify-content:center;width:100%!important;padding:0!important;margin:0!important;box-sizing:border-box!important}" + "\n.main-page .el-empty__image{width:132px!important;height:132px!important;margin:0 auto!important}" + "\n.main-page .el-empty__description{margin-top:12px!important;width:100%!important;text-align:center!important}" + "\n.main-page .el-empty__description p{text-align:center!important;font-size:12.5px!important}" ); // ---- v0.4.11 液态玻璃(Liquid Glass):悬浮胶囊 + 双态(静止 / 交互·吸顶滚动)---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11 liquid glass ==== */" + "\n.main-page{--lg-rim:rgba(255,255,255,.30);--lg-rim-dim:rgba(255,255,255,.14);--lg-edge:rgba(140,200,255,.22);--lg-tint-hi:linear-gradient(155deg,rgba(255,255,255,.20),rgba(255,255,255,.07) 34%,rgba(10,22,46,.34) 100%);--lg-shadow-hi:0 12px 28px rgba(2,8,24,.42),0 0 20px rgba(56,226,255,.16),inset 0 1px 0 var(--lg-rim);--lg-t:background .28s ease,border-color .28s ease,box-shadow .28s ease,transform .28s cubic-bezier(.34,1.2,.64,1),backdrop-filter .28s ease,-webkit-backdrop-filter .28s ease,color .2s ease}" + "\n.main-page .demo-tabs>.el-tabs__header{overflow:visible!important;margin:0 0 9px!important}" + "\n.main-page .demo-tabs .el-tabs__nav-wrap{overflow:visible!important;border-bottom:none!important}" + "\n.main-page .demo-tabs .el-tabs__nav-wrap::after{display:none!important;height:0!important;background:none!important}" + "\n.main-page .demo-tabs .el-tabs__active-bar{display:none!important;opacity:0!important}" + "\n.main-page .demo-tabs .el-tabs__nav{display:flex!important;align-items:center;gap:4px;padding:3px;border:1px solid rgba(140,200,255,.14);border-radius:13px;background:linear-gradient(150deg,rgba(255,255,255,.06),rgba(8,18,38,.24));backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.12);transition:var(--lg-t)}" + "\n.main-page .demo-tabs .el-tabs__item{position:relative;height:28px!important;line-height:28px!important;padding:0 7px!important;border:1px solid transparent!important;border-radius:10px!important;background:transparent!important;color:var(--hx-ink-dim)!important;font-size:11.5px!important;font-weight:600!important;letter-spacing:.2px;overflow:visible!important;transition:var(--lg-t)}" + "\n.main-page .demo-tabs .el-tabs__item::before{content:'';position:absolute;inset:0;border-radius:9px;pointer-events:none;opacity:0;transition:opacity .28s ease;background:linear-gradient(160deg,rgba(255,255,255,.24),rgba(255,255,255,.05) 42%,transparent 74%)}" + "\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-ink)!important;background:rgba(255,255,255,.07)!important;transform:translateY(-1px);box-shadow:0 4px 12px rgba(2,8,24,.26),inset 0 1px 0 rgba(255,255,255,.22)}" + "\n.main-page .demo-tabs .el-tabs__item:hover::before{opacity:1}" + "\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important;background:var(--lg-tint-hi)!important;border-color:rgba(56,226,255,.32)!important;transform:translateY(-1px);box-shadow:var(--lg-shadow-hi)}" + "\n.main-page .demo-tabs .el-tabs__item.is-active::before{opacity:1}" + "\n.main-page .demo-tabs .el-tabs__nav-wrap::before{content:none!important;display:none!important}" + "\n.main-page .demo-tabs .el-tabs__item+.el-tabs__item{border-left:none!important;border-image:none!important;background-image:none!important}" + "\n.main-page .demo-tabs .el-tabs__nav-scroll{overflow:visible!important}" + "\n.main-page .demo-tabs .el-tabs__nav{border-left:none!important;border-right:none!important}" + "\n.main-page .el-card__header{background:linear-gradient(180deg,rgba(56,226,255,.07),rgba(155,107,255,.03) 58%,transparent)!important;border-bottom:none!important;padding:9px 9px 3px!important}" + "\n.main-page .card-header{gap:9px;padding:8px 11px!important;border:1px solid var(--lg-edge);border-radius:14px;background:linear-gradient(120deg,rgba(56,226,255,.14),rgba(74,140,255,.07) 46%,rgba(155,107,255,.14))!important;backdrop-filter:blur(12px) saturate(155%);-webkit-backdrop-filter:blur(12px) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.28),inset 0 1px 0 var(--lg-rim);transition:var(--lg-t)}" + "\n.main-page .card-header::after{display:none!important}" + "\n.main-page .card-header:hover{border-color:rgba(56,226,255,.34);box-shadow:var(--lg-shadow-hi)}" + "\n.main-page .card-header__logo{flex:none;width:24px;height:24px;border-radius:8px;object-fit:contain;background:radial-gradient(circle at 50% 42%,rgba(56,226,255,.20),rgba(6,14,30,.30));border:1px solid rgba(56,226,255,.26);box-shadow:0 2px 10px rgba(2,8,24,.32),inset 0 1px 0 rgba(255,255,255,.18);transition:var(--lg-t)}" + "\n.main-page .card-header:hover .card-header__logo{transform:scale(1.06) rotate(-2deg);box-shadow:0 3px 14px rgba(56,226,255,.26),inset 0 1px 0 rgba(255,255,255,.26)}" + "\n.main-page.is-scrolled .card-header{background:linear-gradient(120deg,rgba(56,226,255,.20),rgba(74,140,255,.12) 46%,rgba(155,107,255,.20))!important;box-shadow:0 10px 26px rgba(2,8,24,.42),inset 0 1px 0 var(--lg-rim)}" + "\n.main-page.is-scrolled .demo-tabs .el-tabs__nav{background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(8,18,38,.44));box-shadow:0 8px 22px rgba(2,8,24,.36),inset 0 1px 0 rgba(255,255,255,.18)}" + "\n.main-page .usage-bar{--lg-blur:14px;border:1px solid var(--lg-edge)!important;border-radius:14px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 40%,rgba(8,18,38,.28))!important;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.26),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}" + "\n.main-page .usage-main{gap:6px}" + "\n.main-page .usage-cell{border:none!important;border-radius:9px!important;background:linear-gradient(160deg,rgba(255,255,255,.075),rgba(255,255,255,.018) 58%,rgba(8,18,38,.20))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.14)!important;transition:var(--lg-t)}" + "\n.main-page .usage-cell:hover{background:var(--lg-tint-hi)!important;transform:translateY(-1px);box-shadow:var(--lg-shadow-hi)!important}" + "\n.main-page .usage-sub{gap:6px}" + "\n.main-page .usage-tag{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:var(--lg-t)}" + "\n.main-page .usage-tag:hover{transform:translateY(-1px)}" + "\n.main-page .whale-hero__bubble{border:1px solid var(--lg-edge)!important;background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(255,255,255,.025) 40%,rgba(8,18,38,.26))!important;backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);box-shadow:0 6px 18px rgba(2,8,24,.26),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}" + "\n.main-page .whale-hero.is-idle .whale-hero__bubble{padding:5px 15px}" + "\n.main-page .whale-hero__balance{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;transition:opacity .28s ease,transform .28s ease,height .28s ease}" + "\n.main-page .whale-hero.is-idle .whale-hero__balance{opacity:1;transform:none;margin-top:2px}" + "\n.main-page .whale-hero.is-busy .whale-hero__balance{opacity:0;transform:translateY(-4px);height:0;overflow:hidden;pointer-events:none}" + "\n.main-page .hero-balance{display:inline-flex;align-items:center;gap:7px;max-width:100%;padding:4px 12px;border:1px solid rgba(140,200,255,.22);border-radius:999px;background:linear-gradient(150deg,rgba(255,255,255,.12),rgba(255,255,255,.03) 38%,rgba(8,18,38,.30));backdrop-filter:blur(16px) saturate(155%);-webkit-backdrop-filter:blur(16px) saturate(155%);box-shadow:0 6px 18px rgba(2,8,24,.28),inset 0 1px 0 rgba(255,255,255,.22);font-size:11.5px;line-height:1.5;white-space:nowrap;cursor:pointer;transition:var(--lg-t)}" + "\n.main-page .hero-balance:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.38);box-shadow:var(--lg-shadow-hi)}" + "\n.main-page .hero-balance__k{font-size:10.5px;letter-spacing:.3px;color:var(--hx-ink-dim)}" + "\n.main-page .hero-balance__v{font-weight:700;font-variant-numeric:tabular-nums;color:var(--hx-cyan)}" + "\n.main-page .hero-balance__hint{font-size:10px;color:#ffc46b}" + "\n.main-page .hero-balance.is-low .hero-balance__v{color:#ffc46b}" + "\n.main-page .hero-balance.is-void .hero-balance__v,.main-page .hero-balance.is-err .hero-balance__v{color:var(--hx-ink-dim);font-weight:600}" + "\n.main-page .hero-balance.is-loading .hero-balance__v{animation:hxBalPulse 1.4s ease-in-out infinite}" + "\n@keyframes hxBalPulse{0%,100%{opacity:.45}50%{opacity:1}}" + "\n.main-page .setting>div{--lg-blur:18px;border:1px solid var(--lg-edge)!important;border-radius:14px!important;background:linear-gradient(155deg,rgba(255,255,255,.09),rgba(255,255,255,.022) 40%,rgba(8,18,38,.30))!important;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%);box-shadow:0 8px 22px rgba(2,8,24,.30),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}" + "\n.main-page .setting>div:hover{border-color:rgba(56,226,255,.34)!important;box-shadow:var(--lg-shadow-hi)!important;transform:translateY(-1px)}" + "\n.main-page .setting>div.setting-ai{--lg-blur:20px;border-color:rgba(56,226,255,.30)!important}" + "\n.main-page .guide-header{--lg-blur:16px;backdrop-filter:blur(var(--lg-blur)) saturate(155%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(155%)}" + "\n.main-page .guide-card{--lg-blur:12px;border:1px solid var(--lg-edge)!important;border-radius:12px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 42%,rgba(8,18,38,.26))!important;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);box-shadow:0 5px 16px rgba(2,8,24,.24),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}" + "\n.main-page .guide-card:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.40)!important;background:var(--lg-tint-hi)!important;box-shadow:var(--lg-shadow-hi)!important}" + "\n.main-page .script-home .el-scrollbar__view>div{--lg-blur:11px;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);transition:var(--lg-t)}" + "\n.main-page .script-home .el-scrollbar__view>div:hover{transform:translateX(1px);border-color:rgba(56,226,255,.34)!important}" + "\n.main-page .question-card{--lg-blur:15px;border:1px solid var(--lg-edge)!important;border-radius:12px!important;background:linear-gradient(155deg,rgba(255,255,255,.085),rgba(255,255,255,.02) 44%,rgba(8,18,38,.26))!important;backdrop-filter:blur(var(--lg-blur)) saturate(150%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(150%);box-shadow:0 5px 16px rgba(2,8,24,.24),inset 0 1px 0 var(--lg-rim-dim)!important;transition:var(--lg-t)}" + "\n.main-page .question-card:hover{transform:translateY(-1px);border-color:rgba(56,226,255,.38)!important;box-shadow:var(--lg-shadow-hi)!important}" + "\n.main-page .answer-legend{--lg-blur:10px;backdrop-filter:blur(var(--lg-blur)) saturate(145%);-webkit-backdrop-filter:blur(var(--lg-blur)) saturate(145%)}" + "\n@media (prefers-reduced-motion:reduce){.main-page .card-header,.main-page .demo-tabs .el-tabs__item,.main-page .usage-cell,.main-page .hero-balance,.main-page .setting>div,.main-page .guide-card,.main-page .question-card{transition-duration:.01ms}}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11-a(上一轮): hero 作答态修复 + 标签独立胶囊 + 最小化美化 ==== */" + "\n/* --- A. 修复作答态(is-busy):余额块退出 flex 行宽预算,鲸娘图不再被挤出可视区 --- */" + "\n.main-page .whale-hero{position:relative}" + "\n.main-page .whale-hero__avatar{flex:0 0 auto}" + "\n.main-page .whale-hero__bubble{flex:0 1 auto;min-width:0}" + "\n.main-page .whale-hero__balance{transition:opacity .28s ease,transform .28s ease,height .28s ease,width .28s ease}" + "\n.main-page .whale-hero.is-busy .whale-hero__bubble{flex:0 1 auto;min-width:0}" + "\n.main-page .whale-hero.is-busy .whale-hero__balance{flex:0 0 0px;width:0;min-width:0;padding:0;margin:0;height:0;opacity:0;overflow:hidden;pointer-events:none;transform:translateY(-4px)}" + "\n/* --- B. 标签:移除外层 dock,每个标签自成液态玻璃胶囊,等宽均分 --- */" + "\n.main-page .demo-tabs>.el-tabs__header{overflow:visible!important;margin:0 0 9px!important}" + "\n.main-page .demo-tabs .el-tabs__nav-wrap{overflow:visible!important;border-bottom:none!important;padding:0!important}" + "\n.main-page .demo-tabs .el-tabs__nav-scroll{overflow:visible!important}" + "\n.main-page .demo-tabs .el-tabs__nav-prev,.main-page .demo-tabs .el-tabs__nav-next{display:none!important}" + "\n.main-page .demo-tabs .el-tabs__nav{display:flex!important;width:100%!important;align-items:stretch;gap:6px;padding:0!important;border:none!important;border-radius:0!important;background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;transform:none!important}" + "\n.main-page .demo-tabs .el-tabs__item{flex:1 1 0!important;min-width:0!important;display:flex!important;align-items:center;justify-content:center;height:30px!important;line-height:30px!important;padding:0 4px!important;border:1px solid rgba(140,200,255,.18)!important;border-radius:11px!important;background:linear-gradient(150deg,rgba(255,255,255,.075),rgba(255,255,255,.02) 46%,rgba(8,18,38,.26))!important;backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 3px 10px rgba(2,8,24,.20);color:var(--hx-ink-dim)!important;font-size:11.5px!important;font-weight:600!important;letter-spacing:.2px;overflow:hidden!important;transition:var(--lg-t)}" + "\n.main-page .demo-tabs .el-tabs__item::before{display:none!important}" + "\n.main-page .demo-tabs .el-tabs__item:hover{color:var(--hx-ink)!important;border-color:rgba(140,200,255,.34)!important;background:linear-gradient(150deg,rgba(255,255,255,.14),rgba(255,255,255,.04) 46%,rgba(8,18,38,.30))!important;transform:translateY(-2px);box-shadow:0 6px 16px rgba(2,8,24,.30),inset 0 1px 0 rgba(255,255,255,.24)}" + "\n.main-page .demo-tabs .el-tabs__item.is-active{color:#fff!important;border-color:rgba(56,226,255,.46)!important;background:linear-gradient(155deg,rgba(56,226,255,.26),rgba(74,140,255,.14) 44%,rgba(155,107,255,.22))!important;transform:translateY(-2px);text-shadow:0 0 12px rgba(56,226,255,.65);box-shadow:0 6px 18px rgba(2,8,24,.40),0 0 18px rgba(56,226,255,.36),inset 0 1px 0 rgba(255,255,255,.34)!important;animation:hxTabGlow 2.8s ease-in-out infinite}" + "\n@keyframes hxTabGlow{0%,100%{box-shadow:0 6px 18px rgba(2,8,24,.40),0 0 18px rgba(56,226,255,.34),inset 0 1px 0 rgba(255,255,255,.34)}50%{box-shadow:0 8px 22px rgba(2,8,24,.46),0 0 30px rgba(56,226,255,.62),inset 0 1px 0 rgba(255,255,255,.42)}}" + "\n/* --- C. 标题栏的两个按钮各自一枚玻璃胶囊 --- */" + "\n.main-page .card-header .zoom-icon{display:inline-flex!important;align-items:center;justify-content:center;width:22px;height:22px;border-radius:8px;border:1px solid rgba(140,200,255,.20)!important;background:linear-gradient(150deg,rgba(255,255,255,.10),rgba(255,255,255,.02) 46%,rgba(8,18,38,.26))!important;backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.16),0 2px 8px rgba(2,8,24,.22);color:var(--hx-ink-dim)!important;transition:var(--lg-t)}" + "\n.main-page .card-header .zoom-icon+.zoom-icon{margin-left:7px}" + "\n.main-page .card-header .zoom-icon:hover{color:var(--hx-cyan)!important;border-color:rgba(56,226,255,.44)!important;background:linear-gradient(150deg,rgba(56,226,255,.18),rgba(56,226,255,.05) 46%,rgba(8,18,38,.28))!important;transform:translateY(-1px) scale(1.05);box-shadow:0 0 16px rgba(56,226,255,.38),inset 0 1px 0 rgba(255,255,255,.30)}" + "\n.main-page .card-header .zoom-icon:active{transform:translateY(0) scale(.94)}" + "\n/* --- D. 最小化态美化:整条做成悬浮发光胶囊,标题居中,副提示同材质 --- */" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .el-card__header{padding:0!important;background:none!important;border-bottom:none!important}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header{padding:7px 9px!important;border-radius:14px;border:1px solid rgba(56,226,255,.34)!important;background:linear-gradient(120deg,rgba(56,226,255,.26),rgba(74,140,255,.14) 46%,rgba(155,107,255,.26))!important;backdrop-filter:blur(18px) saturate(165%);-webkit-backdrop-filter:blur(18px) saturate(165%);animation:hxMiniGlow 3.2s ease-in-out infinite}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title{flex:1 1 auto;justify-content:center}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title span{font-size:13px;letter-spacing:.9px}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header__logo{width:22px;height:22px}" + "\n.main-page .minus{display:flex;align-items:center;justify-content:center;padding:7px 10px 9px!important;color:var(--hx-ink-dim)!important}" + "\n.main-page .minus .el-text{font-size:11px!important;letter-spacing:.4px;opacity:.94}" + "\n.main-page .minus .compact-divider{display:none!important}" + "\n@keyframes hxMiniGlow{0%,100%{box-shadow:0 10px 26px rgba(2,8,24,.46),0 0 18px rgba(56,226,255,.18),inset 0 1px 0 rgba(255,255,255,.28)}50%{box-shadow:0 12px 30px rgba(2,8,24,.52),0 0 30px rgba(56,226,255,.36),inset 0 1px 0 rgba(255,255,255,.36)}}" + "\n@media (prefers-reduced-motion:reduce){.main-page .demo-tabs .el-tabs__item.is-active,.main-page .el-card:has(.card_content[style*='display: none']) .card-header{animation:none}}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11-b : 标签只发光不上浮 + 全局渐隐渐入 + 最小化不跳变 + 状态灯 ==== */" + "\n/* --- A. 标签取消全部位移,只留发光;光晕向下偏置,避开卡片上边缘裁切 --- */" + "\n.main-page .demo-tabs .el-tabs__item:hover," + "\n.main-page .demo-tabs .el-tabs__item.is-active," + "\n.main-page .demo-tabs .el-tabs__item:active{transform:none!important}" + "\n.main-page .demo-tabs .el-tabs__item{will-change:box-shadow,background-color,border-color}" + "\n.main-page .demo-tabs .el-tabs__item:hover{border-color:rgba(56,226,255,.40)!important;box-shadow:0 3px 14px rgba(56,226,255,.32),inset 0 1px 0 rgba(255,255,255,.26)!important}" + "\n/* --- B. 标签行独占层叠层:发光不被遮住,也永不越界压到上方元素 --- */" + "\n.main-page .demo-tabs>.el-tabs__header{position:relative;z-index:2;isolation:isolate}" + "\n.main-page .demo-tabs .el-tabs__nav-wrap," + "\n.main-page .demo-tabs .el-tabs__nav-scroll," + "\n.main-page .demo-tabs .el-tabs__nav{position:relative;z-index:1}" + "\n/* --- C. 页面(标签页)切换:渐隐渐入 --- */" + "\n.main-page .demo-tabs .el-tabs__content{position:relative}" + "\n.main-page .demo-tabs .el-tab-pane{animation:hxPaneIn .34s cubic-bezier(.22,1,.36,1) backwards}" + "\n@keyframes hxPaneIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}" + "\n/* --- D. 内容入场动效:题目卡逐条浮现 / 日志滑入 / 配置与教程卡浮现 --- */" + "\n.main-page .question-card{animation:hxCardIn .34s cubic-bezier(.22,1,.36,1) backwards}" + "\n.main-page .question-card:nth-child(2){animation-delay:.05s}" + "\n.main-page .question-card:nth-child(3){animation-delay:.1s}" + "\n.main-page .question-card:nth-child(4){animation-delay:.15s}" + "\n.main-page .question-card:nth-child(n+5){animation-delay:.2s}" + "\n.main-page .el-timeline-item{animation:hxLogIn .3s ease backwards}" + "\n.main-page .setting>div,.main-page .guide-card{animation:hxCardIn .32s cubic-bezier(.22,1,.36,1) backwards}" + "\n@keyframes hxCardIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}" + "\n@keyframes hxLogIn{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}" + "\n/* --- E. 空闲态鲸娘轻浮动,给静止画面一点呼吸感 --- */" + "\n.main-page .whale-hero.is-idle .whale-hero__avatar{animation:hxIdleFloat 4.6s ease-in-out infinite}" + "\n@keyframes hxIdleFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}" + "\n/* --- F. 最小化:几何尺寸与常态完全一致,只叠一层柔光(去掉脉冲,避免生硬) --- */" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .el-card__header{padding:9px 9px 3px!important;background:linear-gradient(180deg,rgba(56,226,255,.07),rgba(155,107,255,.03) 58%,transparent)!important;border-bottom:none!important}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header{padding:8px 11px!important;border:1px solid rgba(56,226,255,.30)!important;background:linear-gradient(120deg,rgba(56,226,255,.20),rgba(74,140,255,.10) 48%,rgba(155,107,255,.20))!important;box-shadow:0 8px 22px rgba(2,8,24,.34),0 0 14px rgba(56,226,255,.20),inset 0 1px 0 rgba(255,255,255,.22);animation:none!important}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title{flex:0 1 auto;justify-content:flex-start}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header .title span{font-size:14px;letter-spacing:.4px}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .card-header__logo{width:24px;height:24px}" + "\n.main-page .minus{display:none!important}" + "\n/* --- G. 最小化状态灯:绿=运行中 / 黄=答题中 / 红=终止(发光浮动) --- */" + "\n.main-page .hx-status-dot{display:none;flex:0 0 auto;width:7px;height:7px;border-radius:50%;position:relative;background:currentColor;color:#4ade80}" + "\n.main-page .el-card:has(.card_content[style*='display: none']) .hx-status-dot{display:block;animation:hxDotPulse 1.8s ease-in-out infinite}" + "\n.main-page .hx-status-dot[data-hx-status='run']{color:#4ade80;box-shadow:0 0 9px 1px rgba(74,222,128,.85)}" + "\n.main-page .hx-status-dot[data-hx-status='busy']{color:#ffc857;box-shadow:0 0 9px 1px rgba(255,200,87,.90)}" + "\n.main-page .hx-status-dot[data-hx-status='stop']{color:#ff6b6b;box-shadow:0 0 9px 1px rgba(255,107,107,.90)}" + "\n.main-page .hx-status-dot::after{content:'';position:absolute;inset:-3px;border-radius:50%;background:currentColor;opacity:0;animation:hxDotHalo 1.8s ease-out infinite}" + "\n@keyframes hxDotPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.22);opacity:.78}}" + "\n@keyframes hxDotHalo{0%{transform:scale(.6);opacity:.34}70%{transform:scale(1.7);opacity:0}100%{transform:scale(1.7);opacity:0}}" + "\n/* --- H. 偏好无动效时全部关闭 --- */" + "\n@media (prefers-reduced-motion:reduce){.main-page .demo-tabs .el-tab-pane,.main-page .question-card,.main-page .el-timeline-item,.main-page .setting>div,.main-page .guide-card,.main-page .whale-hero.is-idle .whale-hero__avatar,.main-page .hx-status-dot,.main-page .hx-status-dot::after{animation:none!important}}" + "\n/* --- I. 最小化高度平滑过渡(用实测标题栏高度,尺寸与常态严丝合缝) --- */" + "\n.main-page .el-card{transition:height .32s cubic-bezier(.22,1,.36,1)}" + "\n.main-page .el-card:has(.card_content[style*='display: none']){height:var(--hx-min-h,52px);overflow:hidden}" + "\n.main-page .el-card:has(.card_content[style*='display:none']){height:var(--hx-min-h,52px);overflow:hidden}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11-c : 背景脉动光 + 鲸娘浮动与光晕 + 空闲文案随机 ==== */" + "\n/* --- A. 背景板:自上而下的低频脉动光带(置于全部内容之下,不吃点击、不越界) --- */" + "\n.main-page{isolation:isolate}" + "\n.main-page .el-card{background:transparent!important;backdrop-filter:blur(20px) saturate(156%)!important;-webkit-backdrop-filter:blur(20px) saturate(156%)!important}\n.main-page .el-card::before{content:'';position:absolute;inset:-16px;z-index:0;pointer-events:none;background-image:var(--hx-bg);background-position:center;background-size:310px 500px;background-repeat:no-repeat;filter:blur(16px) saturate(142%);animation:hxBgBreathe 13s ease-in-out infinite}\n.main-page .el-card__body::after{content:'';position:absolute;inset:0;z-index:0;pointer-events:none;border-radius:inherit;background-image:linear-gradient(180deg,rgba(56,226,255,0) 0%,rgba(56,226,255,.58) 13%,rgba(155,107,255,.52) 25%,rgba(56,226,255,0) 43%);background-size:100% 260%;background-repeat:no-repeat;background-position:50% 50%;animation:hxBgSweep 11s cubic-bezier(.45,0,.55,1) infinite}" + "\n@keyframes hxBgSweep{0%{background-position:50% 58%;opacity:0}9%{opacity:.92}50%{opacity:1}100%{background-position:50% -58%;opacity:0}}" + "\n.main-page .el-card__body::before{background:linear-gradient(180deg,rgba(8,16,36,.28) 0%,rgba(10,20,44,.44) 45%,rgba(8,16,36,.56) 100%)!important}" + "\n@keyframes hxBgBreathe{0%,100%{opacity:.54}50%{opacity:.80}}" + "\n/* --- B. 鲸娘区:双色随相光团(一青一紫,错相呼吸),只在鲸娘周围变化 --- */" + "\n.main-page .whale-hero{isolation:isolate}" + "\n.main-page .whale-hero::before{content:'';position:absolute;left:50%;top:50%;width:212px;height:212px;margin:-106px 0 0 -106px;border-radius:50%;z-index:-1;pointer-events:none;background:radial-gradient(circle,rgba(56,226,255,.30),rgba(56,226,255,.10) 44%,rgba(56,226,255,0) 72%);animation:hxHeroGlowA 7.6s ease-in-out infinite}" + "\n.main-page .whale-hero::after{content:'';position:absolute;left:50%;top:50%;width:252px;height:252px;margin:-126px 0 0 -126px;border-radius:50%;z-index:-1;pointer-events:none;background:radial-gradient(circle,rgba(155,107,255,.34),rgba(155,107,255,.12) 46%,rgba(155,107,255,0) 74%);opacity:0;animation:hxHeroGlowB 9.4s ease-in-out infinite}" + "\n@keyframes hxHeroGlowA{0%,100%{opacity:.30;transform:scale(.90)}50%{opacity:.95;transform:scale(1.06)}}" + "\n@keyframes hxHeroGlowB{0%,100%{opacity:0;transform:scale(.84)}48%{opacity:.88;transform:scale(1.04)}}" + "\n/* --- C. 鲸娘图:浮动 + 随相变色光晕(filter 光晕不受 box-shadow !important 影响) --- */" + "\n.main-page .whale-hero__avatar{will-change:transform,filter}" + "\n.main-page .whale-hero.is-idle .whale-hero__avatar{animation:hxIdleFloat 5.2s ease-in-out infinite,hxWhaleAura 4.4s ease-in-out infinite}" + "\n.main-page .whale-hero.is-busy .whale-hero__avatar{animation:hxWhaleBreath 2.4s ease-in-out infinite,hxWhaleAura 4.4s ease-in-out infinite}" + "\n@keyframes hxWhaleAura{0%,100%{filter:drop-shadow(0 3px 9px rgba(56,226,255,.45))}50%{filter:drop-shadow(0 7px 18px rgba(155,107,255,.70))}}" + "\n/* --- D. 空闲文案轮换时的入场(渐显 + 轻抬) --- */" + "\n.main-page .whale-hero__text.hx-line-in{animation:hxLineIn .52s cubic-bezier(.22,1,.36,1)}" + "\n@keyframes hxLineIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}" + "\n/* --- E. 偏好无动效时全部关闭 --- */" + "\n@media (prefers-reduced-motion:reduce){.main-page .el-card::before,.main-page .el-card__body::after,.main-page .whale-hero::before,.main-page .whale-hero::after,.main-page .whale-hero__avatar,.main-page .whale-hero__text{animation:none!important}}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11-d : 可见光带 + 玻璃化 + 小名 + 运行时长 + 自动路由 ==== */" + "\n.main-page .usage-uptime{margin-left:auto;flex:0 0 auto;padding:1px 8px;border:1px solid var(--hx-line);border-radius:20px;background:rgba(255,255,255,.05);font-size:10.5px;line-height:15px;color:var(--hx-ink-dim);white-space:nowrap;font-variant-numeric:tabular-nums}" + "\n.main-page .setting>div.setting-ai .el-form-item.setting-pet-field>.el-form-item__label{flex:0 0 54px}" + "\n.main-page .el-card{box-shadow:0 18px 48px rgba(2,8,24,.42),0 0 0 1px rgba(140,200,255,.14) inset!important}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11 : 好感度面板(累计花费分级解锁语录)==== */" + "\n.main-page .setting-fav-field{margin:2px 0 8px;padding:8px 10px 9px;border:1px solid rgba(140,200,255,.20);border-radius:12px;background:linear-gradient(160deg,rgba(56,226,255,.09),rgba(155,107,255,.07));backdrop-filter:blur(11px) saturate(140%);-webkit-backdrop-filter:blur(11px) saturate(140%);transition:border-color .28s ease,box-shadow .28s ease}" + "\n.main-page .setting-fav-field:hover{border-color:rgba(120,225,255,.42);box-shadow:0 6px 18px rgba(6,20,44,.30)}" + "\n.main-page .fav-head{display:flex;align-items:center;gap:6px;line-height:16px}" + "\n.main-page .fav-label{flex:0 0 auto;font-size:11px;font-weight:600;color:var(--hx-ink);letter-spacing:.4px}" + "\n.main-page .fav-lv{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;padding:1px 7px;border-radius:20px;border:1px solid rgba(120,225,255,.38);color:#8ce8ff;background:rgba(56,226,255,.10)}" + "\n.main-page .fav-info{margin-left:auto;flex:0 0 auto;width:15px;height:15px;padding:0;line-height:13px;text-align:center;font-size:10px;font-style:italic;font-weight:700;font-family:Georgia,serif;color:#9fd8ff;border:1px solid rgba(140,200,255,.45);border-radius:50%;background:rgba(255,255,255,.06);cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .24s ease,border-color .24s ease,box-shadow .24s ease}" + "\n.main-page .fav-info:hover{color:#fff;border-color:#8ce8ff;box-shadow:0 0 9px rgba(56,226,255,.55)}" + "\n.main-page .fav-bar{margin:7px 0 5px;height:5px;border-radius:20px;background:rgba(255,255,255,.09);overflow:hidden}" + "\n.main-page .fav-bar>i{display:block;height:100%;width:0;border-radius:20px;background:linear-gradient(90deg,#38e2ff,#9b6bff);box-shadow:0 0 8px rgba(56,226,255,.55);transition:width .5s cubic-bezier(.22,1,.36,1)}" + "\n.main-page .fav-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;line-height:14px;color:var(--hx-ink-dim);font-variant-numeric:tabular-nums}" + "\n.main-page .fav-meta>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}" + "\n.main-page .fav-note{display:none;margin-top:8px;padding-top:7px;border-top:1px dashed rgba(140,200,255,.22);font-size:10.2px;line-height:16px;color:var(--hx-ink-dim)}" + "\n.main-page .setting-fav-field.is-open .fav-note{display:block;animation:favNoteIn .3s ease both}" + "\n.main-page .fav-note b{color:#8ce8ff;font-weight:600}" + "\n.main-page .fav-note .fav-tiers{margin:5px 0 0;padding:0;list-style:none}" + "\n.main-page .fav-note .fav-tiers li{display:flex;gap:6px;line-height:15px}" + "\n.main-page .fav-note .fav-tiers li>span:first-child{flex:0 0 62px;color:#9fd8ff}" + "\n@keyframes favNoteIn{from{opacity:0}to{opacity:1}}" + "\n@media (prefers-reduced-motion: reduce){.main-page .fav-bar>i,.main-page .setting-fav-field{transition:none!important}.main-page .setting-fav-field.is-open .fav-note{animation:none!important}}" ); // ---- v0.4.11 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.11 · 本轮 : 液态玻璃边框 + 光晕 61.8% + 表单小胶囊 + 用量栏改版 ==== */" + "\n/* --- A. 卡座定位:此前 .el-card 没有 position,::before/::after 会挂到祖先盒上 --- */" + "\n.main-page .el-card{position:relative}" + "\n/* --- B. 边框液态玻璃:亮一档的 1px 描边 + 内侧上高光 + 外侧微辉 --- */" + "\n.main-page .el-card{border:1px solid rgba(152,206,255,.30)!important;box-shadow:0 18px 48px rgba(2,8,24,.46),0 0 26px rgba(56,226,255,.12),inset 0 1px 0 rgba(255,255,255,.22),inset 0 0 26px rgba(120,190,255,.07)!important}" + "\n.main-page .el-card::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:4;box-shadow:inset 0 0 0 1px rgba(255,255,255,.13),inset 0 1px 0 rgba(255,255,255,.20),inset 0 -1px 0 rgba(120,190,255,.12)}" + "\n/* --- C. 状态灯:色彩由 JS 写入,这里只补平滑过渡 --- */" + "\n.main-page .hx-status-dot{transition:color .3s ease,box-shadow .3s ease}" + "\n/* --- D. 必填红星标签 -> 小胶囊 dock(不再与旁边环境割裂) --- */" + "\n.main-page .setting .el-form-item.is-required>.el-form-item__label{flex:0 0 auto!important;align-self:center;margin:0 8px 0 0!important;padding:1px 8px!important;border:1px solid rgba(140,200,255,.24)!important;border-radius:8px!important;background:linear-gradient(150deg,rgba(255,255,255,.09),rgba(255,255,255,.02))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.16)!important;font-size:11.5px!important;line-height:17px!important;height:auto!important;color:var(--hx-ink)!important}" + "\n/* --- B3. 标签变胶囊后 flex:0 0 auto 不再撑开行,调节控件会跑到左边;显式推回本行右侧 --- */" + "\n.main-page .setting .el-form-item.is-required>.el-form-item__content{margin-left:auto!important;flex:0 0 auto!important;justify-content:flex-end}" + "\n/* --- B2. 必填星号已按要求隐藏。注意 required 属性必须留在模板里:小胶囊的样式选择器就是 .is-required,删掉属性会连胶囊一起没了 --- */" + "\n.main-page .setting .el-form-item.is-required>.el-form-item__label::before{display:none!important;content:none!important;margin:0!important;width:0!important;min-width:0!important}" + "\n/* --- E. AI 卡三字段(API Key / 模型 / 小名)-> 更小的玻璃小胶囊,比卡片小标题弱一档 --- */" + "\n.main-page .setting>div.setting-ai .el-form-item.setting-ai-field>.el-form-item__label{flex:0 0 auto!important;min-width:52px!important;align-self:center;justify-content:center!important;margin:0 8px 0 0!important;padding:1px 8px!important;border:1px solid rgba(140,200,255,.24)!important;border-radius:8px!important;background:linear-gradient(150deg,rgba(255,255,255,.09),rgba(255,255,255,.02))!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.16)!important;font-size:11.5px!important;line-height:17px!important;height:auto!important;color:var(--hx-ink)!important}" + "\n.main-page .setting>div.setting-ai .el-form-item.setting-ai-field>.el-form-item__label:hover{border-color:rgba(56,226,255,.42)!important}" + "\n/* --- F. 用量栏「好感度」胶囊(接替原来的 空闲/高峰 标签位) --- */" + "\n.main-page .usage-fav{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;padding:1px 9px;border:1px solid rgba(255,140,190,.30);border-radius:999px;background:linear-gradient(150deg,rgba(255,140,190,.14),rgba(155,107,255,.10));backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);box-shadow:inset 0 1px 0 rgba(255,255,255,.20);font-size:10px;line-height:15px;white-space:nowrap;font-variant-numeric:tabular-nums;transition:var(--lg-t)}" + "\n.main-page .usage-fav__k{color:var(--hx-ink-dim)}" + "\n.main-page .usage-fav__v{color:#ffb3d1;font-weight:700}" + "\n.main-page .usage-fav:hover{border-color:rgba(255,140,190,.55);box-shadow:0 4px 12px rgba(2,8,24,.30),inset 0 1px 0 rgba(255,255,255,.28)}" + "\n/* --- G. 光晕统一 x0.618(只改关键帧不透明度 = 整体降到 61.8%) --- */" + "\n@keyframes hxHeroGlowA{0%,100%{opacity:.185;transform:scale(.90)}50%{opacity:.587;transform:scale(1.06)}}" + "\n@keyframes hxHeroGlowB{0%,100%{opacity:0;transform:scale(.84)}48%{opacity:.544;transform:scale(1.04)}}" + "\n@keyframes hxWhaleAura{0%,100%{filter:drop-shadow(0 3px 9px rgba(56,226,255,.278))}50%{filter:drop-shadow(0 7px 18px rgba(155,107,255,.433))}}" + "\n@media (prefers-reduced-motion:reduce){.main-page .usage-fav,.main-page .hx-status-dot{transition-duration:.01ms}}" ); // ---- v0.4.12 ---- LAYOUT_CSS_PARTS.push( "\n/* ==== v0.4.12 · 本轮 : 「本次」用量归零修复(基线改内存) + 本次格可点击归零 ==== */" + "\n/* --- A. 本次格是唯一可点的用量格。旧版把重置绑在一个已于 0.4.10 改版时被移除的旧用量胶囊上 ⇒ 点击成了死代码;这里补回可点的手感 --- */" + "\n.main-page .usage-cell[data-hx-cell='session']{cursor:pointer}" + "\n.main-page .usage-cell[data-hx-cell='session']:hover{border-color:rgba(56,226,255,.46)!important;box-shadow:0 5px 14px rgba(2,8,24,.28),inset 0 1px 0 rgba(255,255,255,.30)!important}" + "\n.main-page .usage-cell[data-hx-cell='session']:active{transform:none}" ); const layoutCss = LAYOUT_CSS_PARTS.join(""); // ── 下拉/提示弹层补丁(关键)──────────────────────────────────────── // Element Plus 的 el-select 弹层默认 Teleport 到 document.body,位于 shadow root 之外: // ① shadow root 的 adoptedStyleSheets 对它完全无效 → 必须 GM_addStyle 注入 document 级样式; // ② 它的 z-index 只有 2000 上下,而 .main-page 是 z-index:100003 → 弹层被不透明面板盖住, // 表现就是「点模型选择框没有任何下拉列表」。这里强制一个超高 z-index 顶到最上层。 const POPPER_CSS = [ ".el-select__popper,.el-popper,.el-select-dropdown{z-index:2147483000!important;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif}", ".el-select__popper{background:transparent!important;border:none!important}", ".el-select-dropdown,.el-popper.is-light{border:1px solid rgba(120,190,255,.18)!important;border-radius:10px!important;background:rgba(14,26,50,.96)!important;color:#e8f4ff!important;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 18px 48px rgba(2,8,24,.55)!important}", ".el-select-dropdown__item{height:32px;line-height:32px;color:#9fb4d0!important;font-size:13px}", ".el-select-dropdown__item.is-hovering{background:rgba(56,226,255,.14)!important;color:#fff!important}", ".el-select-dropdown__item.is-selected{color:#38e2ff!important;font-weight:600}", ".el-popper__arrow::before{background:rgba(14,26,50,.96)!important;border-color:rgba(120,190,255,.18)!important}", ".el-popper.is-dark{background:rgba(8,16,34,.96)!important;border:1px solid rgba(120,190,255,.18)!important;color:#e8f4ff!important}" ].join(""); const BOOTSTRAP_INTERVAL = 100; const BOOTSTRAP_MAX_ATTEMPTS = 200; const COMPLETE_READY_STATE = "complete"; const PANEL_MARK_ATTR = "data-hx-panel"; const HX_SWEEP_DELAYS = [0, 600, 1500, 3200]; const ownPanelHost = () => document.querySelector("[" + PANEL_MARK_ATTR + '="' + HX_RUN_ID + '"]'); const hostsShadowTree = (el) => { try { el.attachShadow({ mode: "open" }); return false; } catch (error) { return true; } }; /* 旧版(0.4.0)的面板宿主是「无任何属性的裸 div」,且旧版没有去重保护。 新旧两份同时存在时会各挂一个面板、旧面板压在新面板之上 —— 表现就是「代码明明改了,界面一点没变」。 这里把非自身的面板宿主隐藏(display:none,刷新即恢复,不做删除), 并把自身宿主移到 body 末尾,保证新版面板始终在最上层。 */ const sweepOtherPanels = () => { const mine = ownPanelHost(); let hidden = 0; document.querySelectorAll("[" + PANEL_MARK_ATTR + "]").forEach((el) => { if (el === mine || el.getAttribute(PANEL_MARK_ATTR) === HX_RUN_ID) return; el.style.display = "none"; hidden += 1; }); Array.from(document.body.children).forEach((el) => { if (el.tagName !== "DIV" || el.attributes.length !== 0 || el.childNodes.length !== 0) return; if (hostsShadowTree(el)) { el.style.display = "none"; hidden += 1; } }); if (mine && document.body.lastElementChild !== mine) document.body.append(mine); return hidden; }; /* 供在页面控制台一键盘点:__HX_BUILD__ / __HX_DIAG__() */ const exposeDiagnostics = () => { try { const w = typeof unsafeWindow !== "undefined" ? unsafeWindow : window; w.__HX_BUILD__ = HX_BUILD; w.__HX_SESSION_RESET__ = () => resetSessionUsage(); w.__HX_BALANCE__ = () => fetchBalance(); w.__HX_STATUS__ = () => readPanelStatus(); w.__HX_STALL__ = () => ({ active: hxStallTimer !== null, videos: hxCollectVideos().length, scans: hxStallStats.scans, soft: hxStallStats.soft, hard: hxStallStats.hard, lastAt: hxStallStats.lastAt }); w.__HX_LOGSCROLL__ = () => ({ follow: hxLogFollow, tabSeen: hxLogTabSeen, targets: hxLogScrollTargets().map((el) => ({ cls: String(el.className || ""), top: Math.round(el.scrollTop || 0), max: Math.round(Math.max(el.scrollHeight - el.clientHeight, 0)) })) }); w.__HX_LINE__ = () => hxIdleLine; w.__HX_NAME__ = () => hxPetName(); w.__HX_TAB__ = () => ({ active: hxActiveTabIndex(), labels: hxTabItems().map((el) => (el.textContent || "").trim()), autoJumped: hxAutoJumped, applied: hxDefaultTabApplied, busy: hxIsBusy(), wasBusy: hxWasBusy }); w.__HX_FAV__ = () => { const i = hxFavLevelIdx(); const t = HX_FAV_TIERS[i] || HX_FAV_TIERS[0]; const nx = HX_FAV_TIERS[i + 1] || null; return { cost: hxFavCost(), level: t.lv, name: t.name, tag: t.tag, unlocked: hxLineCount(), total: hxFavTotalLines(), nextAt: nx ? nx.at : null, note: hxFavOpen, anchor: hxFavAnchor, inserts: hxFavInserts, mounted: !!(hxShadow && hxShadow.querySelector('.setting-fav-field')) }; }; w.__HX_DIAG__ = () => { const sr = hxShadow; const q = (sel) => (sr ? Boolean(sr.querySelector(sel)) : false); return { build: HX_BUILD, runId: HX_RUN_ID, mounted: Boolean(ownPanelHost()), newGenPanelHosts: document.querySelectorAll("[" + PANEL_MARK_ATTR + "]").length, legacyBareHosts: Array.from(document.body.children).filter((el) => el.tagName === "DIV" && el.attributes.length === 0 && el.childNodes.length === 0).length, answerTab: { whaleHero: q(".whale-hero"), idle: q(".whale-hero.is-idle"), busy: q(".whale-hero.is-busy"), questionTable: q(".question_table"), usageBar: q(".usage-bar"), buildBadge: q(".usage-sub[data-hx-build]"), oldEmptyState: q(".el-empty") }, configTab: { aiCard: q(".setting-ai"), apiKey: q(".setting-ai .el-input"), model: q(".setting-ai .el-select"), pet: q(".setting-pet-field") }, liquidGlass: { scrolled: sr ? Boolean(sr.querySelector(".main-page.is-scrolled")) : null, tabShell: Boolean(q(".demo-tabs .el-tabs__nav")), glassCells: sr ? sr.querySelectorAll(".usage-cell,.setting>div,.guide-card,.question-card,.hero-balance").length : 0 }, session: sessionUsage(), sessionBase: { requests: sessionBase.requests, totalTokens: sessionBase.totalTokens, cost: sessionBase.cost, at: sessionBase.at || 0 }, uptimeMs: Math.max(Date.now() - (sessionBase.at || Date.now()), 0), uptimeTotalMs: Number(usageStore.uptimeMs) || 0, otherParamsLocked: (() => { try { return (useConfigStore().otherParams.params || []).map((p) => p.name + "=" + p.value); } catch (error) { return null; } })(), petName: hxPetName(), fav: { cost: hxFavCost(), level: hxFavLevelIdx() + 1, unlocked: hxLineCount(), total: hxFavTotalLines(), anchor: hxFavAnchor, inserts: hxFavInserts, mounted: !!(hxShadow && hxShadow.querySelector('.setting-fav-field')) }, route: { active: hxActiveTabIndex(), autoJumped: hxAutoJumped, applied: hxDefaultTabApplied, sig: hxLastLogSig }, balance: { state: balanceStore.state, currency: balanceStore.currency, total: balanceStore.total, at: balanceStore.at, msg: balanceStore.msg }, background: (() => { try { const card = sr && sr.querySelector(".el-card"); if (!card) return null; const cs = getComputedStyle(card); const body = sr.querySelector(".el-card__body"); const bs = body ? getComputedStyle(body, "::after") : null; return { cardBg: (cs.backgroundImage || "").slice(0, 24), cardBlur: cs.backdropFilter || cs.webkitBackdropFilter || "", sweepAnim: bs ? String(bs.animationName || "") : "" }; } catch (error) { return null; } })(), tabs: sr ? Array.from(sr.querySelectorAll(".el-tabs__item")).map((el) => (el.textContent || "").trim()) : [] }; }; } catch (error) { /* 忽略 */ } }; /* 状态页日志写入的统一入口。顺带修掉一个静默 bug: bindLiquidGlass 里原来直接写 logStore.addLog(...),而该作用域内并不存在 logStore 这个名字(它只在各 setup 内部定义)⇒ 每次点击都抛 ReferenceError, 又被外层 try/catch 吞掉,"本次用量归零"这条日志其实从来没出现过。 */ const hxLog = (message, type) => { try { useLogStore().addLog(message, type); return true; } catch (error) { return false; } }; /* ── 液态玻璃:滚动触发态 + 可点元素(本次用量重置 / 余额刷新)──── */ const bindLiquidGlass = () => { const root = hxShadow; if (!root) return false; const panel = root.querySelector(".main-page"); root.addEventListener("scroll", (event) => { const target = event.target; if (!panel || !target || typeof target.scrollTop !== "number") return; panel.classList.toggle("is-scrolled", (target.scrollTop || 0) > 4); }, true); root.addEventListener("click", (event) => { const target = event.target; if (!target || typeof target.closest !== "function") return; if (target.closest('[data-hx-cell="session"]')) { resetSessionUsage(); hxLog("本次用量归零,重新数钱~", "primary"); return; } if (target.closest(".hero-balance")) fetchBalance(); }, true); return true; }; /* ── 最小化状态灯:绿=运行中 / 黄=答题中 / 红=终止 ───────────── */ const HX_STATUS_TEXT = { run: "运行中", busy: "答题中", stop: "已终止" }; /* 判定优先级:正在答题(黄) > 明确中断(红) > 其余(绿) 改版原因:旧逻辑是「最近 6 条日志里只要出现 danger/error 就判红」, 但脚本日常运行本来就有一堆 danger/error 级日志 (自动翻题关掉了哦 / 正确率不达标先攒着 / 这页没活儿歇会儿 / 第 n 题绊了一跤), 所以「运行中」也会被误判成「已终止」。现改为:从最新一条往前扫, 取第一个有语义的事件定色;日常噪音一条都不匹配,于是既不误红, 也能在真正中断 / 真正恢复时正确翻色。 */ const HX_FATAL_RE = /已停止|已终止|中止|中断|失败|报错|异常|未配置|没配置|密钥|API ?Key|无响应|连不上|崩溃|卡住|无法|拒绝/; const HX_RESUME_RE = /开动|开工|就位|开始|潜入|游向|进考场|到手|拿下|翻到|清空|搞定|读完|放完|跳过|已加载|数钱|归零|返回/; const readPanelStatus = () => { let busy = false; try { const questionStore = useQuestionStore(); const list = questionStore && questionStore.questionList; busy = Array.isArray(list) && list.length > 0; } catch (error) { /* 忽略 */ } if (busy) return "busy"; try { const logStore2 = useLogStore(); const logs = logStore2 && Array.isArray(logStore2.logList) ? logStore2.logList : []; const from = Math.max(logs.length - 24, 0); for (let i = logs.length - 1; i >= from; i -= 1) { const item = logs[i]; const msg = String((item && item.message) || ""); if (HX_RESUME_RE.test(msg)) return "run"; if (HX_FATAL_RE.test(msg)) return "stop"; } } catch (error) { /* 忽略 */ } return "run"; }; let hxStatusDot = null; const syncStatusDot = () => { const root = hxShadow; if (!root) return false; const title = root.querySelector(".card-header .title"); if (!title) return false; if (!hxStatusDot || !hxStatusDot.isConnected || hxStatusDot.parentNode !== title) { hxStatusDot = title.querySelector(".hx-status-dot"); if (!hxStatusDot) { hxStatusDot = document.createElement("i"); hxStatusDot.className = "hx-status-dot"; } title.insertBefore(hxStatusDot, title.firstChild); } try { const headEl = root.querySelector(".el-card__header"); if (headEl) { const measuredH = Math.round(headEl.getBoundingClientRect().height); if (measuredH > 30) root.host.style.setProperty("--hx-min-h", measuredH + 3 + "px"); } } catch (error) { /* 忽略 */ } const state = readPanelStatus(); if (hxStatusDot.getAttribute("data-hx-status") !== state) { hxStatusDot.setAttribute("data-hx-status", state); hxStatusDot.setAttribute("title", HX_STATUS_TEXT[state] || state); } return true; }; const bindStatusDot = () => { try { syncStatusDot(); } catch (error) { /* 忽略 */ } if (hxStatusTimer === null) hxStatusTimer = setInterval(() => { try { syncStatusDot(); } catch (error) { /* 忽略 */ } try { paintIdleLine(false); } catch (error) { /* 忽略 */ } }, 800); return true; }; /* ── 空闲态文案:多条随机播放 + 随机间隔刷新 ──────────────── */ const HX_FAV_TIERS = [ { lv: 1, at: 0, name: "初见", tag: "初见的 D-Whaler", lines: ["{n}正在吃白饭", "{n}在等主人投喂", "{n}在啃数据海草", "{n}在数小金库", "{n}在磨鲸须", "{n}偷偷打了个哈欠", "{n}在打捞海底的算力", "{n}在擦亮小铜铃", "{n}在数今天的星星", "{n}刚游过来,还在认路~"] }, { lv: 2, at: 1, name: "搭话", tag: "点头之交", lines: ["{n}朝主人挥了挥鳍", "{n}在主人门口转圈圈", "{n}把海草摆整齐等主人", "{n}记住了主人的味道", "{n}备好了一口袋小鱼干", "{n}悄悄靠近了一点点", "{n}从珊瑚后探头看主人", "{n}学会叫主人了", "{n}把最好的贝壳留给主人", "{n}今天游得比昨天近了一点"] }, { lv: 3, at: 2, name: "熟络", tag: "常来串门", lines: ["{n}主动凑过来蹭了蹭主人", "{n}想和主人一起看海", "{n}端出了珍藏的海藻茶", "{n}在主人脚边打了个滚", "{n}偷偷把主人写进日记", "{n}开始期待主人上线了", "{n}说今天也想被摸摸头", "{n}把浪花梳成了爱心", "{n}在旁边轻轻哼起鲸歌", "{n}已经敢抢主人的话了"] }, { lv: 4, at: 5, name: "亲密", tag: "形影不离", lines: ["{n}一刻都不想离开主人", "{n}把尾巴缠在主人手腕上", "{n}说今天也要一起加油呀", "{n}偷偷给主人准备了惊喜", "{n}因为主人来晚了闷闷不乐", "{n}只想被主人一个人看见", "{n}把整片海都搬来送给主人", "{n}说主人的名字最好听了", "{n}贴着屏幕想钻进主人怀里", "{n}已经算好主人何时回来了"] }, { lv: 5, at: 10, name: "相伴", tag: "鲸生有你", lines: ["{n}把心口最暖的地方留给主人", "{n}游遍整片海也只认主人", "{n}说下辈子还做主人的鲸", "{n}愿意为主人在沙滩上搁浅", "{n}把星星摘下来串成项链", "{n}说主人在就不怕深海", "{n}把主人写进了「家」里", "{n}想陪主人走完所有潮汐", "{n}说主人就是我的整片海", "{n}和主人,从此再不分开"] } ]; const hxFavMoney = (value) => { const n = Number(value) || 0; if (n <= 0) return "¥0"; return "¥" + (n < 0.01 ? n.toFixed(4) : n.toFixed(2)); }; const hxFavCost = () => { try { const c = Number(usageStore.cost); if (isFinite(c) && c > 0) return c; } catch (error) { /* 忽略 */ } try { const rawStats = _GM_getValue("hx_usage_stats_v1"); if (rawStats) { const parsedStats = typeof rawStats === "string" ? JSON.parse(rawStats) : rawStats; const c2 = Number(parsedStats && parsedStats.cost); if (isFinite(c2) && c2 > 0) return c2; } } catch (error) { /* 忽略 */ } return 0; }; const hxFavLevelIdx = () => { const c = hxFavCost(); let lv = 0; for (let i = 0; i < HX_FAV_TIERS.length; i += 1) { if (c >= HX_FAV_TIERS[i].at) lv = i; } return lv; }; const hxFavTotalLines = () => { let n = 0; for (let i = 0; i < HX_FAV_TIERS.length; i += 1) { n += HX_FAV_TIERS[i].lines.length; } return n; }; const hxUnlockedLines = () => { const lv = hxFavLevelIdx(); const pool = []; for (let i = 0; i <= lv; i += 1) { const tier = HX_FAV_TIERS[i]; if (tier && tier.lines) pool.push.apply(pool, tier.lines); } return pool.length ? pool : ["{n}正在吃白饭"]; }; const hxLineCount = () => hxUnlockedLines().length; const hxPetName = () => { try { const text = getStoredConfigText(); if (!text) return HX_DEFAULT_PET; const parsed = JSON.parse(text); const name = parsed && parsed.ai && parsed.ai.petName; const trimmed = typeof name === "string" ? name.trim() : ""; return trimmed || HX_DEFAULT_PET; } catch (error) { return HX_DEFAULT_PET; } }; const hxLineText = (idx) => { const pool = hxUnlockedLines(); const n = pool.length; const raw = pool[((idx % n) + n) % n]; return String(raw).split("{n}").join(hxPetName()); }; let hxIdleLineIdx = Math.floor(Math.random() * hxLineCount()); let hxIdleLine = hxLineText(hxIdleLineIdx); let hxLineTimer = null; const paintIdleLine = (animate) => { const root = hxShadow; if (!root) return false; const hero = root.querySelector(".whale-hero"); const text = root.querySelector(".whale-hero__text"); if (!hero || !text) return false; if (!hero.classList.contains("is-idle")) return false; const line = hxLineText(hxIdleLineIdx); hxIdleLine = line; if (!animate && text.textContent === line) return true; text.textContent = line; if (animate) { text.classList.remove("hx-line-in"); void text.offsetWidth; text.classList.add("hx-line-in"); } return true; }; const rollIdleLine = () => { if (hxLineCount() > 1) { let next = hxIdleLineIdx; while (next === hxIdleLineIdx) next = Math.floor(Math.random() * hxLineCount()); hxIdleLineIdx = next; } hxIdleLine = hxLineText(hxIdleLineIdx); try { paintIdleLine(true); } catch (error) { /* 忽略 */ } return true; }; const scheduleIdleRoll = () => { hxLineTimer = setTimeout(() => { rollIdleLine(); scheduleIdleRoll(); }, 4200 + Math.floor(Math.random() * 3600)); }; const bindIdleLines = () => { try { paintIdleLine(false); } catch (error) { /* 忽略 */ } if (hxLineTimer === null) scheduleIdleRoll(); return true; }; /* ── 页面路由:默认停在鲸娘页;状态页有新动静就跳过去,安静 3s 回鲸娘 ── */ const HX_TAB_MAIN = "1"; const HX_TAB_LOG = "0"; const HX_TAB_LABELS = { "0": "状态", "1": "小鲸" }; const HX_TAB_RETURN_MS = 3000; let hxTabTimer = null; let hxAutoTabTimer = null; let hxAutoJumped = false; let hxDefaultTabApplied = false; let hxLastLogSig = "\u0000"; let hxRouteReadyAt = 0; let hxWasBusy = false; const hxTabItems = () => { const root = hxShadow; if (!root) return []; return Array.from(root.querySelectorAll(".demo-tabs>.el-tabs__header .el-tabs__item")); }; const hxActiveTabIndex = () => hxTabItems().findIndex((el) => el.classList.contains("is-active")); const hxTabIdIndex = (id) => { const items = hxTabItems(); let idx = items.findIndex((el) => String(el.id || "") === "tab-" + id); if (idx < 0) { const want = HX_TAB_LABELS[id] || ""; idx = items.findIndex((el) => (el.textContent || "").trim() === want); } return idx; }; const hxSwitchTab = (idx) => { const items = hxTabItems(); const el = idx >= 0 ? items[idx] : null; if (!el || el.classList.contains("is-active")) return false; el.click(); return true; }; const hxLogSignature = () => { try { const store = useLogStore(); const list = store && Array.isArray(store.logList) ? store.logList : []; const last = list[list.length - 1]; return list.length + "|" + (last ? String(last.message || "") + "@" + String(last.time || "") : ""); } catch (error) { return ""; } }; const hxReturnToMain = () => { hxAutoJumped = false; hxSwitchTab(hxTabIdIndex(HX_TAB_MAIN)); }; const hxIsBusy = () => { try { const questionStore = useQuestionStore(); const list = questionStore && questionStore.questionList; return Array.isArray(list) && list.length > 0; } catch (error) { return false; } }; const hxJumpToLog = () => { const logIdx = hxTabIdIndex(HX_TAB_LOG); if (hxSwitchTab(logIdx)) hxAutoJumped = true; if (!hxAutoJumped) return; if (hxAutoTabTimer) clearTimeout(hxAutoTabTimer); hxAutoTabTimer = setTimeout(() => { try { hxReturnToMain(); } catch (error) { /* 忽略 */ } }, HX_TAB_RETURN_MS); }; const hxRouteTick = () => { const items = hxTabItems(); if (items.length === 0) return; try { hxSyncLogScroll(); } catch (error) { /* 忽略 */ } if (!hxDefaultTabApplied) { hxDefaultTabApplied = true; if (hxActiveTabIndex() === hxTabIdIndex(HX_TAB_LOG)) hxSwitchTab(hxTabIdIndex(HX_TAB_MAIN)); hxLastLogSig = hxLogSignature(); hxWasBusy = hxIsBusy(); return; } const busy = hxIsBusy(); const sig = hxLogSignature(); /* ① 答题中:日志再变也不跳,老老实实留在鲸娘页看小鲸娘干活 */ if (busy) { hxWasBusy = true; hxLastLogSig = sig; return; } /* ② 答题刚结束:这一次一定要把主人带回状态页看战果(随后 3s 自动回鲸娘页) */ if (hxWasBusy) { hxWasBusy = false; hxLastLogSig = sig; if (Date.now() < hxRouteReadyAt) return; const was = hxActiveTabIndex(); if (was === hxTabIdIndex(HX_TAB_LOG) || was === hxTabIdIndex(HX_TAB_MAIN)) hxJumpToLog(); return; } /* ③ 空闲期:沿用原规则 —— 状态页有变化才跳过去看一眼 */ if (sig === hxLastLogSig) return; hxLastLogSig = sig; if (Date.now() < hxRouteReadyAt) return; const active = hxActiveTabIndex(); if (active === hxTabIdIndex(HX_TAB_LOG) || active === hxTabIdIndex(HX_TAB_MAIN)) hxJumpToLog(); }; const bindTabRouter = () => { const root = hxShadow; if (!root) return false; hxLastLogSig = hxLogSignature(); hxRouteReadyAt = Date.now() + 3000; hxDefaultTabApplied = false; if (hxTabTimer === null) hxTabTimer = setInterval(() => { try { hxRouteTick(); } catch (error) { /* 忽略 */ } }, 1200); try { hxRouteTick(); } catch (error) { /* 忽略 */ } return true; }; /* ── 状态页:刷新 / 切回 / 有新日志时自动贴底,保证「最新状态」可见 ── PRD v0.4.13。旧版状态页的 el-scrollbar 停在顶层,刷新后看到的是最早的几条 日志,最新的反而要手动往下拉。现在三个时机都自动贴底: ① 页面刷新(面板挂载完成)② 切到「状态」页 ③ 有新日志写入。 主人自己往上翻时暂停跟随(不跟主人抢滚动条),回到底部附近再自动恢复跟随。 注意:未激活的 el-tab-pane 是 display:none,此时 scrollHeight 为 0, 所以"切页后"必须在可见之后再补几拍滚动,否则滚了个寂寞。 */ const HX_LOG_SCROLL_SELS = [".el-scrollbar__wrap", ".el-scrollbar__view", ".el-scrollbar"]; const HX_LOG_BOTTOM_TOLERANCE = 24; const HX_LOG_PIN_DELAYS = [0, 120, 480, 1200]; let hxLogPrimary = null; let hxLogFollow = true; let hxLogObserver = null; let hxLogTabSeen = false; const hxLogScrollTargets = () => { const root = hxShadow; if (!root) return []; const home = root.querySelector(".script-home"); if (!home) return []; const list = []; HX_LOG_SCROLL_SELS.forEach((sel) => { const el = home.querySelector(sel); if (el && list.indexOf(el) === -1) list.push(el); }); try { const pane = home.closest ? home.closest(".el-tab-pane") : null; if (pane && list.indexOf(pane) === -1) list.push(pane); } catch (error) { /* 忽略 */ } return list; }; const hxLogAtBottom = (el) => { try { return el.scrollHeight - el.clientHeight - el.scrollTop <= HX_LOG_BOTTOM_TOLERANCE; } catch (error) { return true; } }; const hxLogScrollToBottom = (force) => { const targets = hxLogScrollTargets(); if (!targets.length) return false; if (!force && !hxLogFollow) return false; let moved = false; targets.forEach((el) => { try { if (typeof el.scrollTop !== "number") return; const max = Math.max(el.scrollHeight - el.clientHeight, 0); if (max <= 0) return; el.scrollTop = max; moved = true; } catch (error) { /* 忽略 */ } }); return moved; }; const hxLogRefreshPin = () => { hxLogFollow = true; hxLogScrollToBottom(true); HX_LOG_PIN_DELAYS.forEach((delay) => { setTimeout(() => { try { hxLogScrollToBottom(true); } catch (error) { /* 忽略 */ } }, delay); }); return true; }; const bindLogAutoScroll = () => { const root = hxShadow; if (!root) return false; const targets = hxLogScrollTargets(); if (!targets.length) return false; const primary = targets[0]; if (hxLogPrimary !== primary) { hxLogPrimary = primary; hxLogFollow = true; try { primary.addEventListener("scroll", () => { try { hxLogFollow = hxLogAtBottom(primary); } catch (error) { /* 忽略 */ } }, { passive: true }); } catch (error) { /* 忽略 */ } try { if (hxLogObserver) hxLogObserver.disconnect(); hxLogObserver = new MutationObserver(() => { try { hxLogScrollToBottom(false); } catch (error) { /* 忽略 */ } }); hxLogObserver.observe(primary, { childList: true, subtree: true, characterData: true }); } catch (error) { hxLogObserver = null; } } return hxLogRefreshPin(); }; /* 路由巡检每拍调用:把"切到状态页"这个事件也接上贴底 */ const hxSyncLogScroll = () => { const items = hxTabItems(); if (!items.length) return false; const logIdx = hxTabIdIndex(HX_TAB_LOG); if (logIdx < 0) return false; if (hxActiveTabIndex() !== logIdx) { hxLogTabSeen = false; return false; } if (!hxLogTabSeen) { hxLogTabSeen = true; return hxLogRefreshPin(); } return hxLogScrollToBottom(false); }; /* ── 后台被动守护:视频卡顿自动重播(不展示为任何配置项)────────── PRD:视频停止播放 / 卡顿,20 秒内未恢复就自动点击"重播"再试一次。 判定:视频处于播放态(!paused && !ended)却 currentTime 长时间不前进。 10s 轻量自救:补一次 play()(应对"播放态但其实被挂起"的情形); 20s 仍未前进:在播放器里找「重播 / 重新播放」按钮点击,并强制再一次 play()。 安全性:只在 !paused 时动作 ⇒ 主人自己暂停的视频、答题暂停的视频都不会被抢播; seeking / readyState 未就绪时重置基线,不把缓冲当成卡死; 单个视频最多自救 20 次,避免在彻底坏掉的播放器上空转。 覆盖范围:主文档 + 同源 iframe(跨域 iframe 静默跳过)。 全程静默后台运行,只在状态页留一行日志。 */ const HX_STALL_SOFT_MS = 1e4; const HX_STALL_HARD_MS = 2e4; const HX_STALL_TICK_MS = 1e3; const HX_STALL_MOVE_EPS = 0.05; const HX_STALL_MAX_REPLAY = 20; const HX_REPLAY_TEXT_RE = /^(重播|重新播放|再次播放|再看一次|replay)$/i; const hxStallState = /* @__PURE__ */ new WeakMap(); const hxStallStats = { scans: 0, soft: 0, hard: 0, lastAt: 0 }; let hxStallTimer = null; const hxCollectVideos = () => { const out = []; try { document.querySelectorAll("video").forEach((el) => { if (el) out.push(el); }); } catch (error) { /* 忽略 */ } try { document.querySelectorAll("iframe").forEach((frame) => { try { const doc = frame.contentDocument; if (doc) doc.querySelectorAll("video").forEach((el) => { if (el) out.push(el); }); } catch (error) { /* 跨域 iframe:跳过 */ } }); } catch (error) { /* 忽略 */ } return out; }; const hxFindReplayButton = (doc) => { if (!doc || typeof doc.querySelectorAll !== "function") return null; let hit = null; try { doc.querySelectorAll("button,a,span,div,i,li").forEach((el) => { if (hit) return; const label = String((el.textContent || "")).trim(); if (label && label.length <= 6 && HX_REPLAY_TEXT_RE.test(label)) { hit = el; return; } const tip = String((el.getAttribute && (el.getAttribute("title") || el.getAttribute("aria-label"))) || "").trim(); if (tip && HX_REPLAY_TEXT_RE.test(tip)) hit = el; }); } catch (error) { /* 忽略 */ } return hit; }; const hxForceReplay = (media) => { let clicked = false; try { const btn = hxFindReplayButton(media.ownerDocument); if (btn) { btn.click(); clicked = true; } } catch (error) { /* 忽略 */ } if (!clicked) { try { if (media.ended || media.currentTime > 0) media.currentTime = 0; } catch (error) { /* 忽略:只读播放器 */ } } try { const pending = media.play(); if (pending && typeof pending.catch === "function") pending.catch(() => {}); } catch (error) { /* 忽略 */ } return clicked; }; const hxStallReset = (state2, media, now) => { state2.at = now; state2.time = Number(media.currentTime) || 0; state2.soft = false; }; const hxStallTick = () => { const now = Date.now(); hxStallStats.scans += 1; hxCollectVideos().forEach((media) => { let state2 = hxStallState.get(media); if (!state2) { state2 = { at: now, time: Number(media.currentTime) || 0, soft: false, replays: 0 }; hxStallState.set(media, state2); } try { if (media.paused || media.ended || media.seeking) { hxStallReset(state2, media, now); return; } if (Math.abs((Number(media.currentTime) || 0) - state2.time) > HX_STALL_MOVE_EPS) { hxStallReset(state2, media, now); return; } const stall = now - state2.at; if (stall >= HX_STALL_HARD_MS && state2.replays < HX_STALL_MAX_REPLAY) { state2.replays += 1; hxStallReset(state2, media, now); hxStallStats.hard += 1; hxStallStats.lastAt = now; const clicked = hxForceReplay(media); /* v0.5.1:自动重播触发时,在状态页留一条一眼能认出的通知。 后台被动运行,不出现在任何配置项里。 */ hxLog("【自动重播】检测到视频卡住,小鲸自动戳一下" + (clicked ? "重播" : "播放") + "~(第 " + state2.replays + " 次 · 停顿 " + Math.round(stall / 1e3) + " 秒)", "warning"); return; } if (stall >= HX_STALL_SOFT_MS && !state2.soft) { state2.soft = true; hxStallStats.soft += 1; try { const pending = media.play(); if (pending && typeof pending.catch === "function") pending.catch(() => {}); } catch (error) { /* 忽略 */ } } } catch (error) { /* 忽略:单个视频异常不影响守护 */ } }); }; const bindStallGuard = () => { if (hxStallTimer === null) hxStallTimer = setInterval(() => { try { hxStallTick(); } catch (error) { /* 忽略 */ } }, HX_STALL_TICK_MS); return true; }; /* ── 好感度面板:挂在小名下面,ⓘ 可展开说明 ───────────── */ let hxFavOpen = false; let hxFavTimer = null; const hxFavTierRows = () => HX_FAV_TIERS.map((tier) => '
  • Lv.' + tier.lv + ' · ¥' + tier.at + '' + tier.name + '(' + tier.tag + ')· ' + tier.lines.length + ' 条
  • ').join(''); const hxFavNoteHtml = () => '
    ' + '
    好感度跟着累计花费一起长——就是这台机器上为小鲸花掉的 token 钱,装好脚本以后一直累加,不随刷新清零。
    ' + '
      ' + hxFavTierRows() + '
    ' + '
    每跨过一档多解锁 10 条语录,满级共 ' + hxFavTotalLines() + ' 条。语录只在她空闲时滚动播放;取的「小名」会替进每一条语录。
    ' + '
    '; const hxFavShellHtml = () => '
    ' + '好感度' + 'Lv.1 · —' + 'i' + '
    ' + '
    ' + '
    ——
    ' + hxFavNoteHtml(); const paintFavCard = (el) => { if (!el) return; const idx = hxFavLevelIdx(); const tier = HX_FAV_TIERS[idx] || HX_FAV_TIERS[0]; const next = HX_FAV_TIERS[idx + 1] || null; const cost = hxFavCost(); const lvEl = el.querySelector('.fav-lv'); if (lvEl) { const txt = 'Lv.' + tier.lv + ' · ' + tier.name + ' · ' + tier.tag; if (lvEl.textContent !== txt) lvEl.textContent = txt; } const barEl = el.querySelector('.fav-bar > i'); if (barEl) { const span = next ? Math.max(next.at - tier.at, 0.0001) : 1; const pct = next ? Math.max(0, Math.min(100, ((cost - tier.at) / span) * 100)) : 100; const wv = pct.toFixed(1) + '%'; if (barEl.style.width !== wv) barEl.style.width = wv; } const metaEl = el.querySelector('.fav-meta'); if (metaEl) { const left = '累计 ' + hxFavMoney(cost) + ' · 已解锁 ' + hxLineCount() + '/' + hxFavTotalLines() + ' 条'; const right = next ? '距 Lv.' + next.lv + ' 还差 ' + hxFavMoney(Math.max(next.at - cost, 0)) : '已满级 · 语录全解锁'; const html = '' + left + '' + right + ''; if (metaEl.innerHTML !== html) metaEl.innerHTML = html; } }; /* 好感度卡片为什么之前"没展示":我们注入的节点是 Vue 模板 div.setting-ai 的 第 5 个子节点,而那个 div 每次重渲染只认原本的 4 个(分隔线/API Key/模型/小名), 多出来的第 5 个会被 Vue 在 patchUnkeyedChildren 阶段直接移除 —— 于是卡片刚插进去 就被删掉,用户看不到。修法:① 落点从「只认小名字段」改成多级降级; ② 用 MutationObserver 盯住容器,一旦发现卡片被移除就立刻补回。 */ let hxFavAnchor = ""; let hxFavObs = null; let hxFavObsTarget = null; let hxFavInserts = 0; const hxFavObserve = (host) => { if (typeof MutationObserver !== "function") return; if (hxFavObs && hxFavObsTarget === host) return; if (hxFavObs) { try { hxFavObs.disconnect(); } catch (error) { /* 忽略 */ } } hxFavObs = null; hxFavObsTarget = null; try { hxFavObs = new MutationObserver(() => { try { if (!host.isConnected) return; if (host.querySelector(".setting-fav-field")) return; mountFavCard(); } catch (error) { /* 忽略 */ } }); hxFavObs.observe(host, { childList: true }); hxFavObsTarget = host; } catch (error) { hxFavObs = null; hxFavObsTarget = null; } }; const hxFavAnchorPick = (root) => { const probes = [ [".setting>div.setting-ai", "container"], [".setting-ai", "container"], [".setting .setting-pet-field", "after"], [".setting", "container"] ]; for (let i = 0; i < probes.length; i += 1) { const node = root.querySelector(probes[i][0]); if (node && node.parentNode) { hxFavAnchor = probes[i][0]; return { node: node, mode: probes[i][1] }; } } hxFavAnchor = ""; return null; }; const mountFavCard = () => { const root = hxShadow; if (!root) return false; const hit = hxFavAnchorPick(root); if (!hit) return false; const host = hit.mode === "after" ? hit.node.parentNode : hit.node; if (!host) return false; let el = host.querySelector(".setting-fav-field"); if (!el) { el = root.querySelector(".setting-fav-field"); if (el && el.parentNode !== host) { try { el.parentNode.removeChild(el); } catch (error) { el = null; } } } if (!el) { el = document.createElement("div"); el.className = "setting-fav-field"; el.innerHTML = hxFavShellHtml(); const info = el.querySelector(".fav-info"); if (info) { const toggle = (ev) => { if (ev) { ev.preventDefault(); ev.stopPropagation(); } hxFavOpen = !hxFavOpen; el.classList.toggle("is-open", hxFavOpen); }; info.addEventListener("click", toggle); info.addEventListener("keydown", (ev) => { if (ev && (ev.key === "Enter" || ev.key === " ")) toggle(ev); }); } } if (hit.mode === "after") { if (el.previousSibling !== hit.node) host.insertBefore(el, hit.node.nextSibling); } else if (host.lastElementChild !== el) { host.appendChild(el); } if (el.parentNode !== host) return false; hxFavInserts += 1; hxFavObserve(host); el.classList.toggle("is-open", hxFavOpen); try { paintFavCard(el); } catch (error) { /* 忽略 */ } try { const nowLv = hxFavLevelIdx(); if (hxFavBarLv !== nowLv) { hxFavBarLv = nowLv; usageTick.value += 1; } } catch (error) { /* 忽略 */ } return true; }; let hxFavBarLv = -1; const bindFavCard = () => { const ensure = () => { try { mountFavCard(); } catch (error) { /* 忽略 */ } }; ensure(); [220, 700, 1500, 3000, 5200].forEach((delay) => setTimeout(ensure, delay)); if (hxFavTimer === null) hxFavTimer = setInterval(ensure, 1500); }; const CAN_USE_ADOPTED_SHEETS = (() => { try { if (typeof CSSStyleSheet !== "function" || !("replaceSync" in CSSStyleSheet.prototype)) return false; const probe = document.createElement("div").attachShadow({ mode: "open" }); return Array.isArray(probe.adoptedStyleSheets); } catch (error) { return false; } })(); const documentStyleInjected = /* @__PURE__ */ Object.create(null); const injectDocumentStyle = (key, cssText) => { if (!cssText || documentStyleInjected[key]) return; documentStyleInjected[key] = true; GM_addStyle(cssText); }; const applyShadowStyles = (shadowRoot, sheets) => { const usable = sheets.filter(Boolean); if (CAN_USE_ADOPTED_SHEETS) { shadowRoot.adoptedStyleSheets = usable.map(createStyleSheet); return; } const style = document.createElement("style"); style.textContent = usable.join("\n"); shadowRoot.appendChild(style); }; const ELEMENT_PLUS_STYLE_RESOURCE = "ElementPlusStyle"; const createStyleSheet = (cssText) => { const sheet = new CSSStyleSheet(); try { sheet.replaceSync(cssText); } catch (error) { console.error("[D-Whaler] CSS 解析失败:", error); } return sheet; }; const createShadowMountNode = () => { const shadowHost = document.createElement("div"); shadowHost.setAttribute(PANEL_MARK_ATTR, HX_RUN_ID); const mountNode = document.createElement("div"); const shadowRoot = shadowHost.attachShadow({ mode: "closed" }); document.body.append(shadowHost); shadowRoot.appendChild(mountNode); hxShadow = shadowRoot; exposeDiagnostics(); const elementPlusCss = _GM_getResourceText(ELEMENT_PLUS_STYLE_RESOURCE) ?? ""; /* el-select 下拉弹层默认 Teleport 到 document.body(在 closed shadow root 之外), 拿不到 adoptedStyleSheets,必须把同一份 Element Plus 样式补注入到 document 级。 用 key 去重,避免重复挂载时把同一份样式灌进 document 多次。 */ injectDocumentStyle("element-plus", elementPlusCss); /* 主题覆盖必须晚于 Element Plus 注入,否则同特异性声明会被默认值盖掉 */ injectDocumentStyle("popper", POPPER_CSS); applyShadowStyles(shadowRoot, [elementPlusCss, layoutCss]); return mountNode; }; const mountApp = () => { const app = vue.createApp(_sfc_main); app.use(pinia.createPinia()); app.use(ElementPlus); app.mount(createShadowMountNode()); }; const isPanelMounted = () => Boolean(document.querySelector("[" + PANEL_MARK_ATTR + '="' + HX_RUN_ID + '"]')); let bootstrapAttempts = 0; const timer = setInterval(() => { if (document.readyState !== COMPLETE_READY_STATE) { bootstrapAttempts += 1; /* 兜底:页面迟迟不到 complete(资源被墙等)也强行挂载,避免定时器永久空转 */ if (bootstrapAttempts < BOOTSTRAP_MAX_ATTEMPTS) return; } clearInterval(timer); if (isPanelMounted()) return; try { mountApp(); console.info("[D-Whaler] build " + HX_BUILD + " 已挂载(run " + HX_RUN_ID + ")"); HX_SWEEP_DELAYS.forEach((delay) => { setTimeout(() => { try { const hidden = sweepOtherPanels(); if (hidden) console.warn("[D-Whaler] 已隐藏 " + hidden + " 个旧版/重复面板宿主,新版面板已置于最上层"); } catch (error2) { /* 忽略 */ } try { bindLogAutoScroll(); } catch (error2) { /* 忽略 */ } }, delay); }); try { bindLiquidGlass(); } catch (error2) { /* 忽略 */ } try { bindStatusDot(); } catch (error2) { /* 忽略 */ } try { bindIdleLines(); } catch (error2) { /* 忽略 */ } try { bindTabRouter(); } catch (error2) { /* 忽略 */ } try { bindFavCard(); } catch (error2) { /* 忽略 */ } try { bindLogAutoScroll(); } catch (error2) { /* 忽略 */ } try { bindStallGuard(); } catch (error2) { /* 忽略 */ } try { bindUptimeMeter(); } catch (error2) { /* 忽略 */ } setTimeout(() => { try { fetchBalance(); } catch (error2) { /* 忽略 */ } }, 1200); if (balanceTimer === null) balanceTimer = setInterval(() => { try { fetchBalance(); } catch (error2) { /* 忽略 */ } }, 6e5); } catch (error) { console.error("[D-Whaler] 面板挂载失败:", error); } }, BOOTSTRAP_INTERVAL); })(Vue, Pinia, rxjs, md5, ElementPlus);