// ==UserScript==
// @name bookwalker图源下载
// @namespace summer-script
// @version 0.5
// @description bookwalker图源自动下载
// @author summer
// @match https://viewer.bookwalker.jp/*
// @match https://viewer-trial.bookwalker.jp/*
// @match https://pcreader.bookwalker.com.tw/*
// @match https://preview.bookwalker.com.tw/*
// @icon https://bookwalker.jp/favicon.ico
// @license GPL-3.0
// @grant GM_xmlhttpRequest
// @grant GM_download
// @connect bookwalker.jp
// @connect bookwalker.com.tw
// ==/UserScript==
(function () {
"use strict";
var tip = {
initializing: '初始化中',
notSupport: '发生错误, 当前作品不支持或脚本已失效',
downloadBtn: '下载图源',
downloadBtnPack: '打包下载',
downloadPreparing: '下载准备开始...',
downloadTip01: '下载期间请勿操作阅读器(包括键盘和鼠标',
downloadTip02: '下载期间可以切换到其他标签页',
downloadTipPack01: '将进行打包下载, 压缩包将在全部下载完成时生成',
downloadTipPack02: '打包功能可能在较旧的浏览器中无法运作',
downloadRetry: '图源获取失败, 正在重试...',
downloadNetRetry: '网络故障, 正在重试...',
downloading: '正在下载',
downloadFinish: '下载完毕',
downloadPacking: '正在生成压缩包...',
downloadPackFailed: '无法下载压缩包',
downloadProgress: '正在下载: {1} / {2}',
packFailed: '打包失败',
fatalError: '脚本运行错误, 请关掉页面稍后再试',
warnMultiPage: '检测到暂不支持的数据',
};
var config = {
packFileName: 'configuration_pack.json',
lsKeyBrowserId: 'NFBR.Global/BrowserId',
urlAuthInfo: '/browserWebApi/c',
urlAuthInfoTrial: '/trial-page/c',
urlGetLoader: '/browserWebApi/03/getLoader',
hostTrial: ['viewer-trial.bookwalker.jp', 'preview.bookwalker.com.tw'],
fontSize: 'normal_default',
waitStartMs: 5000,
waitNextImgMs: 2000,
waitRetryMs: 4000,
downloadPackage: false,
};
var downloadStatus = {
now: 0,
sum: 0,
};
var ui = initUI();
var authInfo = {
// bs: BOOKMARK_SHARED
// cti: CONTENT_TITLE
// cty: CONTENT_TYPE
// lin: LOOK_INSIDE
// lp:
// lpd: last page info
// ms: MARKER_SHARED
};
var imageList = [];
var packFiles = [];
var downloadZip = downloadZipInit();
var Y4jNum = null;
if (! checkSupport()) {
ui.updateBtnText(tip.notSupport);
return;
}
initNFBR();
waitStart(config.waitStartMs)
.then(getLoader)
.then(getAuthInfo)
.then(getConfigPack)
.then(decryptConfigPack)
.then(parseImage)
.then(downloadImageList)
.catch(function (err) {
console.warn(err);
ui.updateBtnText(tip.notSupport);
});
function checkSupport() {
var cid = (new URLSearchParams(window.location.search)).get('cid');
if (! cid) {
return false;
}
if (! localStorage.getItem(config.lsKeyBrowserId)) {
return false;
}
return true;
}
function waitStart(ms) {
return new Promise(function (resolve, reject) {
function download(pack) {
ui.disableBtn();
ui.showMsgBox();
ui.updateBtnText(tip.downloadPreparing);
ui.newMsg(tip.downloadPreparing);
ui.newMsg(tip.downloadTip01);
ui.newMsg(tip.downloadTip02);
if (pack) {
ui.newMsg(tip.downloadTipPack01);
ui.newMsg(tip.downloadTipPack02);
config.downloadPackage = true;
}
resolve();
}
function start() {
ui.updateBtnText(tip.downloadBtn);
ui.listenBtn(function () {
download();
});
ui.listenBtnPack(function () {
download('pack');
});
}
// TODO check viewer loaded
setTimeout(start, ms);
});
}
function getLoader() {
if (config.hostTrial.includes(window.location.hostname)) {
config.urlAuthInfo = config.urlAuthInfoTrial;
return Promise.resolve(null);
}
return fetch(config.urlGetLoader)
.then(function (resp) {
return resp.text();
})
.then(function (data) {
var reg = new RegExp('Y4j=function\\(\\).+?;\\}');
var match = reg.exec(data);
return new Promise(function (resolve, reject) {
if (!match) {
reject('Error: getLoader match failed');
} else {
resolve(match[0]);
}
});
})
.then(function (code) {
var Y4j;
eval(code);
Y4jNum = Y4j();
return Y4jNum;
});
}
function getAuthInfo() {
var p = {
cid: new URLSearchParams(window.location.search).get('cid')
};
if (getCookieValue('u1')) {
p.u1 = getCookieValue('u1');
}
if (getCookieValue('u2')) {
p.u2 = getCookieValue('u2');
}
if (localStorage.getItem(config.lsKeyBrowserId)) {
p.BID = localStorage.getItem(config.lsKeyBrowserId);
}
if (Y4jNum) {
p.cr = Y4jNum;
}
// TODO: params [lin, w, h]
var q = new URLSearchParams(p).toString();
var url = config.urlAuthInfo + '?' + q;
return fetch(url)
.then(function (resp) {
return resp.json();
}).then(function (data) {
authInfo = data;
return data;
});
}
function getConfigPack() {
try {
var url = resURLBuilder(config.packFileName);
} catch (error) {
ui.newMsg(`${tip.fatalError}, `
+ `URL: ${authInfo.url}, Path: ${config.packFileName}`);
return Promise.reject();
}
return fetch(url).then(function (resp) {
return resp.json();
});
}
function decryptConfigPack(conf64) {
if (! conf64.data) {
return Promise.resolve({
config: conf64,
key1: [],
key2: [],
key3: [],
key1Arr: '',
key2Arr: '',
key3Arr: '',
});
}
var confEnc = atob(conf64.data);
var keyArr = [];
for (var k = 0; k < 3; k++) {
keyArr[k] = [];
for (var i = 0; i < 32; i++) {
keyArr[k].push(confEnc.charCodeAt(k * 32 + i));
}
}
var confData = confEnc.substring(k * 32);
var key1 = keyArr[0];
var key2 = keyArr[1];
var key3 = keyArr[2];
var dataArr = new Uint8Array(confData.length);
for (var d = 0; d < confData.length; d++) {
dataArr[d] = confData.charCodeAt(d);
}
return window.NFBR.decryptConfig(dataArr, key1, key2, key3);
}
function parseImage(configData) {
// console.log(configData);
configData.config.configuration.contents.forEach(function (item) {
var keyInfo = {
key1: configData.key1,
key2: configData.key2,
key3: configData.key3,
key1Arr: configData.key1Arr,
key2Arr: configData.key2Arr,
key3Arr: configData.key3Arr,
};
var imgInfo = configData.config[item.file];
imgInfo.FileLinkInfo.PageLinkInfoList.forEach(function (pageInfo) {
var imgName = item.file;
pageInfo.Page.imgName = imgName;
var imgHash = window.NFBR.getImgURLHash(pageInfo.Page, keyInfo, configData.config);
imgName += '/' + imgHash + '.' + item.type;
if (1 == item.index) {
imgName += 'bvCoverImage';
}
var widthCut = pageInfo.Page.DummyWidth ? pageInfo.Page.DummyWidth : 0;
var heightCut = pageInfo.Page.DummyHeight ? pageInfo.Page.DummyHeight : 0;
imageList.push({
url: imgName,
widthCut: widthCut,
heightCut: heightCut,
pageInfo: pageInfo,
keyInfo: keyInfo,
});
});
});
downloadStatus.sum = imageList.length;
ui.updateBtnText(tip.downloading);
// console.log(imageList);
return Promise.resolve(imageList);
}
function downloadImageList(imgList) {
var imgInfo = imgList.shift();
if (! imgInfo) {
ui.updateBtnText(tip.downloadFinish);
ui.newMsg(tip.downloadFinish);
downloadPackage();
return;
}
downloadStatus.now = downloadStatus.sum - imageList.length;
ui.newMsg(
tip.downloadProgress,
downloadStatus.now,
downloadStatus.sum
);
var img = new Image();
img.addEventListener('load', function () {
var imgWidth = img.naturalWidth - imgInfo.widthCut;
var imgHeight = img.naturalHeight - imgInfo.heightCut;
var pageInfo = imgInfo.pageInfo;
var keyInfo = imgInfo.keyInfo;
var blocks = getImageBlocks(pageInfo, keyInfo, img.naturalWidth, img.naturalHeight);
var canvas = reOrderImage(img, blocks, imgWidth, imgHeight);
downloadImage(canvas, config.waitNextImgMs, function () {
URL.revokeObjectURL(img.src);
downloadImageList(imgList);
});
});
try {
var imgSrc = resURLBuilder(imgInfo.url);
} catch (error) {
ui.newMsg(`${tip.fatalError}, `
+ `URL: ${authInfo.url}, Path: ${imgInfo.url}`);
return;
}
function retryDownload() {
// console.log('Parameter expired, retry');
ui.newMsg(tip.downloadRetry);
getAuthInfo()
.then(function () {
waitRetry(config.waitRetryMs)
.then(function () {
imgList.unshift(imgInfo);
downloadImageList(imgList);
});
})
.catch(function () {
ui.newMsg(tip.downloadNetRetry);
waitRetry(config.waitRetryMs)
.then(function () {
retryDownload();
});
});
}
GM_xmlhttpRequest({
method: 'GET',
url: imgSrc,
responseType: 'blob',
onload: function (resp) {
if (200 !== resp.status) {
retryDownload();
return;
}
img.src = URL.createObjectURL(resp.response);
},
onerror: retryDownload
});
}
function reOrderImage(img, blocks, imgWidth, imgHeight) {
var canvas = document.createElement('canvas');
canvas.width = imgWidth;
canvas.height = imgHeight;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, imgWidth, imgHeight);
for (var i = 0; i < blocks.length; i++) {
ctx.drawImage(img,
blocks[i].destX, blocks[i].destY, blocks[i].width, blocks[i].height,
blocks[i].srcX, blocks[i].srcY, blocks[i].width, blocks[i].height
);
}
return canvas;
}
function downloadImage(canvas, delay, cb) {
canvas.style.position = 'fixed';
canvas.style.top = '0';
canvas.style.left = '0';
var pageNo = downloadStatus.now.toString();
pageNo = pageNo.padStart(downloadStatus.sum.toString().length, '0');
var filename = `${authInfo.cti} - ${pageNo}.png`;
if (config.downloadPackage) {
canvas.toBlob(function (blob) {
addImageToPackage(blob, filename);
setTimeout(cb, delay);
});
} else {
GM_download({
name: filename,
url: canvas.toDataURL(),
onload: function () {
setTimeout(cb, delay);
}
});
}
}
function addImageToPackage(blob, filename) {
packFiles.push({
name: filename,
input: blob,
lastModified: new Date()
});
}
function downloadPackage() {
if (0 === packFiles.length) {
return;
}
ui.newMsg(tip.downloadPacking);
downloadZip(packFiles).blob().then(function (blob) {
var filename = `${authInfo.cti}.zip`;
var blobURL = URL.createObjectURL(blob);
// GM_download({
// name: filename,
// url: blobURL,
// onload: function () {
// packFiles = [];
// URL.revokeObjectURL(blobURL);
// ui.newMsg(tip.downloadFinish);
// },
// onerror: function (err) {
// ui.newMsg(`${tip.downloadPackFailed}: ${err}`);
// }
// });
var a = document.createElement("a");
a.href = blobURL;
a.download = filename;
a.click();
packFiles = [];
ui.newMsg(tip.downloadFinish);
}).catch(function (err) {
ui.newMsg(`${tip.packFailed}: ${err}`);
});
}
function getImageBlocks(pageInfo, keyInfo, fullWidth, fullHeight) {
if (! pageInfo.Page.BlockWidth) {
return [];
}
window.NFBR.calcU2F(pageInfo.Page, keyInfo);
var size = pageInfo.Page.Size;
var imgBlocks = window.NFBR.getBlocks(pageInfo.Page, fullWidth, fullHeight);
return imgBlocks;
}
function resURLBuilder(fileName) {
var path;
if (1 == authInfo.cty || 2 == authInfo.cty) {
path = fileName;
} else {
path = config.fontSize + '/' + fileName;
}
var url = (new URL(authInfo.url + path)).toString();
url += '?';
url += (new URLSearchParams(authInfo.auth_info)).toString();
return url;
}
function getCookieValue(name) {
const regex = new RegExp(`(^| )${name}=([^;]+)`);
const match = document.cookie.match(regex);
if (match) {
return match[2];
}
}
function waitRetry(ms){
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
}
function initUI() {
var ui = {
btn: null,
btnR: null,
btnPack: null,
cover: null,
msgBox: null,
listenBtn: function (cb) {
this.btn.addEventListener('click', cb);
},
listenBtnPack: function (cb) {
this.btnPack.addEventListener('click', cb);
},
disableBtn: function () {
this.btn.disabled = true;
this.btnPack.disabled = true;
},
enableBtn: function () {
this.btn.disabled = false;
this.btnPack.disabled = false;
},
updateBtnText: function (text) {
var args = Array.prototype.slice.call(arguments, 1);
this.btn.innerText = text.replace(/{(\d+)}/g, function (match, num) {
var key = num - 1;
return 'undefined' !== typeof args[key] ? args[key] : match;
});
},
showMsgBox: function () {
this.cover.style.display = 'block';
this.msgBox.style.display = 'block';
},
hideMsgBox: function () {
this.cover.style.display = 'none';
this.msgBox.style.display = 'none';
},
newMsg: function (text) {
var args = Array.prototype.slice.call(arguments, 1);
text = text.replace(/{(\d+)}/g, function (match, num) {
var key = num - 1;
return 'undefined' !== typeof args[key] ? args[key] : match;
});
this.msgBox.value += text;
this.msgBox.value += "\n";
this.msgBox.scrollTop = this.msgBox.scrollHeight;
}
};
var btn = document.createElement('button');
btn.innerText = tip.initializing;
btn.style.position = 'fixed';
btn.style.top = '40px';
btn.style.right = '50px';
btn.style.zIndex = '10030';
btn.style.padding = '9px';
btn.style.background = '#fff';
btn.style.border = '1px solid #aaa';
btn.style.borderRadius = '4px 0 0 4px';
btn.style.minWidth = '112px';
btn.style.color = '#000';
btn.style.cursor = 'pointer';
btn.style.lineHeight = '16px';
btn.style.verticalAlign = 'middle';
document.body.appendChild(btn);
ui.btn = btn;
var btnR = document.createElement('button');
btnR.style.position = 'fixed';
btnR.style.top = '40px';
btnR.style.right = '20px';
btnR.style.zIndex = '10030';
btnR.style.padding = '9px 0px 9px 0px';
btnR.style.background = '#fff';
btnR.style.border = '1px solid #aaa';
btnR.style.borderLeft = 'none';
btnR.style.borderRadius = '0 4px 4px 0';
btnR.style.width = '30px';
btnR.style.color = '#000';
btnR.style.cursor = 'pointer';
btnR.style.lineHeight = '16px';
document.body.appendChild(btnR);
ui.btnR = btnR;
var btnRSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
btnRSvg.setAttribute('viewBox', '64 64 896 896');
btnRSvg.setAttribute('fill', 'currentColor');
btnRSvg.setAttribute('width', '12px');
btnRSvg.setAttribute('height', '12px');
btnRSvg.style.verticalAlign = 'top';
btnRSvg.style.padding = '2px';
var btnRSvgPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');
btnRSvgPath.setAttribute(
'd',
'M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 '
+ '227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 '
+ '7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 '
+ '0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z'
);
btnRSvg.appendChild(btnRSvgPath);
btnR.appendChild(btnRSvg);
var btnPack = document.createElement('button');
btnPack.innerText = tip.downloadBtnPack;
btnPack.style.position = 'fixed';
btnPack.style.top = '79px';
btnPack.style.right = '20px';
btnPack.style.zIndex = '10031';
btnPack.dataset.ostylePadding = '9px';
btnPack.dataset.ostyleBorder = '1px solid #aaa';
btnPack.style.background = '#fff';
btnPack.style.borderRadius = '4px';
btnPack.style.minWidth = '90px';
btnPack.style.color = '#000';
btnPack.style.cursor = 'pointer';
btnPack.style.lineHeight = '16px';
btnPack.style.verticalAlign = 'middle';
btnPack.style.overflowY = 'hidden';
btnPack.style.transition = '100ms ease-in-out';
btnPack.style.opacity = 0;
btnPack.style.boxShadow =
'0 6px 16px 0 rgba(0, 0, 0, 0.08), '
+ '0 3px 6px -4px rgba(0, 0, 0, 0.12), '
+ '0 9px 28px 8px rgba(0, 0, 0, 0.05)';
btnR.addEventListener('mouseenter', function () {
btnDropMenuShow(btnPack);
});
btnR.addEventListener('click', function () {
btnDropMenuShow(btnPack);
});
btnR.addEventListener('mouseleave', function () {
btnDropMenuHide(btnPack);
});
btnPack.addEventListener('mouseenter', function () {
btnDropMenuShow(btnPack);
});
btnPack.addEventListener('mouseleave', function () {
btnDropMenuHide(btnPack);
});
document.body.appendChild(btnPack);
ui.btnPack = btnPack;
function btnDropMenuShow(btn) {
clearTimeout(btn.dataset.hidetimer);
btn.style.padding = btn.dataset.ostylePadding;
btn.style.border = btn.dataset.ostyleBorder;
btn.style.height = 'auto';
btn.style.opacity = 1;
}
function btnDropMenuHide(btn) {
btn.dataset.hidetimer = setTimeout(function () {
btn.style.height = 0;
btn.style.border = 0;
btn.style.padding = 0;
btn.style.opacity = 0;
}, 500);
}
var cover = document.createElement('div');
cover.style.width = '100%';
cover.style.height = '100%';
cover.style.position = 'fixed';
cover.style.zIndex = '10010';
cover.style.top = '0';
cover.style.left = '0';
cover.style.background = '#000';
cover.style.opacity = '0.1';
cover.style.display = 'none';
document.body.appendChild(cover);
ui.cover = cover;
var msgBox = document.createElement('textarea');
msgBox.style.width = '600px';
msgBox.style.height = '500px';
msgBox.style.position = 'fixed';
msgBox.style.zIndex = '10020';
msgBox.style.top = '50%';
msgBox.style.left = '50%';
msgBox.style.opacity = '0.9';
msgBox.style.display = 'none';
msgBox.style.padding = '30px';
msgBox.style.transform = 'translate(-50%, -50%)';
msgBox.readOnly = true;
document.body.appendChild(msgBox);
ui.msgBox = msgBox;
return ui;
}
function initNFBR() {
var Gdq = window;
Gdq.NFBR = {};
(function () {
var Xn3 = [
[1, 3, 10], [1, 5, 16], [1, 5, 19], [1, 9, 29], [1, 11, 6], [1, 11, 16], [1, 19, 3],
[1, 21, 20], [1, 27, 27], [2, 5, 15], [2, 5, 21], [2, 7, 7], [2, 7, 9], [2, 7, 25],
[2, 9, 15], [2, 15, 17], [2, 15, 25], [2, 21, 9], [3, 1, 14], [3, 3, 26], [3, 3, 28],
[3, 3, 29], [3, 5, 20], [3, 5, 22], [3, 5, 25], [3, 7, 29], [3, 13, 7], [3, 23, 25],
[3, 25, 24], [3, 27, 11], [4, 3, 17], [4, 3, 27], [4, 5, 15], [5, 3, 21], [5, 7, 22],
[5, 9, 7], [5, 9, 28], [5, 9, 31], [5, 13, 6], [5, 15, 17], [5, 17, 13], [5, 21, 12],
[5, 27, 8], [5, 27, 21], [5, 27, 25], [5, 27, 28], [6, 1, 11], [6, 3, 17], [6, 17, 9],
[6, 21, 7], [6, 21, 13], [7, 1, 9], [7, 1, 18], [7, 1, 25], [7, 13, 25], [7, 17, 21],
[7, 25, 12], [7, 25, 20], [8, 7, 23], [8, 9, 23], [9, 5, 14], [9, 5, 25], [9, 11, 19],
[9, 21, 16], [10, 9, 21], [10, 9, 25], [11, 7, 12], [11, 7, 16], [11, 17, 13],
[11, 21, 13], [12, 9, 23], [13, 3, 17], [13, 3, 27], [13, 5, 19], [13, 17, 15],
[14, 1, 15], [14, 13, 15], [15, 1, 29], [17, 15, 20], [17, 15, 23], [17, 15, 26]
],
tn3 = [
function (gr3, Br3, Hr3, Rr3) {
return (
(gr3 ^= gr3 << Br3), (gr3 ^= gr3 >>> Hr3), (gr3 ^= gr3 << Rr3)
);
},
function (Rsm, DMm, UMm, AMm) {
return (
(Rsm ^= Rsm << AMm), (Rsm ^= Rsm >>> UMm), (Rsm ^= Rsm << DMm)
);
},
function (LMm, jMm, lMm, qMm) {
// qLs_MBv(Hsm, 18);
// zsm(t6s[pBv] - Y6s[FDs]);
return (
(LMm ^= LMm >>> jMm), (LMm ^= LMm << lMm), (LMm ^= LMm >>> qMm)
);
},
function (vMm, sMm, MMm, mMm) {
return (
(vMm ^= vMm >>> mMm), (vMm ^= vMm << MMm), (vMm ^= vMm >>> sMm)
);
},
function (EMm, dMm, OMm, kMm) {
return (
(EMm ^= EMm << dMm), (EMm ^= EMm << kMm), (EMm ^= EMm >>> OMm)
);
},
function (fMm, TMm, CMm, KMm) {
// qLs_MBv(Hsm, 19);
// zsm(t6s[rBv] - Y6s[XDs]);
return (
(fMm ^= fMm >>> TMm), (fMm ^= fMm >>> KMm), (fMm ^= fMm << CMm)
);
},
],
Yn3 = Xn3["length"],
zn3 = tn3["length"],
gn3 = 2463534242,
Bn3 = Xn3[74],
Hn3 = tn3[0];
(Gdq["NFBR"]["T8n"] = function () {
var Rn3 = gn3,
D83 = Bn3[0],
U83 = Bn3[1],
A83 = Bn3[2],
L83 = Hn3;
(this["e7Ks"] = function (j83, l83) {
Rn3 = gn3;
var q83 = Xn3[j83];
(D83 = q83[0]), (U83 = q83[1]), (A83 = q83[2]), (L83 = tn3[l83]);
}),
(this["j7p"] = function (v83) {
var s83 = v83 >>> 0;
0 === s83 && (s83 = gn3), (Rn3 = s83);
}),
(this["W5C"] = function (M83) {
if (M83 <= 1) return 0;
for (
var m83, E83, d83 = Rn3, O83 = 4294967295 - M83;
(m83 = (E83 = (d83 = L83(d83, D83, U83, A83) >>> 0) - 1) % M83),
O83 < E83 - m83;
);
return (Rn3 = d83), m83;
});
}),
Gdq["NFBR"]["T8n"]["prototype"],
(Gdq["NFBR"]["T8n"]["M2e"] = Yn3),
(Gdq["NFBR"]["T8n"]["B4d"] = zn3),
(Gdq["NFBR"]["T8n"]["n2C"] = Yn3 * zn3);
})();
Gdq["NFBR"]["C6A"] = {};
var cJm = Gdq["window"],
NJm = "e7Ks",
WJm = "j7p",
ZJm = cJm["NFBR"]["T8n"],
xJm = ZJm["M2e"],
wJm = ZJm["B4d"],
PJm = cJm["Math"]["floor"],
JJm = function (func, context) {
return Function.prototype.bind.apply(
func,
Array.prototype.slice.call(arguments, 1)
);
},
GJm = cJm["Array"]["prototype"]["push"];
Gdq["NFBR"]["C6A"]["a3f"] = function (hJm, rJm, nJm, bJm) {
var pJm = new ZJm(),
SJm = rJm ^ nJm ^ bJm,
XJm = PJm(hJm / 65536),
tJm = PJm(rJm / 65536),
YJm = PJm(nJm / 65536),
zJm = PJm(bJm / 65536),
gJm = xJm,
BJm = wJm,
HJm = tJm ^ YJm ^ zJm,
RJm = XJm ^ zJm,
DGm = hJm ^ rJm,
UGm = hJm ^ nJm,
AGm = hJm ^ bJm,
LGm = (HJm >>>= 16) % BJm,
jGm = ((HJm - LGm) / BJm) % gJm,
lGm = JJm(pJm["W5C"], pJm);
pJm[NJm](jGm, LGm), pJm[WJm](SJm);
var qGm = lGm(65536) | (lGm(65536) << 16),
vGm = tJm >>> 16,
sGm = YJm >>> 16;
(DGm = (DGm ^ qGm) >>> 0),
(UGm = (UGm ^ qGm) >>> 0),
(AGm = (AGm ^ qGm) >>> 0);
var MGm = (RJm = (RJm >>> 16) ^ lGm(512)) % BJm,
mGm = ((RJm - MGm) / BJm) % gJm;
pJm[NJm](mGm, MGm), pJm[WJm](DGm);
var EGm = dGm(lGm, vGm * sGm);
pJm[WJm](UGm);
var OGm = kGm(lGm, vGm),
fGm = kGm(lGm, sGm),
TGm = CGm(lGm, OGm, vGm),
KGm = CGm(lGm, fGm, sGm);
pJm[WJm](AGm);
var VGm = [],
QGm = [];
FGm(lGm, VGm, QGm, OGm, fGm, vGm, sGm);
var IGm = dGm(lGm, vGm),
cGm = dGm(lGm, sGm),
NGm = [],
WGm = [];
return (
FGm(lGm, WGm, NGm, TGm, KGm, vGm, sGm),
ZGm(vGm, sGm, EGm, IGm, cGm, NGm, WGm, TGm, KGm, QGm, VGm, OGm, fGm)
);
};
var ZGm = function (
xGm, wGm, PGm, JGm, GGm, hGm,
rGm, nGm, bGm, pGm, SGm, XGm, tGm
) {
var YGm,
zGm,
gGm,
BGm,
HGm,
RGm,
Dhm,
Uhm,
Ahm = [],
Lhm = xGm + 1,
jhm = wGm + 1,
lhm = Lhm << 1,
qhm = jhm << 1,
vhm = JJm(GJm, Ahm);
for (BGm = 0; BGm < xGm; BGm++)
for (HGm = 0; HGm < wGm; HGm++)
(Dhm = ((Uhm = PGm[BGm + HGm * xGm]) - (RGm = Uhm % xGm)) / xGm),
(YGm = BGm < SGm[HGm] ? BGm : BGm + Lhm),
(zGm = HGm < pGm[BGm] ? HGm : HGm + jhm),
(gGm = RGm < rGm[Dhm] ? RGm : RGm + Lhm),
vhm((Dhm < hGm[RGm] ? Dhm : Dhm + jhm) * lhm + YGm),
vhm(gGm * qhm + zGm);
for (
vhm(bGm * lhm + XGm), vhm(nGm * qhm + tGm), BGm = 0;
BGm < xGm;
BGm++
)
(HGm = pGm[BGm]),
(gGm = (RGm = JGm[BGm]) < nGm ? RGm : RGm + Lhm),
vhm((Dhm = hGm[RGm]) * lhm + (YGm = BGm < XGm ? BGm : BGm + Lhm)),
vhm(gGm * qhm + HGm);
for (HGm = 0; HGm < wGm; HGm++)
(BGm = SGm[HGm]),
(RGm = rGm[(Dhm = GGm[HGm])]),
(zGm = HGm < tGm ? HGm : HGm + jhm),
vhm((Dhm < bGm ? Dhm : Dhm + jhm) * lhm + BGm),
vhm(RGm * qhm + zGm);
return Ahm;
},
kGm = function (gPm, BPm) {
return BPm < 4 ? gPm(BPm + 1) : gPm(BPm - 1) + 1;
},
CGm = function (HPm, RPm, DJm) {
// qLs_MBv(zPm, 40);
// XPm(t6s[IHv] - Y6s[fUs]);
if (0 === DJm) return 0;
var UJm = HPm(DJm);
return UJm < RPm ? UJm : UJm + 1;
},
FGm = function (AJm, LJm, jJm, lJm, qJm, vJm, sJm) {
for (
var MJm,
mJm,
EJm,
dJm = vJm,
OJm = sJm,
kJm = lJm,
fJm = qJm,
TJm = 0,
CJm = 0;
0 < dJm + OJm;
)
if ((MJm = AJm(dJm + OJm)) < dJm) {
if (MJm < kJm) {
for (mJm = CJm; 0 < mJm && !(TJm >= LJm[mJm - 1]); mJm--);
for (EJm = CJm + OJm; EJm < sJm && !(TJm >= LJm[EJm]); EJm++);
(jJm[TJm] = AJm(EJm - mJm) + mJm), TJm++, kJm--;
} else {
for (mJm = CJm; 0 < mJm && !(TJm + dJm <= LJm[mJm - 1]); mJm--);
for (
EJm = CJm + OJm;
EJm < sJm && !(TJm + dJm <= LJm[EJm]);
EJm++
);
jJm[TJm + dJm - 1] = AJm(EJm - mJm) + mJm;
}
dJm--;
} else {
if (MJm - dJm < fJm) {
for (mJm = TJm; 0 < mJm && !(CJm >= jJm[mJm - 1]); mJm--);
for (EJm = TJm + dJm; EJm < vJm && !(CJm >= jJm[EJm]); EJm++);
(LJm[CJm] = AJm(EJm - mJm) + mJm), CJm++, fJm--;
} else {
for (mJm = TJm; 0 < mJm && !(CJm + OJm <= jJm[mJm - 1]); mJm--);
for (
EJm = TJm + dJm;
EJm < vJm && !(CJm + OJm <= jJm[EJm]);
EJm++
);
LJm[CJm + OJm - 1] = AJm(EJm - mJm) + mJm;
}
OJm--;
}
},
dGm = function (KJm, VJm) {
for (var QJm, FJm = [], IJm = 0; IJm < VJm; IJm++)
(QJm = KJm(IJm + 1)), (FJm[IJm] = FJm[QJm]), (FJm[QJm] = IJm);
return FJm;
},
qd3 = function (vd3, sd3, Md3) {
////
var md3 = [],
Ed3 = vd3["BlockWidth"],
dd3 = vd3["BlockWidth"];
// if (vd3["U2F"] === undefined)
// md3 = gE3[SE3](sd3, Md3, Ed3, dd3, vd3["M1R"]);
var Od3 = vd3["Q1i"],
kd3 = vd3["b0F"],
fd3 = vd3["v5m"],
Td3 = vd3["U2F"],
Cd3 = window["NFBR"]["T8n"]["M2e"],
Kd3 = window["NFBR"]["T8n"]["B4d"],
Vd3 = Math.floor(sd3 / Ed3),
Qd3 = Math.floor(Md3 / dd3),
Fd3 = sd3 % Ed3,
Id3 = Md3 % dd3,
cd3 = (Vd3 + 1) << 1,
Nd3 = (Qd3 + 1) << 1,
Wd3 = (Vd3 + 1) * Ed3 - Fd3,
Zd3 = (Qd3 + 1) * dd3 - Id3,
xd3 = new window["NFBR"]["T8n"](),
wd3 = Td3 ^ Vd3 ^ Qd3,
Pd3 = wd3 % Kd3,
Jd3 = ((wd3 - Pd3) / Kd3) % Cd3;
xd3["e7Ks"](Jd3, Pd3), xd3["j7p"](Od3 ^ kd3 ^ fd3);
var Gd3 = xd3["W5C"](65536);
(Gd3 += 65536 * xd3["W5C"](65536)),
(Gd3 += 4294967296 * xd3["W5C"](512));
var hd3 = 4294967296 * Vd3 + Od3,
rd3 = 4294967296 * Qd3 + kd3,
nd3 = 4294967296 * Td3 + fd3,
bd3 = window["NFBR"]["C6A"]["a3f"](Gd3, hd3, rd3, nd3),
pd3 = function (Sd3, Xd3, td3, Yd3) {
var zd3,
gd3,
Bd3,
Hd3,
Rd3,
DO3,
UO3 = Ed3,
AO3 = dd3,
LO3 = Vd3,
jO3 = Qd3,
lO3 = cd3,
qO3 = Nd3,
vO3 = Wd3,
sO3 = Zd3,
MO3 = bd3;
if (0 !== td3 && 0 !== Yd3)
for (; Sd3 < Xd3; ) {
(zd3 = MO3[Sd3++]),
(Rd3 = ((gd3 = MO3[Sd3++]) - (Hd3 = gd3 % qO3)) / qO3),
(DO3 = (zd3 - (Bd3 = zd3 % lO3)) / lO3);
var dO3 = {};
(dO3["srcX"] = Bd3 * UO3 - (LO3 < Bd3 ? vO3 : 0)),
(dO3["srcY"] = Hd3 * AO3 - (jO3 < Hd3 ? sO3 : 0)),
(dO3["destX"] = Rd3 * UO3 - (LO3 < Rd3 ? vO3 : 0)),
(dO3["destY"] = DO3 * AO3 - (jO3 < DO3 ? sO3 : 0)),
(dO3["width"] = td3),
(dO3["height"] = Yd3),
md3.push(dO3);
}
},
OO3 = 0,
kO3 = (Vd3 * Qd3) << 1;
pd3(OO3, kO3, Ed3, dd3),
pd3((OO3 = kO3), (kO3 += 2), Fd3, Id3),
pd3((OO3 = kO3), (kO3 += Vd3 << 1), Ed3, Id3),
pd3((OO3 = kO3), (kO3 += Qd3 << 1), Fd3, dd3);
return md3;
};
Gdq["NFBR"]["getBlocks"] = qd3;
Gdq["NFBR"]["calcU2F"] = calcU2F;
Gdq["NFBR"]["decryptConfig"] = decryptConfig;
Gdq["NFBR"]["getImgURLHash"] = getImgURLHash;
function decryptConfig(dataArr, key1, key2, key3) {
var lYs = 0;
var confName = "configuration_pack.json";
var vYs = vYsInit();
// console.log(dataArr, key1, key2, key3);
return d2j(dataArr, dataArr.length, key1, key2, key3)
.then(function (returnData) {
// console.log(returnData);
return b9q.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return u6D.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return l3I.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return x3U.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return N3P.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return d2j.apply(null, returnData);
})
.then(function (returnData) {
return d2j.apply(null, returnData);
})
.then(function (returnData) {
return d2j.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return T2l.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return Y7p.apply(null, returnData);
})
.then(function (returnData) {
// console.log(returnData);
return Promise.resolve({
config: JSON.parse(returnData[0]),
key1: returnData[1],
key2: returnData[2],
key3: returnData[3],
key1Arr: returnData[4],
key2Arr: returnData[5],
key3Arr: returnData[6],
});
});
function vYsInit() {
var sYs = confName;
for (var MYs, mYs = sYs["length"], EYs = [], kYs = 0; kYs < mYs; )
(MYs = sYs.charCodeAt(kYs++)) < 128
? EYs.push(MYs)
: (MYs < 2048
? EYs.push(192 | (MYs >> 6))
: (MYs < 55296 || 57344 <= MYs || kYs === mYs
? EYs.push(224 | (MYs >> 12))
: (EYs.push(
240 |
((MYs =
65536 +
(((1023 & MYs) << 10) |
(1023 & sYs.charCodeAt(kYs++)))) >>
18)
),
EYs.push(128 | ((MYs >> 12) & 63))),
EYs.push(128 | ((MYs >> 6) & 63))),
EYs.push(128 | (63 & MYs)));
return EYs;
}
function LYs(pGM) {
var SGM,
XGM,
tGM,
YGM = [],
zGM = [],
gGM = pGM["length"];
for (XGM = SGM = 0; SGM < 256; SGM++, XGM++)
XGM === gGM && (XGM = 0), (zGM[(YGM[SGM] = SGM)] = pGM[XGM]);
for (XGM = SGM = 0; SGM < 256; SGM++)
(XGM = (XGM + YGM[SGM] + zGM[SGM]) & 255),
(tGM = YGM[SGM]),
(YGM[SGM] = YGM[XGM]),
(YGM[XGM] = tGM);
return YGM;
}
function I1s(k7s, f7s, T7s) {
var C7s = [];
C7s = C7s.concat(k7s).concat(f7s).concat(T7s);
return LYs(C7s);
}
function a0FBin(pGM) {
var SGM,
XGM,
tGM,
YGM = [],
zGM = [],
gGM = pGM["length"];
for (XGM = SGM = 0; SGM < 256; SGM++, XGM++)
XGM === gGM && (XGM = 0), (zGM[(YGM[SGM] = SGM)] = pGM[XGM]);
for (XGM = SGM = 0; SGM < 256; SGM++)
(XGM = (XGM + YGM[SGM] + zGM[SGM]) & 255),
(tGM = YGM[SGM]),
(YGM[SGM] = YGM[XGM]),
(YGM[XGM] = tGM);
return YGM;
}
function jYs(vhM, shM) {
var MhM,
mhM,
EhM,
dhM,
OhM,
khM = [];
(khM["length"] = vhM["length"]), (dhM = a0FBin(shM)), (mhM = MhM = 0);
for (var fhM = vhM["length"], ThM = 0; ThM < fhM; ThM++)
(mhM = (mhM + dhM[(MhM = (MhM + 1) & 255)]) & 255),
(OhM = dhM[MhM]),
(dhM[MhM] = dhM[mhM]),
(dhM[mhM] = OhM),
(EhM = (dhM[MhM] + dhM[mhM]) & 255),
(khM[ThM] = vhM[ThM] ^ dhM[EhM]);
return khM;
}
function dgs(K7s, V7s, Q7s, F7s) {
var I7s = [];
I7s = I7s.concat(V7s).concat(Q7s).concat(F7s);
return jYs(K7s, I7s);
}
function chunkCB(cb) {
var isResolve = false;
var thenData;
var resolveCall = function (data) {
isResolve = true;
thenData = data;
};
return new Promise(function (resolve, reject) {
while (true) {
if (isResolve) {
resolve(thenData);
break;
} else {
cb(resolveCall);
}
}
});
}
function d2j(Ggs, hgs, rgs, ngs, bgs) {
var pgs,
Sgs,
Xgs,
tgs,
Ygs,
zgs,
ggs = [];
switch (lYs) {
case 0:
(pgs = Ggs),
(Sgs = hgs),
(zgs = 65536),
(Xgs = rgs),
(tgs = ngs),
(Ygs = bgs);
break;
case 1:
(pgs = bgs),
(zgs = Sgs = 32),
(Xgs = rgs),
(tgs = ngs),
(Ygs = null);
break;
case 2:
(pgs = ngs),
(zgs = Sgs = 32),
(Xgs = rgs),
(tgs = bgs),
(Ygs = null);
break;
case 3:
(pgs = rgs),
(zgs = Sgs = 32),
(Xgs = ngs),
(tgs = bgs),
(Ygs = null);
}
var Bgs,
Hgs = 0,
Rgs = 0;
for (Bgs = 0; Bgs < 32; Bgs++)
(Hgs = (Hgs + Xgs[Bgs]) & 255), (Rgs ^= Xgs[Bgs]);
for (Bgs = 0; Bgs < 32; Bgs++)
(Hgs = (Hgs + tgs[Bgs]) & 255), (Rgs ^= tgs[Bgs]);
if (Ygs)
for (Bgs = 0; Bgs < 32; Bgs++)
(Hgs = (Hgs + Ygs[Bgs]) & 255), (Rgs ^= Ygs[Bgs]);
var D2s = 2 != (2 & Hgs),
U2s = 4 != (4 & Hgs),
A2s = 8 != (8 & Hgs),
L2s = Rgs >>> 5,
l2s = 8 - L2s,
q2s = 0;
return chunkCB(function (resolve) {
var v2s = ggs,
s2s = D2s,
M2s = U2s,
m2s = A2s,
E2s = L2s,
d2s = l2s,
k2s = pgs,
f2s = q2s,
C2s = f2s + zgs;
Sgs < C2s && (C2s = Sgs);
for (
var K2s,
V2s,
Q2s,
F2s,
I2s,
c2s,
N2s,
W2s,
Z2s,
w2s,
P2s,
J2s,
G2s,
h2s,
r2s,
n2s;
f2s < C2s;
) {
for (
Q2s = (V2s = C2s < (K2s = f2s + 32)) ? (K2s = C2s) - f2s : 32,
W2s = Hgs,
Z2s = Rgs,
I2s = 0,
c2s = f2s;
I2s < Q2s;
)
(F2s = k2s[c2s++]),
s2s && (F2s = ((85 & F2s) << 1) | ((F2s >>> 1) & 85)),
M2s && (F2s = ((51 & F2s) << 2) | ((F2s >>> 2) & 51)),
m2s && (F2s = ((15 & F2s) << 4) | ((F2s >>> 4) & 15)),
(W2s = (W2s + (v2s[I2s++] = F2s)) & 255),
(Z2s ^= F2s);
for (
J2s = 2 != (2 & W2s),
G2s = 4 != (4 & W2s),
h2s = 8 != (8 & W2s),
r2s = 16 != (16 & W2s),
n2s = 32 != (32 & W2s),
I2s = 0;
I2s < Q2s;
I2s++
)
if (
1 == (1 & I2s) &&
(J2s &&
((c2s = I2s - 1),
(F2s = v2s[I2s]),
(v2s[I2s] = v2s[c2s]),
(v2s[c2s] = F2s)),
3 == (3 & I2s))
) {
if (G2s)
for (N2s = w2s = (c2s = I2s) - 2; w2s < c2s; )
(F2s = v2s[c2s]),
(v2s[c2s--] = v2s[N2s]),
(v2s[N2s--] = F2s);
if (7 == (7 & I2s)) {
if (h2s)
for (N2s = w2s = (c2s = I2s) - 4; w2s < c2s; )
(F2s = v2s[c2s]),
(v2s[c2s--] = v2s[N2s]),
(v2s[N2s--] = F2s);
if (15 == (15 & I2s)) {
if (r2s)
for (N2s = w2s = (c2s = I2s) - 8; w2s < c2s; )
(F2s = v2s[c2s]),
(v2s[c2s--] = v2s[N2s]),
(v2s[N2s--] = F2s);
if (31 == (31 & I2s) && n2s)
for (N2s = w2s = (c2s = I2s) - 16; w2s < c2s; )
(F2s = v2s[c2s]),
(v2s[c2s--] = v2s[N2s]),
(v2s[N2s--] = F2s);
}
}
}
if (
((P2s = Z2s >>> 3), V2s ? (P2s %= Q2s) : (P2s &= 31), 0 === E2s)
)
for (I2s = f2s, c2s = Q2s - P2s; I2s < K2s; )
c2s === Q2s && (c2s = 0), (k2s[I2s++] = v2s[c2s++]);
else
for (I2s = f2s, c2s = Q2s - P2s - 1; I2s < K2s; )
(F2s = v2s[c2s] << d2s),
++c2s === Q2s && (c2s = 0),
(F2s |= v2s[c2s] >>> E2s),
(k2s[I2s++] = 255 & F2s);
f2s = K2s;
}
Sgs <= f2s
? (lYs++, resolve([Ggs, hgs, rgs, ngs, bgs]))
: (q2s = f2s);
});
}
function b9q(D7s, U7s, A7s, L7s, j7s) {
var l7s = I1s(L7s, vYs, j7s);
var q7s = 0,
v7s = 0,
s7s = 65536;
return chunkCB(function (resolve) {
var M7s = D7s,
m7s = l7s,
E7s = q7s,
d7s = v7s,
O7s = E7s + s7s;
for (U7s < O7s && (O7s = U7s); E7s < O7s; )
(M7s[E7s++] ^= m7s[d7s++]), (d7s &= 255);
U7s <= E7s
? resolve([M7s, U7s, A7s, L7s, j7s])
: ((q7s = E7s), (v7s = d7s));
});
}
function u6D(kgs, fgs, Tgs, Cgs, Kgs) {
var Vgs = I1s(vYs, Tgs, Cgs),
Qgs = (1 | fgs) - 2,
Fgs = 65536 << 1,
Igs = 0,
cgs = 0;
return chunkCB(function (resolve) {
var Ngs,
Wgs = kgs,
Zgs = Vgs,
xgs = Qgs,
wgs = Igs,
Pgs = cgs,
Jgs = xgs - Fgs;
for (Jgs < 0 && (Jgs = 0); Jgs < xgs; )
(Pgs = (Pgs + Zgs[(wgs = (wgs + 1) & 255)]) & 255),
(Ngs = Zgs[wgs]),
(Zgs[wgs] = Zgs[Pgs]),
(Zgs[Pgs] = Ngs),
(Wgs[xgs] ^= Zgs[(Zgs[wgs] + Zgs[Pgs]) & 255]),
(xgs -= 2);
xgs < 0
? resolve([Wgs, fgs, Tgs, Cgs, Kgs])
: ((Qgs = xgs), (Igs = wgs), (cgs = Pgs));
});
}
function l3I(b1s, p1s, S1s, X1s, t1s) {
var Y1s = I1s(t1s, vYs, S1s),
g1s = (p1s - 1) & -2,
B1s = 65536 << 1,
H1s = 0,
R1s = 0;
return chunkCB(function (resolve) {
var Dgs,
Ugs = b1s,
Ags = Y1s,
Lgs = g1s,
jgs = H1s,
lgs = R1s,
qgs = Lgs - B1s;
for (qgs < -1 && (qgs = -1); qgs < Lgs; )
(lgs = (lgs + Ags[(jgs = (jgs + 1) & 255)]) & 255),
(Dgs = Ags[jgs]),
(Ags[jgs] = Ags[lgs]),
(Ags[lgs] = Dgs),
(Ugs[Lgs] ^= Ags[(Ags[jgs] + Ags[lgs]) & 255]),
(Lgs -= 2);
Lgs < 0
? resolve([Ugs, p1s, S1s, X1s, t1s])
: ((g1s = Lgs), (H1s = jgs), (R1s = lgs));
});
}
function x3U(b2s, p2s, S2s, X2s, t2s) {
var Y2s,
z2s,
g2s,
B2s = p2s;
32 < B2s && (B2s = 32);
for (var H2s = 0; H2s < B2s; H2s++) {
switch (12 & (g2s = b2s[H2s] ^ S2s[H2s] ^ X2s[H2s] ^ t2s[H2s])) {
case 0:
Y2s = S2s[H2s];
break;
case 4:
Y2s = X2s[H2s];
break;
case 8:
Y2s = t2s[H2s];
break;
case 12:
Y2s = b2s[H2s];
}
switch (3 & g2s) {
case 0:
(z2s = S2s[H2s]), (S2s[H2s] = Y2s);
break;
case 1:
(z2s = X2s[H2s]), (X2s[H2s] = Y2s);
break;
case 2:
(z2s = t2s[H2s]), (t2s[H2s] = Y2s);
break;
case 3:
(z2s = b2s[H2s]), (b2s[H2s] = Y2s);
}
switch (12 & g2s) {
case 0:
S2s[H2s] = z2s;
break;
case 4:
X2s[H2s] = z2s;
break;
case 8:
t2s[H2s] = z2s;
break;
case 12:
b2s[H2s] = z2s;
}
switch (192 & g2s) {
case 0:
Y2s = S2s[H2s];
break;
case 64:
Y2s = X2s[H2s];
break;
case 128:
Y2s = t2s[H2s];
break;
case 192:
Y2s = b2s[H2s];
}
switch (48 & g2s) {
case 0:
(z2s = S2s[H2s]), (S2s[H2s] = Y2s);
break;
case 16:
(z2s = X2s[H2s]), (X2s[H2s] = Y2s);
break;
case 32:
(z2s = t2s[H2s]), (t2s[H2s] = Y2s);
break;
case 48:
(z2s = b2s[H2s]), (b2s[H2s] = Y2s);
}
switch (192 & g2s) {
case 0:
S2s[H2s] = z2s;
break;
case 64:
X2s[H2s] = z2s;
break;
case 128:
t2s[H2s] = z2s;
break;
case 192:
b2s[H2s] = z2s;
}
}
return chunkCB(function (resolve) {
resolve([b2s, p2s, S2s, X2s, t2s]);
});
}
function N3P(vgs, sgs, Mgs, mgs, Egs) {
Egs = dgs(Egs, mgs, Mgs, vYs);
mgs = dgs(mgs, Mgs, vYs, Egs);
Mgs = dgs(Mgs, vYs, Egs, mgs);
return chunkCB(function (resolve) {
resolve([vgs, sgs, Mgs, mgs, Egs]);
});
}
function T2l(T1s, C1s, K1s, V1s, Q1s) {
var F1s = I1s(Q1s, V1s, vYs),
c1s = 0,
N1s = 65536,
W1s = 0,
Z1s = 0;
return chunkCB(function (resolve) {
var x1s,
w1s = T1s,
J1s = F1s,
G1s = c1s,
h1s = W1s,
r1s = Z1s,
n1s = G1s + N1s;
for (C1s < n1s && (n1s = C1s); G1s < n1s; )
(r1s = (r1s + F1s[(h1s = (h1s + 1) & 255)]) & 255),
(x1s = F1s[h1s]),
(J1s[h1s] = F1s[r1s]),
(J1s[r1s] = x1s),
(w1s[G1s++] ^= J1s[(J1s[h1s] + J1s[r1s]) & 255]);
C1s <= G1s
? resolve([w1s, C1s, K1s, V1s, Q1s])
: ((c1s = G1s), (W1s = h1s), (Z1s = r1s));
});
}
function Y7p(TYs, CYs, KYs, VYs, QYs) {
var FYs = undefined,
cYs = 0,
NYs = 0,
WYs = [],
ZYs = new Array(16384),
xYs = 65536;
return chunkCB(function (resolve) {
var PYs = "length",
JYs = FYs,
hYs = TYs,
rYs = CYs,
nYs = cYs,
bYs = NYs,
pYs = WYs,
SYs = ZYs,
tYs = nYs + xYs;
rYs < tYs && (tYs = rYs);
var YYs,
zYs,
gYs,
BYs,
HYs,
RYs,
Dzs = hYs[tYs - 1];
for (
128 <= Dzs &&
(128 == (192 & Dzs)
? tYs < rYs &&
128 == (192 & (YYs = hYs[tYs])) &&
++tYs < rYs &&
128 == (192 & (zYs = hYs[tYs])) &&
tYs++
: tYs < rYs &&
194 <= Dzs &&
Dzs <= 244 &&
128 == (192 & (YYs = hYs[tYs])) &&
(224 !== Dzs || 160 <= YYs) &&
(237 !== Dzs || YYs < 160) &&
(240 !== Dzs || 144 <= YYs) &&
(244 !== Dzs || YYs < 144) &&
++tYs < rYs &&
224 <= Dzs &&
128 == (192 & (zYs = hYs[tYs])) &&
++tYs < rYs &&
240 <= Dzs &&
128 == (192 & (gYs = hYs[tYs])) &&
tYs++);
nYs < tYs;
)
if (
((Dzs = hYs[nYs]),
nYs++,
Dzs < 128
? (SYs[bYs++] = Dzs)
: ((YYs = hYs[nYs]),
tYs <= nYs ||
Dzs < 194 ||
244 < Dzs ||
128 != (192 & YYs) ||
(224 === Dzs && YYs < 160) ||
(237 === Dzs && 160 <= YYs) ||
(240 === Dzs && YYs < 144) ||
(244 === Dzs && 144 <= YYs)
? (SYs[bYs++] = 65533)
: (nYs++,
Dzs < 224
? ((BYs = (63 & YYs) | ((31 & Dzs) << 6)),
(SYs[bYs++] = BYs))
: ((zYs = hYs[nYs]),
tYs <= nYs || 128 != (192 & zYs)
? (SYs[bYs++] = 65533)
: (nYs++,
Dzs < 240
? ((BYs =
(63 & zYs) |
((63 & YYs) << 6) |
((15 & Dzs) << 12)),
(SYs[bYs++] = BYs))
: ((gYs = hYs[nYs]),
tYs <= nYs || 128 != (192 & gYs)
? (SYs[bYs++] = 65533)
: (nYs++,
(HYs =
((48 & zYs) >> 4) |
((63 & YYs) << 2) |
((7 & Dzs) << 8)),
(RYs = (63 & gYs) | ((15 & zYs) << 6)),
(SYs[bYs++] = 55232 + HYs),
(SYs[bYs++] = NaN + RYs))))))),
16383 <= bYs)
) {
SYs[PYs] = bYs;
var Uzs = String.fromCharCode.apply(null, SYs);
(SYs[16383] = JYs), WYs.push(Uzs), (bYs = 0);
}
if (rYs <= nYs) {
var Azs,
Lzs = KYs,
jzs = VYs,
lzs = QYs;
(TYs = hYs = null),
(SYs[PYs] = bYs),
(Azs = pYs[PYs]
? (WYs.push(String.fromCharCode.apply(null, SYs)),
pYs["join"](""))
: String.fromCharCode.apply(null, SYs)),
(ZYs = WYs = SYs = pYs = null);
var qzs,
vzs,
szs,
Mzs,
mzs = new Array(64);
for (vzs = qzs = 0; qzs < 32; qzs++)
(szs = (Mzs = Lzs[qzs]) >>> 4),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs),
(szs = 15 & Mzs),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs);
var Ezs = String.fromCharCode.apply(null, mzs);
for (vzs = qzs = 0; qzs < 32; qzs++)
(szs = (Mzs = jzs[qzs]) >>> 4),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs),
(szs = 15 & Mzs),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs);
var dzs = String.fromCharCode.apply(null, mzs);
for (vzs = qzs = 0; qzs < 32; qzs++)
(szs = (Mzs = lzs[qzs]) >>> 4),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs),
(szs = 15 & Mzs),
(mzs[vzs++] = (szs < 10 ? 48 : 87) + szs);
var Ozs = String.fromCharCode.apply(null, mzs);
resolve([Azs, Ezs, dzs, Ozs, Lzs, jzs, lzs]);
} else (cYs = nYs), (NYs = bYs);
});
}
}
function getImgURLHash(pageInfo, keyInfo, Zjm) {
function Ojm(kjm, fjm) {
for (var Tjm = fjm.length, Cjm = 0; Cjm < Tjm; Cjm++)
kjm[Cjm] ^= fjm[Cjm];
}
var keyXor = [];
Ojm(keyXor, keyInfo.key1Arr);
Ojm(keyXor, keyInfo.key2Arr);
Ojm(keyXor, keyInfo.key3Arr);
if ("string" != typeof Zjm["configuration"]["file-name-version"]) {
return pageInfo.No + "";
}
return (
(function (wjm, Pjm) {
var Jjm = Pjm.No,
Gjm = parseInt(Jjm, 10);
if (!isNaN(Gjm) && 0 <= Gjm && Gjm < 1152921504606847000) {
var hjm = Gjm.toString(16);
return hjm.length.toString(16) + hjm;
}
return "0" + Jjm;
})(0, pageInfo) +
(function (rjm, njm) {
var bjm,
pjm,
Sjm,
Xjm,
tjm,
Yjm = njm.imgName + "/",
zjm = njm.No + "",
gjm = keyXor,
Bjm = Yjm.length,
Hjm = zjm.length,
Rjm = gjm.length,
D6m = Yjm + zjm,
U6m = Bjm + Hjm,
A6m = Hjm << 1,
L6m = (1 + Bjm) << 1,
j6m = (1 + U6m) << 1,
l6m = new Array(j6m);
for (
pjm = 0, l6m[pjm++] = 0, l6m[pjm++] = 59, bjm = 0;
bjm < U6m;
bjm++
)
(tjm = D6m.charCodeAt(bjm)),
(l6m[pjm++] = tjm >>> 8),
(l6m[pjm++] = 255 & tjm);
for (var v6m = A6m + j6m + j6m, s6m = 3; v6m < 256; s6m++)
v6m += j6m;
var M6m,
m6m,
E6m,
d6m = 1670739,
O6m = 1282576,
k6m = 2237221;
for (bjm = L6m, Sjm = pjm = 0; ; ) {
for (
;
(M6m =
435 * d6m +
((3 & O6m) << 19) +
((4194296 & (k6m ^= l6m[bjm++] ^ gjm[pjm++])) >>> 3) +
((m6m =
435 * O6m +
((7 & k6m) << 18) +
((E6m = 435 * k6m) >>> 22)) >>>
21)),
(k6m = 4194303 & E6m),
(O6m = 2097151 & m6m),
(d6m = 2097151 & M6m),
Rjm <= pjm && (pjm = 0),
!(j6m <= bjm);
);
if (++Sjm >= s6m) break;
bjm = 0;
}
var f6m = new Array(16);
return (
(tjm = (Xjm = (d6m >>> 13) ^ gjm[0]) >>> 4),
(f6m[0] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[1] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = ((d6m >>> 5) & 255) ^ gjm[1]) >>> 4),
(f6m[2] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[3] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = (((31 & d6m) << 3) | (O6m >>> 18)) ^ gjm[2]) >>> 4),
(f6m[4] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[5] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = ((O6m >>> 10) & 255) ^ gjm[3]) >>> 4),
(f6m[6] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[7] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = ((O6m >>> 2) & 255) ^ gjm[4]) >>> 4),
(f6m[8] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[9] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = (((3 & O6m) << 6) | (k6m >>> 16)) ^ gjm[5]) >>> 4),
(f6m[10] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[11] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = ((k6m >>> 8) & 255) ^ gjm[6]) >>> 4),
(f6m[12] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[13] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = (Xjm = (255 & k6m) ^ gjm[7]) >>> 4),
(f6m[14] = (tjm < 10 ? 48 : 87) + tjm),
(tjm = 15 & Xjm),
(f6m[15] = (tjm < 10 ? 48 : 87) + tjm),
String.fromCharCode.apply(null, f6m)
);
})(Zjm, pageInfo)
);
}
function calcU2F(pageInfo, keyInfo) {
var imgName = pageInfo.imgName;
var fileName = pageInfo.No + "";
var U2F = 47;
var i;
for (i = 0; i < imgName.length; i++) {
U2F += imgName.charCodeAt(i);
}
for (i = 0; i < fileName.length; i++) {
U2F += fileName.charCodeAt(i);
}
var keySum = 0;
var keyArr = [keyInfo.key1Arr, keyInfo.key2Arr, keyInfo.key3Arr];
var keyAS3Arr = [];
for (i = 0; i < keyArr.length; i++) {
keyAS3Arr[i] = S03(keyArr[i]);
for (var ii = 0; ii < keyArr[i].length; ii++) {
keySum += keyArr[i][ii];
}
}
var FS3 = pageInfo["NS"];
var IS3 = pageInfo["PS"];
var cS3 = pageInfo["RS"];
U2F += keySum;
var NS3 = 255 & U2F;
NS3 |= NS3 << 8;
var WS3 =
((NS3 |= NS3 << 16) ^ keyAS3Arr[0] ^ Gdq["parseInt"](FS3)) >>> 0,
ZS3 = (NS3 ^ keyAS3Arr[1] ^ Gdq["parseInt"](IS3)) >>> 0,
xS3 = (NS3 ^ keyAS3Arr[2] ^ Gdq["parseInt"](cS3)) >>> 0;
pageInfo["U2F"] = U2F % window["NFBR"]["T8n"]["n2C"];
pageInfo["Q1i"] = WS3;
pageInfo["b0F"] = ZS3;
pageInfo["v5m"] = xS3;
function S03(X03) {
var t03 = 0,
Y03 = -4 & X03.length;
32 < Y03 && (Y03 = 32);
for (var z03 = 0; z03 < Y03; )
(t03 ^= X03[z03++] << 24),
(t03 ^= X03[z03++] << 16),
(t03 ^= X03[z03++] << 8),
(t03 ^= X03[z03++]);
return t03 >>> 0;
}
}
}
/*
client-zip v1.6.2
https://github.com/Touffy/client-zip
*/
function downloadZipInit() {
"stream" in Blob.prototype||Object.defineProperty(Blob.prototype,"stream",{value(){return new Response(this).body}});var e=e=>new DataView(new ArrayBuffer(e)),n=e=>new Uint8Array(e.buffer||e),t=e=>(new TextEncoder).encode(String(e));function r(e,r){if(void 0===r||r instanceof Date||(r=new Date(r)),e instanceof File)return{t:r||new Date(e.lastModified),o:e.stream()};if(e instanceof Response)return{t:r||new Date(e.headers.get("Last-Modified")||Date.now()),o:e.body};if(void 0===r)r=new Date;else if(isNaN(r))throw new Error("Invalid modification date.");if("string"==typeof e)return{t:r,o:t(e)};if(e instanceof Blob)return{t:r,o:e.stream()};if(e instanceof Uint8Array||e instanceof ReadableStream)return{t:r,o:e};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{t:r,o:n(e)};if(Symbol.asyncIterator in e)return{t:r,o:o(e)};throw new TypeError("Unsupported input format.")}function o(e){const n="next"in e?e:e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let t=0;for(;e.desiredSize>t;){const r=await n.next();if(!r.value){e.close();break}{const n=i(r.value);e.enqueue(n),t+=n.byteLength}}},async cancel(e){var t;try{await(null==(t=n.throw)?void 0:t.call(n,e))}catch(e){}}})}function i(e){return"string"==typeof e?t(e):e instanceof Uint8Array?e:n(e)}function a(e,r,o){let[i,a]=function(e){return e?e instanceof Uint8Array?[e,1]:ArrayBuffer.isView(e)||e instanceof ArrayBuffer?[n(e),1]:[t(e),0]:[void 0,0]}(r);if(e instanceof File)return{i:s(i||t(e.name)),u:e.size,l:a};if(e instanceof Response){const n=e.headers.get("content-disposition"),r=n&&n.match(/;\s*filename\*?=["']?(.*?)["']?$/i),f=r&&r[1]||e.url&&new URL(e.url).pathname.split("/").findLast(Boolean),u=f&&decodeURIComponent(f),d=o||+e.headers.get("content-length");return{i:s(i||t(u)),u:d,l:a}}return i=s(i),"string"==typeof e?{i,u:t(e).length,l:a}:e instanceof Blob?{i,u:e.size,l:a}:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?{i,u:e.byteLength,l:a}:{i,u:f(e,o),l:a}}function f(e,n){return n>-1?n:e?void 0:0}function s(e){if(!e||e.every((c=>47===c)))throw new Error("The file must have a name.");for(;47===e[e.length-1];)e=e.subarray(0,-1);return e}var u=new Uint32Array(256);for(let e=0;e<256;++e){let n=e;for(let e=0;e<8;++e)n=n>>>1^(1&n&&3988292384);u[e]=n}function d(e,n=0){n^=-1;for(var t=0,r=e.length;t<r;t++)n=n>>>8^u[255&n^e[t]];return(-1^n)>>>0}function l(e,n,t=0){const r=e.getSeconds()>>1|e.getMinutes()<<5|e.getHours()<<11,o=e.getDate()|e.getMonth()+1<<5|e.getFullYear()-1980<<9;n.setUint16(t,r,1),n.setUint16(t+2,o,1)}function y({i:e,l:n},t){return 8*(!n||(null!=t?t:function(e){try{w.decode(e)}catch(e){return 0}return 1}(e)))}var w=new TextDecoder("utf8",{fatal:1});function p(t,r=0){const o=e(30);return o.setUint32(0,1347093252),o.setUint32(4,335546368|r),l(t.t,o,10),o.setUint16(26,t.i.length,1),n(o)}async function*b(e){let{o:n}=e;if("then"in n&&(n=await n),n instanceof Uint8Array)yield n,e.m=d(n,0),e.u=n.length;else{e.u=0;const t=n.getReader();for(;;){const{value:n,done:r}=await t.read();if(r)break;e.m=d(n,e.m),e.u+=n.length,yield n}}}function B(t){const r=e(16);return r.setUint32(0,1347094280),r.setUint32(4,t.m,1),r.setUint32(8,t.u,1),r.setUint32(12,t.u,1),n(r)}function v(t,r,o=0){const i=e(46);return i.setUint32(0,1347092738),i.setUint32(4,352523264),i.setUint16(8,2048|o),l(t.t,i,12),i.setUint32(16,t.m,1),i.setUint32(20,t.u,1),i.setUint32(24,t.u,1),i.setUint16(28,t.i.length,1),i.setUint16(40,33204,1),i.setUint32(42,r,1),n(i)}function D(e){return e instanceof File||e instanceof Response?[[e],[e]]:[[e.input,e.name,e.size],[e.input,e.lastModified]]}var h=e=>function(e){var n;let t=22;for(const r of e){if(!r.i)throw new Error("Every file must have a non-empty name.");if(isNaN(null!=(n=r.u)?n:NaN))throw new Error(`Missing size for file "${(new TextDecoder).decode(r.i)}".`);t+=2*r.i.length+r.u+92}return t}(function*(e){for(const n of e)yield a(...D(n)[0])}(e));function N(t,i={}){const f={"Content-Type":"application/zip","Content-Disposition":"attachment"};return Number.isInteger(i.length)&&i.length>0&&(f["Content-Length"]=i.length),i.metadata&&(f["Content-Length"]=h(i.metadata)),new Response(o(async function*(t,r){const o=[];let i=0,a=0;for await(const e of t){const n=y(e,r.buffersAreUTF8);yield p(e,n),yield e.i,yield*b(e),yield B(e),o.push(v(e,i,n)),o.push(e.i),a++,i+=46+e.i.length+e.u}let f=0;for(const e of o)yield e,f+=e.length;const s=e(22);s.setUint32(0,1347093766),s.setUint16(8,a,1),s.setUint16(10,a,1),s.setUint32(12,f,1),s.setUint32(16,i,1),yield n(s)}(async function*(e){for await(const n of e){const[e,t]=D(n);yield Object.assign(r(...t),a(...e))}}(t),i)),{headers:f})};
return N;
}
})();