🏠 Home 

Greasy Fork is available in English.

FA Watches Favorites Viewer

Scans the Favorites of your Watches for new Favorites and shows a Button to view these (if any where found). (Works like Submission Page)

// ==UserScript==
// @name        FA Watches Favorites Viewer
// @namespace   Violentmonkey Scripts
// @match       *://*.furaffinity.net/*
// @require     https://update.greasyfork.org/scripts/525666/1549449/Furaffinity-Prototype-Extensions.js
// @require     https://update.greasyfork.org/scripts/483952/1549453/Furaffinity-Request-Helper.js
// @require     https://update.greasyfork.org/scripts/485827/1549457/Furaffinity-Match-List.js
// @require     https://update.greasyfork.org/scripts/528997/1549467/Furaffinity-Message-Box.js
// @require     https://update.greasyfork.org/scripts/476762/1549463/Furaffinity-Custom-Pages.js
// @require     https://update.greasyfork.org/scripts/475041/1550020/Furaffinity-Custom-Settings.js
// @grant       GM_info
// @version     3.0.2
// @author      Midori Dragon
// @description Scans the Favorites of your Watches for new Favorites and shows a Button to view these (if any where found). (Works like Submission Page)
// @icon        https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png
// @license     MIT
// @homepageURL https://greasyfork.org/scripts/463464-fa-watches-favorites-viewer
// @supportURL  https://greasyfork.org/scripts/463464-fa-watches-favorites-viewer/feedback
// ==/UserScript==
// jshint esversion: 8
(() => {
"use strict";
var __webpack_modules__ = {
988: (module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.d(__webpack_exports__, {
A: () => __WEBPACK_DEFAULT_EXPORT__
});
var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(601), _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__), _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314), ___CSS_LOADER_EXPORT___ = __webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());
___CSS_LOADER_EXPORT___.push([ module.id, ".wfv-watch-container {\n    position: relative;\n    display: inline-block;\n}\n\n.wfv-watch-container img {\n    display: block;\n    width: 100%;\n    transition: opacity 0.2s ease;\n}\n\n.wfv-watch-container .wfv-ignore-text {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    color: white;\n    font-size: 20px;\n    font-weight: bold;\n    opacity: 0;\n    transition: opacity 0.2s ease;\n}\n\n.wfv-watch-container:hover img {\n    opacity: 0.5;\n}\n\n.wfv-watch-container:hover .wfv-ignore-text {\n    opacity: 1;\n}\n\n.wfv-watch-container.ignored img {\n    opacity: 0.2;\n}\n\n.wfv-watch-container.ignored:hover img {\n    opacity: 0.5;\n}\n", "" ]);
const __WEBPACK_DEFAULT_EXPORT__ = ___CSS_LOADER_EXPORT___;
},
978: (module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.d(__webpack_exports__, {
A: () => __WEBPACK_DEFAULT_EXPORT__
});
var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(601), _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__), _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314), ___CSS_LOADER_EXPORT___ = __webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());
___CSS_LOADER_EXPORT___.push([ module.id, '/* Base styles */\n.message-box-overlay {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0, 0, 0, 0.5);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    z-index: 9999;\n}\n\n/* Dark theme (default) */\n.message-box-container {\n    border: 1px solid #444;\n    border-radius: 5px;\n    padding: 20px;\n    max-width: 500px;\n    width: 100%;\n    font-family: Arial, sans-serif;\n    transition: background-color 0.3s, color 0.3s, border-color 0.3s, box-shadow 0.3s;\n}\n\n.message-box-header {\n    display: flex;\n    align-items: center;\n    margin-bottom: 15px;\n}\n\n.message-box-icon-container {\n    margin-right: 15px;\n    width: 32px;\n    height: 32px;\n    flex-shrink: 0;\n}\n\n.message-box-title {\n    font-size: 18px;\n    font-weight: bold;\n    margin: 0;\n    transition: color 0.3s;\n}\n\n.message-box-content {\n    margin-bottom: 20px;\n    line-height: 1.5;\n    transition: color 0.3s;\n}\n\n.message-box-button-container {\n    display: flex;\n    justify-content: flex-end;\n    gap: 10px;\n}\n\n.message-box-button {\n    padding: 8px 16px;\n    border: none;\n    border-radius: 4px;\n    cursor: pointer;\n    font-size: 14px;\n    font-weight: bold;\n    background-color: #f1efeb;\n    transition: background-color 0.2s, color 0.2s, border-color 0.2s;\n}\n\n.message-box-button:hover {\n    background-color: #e0ded8;\n}\n\n/* Theme: Dark */\nbody[class*="theme-dark"] .message-box-container {\n    background-color: #353b45;\n    border-color: #444;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n}\n\nbody[class*="theme-dark"] .message-box-button {\n    background-color: #434b5b;\n}\n\nbody[class*="theme-dark"] .message-box-button:hover {\n    background-color: #576175;\n}\n\n/* Theme: Aurora */\nbody[class*="theme-aurora"] .message-box-container {\n    background-color: #262931;\n    border-color: #444;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n}\n\nbody[class*="theme-aurora"] .message-box-button {\n    background-color: #65707c;\n}\n\nbody[class*="theme-aurora"] .message-box-button:hover {\n    background-color: #8692a0;\n}\n\n/* Theme: Retro */\nbody[class*="theme-retro"] .message-box-container {\n    background-color: #2e3b41;\n    border-color: #444;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n}\n\nbody[class*="theme-retro"] .message-box-button {\n    background-color: #4c585e;\n}\n\nbody[class*="theme-retro"] .message-box-button:hover {\n    background-color: #7b909a;\n}\n\n/* Theme: Slate */\nbody[class*="theme-slate"] .message-box-container {\n    background-color: #202225;\n    border-color: #444;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n}\n\nbody[class*="theme-slate"] .message-box-button {\n    background-color: #8c8c8c;\n}\n\nbody[class*="theme-slate"] .message-box-button:hover {\n    background-color: #b3b1b1;\n}\n\n/* Theme: Light - already defined in base styles */\nbody[class*="theme-light"] .message-box-container {\n    background-color: #f7f7f7;\n    border-color: #ccc;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n}\n\nbody[class*="theme-light"] .message-box-button {\n    background-color: #f1efeb;\n}\n\nbody[class*="theme-light"] .message-box-button:hover {\n    background-color: #f1ede7;\n}\n', "" ]);
const __WEBPACK_DEFAULT_EXPORT__ = ___CSS_LOADER_EXPORT___;
},
314: module => {
module.exports = function(cssWithMappingToString) {
var list = [];
list.toString = function toString() {
return this.map((function(item) {
var content = "", needLayer = void 0 !== item[5];
if (item[4]) content += "@supports (".concat(item[4], ") {");
if (item[2]) content += "@media ".concat(item[2], " {");
if (needLayer) content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
content += cssWithMappingToString(item);
if (needLayer) content += "}";
if (item[2]) content += "}";
if (item[4]) content += "}";
return content;
})).join("");
};
list.i = function i(modules, media, dedupe, supports, layer) {
if ("string" == typeof modules) modules = [ [ null, modules, void 0 ] ];
var alreadyImportedModules = {};
if (dedupe) for (var k = 0; k < this.length; k++) {
var id = this[k][0];
if (null != id) alreadyImportedModules[id] = true;
}
for (var _k = 0; _k < modules.length; _k++) {
var item = [].concat(modules[_k]);
if (!dedupe || !alreadyImportedModules[item[0]]) {
if (void 0 !== layer) if (void 0 === item[5]) item[5] = layer; else {
item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
item[5] = layer;
}
if (media) if (!item[2]) item[2] = media; else {
item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
item[2] = media;
}
if (supports) if (!item[4]) item[4] = "".concat(supports); else {
item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
item[4] = supports;
}
list.push(item);
}
}
};
return list;
};
},
601: module => {
module.exports = function(i) {
return i[1];
};
},
72: module => {
var stylesInDOM = [];
function getIndexByIdentifier(identifier) {
for (var r###lt = -1, i = 0; i < stylesInDOM.length; i++) if (stylesInDOM[i].identifier === identifier) {
r###lt = i;
break;
}
return r###lt;
}
function modulesToDom(list, options) {
for (var idCountMap = {}, identifiers = [], i = 0; i < list.length; i++) {
var item = list[i], id = options.base ? item[0] + options.base : item[0], count = idCountMap[id] || 0, identifier = "".concat(id, " ").concat(count);
idCountMap[id] = count + 1;
var indexByIdentifier = getIndexByIdentifier(identifier), obj = {
css: item[1],
media: item[2],
sourceMap: item[3],
supports: item[4],
layer: item[5]
};
if (-1 !== indexByIdentifier) {
stylesInDOM[indexByIdentifier].references++;
stylesInDOM[indexByIdentifier].updater(obj);
} else {
var updater = addElementStyle(obj, options);
options.byIndex = i;
stylesInDOM.splice(i, 0, {
identifier,
updater,
references: 1
});
}
identifiers.push(identifier);
}
return identifiers;
}
function addElementStyle(obj, options) {
var api = options.domAPI(options);
api.update(obj);
return function updater(newObj) {
if (newObj) {
if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) return;
api.update(obj = newObj);
} else api.remove();
};
}
module.exports = function(list, options) {
var lastIdentifiers = modulesToDom(list = list || [], options = options || {});
return function update(newList) {
newList = newList || [];
for (var i = 0; i < lastIdentifiers.length; i++) {
var index = getIndexByIdentifier(lastIdentifiers[i]);
stylesInDOM[index].references--;
}
for (var newLastIdentifiers = modulesToDom(newList, options), _i = 0; _i < lastIdentifiers.length; _i++) {
var _index = getIndexByIdentifier(lastIdentifiers[_i]);
if (0 === stylesInDOM[_index].references) {
stylesInDOM[_index].updater();
stylesInDOM.splice(_index, 1);
}
}
lastIdentifiers = newLastIdentifiers;
};
};
},
659: module => {
var memo = {};
module.exports = function insertBySelector(insert, style) {
var target = function getTarget(target) {
if (void 0 === memo[target]) {
var styleTarget = document.querySelector(target);
if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) try {
styleTarget = styleTarget.contentDocument.head;
} catch (e) {
styleTarget = null;
}
memo[target] = styleTarget;
}
return memo[target];
}(insert);
if (!target) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
target.appendChild(style);
};
},
540: module => {
module.exports = function insertStyleElement(options) {
var element = document.createElement("style");
options.setAttributes(element, options.attributes);
options.insert(element, options.options);
return element;
};
},
56: (module, __unused_webpack_exports, __webpack_require__) => {
module.exports = function setAttributesWithoutAttributes(styleElement) {
var nonce = true ? __webpack_require__.nc : 0;
if (nonce) styleElement.setAttribute("nonce", nonce);
};
},
825: module => {
module.exports = function domAPI(options) {
if ("undefined" == typeof document) return {
update: function update() {},
remove: function remove() {}
};
var styleElement = options.insertStyleElement(options);
return {
update: function update(obj) {
!function apply(styleElement, options, obj) {
var css = "";
if (obj.supports) css += "@supports (".concat(obj.supports, ") {");
if (obj.media) css += "@media ".concat(obj.media, " {");
var needLayer = void 0 !== obj.layer;
if (needLayer) css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
css += obj.css;
if (needLayer) css += "}";
if (obj.media) css += "}";
if (obj.supports) css += "}";
var sourceMap = obj.sourceMap;
if (sourceMap && "undefined" != typeof btoa) css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
options.styleTagTransform(css, styleElement, options.options);
}(styleElement, options, obj);
},
remove: function remove() {
!function removeStyleElement(styleElement) {
if (null === styleElement.parentNode) return false;
styleElement.parentNode.removeChild(styleElement);
}(styleElement);
}
};
};
},
113: module => {
module.exports = function styleTagTransform(css, styleElement) {
if (styleElement.styleSheet) styleElement.styleSheet.cssText = css; else {
for (;styleElement.firstChild; ) styleElement.removeChild(styleElement.firstChild);
styleElement.appendChild(document.createTextNode(css));
}
};
}
}, __webpack_module_cache__ = {};
function __webpack_require__(moduleId) {
var cachedModule = __webpack_module_cache__[moduleId];
if (void 0 !== cachedModule) return cachedModule.exports;
var module = __webpack_module_cache__[moduleId] = {
id: moduleId,
exports: {}
};
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
return module.exports;
}
__webpack_require__.n = module => {
var getter = module && module.__esModule ? () => module.default : () => module;
__webpack_require__.d(getter, {
a: getter
});
return getter;
};
__webpack_require__.d = (exports, definition) => {
for (var key in definition) if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
enumerable: true,
get: definition[key]
});
};
__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
__webpack_require__.nc = void 0;
var LogLevel;
__webpack_require__.d({}, {
_d: () => loadingSpinSpeedSetting,
bJ: () => maxFavsAmountSetting,
uL: () => requestHelper,
lP: () => showDublicateFavsSetting,
fz: () => showFavFromWatcherSetting
});
function getWatchesFromPage(page) {
try {
const watchList = [], pageSectionBody = page.getElementById("columnpage").querySelector('div[class="section-body"]'), watches = pageSectionBody.querySelector('div[class="flex-watchlist"]').querySelectorAll('div[class="flex-item-watchlist aligncenter"]');
for (const watch of Array.from(watches).map((elem => elem))) watchList.push(watch);
return watchList;
} catch (_a) {
return [];
}
}
class GMInfo {
static isBrowserEnvironment() {
return "undefined" != typeof browser && void 0 !== browser.runtime || "undefined" != typeof chrome && void 0 !== chrome.runtime;
}
static getBrowserAPI() {
if ("undefined" != typeof GM_info && null != GM_info) return GM_info; else if ("undefined" != typeof browser && void 0 !== browser.runtime) return browser; else if ("undefined" != typeof chrome && void 0 !== chrome.runtime) return chrome; else throw new Error("Unsupported browser for SyncedStorage.");
}
static get scriptName() {
if (GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().runtime.getManifest().name; else return GMInfo.getBrowserAPI().script.name;
}
static get scriptVersion() {
if (GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().runtime.getManifest().version; else return GMInfo.getBrowserAPI().script.version;
}
static get scriptDescription() {
if (GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().runtime.getManifest().description; else return GMInfo.getBrowserAPI().script.description;
}
static get scriptAuthor() {
if (GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().runtime.getManifest().author; else return GMInfo.getBrowserAPI().script.author;
}
static get scriptNamespace() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().script.namespace;
}
static get scriptSource() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().script.source;
}
static get scriptIcon() {
if (GMInfo.isBrowserEnvironment()) {
const manifest = GMInfo.getBrowserAPI().runtime.getManifest();
let largestIcon = 0;
for (const key of Object.keys(manifest.icons)) {
const size = parseInt(key);
if (size > largestIcon) largestIcon = size;
}
return manifest.icons[largestIcon.toString()];
} else return GMInfo.getBrowserAPI().script.icon;
}
static get scriptIcon64() {
if (GMInfo.isBrowserEnvironment()) {
const manifest = GMInfo.getBrowserAPI().runtime.getManifest();
return null == manifest.icons ? void 0 : manifest.icons[64];
} else return GMInfo.getBrowserAPI().script.icon64;
}
static get scriptAntifeature() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().script.antifeature;
}
static get scriptOptions() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().script.options;
}
static get scriptMetaStr() {
if (GMInfo.isBrowserEnvironment()) return JSON.stringify(GMInfo.getBrowserAPI().runtime.getManifest()); else return GMInfo.getBrowserAPI().scriptMetaStr;
}
static get scriptHandler() {
if (GMInfo.isBrowserEnvironment()) return "undefined" != typeof browser ? "Firefox" : "Chrome"; else return GMInfo.getBrowserAPI().scriptHandler;
}
static get scriptUpdateURL() {
if (GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().runtime.getManifest().update_url; else return GMInfo.getBrowserAPI().scriptUpdateURL;
}
static get scriptWillUpdate() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().scriptWillUpdate;
}
static get scriptResources() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().scriptResources;
}
static get downloadMode() {
if (!GMInfo.isBrowserEnvironment()) return GMInfo.getBrowserAPI().downloadMode;
}
}
!function(LogLevel) {
LogLevel[LogLevel.Error = 1] = "Error";
LogLevel[LogLevel.Warning = 2] = "Warning";
LogLevel[LogLevel.Info = 3] = "Info";
}(LogLevel || (LogLevel = {}));
class Logger {
static log(logLevel = LogLevel.Warning, ...args) {
if (null == window.__FF_GLOBAL_LOG_LEVEL__) window.__FF_GLOBAL_LOG_LEVEL__ = LogLevel.Error;
if (!(logLevel > window.__FF_GLOBAL_LOG_LEVEL__)) switch (logLevel) {
case LogLevel.Error:
console.error(...args);
break;
case LogLevel.Warning:
console.warn(...args);
break;
case LogLevel.Info:
console.log(...args);
}
}
static setLogLevel(logLevel) {
window.__FF_GLOBAL_LOG_LEVEL__ = logLevel;
}
static logError(...args) {
Logger.log(LogLevel.Error, ...args);
}
static logWarning(...args) {
Logger.log(LogLevel.Warning, ...args);
}
static logInfo(...args) {
Logger.log(LogLevel.Info, ...args);
}
}
var __awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class SyncedStorage {
static setItem(key, value) {
return __awaiter(this, void 0, void 0, (function*() {
if (!GMInfo.isBrowserEnvironment()) {
Logger.logWarning("SyncedStorage is only available in browser extensions.");
return;
}
Logger.logInfo(`Setting item in synced storage: ${key}=${value}`);
const api = GMInfo.getBrowserAPI();
if (null != api.storage) return new Promise(((resolve, reject) => {
api.storage.sync.set({
[key]: value
}, (() => {
if (null != api.runtime.lastError) return reject(api.runtime.lastError);
resolve();
}));
})); else Logger.logError("Unsupported storage API.");
}));
}
static getItem(key) {
return __awaiter(this, void 0, void 0, (function*() {
if (!GMInfo.isBrowserEnvironment()) {
Logger.logWarning("SyncedStorage is only available in browser extensions.");
return;
}
Logger.logInfo(`Getting item from synced storage: ${key}`);
const api = GMInfo.getBrowserAPI();
if (null != api.storage) return new Promise(((resolve, reject) => {
api.storage.sync.get(key, (r###lt => {
if (null != api.runtime.lastError) return reject(api.runtime.lastError);
resolve(r###lt[key]);
}));
})); else Logger.logError("Unsupported storage API.");
}));
}
static removeItem(key) {
return __awaiter(this, void 0, void 0, (function*() {
if (!GMInfo.isBrowserEnvironment()) {
Logger.logWarning("SyncedStorage is only available in browser extensions.");
return;
}
Logger.logInfo(`Removing item from synced storage: ${key}`);
const api = GMInfo.getBrowserAPI();
if (null != api.storage) return new Promise(((resolve, reject) => {
api.storage.sync.remove(key, (() => {
if (null != api.runtime.lastError) return reject(api.runtime.lastError);
resolve();
}));
})); else Logger.logError("Unsupported storage API.");
}));
}
}
var StorageWrapper_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class StorageWrapper {
static setItemAsync(key, value) {
return StorageWrapper_awaiter(this, void 0, void 0, (function*() {
yield SyncedStorage.setItem(key, value);
localStorage.setItem(key, value);
}));
}
static getItemAsync(key) {
return StorageWrapper_awaiter(this, void 0, void 0, (function*() {
const valueSynced = yield SyncedStorage.getItem(key), valueLocal = localStorage.getItem(key);
if (valueSynced === valueLocal) return valueSynced; else return null != valueSynced ? valueSynced : valueLocal;
}));
}
static removeItemAsync(key) {
return StorageWrapper_awaiter(this, void 0, void 0, (function*() {
yield SyncedStorage.removeItem(key);
localStorage.removeItem(key);
}));
}
}
var IgnoreList_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class IgnoreList {
static add(username) {
return IgnoreList_awaiter(this, void 0, void 0, (function*() {
var _a;
const usernames = null !== (_a = yield this.getIgnoreList()) && void 0 !== _a ? _a : [];
if (usernames.includes(username)) return;
usernames.push(username);
const json = JSON.stringify(usernames);
yield StorageWrapper.setItemAsync(this.id, json);
}));
}
static remove(username) {
return IgnoreList_awaiter(this, void 0, void 0, (function*() {
var _a;
const usernames = null !== (_a = yield this.getIgnoreList()) && void 0 !== _a ? _a : [];
if (!usernames.includes(username)) return;
usernames.splice(usernames.indexOf(username), 1);
if (0 === usernames.length) {
yield StorageWrapper.removeItemAsync(this.id);
return;
}
const json = JSON.stringify(usernames);
yield StorageWrapper.setItemAsync(this.id, json);
}));
}
static isIgnored(username) {
return IgnoreList_awaiter(this, void 0, void 0, (function*() {
var _a;
const usernames = yield this.getIgnoreList();
return null !== (_a = null == usernames ? void 0 : usernames.includes(username)) && void 0 !== _a ? _a : false;
}));
}
static setIgnoreList(usernames) {
return IgnoreList_awaiter(this, void 0, void 0, (function*() {
if (0 === usernames.length) {
yield StorageWrapper.removeItemAsync(this.id);
return;
}
const json = JSON.stringify(usernames);
yield StorageWrapper.setItemAsync(this.id, json);
}));
}
static getIgnoreList() {
return IgnoreList_awaiter(this, void 0, void 0, (function*() {
var _a;
const json = null !== (_a = yield StorageWrapper.getItemAsync(this.id)) && void 0 !== _a ? _a : "[]";
return JSON.parse(json);
}));
}
}
IgnoreList.id = "wfv-ignore-list";
var injectStylesIntoStyleTag = __webpack_require__(72), injectStylesIntoStyleTag_default = __webpack_require__.n(injectStylesIntoStyleTag), styleDomAPI = __webpack_require__(825), styleDomAPI_default = __webpack_require__.n(styleDomAPI), insertBySelector = __webpack_require__(659), insertBySelector_default = __webpack_require__.n(insertBySelector), setAttributesWithoutAttributes = __webpack_require__(56), setAttributesWithoutAttributes_default = __webpack_require__.n(setAttributesWithoutAttributes), insertStyleElement = __webpack_require__(540), insertStyleElement_default = __webpack_require__.n(insertStyleElement), styleTagTransform = __webpack_require__(113), styleTagTransform_default = __webpack_require__.n(styleTagTransform), Style = __webpack_require__(988), options = {};
options.styleTagTransform = styleTagTransform_default();
options.setAttributes = setAttributesWithoutAttributes_default();
options.insert = insertBySelector_default().bind(null, "head");
options.domAPI = styleDomAPI_default();
options.insertStyleElement = insertStyleElement_default();
injectStylesIntoStyleTag_default()(Style.A, options);
Style.A && Style.A.locals && Style.A.locals;
var BuddyListManager_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class BuddyListManager {
constructor() {
this.watchList = [];
window.dispatchEvent(new CustomEvent("ig-stop-detection"));
const columnPage = document.getElementById("columnpage");
this.sectionBody = columnPage.querySelector('div[class="section-body"]');
this.sectionBody.innerHTML = "";
this.showBuddyList();
}
showBuddyList() {
return BuddyListManager_awaiter(this, void 0, void 0, (function*() {
const loadingSpinner = new window.FALoadingSpinner(this.sectionBody);
loadingSpinner.delay = loadingSpinSpeedSetting.value;
loadingSpinner.spinnerThickness = 6;
loadingSpinner.visible = true;
const watchesPages = yield requestHelper.PersonalUserRequests.ManageContent.getAllWatchesPages(), watchesToRemove = [];
for (const watchesPage of watchesPages) {
const watches = getWatchesFromPage(watchesPage);
for (const watch of watches) {
if (!(yield this.editWatchElem(watch))) watchesToRemove.push(watch);
}
watchesToRemove.forEach((watch => watch.remove()));
this.watchList.push(...watches);
}
loadingSpinner.visible = false;
const flexWatchList = document.createElement("div");
flexWatchList.classList.add("flex-watchlist");
this.sectionBody.appendChild(document.createElement("br"));
this.sectionBody.appendChild(flexWatchList);
flexWatchList.append(...this.watchList);
}));
}
editWatchElem(watchElem) {
return BuddyListManager_awaiter(this, void 0, void 0, (function*() {
const imgElem = watchElem.querySelector("img[alt]");
if (null == imgElem) return false;
const username = imgElem.getAttribute("alt"), ignored = yield IgnoreList.isIgnored(username), ignoreText = document.createElement("span");
ignoreText.classList.add("wfv-ignore-text");
ignoreText.addEventListener("click", (() => {
this.handleIgnoreClick(watchElem);
}));
imgElem.insertAfterThis(ignoreText);
const flexItemWatchlistAvatar = watchElem.querySelector('div[class*="flex-item-watchlist-avatar"]');
flexItemWatchlistAvatar.classList.add("wfv-watch-container");
flexItemWatchlistAvatar.style.cursor = "pointer";
imgElem.addEventListener("click", (() => {
this.handleIgnoreClick(watchElem);
}));
const hrefElements = watchElem.querySelectorAll("a[href]");
if (null != hrefElements) for (const hrefElement of Array.from(hrefElements)) hrefElement.removeAttribute("href");
const removeElement = watchElem.querySelector('a[class*="remove-link"]');
null == removeElement || removeElement.remove();
watchElem.appendChild(document.createElement("br"));
this.watchElemSetIgnoreStatus(watchElem, ignored);
return true;
}));
}
watchElemSetIgnoreStatus(watchElem, ignored) {
watchElem.querySelector('span[class*="wfv-ignore-text"]').textContent = ignored ? "Include" : "Ignore";
watchElem.querySelector('div[class*="flex-item-watchlist-avatar"]').classList.toggle("ignored", ignored);
const displayName = watchElem.querySelector('div[class*="flex-item-watchlist-controls"]').querySelector("span[title]");
displayName.style.textDecoration = ignored ? "line-through" : "none";
displayName.style.backgroundColor = ignored ? "rgba(255, 0, 0, 0.2)" : "transparent";
}
handleIgnoreClick(watchElem) {
return BuddyListManager_awaiter(this, void 0, void 0, (function*() {
const username = watchElem.querySelector("img[alt]").getAttribute("alt"), ignored = yield IgnoreList.isIgnored(username);
if (ignored) IgnoreList.remove(username); else IgnoreList.add(username);
this.watchElemSetIgnoreStatus(watchElem, !ignored);
}));
}
}
function checkTags(element) {
var _a;
if (!("1" === document.body.getAttribute("data-user-logged-in"))) {
Logger.logWarning("User is not logged in, skipping tag check");
setBlockedState(element, false);
return;
}
const tagsHideMissingTags = "1" === document.body.getAttribute("data-tag-blocklist-hide-tagless"), tags = null === (_a = element.getAttribute("data-tags")) || void 0 === _a ? void 0 : _a.trim().split(/\s+/);
let blockReason = "";
if (null != tags && tags.length > 0 && "" !== tags[0]) {
const blockedTags = function getBannedTags(tags) {
var _a;
const blockedTags = null !== (_a = document.body.getAttribute("data-tag-blocklist")) && void 0 !== _a ? _a : "", tagsBlocklist = Array.from(blockedTags.split(" "));
let bTags = [];
if (null == tags || 0 === tags.length) return [];
for (const tag of tags) for (const blockedTag of tagsBlocklist) if (tag === blockedTag) bTags.push(blockedTag);
return [ ...new Set(bTags) ];
}(tags);
if (blockedTags.length <= 0) setBlockedState(element, false); else {
setBlockedState(element, true);
Logger.logInfo(`${element.id} blocked tags: ${blockedTags.join(", ")}`);
blockReason = "Blocked tags:\n";
for (const tag of blockedTags) blockReason += "• " + tag + "\n";
}
} else {
setBlockedState(element, tagsHideMissingTags);
if (tagsHideMissingTags) blockReason = "Content is missing tags.";
}
if ("" !== blockReason && "submissionImg" !== element.id) element.setAttribute("title", blockReason);
}
function setBlockedState(element, isBlocked) {
element.classList[isBlocked ? "add" : "remove"]("blocked-content");
}
function zero$1(buf) {
let len = buf.length;
for (;--len >= 0; ) buf[len] = 0;
}
const extra_lbits = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ]), extra_dbits = new Uint8Array([ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ]), extra_blbits = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 ]), bl_order = new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]), static_ltree = new Array(576);
zero$1(static_ltree);
const static_dtree = new Array(60);
zero$1(static_dtree);
const _dist_code = new Array(512);
zero$1(_dist_code);
const _length_code = new Array(256);
zero$1(_length_code);
const base_length = new Array(29);
zero$1(base_length);
const base_dist = new Array(30);
zero$1(base_dist);
function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
this.static_tree = static_tree;
this.extra_bits = extra_bits;
this.extra_base = extra_base;
this.elems = elems;
this.max_length = max_length;
this.has_stree = static_tree && static_tree.length;
}
let static_l_desc, static_d_desc, static_bl_desc;
function TreeDesc(dyn_tree, stat_desc) {
this.dyn_tree = dyn_tree;
this.max_code = 0;
this.stat_desc = stat_desc;
}
const d_code = dist => dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)], put_short = (s, w) => {
s.pending_buf[s.pending++] = 255 & w;
s.pending_buf[s.pending++] = w >>> 8 & 255;
}, send_bits = (s, value, length) => {
if (s.bi_valid > 16 - length) {
s.bi_buf |= value << s.bi_valid & 65535;
put_short(s, s.bi_buf);
s.bi_buf = value >> 16 - s.bi_valid;
s.bi_valid += length - 16;
} else {
s.bi_buf |= value << s.bi_valid & 65535;
s.bi_valid += length;
}
}, send_code = (s, c, tree) => {
send_bits(s, tree[2 * c], tree[2 * c + 1]);
}, bi_reverse = (code, len) => {
let res = 0;
do {
res |= 1 & code;
code >>>= 1;
res <<= 1;
} while (--len > 0);
return res >>> 1;
}, gen_codes = (tree, max_code, bl_count) => {
const next_code = new Array(16);
let bits, n, code = 0;
for (bits = 1; bits <= 15; bits++) {
code = code + bl_count[bits - 1] << 1;
next_code[bits] = code;
}
for (n = 0; n <= max_code; n++) {
let len = tree[2 * n + 1];
if (0 !== len) tree[2 * n] = bi_reverse(next_code[len]++, len);
}
}, init_block = s => {
let n;
for (n = 0; n < 286; n++) s.dyn_ltree[2 * n] = 0;
for (n = 0; n < 30; n++) s.dyn_dtree[2 * n] = 0;
for (n = 0; n < 19; n++) s.bl_tree[2 * n] = 0;
s.dyn_ltree[512] = 1;
s.opt_len = s.static_len = 0;
s.sym_next = s.matches = 0;
}, bi_windup = s => {
if (s.bi_valid > 8) put_short(s, s.bi_buf); else if (s.bi_valid > 0) s.pending_buf[s.pending++] = s.bi_buf;
s.bi_buf = 0;
s.bi_valid = 0;
}, smaller = (tree, n, m, depth) => {
const _n2 = 2 * n, _m2 = 2 * m;
return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m];
}, pqdownheap = (s, tree, k) => {
const v = s.heap[k];
let j = k << 1;
for (;j <= s.heap_len; ) {
if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) j++;
if (smaller(tree, v, s.heap[j], s.depth)) break;
s.heap[k] = s.heap[j];
k = j;
j <<= 1;
}
s.heap[k] = v;
}, compress_block = (s, ltree, dtree) => {
let dist, lc, code, extra, sx = 0;
if (0 !== s.sym_next) do {
dist = 255 & s.pending_buf[s.sym_buf + sx++];
dist += (255 & s.pending_buf[s.sym_buf + sx++]) << 8;
lc = s.pending_buf[s.sym_buf + sx++];
if (0 === dist) send_code(s, lc, ltree); else {
code = _length_code[lc];
send_code(s, code + 256 + 1, ltree);
extra = extra_lbits[code];
if (0 !== extra) {
lc -= base_length[code];
send_bits(s, lc, extra);
}
dist--;
code = d_code(dist);
send_code(s, code, dtree);
extra = extra_dbits[code];
if (0 !== extra) {
dist -= base_dist[code];
send_bits(s, dist, extra);
}
}
} while (sx < s.sym_next);
send_code(s, 256, ltree);
}, build_tree = (s, desc) => {
const tree = desc.dyn_tree, stree = desc.stat_desc.static_tree, has_stree = desc.stat_desc.has_stree, elems = desc.stat_desc.elems;
let n, m, node, max_code = -1;
s.heap_len = 0;
s.heap_max = 573;
for (n = 0; n < elems; n++) if (0 !== tree[2 * n]) {
s.heap[++s.heap_len] = max_code = n;
s.depth[n] = 0;
} else tree[2 * n + 1] = 0;
for (;s.heap_len < 2; ) {
node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
tree[2 * node] = 1;
s.depth[node] = 0;
s.opt_len--;
if (has_stree) s.static_len -= stree[2 * node + 1];
}
desc.max_code = max_code;
for (n = s.heap_len >> 1; n >= 1; n--) pqdownheap(s, tree, n);
node = elems;
do {
n = s.heap[1];
s.heap[1] = s.heap[s.heap_len--];
pqdownheap(s, tree, 1);
m = s.heap[1];
s.heap[--s.heap_max] = n;
s.heap[--s.heap_max] = m;
tree[2 * node] = tree[2 * n] + tree[2 * m];
s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
tree[2 * n + 1] = tree[2 * m + 1] = node;
s.heap[1] = node++;
pqdownheap(s, tree, 1);
} while (s.heap_len >= 2);
s.heap[--s.heap_max] = s.heap[1];
((s, desc) => {
const tree = desc.dyn_tree, max_code = desc.max_code, stree = desc.stat_desc.static_tree, has_stree = desc.stat_desc.has_stree, extra = desc.stat_desc.extra_bits, base = desc.stat_desc.extra_base, max_length = desc.stat_desc.max_length;
let h, n, m, bits, xbits, f, overflow = 0;
for (bits = 0; bits <= 15; bits++) s.bl_count[bits] = 0;
tree[2 * s.heap[s.heap_max] + 1] = 0;
for (h = s.heap_max + 1; h < 573; h++) {
n = s.heap[h];
bits = tree[2 * tree[2 * n + 1] + 1] + 1;
if (bits > max_length) {
bits = max_length;
overflow++;
}
tree[2 * n + 1] = bits;
if (!(n > max_code)) {
s.bl_count[bits]++;
xbits = 0;
if (n >= base) xbits = extra[n - base];
f = tree[2 * n];
s.opt_len += f * (bits + xbits);
if (has_stree) s.static_len += f * (stree[2 * n + 1] + xbits);
}
}
if (0 !== overflow) {
do {
bits = max_length - 1;
for (;0 === s.bl_count[bits]; ) bits--;
s.bl_count[bits]--;
s.bl_count[bits + 1] += 2;
s.bl_count[max_length]--;
overflow -= 2;
} while (overflow > 0);
for (bits = max_length; 0 !== bits; bits--) {
n = s.bl_count[bits];
for (;0 !== n; ) {
m = s.heap[--h];
if (!(m > max_code)) {
if (tree[2 * m + 1] !== bits) {
s.opt_len += (bits - tree[2 * m + 1]) * tree[2 * m];
tree[2 * m + 1] = bits;
}
n--;
}
}
}
}
})(s, desc);
gen_codes(tree, max_code, s.bl_count);
}, scan_tree = (s, tree, max_code) => {
let n, curlen, prevlen = -1, nextlen = tree[1], count = 0, max_count = 7, min_count = 4;
if (0 === nextlen) {
max_count = 138;
min_count = 3;
}
tree[2 * (max_code + 1) + 1] = 65535;
for (n = 0; n <= max_code; n++) {
curlen = nextlen;
nextlen = tree[2 * (n + 1) + 1];
if (!(++count < max_count && curlen === nextlen)) {
if (count < min_count) s.bl_tree[2 * curlen] += count; else if (0 !== curlen) {
if (curlen !== prevlen) s.bl_tree[2 * curlen]++;
s.bl_tree[32]++;
} else if (count <= 10) s.bl_tree[34]++; else s.bl_tree[36]++;
count = 0;
prevlen = curlen;
if (0 === nextlen) {
max_count = 138;
min_count = 3;
} else if (curlen === nextlen) {
max_count = 6;
min_count = 3;
} else {
max_count = 7;
min_count = 4;
}
}
}
}, send_tree = (s, tree, max_code) => {
let n, curlen, prevlen = -1, nextlen = tree[1], count = 0, max_count = 7, min_count = 4;
if (0 === nextlen) {
max_count = 138;
min_count = 3;
}
for (n = 0; n <= max_code; n++) {
curlen = nextlen;
nextlen = tree[2 * (n + 1) + 1];
if (!(++count < max_count && curlen === nextlen)) {
if (count < min_count) do {
send_code(s, curlen, s.bl_tree);
} while (0 != --count); else if (0 !== curlen) {
if (curlen !== prevlen) {
send_code(s, curlen, s.bl_tree);
count--;
}
send_code(s, 16, s.bl_tree);
send_bits(s, count - 3, 2);
} else if (count <= 10) {
send_code(s, 17, s.bl_tree);
send_bits(s, count - 3, 3);
} else {
send_code(s, 18, s.bl_tree);
send_bits(s, count - 11, 7);
}
count = 0;
prevlen = curlen;
if (0 === nextlen) {
max_count = 138;
min_count = 3;
} else if (curlen === nextlen) {
max_count = 6;
min_count = 3;
} else {
max_count = 7;
min_count = 4;
}
}
}
};
let static_init_done = false;
const _tr_stored_block$1 = (s, buf, stored_len, last) => {
send_bits(s, 0 + (last ? 1 : 0), 3);
bi_windup(s);
put_short(s, stored_len);
put_short(s, ~stored_len);
if (stored_len) s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);
s.pending += stored_len;
};
var _tr_flush_block_1 = (s, buf, stored_len, last) => {
let opt_lenb, static_lenb, max_blindex = 0;
if (s.level > 0) {
if (2 === s.strm.data_type) s.strm.data_type = (s => {
let n, block_mask = 4093624447;
for (n = 0; n <= 31; n++, block_mask >>>= 1) if (1 & block_mask && 0 !== s.dyn_ltree[2 * n]) return 0;
if (0 !== s.dyn_ltree[18] || 0 !== s.dyn_ltree[20] || 0 !== s.dyn_ltree[26]) return 1;
for (n = 32; n < 256; n++) if (0 !== s.dyn_ltree[2 * n]) return 1;
return 0;
})(s);
build_tree(s, s.l_desc);
build_tree(s, s.d_desc);
max_blindex = (s => {
let max_blindex;
scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
build_tree(s, s.bl_desc);
for (max_blindex = 18; max_blindex >= 3 && 0 === s.bl_tree[2 * bl_order[max_blindex] + 1]; max_blindex--) ;
s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
return max_blindex;
})(s);
opt_lenb = s.opt_len + 3 + 7 >>> 3;
static_lenb = s.static_len + 3 + 7 >>> 3;
if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
} else opt_lenb = static_lenb = stored_len + 5;
if (stored_len + 4 <= opt_lenb && -1 !== buf) _tr_stored_block$1(s, buf, stored_len, last); else if (4 === s.strategy || static_lenb === opt_lenb) {
send_bits(s, 2 + (last ? 1 : 0), 3);
compress_block(s, static_ltree, static_dtree);
} else {
send_bits(s, 4 + (last ? 1 : 0), 3);
((s, lcodes, dcodes, blcodes) => {
let rank;
send_bits(s, lcodes - 257, 5);
send_bits(s, dcodes - 1, 5);
send_bits(s, blcodes - 4, 4);
for (rank = 0; rank < blcodes; rank++) send_bits(s, s.bl_tree[2 * bl_order[rank] + 1], 3);
send_tree(s, s.dyn_ltree, lcodes - 1);
send_tree(s, s.dyn_dtree, dcodes - 1);
})(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
compress_block(s, s.dyn_ltree, s.dyn_dtree);
}
init_block(s);
if (last) bi_windup(s);
}, trees = {
_tr_init: s => {
if (!static_init_done) {
(() => {
let n, bits, length, code, dist;
const bl_count = new Array(16);
length = 0;
for (code = 0; code < 28; code++) {
base_length[code] = length;
for (n = 0; n < 1 << extra_lbits[code]; n++) _length_code[length++] = code;
}
_length_code[length - 1] = code;
dist = 0;
for (code = 0; code < 16; code++) {
base_dist[code] = dist;
for (n = 0; n < 1 << extra_dbits[code]; n++) _dist_code[dist++] = code;
}
dist >>= 7;
for (;code < 30; code++) {
base_dist[code] = dist << 7;
for (n = 0; n < 1 << extra_dbits[code] - 7; n++) _dist_code[256 + dist++] = code;
}
for (bits = 0; bits <= 15; bits++) bl_count[bits] = 0;
n = 0;
for (;n <= 143; ) {
static_ltree[2 * n + 1] = 8;
n++;
bl_count[8]++;
}
for (;n <= 255; ) {
static_ltree[2 * n + 1] = 9;
n++;
bl_count[9]++;
}
for (;n <= 279; ) {
static_ltree[2 * n + 1] = 7;
n++;
bl_count[7]++;
}
for (;n <= 287; ) {
static_ltree[2 * n + 1] = 8;
n++;
bl_count[8]++;
}
gen_codes(static_ltree, 287, bl_count);
for (n = 0; n < 30; n++) {
static_dtree[2 * n + 1] = 5;
static_dtree[2 * n] = bi_reverse(n, 5);
}
static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, 257, 286, 15);
static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, 30, 15);
static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, 19, 7);
})();
static_init_done = true;
}
s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
s.bi_buf = 0;
s.bi_valid = 0;
init_block(s);
},
_tr_stored_block: _tr_stored_block$1,
_tr_flush_block: _tr_flush_block_1,
_tr_tally: (s, dist, lc) => {
s.pending_buf[s.sym_buf + s.sym_next++] = dist;
s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;
s.pending_buf[s.sym_buf + s.sym_next++] = lc;
if (0 === dist) s.dyn_ltree[2 * lc]++; else {
s.matches++;
dist--;
s.dyn_ltree[2 * (_length_code[lc] + 256 + 1)]++;
s.dyn_dtree[2 * d_code(dist)]++;
}
return s.sym_next === s.sym_end;
},
_tr_align: s => {
send_bits(s, 2, 3);
send_code(s, 256, static_ltree);
(s => {
if (16 === s.bi_valid) {
put_short(s, s.bi_buf);
s.bi_buf = 0;
s.bi_valid = 0;
} else if (s.bi_valid >= 8) {
s.pending_buf[s.pending++] = 255 & s.bi_buf;
s.bi_buf >>= 8;
s.bi_valid -= 8;
}
})(s);
}
};
var adler32_1 = (adler, buf, len, pos) => {
let s1 = 65535 & adler, s2 = adler >>> 16 & 65535, n = 0;
for (;0 !== len; ) {
n = len > 2e3 ? 2e3 : len;
len -= n;
do {
s1 = s1 + buf[pos++] | 0;
s2 = s2 + s1 | 0;
} while (--n);
s1 %= 65521;
s2 %= 65521;
}
return s1 | s2 << 16;
};
const crcTable = new Uint32Array((() => {
let c, table = [];
for (var n = 0; n < 256; n++) {
c = n;
for (var k = 0; k < 8; k++) c = 1 & c ? 3988292384 ^ c >>> 1 : c >>> 1;
table[n] = c;
}
return table;
})());
var crc32_1 = (crc, buf, len, pos) => {
const t = crcTable, end = pos + len;
crc ^= -1;
for (let i = pos; i < end; i++) crc = crc >>> 8 ^ t[255 & (crc ^ buf[i])];
return ~crc;
}, messages = {
2: "need dictionary",
1: "stream end",
0: "",
"-1": "file error",
"-2": "stream error",
"-3": "data error",
"-4": "insufficient memory",
"-5": "buffer error",
"-6": "incompatible version"
}, constants$2 = {
Z_NO_FLUSH: 0,
Z_PARTIAL_FLUSH: 1,
Z_SYNC_FLUSH: 2,
Z_FULL_FLUSH: 3,
Z_FINISH: 4,
Z_BLOCK: 5,
Z_TREES: 6,
Z_OK: 0,
Z_STREAM_END: 1,
Z_NEED_DICT: 2,
Z_ERRNO: -1,
Z_STREAM_ERROR: -2,
Z_DATA_ERROR: -3,
Z_MEM_ERROR: -4,
Z_BUF_ERROR: -5,
Z_NO_COMPRESSION: 0,
Z_BEST_SPEED: 1,
Z_BEST_COMPRESSION: 9,
Z_DEFAULT_COMPRESSION: -1,
Z_FILTERED: 1,
Z_HUFFMAN_ONLY: 2,
Z_RLE: 3,
Z_FIXED: 4,
Z_DEFAULT_STRATEGY: 0,
Z_BINARY: 0,
Z_TEXT: 1,
Z_UNKNOWN: 2,
Z_DEFLATED: 8
};
const {_tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align} = trees, {Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1, Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1, Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1, Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1, Z_UNKNOWN, Z_DEFLATED: Z_DEFLATED$2} = constants$2, err = (strm, errorCode) => {
strm.msg = messages[errorCode];
return errorCode;
}, rank = f => 2 * f - (f > 4 ? 9 : 0), zero = buf => {
let len = buf.length;
for (;--len >= 0; ) buf[len] = 0;
}, slide_hash = s => {
let n, m, p, wsize = s.w_size;
n = s.hash_size;
p = n;
do {
m = s.head[--p];
s.head[p] = m >= wsize ? m - wsize : 0;
} while (--n);
n = wsize;
p = n;
do {
m = s.prev[--p];
s.prev[p] = m >= wsize ? m - wsize : 0;
} while (--n);
};
let HASH = (s, prev, data) => (prev << s.hash_shift ^ data) & s.hash_mask;
const flush_pending = strm => {
const s = strm.state;
let len = s.pending;
if (len > strm.avail_out) len = strm.avail_out;
if (0 !== len) {
strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);
strm.next_out += len;
s.pending_out += len;
strm.total_out += len;
strm.avail_out -= len;
s.pending -= len;
if (0 === s.pending) s.pending_out = 0;
}
}, flush_block_only = (s, last) => {
_tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);
s.block_start = s.strstart;
flush_pending(s.strm);
}, put_byte = (s, b) => {
s.pending_buf[s.pending++] = b;
}, putShortMSB = (s, b) => {
s.pending_buf[s.pending++] = b >>> 8 & 255;
s.pending_buf[s.pending++] = 255 & b;
}, read_buf = (strm, buf, start, size) => {
let len = strm.avail_in;
if (len > size) len = size;
if (0 === len) return 0;
strm.avail_in -= len;
buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);
if (1 === strm.state.wrap) strm.adler = adler32_1(strm.adler, buf, len, start); else if (2 === strm.state.wrap) strm.adler = crc32_1(strm.adler, buf, len, start);
strm.next_in += len;
strm.total_in += len;
return len;
}, longest_match = (s, cur_match) => {
let match, len, chain_length = s.max_chain_length, scan = s.strstart, best_len = s.prev_length, nice_match = s.nice_match;
const limit = s.strstart > s.w_size - 262 ? s.strstart - (s.w_size - 262) : 0, _win = s.window, wmask = s.w_mask, prev = s.prev, strend = s.strstart + 258;
let scan_end1 = _win[scan + best_len - 1], scan_end = _win[scan + best_len];
if (s.prev_length >= s.good_match) chain_length >>= 2;
if (nice_match > s.lookahead) nice_match = s.lookahead;
do {
match = cur_match;
if (_win[match + best_len] === scan_end && _win[match + best_len - 1] === scan_end1 && _win[match] === _win[scan] && _win[++match] === _win[scan + 1]) {
scan += 2;
match++;
do {} while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);
len = 258 - (strend - scan);
scan = strend - 258;
if (len > best_len) {
s.match_start = cur_match;
best_len = len;
if (len >= nice_match) break;
scan_end1 = _win[scan + best_len - 1];
scan_end = _win[scan + best_len];
}
}
} while ((cur_match = prev[cur_match & wmask]) > limit && 0 != --chain_length);
if (best_len <= s.lookahead) return best_len; else return s.lookahead;
}, fill_window = s => {
const _w_size = s.w_size;
let n, more, str;
do {
more = s.window_size - s.lookahead - s.strstart;
if (s.strstart >= _w_size + (_w_size - 262)) {
s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);
s.match_start -= _w_size;
s.strstart -= _w_size;
s.block_start -= _w_size;
if (s.insert > s.strstart) s.insert = s.strstart;
slide_hash(s);
more += _w_size;
}
if (0 === s.strm.avail_in) break;
n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
s.lookahead += n;
if (s.lookahead + s.insert >= 3) {
str = s.strstart - s.insert;
s.ins_h = s.window[str];
s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);
for (;s.insert; ) {
s.ins_h = HASH(s, s.ins_h, s.window[str + 3 - 1]);
s.prev[str & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = str;
str++;
s.insert--;
if (s.lookahead + s.insert < 3) break;
}
}
} while (s.lookahead < 262 && 0 !== s.strm.avail_in);
}, deflate_stored = (s, flush) => {
let len, left, have, min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5, last = 0, used = s.strm.avail_in;
do {
len = 65535;
have = s.bi_valid + 42 >> 3;
if (s.strm.avail_out < have) break;
have = s.strm.avail_out - have;
left = s.strstart - s.block_start;
if (len > left + s.strm.avail_in) len = left + s.strm.avail_in;
if (len > have) len = have;
if (len < min_block && (0 === len && flush !== Z_FINISH$3 || flush === Z_NO_FLUSH$2 || len !== left + s.strm.avail_in)) break;
last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;
_tr_stored_block(s, 0, 0, last);
s.pending_buf[s.pending - 4] = len;
s.pending_buf[s.pending - 3] = len >> 8;
s.pending_buf[s.pending - 2] = ~len;
s.pending_buf[s.pending - 1] = ~len >> 8;
flush_pending(s.strm);
if (left) {
if (left > len) left = len;
s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);
s.strm.next_out += left;
s.strm.avail_out -= left;
s.strm.total_out += left;
s.block_start += left;
len -= left;
}
if (len) {
read_buf(s.strm, s.strm.output, s.strm.next_out, len);
s.strm.next_out += len;
s.strm.avail_out -= len;
s.strm.total_out += len;
}
} while (0 === last);
used -= s.strm.avail_in;
if (used) {
if (used >= s.w_size) {
s.matches = 2;
s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);
s.strstart = s.w_size;
s.insert = s.strstart;
} else {
if (s.window_size - s.strstart <= used) {
s.strstart -= s.w_size;
s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);
if (s.matches < 2) s.matches++;
if (s.insert > s.strstart) s.insert = s.strstart;
}
s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);
s.strstart += used;
s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;
}
s.block_start = s.strstart;
}
if (s.high_water < s.strstart) s.high_water = s.strstart;
if (last) return 4;
if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 && 0 === s.strm.avail_in && s.strstart === s.block_start) return 2;
have = s.window_size - s.strstart;
if (s.strm.avail_in > have && s.block_start >= s.w_size) {
s.block_start -= s.w_size;
s.strstart -= s.w_size;
s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);
if (s.matches < 2) s.matches++;
have += s.w_size;
if (s.insert > s.strstart) s.insert = s.strstart;
}
if (have > s.strm.avail_in) have = s.strm.avail_in;
if (have) {
read_buf(s.strm, s.window, s.strstart, have);
s.strstart += have;
s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;
}
if (s.high_water < s.strstart) s.high_water = s.strstart;
have = s.bi_valid + 42 >> 3;
have = s.pending_buf_size - have > 65535 ? 65535 : s.pending_buf_size - have;
min_block = have > s.w_size ? s.w_size : have;
left = s.strstart - s.block_start;
if (left >= min_block || (left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 && 0 === s.strm.avail_in && left <= have) {
len = left > have ? have : left;
last = flush === Z_FINISH$3 && 0 === s.strm.avail_in && len === left ? 1 : 0;
_tr_stored_block(s, s.block_start, len, last);
s.block_start += len;
flush_pending(s.strm);
}
return last ? 3 : 1;
}, deflate_fast = (s, flush) => {
let hash_head, bflush;
for (;;) {
if (s.lookahead < 262) {
fill_window(s);
if (s.lookahead < 262 && flush === Z_NO_FLUSH$2) return 1;
if (0 === s.lookahead) break;
}
hash_head = 0;
if (s.lookahead >= 3) {
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 3 - 1]);
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = s.strstart;
}
if (0 !== hash_head && s.strstart - hash_head <= s.w_size - 262) s.match_length = longest_match(s, hash_head);
if (s.match_length >= 3) {
bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - 3);
s.lookahead -= s.match_length;
if (s.match_length <= s.max_lazy_match && s.lookahead >= 3) {
s.match_length--;
do {
s.strstart++;
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 3 - 1]);
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = s.strstart;
} while (0 != --s.match_length);
s.strstart++;
} else {
s.strstart += s.match_length;
s.match_length = 0;
s.ins_h = s.window[s.strstart];
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);
}
} else {
bflush = _tr_tally(s, 0, s.window[s.strstart]);
s.lookahead--;
s.strstart++;
}
if (bflush) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
}
s.insert = s.strstart < 2 ? s.strstart : 2;
if (flush === Z_FINISH$3) {
flush_block_only(s, true);
if (0 === s.strm.avail_out) return 3; else return 4;
}
if (s.sym_next) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
return 2;
}, deflate_slow = (s, flush) => {
let hash_head, bflush, max_insert;
for (;;) {
if (s.lookahead < 262) {
fill_window(s);
if (s.lookahead < 262 && flush === Z_NO_FLUSH$2) return 1;
if (0 === s.lookahead) break;
}
hash_head = 0;
if (s.lookahead >= 3) {
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 3 - 1]);
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = s.strstart;
}
s.prev_length = s.match_length;
s.prev_match = s.match_start;
s.match_length = 2;
if (0 !== hash_head && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - 262) {
s.match_length = longest_match(s, hash_head);
if (s.match_length <= 5 && (s.strategy === Z_FILTERED || 3 === s.match_length && s.strstart - s.match_start > 4096)) s.match_length = 2;
}
if (s.prev_length >= 3 && s.match_length <= s.prev_length) {
max_insert = s.strstart + s.lookahead - 3;
bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - 3);
s.lookahead -= s.prev_length - 1;
s.prev_length -= 2;
do {
if (++s.strstart <= max_insert) {
s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 3 - 1]);
hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = s.strstart;
}
} while (0 != --s.prev_length);
s.match_available = 0;
s.match_length = 2;
s.strstart++;
if (bflush) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
} else if (s.match_available) {
bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
if (bflush) flush_block_only(s, false);
s.strstart++;
s.lookahead--;
if (0 === s.strm.avail_out) return 1;
} else {
s.match_available = 1;
s.strstart++;
s.lookahead--;
}
}
if (s.match_available) {
bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
s.match_available = 0;
}
s.insert = s.strstart < 2 ? s.strstart : 2;
if (flush === Z_FINISH$3) {
flush_block_only(s, true);
if (0 === s.strm.avail_out) return 3; else return 4;
}
if (s.sym_next) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
return 2;
};
function Config(good_length, max_lazy, nice_length, max_chain, func) {
this.good_length = good_length;
this.max_lazy = max_lazy;
this.nice_length = nice_length;
this.max_chain = max_chain;
this.func = func;
}
const configuration_table = [ new Config(0, 0, 0, 0, deflate_stored), new Config(4, 4, 8, 4, deflate_fast), new Config(4, 5, 16, 8, deflate_fast), new Config(4, 6, 32, 32, deflate_fast), new Config(4, 4, 16, 16, deflate_slow), new Config(8, 16, 32, 32, deflate_slow), new Config(8, 16, 128, 128, deflate_slow), new Config(8, 32, 128, 256, deflate_slow), new Config(32, 128, 258, ####, deflate_slow), new Config(32, 258, 258, 4096, deflate_slow) ];
function DeflateState() {
this.strm = null;
this.status = 0;
this.pending_buf = null;
this.pending_buf_size = 0;
this.pending_out = 0;
this.pending = 0;
this.wrap = 0;
this.gzhead = null;
this.gzindex = 0;
this.method = Z_DEFLATED$2;
this.last_flush = -1;
this.w_size = 0;
this.w_bits = 0;
this.w_mask = 0;
this.window = null;
this.window_size = 0;
this.prev = null;
this.head = null;
this.ins_h = 0;
this.hash_size = 0;
this.hash_bits = 0;
this.hash_mask = 0;
this.hash_shift = 0;
this.block_start = 0;
this.match_length = 0;
this.prev_match = 0;
this.match_available = 0;
this.strstart = 0;
this.match_start = 0;
this.lookahead = 0;
this.prev_length = 0;
this.max_chain_length = 0;
this.max_lazy_match = 0;
this.level = 0;
this.strategy = 0;
this.good_match = 0;
this.nice_match = 0;
this.dyn_ltree = new Uint16Array(1146);
this.dyn_dtree = new Uint16Array(122);
this.bl_tree = new Uint16Array(78);
zero(this.dyn_ltree);
zero(this.dyn_dtree);
zero(this.bl_tree);
this.l_desc = null;
this.d_desc = null;
this.bl_desc = null;
this.bl_count = new Uint16Array(16);
this.heap = new Uint16Array(573);
zero(this.heap);
this.heap_len = 0;
this.heap_max = 0;
this.depth = new Uint16Array(573);
zero(this.depth);
this.sym_buf = 0;
this.lit_bufsize = 0;
this.sym_next = 0;
this.sym_end = 0;
this.opt_len = 0;
this.static_len = 0;
this.matches = 0;
this.insert = 0;
this.bi_buf = 0;
this.bi_valid = 0;
}
const deflateStateCheck = strm => {
if (!strm) return 1;
const s = strm.state;
if (!s || s.strm !== strm || 42 !== s.status && 57 !== s.status && 69 !== s.status && 73 !== s.status && 91 !== s.status && 103 !== s.status && 113 !== s.status && 666 !== s.status) return 1; else return 0;
}, deflateResetKeep = strm => {
if (deflateStateCheck(strm)) return err(strm, Z_STREAM_ERROR$2);
strm.total_in = strm.total_out = 0;
strm.data_type = Z_UNKNOWN;
const s = strm.state;
s.pending = 0;
s.pending_out = 0;
if (s.wrap < 0) s.wrap = -s.wrap;
s.status = 2 === s.wrap ? 57 : s.wrap ? 42 : 113;
strm.adler = 2 === s.wrap ? 0 : 1;
s.last_flush = -2;
_tr_init(s);
return Z_OK$3;
}, deflateReset = strm => {
const ret = deflateResetKeep(strm);
if (ret === Z_OK$3) (s => {
s.window_size = 2 * s.w_size;
zero(s.head);
s.max_lazy_match = configuration_table[s.level].max_lazy;
s.good_match = configuration_table[s.level].good_length;
s.nice_match = configuration_table[s.level].nice_length;
s.max_chain_length = configuration_table[s.level].max_chain;
s.strstart = 0;
s.block_start = 0;
s.lookahead = 0;
s.insert = 0;
s.match_length = s.prev_length = 2;
s.match_available = 0;
s.ins_h = 0;
})(strm.state);
return ret;
}, deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {
if (!strm) return Z_STREAM_ERROR$2;
let wrap = 1;
if (level === Z_DEFAULT_COMPRESSION$1) level = 6;
if (windowBits < 0) {
wrap = 0;
windowBits = -windowBits;
} else if (windowBits > 15) {
wrap = 2;
windowBits -= 16;
}
if (memLevel < 1 || memLevel > 9 || method !== Z_DEFLATED$2 || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED || 8 === windowBits && 1 !== wrap) return err(strm, Z_STREAM_ERROR$2);
if (8 === windowBits) windowBits = 9;
const s = new DeflateState;
strm.state = s;
s.strm = strm;
s.status = 42;
s.wrap = wrap;
s.gzhead = null;
s.w_bits = windowBits;
s.w_size = 1 << s.w_bits;
s.w_mask = s.w_size - 1;
s.hash_bits = memLevel + 7;
s.hash_size = 1 << s.hash_bits;
s.hash_mask = s.hash_size - 1;
s.hash_shift = ~~((s.hash_bits + 3 - 1) / 3);
s.window = new Uint8Array(2 * s.w_size);
s.head = new Uint16Array(s.hash_size);
s.prev = new Uint16Array(s.w_size);
s.lit_bufsize = 1 << memLevel + 6;
s.pending_buf_size = 4 * s.lit_bufsize;
s.pending_buf = new Uint8Array(s.pending_buf_size);
s.sym_buf = s.lit_bufsize;
s.sym_end = 3 * (s.lit_bufsize - 1);
s.level = level;
s.strategy = strategy;
s.method = method;
return deflateReset(strm);
};
var deflate_1$2 = {
deflateInit: (strm, level) => deflateInit2(strm, level, Z_DEFLATED$2, 15, 8, Z_DEFAULT_STRATEGY$1),
deflateInit2,
deflateReset,
deflateResetKeep,
deflateSetHeader: (strm, head) => {
if (deflateStateCheck(strm) || 2 !== strm.state.wrap) return Z_STREAM_ERROR$2;
strm.state.gzhead = head;
return Z_OK$3;
},
deflate: (strm, flush) => {
if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;
const s = strm.state;
if (!strm.output || 0 !== strm.avail_in && !strm.input || 666 === s.status && flush !== Z_FINISH$3) return err(strm, 0 === strm.avail_out ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);
const old_flush = s.last_flush;
s.last_flush = flush;
if (0 !== s.pending) {
flush_pending(strm);
if (0 === strm.avail_out) {
s.last_flush = -1;
return Z_OK$3;
}
} else if (0 === strm.avail_in && rank(flush) <= rank(old_flush) && flush !== Z_FINISH$3) return err(strm, Z_BUF_ERROR$1);
if (666 === s.status && 0 !== strm.avail_in) return err(strm, Z_BUF_ERROR$1);
if (42 === s.status && 0 === s.wrap) s.status = 113;
if (42 === s.status) {
let header = Z_DEFLATED$2 + (s.w_bits - 8 << 4) << 8, level_flags = -1;
if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) level_flags = 0; else if (s.level < 6) level_flags = 1; else if (6 === s.level) level_flags = 2; else level_flags = 3;
header |= level_flags << 6;
if (0 !== s.strstart) header |= 32;
header += 31 - header % 31;
putShortMSB(s, header);
if (0 !== s.strstart) {
putShortMSB(s, strm.adler >>> 16);
putShortMSB(s, 65535 & strm.adler);
}
strm.adler = 1;
s.status = 113;
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
}
if (57 === s.status) {
strm.adler = 0;
put_byte(s, 31);
put_byte(s, 139);
put_byte(s, 8);
if (!s.gzhead) {
put_byte(s, 0);
put_byte(s, 0);
put_byte(s, 0);
put_byte(s, 0);
put_byte(s, 0);
put_byte(s, 9 === s.level ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
put_byte(s, 3);
s.status = 113;
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
} else {
put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));
put_byte(s, 255 & s.gzhead.time);
put_byte(s, s.gzhead.time >> 8 & 255);
put_byte(s, s.gzhead.time >> 16 & 255);
put_byte(s, s.gzhead.time >> 24 & 255);
put_byte(s, 9 === s.level ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
put_byte(s, 255 & s.gzhead.os);
if (s.gzhead.extra && s.gzhead.extra.length) {
put_byte(s, 255 & s.gzhead.extra.length);
put_byte(s, s.gzhead.extra.length >> 8 & 255);
}
if (s.gzhead.hcrc) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);
s.gzindex = 0;
s.status = 69;
}
}
if (69 === s.status) {
if (s.gzhead.extra) {
let beg = s.pending, left = (65535 & s.gzhead.extra.length) - s.gzindex;
for (;s.pending + left > s.pending_buf_size; ) {
let copy = s.pending_buf_size - s.pending;
s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);
s.pending = s.pending_buf_size;
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
s.gzindex += copy;
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
beg = 0;
left -= copy;
}
let gzhead_extra = new Uint8Array(s.gzhead.extra);
s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);
s.pending += left;
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
s.gzindex = 0;
}
s.status = 73;
}
if (73 === s.status) {
if (s.gzhead.name) {
let val, beg = s.pending;
do {
if (s.pending === s.pending_buf_size) {
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
beg = 0;
}
if (s.gzindex < s.gzhead.name.length) val = 255 & s.gzhead.name.charCodeAt(s.gzindex++); else val = 0;
put_byte(s, val);
} while (0 !== val);
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
s.gzindex = 0;
}
s.status = 91;
}
if (91 === s.status) {
if (s.gzhead.comment) {
let val, beg = s.pending;
do {
if (s.pending === s.pending_buf_size) {
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
beg = 0;
}
if (s.gzindex < s.gzhead.comment.length) val = 255 & s.gzhead.comment.charCodeAt(s.gzindex++); else val = 0;
put_byte(s, val);
} while (0 !== val);
if (s.gzhead.hcrc && s.pending > beg) strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
}
s.status = 103;
}
if (103 === s.status) {
if (s.gzhead.hcrc) {
if (s.pending + 2 > s.pending_buf_size) {
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
}
put_byte(s, 255 & strm.adler);
put_byte(s, strm.adler >> 8 & 255);
strm.adler = 0;
}
s.status = 113;
flush_pending(strm);
if (0 !== s.pending) {
s.last_flush = -1;
return Z_OK$3;
}
}
if (0 !== strm.avail_in || 0 !== s.lookahead || flush !== Z_NO_FLUSH$2 && 666 !== s.status) {
let bstate = 0 === s.level ? deflate_stored(s, flush) : s.strategy === Z_HUFFMAN_ONLY ? ((s, flush) => {
let bflush;
for (;;) {
if (0 === s.lookahead) {
fill_window(s);
if (0 === s.lookahead) {
if (flush === Z_NO_FLUSH$2) return 1;
break;
}
}
s.match_length = 0;
bflush = _tr_tally(s, 0, s.window[s.strstart]);
s.lookahead--;
s.strstart++;
if (bflush) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
}
s.insert = 0;
if (flush === Z_FINISH$3) {
flush_block_only(s, true);
if (0 === s.strm.avail_out) return 3; else return 4;
}
if (s.sym_next) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
return 2;
})(s, flush) : s.strategy === Z_RLE ? ((s, flush) => {
let bflush, prev, scan, strend;
const _win = s.window;
for (;;) {
if (s.lookahead <= 258) {
fill_window(s);
if (s.lookahead <= 258 && flush === Z_NO_FLUSH$2) return 1;
if (0 === s.lookahead) break;
}
s.match_length = 0;
if (s.lookahead >= 3 && s.strstart > 0) {
scan = s.strstart - 1;
prev = _win[scan];
if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
strend = s.strstart + 258;
do {} while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);
s.match_length = 258 - (strend - scan);
if (s.match_length > s.lookahead) s.match_length = s.lookahead;
}
}
if (s.match_length >= 3) {
bflush = _tr_tally(s, 1, s.match_length - 3);
s.lookahead -= s.match_length;
s.strstart += s.match_length;
s.match_length = 0;
} else {
bflush = _tr_tally(s, 0, s.window[s.strstart]);
s.lookahead--;
s.strstart++;
}
if (bflush) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
}
s.insert = 0;
if (flush === Z_FINISH$3) {
flush_block_only(s, true);
if (0 === s.strm.avail_out) return 3; else return 4;
}
if (s.sym_next) {
flush_block_only(s, false);
if (0 === s.strm.avail_out) return 1;
}
return 2;
})(s, flush) : configuration_table[s.level].func(s, flush);
if (3 === bstate || 4 === bstate) s.status = 666;
if (1 === bstate || 3 === bstate) {
if (0 === strm.avail_out) s.last_flush = -1;
return Z_OK$3;
}
if (2 === bstate) {
if (flush === Z_PARTIAL_FLUSH) _tr_align(s); else if (flush !== Z_BLOCK$1) {
_tr_stored_block(s, 0, 0, false);
if (flush === Z_FULL_FLUSH$1) {
zero(s.head);
if (0 === s.lookahead) {
s.strstart = 0;
s.block_start = 0;
s.insert = 0;
}
}
}
flush_pending(strm);
if (0 === strm.avail_out) {
s.last_flush = -1;
return Z_OK$3;
}
}
}
if (flush !== Z_FINISH$3) return Z_OK$3;
if (s.wrap <= 0) return Z_STREAM_END$3;
if (2 === s.wrap) {
put_byte(s, 255 & strm.adler);
put_byte(s, strm.adler >> 8 & 255);
put_byte(s, strm.adler >> 16 & 255);
put_byte(s, strm.adler >> 24 & 255);
put_byte(s, 255 & strm.total_in);
put_byte(s, strm.total_in >> 8 & 255);
put_byte(s, strm.total_in >> 16 & 255);
put_byte(s, strm.total_in >> 24 & 255);
} else {
putShortMSB(s, strm.adler >>> 16);
putShortMSB(s, 65535 & strm.adler);
}
flush_pending(strm);
if (s.wrap > 0) s.wrap = -s.wrap;
return 0 !== s.pending ? Z_OK$3 : Z_STREAM_END$3;
},
deflateEnd: strm => {
if (deflateStateCheck(strm)) return Z_STREAM_ERROR$2;
const status = strm.state.status;
strm.state = null;
return 113 === status ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;
},
deflateSetDictionary: (strm, dictionary) => {
let dictLength = dictionary.length;
if (deflateStateCheck(strm)) return Z_STREAM_ERROR$2;
const s = strm.state, wrap = s.wrap;
if (2 === wrap || 1 === wrap && 42 !== s.status || s.lookahead) return Z_STREAM_ERROR$2;
if (1 === wrap) strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);
s.wrap = 0;
if (dictLength >= s.w_size) {
if (0 === wrap) {
zero(s.head);
s.strstart = 0;
s.block_start = 0;
s.insert = 0;
}
let tmpDict = new Uint8Array(s.w_size);
tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);
dictionary = tmpDict;
dictLength = s.w_size;
}
const avail = strm.avail_in, next = strm.next_in, input = strm.input;
strm.avail_in = dictLength;
strm.next_in = 0;
strm.input = dictionary;
fill_window(s);
for (;s.lookahead >= 3; ) {
let str = s.strstart, n = s.lookahead - 2;
do {
s.ins_h = HASH(s, s.ins_h, s.window[str + 3 - 1]);
s.prev[str & s.w_mask] = s.head[s.ins_h];
s.head[s.ins_h] = str;
str++;
} while (--n);
s.strstart = str;
s.lookahead = 2;
fill_window(s);
}
s.strstart += s.lookahead;
s.block_start = s.strstart;
s.insert = s.lookahead;
s.lookahead = 0;
s.match_length = s.prev_length = 2;
s.match_available = 0;
strm.next_in = next;
strm.input = input;
strm.avail_in = avail;
s.wrap = wrap;
return Z_OK$3;
},
deflateInfo: "pako deflate (from Nodeca project)"
};
const _has = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
var common_assign = function(obj) {
const sources = Array.prototype.slice.call(arguments, 1);
for (;sources.length; ) {
const source = sources.shift();
if (source) {
if ("object" != typeof source) throw new TypeError(source + "must be non-object");
for (const p in source) if (_has(source, p)) obj[p] = source[p];
}
}
return obj;
}, common_flattenChunks = chunks => {
let len = 0;
for (let i = 0, l = chunks.length; i < l; i++) len += chunks[i].length;
const r###lt = new Uint8Array(len);
for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {
let chunk = chunks[i];
r###lt.set(chunk, pos);
pos += chunk.length;
}
return r###lt;
};
let STR_APPLY_UIA_OK = true;
try {
String.fromCharCode.apply(null, new Uint8Array(1));
} catch (__) {
STR_APPLY_UIA_OK = false;
}
const _utf8len = new Uint8Array(256);
for (let q = 0; q < 256; q++) _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
_utf8len[254] = _utf8len[254] = 1;
var strings_string2buf = str => {
if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) return (new TextEncoder).encode(str);
let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
for (m_pos = 0; m_pos < str_len; m_pos++) {
c = str.charCodeAt(m_pos);
if (55296 == (64512 & c) && m_pos + 1 < str_len) {
c2 = str.charCodeAt(m_pos + 1);
if (56320 == (64512 & c2)) {
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
m_pos++;
}
}
buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4;
}
buf = new Uint8Array(buf_len);
for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
c = str.charCodeAt(m_pos);
if (55296 == (64512 & c) && m_pos + 1 < str_len) {
c2 = str.charCodeAt(m_pos + 1);
if (56320 == (64512 & c2)) {
c = 65536 + (c - 55296 << 10) + (c2 - 56320);
m_pos++;
}
}
if (c < 128) buf[i++] = c; else if (c < 2048) {
buf[i++] = 192 | c >>> 6;
buf[i++] = 128 | 63 & c;
} else if (c < 65536) {
buf[i++] = 224 | c >>> 12;
buf[i++] = 128 | c >>> 6 & 63;
buf[i++] = 128 | 63 & c;
} else {
buf[i++] = 240 | c >>> 18;
buf[i++] = 128 | c >>> 12 & 63;
buf[i++] = 128 | c >>> 6 & 63;
buf[i++] = 128 | 63 & c;
}
}
return buf;
}, strings_buf2string = (buf, max) => {
const len = max || buf.length;
if ("function" == typeof TextDecoder && TextDecoder.prototype.decode) return (new TextDecoder).decode(buf.subarray(0, max));
let i, out;
const utf16buf = new Array(2 * len);
for (out = 0, i = 0; i < len; ) {
let c = buf[i++];
if (c < 128) {
utf16buf[out++] = c;
continue;
}
let c_len = _utf8len[c];
if (!(c_len > 4)) {
c &= 2 === c_len ? 31 : 3 === c_len ? 15 : 7;
for (;c_len > 1 && i < len; ) {
c = c << 6 | 63 & buf[i++];
c_len--;
}
if (!(c_len > 1)) if (c < 65536) utf16buf[out++] = c; else {
c -= 65536;
utf16buf[out++] = 55296 | c >> 10 & 1023;
utf16buf[out++] = 56320 | 1023 & c;
} else utf16buf[out++] = 65533;
} else {
utf16buf[out++] = 65533;
i += c_len - 1;
}
}
return ((buf, len) => {
if (len < 65534) if (buf.subarray && STR_APPLY_UIA_OK) return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));
let r###lt = "";
for (let i = 0; i < len; i++) r###lt += String.fromCharCode(buf[i]);
return r###lt;
})(utf16buf, out);
}, strings_utf8border = (buf, max) => {
if ((max = max || buf.length) > buf.length) max = buf.length;
let pos = max - 1;
for (;pos >= 0 && 128 == (192 & buf[pos]); ) pos--;
if (pos < 0) return max;
if (0 === pos) return max; else return pos + _utf8len[buf[pos]] > max ? pos : max;
};
var zstream = function ZStream() {
this.input = null;
this.next_in = 0;
this.avail_in = 0;
this.total_in = 0;
this.output = null;
this.next_out = 0;
this.avail_out = 0;
this.total_out = 0;
this.msg = "";
this.state = null;
this.data_type = 2;
this.adler = 0;
};
const toString$1 = Object.prototype.toString, {Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2, Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2, Z_DEFAULT_COMPRESSION, Z_DEFAULT_STRATEGY, Z_DEFLATED: Z_DEFLATED$1} = constants$2;
function Deflate$1(options) {
this.options = common_assign({
level: Z_DEFAULT_COMPRESSION,
method: Z_DEFLATED$1,
chunkSize: 16384,
windowBits: 15,
memLevel: 8,
strategy: Z_DEFAULT_STRATEGY
}, options || {});
let opt = this.options;
if (opt.raw && opt.windowBits > 0) opt.windowBits = -opt.windowBits; else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) opt.windowBits += 16;
this.err = 0;
this.msg = "";
this.ended = false;
this.chunks = [];
this.strm = new zstream;
this.strm.avail_out = 0;
let status = deflate_1$2.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy);
if (status !== Z_OK$2) throw new Error(messages[status]);
if (opt.header) deflate_1$2.deflateSetHeader(this.strm, opt.header);
if (opt.dictionary) {
let dict;
if ("string" == typeof opt.dictionary) dict = strings_string2buf(opt.dictionary); else if ("[object ArrayBuffer]" === toString$1.call(opt.dictionary)) dict = new Uint8Array(opt.dictionary); else dict = opt.dictionary;
status = deflate_1$2.deflateSetDictionary(this.strm, dict);
if (status !== Z_OK$2) throw new Error(messages[status]);
this._dict_set = true;
}
}
Deflate$1.prototype.push = function(data, flush_mode) {
const strm = this.strm, chunkSize = this.options.chunkSize;
let status, _flush_mode;
if (this.ended) return false;
if (flush_mode === ~~flush_mode) _flush_mode = flush_mode; else _flush_mode = true === flush_mode ? Z_FINISH$2 : Z_NO_FLUSH$1;
if ("string" == typeof data) strm.input = strings_string2buf(data); else if ("[object ArrayBuffer]" === toString$1.call(data)) strm.input = new Uint8Array(data); else strm.input = data;
strm.next_in = 0;
strm.avail_in = strm.input.length;
for (;;) {
if (0 === strm.avail_out) {
strm.output = new Uint8Array(chunkSize);
strm.next_out = 0;
strm.avail_out = chunkSize;
}
if (_flush_mode !== Z_SYNC_FLUSH && _flush_mode !== Z_FULL_FLUSH || !(strm.avail_out <= 6)) {
status = deflate_1$2.deflate(strm, _flush_mode);
if (status === Z_STREAM_END$2) {
if (strm.next_out > 0) this.onData(strm.output.subarray(0, strm.next_out));
status = deflate_1$2.deflateEnd(this.strm);
this.onEnd(status);
this.ended = true;
return status === Z_OK$2;
}
if (0 !== strm.avail_out) if (!(_flush_mode > 0 && strm.next_out > 0)) {
if (0 === strm.avail_in) break;
} else {
this.onData(strm.output.subarray(0, strm.next_out));
strm.avail_out = 0;
} else this.onData(strm.output);
} else {
this.onData(strm.output.subarray(0, strm.next_out));
strm.avail_out = 0;
}
}
return true;
};
Deflate$1.prototype.onData = function(chunk) {
this.chunks.push(chunk);
};
Deflate$1.prototype.onEnd = function(status) {
if (status === Z_OK$2) this.r###lt = common_flattenChunks(this.chunks);
this.chunks = [];
this.err = status;
this.msg = this.strm.msg;
};
function deflate$1(input, options) {
const deflator = new Deflate$1(options);
deflator.push(input, true);
if (deflator.err) throw deflator.msg || messages[deflator.err];
return deflator.r###lt;
}
var deflateRaw_1$1 = function deflateRaw$1(input, options) {
(options = options || {}).raw = true;
return deflate$1(input, options);
}, gzip_1$1 = function gzip$1(input, options) {
(options = options || {}).gzip = true;
return deflate$1(input, options);
}, deflate_1$1 = {
Deflate: Deflate$1,
deflate: deflate$1,
deflateRaw: deflateRaw_1$1,
gzip: gzip_1$1,
constants: constants$2
};
var inffast = function inflate_fast(strm, start) {
let _in, last, _out, beg, end, dmax, wsize, whave, wnext, s_window, hold, bits, lcode, dcode, lmask, dmask, here, op, len, dist, from, from_source, input, output;
const state = strm.state;
_in = strm.next_in;
input = strm.input;
last = _in + (strm.avail_in - 5);
_out = strm.next_out;
output = strm.output;
beg = _out - (start - strm.avail_out);
end = _out + (strm.avail_out - 257);
dmax = state.dmax;
wsize = state.wsize;
whave = state.whave;
wnext = state.wnext;
s_window = state.window;
hold = state.hold;
bits = state.bits;
lcode = state.lencode;
dcode = state.distcode;
lmask = (1 << state.lenbits) - 1;
dmask = (1 << state.distbits) - 1;
top: do {
if (bits < 15) {
hold += input[_in++] << bits;
bits += 8;
hold += input[_in++] << bits;
bits += 8;
}
here = lcode[hold & lmask];
dolen: for (;;) {
op = here >>> 24;
hold >>>= op;
bits -= op;
op = here >>> 16 & 255;
if (0 === op) output[_out++] = 65535 & here; else if (16 & op) {
len = 65535 & here;
op &= 15;
if (op) {
if (bits < op) {
hold += input[_in++] << bits;
bits += 8;
}
len += hold & (1 << op) - 1;
hold >>>= op;
bits -= op;
}
if (bits < 15) {
hold += input[_in++] << bits;
bits += 8;
hold += input[_in++] << bits;
bits += 8;
}
here = dcode[hold & dmask];
dodist: for (;;) {
op = here >>> 24;
hold >>>= op;
bits -= op;
op = here >>> 16 & 255;
if (16 & op) {
dist = 65535 & here;
op &= 15;
if (bits < op) {
hold += input[_in++] << bits;
bits += 8;
if (bits < op) {
hold += input[_in++] << bits;
bits += 8;
}
}
dist += hold & (1 << op) - 1;
if (dist > dmax) {
strm.msg = "invalid distance too far back";
state.mode = 16209;
break top;
}
hold >>>= op;
bits -= op;
op = _out - beg;
if (dist > op) {
op = dist - op;
if (op > whave) if (state.sane) {
strm.msg = "invalid distance too far back";
state.mode = 16209;
break top;
}
from = 0;
from_source = s_window;
if (0 === wnext) {
from += wsize - op;
if (op < len) {
len -= op;
do {
output[_out++] = s_window[from++];
} while (--op);
from = _out - dist;
from_source = output;
}
} else if (wnext < op) {
from += wsize + wnext - op;
op -= wnext;
if (op < len) {
len -= op;
do {
output[_out++] = s_window[from++];
} while (--op);
from = 0;
if (wnext < len) {
op = wnext;
len -= op;
do {
output[_out++] = s_window[from++];
} while (--op);
from = _out - dist;
from_source = output;
}
}
} else {
from += wnext - op;
if (op < len) {
len -= op;
do {
output[_out++] = s_window[from++];
} while (--op);
from = _out - dist;
from_source = output;
}
}
for (;len > 2; ) {
output[_out++] = from_source[from++];
output[_out++] = from_source[from++];
output[_out++] = from_source[from++];
len -= 3;
}
if (len) {
output[_out++] = from_source[from++];
if (len > 1) output[_out++] = from_source[from++];
}
} else {
from = _out - dist;
do {
output[_out++] = output[from++];
output[_out++] = output[from++];
output[_out++] = output[from++];
len -= 3;
} while (len > 2);
if (len) {
output[_out++] = output[from++];
if (len > 1) output[_out++] = output[from++];
}
}
} else if (!(64 & op)) {
here = dcode[(65535 & here) + (hold & (1 << op) - 1)];
continue dodist;
} else {
strm.msg = "invalid distance code";
state.mode = 16209;
break top;
}
break;
}
} else if (!(64 & op)) {
here = lcode[(65535 & here) + (hold & (1 << op) - 1)];
continue dolen;
} else if (32 & op) {
state.mode = 16191;
break top;
} else {
strm.msg = "invalid literal/length code";
state.mode = 16209;
break top;
}
break;
}
} while (_in < last && _out < end);
len = bits >> 3;
_in -= len;
bits -= len << 3;
hold &= (1 << bits) - 1;
strm.next_in = _in;
strm.next_out = _out;
strm.avail_in = _in < last ? last - _in + 5 : 5 - (_in - last);
strm.avail_out = _out < end ? end - _out + 257 : 257 - (_out - end);
state.hold = hold;
state.bits = bits;
};
const lbase = new Uint16Array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 ]), lext = new Uint8Array([ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 ]), dbase = new Uint16Array([ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 ]), dext = new Uint8Array([ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64 ]);
var inftrees = (type, lens, lens_index, codes, table, table_index, work, opts) => {
const bits = opts.bits;
let incr, fill, low, mask, next, match, len = 0, sym = 0, min = 0, max = 0, root = 0, curr = 0, drop = 0, left = 0, used = 0, huff = 0, base = null;
const count = new Uint16Array(16), offs = new Uint16Array(16);
let here_bits, here_op, here_val, extra = null;
for (len = 0; len <= 15; len++) count[len] = 0;
for (sym = 0; sym < codes; sym++) count[lens[lens_index + sym]]++;
root = bits;
for (max = 15; max >= 1 && 0 === count[max]; max--) ;
if (root > max) root = max;
if (0 === max) {
table[table_index++] = 20971520;
table[table_index++] = 20971520;
opts.bits = 1;
return 0;
}
for (min = 1; min < max && 0 === count[min]; min++) ;
if (root < min) root = min;
left = 1;
for (len = 1; len <= 15; len++) {
left <<= 1;
left -= count[len];
if (left < 0) return -1;
}
if (left > 0 && (0 === type || 1 !== max)) return -1;
offs[1] = 0;
for (len = 1; len < 15; len++) offs[len + 1] = offs[len] + count[len];
for (sym = 0; sym < codes; sym++) if (0 !== lens[lens_index + sym]) work[offs[lens[lens_index + sym]]++] = sym;
if (0 === type) {
base = extra = work;
match = 20;
} else if (1 === type) {
base = lbase;
extra = lext;
match = 257;
} else {
base = dbase;
extra = dext;
match = 0;
}
huff = 0;
sym = 0;
len = min;
next = table_index;
curr = root;
drop = 0;
low = -1;
used = 1 << root;
mask = used - 1;
if (1 === type && used > 852 || 2 === type && used > 592) return 1;
for (;;) {
here_bits = len - drop;
if (work[sym] + 1 < match) {
here_op = 0;
here_val = work[sym];
} else if (work[sym] >= match) {
here_op = extra[work[sym] - match];
here_val = base[work[sym] - match];
} else {
here_op = 96;
here_val = 0;
}
incr = 1 << len - drop;
fill = 1 << curr;
min = fill;
do {
fill -= incr;
table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val;
} while (0 !== fill);
incr = 1 << len - 1;
for (;huff & incr; ) incr >>= 1;
if (0 !== incr) {
huff &= incr - 1;
huff += incr;
} else huff = 0;
sym++;
if (0 == --count[len]) {
if (len === max) break;
len = lens[lens_index + work[sym]];
}
if (len > root && (huff & mask) !== low) {
if (0 === drop) drop = root;
next += min;
curr = len - drop;
left = 1 << curr;
for (;curr + drop < max; ) {
left -= count[curr + drop];
if (left <= 0) break;
curr++;
left <<= 1;
}
used += 1 << curr;
if (1 === type && used > 852 || 2 === type && used > 592) return 1;
low = huff & mask;
table[low] = root << 24 | curr << 16 | next - table_index;
}
}
if (0 !== huff) table[next + huff] = len - drop << 24 | 64 << 16;
opts.bits = root;
return 0;
};
const {Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES, Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR, Z_DEFLATED} = constants$2, BAD = 16209, zswap32 = q => (q >>> 24 & 255) + (q >>> 8 & 65280) + ((65280 & q) << 8) + ((255 & q) << 24);
function InflateState() {
this.strm = null;
this.mode = 0;
this.last = false;
this.wrap = 0;
this.havedict = false;
this.flags = 0;
this.dmax = 0;
this.check = 0;
this.total = 0;
this.head = null;
this.wbits = 0;
this.wsize = 0;
this.whave = 0;
this.wnext = 0;
this.window = null;
this.hold = 0;
this.bits = 0;
this.length = 0;
this.offset = 0;
this.extra = 0;
this.lencode = null;
this.distcode = null;
this.lenbits = 0;
this.distbits = 0;
this.ncode = 0;
this.nlen = 0;
this.ndist = 0;
this.have = 0;
this.next = null;
this.lens = new Uint16Array(320);
this.work = new Uint16Array(288);
this.lendyn = null;
this.distdyn = null;
this.sane = 0;
this.back = 0;
this.was = 0;
}
const inflateStateCheck = strm => {
if (!strm) return 1;
const state = strm.state;
if (!state || state.strm !== strm || state.mode < 16180 || state.mode > 16211) return 1; else return 0;
}, inflateResetKeep = strm => {
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
const state = strm.state;
strm.total_in = strm.total_out = state.total = 0;
strm.msg = "";
if (state.wrap) strm.adler = 1 & state.wrap;
state.mode = 16180;
state.last = 0;
state.havedict = 0;
state.flags = -1;
state.dmax = 32768;
state.head = null;
state.hold = 0;
state.bits = 0;
state.lencode = state.lendyn = new Int32Array(852);
state.distcode = state.distdyn = new Int32Array(592);
state.sane = 1;
state.back = -1;
return Z_OK$1;
}, inflateReset = strm => {
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
const state = strm.state;
state.wsize = 0;
state.whave = 0;
state.wnext = 0;
return inflateResetKeep(strm);
}, inflateReset2 = (strm, windowBits) => {
let wrap;
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
const state = strm.state;
if (windowBits < 0) {
wrap = 0;
windowBits = -windowBits;
} else {
wrap = 5 + (windowBits >> 4);
if (windowBits < 48) windowBits &= 15;
}
if (windowBits && (windowBits < 8 || windowBits > 15)) return Z_STREAM_ERROR$1;
if (null !== state.window && state.wbits !== windowBits) state.window = null;
state.wrap = wrap;
state.wbits = windowBits;
return inflateReset(strm);
}, inflateInit2 = (strm, windowBits) => {
if (!strm) return Z_STREAM_ERROR$1;
const state = new InflateState;
strm.state = state;
state.strm = strm;
state.window = null;
state.mode = 16180;
const ret = inflateReset2(strm, windowBits);
if (ret !== Z_OK$1) strm.state = null;
return ret;
};
let lenfix, distfix, virgin = true;
const fixedtables = state => {
if (virgin) {
lenfix = new Int32Array(512);
distfix = new Int32Array(32);
let sym = 0;
for (;sym < 144; ) state.lens[sym++] = 8;
for (;sym < 256; ) state.lens[sym++] = 9;
for (;sym < 280; ) state.lens[sym++] = 7;
for (;sym < 288; ) state.lens[sym++] = 8;
inftrees(1, state.lens, 0, 288, lenfix, 0, state.work, {
bits: 9
});
sym = 0;
for (;sym < 32; ) state.lens[sym++] = 5;
inftrees(2, state.lens, 0, 32, distfix, 0, state.work, {
bits: 5
});
virgin = false;
}
state.lencode = lenfix;
state.lenbits = 9;
state.distcode = distfix;
state.distbits = 5;
}, updatewindow = (strm, src, end, copy) => {
let dist;
const state = strm.state;
if (null === state.window) {
state.wsize = 1 << state.wbits;
state.wnext = 0;
state.whave = 0;
state.window = new Uint8Array(state.wsize);
}
if (copy >= state.wsize) {
state.window.set(src.subarray(end - state.wsize, end), 0);
state.wnext = 0;
state.whave = state.wsize;
} else {
dist = state.wsize - state.wnext;
if (dist > copy) dist = copy;
state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);
if (copy -= dist) {
state.window.set(src.subarray(end - copy, end), 0);
state.wnext = copy;
state.whave = state.wsize;
} else {
state.wnext += dist;
if (state.wnext === state.wsize) state.wnext = 0;
if (state.whave < state.wsize) state.whave += dist;
}
}
return 0;
};
var inflate_1$2 = {
inflateReset,
inflateReset2,
inflateResetKeep,
inflateInit: strm => inflateInit2(strm, 15),
inflateInit2,
inflate: (strm, flush) => {
let state, input, output, next, put, have, left, hold, bits, _in, _out, copy, from, from_source, here_bits, here_op, here_val, last_bits, last_op, last_val, len, ret, here = 0;
const hbuf = new Uint8Array(4);
let opts, n;
const order = new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);
if (inflateStateCheck(strm) || !strm.output || !strm.input && 0 !== strm.avail_in) return Z_STREAM_ERROR$1;
state = strm.state;
if (16191 === state.mode) state.mode = 16192;
put = strm.next_out;
output = strm.output;
left = strm.avail_out;
next = strm.next_in;
input = strm.input;
have = strm.avail_in;
hold = state.hold;
bits = state.bits;
_in = have;
_out = left;
ret = Z_OK$1;
inf_leave: for (;;) switch (state.mode) {
case 16180:
if (0 === state.wrap) {
state.mode = 16192;
break;
}
for (;bits < 16; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (2 & state.wrap && 35615 === hold) {
if (0 === state.wbits) state.wbits = 15;
state.check = 0;
hbuf[0] = 255 & hold;
hbuf[1] = hold >>> 8 & 255;
state.check = crc32_1(state.check, hbuf, 2, 0);
hold = 0;
bits = 0;
state.mode = 16181;
break;
}
if (state.head) state.head.done = false;
if (!(1 & state.wrap) || (((255 & hold) << 8) + (hold >> 8)) % 31) {
strm.msg = "incorrect header check";
state.mode = BAD;
break;
}
if ((15 & hold) !== Z_DEFLATED) {
strm.msg = "unknown compression method";
state.mode = BAD;
break;
}
hold >>>= 4;
bits -= 4;
len = 8 + (15 & hold);
if (0 === state.wbits) state.wbits = len;
if (len > 15 || len > state.wbits) {
strm.msg = "invalid window size";
state.mode = BAD;
break;
}
state.dmax = 1 << state.wbits;
state.flags = 0;
strm.adler = state.check = 1;
state.mode = 512 & hold ? 16189 : 16191;
hold = 0;
bits = 0;
break;
case 16181:
for (;bits < 16; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.flags = hold;
if ((255 & state.flags) !== Z_DEFLATED) {
strm.msg = "unknown compression method";
state.mode = BAD;
break;
}
if (57344 & state.flags) {
strm.msg = "unknown header flags set";
state.mode = BAD;
break;
}
if (state.head) state.head.text = hold >> 8 & 1;
if (512 & state.flags && 4 & state.wrap) {
hbuf[0] = 255 & hold;
hbuf[1] = hold >>> 8 & 255;
state.check = crc32_1(state.check, hbuf, 2, 0);
}
hold = 0;
bits = 0;
state.mode = 16182;
case 16182:
for (;bits < 32; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (state.head) state.head.time = hold;
if (512 & state.flags && 4 & state.wrap) {
hbuf[0] = 255 & hold;
hbuf[1] = hold >>> 8 & 255;
hbuf[2] = hold >>> 16 & 255;
hbuf[3] = hold >>> 24 & 255;
state.check = crc32_1(state.check, hbuf, 4, 0);
}
hold = 0;
bits = 0;
state.mode = 16183;
case 16183:
for (;bits < 16; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (state.head) {
state.head.xflags = 255 & hold;
state.head.os = hold >> 8;
}
if (512 & state.flags && 4 & state.wrap) {
hbuf[0] = 255 & hold;
hbuf[1] = hold >>> 8 & 255;
state.check = crc32_1(state.check, hbuf, 2, 0);
}
hold = 0;
bits = 0;
state.mode = 16184;
case 16184:
if (#### & state.flags) {
for (;bits < 16; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.length = hold;
if (state.head) state.head.extra_len = hold;
if (512 & state.flags && 4 & state.wrap) {
hbuf[0] = 255 & hold;
hbuf[1] = hold >>> 8 & 255;
state.check = crc32_1(state.check, hbuf, 2, 0);
}
hold = 0;
bits = 0;
} else if (state.head) state.head.extra = null;
state.mode = 16185;
case 16185:
if (#### & state.flags) {
copy = state.length;
if (copy > have) copy = have;
if (copy) {
if (state.head) {
len = state.head.extra_len - state.length;
if (!state.head.extra) state.head.extra = new Uint8Array(state.head.extra_len);
state.head.extra.set(input.subarray(next, next + copy), len);
}
if (512 & state.flags && 4 & state.wrap) state.check = crc32_1(state.check, input, copy, next);
have -= copy;
next += copy;
state.length -= copy;
}
if (state.length) break inf_leave;
}
state.length = 0;
state.mode = 16186;
case 16186:
if (2048 & state.flags) {
if (0 === have) break inf_leave;
copy = 0;
do {
len = input[next + copy++];
if (state.head && len && state.length < 65536) state.head.name += String.fromCharCode(len);
} while (len && copy < have);
if (512 & state.flags && 4 & state.wrap) state.check = crc32_1(state.check, input, copy, next);
have -= copy;
next += copy;
if (len) break inf_leave;
} else if (state.head) state.head.name = null;
state.length = 0;
state.mode = 16187;
case 16187:
if (4096 & state.flags) {
if (0 === have) break inf_leave;
copy = 0;
do {
len = input[next + copy++];
if (state.head && len && state.length < 65536) state.head.comment += String.fromCharCode(len);
} while (len && copy < have);
if (512 & state.flags && 4 & state.wrap) state.check = crc32_1(state.check, input, copy, next);
have -= copy;
next += copy;
if (len) break inf_leave;
} else if (state.head) state.head.comment = null;
state.mode = 16188;
case 16188:
if (512 & state.flags) {
for (;bits < 16; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (4 & state.wrap && hold !== (65535 & state.check)) {
strm.msg = "header crc mismatch";
state.mode = BAD;
break;
}
hold = 0;
bits = 0;
}
if (state.head) {
state.head.hcrc = state.flags >> 9 & 1;
state.head.done = true;
}
strm.adler = state.check = 0;
state.mode = 16191;
break;
case 16189:
for (;bits < 32; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
strm.adler = state.check = zswap32(hold);
hold = 0;
bits = 0;
state.mode = 16190;
case 16190:
if (0 === state.havedict) {
strm.next_out = put;
strm.avail_out = left;
strm.next_in = next;
strm.avail_in = have;
state.hold = hold;
state.bits = bits;
return Z_NEED_DICT$1;
}
strm.adler = state.check = 1;
state.mode = 16191;
case 16191:
if (flush === Z_BLOCK || flush === Z_TREES) break inf_leave;
case 16192:
if (state.last) {
hold >>>= 7 & bits;
bits -= 7 & bits;
state.mode = 16206;
break;
}
for (;bits < 3; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.last = 1 & hold;
hold >>>= 1;
bits -= 1;
switch (3 & hold) {
case 0:
state.mode = 16193;
break;
case 1:
fixedtables(state);
state.mode = 16199;
if (flush === Z_TREES) {
hold >>>= 2;
bits -= 2;
break inf_leave;
}
break;
case 2:
state.mode = 16196;
break;
case 3:
strm.msg = "invalid block type";
state.mode = BAD;
}
hold >>>= 2;
bits -= 2;
break;
case 16193:
hold >>>= 7 & bits;
bits -= 7 & bits;
for (;bits < 32; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if ((65535 & hold) != (hold >>> 16 ^ 65535)) {
strm.msg = "invalid stored block lengths";
state.mode = BAD;
break;
}
state.length = 65535 & hold;
hold = 0;
bits = 0;
state.mode = 16194;
if (flush === Z_TREES) break inf_leave;
case 16194:
state.mode = 16195;
case 16195:
copy = state.length;
if (copy) {
if (copy > have) copy = have;
if (copy > left) copy = left;
if (0 === copy) break inf_leave;
output.set(input.subarray(next, next + copy), put);
have -= copy;
next += copy;
left -= copy;
put += copy;
state.length -= copy;
break;
}
state.mode = 16191;
break;
case 16196:
for (;bits < 14; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.nlen = 257 + (31 & hold);
hold >>>= 5;
bits -= 5;
state.ndist = 1 + (31 & hold);
hold >>>= 5;
bits -= 5;
state.ncode = 4 + (15 & hold);
hold >>>= 4;
bits -= 4;
if (state.nlen > 286 || state.ndist > 30) {
strm.msg = "too many length or distance symbols";
state.mode = BAD;
break;
}
state.have = 0;
state.mode = 16197;
case 16197:
for (;state.have < state.ncode; ) {
for (;bits < 3; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.lens[order[state.have++]] = 7 & hold;
hold >>>= 3;
bits -= 3;
}
for (;state.have < 19; ) state.lens[order[state.have++]] = 0;
state.lencode = state.lendyn;
state.lenbits = 7;
opts = {
bits: state.lenbits
};
ret = inftrees(0, state.lens, 0, 19, state.lencode, 0, state.work, opts);
state.lenbits = opts.bits;
if (ret) {
strm.msg = "invalid code lengths set";
state.mode = BAD;
break;
}
state.have = 0;
state.mode = 16198;
case 16198:
for (;state.have < state.nlen + state.ndist; ) {
for (;;) {
here = state.lencode[hold & (1 << state.lenbits) - 1];
here_bits = here >>> 24;
here_op = here >>> 16 & 255;
here_val = 65535 & here;
if (here_bits <= bits) break;
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (here_val < 16) {
hold >>>= here_bits;
bits -= here_bits;
state.lens[state.have++] = here_val;
} else {
if (16 === here_val) {
n = here_bits + 2;
for (;bits < n; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
hold >>>= here_bits;
bits -= here_bits;
if (0 === state.have) {
strm.msg = "invalid bit length repeat";
state.mode = BAD;
break;
}
len = state.lens[state.have - 1];
copy = 3 + (3 & hold);
hold >>>= 2;
bits -= 2;
} else if (17 === here_val) {
n = here_bits + 3;
for (;bits < n; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
hold >>>= here_bits;
bits -= here_bits;
len = 0;
copy = 3 + (7 & hold);
hold >>>= 3;
bits -= 3;
} else {
n = here_bits + 7;
for (;bits < n; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
hold >>>= here_bits;
bits -= here_bits;
len = 0;
copy = 11 + (127 & hold);
hold >>>= 7;
bits -= 7;
}
if (state.have + copy > state.nlen + state.ndist) {
strm.msg = "invalid bit length repeat";
state.mode = BAD;
break;
}
for (;copy--; ) state.lens[state.have++] = len;
}
}
if (state.mode === BAD) break;
if (0 === state.lens[256]) {
strm.msg = "invalid code -- missing end-of-block";
state.mode = BAD;
break;
}
state.lenbits = 9;
opts = {
bits: state.lenbits
};
ret = inftrees(1, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
state.lenbits = opts.bits;
if (ret) {
strm.msg = "invalid literal/lengths set";
state.mode = BAD;
break;
}
state.distbits = 6;
state.distcode = state.distdyn;
opts = {
bits: state.distbits
};
ret = inftrees(2, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
state.distbits = opts.bits;
if (ret) {
strm.msg = "invalid distances set";
state.mode = BAD;
break;
}
state.mode = 16199;
if (flush === Z_TREES) break inf_leave;
case 16199:
state.mode = 16200;
case 16200:
if (have >= 6 && left >= 258) {
strm.next_out = put;
strm.avail_out = left;
strm.next_in = next;
strm.avail_in = have;
state.hold = hold;
state.bits = bits;
inffast(strm, _out);
put = strm.next_out;
output = strm.output;
left = strm.avail_out;
next = strm.next_in;
input = strm.input;
have = strm.avail_in;
hold = state.hold;
bits = state.bits;
if (16191 === state.mode) state.back = -1;
break;
}
state.back = 0;
for (;;) {
here = state.lencode[hold & (1 << state.lenbits) - 1];
here_bits = here >>> 24;
here_op = here >>> 16 & 255;
here_val = 65535 & here;
if (here_bits <= bits) break;
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (here_op && !(240 & here_op)) {
last_bits = here_bits;
last_op = here_op;
last_val = here_val;
for (;;) {
here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
here_bits = here >>> 24;
here_op = here >>> 16 & 255;
here_val = 65535 & here;
if (last_bits + here_bits <= bits) break;
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
hold >>>= last_bits;
bits -= last_bits;
state.back += last_bits;
}
hold >>>= here_bits;
bits -= here_bits;
state.back += here_bits;
state.length = here_val;
if (0 === here_op) {
state.mode = 16205;
break;
}
if (32 & here_op) {
state.back = -1;
state.mode = 16191;
break;
}
if (64 & here_op) {
strm.msg = "invalid literal/length code";
state.mode = BAD;
break;
}
state.extra = 15 & here_op;
state.mode = 16201;
case 16201:
if (state.extra) {
n = state.extra;
for (;bits < n; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.length += hold & (1 << state.extra) - 1;
hold >>>= state.extra;
bits -= state.extra;
state.back += state.extra;
}
state.was = state.length;
state.mode = 16202;
case 16202:
for (;;) {
here = state.distcode[hold & (1 << state.distbits) - 1];
here_bits = here >>> 24;
here_op = here >>> 16 & 255;
here_val = 65535 & here;
if (here_bits <= bits) break;
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (!(240 & here_op)) {
last_bits = here_bits;
last_op = here_op;
last_val = here_val;
for (;;) {
here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
here_bits = here >>> 24;
here_op = here >>> 16 & 255;
here_val = 65535 & here;
if (last_bits + here_bits <= bits) break;
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
hold >>>= last_bits;
bits -= last_bits;
state.back += last_bits;
}
hold >>>= here_bits;
bits -= here_bits;
state.back += here_bits;
if (64 & here_op) {
strm.msg = "invalid distance code";
state.mode = BAD;
break;
}
state.offset = here_val;
state.extra = 15 & here_op;
state.mode = 16203;
case 16203:
if (state.extra) {
n = state.extra;
for (;bits < n; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
state.offset += hold & (1 << state.extra) - 1;
hold >>>= state.extra;
bits -= state.extra;
state.back += state.extra;
}
if (state.offset > state.dmax) {
strm.msg = "invalid distance too far back";
state.mode = BAD;
break;
}
state.mode = 16204;
case 16204:
if (0 === left) break inf_leave;
copy = _out - left;
if (state.offset > copy) {
copy = state.offset - copy;
if (copy > state.whave) if (state.sane) {
strm.msg = "invalid distance too far back";
state.mode = BAD;
break;
}
if (copy > state.wnext) {
copy -= state.wnext;
from = state.wsize - copy;
} else from = state.wnext - copy;
if (copy > state.length) copy = state.length;
from_source = state.window;
} else {
from_source = output;
from = put - state.offset;
copy = state.length;
}
if (copy > left) copy = left;
left -= copy;
state.length -= copy;
do {
output[put++] = from_source[from++];
} while (--copy);
if (0 === state.length) state.mode = 16200;
break;
case 16205:
if (0 === left) break inf_leave;
output[put++] = state.length;
left--;
state.mode = 16200;
break;
case 16206:
if (state.wrap) {
for (;bits < 32; ) {
if (0 === have) break inf_leave;
have--;
hold |= input[next++] << bits;
bits += 8;
}
_out -= left;
strm.total_out += _out;
state.total += _out;
if (4 & state.wrap && _out) strm.adler = state.check = state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out);
_out = left;
if (4 & state.wrap && (state.flags ? hold : zswap32(hold)) !== state.check) {
strm.msg = "incorrect data check";
state.mode = BAD;
break;
}
hold = 0;
bits = 0;
}
state.mode = 16207;
case 16207:
if (state.wrap && state.flags) {
for (;bits < 32; ) {
if (0 === have) break inf_leave;
have--;
hold += input[next++] << bits;
bits += 8;
}
if (4 & state.wrap && hold !== (4294967295 & state.total)) {
strm.msg = "incorrect length check";
state.mode = BAD;
break;
}
hold = 0;
bits = 0;
}
state.mode = 16208;
case 16208:
ret = Z_STREAM_END$1;
break inf_leave;
case BAD:
ret = Z_DATA_ERROR$1;
break inf_leave;
case 16210:
return Z_MEM_ERROR$1;
default:
return Z_STREAM_ERROR$1;
}
strm.next_out = put;
strm.avail_out = left;
strm.next_in = next;
strm.avail_in = have;
state.hold = hold;
state.bits = bits;
if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < 16206 || flush !== Z_FINISH$1)) if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;
_in -= strm.avail_in;
_out -= strm.avail_out;
strm.total_in += _in;
strm.total_out += _out;
state.total += _out;
if (4 & state.wrap && _out) strm.adler = state.check = state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out);
strm.data_type = state.bits + (state.last ? 64 : 0) + (16191 === state.mode ? 128 : 0) + (16199 === state.mode || 16194 === state.mode ? 256 : 0);
if ((0 === _in && 0 === _out || flush === Z_FINISH$1) && ret === Z_OK$1) ret = Z_BUF_ERROR;
return ret;
},
inflateEnd: strm => {
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
let state = strm.state;
if (state.window) state.window = null;
strm.state = null;
return Z_OK$1;
},
inflateGetHeader: (strm, head) => {
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
const state = strm.state;
if (!(2 & state.wrap)) return Z_STREAM_ERROR$1;
state.head = head;
head.done = false;
return Z_OK$1;
},
inflateSetDictionary: (strm, dictionary) => {
const dictLength = dictionary.length;
let state, dictid, ret;
if (inflateStateCheck(strm)) return Z_STREAM_ERROR$1;
state = strm.state;
if (0 !== state.wrap && 16190 !== state.mode) return Z_STREAM_ERROR$1;
if (16190 === state.mode) {
dictid = 1;
dictid = adler32_1(dictid, dictionary, dictLength, 0);
if (dictid !== state.check) return Z_DATA_ERROR$1;
}
ret = updatewindow(strm, dictionary, dictLength, dictLength);
if (ret) {
state.mode = 16210;
return Z_MEM_ERROR$1;
}
state.havedict = 1;
return Z_OK$1;
},
inflateInfo: "pako inflate (from Nodeca project)"
};
var gzheader = function GZheader() {
this.text = 0;
this.time = 0;
this.xflags = 0;
this.os = 0;
this.extra = null;
this.extra_len = 0;
this.name = "";
this.comment = "";
this.hcrc = 0;
this.done = false;
};
const pako_esm_toString = Object.prototype.toString, {Z_NO_FLUSH, Z_FINISH, Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR} = constants$2;
function Inflate$1(options) {
this.options = common_assign({
chunkSize: 65536,
windowBits: 15,
to: ""
}, options || {});
const opt = this.options;
if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
opt.windowBits = -opt.windowBits;
if (0 === opt.windowBits) opt.windowBits = -15;
}
if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) opt.windowBits += 32;
if (opt.windowBits > 15 && opt.windowBits < 48) if (!(15 & opt.windowBits)) opt.windowBits |= 15;
this.err = 0;
this.msg = "";
this.ended = false;
this.chunks = [];
this.strm = new zstream;
this.strm.avail_out = 0;
let status = inflate_1$2.inflateInit2(this.strm, opt.windowBits);
if (status !== Z_OK) throw new Error(messages[status]);
this.header = new gzheader;
inflate_1$2.inflateGetHeader(this.strm, this.header);
if (opt.dictionary) {
if ("string" == typeof opt.dictionary) opt.dictionary = strings_string2buf(opt.dictionary); else if ("[object ArrayBuffer]" === pako_esm_toString.call(opt.dictionary)) opt.dictionary = new Uint8Array(opt.dictionary);
if (opt.raw) {
status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);
if (status !== Z_OK) throw new Error(messages[status]);
}
}
}
Inflate$1.prototype.push = function(data, flush_mode) {
const strm = this.strm, chunkSize = this.options.chunkSize, dictionary = this.options.dictionary;
let status, _flush_mode, last_avail_out;
if (this.ended) return false;
if (flush_mode === ~~flush_mode) _flush_mode = flush_mode; else _flush_mode = true === flush_mode ? Z_FINISH : Z_NO_FLUSH;
if ("[object ArrayBuffer]" === pako_esm_toString.call(data)) strm.input = new Uint8Array(data); else strm.input = data;
strm.next_in = 0;
strm.avail_in = strm.input.length;
for (;;) {
if (0 === strm.avail_out) {
strm.output = new Uint8Array(chunkSize);
strm.next_out = 0;
strm.avail_out = chunkSize;
}
status = inflate_1$2.inflate(strm, _flush_mode);
if (status === Z_NEED_DICT && dictionary) {
status = inflate_1$2.inflateSetDictionary(strm, dictionary);
if (status === Z_OK) status = inflate_1$2.inflate(strm, _flush_mode); else if (status === Z_DATA_ERROR) status = Z_NEED_DICT;
}
for (;strm.avail_in > 0 && status === Z_STREAM_END && strm.state.wrap > 0 && 0 !== data[strm.next_in]; ) {
inflate_1$2.inflateReset(strm);
status = inflate_1$2.inflate(strm, _flush_mode);
}
switch (status) {
case Z_STREAM_ERROR:
case Z_DATA_ERROR:
case Z_NEED_DICT:
case Z_MEM_ERROR:
this.onEnd(status);
this.ended = true;
return false;
}
last_avail_out = strm.avail_out;
if (strm.next_out) if (0 === strm.avail_out || status === Z_STREAM_END) if ("string" === this.options.to) {
let next_out_utf8 = strings_utf8border(strm.output, strm.next_out), tail = strm.next_out - next_out_utf8, utf8str = strings_buf2string(strm.output, next_out_utf8);
strm.next_out = tail;
strm.avail_out = chunkSize - tail;
if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);
this.onData(utf8str);
} else this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));
if (status !== Z_OK || 0 !== last_avail_out) {
if (status === Z_STREAM_END) {
status = inflate_1$2.inflateEnd(this.strm);
this.onEnd(status);
this.ended = true;
return true;
}
if (0 === strm.avail_in) break;
}
}
return true;
};
Inflate$1.prototype.onData = function(chunk) {
this.chunks.push(chunk);
};
Inflate$1.prototype.onEnd = function(status) {
if (status === Z_OK) if ("string" === this.options.to) this.r###lt = this.chunks.join(""); else this.r###lt = common_flattenChunks(this.chunks);
this.chunks = [];
this.err = status;
this.msg = this.strm.msg;
};
function inflate$1(input, options) {
const inflator = new Inflate$1(options);
inflator.push(input);
if (inflator.err) throw inflator.msg || messages[inflator.err];
return inflator.r###lt;
}
var inflateRaw_1$1 = function inflateRaw$1(input, options) {
(options = options || {}).raw = true;
return inflate$1(input, options);
}, inflate_1$1 = {
Inflate: Inflate$1,
inflate: inflate$1,
inflateRaw: inflateRaw_1$1,
ungzip: inflate$1,
constants: constants$2
};
const {Deflate, deflate, deflateRaw, gzip} = deflate_1$1, {Inflate, inflate, inflateRaw, ungzip} = inflate_1$1;
var pako = {
Deflate,
deflate,
deflateRaw,
gzip,
Inflate,
inflate,
inflateRaw,
ungzip,
constants: constants$2
};
class PakoWrapper {
static compress(input) {
const compressedData = pako.deflate(input);
return this.uint8ArrayToBase64(compressedData);
}
static decompress(compressed) {
const compressedUint8Array = this.base64ToUint8Array(compressed);
return (new TextDecoder).decode(pako.inflate(compressedUint8Array));
}
static uint8ArrayToBase64(uint8Array) {
let binary = "";
const len = uint8Array.byteLength;
for (let i = 0; i < len; i++) binary += String.fromCharCode(uint8Array[i]);
return btoa(binary);
}
static base64ToUint8Array(base64) {
const binary = atob(base64), len = binary.length, bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) bytes[i] = binary.charCodeAt(i);
return bytes;
}
}
var FigureDataSaver_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class FigureDataSaver {
static saveFigures(figures) {
return FigureDataSaver_awaiter(this, void 0, void 0, (function*() {
const figureStrings = figures.map((figure => figure.outerHTML)), json = JSON.stringify(figureStrings), compressed = PakoWrapper.compress(json);
yield StorageWrapper.setItemAsync(this.scanR###ltId, compressed);
}));
}
static loadFigures() {
return FigureDataSaver_awaiter(this, void 0, void 0, (function*() {
const figureStrings = yield StorageWrapper.getItemAsync(this.scanR###ltId);
if (null == figureStrings) return [];
const decompressed = PakoWrapper.decompress(figureStrings), htmlStrings = JSON.parse(decompressed), parser = new DOMParser;
return htmlStrings.map((htmlString => parser.parseFromString(htmlString, "text/html").body.firstElementChild));
}));
}
static clear() {
return FigureDataSaver_awaiter(this, void 0, void 0, (function*() {
yield StorageWrapper.removeItemAsync(this.scanR###ltId);
}));
}
}
FigureDataSaver.scanR###ltId = "wfv-scan-r###lts";
var WatchesFavoritesPage_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class WatchesFavoritesPage {
constructor() {
var _a;
const standardPage = document.getElementById("standardpage");
let gallery = standardPage.querySelector('section[id="gallery-0"]');
if (null == gallery) {
const messageCenterSubmissions = standardPage.querySelector('div[id="messagecenter-submissions"]');
gallery = document.createElement("section");
gallery.id = "gallery-0";
gallery.classList.add("gallery", "messagecenter", "with-checkboxes", "s-250", "wfv-gallery");
messageCenterSubmissions.appendChild(gallery);
}
this.gallerySection = gallery;
const sectionHeader = null === (_a = standardPage.querySelector('div[class*="section-header"]')) || void 0 === _a ? void 0 : _a.parentElement, headerElem = null == sectionHeader ? void 0 : sectionHeader.querySelector("h2");
if (null != headerElem) headerElem.textContent = "Watches Favorites";
!function cleanUpToParent(child, parent, ...ignoreElements) {
let current = child;
for (;null != current && current !== parent; ) {
let parentElement = current.parentElement;
if (!parentElement) break;
Array.from(parentElement.children).forEach((childNode => {
if (childNode !== current && !ignoreElements.includes(childNode)) childNode.remove();
}));
current = parentElement;
}
}(this.gallerySection, standardPage, sectionHeader);
this.gallerySection.insertBeforeThis(document.createElement("br"));
const figures = this.gallerySection.querySelectorAll("figure");
for (const figure of Array.from(figures)) figure.remove();
this.show();
}
show() {
return WatchesFavoritesPage_awaiter(this, void 0, void 0, (function*() {
const loadingSpinner = new window.FALoadingSpinner(this.gallerySection);
loadingSpinner.delay = loadingSpinSpeedSetting.value;
loadingSpinner.spinnerThickness = 6;
loadingSpinner.visible = true;
const figures = yield FigureDataSaver.loadFigures();
this.gallerySection.append(...figures);
window.dispatchEvent(new CustomEvent("ei-update-embedded"));
!function checkTagsAll(doc) {
if (null == doc) return;
doc.querySelectorAll("img[data-tags]").forEach((element => checkTags(element)));
}(document);
loadingSpinner.visible = false;
}));
}
}
const string = class {
static isNullOrWhitespace(str) {
return null == str || "" === str.trim();
}
static isNullOrEmpty(str) {
return null == str || "" === str;
}
};
var LastSidList_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class LastSidList {
static setSid(username, sid) {
return LastSidList_awaiter(this, void 0, void 0, (function*() {
const sids = yield this.getSidList();
sids[username] = sid;
const json = JSON.stringify(sids);
yield StorageWrapper.setItemAsync(this.id, json);
}));
}
static getSid(username) {
return LastSidList_awaiter(this, void 0, void 0, (function*() {
var _a;
return null !== (_a = (yield this.getSidList())[username]) && void 0 !== _a ? _a : null;
}));
}
static clearSidList() {
return LastSidList_awaiter(this, void 0, void 0, (function*() {
yield StorageWrapper.removeItemAsync(this.id);
}));
}
static getSidList() {
return LastSidList_awaiter(this, void 0, void 0, (function*() {
var _a;
const json = null !== (_a = yield StorageWrapper.getItemAsync(this.id)) && void 0 !== _a ? _a : "{}";
return JSON.parse(json);
}));
}
}
LastSidList.id = "wfv-last-favs";
var WatchFavScanner_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class WatchFavScanner {
constructor(username, lastSid) {
this.username = username;
this.lastSid = lastSid;
}
scan() {
return WatchFavScanner_awaiter(this, arguments, void 0, (function*(updateLastSid = false) {
let initSuccess = false;
if (null == this.lastSid || -1 === this.lastSid) {
Logger.logWarning("No last sid given. Initializing...");
initSuccess = yield this.init();
if (!initSuccess) return [];
}
let newFigures = (yield requestHelper.UserRequests.GalleryRequests.Favorites.getFiguresBetweenIds(this.username, -1, this.lastSid)).flat();
for (const figure of newFigures) try {
figure.setAttribute("wfv-from-user", this.username);
figure.setAttribute("wfv-from-userDisplay", this.username);
} catch (_a) {
Logger.logError(`Failed to process figure for: ${this.username}`);
continue;
}
if (!initSuccess) {
const lastSidIndex = newFigures.findIndex((figure => figure.id === `sid-${this.lastSid}`));
newFigures = newFigures.slice(0, lastSidIndex);
}
if (updateLastSid && 0 !== newFigures.length) {
this.lastSid = newFigures[0].id.trimStart("sid-");
yield LastSidList.setSid(this.username, this.lastSid);
}
return newFigures;
}));
}
init() {
return WatchFavScanner_awaiter(this, void 0, void 0, (function*() {
var _a;
const favPage = yield requestHelper.UserRequests.GalleryRequests.Favorites.getPage(this.username), section = null == favPage ? void 0 : favPage.getElementById("gallery-favorites");
this.lastSid = null === (_a = null == section ? void 0 : section.querySelector("figure")) || void 0 === _a ? void 0 : _a.id.trimStart("sid-");
return null != this.lastSid;
}));
}
}
class Semaphore {
constructor(maxConcurrency) {
this.maxConcurrency = maxConcurrency;
this.currentConcurrency = 0;
this.waitingQueue = [];
}
acquire() {
return new Promise((resolve => {
if (this.currentConcurrency < this.maxConcurrency) {
this.currentConcurrency++;
resolve();
} else this.waitingQueue.push(resolve);
}));
}
release() {
if (this.waitingQueue.length > 0) {
const nextResolve = this.waitingQueue.shift();
if (null != nextResolve) nextResolve();
} else this.currentConcurrency--;
}
}
function getByContainerFromFigure(figure) {
const figCaption = figure.querySelector("figcaption"), byElem = null == figCaption ? void 0 : figCaption.querySelector("i");
return null == byElem ? void 0 : byElem.parentElement;
}
var FavsScanner_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class FavsScanner {
constructor() {
this.lastFavIds = {};
this.ignoredUsers = [];
}
init() {
return FavsScanner_awaiter(this, void 0, void 0, (function*() {
this.lastFavIds = yield LastSidList.getSidList();
this.ignoredUsers = yield IgnoreList.getIgnoreList();
}));
}
scanAllUsers(callBack) {
return FavsScanner_awaiter(this, void 0, void 0, (function*() {
yield StorageWrapper.removeItemAsync(FavsScanner.progressPercentId);
const usernames = (yield requestHelper.PersonalUserRequests.ManageContent.getAllWatchesPages()).map((page => getWatchesFromPage(page))).flat().map((watch => {
var _a;
return null === (_a = watch.querySelector("img[alt]")) || void 0 === _a ? void 0 : _a.getAttribute("alt");
})), semaphore = new Semaphore(requestHelper.maxAmountRequests), validUsernames = usernames.filter((username => !string.isNullOrWhitespace(username) && !this.ignoredUsers.includes(username)));
let figures = [], percent = 0, current = 0;
const total = validUsernames.length;
yield Promise.all(validUsernames.map((username => FavsScanner_awaiter(this, void 0, void 0, (function*() {
yield semaphore.acquire();
try {
const userFigures = yield this.scanUser(username);
figures.push(...userFigures);
current++;
percent = current / total * 100;
yield StorageWrapper.setItemAsync(FavsScanner.progressPercentId, percent.toFixed(2));
null == callBack || callBack(username, percent, userFigures);
} finally {
semaphore.release();
}
})))));
figures = this.applyFigureSettings(figures);
return figures;
}));
}
scanUser(username) {
return FavsScanner_awaiter(this, void 0, void 0, (function*() {
var _a;
const lastFavId = null === (_a = this.lastFavIds[username]) || void 0 === _a ? void 0 : _a.trimStart("sid-"), watchFavScanner = new WatchFavScanner(username, lastFavId);
let figures = yield watchFavScanner.scan(true);
if (figures.length > maxFavsAmountSetting.value) figures = figures.slice(0, maxFavsAmountSetting.value);
return figures;
}));
}
applyFigureSettings(figures) {
if (!showDublicateFavsSetting.value) {
const seenIds = new Set;
figures = figures.filter((figure => {
if (!seenIds.has(figure.id)) {
seenIds.add(figure.id);
return true;
}
return false;
}));
}
if (showFavFromWatcherSetting.value) for (const figure of figures) try {
const fromUser = figure.getAttribute("wfv-from-user"), fromUserDisplay = figure.getAttribute("wfv-from-userDisplay"), byElemContainer = getByContainerFromFigure(figure), fromContainer = document.createElement("p");
fromContainer.classList.add("wfv-from-container");
const fromElem = document.createElement("i");
fromElem.classList.add("wfv-from-elem");
fromElem.textContent = "from ";
fromContainer.appendChild(fromElem);
const fromElemValue = document.createElement("a");
fromElemValue.classList.add("wfv-from-elem-value");
fromElemValue.textContent = fromUserDisplay;
fromElemValue.href = `/user/${fromUser}`;
fromElemValue.title = fromUserDisplay;
fromElemValue.style.fontWeight = "100";
fromContainer.appendChild(fromElemValue);
byElemContainer.insertAfterThis(fromContainer);
} catch (_a) {
Logger.logError(`Failed to get from watch for ${figure.id}`);
}
return figures;
}
}
FavsScanner.progressPercentId = "wfv-scan-progress-percent";
var Migrate_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
function migrate() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
yield function migrateIgnoreList() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
var _a;
const oldIgnoreListJson = null !== (_a = yield StorageWrapper.getItemAsync("wfexcludedusers")) && void 0 !== _a ? _a : "[]", oldIgnoreList = JSON.parse(oldIgnoreListJson);
for (const username of oldIgnoreList) yield IgnoreList.add(username);
yield StorageWrapper.removeItemAsync("wfexcludedusers");
}));
}();
yield function migrateLastSidList() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
var _a;
const oldLastSidListJson = null !== (_a = yield StorageWrapper.getItemAsync("wflastfavs")) && void 0 !== _a ? _a : "{}", oldLastSidList = JSON.parse(oldLastSidListJson);
for (const [username, sid] of Object.entries(oldLastSidList)) yield LastSidList.setSid(username, sid.trimStart("sid-"));
yield StorageWrapper.removeItemAsync("wflastfavs");
}));
}();
yield StorageWrapper.removeItemAsync("wfloadingstate");
yield StorageWrapper.removeItemAsync("wfloading");
yield StorageWrapper.removeItemAsync("wfcurrentfavs");
}));
}
function checkMigrationNeeded() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
return (yield function checkIgnoreListMigrationNeeded() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
const oldIgnoreListJson = yield StorageWrapper.getItemAsync("wfexcludedusers");
return !string.isNullOrWhitespace(oldIgnoreListJson);
}));
}()) || (yield function checkSidListMigrationNeeded() {
return Migrate_awaiter(this, void 0, void 0, (function*() {
const oldLastSidListJson = yield StorageWrapper.getItemAsync("wflastfavs");
return !string.isNullOrWhitespace(oldLastSidListJson);
}));
}());
}));
}
var MessageBoxButtons, MessageBoxIcon, DialogR###lt, MessageBoxThemes, WatchScanButton_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class WatchScanButton {
constructor() {
const messageBar = document.getElementById("ddmenu").querySelector('ul[class*="navhideonmobile"]').querySelector('li[class*="message-bar-desktop"]');
this.wfButton = document.createElement("a");
this.wfButton.id = "wfButton";
this.wfButton.className = "notification-container inline";
this.wfButton.title = "Start a WF scan";
this.wfButton.style.cursor = "pointer";
this.wfButton.textContent = "WF Scan";
this.wfButton.onclick = () => {
this.startScan();
};
messageBar.appendChild(this.wfButton);
}
startScan() {
return WatchScanButton_awaiter(this, void 0, void 0, (function*() {
if (yield checkMigrationNeeded()) {
const r###lt = yield window.FAMessageBox.show("Watches Favorite Viewer updated.Do you want to migrate your old data?", "Confirm Migration", window.FAMessageBoxButtons.YesNoCancel, window.FAMessageBoxIcon.Question);
if (r###lt === window.FADialogR###lt.Yes) yield migrate(); else if (r###lt === window.FADialogR###lt.Cancel) return;
}
this.wfButton.textContent = "WF: 0.00%";
const scanner = new FavsScanner;
yield scanner.init();
const figures = yield scanner.scanAllUsers(((username, percent, userFigures) => {
Logger.logInfo(`${percent}% | ${username} | ${userFigures.length}`);
this.wfButton.textContent = `WF: ${percent.toFixed(2)}%`;
}));
if (0 !== figures.length) {
yield FigureDataSaver.saveFigures(figures);
this.wfButton.textContent = `${figures.length}WF`;
this.wfButton.onclick = null;
this.wfButton.href = "https://www.furaffinity.net/msg/submissions/?mode=wfv-favorites";
} else this.wfButton.textContent = "WF Scan again";
}));
}
}
WatchScanButton.scanR###ltId = "wfv-scan-r###lts";
!function(MessageBoxButtons) {
MessageBoxButtons[MessageBoxButtons.OK = 0] = "OK";
MessageBoxButtons[MessageBoxButtons.OKCancel = 1] = "OKCancel";
MessageBoxButtons[MessageBoxButtons.AbortRetryIgnore = 2] = "AbortRetryIgnore";
MessageBoxButtons[MessageBoxButtons.YesNoCancel = 3] = "YesNoCancel";
MessageBoxButtons[MessageBoxButtons.YesNo = 4] = "YesNo";
MessageBoxButtons[MessageBoxButtons.RetryCancel = 5] = "RetryCancel";
}(MessageBoxButtons || (MessageBoxButtons = {}));
!function(MessageBoxIcon) {
MessageBoxIcon[MessageBoxIcon.None = 0] = "None";
MessageBoxIcon[MessageBoxIcon.Error = 16] = "Error";
MessageBoxIcon[MessageBoxIcon.Warning = 48] = "Warning";
MessageBoxIcon[MessageBoxIcon.Information = 64] = "Information";
MessageBoxIcon[MessageBoxIcon.Question = 32] = "Question";
}(MessageBoxIcon || (MessageBoxIcon = {}));
!function(DialogR###lt) {
DialogR###lt[DialogR###lt.None = 0] = "None";
DialogR###lt[DialogR###lt.OK = 1] = "OK";
DialogR###lt[DialogR###lt.Cancel = 2] = "Cancel";
DialogR###lt[DialogR###lt.Abort = 3] = "Abort";
DialogR###lt[DialogR###lt.Retry = 4] = "Retry";
DialogR###lt[DialogR###lt.Ignore = 5] = "Ignore";
DialogR###lt[DialogR###lt.Yes = 6] = "Yes";
DialogR###lt[DialogR###lt.No = 7] = "No";
}(DialogR###lt || (DialogR###lt = {}));
class MessageBoxIcons {
static getIconSvg(icon) {
switch (icon) {
case MessageBoxIcon.Error:
return '<svg xmlns="http://www.w3.org/2000/svg" height="32px" viewBox="0 -960 960 960" width="32px" fill="#ff0000"><path d="M480-280q17 0 28.5-11.5T520-320q0-17-11.5-28.5T480-360q-17 0-28.5 11.5T440-320q0 17 11.5 28.5T480-280Zm-40-160h80v-240h-80v240Zm40 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>';
case MessageBoxIcon.Warning:
return '<svg xmlns="http://www.w3.org/2000/svg" height="32px" viewBox="0 -960 960 960" width="32px" fill="#ffcc4d"><path d="m40-120 440-760 440 760H40Zm138-80h604L480-720 178-200Zm302-40q17 0 28.5-11.5T520-280q0-17-11.5-28.5T480-320q-17 0-28.5 11.5T440-280q0 17 11.5 28.5T480-240Zm-40-120h80v-200h-80v200Zm40-100Z"/></svg>';
case MessageBoxIcon.Information:
return '<svg xmlns="http://www.w3.org/2000/svg" height="32px" viewBox="0 -960 960 960" width="32px" fill="#2196f3"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>';
case MessageBoxIcon.Question:
return '<svg xmlns="http://www.w3.org/2000/svg" height="32px" viewBox="0 -960 960 960" width="32px" fill="#2196f3"><path d="M478-240q21 0 35.5-14.5T528-290q0-21-14.5-35.5T478-340q-21 0-35.5 14.5T428-290q0 21 14.5 35.5T478-240Zm-36-154h74q0-33 7.5-52t42.5-52q26-26 41-49.5t15-56.5q0-56-41-86t-97-30q-57 0-92.5 30T342-618l66 26q5-18 22.5-39t53.5-21q32 0 48 17.5t16 38.5q0 20-12 37.5T506-526q-44 39-54 59t-10 73Zm38 314q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>';
case MessageBoxIcon.None:
default:
return "";
}
}
}
!function(MessageBoxThemes) {
MessageBoxThemes.Dark = "dark";
MessageBoxThemes.Aurora = "aurora";
MessageBoxThemes.Retro = "retro";
MessageBoxThemes.Slate = "slate";
MessageBoxThemes.Light = "light";
}(MessageBoxThemes || (MessageBoxThemes = {}));
var src_styles_Style = __webpack_require__(978), Style_options = {};
Style_options.styleTagTransform = styleTagTransform_default();
Style_options.setAttributes = setAttributesWithoutAttributes_default();
Style_options.insert = insertBySelector_default().bind(null, "head");
Style_options.domAPI = styleDomAPI_default();
Style_options.insertStyleElement = insertStyleElement_default();
injectStylesIntoStyleTag_default()(src_styles_Style.A, Style_options);
src_styles_Style.A && src_styles_Style.A.locals && src_styles_Style.A.locals;
var MessageBox_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
class MessageBox {
static getTheme() {
return this.currentTheme;
}
static show(text_1) {
return MessageBox_awaiter(this, arguments, void 0, (function*(text, caption = "", buttons = MessageBoxButtons.OK, icon = MessageBoxIcon.None) {
return new Promise((resolve => {
this.resolvePromise = resolve;
this.createMessageBox(text, caption, buttons, icon);
}));
}));
}
static createMessageBox(text, caption, buttons, icon) {
this.overlay = document.createElement("div");
this.overlay.className = "message-box-overlay";
this.container = document.createElement("div");
this.container.className = "message-box-container";
const header = document.createElement("div");
header.className = "message-box-header";
if (icon !== MessageBoxIcon.None) {
const iconContainer = document.createElement("div");
iconContainer.className = "message-box-icon-container";
iconContainer.innerHTML = MessageBoxIcons.getIconSvg(icon);
header.appendChild(iconContainer);
}
if (!string.isNullOrWhitespace(caption)) {
const title = document.createElement("h3");
title.className = "message-box-title";
title.textContent = caption;
header.appendChild(title);
}
if (0 !== header.children.length) this.container.appendChild(header);
const content = document.createElement("div");
content.className = "message-box-content";
content.textContent = text;
this.container.appendChild(content);
const buttonContainer = document.createElement("div");
buttonContainer.className = "message-box-button-container";
this.addButtons(buttonContainer, buttons);
this.container.appendChild(buttonContainer);
this.overlay.appendChild(this.container);
document.body.appendChild(this.overlay);
}
static addButtons(buttonContainer, buttons) {
switch (buttons) {
case MessageBoxButtons.OK:
this.createButton(buttonContainer, "OK", DialogR###lt.OK);
break;
case MessageBoxButtons.OKCancel:
this.createButton(buttonContainer, "OK", DialogR###lt.OK);
this.createButton(buttonContainer, "Cancel", DialogR###lt.Cancel);
break;
case MessageBoxButtons.AbortRetryIgnore:
this.createButton(buttonContainer, "Abort", DialogR###lt.Abort);
this.createButton(buttonContainer, "Retry", DialogR###lt.Retry);
this.createButton(buttonContainer, "Ignore", DialogR###lt.Ignore);
break;
case MessageBoxButtons.YesNoCancel:
this.createButton(buttonContainer, "Yes", DialogR###lt.Yes);
this.createButton(buttonContainer, "No", DialogR###lt.No);
this.createButton(buttonContainer, "Cancel", DialogR###lt.Cancel);
break;
case MessageBoxButtons.YesNo:
this.createButton(buttonContainer, "Yes", DialogR###lt.Yes);
this.createButton(buttonContainer, "No", DialogR###lt.No);
break;
case MessageBoxButtons.RetryCancel:
this.createButton(buttonContainer, "Retry", DialogR###lt.Retry);
this.createButton(buttonContainer, "Cancel", DialogR###lt.Cancel);
}
}
static createButton(container, text, r###lt) {
const button = document.createElement("button");
button.className = "message-box-button";
button.textContent = text;
button.addEventListener("click", (() => {
this.close(r###lt);
}));
container.appendChild(button);
}
static close(r###lt) {
this.r###lt = r###lt;
if (null != this.overlay) {
document.body.removeChild(this.overlay);
this.overlay = null;
this.container = null;
}
if (null != this.resolvePromise) {
this.resolvePromise(r###lt);
this.resolvePromise = null;
}
}
}
MessageBox.overlay = null;
MessageBox.container = null;
MessageBox.r###lt = DialogR###lt.None;
MessageBox.resolvePromise = null;
MessageBox.currentTheme = MessageBoxThemes.Light;
class WatchesFavoritesMenuButton {
constructor() {
var _a;
const ddmenu = document.getElementById("ddmenu"), navBar = null == ddmenu ? void 0 : ddmenu.querySelector('ul[class*="navhideonmobile"]'), settings = null === (_a = null == navBar ? void 0 : navBar.querySelector('a[href="/controls/settings/"]')) || void 0 === _a ? void 0 : _a.parentNode, badges = null == settings ? void 0 : settings.querySelector('a[href="/controls/badges/"]');
if (null != badges) {
const wfButton = document.createElement("a");
wfButton.id = "wfv-menu-button";
wfButton.textContent = "Watches Favorites";
wfButton.href = "https://www.furaffinity.net/msg/submissions?mode=wfv-favorites";
badges.insertAfterThis(wfButton);
}
}
}
var src_awaiter = function(thisArg, _arguments, P, generator) {
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(r###lt) {
r###lt.done ? resolve(r###lt.value) : function adopt(value) {
return value instanceof P ? value : new P((function(resolve) {
resolve(value);
}));
}(r###lt.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
}));
};
const customSettings = new window.FACustomSettings("Midori's Script Settings", "FA Watches Favorites Viewer Settings"), showLoadLastXFavsButtonSetting = customSettings.newSetting(window.FASettingType.Boolean, "Show load last X Favs");
showLoadLastXFavsButtonSetting.description = "Sets wether the search for similar Pages button is show.";
showLoadLastXFavsButtonSetting.defaultValue = false;
const maxFavsAmountSetting = customSettings.newSetting(window.FASettingType.Number, "Max Favs Amount");
maxFavsAmountSetting.description = "Sets the maximum number of Favs loaded per Watch.";
maxFavsAmountSetting.defaultValue = 100;
const showDublicateFavsSetting = customSettings.newSetting(window.FASettingType.Boolean, "Show Dublicate Favs");
showDublicateFavsSetting.description = "Sets wether to show dublicate Submissions. (when multiple people Faved the same Submission)";
showDublicateFavsSetting.defaultValue = true;
const showFavFromWatcherSetting = customSettings.newSetting(window.FASettingType.Boolean, "Show Fav From Watcher");
showFavFromWatcherSetting.description = "Sets wether to show from which watch the Fav comes.";
showFavFromWatcherSetting.defaultValue = true;
const loadingSpinSpeedSetting = customSettings.newSetting(window.FASettingType.Number, "Loading Animation Speed");
loadingSpinSpeedSetting.description = "The duration that the loading animation of the Embedded element to load takes for a full rotation in milliseconds.";
loadingSpinSpeedSetting.defaultValue = 1e3;
const resetLastSeenFavsSetting = customSettings.newSetting(window.FASettingType.Action, "Reset Last Seen Favs");
resetLastSeenFavsSetting.description = "Resets the last seen favs variable to reinitialize the Fav-Scanner.";
resetLastSeenFavsSetting.addEventListener("input", (() => {
MessageBox.show("Are you sure you want to reset the last seen favs?", "Confirm Reset", MessageBoxButtons.YesNo, MessageBoxIcon.Question).then((r###lt => src_awaiter(void 0, void 0, void 0, (function*() {
if (r###lt === DialogR###lt.Yes) yield LastSidList.clearSidList();
}))));
}));
const showIgnoreListSetting = customSettings.newSetting(window.FASettingType.Action, "Show Ignore List");
showIgnoreListSetting.description = "Opens the Ignore List in a new Tab.";
showIgnoreListSetting.addEventListener("input", (() => {
window.open("https://www.furaffinity.net/controls/buddylist?mode=wfv-buddylist", "_blank");
}));
const showLastWatchesFavoritesSetting = customSettings.newSetting(window.FASettingType.Action, "Show Last Favs");
showLastWatchesFavoritesSetting.description = "Opens the last Watches Favorites in a new Tab.";
showLastWatchesFavoritesSetting.addEventListener("input", (() => {
window.open("https://www.furaffinity.net/msg/submissions?mode=wfv-favorites", "_blank");
}));
customSettings.loadSettings();
const requestHelper = new window.FARequestHelper(2);
if (customSettings.isFeatureEnabled) {
const matchList = new window.FAMatchList(customSettings);
matchList.matches = [ "furaffinity.net" ];
matchList.runInIFrame = false;
if (matchList.hasMatch) {
const pageBuddyListEdit = new window.FACustomPage("controls/buddylist", "mode");
pageBuddyListEdit.addEventListener("onOpen", (event => {
if ("wfv-buddylist" === event.detail.parameterValue) new BuddyListManager;
}));
pageBuddyListEdit.checkPageOpened();
const watchesFavoritesPage = new window.FACustomPage("net/msg/submissions", "mode");
watchesFavoritesPage.addEventListener("onOpen", (event => {
if ("wfv-favorites" === event.detail.parameterValue) new WatchesFavoritesPage;
}));
watchesFavoritesPage.checkPageOpened();
new WatchScanButton;
new WatchesFavoritesMenuButton;
}
}
})();