From 183bfae8405031e227b2ac3401055e02d8abb38f Mon Sep 17 00:00:00 2001 From: van Date: Thu, 10 Aug 2023 15:01:36 +0800 Subject: [PATCH] chrome-bookmark 1.6.4 --- chrome/dist/background.entry.js | 533 ++++++++++++- chrome/dist/browser-polyfill.entry.js | 1029 ++++++++++++++++++++++++- chrome/dist/content-script.entry.js | 167 +++- chrome/dist/options.entry.js | 491 +++++++++++- chrome/dist/popup.entry.js | 181 ++++- chrome/js/helper.js | 14 +- chrome/js/iFetch.js | 3 + chrome/js/options.js | 136 ++-- package.json | 2 +- 9 files changed, 2466 insertions(+), 90 deletions(-) diff --git a/chrome/dist/background.entry.js b/chrome/dist/background.entry.js index 5659b5b..88744c9 100644 --- a/chrome/dist/background.entry.js +++ b/chrome/dist/background.entry.js @@ -1 +1,532 @@ -/*! Copyright banther@pm.me */!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}({0:function(e,t,n){"use strict";function r(){return new Promise((e,t)=>{try{chrome.storage.local.get(null,(function(n){var r=n.token||"",o=n.server||"";return""===r?t("no active session, please login first"):""===o?t("server url is not specified"):e({token:r,server:o})}))}catch(e){return t(e)}})}function o(){return new Promise((e,t)=>{try{chrome.tabs.query({active:!0,currentWindow:!0},n=>{!n||n.length;let r=n[0];null==r?t():e(r)})}catch(e){t(e)}})}function i(){chrome.tabs.create({url:"/view/options.html"})}function c(){return new Promise(e=>{var t="",n=chrome.runtime.getURL("/");if(n.startsWith("moz"))t="unfiled_____";else{if(!n.startsWith("chrome"))throw new Error("right now extension only support firefox and chrome");t="2"}chrome.bookmarks.getChildren(t,(function(n){var r=n.find(e=>null==e.url&&"Shiori"===e.title);if(r)return e(r);chrome.bookmarks.create({title:"Shiori",parentId:t},t=>e(t))}))})}function a(e){return new Promise(t=>{c().then(n=>{chrome.bookmarks.search({url:e},e=>{var r=e.findIndex(e=>e.parentId===n.id);return r>=0?t(e[r]):t()})})})}function s(e,t){return new Promise(n=>{c().then(r=>{chrome.bookmarks.search({url:e},o=>{-1===o.findIndex(e=>e.parentId===r.id)&&chrome.bookmarks.create({url:e,title:t,parentId:r.id},()=>{n()}),n()})})})}function u(e){return new Promise(t=>{c().then(n=>{chrome.bookmarks.search({url:e},e=>(e.forEach(e=>{e.parentId===n.id&&chrome.bookmarks.remove(e.id)}),t()))})})}function l(e,t){try{var n="posting_"+Math.random();chrome.notifications.create(n,{type:"basic",title:e,message:t,iconUrl:"/icons/icon.png"},(function(e){})),setTimeout((function(){chrome.notifications.clear(n,(function(e){}))}),5e3)}catch(e){alert(e.message)}}n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"e",(function(){return i})),n.d(t,"a",(function(){return a})),n.d(t,"g",(function(){return s})),n.d(t,"f",(function(){return u})),n.d(t,"d",(function(){return l}))},5:function(e,t,n){"use strict";n.r(t);var r=n(0);var o=new class{get(e,t={}){var n={};const r=new URLSearchParams;for(let e in t)r.append(e,t[e]);const o=r.toString();var i=new URL(e,baseUrl);return i=i+"?"+o,new Promise((function(e,t){""!=token&&(n.Authorization="Bearer "+token),fetch(i,{headers:n}).then(e=>e.json()).then(t=>e(t)).catch(e=>{t(e)})}))}post(e,t={},n={"Content-Type":"application/json"}){return new Promise((function(o,i){Object(r.c)().then(c=>{const a=c.token,s=c.server;var u=new URL(e,s);""!=a&&(n.Authorization="Bearer "+a);var l="";if(n["Content-Type"].indexOf("application/x-www-form-urlencoded")>=0){let e="";for(const n in t)e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n])+"&";l=e.substring(0,e.length-1)}else"multipart/form-data;charset=UTF-8"===n["Content-Type"]?l=t:(n["Content-Type"]="application/json",l=JSON.stringify(t));fetch(u,{method:"POST",credentials:"same-origin",headers:n,body:l}).then(e=>{if(!e.ok)throw new Error("Network response was not ok");return e.json()}).then(e=>o(e)).catch(e=>(Object(r.d)("通知","服务异常,无法访问服务:"+s),i(e)))}).catch(e=>i(e))}))}};function i(){var e,t;e=chrome.runtime.getURL("/"),t={path:{16:"icons/action-default-16.png",32:"icons/action-default-32.png",64:"icons/action-default-64.png"}},e.startsWith("moz")&&(t={}),Object(r.b)().then(e=>{Object(r.a)(e.url).then(e=>(e&&(t.path={16:"icons/action-bookmarked-16.png",32:"icons/action-bookmarked-32.png",64:"icons/action-bookmarked-64.png"}),chrome.browserAction.setIcon(t)))})}chrome.runtime.onMessage.addListener((e,t,n)=>{var i=Promise.resolve();switch(e.type){case"open-libraries":i=new Promise((e,t)=>{new Promise((function(e,t){Object(r.c)().then(t=>{chrome.tabs.create({active:!0,url:t.server}),e()}).catch(e=>{e.toString().includes("login")&&Object(r.e)(),t(e)})})).then(()=>{e()}).catch(e=>{t(e)})});break;case"remove-bookmark":i=new Promise((e,t)=>{new Promise((function(e,t){Object(r.b)().then(n=>{o.post("/api/bookmarks/deleteUrl",{url:n.url}).then(o=>0!=o.code?t(o.msg):(Object(r.f)(n.url),e())).catch(e=>{if(!e.toString().includes("login"))return t(e.toString());Object(r.e)()})})})).then(()=>{e()}).catch(e=>{t(e)})});break;case"save-bookmark":i=new Promise((t,n)=>{var i;(i=e.tags,new Promise((function(e,t){Object(r.b)().then(n=>{chrome.tabs.captureVisibleTab(null,{},(function(c){o.post("/api/bookmarks/add",{url:n.url,title:n.title,from:"ext",tags:i.join(","),imgbase64:c}).then(o=>0!=o.code?t(o.msg):(Object(r.g)(n.url,n.title),e())).catch(e=>{if(!e.toString().includes("login"))return t(e.toString());Object(r.e)()})}))})}))).then(()=>{t()}).catch(e=>{n(e)})})}return i}),chrome.bookmarks.onCreated.addListener(i),chrome.bookmarks.onRemoved.addListener(i),chrome.tabs.onUpdated.addListener(i),chrome.tabs.onActivated.addListener(i),chrome.windows.onFocusChanged.addListener(i),i()}}); \ No newline at end of file +/*! Copyright banther@pm.me */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./chrome/js/background-script.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./chrome/js/background-script.js": +/*!****************************************!*\ + !*** ./chrome/js/background-script.js ***! + \****************************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _helper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helper.js */ "./chrome/js/helper.js"); +/* harmony import */ var _iFetch_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iFetch.js */ "./chrome/js/iFetch.js"); +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + + +function getPageContent(tab) { + return __async(this, null, function* () { + try { + var content = yield chrome.tabs.sendMessage(tab.id, { + type: "page-content" + }); + return content; + } catch (e) { + return {}; + } + }); +} +function openLibraries() { + return new Promise(function(resolve, reject) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["getExtensionConfig"])().then((config) => { + chrome.tabs.create({ + active: true, + url: config.server + }); + resolve(); + }).catch((err) => { + if (err.toString().includes("login")) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["openOptionsPage"])(); + } + reject(err); + }); + }); +} +function removeBookmark() { + return new Promise(function(resolve, reject) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["getCurrentTab"])().then((tab) => { + _iFetch_js__WEBPACK_IMPORTED_MODULE_1__["default"].post("/api/bookmarks/deleteUrl", { + url: tab.url + }).then((data) => { + if (data.code != 0) { + return reject(data.msg); + } else { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["removeLocalBookmark"])(tab.url); + return resolve(); + } + }).catch((err) => { + if (err.toString().includes("login")) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["openOptionsPage"])(); + } else { + return reject(err.toString()); + } + }); + }); + }); +} +function saveBookmark(tags) { + return new Promise(function(resolve, reject) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["getCurrentTab"])().then((tab) => { + chrome.tabs.captureVisibleTab(null, {}, function(dataUrl) { + _iFetch_js__WEBPACK_IMPORTED_MODULE_1__["default"].post("/api/bookmarks/add", { + url: tab.url, + title: tab.title, + from: "ext", + tags: tags.join(","), + imgbase64: dataUrl + }).then((data) => { + if (data.code != 0) { + return reject(data.msg); + } else { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["saveLocalBookmark"])(tab.url, tab.title); + return resolve(); + } + }).catch((err) => { + console.log(err.toString()); + if (err.toString().includes("login")) { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["openOptionsPage"])(); + } else { + return reject(err.toString()); + } + }); + }); + }); + }); +} +function updateIcon() { + var runtimeUrl = chrome.runtime.getURL("/"), icon = { + path: { + 16: "icons/action-default-16.png", + 32: "icons/action-default-32.png", + 64: "icons/action-default-64.png" + } + }; + if (runtimeUrl.startsWith("moz")) { + icon = {}; + } + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["getCurrentTab"])().then((tab) => { + Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["findLocalBookmark"])(tab.url).then((local) => { + if (local) + icon.path = { + 16: "icons/action-bookmarked-16.png", + 32: "icons/action-bookmarked-32.png", + 64: "icons/action-bookmarked-64.png" + }; + return chrome.browserAction.setIcon(icon); + }); + }); +} +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + var task = Promise.resolve(); + switch (request.type) { + case "open-libraries": + task = new Promise((resolve, reject) => { + openLibraries().then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); + break; + case "remove-bookmark": + task = new Promise((resolve, reject) => { + removeBookmark().then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }); + break; + case "save-bookmark": + task = new Promise((resolve, reject) => { + saveBookmark(request.tags).then(() => { + console.log("save-bookmark success"); + resolve(); + }).catch((err) => { + console.log("save-bookmark error", err); + reject(err); + }); + }); + break; + } + return task; +}); +function updateActiveTab() { + updateIcon(); +} +chrome.bookmarks.onCreated.addListener(updateActiveTab); +chrome.bookmarks.onRemoved.addListener(updateActiveTab); +chrome.tabs.onUpdated.addListener(updateActiveTab); +chrome.tabs.onActivated.addListener(updateActiveTab); +chrome.windows.onFocusChanged.addListener(updateActiveTab); +updateActiveTab(); + + +/***/ }), + +/***/ "./chrome/js/helper.js": +/*!*****************************!*\ + !*** ./chrome/js/helper.js ***! + \*****************************/ +/*! exports provided: getExtensionConfig, getCurrentTab, openOptionsPage, getShioriBookmarkFolder, findLocalBookmark, saveLocalBookmark, removeLocalBookmark, notify */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getExtensionConfig", function() { return getExtensionConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentTab", function() { return getCurrentTab; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openOptionsPage", function() { return openOptionsPage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getShioriBookmarkFolder", function() { return getShioriBookmarkFolder; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findLocalBookmark", function() { return findLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocalBookmark", function() { return saveLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocalBookmark", function() { return removeLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "notify", function() { return notify; }); +function getExtensionConfig() { + return new Promise((resolve, reject) => { + try { + chrome.storage.local.get(null, function(items) { + return resolve(items); + }); + } catch (err) { + return reject(err); + } + }); +} +function getCurrentTab() { + return new Promise((resolve, reject) => { + try { + chrome.tabs.query({ + active: true, + currentWindow: true + }, (tabs) => { + if (!tabs || tabs.length < 1) { + } + let activeTab = tabs[0]; + console.log(activeTab); + if (activeTab == void 0) { + reject(); + } else { + resolve(activeTab); + } + }); + } catch (err) { + reject(err); + } + }); +} +function openOptionsPage() { + chrome.tabs.create({ + url: "/view/options.html" + }); +} +function getShioriBookmarkFolder() { + return new Promise((resolve) => { + var parentId = "", runtimeUrl = chrome.runtime.getURL("/"); + if (runtimeUrl.startsWith("moz")) { + parentId = "unfiled_____"; + } else if (runtimeUrl.startsWith("chrome")) { + parentId = "2"; + } else { + throw new Error("right now extension only support firefox and chrome"); + } + chrome.bookmarks.getChildren(parentId, function(children) { + var shiori = children.find((el) => el.url == null && el.title === "Shiori"); + if (!shiori) { + chrome.bookmarks.create({ + title: "Shiori", + parentId + }, (shiori2) => { + return resolve(shiori2); + }); + } else { + return resolve(shiori); + } + }); + }); +} +function findLocalBookmark(url) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + var idx = existingBookmarks.findIndex((book) => { + return book.parentId === shioriFolder.id; + }); + if (idx >= 0) { + return resolve(existingBookmarks[idx]); + } else { + return resolve(); + } + }); + }); + }); +} +function saveLocalBookmark(url, title) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + var idx = existingBookmarks.findIndex((book) => { + return book.parentId === shioriFolder.id; + }); + if (idx === -1) { + chrome.bookmarks.create({ + url, + title, + parentId: shioriFolder.id + }, () => { + resolve(); + }); + } + resolve(); + }); + }); + }); +} +function removeLocalBookmark(url) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + existingBookmarks.forEach((book) => { + if (book.parentId !== shioriFolder.id) + return; + chrome.bookmarks.remove(book.id); + }); + return resolve(); + }); + }); + }); +} +function notify(title, message) { + try { + var icon = "/icons/icon.png"; + var isClosed = false; + var notificationId = "posting_" + Math.random(); + chrome.notifications.create( + notificationId, + { + type: "basic", + title, + message, + iconUrl: icon + }, + function(nId) { + } + ); + setTimeout(function() { + if (!isClosed) + chrome.notifications.clear(notificationId, function(wasCleared) { + }); + }, 5e3); + } catch (e) { + alert(e.message); + } +} + + +/***/ }), + +/***/ "./chrome/js/iFetch.js": +/*!*****************************!*\ + !*** ./chrome/js/iFetch.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helper */ "./chrome/js/helper.js"); + +class iFetch { + get(route, data = {}) { + var that = this; + var headers = {}; + const params = new URLSearchParams(); + for (let key in data) { + params.append(key, data[key]); + } + const queryString = params.toString(); + var url = new URL(route, baseUrl); + url = url + `?${queryString}`; + return new Promise(function(resolve, reject) { + if (token != "") { + headers["Authorization"] = "Bearer " + token; + } + fetch(url, { + headers + }).then((response) => response.json()).then((data2) => resolve(data2)).catch((error) => { + reject(error); + }); + }); + } + post(route, data = {}, headers = { + "Content-Type": "application/json" + }) { + return new Promise(function(resolve, reject) { + Object(_helper__WEBPACK_IMPORTED_MODULE_0__["getExtensionConfig"])().then((configData) => { + const token2 = configData.token; + const baseUrl2 = configData.server; + var that = this; + var url = new URL(route, baseUrl2); + if (route.indexOf("http") >= 0) { + url = route; + } + if (token2 != "") { + headers["Authorization"] = "Bearer " + token2; + } + var body = ""; + if (headers["Content-Type"].indexOf("application/x-www-form-urlencoded") >= 0) { + let ret = ""; + for (const it in data) { + ret += encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&"; + } + body = ret.substring(0, ret.length - 1); + } else if (headers["Content-Type"] === "multipart/form-data;charset=UTF-8") { + body = data; + } else { + headers["Content-Type"] = "application/json"; + body = JSON.stringify(data); + } + fetch(url, { + method: "POST", + credentials: "same-origin", + headers, + body + }).then((response) => { + if (!response.ok) { + console.log("Network response was not ok 1"); + throw new Error("Network response was not ok"); + } + return response.json(); + }).then((data2) => { + console.log("Network response was ok => return json", data2); + return resolve(data2); + }).catch((error) => { + console.log("Network response was not ok 3", error); + Object(_helper__WEBPACK_IMPORTED_MODULE_0__["notify"])("\u901A\u77E5", "\u670D\u52A1\u5F02\u5E38\uFF0C\u65E0\u6CD5\u8BBF\u95EE\u670D\u52A1:" + baseUrl2); + return reject(error); + }); + }).catch((error) => { + console.log("Network response was not ok 12", error); + return reject(error); + }); + }); + } +} +/* harmony default export */ __webpack_exports__["default"] = (new iFetch()); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL2JhY2tncm91bmQtc2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Nocm9tZS9qcy9oZWxwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL2lGZXRjaC5qcyJdLCJuYW1lcyI6WyJzaGlvcmkiLCJkYXRhIiwidG9rZW4iLCJiYXNlVXJsIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEZxSztBQUNsSjtBQUVuQixTQUFlLGVBQWUsS0FBSztBQUFBO0FBQ2pDLFFBQUk7QUFDRixVQUFJLFVBQVUsTUFBTSxPQUFPLEtBQUssWUFBWSxJQUFJLElBQUk7QUFBQSxRQUNsRCxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1QsU0FBUSxHQUFOO0FB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Q0FBaUMsS0FBSztBQUNsRCxnRUFBTSxDQUFDLGdCQUFNLHdFQUFpQkUsUUFBTztBQUNyQyxpQkFBTyxPQUFPLEtBQUs7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFJTCxDQUFDLEVBQUUsTUFBTSxXQUFTO0FBQ2hCLGdCQUFRLElBQUksa0NBQWtDLEtBQUs7QUFDbkQsZUFBTyxPQUFPLEtBQUs7QUFBQSxNQUNyQixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUNGO0FBRWUsbUVBQUksT0FBTyxDQUFDIiwiZmlsZSI6ImJhY2tncm91bmQuZW50cnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL2Nocm9tZS9qcy9iYWNrZ3JvdW5kLXNjcmlwdC5qc1wiKTtcbiIsImltcG9ydCB7IGdldEV4dGVuc2lvbkNvbmZpZywgZ2V0Q3VycmVudFRhYiwgb3Blbk9wdGlvbnNQYWdlLCBnZXRTaGlvcmlCb29rbWFya0ZvbGRlciwgc2F2ZUxvY2FsQm9va21hcmssIHJlbW92ZUxvY2FsQm9va21hcmssIGZpbmRMb2NhbEJvb2ttYXJrIH0gZnJvbSBcIi4vaGVscGVyLmpzXCI7XG5pbXBvcnQgaWZldGNoIGZyb20gXCIuL2lGZXRjaC5qc1wiXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VDb250ZW50KHRhYikge1xuICB0cnkge1xuICAgIHZhciBjb250ZW50ID0gYXdhaXQgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiLmlkLCB7XG4gICAgICB0eXBlOiBcInBhZ2UtY29udGVudFwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvcGVuTGlicmFyaWVzKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGdldEV4dGVuc2lvbkNvbmZpZygpLnRoZW4oY29uZmlnID0+IHtcbiAgICAgIGNocm9tZS50YWJzLmNyZWF0ZSh7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgdXJsOiBjb25maWcuc2VydmVyLFxuICAgICAgfSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGlmIChlcnIudG9TdHJpbmcoKS5pbmNsdWRlcyhcImxvZ2luXCIpKSB7XG4gICAgICAgIG9wZW5PcHRpb25zUGFnZSgpXG4gICAgICB9XG4gICAgICByZWplY3QoZXJyKVxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVCb29rbWFyaygpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBnZXRDdXJyZW50VGFiKCkudGhlbih0YWIgPT4ge1xuICAgICAgaWZldGNoLnBvc3QoXCIvYXBpL2Jvb2ttYXJrcy9kZWxldGVVcmxcIiwge1xuICAgICAgICB1cmw6IHRhYi51cmwsXG4gICAgICB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICBpZiAoZGF0YS5jb2RlICE9IDApIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGRhdGEubXNnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW92ZSBsb2NhbCBib29rbWFya1xuICAgICAgICAgIHJlbW92ZUxvY2FsQm9va21hcmsodGFiLnVybCk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgaWYgKGVyci50b1N0cmluZygpLmluY2x1ZGVzKFwibG9naW5cIikpIHtcbiAgICAgICAgICBvcGVuT3B0aW9uc1BhZ2UoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyLnRvU3RyaW5nKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcblxufVxuXG5mdW5jdGlvbiBzYXZlQm9va21hcmsodGFncykge1xuICAvLyBHZXQgdmFsdWUgZnJvbSBhc3luYyBmdW5jdGlvblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGdldEN1cnJlbnRUYWIoKS50aGVuKHRhYiA9PiB7XG4gICAgICAvLyDmiKrlm75cbiAgICAgIC8vIOaNleiOt+W9k+WJjemAiemhueWNoeS4reWPr+ingeWMuuWfn+eahOWxj+W5leaIquWbvlxuICAgICAgY2hyb21lLnRhYnMuY2FwdHVyZVZpc2libGVUYWIobnVsbCwge30sIGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gICAgICAgIGlmZXRjaC5wb3N0KFwiL2FwaS9ib29rbWFya3MvYWRkXCIsIHtcbiAgICAgICAgICB1cmw6IHRhYi51cmwsXG4gICAgICAgICAgdGl0bGU6IHRhYi50aXRsZSxcbiAgICAgICAgICBmcm9tOiBcImV4dFwiLFxuICAgICAgICAgIHRhZ3M6IHRhZ3Muam9pbihcIixcIiksXG4gICAgICAgICAgaW1nYmFzZTY0OiBkYXRhVXJsXG4gICAgICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuY29kZSAhPSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGRhdGEubXNnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTYXZlIHRvIGxvY2FsIGJvb2ttYXJrXG4gICAgICAgICAgICBzYXZlTG9jYWxCb29rbWFyayh0YWIudXJsLCB0YWIudGl0bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGlmIChlcnIudG9TdHJpbmcoKS5pbmNsdWRlcyhcImxvZ2luXCIpKSB7XG4gICAgICAgICAgICBvcGVuT3B0aW9uc1BhZ2UoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVyci50b1N0cmluZygpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUljb24oKSB7XG4gIC8vIFNldCBpbml0aWFsIGljb25cbiAgdmFyIHJ1bnRpbWVVcmwgPSBjaHJvbWUucnVudGltZS5nZXRVUkwoXCIvXCIpLFxuICAgIGljb24gPSB7XG4gICAgICBwYXRoOiB7XG4gICAgICAgIDE2OiBcImljb25zL2FjdGlvbi1kZWZhdWx0LTE2LnBuZ1wiLFxuICAgICAgICAzMjogXCJpY29ucy9hY3Rpb24tZGVmYXVsdC0zMi5wbmdcIixcbiAgICAgICAgNjQ6IFwiaWNvbnMvYWN0aW9uLWRlZmF1bHQtNjQucG5nXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8vIEZpcmVmb3ggYWxsb3dzIHVzaW5nIGVtcHR5IG9iamVjdCBhcyBkZWZhdWx0IGljb24uXG4gIC8vIFRoaXMgd2F5LCBGaXJlZm94IHdpbGwgdXNlIGRlZmF1bHRfaWNvbiB0aGF0IGRlZmluZWQgaW4gbWFuaWZlc3QuanNvblxuICBpZiAocnVudGltZVVybC5zdGFydHNXaXRoKFwibW96XCIpKSB7XG4gICAgaWNvbiA9IHt9O1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgYWN0aXZlIHRhYlxuXG4gIGdldEN1cnJlbnRUYWIoKS50aGVuKHRhYiA9PiB7XG5cbiAgICBmaW5kTG9jYWxCb29rbWFyayh0YWIudXJsKS50aGVuKGxvY2FsID0+IHtcbiAgICAgIGlmIChsb2NhbCkgaWNvbi5wYXRoID0ge1xuICAgICAgICAxNjogXCJpY29ucy9hY3Rpb24tYm9va21hcmtlZC0xNi5wbmdcIixcbiAgICAgICAgMzI6IFwiaWNvbnMvYWN0aW9uLWJvb2ttYXJrZWQtMzIucG5nXCIsXG4gICAgICAgIDY0OiBcImljb25zL2FjdGlvbi1ib29rbWFya2VkLTY0LnBuZ1wiXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaHJvbWUuYnJvd3NlckFjdGlvbi5zZXRJY29uKGljb24pO1xuICAgIH0pXG5cbiAgfSlcbn1cblxuLy8gRGVmaW5lIGV2ZW50IGhhbmRsZXJcbmNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcigocmVxdWVzdCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcbiAgdmFyIHRhc2sgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBzd2l0Y2ggKHJlcXVlc3QudHlwZSkge1xuICAgIGNhc2UgXCJvcGVuLWxpYnJhcmllc1wiOlxuICAgICAgdGFzayA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb3BlbkxpYnJhcmllcygpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJyZW1vdmUtYm9va21hcmtcIjpcbiAgICAgIHRhc2sgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlbW92ZUJvb2ttYXJrKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNhdmUtYm9va21hcmtcIjpcbiAgICAgIHRhc2sgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNhdmVCb29rbWFyayhyZXF1ZXN0LnRhZ3MpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzYXZlLWJvb2ttYXJrIHN1Y2Nlc3NcIik7XG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzYXZlLWJvb2ttYXJrIGVycm9yXCIsIGVycik7XG4gICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB0YXNrO1xufSk7XG5cbi8vIEFkZCBoYW5kbGVyIGZvciBpY29uIGNoYW5nZVxuZnVuY3Rpb24gdXBkYXRlQWN0aXZlVGFiKCkge1xuICB1cGRhdGVJY29uKClcbn1cblxuY2hyb21lLmJvb2ttYXJrcy5vbkNyZWF0ZWQuYWRkTGlzdGVuZXIodXBkYXRlQWN0aXZlVGFiKTtcbmNocm9tZS5ib29rbWFya3Mub25SZW1vdmVkLmFkZExpc3RlbmVyKHVwZGF0ZUFjdGl2ZVRhYik7XG5jaHJvbWUudGFicy5vblVwZGF0ZWQuYWRkTGlzdGVuZXIodXBkYXRlQWN0aXZlVGFiKTtcbmNocm9tZS50YWJzLm9uQWN0aXZhdGVkLmFkZExpc3RlbmVyKHVwZGF0ZUFjdGl2ZVRhYik7XG5jaHJvbWUud2luZG93cy5vbkZvY3VzQ2hhbmdlZC5hZGRMaXN0ZW5lcih1cGRhdGVBY3RpdmVUYWIpO1xudXBkYXRlQWN0aXZlVGFiKCk7IiwiZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvbmZpZygpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KG51bGwsIGZ1bmN0aW9uIChpdGVtcykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShpdGVtcyk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRhYigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGFjdGl2ZSB0YWJzIGluIGN1cnJlbnQgd2luZG93ICBcbiAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHtcbiAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICBjdXJyZW50V2luZG93OiB0cnVlXG4gICAgICB9LCAodGFicykgPT4ge1xuICAgICAgICBpZiAoIXRhYnMgfHwgdGFicy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFiIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWYWxpZGF0ZSBwcm90b2NvbFxuICAgICAgICBsZXQgYWN0aXZlVGFiID0gdGFic1swXTtcbiAgICAgICAgLy9sZXQgdXJsID0gbmV3IFVSTChhY3RpdmVUYWIudXJsKTtcbiAgICAgICAgLy9sZXQgc3VwcG9ydGVkUHJvdG9jb2xzID0gW1wiaHR0cHM6XCIsIFwiaHR0cDpcIiwgXCJmdHA6XCIsIFwiZmlsZTpcIl07XG5cbiAgICAgICAgLy9pZiAoIXN1cHBvcnRlZFByb3RvY29scy5pbmNsdWRlcyh1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIke3VybC5wcm90b2NvbH1cImApO1xuICAgICAgICAvL31cblxuICAgICAgICBjb25zb2xlLmxvZyhhY3RpdmVUYWIpXG4gICAgICAgIGlmIChhY3RpdmVUYWIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGFjdGl2ZVRhYik7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3Blbk9wdGlvbnNQYWdlKCkge1xuICBjaHJvbWUudGFicy5jcmVhdGUoe1xuICAgIHVybDogXCIvdmlldy9vcHRpb25zLmh0bWxcIlxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNoaW9yaUJvb2ttYXJrRm9sZGVyKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAvLyBUT0RPOlxuICAgIC8vIEknbSBub3Qgc3VyZSBpdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXksIGJ1dCBpdCdzIHRoZSBzaW1wbGVzdC5cbiAgICAvLyBXZSB3YW50IHRvIHB1dCBTaGlvcmkgZm9sZGVyIGluIGBPdGhlciBib29rbWFya3NgLCB3aGljaCBpZCBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIGNocm9tZS5cbiAgICAvLyBJbiBGaXJlZm94LCBpdHMgaWQgaXMgYHVuZmlsZWRfX19fX2Agd2hpbGUgaW4gQ2hyb21lIHRoZSBpZCBpcyBgMmAuXG4gICAgdmFyIHBhcmVudElkID0gXCJcIixcbiAgICAgIHJ1bnRpbWVVcmwgPSBjaHJvbWUucnVudGltZS5nZXRVUkwoXCIvXCIpO1xuXG4gICAgaWYgKHJ1bnRpbWVVcmwuc3RhcnRzV2l0aChcIm1velwiKSkge1xuICAgICAgcGFyZW50SWQgPSBcInVuZmlsZWRfX19fX1wiO1xuICAgIH0gZWxzZSBpZiAocnVudGltZVVybC5zdGFydHNXaXRoKFwiY2hyb21lXCIpKSB7XG4gICAgICBwYXJlbnRJZCA9IFwiMlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyaWdodCBub3cgZXh0ZW5zaW9uIG9ubHkgc3VwcG9ydCBmaXJlZm94IGFuZCBjaHJvbWVcIilcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBmb2xkZXIgYWxyZWFkeSBoYXMgU2hpb3JpIGZvbGRlclxuICAgIGNocm9tZS5ib29rbWFya3MuZ2V0Q2hpbGRyZW4ocGFyZW50SWQsIGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgdmFyIHNoaW9yaSA9IGNoaWxkcmVuLmZpbmQoZWwgPT4gZWwudXJsID09IG51bGwgJiYgZWwudGl0bGUgPT09IFwiU2hpb3JpXCIpO1xuICAgICAgaWYgKCFzaGlvcmkpIHtcbiAgICAgICAgY2hyb21lLmJvb2ttYXJrcy5jcmVhdGUoe1xuICAgICAgICAgIHRpdGxlOiBcIlNoaW9yaVwiLFxuICAgICAgICAgIHBhcmVudElkOiBwYXJlbnRJZFxuICAgICAgICB9LCBzaGlvcmkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHNoaW9yaSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShzaGlvcmkpXG4gICAgICB9XG4gICAgfSk7XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTG9jYWxCb29rbWFyayh1cmwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgZ2V0U2hpb3JpQm9va21hcmtGb2xkZXIoKS50aGVuKHNoaW9yaUZvbGRlciA9PiB7XG4gICAgICBjaHJvbWUuYm9va21hcmtzLnNlYXJjaCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgfSwgZXhpc3RpbmdCb29rbWFya3MgPT4ge1xuICAgICAgICB2YXIgaWR4ID0gZXhpc3RpbmdCb29rbWFya3MuZmluZEluZGV4KGJvb2sgPT4ge1xuICAgICAgICAgIHJldHVybiBib29rLnBhcmVudElkID09PSBzaGlvcmlGb2xkZXIuaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShleGlzdGluZ0Jvb2ttYXJrc1tpZHhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlTG9jYWxCb29rbWFyayh1cmwsIHRpdGxlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGdldFNoaW9yaUJvb2ttYXJrRm9sZGVyKCkudGhlbihzaGlvcmlGb2xkZXIgPT4ge1xuICAgICAgY2hyb21lLmJvb2ttYXJrcy5zZWFyY2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgIH0sIGV4aXN0aW5nQm9va21hcmtzID0+IHtcbiAgICAgICAgdmFyIGlkeCA9IGV4aXN0aW5nQm9va21hcmtzLmZpbmRJbmRleChib29rID0+IHtcbiAgICAgICAgICByZXR1cm4gYm9vay5wYXJlbnRJZCA9PT0gc2hpb3JpRm9sZGVyLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgIGNocm9tZS5ib29rbWFya3MuY3JlYXRlKHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgcGFyZW50SWQ6IHNoaW9yaUZvbGRlci5pZCxcbiAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxvY2FsQm9va21hcmsodXJsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGdldFNoaW9yaUJvb2ttYXJrRm9sZGVyKCkudGhlbihzaGlvcmlGb2xkZXIgPT4ge1xuICAgICAgY2hyb21lLmJvb2ttYXJrcy5zZWFyY2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgIH0sIGV4aXN0aW5nQm9va21hcmtzID0+IHtcbiAgICAgICAgZXhpc3RpbmdCb29rbWFya3MuZm9yRWFjaChib29rID0+IHtcbiAgICAgICAgICBpZiAoYm9vay5wYXJlbnRJZCAhPT0gc2hpb3JpRm9sZGVyLmlkKSByZXR1cm47XG4gICAgICAgICAgY2hyb21lLmJvb2ttYXJrcy5yZW1vdmUoYm9vay5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm90aWZ5KHRpdGxlLCBtZXNzYWdlKSB7XG4gIHRyeSB7XG4gICAgdmFyIGljb24gPSBcIi9pY29ucy9pY29uLnBuZ1wiO1xuICAgIHZhciBpc0Nsb3NlZCA9IGZhbHNlO1xuICAgIHZhciBub3RpZmljYXRpb25JZCA9IFwicG9zdGluZ19cIiArIE1hdGgucmFuZG9tKCk7XG5cbiAgICBjaHJvbWUubm90aWZpY2F0aW9ucy5jcmVhdGUoXG4gICAgICBub3RpZmljYXRpb25JZCwge1xuICAgICAgdHlwZTogXCJiYXNpY1wiLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGljb25Vcmw6IGljb24sXG4gICAgfSxcbiAgICAgIGZ1bmN0aW9uIChuSWQpIHsgfVxuICAgICk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWlzQ2xvc2VkKVxuICAgICAgICBjaHJvbWUubm90aWZpY2F0aW9ucy5jbGVhcihub3RpZmljYXRpb25JZCwgZnVuY3Rpb24gKHdhc0NsZWFyZWQpIHsgfSk7XG4gICAgfSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhbGVydChlLm1lc3NhZ2UpO1xuICB9XG59IiwiaW1wb3J0IHtcbiAgZ2V0RXh0ZW5zaW9uQ29uZmlnLCBub3RpZnlcbn0gZnJvbSBcIi4vaGVscGVyXCI7XG5cbmNsYXNzIGlGZXRjaCB7XG4gIGdldChyb3V0ZSwgZGF0YSA9IHt9KSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHZhciBoZWFkZXJzID0ge31cbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgLy8g6YGN5Y6G5a+56LGhLOa3u+WKoOavj+S4qumUruWAvOWvuVxuICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XG4gICAgICBwYXJhbXMuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTsgLy8gJ2E9MSZiPTInXG5cbiAgICB2YXIgdXJsID0gbmV3IFVSTChyb3V0ZSwgYmFzZVVybCk7XG4gICAgdXJsID0gdXJsICsgYD8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaWYgKHRva2VuICE9ICcnKSB7XG4gICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCZWFyZXIgJyArIHRva2VuXG4gICAgICB9XG5cbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAudGhlbihkYXRhID0+IHJlc29sdmUoZGF0YSkpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwb3N0KHJvdXRlLCBkYXRhID0ge30sIGhlYWRlcnMgPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFwiYXBwbGljYXRpb24vanNvblwiXG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZ2V0RXh0ZW5zaW9uQ29uZmlnKCkudGhlbihjb25maWdEYXRhID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBjb25maWdEYXRhLnRva2VuXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjb25maWdEYXRhLnNlcnZlclxuXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwocm91dGUsIGJhc2VVcmwpO1xuXG4gICAgICAgIGlmIChyb3V0ZS5pbmRleE9mKFwiaHR0cFwiKSA+PSAwKSB7XG4gICAgICAgICAgdXJsID0gcm91dGVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRva2VuXG4gICAgICAgIGlmICh0b2tlbiAhPSAnJykge1xuICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCZWFyZXIgJyArIHRva2VuXG4gICAgICAgIH1cblxuICAgICAgICAvLyDlpITnkIYgYm9keVxuICAgICAgICB2YXIgYm9keSA9IFwiXCI7XG4gICAgICAgIC8vIOaKiuS4gOS4quWPguaVsOWvueixoeagvOW8j+WMluS4uuS4gOS4quWtl+espuS4slxuICAgICAgICBpZiAoaGVhZGVyc1snQ29udGVudC1UeXBlJ10uaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPj0gMCkge1xuICAgICAgICAgIGxldCByZXQgPSAnJ1xuICAgICAgICAgIGZvciAoY29uc3QgaXQgaW4gZGF0YSkge1xuICAgICAgICAgICAgcmV0ICs9XG4gICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChpdCkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoZGF0YVtpdF0pICsgJyYnXG4gICAgICAgICAgfVxuICAgICAgICAgIGJvZHkgPSByZXQuc3Vic3RyaW5nKDAsIHJldC5sZW5ndGggLSAxKVxuICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTtjaGFyc2V0PVVURi04Jykge1xuICAgICAgICAgIGJvZHkgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvayAxXCIpO1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2tcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5ldHdvcmsgcmVzcG9uc2Ugd2FzIG9rID0+IHJldHVybiBqc29uXCIsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvayAzXCIsIGVycm9yKTtcbiAgICAgICAgICAgIG5vdGlmeShcIumAmuefpVwiLCBcIuacjeWKoeW8guW4uO+8jOaXoOazleiuv+mXruacjeWKoTpcIiArIGJhc2VVcmwpXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk5ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvayAxMlwiLCBlcnJvcik7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBpRmV0Y2goKSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/chrome/dist/browser-polyfill.entry.js b/chrome/dist/browser-polyfill.entry.js index a1dd24f..24918e1 100644 --- a/chrome/dist/browser-polyfill.entry.js +++ b/chrome/dist/browser-polyfill.entry.js @@ -1 +1,1028 @@ -/*! Copyright banther@pm.me */!function(e){var r={};function s(g){if(r[g])return r[g].exports;var n=r[g]={i:g,l:!1,exports:{}};return e[g].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=e,s.c=r,s.d=function(e,r,g){s.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:g})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,r){if(1&r&&(e=s(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var g=Object.create(null);if(s.r(g),Object.defineProperty(g,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)s.d(g,n,function(r){return e[r]}.bind(null,n));return g},s.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(r,"a",r),r},s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},s.p="",s(s.s=4)}({4:function(e,r,s){var g,n,a;n=[e],void 0===(a="function"==typeof(g=function(e){"use strict";if("undefined"==typeof browser||Object.getPrototypeOf(browser)!==Object.prototype){const r="The message port closed before a response was received.",s=e=>{const s={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getBrowserInfo:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(s).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class g extends WeakMap{constructor(e,r){super(r),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const n=(r,s)=>(...g)=>{e.runtime.lastError?r.reject(e.runtime.lastError):s.singleCallbackArg||g.length<=1&&!1!==s.singleCallbackArg?r.resolve(g[0]):r.resolve(g)},a=e=>1==e?"argument":"arguments",m=(e,r,s)=>new Proxy(r,{apply:(r,g,n)=>s.call(g,e,...n)});let t=Function.call.bind(Object.prototype.hasOwnProperty);const A=(e,r={},s={})=>{let g=Object.create(null),i={has:(r,s)=>s in e||s in g,get(i,o,l){if(o in g)return g[o];if(!(o in e))return;let c=e[o];if("function"==typeof c)if("function"==typeof r[o])c=m(e,e[o],r[o]);else if(t(s,o)){let r=((e,r)=>function(s,...g){if(g.lengthr.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${g.length}`);return new Promise((a,m)=>{if(r.fallbackToNoCallback)try{s[e](...g,n({resolve:a,reject:m},r))}catch(n){s[e](...g),r.fallbackToNoCallback=!1,r.noCallback=!0,a()}else r.noCallback?(s[e](...g),a()):s[e](...g,n({resolve:a,reject:m},r))})})(o,s[o]);c=m(e,e[o],r)}else c=c.bind(e);else{if("object"!=typeof c||null===c||!t(r,o)&&!t(s,o))return Object.defineProperty(g,o,{configurable:!0,enumerable:!0,get:()=>e[o],set(r){e[o]=r}}),c;c=A(c,r[o],s[o])}return g[o]=c,c},set:(r,s,n,a)=>(s in g?g[s]=n:e[s]=n,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(g,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(g,r)},o=Object.create(e);return new Proxy(o,i)},i=e=>({addListener(r,s,...g){r.addListener(e.get(s),...g)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}});let o=!1;const l=new g(e=>"function"!=typeof e?e:function(r,s,g){let n,a,m=!1,t=new Promise(e=>{n=function(r){o||(o=!0),m=!0,e(r)}});try{a=e(r,s,n)}catch(e){a=Promise.reject(e)}const A=!0!==a&&(i=a)&&"object"==typeof i&&"function"==typeof i.then;var i;if(!0!==a&&!A&&!m)return!1;const l=e=>{e.then(e=>{g(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",g({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{})};return l(A?a:t),!0}),c=({reject:s,resolve:g},n)=>{e.runtime.lastError?e.runtime.lastError.message===r?g():s(e.runtime.lastError):n&&n.__mozWebExtensionPolyfillReject__?s(new Error(n.message)):g(n)},x=(e,r,s,...g)=>{if(g.lengthr.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${g.length}`);return new Promise((e,r)=>{const n=c.bind(null,{resolve:e,reject:r});g.push(n),s.sendMessage(...g)})},u={runtime:{onMessage:i(l),onMessageExternal:i(l),sendMessage:x.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:x.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},d={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return s.privacy={network:{networkPredictionEnabled:d,webRTCIPHandlingPolicy:d},services:{passwordSavingEnabled:d},websites:{hyperlinkAuditingEnabled:d,referrersEnabled:d}},A(e,u,s)};e.exports=s(chrome)}else e.exports=browser})?g.apply(r,n):g)||(e.exports=a)}}); \ No newline at end of file +/*! Copyright banther@pm.me */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./chrome/js/browser-polyfill.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./chrome/js/browser-polyfill.js": +/*!***************************************!*\ + !*** ./chrome/js/browser-polyfill.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(global, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else { var mod; } +})(this, function(module2) { + "use strict"; + if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.prototype) { + const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; + const SEND_RESPONSE_DEPRECATION_WARNING = "Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)"; + const wrapAPIs = (extensionAPIs) => { + const apiMetadata = { + "alarms": { + "clear": { + "minArgs": 0, + "maxArgs": 1 + }, + "clearAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "bookmarks": { + "create": { + "minArgs": 1, + "maxArgs": 1 + }, + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getChildren": { + "minArgs": 1, + "maxArgs": 1 + }, + "getRecent": { + "minArgs": 1, + "maxArgs": 1 + }, + "getSubTree": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTree": { + "minArgs": 0, + "maxArgs": 0 + }, + "move": { + "minArgs": 2, + "maxArgs": 2 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeTree": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "browserAction": { + "disable": { + "minArgs": 0, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "enable": { + "minArgs": 0, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "getBadgeBackgroundColor": { + "minArgs": 1, + "maxArgs": 1 + }, + "getBadgeText": { + "minArgs": 1, + "maxArgs": 1 + }, + "getPopup": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTitle": { + "minArgs": 1, + "maxArgs": 1 + }, + "openPopup": { + "minArgs": 0, + "maxArgs": 0 + }, + "setBadgeBackgroundColor": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setBadgeText": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setIcon": { + "minArgs": 1, + "maxArgs": 1 + }, + "setPopup": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setTitle": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "browsingData": { + "remove": { + "minArgs": 2, + "maxArgs": 2 + }, + "removeCache": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeCookies": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeDownloads": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeFormData": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeHistory": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeLocalStorage": { + "minArgs": 1, + "maxArgs": 1 + }, + "removePasswords": { + "minArgs": 1, + "maxArgs": 1 + }, + "removePluginData": { + "minArgs": 1, + "maxArgs": 1 + }, + "settings": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "commands": { + "getAll": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "contextMenus": { + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "cookies": { + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAllCookieStores": { + "minArgs": 0, + "maxArgs": 0 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "devtools": { + "inspectedWindow": { + "eval": { + "minArgs": 1, + "maxArgs": 2, + "singleCallbackArg": false + } + }, + "panels": { + "create": { + "minArgs": 3, + "maxArgs": 3, + "singleCallbackArg": true + } + } + }, + "downloads": { + "cancel": { + "minArgs": 1, + "maxArgs": 1 + }, + "download": { + "minArgs": 1, + "maxArgs": 1 + }, + "erase": { + "minArgs": 1, + "maxArgs": 1 + }, + "getFileIcon": { + "minArgs": 1, + "maxArgs": 2 + }, + "open": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "pause": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeFile": { + "minArgs": 1, + "maxArgs": 1 + }, + "resume": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + }, + "show": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "extension": { + "isAllowedFileSchemeAccess": { + "minArgs": 0, + "maxArgs": 0 + }, + "isAllowedIncognitoAccess": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "history": { + "addUrl": { + "minArgs": 1, + "maxArgs": 1 + }, + "deleteAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "deleteRange": { + "minArgs": 1, + "maxArgs": 1 + }, + "deleteUrl": { + "minArgs": 1, + "maxArgs": 1 + }, + "getVisits": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "i18n": { + "detectLanguage": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAcceptLanguages": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "identity": { + "launchWebAuthFlow": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "idle": { + "queryState": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "management": { + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "getSelf": { + "minArgs": 0, + "maxArgs": 0 + }, + "setEnabled": { + "minArgs": 2, + "maxArgs": 2 + }, + "uninstallSelf": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "notifications": { + "clear": { + "minArgs": 1, + "maxArgs": 1 + }, + "create": { + "minArgs": 1, + "maxArgs": 2 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "getPermissionLevel": { + "minArgs": 0, + "maxArgs": 0 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "pageAction": { + "getPopup": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTitle": { + "minArgs": 1, + "maxArgs": 1 + }, + "hide": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setIcon": { + "minArgs": 1, + "maxArgs": 1 + }, + "setPopup": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setTitle": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "show": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "permissions": { + "contains": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "request": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "runtime": { + "getBackgroundPage": { + "minArgs": 0, + "maxArgs": 0 + }, + "getBrowserInfo": { + "minArgs": 0, + "maxArgs": 0 + }, + "getPlatformInfo": { + "minArgs": 0, + "maxArgs": 0 + }, + "openOptionsPage": { + "minArgs": 0, + "maxArgs": 0 + }, + "requestUpdateCheck": { + "minArgs": 0, + "maxArgs": 0 + }, + "sendMessage": { + "minArgs": 1, + "maxArgs": 3 + }, + "sendNativeMessage": { + "minArgs": 2, + "maxArgs": 2 + }, + "setUninstallURL": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "sessions": { + "getDevices": { + "minArgs": 0, + "maxArgs": 1 + }, + "getRecentlyClosed": { + "minArgs": 0, + "maxArgs": 1 + }, + "restore": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "storage": { + "local": { + "clear": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "managed": { + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "sync": { + "clear": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + } + }, + "tabs": { + "captureVisibleTab": { + "minArgs": 0, + "maxArgs": 2 + }, + "create": { + "minArgs": 1, + "maxArgs": 1 + }, + "detectLanguage": { + "minArgs": 0, + "maxArgs": 1 + }, + "discard": { + "minArgs": 0, + "maxArgs": 1 + }, + "duplicate": { + "minArgs": 1, + "maxArgs": 1 + }, + "executeScript": { + "minArgs": 1, + "maxArgs": 2 + }, + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getCurrent": { + "minArgs": 0, + "maxArgs": 0 + }, + "getZoom": { + "minArgs": 0, + "maxArgs": 1 + }, + "getZoomSettings": { + "minArgs": 0, + "maxArgs": 1 + }, + "highlight": { + "minArgs": 1, + "maxArgs": 1 + }, + "insertCSS": { + "minArgs": 1, + "maxArgs": 2 + }, + "move": { + "minArgs": 2, + "maxArgs": 2 + }, + "query": { + "minArgs": 1, + "maxArgs": 1 + }, + "reload": { + "minArgs": 0, + "maxArgs": 2 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeCSS": { + "minArgs": 1, + "maxArgs": 2 + }, + "sendMessage": { + "minArgs": 2, + "maxArgs": 3 + }, + "setZoom": { + "minArgs": 1, + "maxArgs": 2 + }, + "setZoomSettings": { + "minArgs": 1, + "maxArgs": 2 + }, + "update": { + "minArgs": 1, + "maxArgs": 2 + } + }, + "topSites": { + "get": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "webNavigation": { + "getAllFrames": { + "minArgs": 1, + "maxArgs": 1 + }, + "getFrame": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "webRequest": { + "handlerBehaviorChanged": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "windows": { + "create": { + "minArgs": 0, + "maxArgs": 1 + }, + "get": { + "minArgs": 1, + "maxArgs": 2 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 1 + }, + "getCurrent": { + "minArgs": 0, + "maxArgs": 1 + }, + "getLastFocused": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + } + }; + if (Object.keys(apiMetadata).length === 0) { + throw new Error("api-metadata.json has not been included in browser-polyfill"); + } + class DefaultWeakMap extends WeakMap { + constructor(createItem, items = void 0) { + super(items); + this.createItem = createItem; + } + get(key) { + if (!this.has(key)) { + this.set(key, this.createItem(key)); + } + return super.get(key); + } + } + const isThenable = (value) => { + return value && typeof value === "object" && typeof value.then === "function"; + }; + const makeCallback = (promise, metadata) => { + return (...callbackArgs) => { + if (extensionAPIs.runtime.lastError) { + promise.reject(extensionAPIs.runtime.lastError); + } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) { + promise.resolve(callbackArgs[0]); + } else { + promise.resolve(callbackArgs); + } + }; + }; + const pluralizeArguments = (numArgs) => numArgs == 1 ? "argument" : "arguments"; + const wrapAsyncFunction = (name, metadata) => { + return function asyncFunctionWrapper(target, ...args) { + if (args.length < metadata.minArgs) { + throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); + } + if (args.length > metadata.maxArgs) { + throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); + } + return new Promise((resolve, reject) => { + if (metadata.fallbackToNoCallback) { + try { + target[name](...args, makeCallback({ resolve, reject }, metadata)); + } catch (cbError) { + console.warn(`${name} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `, cbError); + target[name](...args); + metadata.fallbackToNoCallback = false; + metadata.noCallback = true; + resolve(); + } + } else if (metadata.noCallback) { + target[name](...args); + resolve(); + } else { + target[name](...args, makeCallback({ resolve, reject }, metadata)); + } + }); + }; + }; + const wrapMethod = (target, method, wrapper) => { + return new Proxy(method, { + apply(targetMethod, thisObj, args) { + return wrapper.call(thisObj, target, ...args); + } + }); + }; + let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); + const wrapObject = (target, wrappers = {}, metadata = {}) => { + let cache = /* @__PURE__ */ Object.create(null); + let handlers = { + has(proxyTarget2, prop) { + return prop in target || prop in cache; + }, + get(proxyTarget2, prop, receiver) { + if (prop in cache) { + return cache[prop]; + } + if (!(prop in target)) { + return void 0; + } + let value = target[prop]; + if (typeof value === "function") { + if (typeof wrappers[prop] === "function") { + value = wrapMethod(target, target[prop], wrappers[prop]); + } else if (hasOwnProperty(metadata, prop)) { + let wrapper = wrapAsyncFunction(prop, metadata[prop]); + value = wrapMethod(target, target[prop], wrapper); + } else { + value = value.bind(target); + } + } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) { + value = wrapObject(value, wrappers[prop], metadata[prop]); + } else { + Object.defineProperty(cache, prop, { + configurable: true, + enumerable: true, + get() { + return target[prop]; + }, + set(value2) { + target[prop] = value2; + } + }); + return value; + } + cache[prop] = value; + return value; + }, + set(proxyTarget2, prop, value, receiver) { + if (prop in cache) { + cache[prop] = value; + } else { + target[prop] = value; + } + return true; + }, + defineProperty(proxyTarget2, prop, desc) { + return Reflect.defineProperty(cache, prop, desc); + }, + deleteProperty(proxyTarget2, prop) { + return Reflect.deleteProperty(cache, prop); + } + }; + let proxyTarget = Object.create(target); + return new Proxy(proxyTarget, handlers); + }; + const wrapEvent = (wrapperMap) => ({ + addListener(target, listener, ...args) { + target.addListener(wrapperMap.get(listener), ...args); + }, + hasListener(target, listener) { + return target.hasListener(wrapperMap.get(listener)); + }, + removeListener(target, listener) { + target.removeListener(wrapperMap.get(listener)); + } + }); + let loggedSendResponseDeprecationWarning = false; + const onMessageWrappers = new DefaultWeakMap((listener) => { + if (typeof listener !== "function") { + return listener; + } + return function onMessage(message, sender, sendResponse) { + let didCallSendResponse = false; + let wrappedSendResponse; + let sendResponsePromise = new Promise((resolve) => { + wrappedSendResponse = function(response) { + if (!loggedSendResponseDeprecationWarning) { + console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack); + loggedSendResponseDeprecationWarning = true; + } + didCallSendResponse = true; + resolve(response); + }; + }); + let result; + try { + result = listener(message, sender, wrappedSendResponse); + } catch (err) { + result = Promise.reject(err); + } + const isResultThenable = result !== true && isThenable(result); + if (result !== true && !isResultThenable && !didCallSendResponse) { + return false; + } + const sendPromisedResult = (promise) => { + promise.then((msg) => { + sendResponse(msg); + }, (error) => { + let message2; + if (error && (error instanceof Error || typeof error.message === "string")) { + message2 = error.message; + } else { + message2 = "An unexpected error occurred"; + } + sendResponse({ + __mozWebExtensionPolyfillReject__: true, + message: message2 + }); + }).catch((err) => { + console.error("Failed to send onMessage rejected reply", err); + }); + }; + if (isResultThenable) { + sendPromisedResult(result); + } else { + sendPromisedResult(sendResponsePromise); + } + return true; + }; + }); + const wrappedSendMessageCallback = ({ reject, resolve }, reply) => { + if (extensionAPIs.runtime.lastError) { + if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) { + resolve(); + } else { + reject(extensionAPIs.runtime.lastError); + } + } else if (reply && reply.__mozWebExtensionPolyfillReject__) { + reject(new Error(reply.message)); + } else { + resolve(reply); + } + }; + const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => { + if (args.length < metadata.minArgs) { + throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); + } + if (args.length > metadata.maxArgs) { + throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); + } + return new Promise((resolve, reject) => { + const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, reject }); + args.push(wrappedCb); + apiNamespaceObj.sendMessage(...args); + }); + }; + const staticWrappers = { + runtime: { + onMessage: wrapEvent(onMessageWrappers), + onMessageExternal: wrapEvent(onMessageWrappers), + sendMessage: wrappedSendMessage.bind(null, "sendMessage", { minArgs: 1, maxArgs: 3 }) + }, + tabs: { + sendMessage: wrappedSendMessage.bind(null, "sendMessage", { minArgs: 2, maxArgs: 3 }) + } + }; + const settingMetadata = { + clear: { minArgs: 1, maxArgs: 1 }, + get: { minArgs: 1, maxArgs: 1 }, + set: { minArgs: 1, maxArgs: 1 } + }; + apiMetadata.privacy = { + network: { + networkPredictionEnabled: settingMetadata, + webRTCIPHandlingPolicy: settingMetadata + }, + services: { + passwordSavingEnabled: settingMetadata + }, + websites: { + hyperlinkAuditingEnabled: settingMetadata, + referrersEnabled: settingMetadata + } + }; + return wrapObject(extensionAPIs, staticWrappers, apiMetadata); + }; + module2.exports = wrapAPIs(chrome); + } else { + module2.exports = browser; + } +}); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL2Jyb3dzZXItcG9seWZpbGwuanMiXSwibmFtZXMiOlsibW9kdWxlIiwicHJveHlUYXJnZXQiLCJ2YWx1ZSIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7aUdDbEZDLFNBQVUsUUFBUSxTQUFTO0FBQzFCLE1BQUksSUFBMEMsRUFBRTtBQUM5QyxxQ0FBZ0MsQ0FBQyxNQUFRLENBQUMsb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxvR0FBQztBQUFELEVBQ3JELE9BQU8sWUFRTjtBQUNILEdBQUcsTUFBTSxTQUFVQSxTQUFRO0FBT3pCO0FBRUEsTUFBSSxPQUFPLFlBQVksZUFBZSxPQUFPLGVBQWUsT0FBTyxNQUFNLE9BQU8sV0FBVztBQUN6RixVQUFNLG1EQUFtRDtBQUN6RCxVQUFNLG9DQUFv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QU0saUJBQWlCO0FBQUEsUUFDckIsU0FBUztBQUFBLFVBQ1AsV0FBVyxVQUFVLGlCQUFpQjtBQUFBLFVBQ3RDLG1CQUFtQixVQUFVLGlCQUFpQjtBQUFBLFVBQzlDLGFBQWEsbUJBQW1CLEtBQUssTUFBTSxlQUFlLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQUEsUUFDdEY7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNKLGFBQWEsbUJBQW1CLEtBQUssTUFBTSxlQUFlLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQUEsUUFDdEY7QUFBQSxNQUNGO0FBQ0EsWUFBTSxrQkFBa0I7QUFBQSxRQUN0QixPQUFPLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRTtBQUFBLFFBQ2hDLEtBQUssRUFBRSxTQUFTLEdBQUcsU0FBUyxFQUFFO0FBQUEsUUFDOUIsS0FBSyxFQUFFLFNBQVMsR0FBRyxTQUFTLEVBQUU7QUFBQSxNQUNoQztBQUNBLGtCQUFZLFVBQVU7QUFBQSxRQUNwQixTQUFTO0FBQUEsVUFDUCwwQkFBMEI7QUFBQSxVQUMxQix3QkFBd0I7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1IsdUJBQXVCO0FBQUEsUUFDekI7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNSLDBCQUEwQjtBQUFBLFVBQzFCLGtCQUFrQjtBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUVBLGFBQU8sV0FBVyxlQUFlLGdCQUFnQixXQUFXO0FBQUEsSUFDOUQ7QUFJQSxJQUFBSCxRQUFPLFVBQVUsU0FBUyxNQUFNO0FBQUEsRUFDbEMsT0FBTztBQUNMLElBQUFBLFFBQU8sVUFBVTtBQUFBLEVBQ25CO0FBQ0YsQ0FBQyIsImZpbGUiOiJicm93c2VyLXBvbHlmaWxsLmVudHJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9jaHJvbWUvanMvYnJvd3Nlci1wb2x5ZmlsbC5qc1wiKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiLCBbXCJtb2R1bGVcIl0sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QpO1xuICAgIGdsb2JhbC5icm93c2VyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIC0gdjAuNC4wIC0gV2VkIEZlYiAwNiAyMDE5IDExOjU4OjMxICovXG4gIC8qIC0qLSBNb2RlOiBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGpzLWluZGVudC1sZXZlbDogMiAtKi0gKi9cbiAgLyogdmltOiBzZXQgc3RzPTIgc3c9MiBldCB0dz04MDogKi9cbiAgLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGlmICh0eXBlb2YgYnJvd3NlciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYnJvd3NlcikgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UgPSBcIlRoZSBtZXNzYWdlIHBvcnQgY2xvc2VkIGJlZm9yZSBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZC5cIjtcbiAgICBjb25zdCBTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPSBcIlJldHVybmluZyBhIFByb21pc2UgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2VuZCBhIHJlcGx5IGZyb20gYW4gb25NZXNzYWdlL29uTWVzc2FnZUV4dGVybmFsIGxpc3RlbmVyLCBhcyB0aGUgc2VuZFJlc3BvbnNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGVjcyAoU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvQVBJL3J1bnRpbWUvb25NZXNzYWdlKVwiO1xuXG4gICAgLy8gV3JhcHBpbmcgdGhlIGJ1bGsgb2YgdGhpcyBwb2x5ZmlsbCBpbiBhIG9uZS10aW1lLXVzZSBmdW5jdGlvbiBpcyBhIG1pbm9yXG4gICAgLy8gb3B0aW1pemF0aW9uIGZvciBGaXJlZm94LiBTaW5jZSBTcGlkZXJtb25rZXkgZG9lcyBub3QgZnVsbHkgcGFyc2UgdGhlXG4gICAgLy8gY29udGVudHMgb2YgYSBmdW5jdGlvbiB1bnRpbCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHNpbmNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBhY3R1YWxseSBuZWVkIHRvIGJlIGNhbGxlZCwgdGhpcyBhbGxvd3MgdGhlIHBvbHlmaWxsIHRvIGJlIGluY2x1ZGVkXG4gICAgLy8gaW4gRmlyZWZveCBuZWFybHkgZm9yIGZyZWUuXG4gICAgY29uc3Qgd3JhcEFQSXMgPSBleHRlbnNpb25BUElzID0+IHtcbiAgICAgIC8vIE5PVEU6IGFwaU1ldGFkYXRhIGlzIGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGFwaS1tZXRhZGF0YS5qc29uIGZpbGVcbiAgICAgIC8vIGF0IGJ1aWxkIHRpbWUgYnkgcmVwbGFjaW5nIHRoZSBmb2xsb3dpbmcgXCJpbmNsdWRlXCIgd2l0aCB0aGUgY29udGVudCBvZiB0aGVcbiAgICAgIC8vIEpTT04gZmlsZS5cbiAgICAgIGNvbnN0IGFwaU1ldGFkYXRhID0ge1xuICAgICAgICBcImFsYXJtc1wiOiB7XG4gICAgICAgICAgXCJjbGVhclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsZWFyQWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYm9va21hcmtzXCI6IHtcbiAgICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldENoaWxkcmVuXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UmVjZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0U3ViVHJlZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlVHJlZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImJyb3dzZXJBY3Rpb25cIjoge1xuICAgICAgICAgIFwiZGlzYWJsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImVuYWJsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJhZGdlQmFja2dyb3VuZENvbG9yXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UG9wdXBcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRUaXRsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5Qb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEJhZGdlQmFja2dyb3VuZENvbG9yXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0QmFkZ2VUZXh0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJicm93c2luZ0RhdGFcIjoge1xuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlQ2FjaGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVDb29raWVzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlRG93bmxvYWRzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlRm9ybURhdGFcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVIaXN0b3J5XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlTG9jYWxTdG9yYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlUGFzc3dvcmRzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlUGx1Z2luRGF0YVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldHRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWFuZHNcIjoge1xuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGV4dE1lbnVzXCI6IHtcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvb2tpZXNcIjoge1xuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsQ29va2llU3RvcmVzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGV2dG9vbHNcIjoge1xuICAgICAgICAgIFwiaW5zcGVjdGVkV2luZG93XCI6IHtcbiAgICAgICAgICAgIFwiZXZhbFwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMixcbiAgICAgICAgICAgICAgXCJzaW5nbGVDYWxsYmFja0FyZ1wiOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYW5lbHNcIjoge1xuICAgICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMyxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDMsXG4gICAgICAgICAgICAgIFwic2luZ2xlQ2FsbGJhY2tBcmdcIjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkb3dubG9hZHNcIjoge1xuICAgICAgICAgIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG93bmxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlcmFzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZpbGVJY29uXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwib3BlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhdXNlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlRmlsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3VtZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNob3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlbnNpb25cIjoge1xuICAgICAgICAgIFwiaXNBbGxvd2VkRmlsZVNjaGVtZUFjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzQWxsb3dlZEluY29nbml0b0FjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImhpc3RvcnlcIjoge1xuICAgICAgICAgIFwiYWRkVXJsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlQWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlUmFuZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZWxldGVVcmxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRWaXNpdHNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpMThuXCI6IHtcbiAgICAgICAgICBcImRldGVjdExhbmd1YWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWNjZXB0TGFuZ3VhZ2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaWRlbnRpdHlcIjoge1xuICAgICAgICAgIFwibGF1bmNoV2ViQXV0aEZsb3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpZGxlXCI6IHtcbiAgICAgICAgICBcInF1ZXJ5U3RhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYW5hZ2VtZW50XCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFNlbGZcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRFbmFibGVkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pbnN0YWxsU2VsZlwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRQZXJtaXNzaW9uTGV2ZWxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWdlQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGVybWlzc2lvbnNcIjoge1xuICAgICAgICAgIFwiY29udGFpbnNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicnVudGltZVwiOiB7XG4gICAgICAgICAgXCJnZXRCYWNrZ3JvdW5kUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJyb3dzZXJJbmZvXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UGxhdGZvcm1JbmZvXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwib3Blbk9wdGlvbnNQYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVxdWVzdFVwZGF0ZUNoZWNrXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VuZE1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogM1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZW5kTmF0aXZlTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFVuaW5zdGFsbFVSTFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlc3Npb25zXCI6IHtcbiAgICAgICAgICBcImdldERldmljZXNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRSZWNlbnRseUNsb3NlZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3RvcmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzdG9yYWdlXCI6IHtcbiAgICAgICAgICBcImxvY2FsXCI6IHtcbiAgICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJzZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWFuYWdlZFwiOiB7XG4gICAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzeW5jXCI6IHtcbiAgICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZ2V0Qnl0ZXNJblVzZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJzZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwidGFic1wiOiB7XG4gICAgICAgICAgXCJjYXB0dXJlVmlzaWJsZVRhYlwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRldGVjdExhbmd1YWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGlzY2FyZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImR1cGxpY2F0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4ZWN1dGVTY3JpcHRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Wm9vbVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFpvb21TZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhpZ2hsaWdodFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImluc2VydENTU1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJxdWVyeVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbG9hZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUNTU1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0Wm9vbVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFpvb21TZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInRvcFNpdGVzXCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIndlYk5hdmlnYXRpb25cIjoge1xuICAgICAgICAgIFwiZ2V0QWxsRnJhbWVzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0RnJhbWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJSZXF1ZXN0XCI6IHtcbiAgICAgICAgICBcImhhbmRsZXJCZWhhdmlvckNoYW5nZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3aW5kb3dzXCI6IHtcbiAgICAgICAgICBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEN1cnJlbnRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRMYXN0Rm9jdXNlZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVwZGF0ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoYXBpTWV0YWRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcGktbWV0YWRhdGEuanNvbiBoYXMgbm90IGJlZW4gaW5jbHVkZWQgaW4gYnJvd3Nlci1wb2x5ZmlsbFwiKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBIFdlYWtNYXAgc3ViY2xhc3Mgd2hpY2ggY3JlYXRlcyBhbmQgc3RvcmVzIGEgdmFsdWUgZm9yIGFueSBrZXkgd2hpY2ggZG9lc1xuICAgICAgICogbm90IGV4aXN0IHdoZW4gYWNjZXNzZWQsIGJ1dCBiZWhhdmVzIGV4YWN0bHkgYXMgYW4gb3JkaW5hcnkgV2Vha01hcFxuICAgICAgICogb3RoZXJ3aXNlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZUl0ZW1cbiAgICAgICAqICAgICAgICBBIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgdmFsdWUgZm9yIGFueVxuICAgICAgICogICAgICAgIGtleSB3aGljaCBkb2VzIG5vdCBleGlzdCwgdGhlIGZpcnN0IHRpbWUgaXQgaXMgYWNjZXNzZWQuIFRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVzLCBhcyBpdHMgb25seSBhcmd1bWVudCwgdGhlIGtleSBiZWluZyBjcmVhdGVkLlxuICAgICAgICovXG4gICAgICBjbGFzcyBEZWZhdWx0V2Vha01hcCBleHRlbmRzIFdlYWtNYXAge1xuICAgICAgICBjb25zdHJ1Y3RvcihjcmVhdGVJdGVtLCBpdGVtcyA9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUl0ZW0gPSBjcmVhdGVJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNyZWF0ZUl0ZW0oa2V5KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggYSBgdGhlbmAgbWV0aG9kLCBhbmQgY2FuXG4gICAgICAgKiB0aGVyZWZvcmUgYmUgYXNzdW1lZCB0byBiZWhhdmUgYXMgYSBQcm9taXNlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlbmFibGUuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGlzVGhlbmFibGUgPSB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGNhbGxlZCwgd2lsbCByZXNvbHZlIG9yIHJlamVjdFxuICAgICAgICogdGhlIGdpdmVuIHByb21pc2UgYmFzZWQgb24gaG93IGl0IGlzIGNhbGxlZDpcbiAgICAgICAqXG4gICAgICAgKiAtIElmLCB3aGVuIGNhbGxlZCwgYGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcmAgY29udGFpbnMgYSBub24tbnVsbCBvYmplY3QsXG4gICAgICAgKiAgIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhhdCB2YWx1ZS5cbiAgICAgICAqIC0gSWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGV4YWN0bHkgb25lIGFyZ3VtZW50LCB0aGUgcHJvbWlzZSBpc1xuICAgICAgICogICByZXNvbHZlZCB0byB0aGF0IHZhbHVlLlxuICAgICAgICogLSBPdGhlcndpc2UsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZVxuICAgICAgICogICBmdW5jdGlvbidzIGFyZ3VtZW50cy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gcHJvbWlzZVxuICAgICAgICogICAgICAgIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNvbHV0aW9uIGFuZCByZWplY3Rpb24gZnVuY3Rpb25zIG9mIGFcbiAgICAgICAqICAgICAgICBwcm9taXNlLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcHJvbWlzZS5yZXNvbHZlXG4gICAgICAgKiAgICAgICAgVGhlIHByb21pc2UncyByZXNvbHV0aW9uIGZ1bmN0aW9uLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcHJvbWlzZS5yZWplY3Rpb25cbiAgICAgICAqICAgICAgICBUaGUgcHJvbWlzZSdzIHJlamVjdGlvbiBmdW5jdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSB3cmFwcGVkIG1ldGhvZCB3aGljaCBoYXMgY3JlYXRlZCB0aGUgY2FsbGJhY2suXG4gICAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1heFJlc29sdmVkQXJnc1xuICAgICAgICogICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGVcbiAgICAgICAqICAgICAgICBjYWxsYmFjayBjcmVhdGVkIGJ5IHRoZSB3cmFwcGVkIGFzeW5jIGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAgICAgICAqICAgICAgICBUaGUgZ2VuZXJhdGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgICovXG4gICAgICBjb25zdCBtYWtlQ2FsbGJhY2sgPSAocHJvbWlzZSwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuICguLi5jYWxsYmFja0FyZ3MpID0+IHtcbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZyB8fCBjYWxsYmFja0FyZ3MubGVuZ3RoIDw9IDEgJiYgbWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzWzBdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcGx1cmFsaXplQXJndW1lbnRzID0gbnVtQXJncyA9PiBudW1BcmdzID09IDEgPyBcImFyZ3VtZW50XCIgOiBcImFyZ3VtZW50c1wiO1xuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBtZXRhZGF0YS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAgICogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgd2hpY2ggaXMgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWluQXJnc1xuICAgICAgICogICAgICAgIFRoZSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbXVzdCBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24uIElmIGNhbGxlZCB3aXRoIGZld2VyIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhBcmdzXG4gICAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uLiBJZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhSZXNvbHZlZEFyZ3NcbiAgICAgICAqICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdoaWNoIG1heSBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgY2FsbGJhY2sgY3JlYXRlZCBieSB0aGUgd3JhcHBlZCBhc3luYyBmdW5jdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24ob2JqZWN0LCAuLi4qKX1cbiAgICAgICAqICAgICAgIFRoZSBnZW5lcmF0ZWQgd3JhcHBlciBmdW5jdGlvbi5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgd3JhcEFzeW5jRnVuY3Rpb24gPSAobmFtZSwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jRnVuY3Rpb25XcmFwcGVyKHRhcmdldCwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkFyZ3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHttZXRhZGF0YS5taW5BcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5taW5BcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWV0YWRhdGEubWF4QXJncykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBtb3N0ICR7bWV0YWRhdGEubWF4QXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWF4QXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBBUEkgbWV0aG9kIGhhcyBjdXJyZW50bHkgbm8gY2FsbGJhY2sgb24gQ2hyb21lLCBidXQgaXQgcmV0dXJuIGEgcHJvbWlzZSBvbiBGaXJlZm94LFxuICAgICAgICAgICAgICAvLyBhbmQgc28gdGhlIHBvbHlmaWxsIHdpbGwgdHJ5IHRvIGNhbGwgaXQgd2l0aCBhIGNhbGxiYWNrIGZpcnN0LCBhbmQgaXQgd2lsbCBmYWxsYmFja1xuICAgICAgICAgICAgICAvLyB0byBub3QgcGFzc2luZyB0aGUgY2FsbGJhY2sgaWYgdGhlIGZpcnN0IGNhbGwgZmFpbHMuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MsIG1ha2VDYWxsYmFjayh7IHJlc29sdmUsIHJlamVjdCB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjYkVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke25hbWV9IEFQSSBtZXRob2QgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlIGNhbGxiYWNrIHBhcmFtZXRlciwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGNhbGwgaXQgd2l0aG91dCBhIGNhbGxiYWNrOiBcIiwgY2JFcnJvcik7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIEFQSSBtZXRob2QgbWV0YWRhdGEsIHNvIHRoYXQgdGhlIG5leHQgQVBJIGNhbGxzIHdpbGwgbm90IHRyeSB0b1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgdW5zdXBwb3J0ZWQgY2FsbGJhY2sgYW55bW9yZS5cbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5mYWxsYmFja1RvTm9DYWxsYmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLm5vQ2FsbGJhY2sgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLm5vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHsgcmVzb2x2ZSwgcmVqZWN0IH0sIG1ldGFkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICAvKipcbiAgICAgICAqIFdyYXBzIGFuIGV4aXN0aW5nIG1ldGhvZCBvZiB0aGUgdGFyZ2V0IG9iamVjdCwgc28gdGhhdCBjYWxscyB0byBpdCBhcmVcbiAgICAgICAqIGludGVyY2VwdGVkIGJ5IHRoZSBnaXZlbiB3cmFwcGVyIGZ1bmN0aW9uLiBUaGUgd3JhcHBlciBmdW5jdGlvbiByZWNlaXZlcyxcbiAgICAgICAqIGFzIGl0cyBmaXJzdCBhcmd1bWVudCwgdGhlIG9yaWdpbmFsIGB0YXJnZXRgIG9iamVjdCwgZm9sbG93ZWQgYnkgZWFjaCBvZlxuICAgICAgICogdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIG1ldGhvZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0XG4gICAgICAgKiAgICAgICAgVGhlIG9yaWdpbmFsIHRhcmdldCBvYmplY3QgdGhhdCB0aGUgd3JhcHBlZCBtZXRob2QgYmVsb25ncyB0by5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZFxuICAgICAgICogICAgICAgIFRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC4gVGhpcyBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgdGhlIFByb3h5XG4gICAgICAgKiAgICAgICAgb2JqZWN0IHdoaWNoIGlzIGNyZWF0ZWQgdG8gd3JhcCB0aGUgbWV0aG9kLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gd3JhcHBlclxuICAgICAgICogICAgICAgIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBpbiBwbGFjZSBvZiBhIGRpcmVjdCBpbnZvY2F0aW9uXG4gICAgICAgKiAgICAgICAgb2YgdGhlIHdyYXBwZWQgbWV0aG9kLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtQcm94eTxmdW5jdGlvbj59XG4gICAgICAgKiAgICAgICAgQSBQcm94eSBvYmplY3QgZm9yIHRoZSBnaXZlbiBtZXRob2QsIHdoaWNoIGludm9rZXMgdGhlIGdpdmVuIHdyYXBwZXJcbiAgICAgICAqICAgICAgICBtZXRob2QgaW4gaXRzIHBsYWNlLlxuICAgICAgICovXG4gICAgICBjb25zdCB3cmFwTWV0aG9kID0gKHRhcmdldCwgbWV0aG9kLCB3cmFwcGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkobWV0aG9kLCB7XG4gICAgICAgICAgYXBwbHkodGFyZ2V0TWV0aG9kLCB0aGlzT2JqLCBhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5jYWxsKHRoaXNPYmosIHRhcmdldCwgLi4uYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGxldCBoYXNPd25Qcm9wZXJ0eSA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBXcmFwcyBhbiBvYmplY3QgaW4gYSBQcm94eSB3aGljaCBpbnRlcmNlcHRzIGFuZCB3cmFwcyBjZXJ0YWluIG1ldGhvZHNcbiAgICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBgd3JhcHBlcnNgIGFuZCBgbWV0YWRhdGFgIG9iamVjdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICAgICAgICogICAgICAgIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHdyYXAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IFt3cmFwcGVycyA9IHt9XVxuICAgICAgICogICAgICAgIEFuIG9iamVjdCB0cmVlIGNvbnRhaW5pbmcgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHNwZWNpYWwgY2FzZXMuIEFueVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uIHByZXNlbnQgaW4gdGhpcyBvYmplY3QgdHJlZSBpcyBjYWxsZWQgaW4gcGxhY2Ugb2YgdGhlXG4gICAgICAgKiAgICAgICAgbWV0aG9kIGluIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSBgdGFyZ2V0YCBvYmplY3QgdHJlZS4gVGhlc2VcbiAgICAgICAqICAgICAgICB3cmFwcGVyIG1ldGhvZHMgYXJlIGludm9rZWQgYXMgZGVzY3JpYmVkIGluIHtAc2VlIHdyYXBNZXRob2R9LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YWRhdGEgPSB7fV1cbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIG1ldGFkYXRhIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICAgICAgICogICAgICAgIFByb21pc2UtYmFzZWQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cy4gQW55IGZ1bmN0aW9uIGluXG4gICAgICAgKiAgICAgICAgdGhlIGB0YXJnZXRgIG9iamVjdCB0cmVlIHdoaWNoIGhhcyBhIGNvcnJlc3BvbmRpbmcgbWV0YWRhdGEgb2JqZWN0XG4gICAgICAgKiAgICAgICAgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGBtZXRhZGF0YWAgdHJlZSBpcyByZXBsYWNlZCB3aXRoIGFuXG4gICAgICAgKiAgICAgICAgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgd3JhcHBlciBmdW5jdGlvbiwgYXMgZGVzY3JpYmVkIGluXG4gICAgICAgKiAgICAgICAge0BzZWUgd3JhcEFzeW5jRnVuY3Rpb259XG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge1Byb3h5PG9iamVjdD59XG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHdyYXBPYmplY3QgPSAodGFyZ2V0LCB3cmFwcGVycyA9IHt9LCBtZXRhZGF0YSA9IHt9KSA9PiB7XG4gICAgICAgIGxldCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGxldCBoYW5kbGVycyA9IHtcbiAgICAgICAgICBoYXMocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldCB8fCBwcm9wIGluIGNhY2hlO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBnZXQocHJveHlUYXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAocHJvcCBpbiBjYWNoZSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbcHJvcF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHByb3AgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0YXJnZXRbcHJvcF07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIG9uIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4gQ2hlY2sgaWYgd2UgbmVlZCB0byBkb1xuICAgICAgICAgICAgICAvLyBhbnkgd3JhcHBpbmcuXG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3cmFwcGVyc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSB3cmFwcGVyIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBNZXRob2QodGFyZ2V0LCB0YXJnZXRbcHJvcF0sIHdyYXBwZXJzW3Byb3BdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNPd25Qcm9wZXJ0eShtZXRhZGF0YSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHdlIGhhdmUgbWV0YWRhdGEgZm9yLiBDcmVhdGUgYVxuICAgICAgICAgICAgICAgIC8vIFByb21pc2Ugd3JhcHBlciBmb3IgaXQuXG4gICAgICAgICAgICAgICAgbGV0IHdyYXBwZXIgPSB3cmFwQXN5bmNGdW5jdGlvbihwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIHRoYXQgd2UgZG9uJ3Qga25vdyBvciBjYXJlIGFib3V0LiBSZXR1cm4gdGhlXG4gICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kLCBib3VuZCB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5iaW5kKHRhcmdldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIChoYXNPd25Qcm9wZXJ0eSh3cmFwcGVycywgcHJvcCkgfHwgaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCB0aGF0IHdlIG5lZWQgdG8gZG8gc29tZSB3cmFwcGluZyBmb3IgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAgIC8vIG9mLiBDcmVhdGUgYSBzdWItb2JqZWN0IHdyYXBwZXIgZm9yIGl0IHdpdGggdGhlIGFwcHJvcHJpYXRlIGNoaWxkXG4gICAgICAgICAgICAgIC8vIG1ldGFkYXRhLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBPYmplY3QodmFsdWUsIHdyYXBwZXJzW3Byb3BdLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueSB3cmFwcGluZyBmb3IgdGhpcyBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgLy8gc28ganVzdCBmb3J3YXJkIGFsbCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FjaGUsIHByb3AsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHByb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICAgIGNhY2hlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShwcm94eVRhcmdldCwgcHJvcCwgZGVzYykge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoY2FjaGUsIHByb3AsIGRlc2MpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBkZWxldGVQcm9wZXJ0eShwcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoY2FjaGUsIHByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgY29udHJhY3Qgb2YgdGhlIFByb3h5IEFQSSwgdGhlIFwiZ2V0XCIgcHJveHkgaGFuZGxlciBtdXN0IHJldHVybiB0aGVcbiAgICAgICAgLy8gb3JpZ2luYWwgdmFsdWUgb2YgdGhlIHRhcmdldCBpZiB0aGF0IHZhbHVlIGlzIGRlY2xhcmVkIHJlYWQtb25seSBhbmRcbiAgICAgICAgLy8gbm9uLWNvbmZpZ3VyYWJsZS4gRm9yIHRoaXMgcmVhc29uLCB3ZSBjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICAgIC8vIHByb3RvdHlwZSBzZXQgdG8gYHRhcmdldGAgaW5zdGVhZCBvZiB1c2luZyBgdGFyZ2V0YCBkaXJlY3RseS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGNhbm5vdCByZXR1cm4gYSBjdXN0b20gb2JqZWN0IGZvciBBUElzIHRoYXRcbiAgICAgICAgLy8gYXJlIGRlY2xhcmVkIHJlYWQtb25seSBhbmQgbm9uLWNvbmZpZ3VyYWJsZSwgc3VjaCBhcyBgY2hyb21lLmRldnRvb2xzYC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIHByb3h5IGhhbmRsZXJzIHRoZW1zZWx2ZXMgd2lsbCBzdGlsbCB1c2UgdGhlIG9yaWdpbmFsIGB0YXJnZXRgXG4gICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGBwcm94eVRhcmdldGAsIHNvIHRoYXQgdGhlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgYXJlXG4gICAgICAgIC8vIGRlcmVmZXJlbmNlZCB2aWEgdGhlIG9yaWdpbmFsIHRhcmdldHMuXG4gICAgICAgIGxldCBwcm94eVRhcmdldCA9IE9iamVjdC5jcmVhdGUodGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShwcm94eVRhcmdldCwgaGFuZGxlcnMpO1xuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgc2V0IG9mIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhbiBldmVudCBvYmplY3QsIHdoaWNoIGhhbmRsZXNcbiAgICAgICAqIHdyYXBwaW5nIG9mIGxpc3RlbmVyIGZ1bmN0aW9ucyB0aGF0IHRob3NlIG1lc3NhZ2VzIGFyZSBwYXNzZWQuXG4gICAgICAgKlxuICAgICAgICogQSBzaW5nbGUgd3JhcHBlciBpcyBjcmVhdGVkIGZvciBlYWNoIGxpc3RlbmVyIGZ1bmN0aW9uLCBhbmQgc3RvcmVkIGluIGFcbiAgICAgICAqIG1hcC4gU3Vic2VxdWVudCBjYWxscyB0byBgYWRkTGlzdGVuZXJgLCBgaGFzTGlzdGVuZXJgLCBvciBgcmVtb3ZlTGlzdGVuZXJgXG4gICAgICAgKiByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgd3JhcHBlciwgc28gdGhhdCAgYXR0ZW1wdHMgdG8gcmVtb3ZlIGFcbiAgICAgICAqIHByZXZpb3VzbHktYWRkZWQgbGlzdGVuZXIgd29yayBhcyBleHBlY3RlZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0RlZmF1bHRXZWFrTWFwPGZ1bmN0aW9uLCBmdW5jdGlvbj59IHdyYXBwZXJNYXBcbiAgICAgICAqICAgICAgICBBIERlZmF1bHRXZWFrTWFwIG9iamVjdCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgd3JhcHBlclxuICAgICAgICogICAgICAgIGZvciBhIGdpdmVuIGxpc3RlbmVyIGZ1bmN0aW9uIHdoZW4gb25lIGRvZXMgbm90IGV4aXN0LCBhbmQgcmV0cmlldmVcbiAgICAgICAqICAgICAgICBhbiBleGlzdGluZyBvbmUgd2hlbiBpdCBkb2VzLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHdyYXBFdmVudCA9IHdyYXBwZXJNYXAgPT4gKHtcbiAgICAgICAgYWRkTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lciwgLi4uYXJncykge1xuICAgICAgICAgIHRhcmdldC5hZGRMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lciksIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhhc0xpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0Lmhhc0xpc3RlbmVyKHdyYXBwZXJNYXAuZ2V0KGxpc3RlbmVyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lcikge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gS2VlcCB0cmFjayBpZiB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBoYXMgYmVlbiBsb2dnZWQgYXQgbGVhc3Qgb25jZS5cbiAgICAgIGxldCBsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgb25NZXNzYWdlV3JhcHBlcnMgPSBuZXcgRGVmYXVsdFdlYWtNYXAobGlzdGVuZXIgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogV3JhcHMgYSBtZXNzYWdlIGxpc3RlbmVyIGZ1bmN0aW9uIHNvIHRoYXQgaXQgbWF5IHNlbmQgcmVzcG9uc2VzIGJhc2VkIG9uXG4gICAgICAgICAqIGl0cyByZXR1cm4gdmFsdWUsIHJhdGhlciB0aGFuIGJ5IHJldHVybmluZyBhIHNlbnRpbmVsIHZhbHVlIGFuZCBjYWxsaW5nIGFcbiAgICAgICAgICogY2FsbGJhY2suIElmIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiByZXR1cm5zIGEgUHJvbWlzZSwgdGhlIHJlc3BvbnNlIGlzXG4gICAgICAgICAqIHNlbnQgd2hlbiB0aGUgcHJvbWlzZSBlaXRoZXIgcmVzb2x2ZXMgb3IgcmVqZWN0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gICAgICAgICAqICAgICAgICBUaGUgbWVzc2FnZSBzZW50IGJ5IHRoZSBvdGhlciBlbmQgb2YgdGhlIGNoYW5uZWwuXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBzZW5kZXJcbiAgICAgICAgICogICAgICAgIERldGFpbHMgYWJvdXQgdGhlIHNlbmRlciBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbigqKX0gc2VuZFJlc3BvbnNlXG4gICAgICAgICAqICAgICAgICBBIGNhbGxiYWNrIHdoaWNoLCB3aGVuIGNhbGxlZCB3aXRoIGFuIGFyYml0cmFyeSBhcmd1bWVudCwgc2VuZHNcbiAgICAgICAgICogICAgICAgIHRoYXQgdmFsdWUgYXMgYSByZXNwb25zZS5cbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqICAgICAgICBUcnVlIGlmIHRoZSB3cmFwcGVkIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgd2hpY2ggd2lsbCBsYXRlclxuICAgICAgICAgKiAgICAgICAgeWllbGQgYSByZXNwb25zZS4gRmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9uTWVzc2FnZShtZXNzYWdlLCBzZW5kZXIsIHNlbmRSZXNwb25zZSkge1xuICAgICAgICAgIGxldCBkaWRDYWxsU2VuZFJlc3BvbnNlID0gZmFsc2U7XG5cbiAgICAgICAgICBsZXQgd3JhcHBlZFNlbmRSZXNwb25zZTtcbiAgICAgICAgICBsZXQgc2VuZFJlc3BvbnNlUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZFNlbmRSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICBpZiAoIWxvZ2dlZFNlbmRSZXNwb25zZURlcHJlY2F0aW9uV2FybmluZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcsIG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgICAgICAgICBsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpZENhbGxTZW5kUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBsaXN0ZW5lcihtZXNzYWdlLCBzZW5kZXIsIHdyYXBwZWRTZW5kUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc1Jlc3VsdFRoZW5hYmxlID0gcmVzdWx0ICE9PSB0cnVlICYmIGlzVGhlbmFibGUocmVzdWx0KTtcblxuICAgICAgICAgIC8vIElmIHRoZSBsaXN0ZW5lciBkaWRuJ3QgcmV0dXJuZWQgdHJ1ZSBvciBhIFByb21pc2UsIG9yIGNhbGxlZFxuICAgICAgICAgIC8vIHdyYXBwZWRTZW5kUmVzcG9uc2Ugc3luY2hyb25vdXNseSwgd2UgY2FuIGV4aXQgZWFybGllclxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgd2lsbCBiZSBubyByZXNwb25zZSBzZW50IGZyb20gdGhpcyBsaXN0ZW5lci5cbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmICFpc1Jlc3VsdFRoZW5hYmxlICYmICFkaWRDYWxsU2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQSBzbWFsbCBoZWxwZXIgdG8gc2VuZCB0aGUgbWVzc2FnZSBpZiB0aGUgcHJvbWlzZSByZXNvbHZlc1xuICAgICAgICAgIC8vIGFuZCBhbiBlcnJvciBpZiB0aGUgcHJvbWlzZSByZWplY3RzIChhIHdyYXBwZWQgc2VuZE1lc3NhZ2UgaGFzXG4gICAgICAgICAgLy8gdG8gdHJhbnNsYXRlIHRoZSBtZXNzYWdlIGludG8gYSByZXNvbHZlZCBwcm9taXNlIG9yIGEgcmVqZWN0ZWRcbiAgICAgICAgICAvLyBwcm9taXNlKS5cbiAgICAgICAgICBjb25zdCBzZW5kUHJvbWlzZWRSZXN1bHQgPSBwcm9taXNlID0+IHtcbiAgICAgICAgICAgIHByb21pc2UudGhlbihtc2cgPT4ge1xuICAgICAgICAgICAgICAvLyBzZW5kIHRoZSBtZXNzYWdlIHZhbHVlLlxuICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgLy8gU2VuZCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGlmIHRoZSByZWplY3RlZCB2YWx1ZVxuICAgICAgICAgICAgICAvLyBpcyBhbiBpbnN0YW5jZSBvZiBlcnJvciwgb3IgdGhlIG9iamVjdCBpdHNlbGYgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgICAgICAgaWYgKGVycm9yICYmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWRcIjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgX19tb3pXZWJFeHRlbnNpb25Qb2x5ZmlsbFJlamVjdF9fOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAvLyBQcmludCBhbiBlcnJvciBvbiB0aGUgY29uc29sZSBpZiB1bmFibGUgdG8gc2VuZCB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc2VuZCBvbk1lc3NhZ2UgcmVqZWN0ZWQgcmVwbHlcIiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIgcmV0dXJuZWQgYSBQcm9taXNlLCBzZW5kIHRoZSByZXNvbHZlZCB2YWx1ZSBhcyBhXG4gICAgICAgICAgLy8gcmVzdWx0LCBvdGhlcndpc2Ugd2FpdCB0aGUgcHJvbWlzZSByZWxhdGVkIHRvIHRoZSB3cmFwcGVkU2VuZFJlc3BvbnNlXG4gICAgICAgICAgLy8gY2FsbGJhY2sgdG8gcmVzb2x2ZSBhbmQgc2VuZCBpdCBhcyBhIHJlc3BvbnNlLlxuICAgICAgICAgIGlmIChpc1Jlc3VsdFRoZW5hYmxlKSB7XG4gICAgICAgICAgICBzZW5kUHJvbWlzZWRSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFByb21pc2VkUmVzdWx0KHNlbmRSZXNwb25zZVByb21pc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIExldCBDaHJvbWUga25vdyB0aGF0IHRoZSBsaXN0ZW5lciBpcyByZXBseWluZy5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3cmFwcGVkU2VuZE1lc3NhZ2VDYWxsYmFjayA9ICh7IHJlamVjdCwgcmVzb2x2ZSB9LCByZXBseSkgPT4ge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIC8vIERldGVjdCB3aGVuIG5vbmUgb2YgdGhlIGxpc3RlbmVycyByZXBsaWVkIHRvIHRoZSBzZW5kTWVzc2FnZSBjYWxsIGFuZCByZXNvbHZlXG4gICAgICAgICAgLy8gdGhlIHByb21pc2UgdG8gdW5kZWZpbmVkIGFzIGluIEZpcmVmb3guXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSA9PT0gQ0hST01FX1NFTkRfTUVTU0FHRV9DQUxMQkFDS19OT19SRVNQT05TRV9NRVNTQUdFKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChleHRlbnNpb25BUElzLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVwbHkgJiYgcmVwbHkuX19tb3pXZWJFeHRlbnNpb25Qb2x5ZmlsbFJlamVjdF9fKSB7XG4gICAgICAgICAgLy8gQ29udmVydCBiYWNrIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBpbnRvXG4gICAgICAgICAgLy8gYW4gRXJyb3IgaW5zdGFuY2UuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihyZXBseS5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXBseSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHdyYXBwZWRTZW5kTWVzc2FnZSA9IChuYW1lLCBtZXRhZGF0YSwgYXBpTmFtZXNwYWNlT2JqLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkFyZ3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0ICR7bWV0YWRhdGEubWluQXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWluQXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWV0YWRhdGEubWF4QXJncykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbW9zdCAke21ldGFkYXRhLm1heEFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1heEFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZENiID0gd3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2suYmluZChudWxsLCB7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICAgICAgICBhcmdzLnB1c2god3JhcHBlZENiKTtcbiAgICAgICAgICBhcGlOYW1lc3BhY2VPYmouc2VuZE1lc3NhZ2UoLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgc3RhdGljV3JhcHBlcnMgPSB7XG4gICAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgICBvbk1lc3NhZ2U6IHdyYXBFdmVudChvbk1lc3NhZ2VXcmFwcGVycyksXG4gICAgICAgICAgb25NZXNzYWdlRXh0ZXJuYWw6IHdyYXBFdmVudChvbk1lc3NhZ2VXcmFwcGVycyksXG4gICAgICAgICAgc2VuZE1lc3NhZ2U6IHdyYXBwZWRTZW5kTWVzc2FnZS5iaW5kKG51bGwsIFwic2VuZE1lc3NhZ2VcIiwgeyBtaW5BcmdzOiAxLCBtYXhBcmdzOiAzIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHRhYnM6IHtcbiAgICAgICAgICBzZW5kTWVzc2FnZTogd3JhcHBlZFNlbmRNZXNzYWdlLmJpbmQobnVsbCwgXCJzZW5kTWVzc2FnZVwiLCB7IG1pbkFyZ3M6IDIsIG1heEFyZ3M6IDMgfSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHRpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgY2xlYXI6IHsgbWluQXJnczogMSwgbWF4QXJnczogMSB9LFxuICAgICAgICBnZXQ6IHsgbWluQXJnczogMSwgbWF4QXJnczogMSB9LFxuICAgICAgICBzZXQ6IHsgbWluQXJnczogMSwgbWF4QXJnczogMSB9XG4gICAgICB9O1xuICAgICAgYXBpTWV0YWRhdGEucHJpdmFjeSA9IHtcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIG5ldHdvcmtQcmVkaWN0aW9uRW5hYmxlZDogc2V0dGluZ01ldGFkYXRhLFxuICAgICAgICAgIHdlYlJUQ0lQSGFuZGxpbmdQb2xpY3k6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9LFxuICAgICAgICBzZXJ2aWNlczoge1xuICAgICAgICAgIHBhc3N3b3JkU2F2aW5nRW5hYmxlZDogc2V0dGluZ01ldGFkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHdlYnNpdGVzOiB7XG4gICAgICAgICAgaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkOiBzZXR0aW5nTWV0YWRhdGEsXG4gICAgICAgICAgcmVmZXJyZXJzRW5hYmxlZDogc2V0dGluZ01ldGFkYXRhXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB3cmFwT2JqZWN0KGV4dGVuc2lvbkFQSXMsIHN0YXRpY1dyYXBwZXJzLCBhcGlNZXRhZGF0YSk7XG4gICAgfTtcblxuICAgIC8vIFRoZSBidWlsZCBwcm9jZXNzIGFkZHMgYSBVTUQgd3JhcHBlciBhcm91bmQgdGhpcyBmaWxlLCB3aGljaCBtYWtlcyB0aGVcbiAgICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB3cmFwQVBJcyhjaHJvbWUpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gYnJvd3NlcjtcbiAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icm93c2VyLXBvbHlmaWxsLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/chrome/dist/content-script.entry.js b/chrome/dist/content-script.entry.js index 78dab48..2cf649d 100644 --- a/chrome/dist/content-script.entry.js +++ b/chrome/dist/content-script.entry.js @@ -1 +1,166 @@ -/*! Copyright banther@pm.me */!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}({3:function(e,t){var n=(e,t,n)=>new Promise((r,o)=>{var i=e=>{try{l(n.next(e))}catch(e){o(e)}},a=e=>{try{l(n.throw(e))}catch(e){o(e)}},l=e=>e.done?r(e.value):Promise.resolve(e.value).then(i,a);l((n=n.apply(e,t)).next())});chrome.runtime.onMessage.addListener(e=>{switch(e.type){case"page-content":return function(){return n(this,null,(function*(){var e=document.documentElement.innerHTML,t=document.title;if("string"!=typeof e)throw new Error("html content not available");return{title:t,html:e.replace(/\s+/g," ")}}))}();case"show-error":return function(e){return n(this,null,(function*(){document.querySelectorAll(".shiori-ext-dialog-overlay").forEach(e=>e.remove());var t=document.createElement("div"),n=document.createElement("div"),r=document.createElement("p"),o=document.createElement("p"),i=document.createElement("div"),a=document.createElement("a");t.className="shiori-ext-dialog-overlay",n.className="shiori-ext-dialog",r.className="shiori-ext-dialog-header",o.className="shiori-ext-dialog-body",i.className="shiori-ext-dialog-footer",r.textContent="Shiori Error",o.textContent=e,a.textContent="OK",a.addEventListener("click",()=>{t.remove()}),t.appendChild(n),n.appendChild(r),n.appendChild(o),n.appendChild(i),i.appendChild(a),document.body.appendChild(t)}))}(e.message)}})}}); \ No newline at end of file +/*! Copyright banther@pm.me */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./chrome/js/content-script.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./chrome/js/content-script.js": +/*!*************************************!*\ + !*** ./chrome/js/content-script.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; +function getPageContent() { + return __async(this, null, function* () { + var html = document.documentElement.innerHTML, title = document.title; + if (typeof html !== "string") { + throw new Error("html content not available"); + } + return { + title, + html: html.replace(/\s+/g, " ") + }; + }); +} +function showError(msg) { + return __async(this, null, function* () { + document.querySelectorAll(".shiori-ext-dialog-overlay").forEach((node) => node.remove()); + var overlay = document.createElement("div"), dialog = document.createElement("div"), header = document.createElement("p"), body = document.createElement("p"), footer = document.createElement("div"), button = document.createElement("a"); + overlay.className = "shiori-ext-dialog-overlay"; + dialog.className = "shiori-ext-dialog"; + header.className = "shiori-ext-dialog-header"; + body.className = "shiori-ext-dialog-body"; + footer.className = "shiori-ext-dialog-footer"; + header.textContent = "Shiori Error"; + body.textContent = msg; + button.textContent = "OK"; + button.addEventListener("click", () => { + overlay.remove(); + }); + overlay.appendChild(dialog); + dialog.appendChild(header); + dialog.appendChild(body); + dialog.appendChild(footer); + footer.appendChild(button); + document.body.appendChild(overlay); + }); +} +chrome.runtime.onMessage.addListener((request) => { + switch (request.type) { + case "page-content": + return getPageContent(); + case "show-error": + return showError(request.message); + break; + } +}); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL2NvbnRlbnQtc2NyaXB0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxTQUFlLGlCQUFpQjtBQUFBO0FBQzlCLFFBQUksT0FBTyxTQUFTLGdCQUFnQixXQUNsQyxRQUFRLFNBQVM7QUFFbkIsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixZQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQSxJQUM5QztBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLEtBQUssUUFBUSxRQUFRLEdBQUc7QUFBQSxJQUNoQztBQUFBLEVBQ0Y7QUFBQTtBQUVBLFNBQWUsVUFBVSxLQUFLO0FBQUE7QUFFNUIsYUFBUyxpQkFBaUIsNEJBQTRCLEVBQ25ELFFBQVEsVUFBUSxLQUFLLE9BQU8sQ0FBQztBQUdoQyxRQUFJLFVBQVUsU0FBUyxjQUFjLEtBQUssR0FDeEMsU0FBUyxTQUFTLGNBQWMsS0FBSyxHQUNyQyxTQUFTLFNBQVMsY0FBYyxHQUFHLEdBQ25DLE9BQU8sU0FBUyxjQUFjLEdBQUcsR0FDakMsU0FBUyxTQUFTLGNBQWMsS0FBSyxHQUNyQyxTQUFTLFNBQVMsY0FBYyxHQUFHO0FBRXJDLFlBQVEsWUFBWTtBQUNwQixXQUFPLFlBQVk7QUFDbkIsV0FBTyxZQUFZO0FBQ25CLFNBQUssWUFBWTtBQUNqQixXQUFPLFlBQVk7QUFFbkIsV0FBTyxjQUFjO0FBQ3JCLFNBQUssY0FBYztBQUNuQixXQUFPLGNBQWM7QUFFckIsV0FBTyxpQkFBaUIsU0FBUyxNQUFNO0FBQ3JDLGNBQVEsT0FBTztBQUFBLElBQ2pCLENBQUM7QUFFRCxZQUFRLFlBQVksTUFBTTtBQUMxQixXQUFPLFlBQVksTUFBTTtBQUN6QixXQUFPLFlBQVksSUFBSTtBQUN2QixXQUFPLFlBQVksTUFBTTtBQUN6QixXQUFPLFlBQVksTUFBTTtBQUV6QixhQUFTLEtBQUssWUFBWSxPQUFPO0FBQUEsRUFDbkM7QUFBQTtBQUVBLE9BQU8sUUFBUSxVQUFVLFlBQVksYUFBVztBQUM5QyxVQUFRLFFBQVEsTUFBTTtBQUFBLElBQ3BCLEtBQUs7QUFDSCxhQUFPLGVBQWU7QUFBQSxJQUN4QixLQUFLO0FBQ0gsYUFBTyxVQUFVLFFBQVEsT0FBTztBQUNoQztBQUFBLEVBQ0o7QUFDRixDQUFDIiwiZmlsZSI6ImNvbnRlbnQtc2NyaXB0LmVudHJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9jaHJvbWUvanMvY29udGVudC1zY3JpcHQuanNcIik7XG4iLCJhc3luYyBmdW5jdGlvbiBnZXRQYWdlQ29udGVudCgpIHtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MLFxuICAgIHRpdGxlID0gZG9jdW1lbnQudGl0bGU7XG5cbiAgaWYgKHR5cGVvZiBodG1sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaHRtbCBjb250ZW50IG5vdCBhdmFpbGFibGVcIik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBodG1sOiBodG1sLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93RXJyb3IobXNnKSB7XG4gIC8vIFJlbW92ZSBvbGQgZXJyb3IgZGlhbG9nXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuc2hpb3JpLWV4dC1kaWFsb2ctb3ZlcmxheVwiKVxuICAgIC5mb3JFYWNoKG5vZGUgPT4gbm9kZS5yZW1vdmUoKSk7XG5cbiAgLy8gQ3JlYXRlIG5ldyBlcnJvciBkaWFsb2dcbiAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgIGRpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIiksXG4gICAgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLFxuICAgIGZvb3RlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG5cbiAgb3ZlcmxheS5jbGFzc05hbWUgPSBcInNoaW9yaS1leHQtZGlhbG9nLW92ZXJsYXlcIjtcbiAgZGlhbG9nLmNsYXNzTmFtZSA9IFwic2hpb3JpLWV4dC1kaWFsb2dcIjtcbiAgaGVhZGVyLmNsYXNzTmFtZSA9IFwic2hpb3JpLWV4dC1kaWFsb2ctaGVhZGVyXCI7XG4gIGJvZHkuY2xhc3NOYW1lID0gXCJzaGlvcmktZXh0LWRpYWxvZy1ib2R5XCI7XG4gIGZvb3Rlci5jbGFzc05hbWUgPSBcInNoaW9yaS1leHQtZGlhbG9nLWZvb3RlclwiO1xuXG4gIGhlYWRlci50ZXh0Q29udGVudCA9IFwiU2hpb3JpIEVycm9yXCI7XG4gIGJvZHkudGV4dENvbnRlbnQgPSBtc2c7XG4gIGJ1dHRvbi50ZXh0Q29udGVudCA9IFwiT0tcIjtcblxuICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBvdmVybGF5LnJlbW92ZSgpO1xuICB9KTtcblxuICBvdmVybGF5LmFwcGVuZENoaWxkKGRpYWxvZyk7XG4gIGRpYWxvZy5hcHBlbmRDaGlsZChoZWFkZXIpO1xuICBkaWFsb2cuYXBwZW5kQ2hpbGQoYm9keSk7XG4gIGRpYWxvZy5hcHBlbmRDaGlsZChmb290ZXIpO1xuICBmb290ZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xufVxuXG5jaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIocmVxdWVzdCA9PiB7XG4gIHN3aXRjaCAocmVxdWVzdC50eXBlKSB7XG4gICAgY2FzZSBcInBhZ2UtY29udGVudFwiOlxuICAgICAgcmV0dXJuIGdldFBhZ2VDb250ZW50KCk7XG4gICAgY2FzZSBcInNob3ctZXJyb3JcIjpcbiAgICAgIHJldHVybiBzaG93RXJyb3IocmVxdWVzdC5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICB9XG59KTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/chrome/dist/options.entry.js b/chrome/dist/options.entry.js index d5dd7ca..d44dc67 100644 --- a/chrome/dist/options.entry.js +++ b/chrome/dist/options.entry.js @@ -1 +1,490 @@ -/*! Copyright banther@pm.me */!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){"use strict";function r(){return new Promise((e,t)=>{try{chrome.storage.local.get(null,(function(n){var r=n.token||"",o=n.server||"";return""===r?t("no active session, please login first"):""===o?t("server url is not specified"):e({token:r,server:o})}))}catch(e){return t(e)}})}function o(){return new Promise((e,t)=>{try{chrome.tabs.query({active:!0,currentWindow:!0},n=>{!n||n.length;let r=n[0];null==r?t():e(r)})}catch(e){t(e)}})}function i(){chrome.tabs.create({url:"/view/options.html"})}function u(){return new Promise(e=>{var t="",n=chrome.runtime.getURL("/");if(n.startsWith("moz"))t="unfiled_____";else{if(!n.startsWith("chrome"))throw new Error("right now extension only support firefox and chrome");t="2"}chrome.bookmarks.getChildren(t,(function(n){var r=n.find(e=>null==e.url&&"Shiori"===e.title);if(r)return e(r);chrome.bookmarks.create({title:"Shiori",parentId:t},t=>e(t))}))})}function a(e){return new Promise(t=>{u().then(n=>{chrome.bookmarks.search({url:e},e=>{var r=e.findIndex(e=>e.parentId===n.id);return r>=0?t(e[r]):t()})})})}function c(e,t){return new Promise(n=>{u().then(r=>{chrome.bookmarks.search({url:e},o=>{-1===o.findIndex(e=>e.parentId===r.id)&&chrome.bookmarks.create({url:e,title:t,parentId:r.id},()=>{n()}),n()})})})}function s(e){return new Promise(t=>{u().then(n=>{chrome.bookmarks.search({url:e},e=>(e.forEach(e=>{e.parentId===n.id&&chrome.bookmarks.remove(e.id)}),t()))})})}function l(e,t){try{var n="posting_"+Math.random();chrome.notifications.create(n,{type:"basic",title:e,message:t,iconUrl:"/icons/icon.png"},(function(e){})),setTimeout((function(){chrome.notifications.clear(n,(function(e){}))}),5e3)}catch(e){alert(e.message)}}n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"e",(function(){return i})),n.d(t,"a",(function(){return a})),n.d(t,"g",(function(){return c})),n.d(t,"f",(function(){return s})),n.d(t,"d",(function(){return l}))},function(e,t,n){"use strict";n.r(t);var r=n(0),o=(e,t,n)=>new Promise((r,o)=>{var i=e=>{try{a(n.next(e))}catch(e){o(e)}},u=e=>{try{a(n.throw(e))}catch(e){o(e)}},a=e=>e.done?r(e.value):Promise.resolve(e.value).then(i,u);a((n=n.apply(e,t)).next())});var i=document.getElementById("error-message"),u=document.getElementById("txt-session"),a=document.getElementById("input-server"),c=document.getElementById("input-username"),s=document.getElementById("input-password"),l=(document.getElementById("input-remember"),document.getElementById("btn-login")),d=document.getElementById("loading-sign"),m={};function f(e){i.style.display="block",i.textContent=e}function h(){return o(this,null,(function*(){var e=a.value,t=c.value,n=s.value,r=yield function(e,t,n,r){return o(this,null,(function*(){if(""===e)throw new Error("Server must not empty");if(""===t)throw new Error("Username must not empty");if(""===n)throw new Error("Password must not empty");"boolean"!=typeof r&&(r=!1);var o="";try{"/"==(o=new URL(e)).pathname.slice(-1)?o.pathname=o.pathname+"api/auth/login":o.pathname=o.pathname+"/api/auth/login"}catch(t){throw new Error(e+" is not a valid url")}var i=yield fetch(o,{method:"post",body:JSON.stringify({username:t,password:n,remember_me:r}),headers:{"Content-Type":"application/json"}});if(!i.ok){var u=yield i.text();throw new Error(u)}return(yield i.json()).data.token}))}(e,t,n,!0);return e.endsWith("/")&&(e=e.slice(0,-1)),m.server=e,m.token=r,m.username=t,m.remember=!0,yield function(e){return o(this,null,(function*(){return chrome.storage.local.set(e)}))}(m),u.textContent="Logged in.",r.length>10&&(d.style.display="none"),Promise.resolve()}))}Object(r.c)().then(e=>{m=e,""===e.token?u.textContent="No active session":u.textContent="Logged in success by"+e.username,a.value=e.server,c.value=e.username,s.value=e.password}).catch(e=>f(e)),l.addEventListener("click",()=>{i.style.display="none",l.style.display="none",d.style.display="block",h().catch(e=>f(e)).finally(()=>(l.style.display="block",void(d.style.display="none")))})}]); \ No newline at end of file +/*! Copyright banther@pm.me */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./chrome/js/options.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./chrome/js/helper.js": +/*!*****************************!*\ + !*** ./chrome/js/helper.js ***! + \*****************************/ +/*! exports provided: getExtensionConfig, getCurrentTab, openOptionsPage, getShioriBookmarkFolder, findLocalBookmark, saveLocalBookmark, removeLocalBookmark, notify */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getExtensionConfig", function() { return getExtensionConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentTab", function() { return getCurrentTab; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openOptionsPage", function() { return openOptionsPage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getShioriBookmarkFolder", function() { return getShioriBookmarkFolder; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findLocalBookmark", function() { return findLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocalBookmark", function() { return saveLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocalBookmark", function() { return removeLocalBookmark; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "notify", function() { return notify; }); +function getExtensionConfig() { + return new Promise((resolve, reject) => { + try { + chrome.storage.local.get(null, function(items) { + return resolve(items); + }); + } catch (err) { + return reject(err); + } + }); +} +function getCurrentTab() { + return new Promise((resolve, reject) => { + try { + chrome.tabs.query({ + active: true, + currentWindow: true + }, (tabs) => { + if (!tabs || tabs.length < 1) { + } + let activeTab = tabs[0]; + console.log(activeTab); + if (activeTab == void 0) { + reject(); + } else { + resolve(activeTab); + } + }); + } catch (err) { + reject(err); + } + }); +} +function openOptionsPage() { + chrome.tabs.create({ + url: "/view/options.html" + }); +} +function getShioriBookmarkFolder() { + return new Promise((resolve) => { + var parentId = "", runtimeUrl = chrome.runtime.getURL("/"); + if (runtimeUrl.startsWith("moz")) { + parentId = "unfiled_____"; + } else if (runtimeUrl.startsWith("chrome")) { + parentId = "2"; + } else { + throw new Error("right now extension only support firefox and chrome"); + } + chrome.bookmarks.getChildren(parentId, function(children) { + var shiori = children.find((el) => el.url == null && el.title === "Shiori"); + if (!shiori) { + chrome.bookmarks.create({ + title: "Shiori", + parentId + }, (shiori2) => { + return resolve(shiori2); + }); + } else { + return resolve(shiori); + } + }); + }); +} +function findLocalBookmark(url) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + var idx = existingBookmarks.findIndex((book) => { + return book.parentId === shioriFolder.id; + }); + if (idx >= 0) { + return resolve(existingBookmarks[idx]); + } else { + return resolve(); + } + }); + }); + }); +} +function saveLocalBookmark(url, title) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + var idx = existingBookmarks.findIndex((book) => { + return book.parentId === shioriFolder.id; + }); + if (idx === -1) { + chrome.bookmarks.create({ + url, + title, + parentId: shioriFolder.id + }, () => { + resolve(); + }); + } + resolve(); + }); + }); + }); +} +function removeLocalBookmark(url) { + return new Promise((resolve) => { + getShioriBookmarkFolder().then((shioriFolder) => { + chrome.bookmarks.search({ + url + }, (existingBookmarks) => { + existingBookmarks.forEach((book) => { + if (book.parentId !== shioriFolder.id) + return; + chrome.bookmarks.remove(book.id); + }); + return resolve(); + }); + }); + }); +} +function notify(title, message) { + try { + var icon = "/icons/icon.png"; + var isClosed = false; + var notificationId = "posting_" + Math.random(); + chrome.notifications.create( + notificationId, + { + type: "basic", + title, + message, + iconUrl: icon + }, + function(nId) { + } + ); + setTimeout(function() { + if (!isClosed) + chrome.notifications.clear(notificationId, function(wasCleared) { + }); + }, 5e3); + } catch (e) { + alert(e.message); + } +} + + +/***/ }), + +/***/ "./chrome/js/iFetch.js": +/*!*****************************!*\ + !*** ./chrome/js/iFetch.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helper */ "./chrome/js/helper.js"); + +class iFetch { + get(route, data = {}) { + var that = this; + var headers = {}; + const params = new URLSearchParams(); + for (let key in data) { + params.append(key, data[key]); + } + const queryString = params.toString(); + var url = new URL(route, baseUrl); + url = url + `?${queryString}`; + return new Promise(function(resolve, reject) { + if (token != "") { + headers["Authorization"] = "Bearer " + token; + } + fetch(url, { + headers + }).then((response) => response.json()).then((data2) => resolve(data2)).catch((error) => { + reject(error); + }); + }); + } + post(route, data = {}, headers = { + "Content-Type": "application/json" + }) { + return new Promise(function(resolve, reject) { + Object(_helper__WEBPACK_IMPORTED_MODULE_0__["getExtensionConfig"])().then((configData) => { + const token2 = configData.token; + const baseUrl2 = configData.server; + var that = this; + var url = new URL(route, baseUrl2); + if (route.indexOf("http") >= 0) { + url = route; + } + if (token2 != "") { + headers["Authorization"] = "Bearer " + token2; + } + var body = ""; + if (headers["Content-Type"].indexOf("application/x-www-form-urlencoded") >= 0) { + let ret = ""; + for (const it in data) { + ret += encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&"; + } + body = ret.substring(0, ret.length - 1); + } else if (headers["Content-Type"] === "multipart/form-data;charset=UTF-8") { + body = data; + } else { + headers["Content-Type"] = "application/json"; + body = JSON.stringify(data); + } + fetch(url, { + method: "POST", + credentials: "same-origin", + headers, + body + }).then((response) => { + if (!response.ok) { + console.log("Network response was not ok 1"); + throw new Error("Network response was not ok"); + } + return response.json(); + }).then((data2) => { + console.log("Network response was ok => return json", data2); + return resolve(data2); + }).catch((error) => { + console.log("Network response was not ok 3", error); + Object(_helper__WEBPACK_IMPORTED_MODULE_0__["notify"])("\u901A\u77E5", "\u670D\u52A1\u5F02\u5E38\uFF0C\u65E0\u6CD5\u8BBF\u95EE\u670D\u52A1:" + baseUrl2); + return reject(error); + }); + }).catch((error) => { + console.log("Network response was not ok 12", error); + return reject(error); + }); + }); + } +} +/* harmony default export */ __webpack_exports__["default"] = (new iFetch()); + + +/***/ }), + +/***/ "./chrome/js/options.js": +/*!******************************!*\ + !*** ./chrome/js/options.js ***! + \******************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _helper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helper.js */ "./chrome/js/helper.js"); +/* harmony import */ var _iFetch_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iFetch.js */ "./chrome/js/iFetch.js"); +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + + +function saveExtensionConfig(cfg) { + chrome.storage.local.set(cfg); + return; +} +function logout(server, token) { + return __async(this, null, function* () { + return Promise.resolve(); + }); +} +function login(server, username, password, remember) { + return new Promise((resolve, reject) => { + if (server === "") { + throw new Error("Server must not empty"); + } + if (username === "") { + throw new Error("Username must not empty"); + } + if (password === "") { + throw new Error("Password must not empty"); + } + if (typeof remember !== "boolean") { + remember = false; + } + var loginURL = ""; + var loginPath = "api/auth/login"; + try { + loginURL = new URL(server); + if (loginURL.pathname.slice(-1) == "/") { + loginURL.pathname = loginURL.pathname + loginPath; + } else { + loginURL.pathname = loginURL.pathname + "/" + loginPath; + } + } catch (err) { + throw new Error(`${server} is not a valid url`); + } + _iFetch_js__WEBPACK_IMPORTED_MODULE_1__["default"].post(loginURL.href, { + username, + password, + remember_me: remember + }).then((resp) => { + if (resp.code != 0) { + return reject(resp.msg); + } else { + return resolve(resp.data.token); + } + }).catch((err) => { + return reject(err.toString()); + }); + }); +} +var errorMessage = document.getElementById("error-message"), txtSession = document.getElementById("txt-session"), inputServer = document.getElementById("input-server"), inputUsername = document.getElementById("input-username"), inputPassword = document.getElementById("input-password"), inputRemember = document.getElementById("input-remember"), btnLogin = document.getElementById("btn-login"), loadingSign = document.getElementById("loading-sign"), config = {}; +function showLoading() { + btnLogin.style.display = "none"; + loadingSign.style.display = "block"; +} +function hideLoading() { + btnLogin.style.display = "block"; + loadingSign.style.display = "none"; +} +function showError(msg) { + errorMessage.style.display = "block"; + errorMessage.textContent = msg; +} +function hideError() { + errorMessage.style.display = "none"; +} +Object(_helper_js__WEBPACK_IMPORTED_MODULE_0__["getExtensionConfig"])().then((cfg) => { + console.log("cfg", cfg); + config = cfg; + if (cfg.token === "") + txtSession.textContent = "No active session"; + else + txtSession.textContent = `Logged in success by` + cfg.username; + inputServer.value = cfg.server; + inputUsername.value = cfg.username; + inputPassword.value = cfg.password; +}).catch((err) => showError(err)); +function btnLoginClick() { + return __async(this, null, function* () { + var server = inputServer.value, username = inputUsername.value, password = inputPassword.value; + login(server, username, password, true).then((token) => { + if (server.endsWith("/")) { + server = server.slice(0, -1); + } + config.server = server; + config.token = token; + config.username = username; + config.remember = true; + saveExtensionConfig(config); + txtSession.textContent = `Logged in.`; + if (token.length > 10) { + loadingSign.style.display = "none"; + } + return Promise.resolve(); + }).catch((err) => { + txtSession.textContent = err.toString(); + }); + }); +} +btnLogin.addEventListener("click", () => { + hideError(); + showLoading(); + btnLoginClick().catch((err) => showError(err)).finally(() => hideLoading()); +}); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL2hlbHBlci5qcyIsIndlYnBhY2s6Ly8vLi9jaHJvbWUvanMvaUZldGNoLmpzIiwid2VicGFjazovLy8uL2Nocm9tZS9qcy9vcHRpb25zLmpzIl0sIm5hbWVzIjpbInNoaW9yaSIsImRhdGEiLCJ0b2tlbiIsImJhc2VVcmwiXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQVMscUJBQXFCO0FBQ25DLFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFFBQUk7QUFDRixhQUFPLFFBQVEsTUFBTSxJQUFJLE1BQU0sU0FBVSxPQUFPO0FBQzlDLGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFDdEIsQ0FBQztBQUFBLElBQ0gsU0FBUyxLQUFQO0FBQ0EsYUFBTyxPQUFPLEdBQUc7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRU8sU0FBUyxnQkFBZ0I7QUFDOUIsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsUUFBSTtBQUVGLGFBQU8sS0FBSyxNQUFNO0FBQUEsUUFDaEIsUUFBUTtBQUFBLFFBQ1IsZUFBZTtBQUFBLE1BQ2pCLEdBQUcsQ0FBQyxTQUFTO0FBQ1gsWUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFBQSxRQUU5QjtBQUVBLFlBQUksWUFBWSxLQUFLLENBQUM7QUFRdEIsZ0JBQVEsSUFBSSxTQUFTO0FBQ3JCLFlBQUksYUFBYSxRQUFXO0FBQzFCLGlCQUFPO0FBQUEsUUFDVCxPQUFPO0FBQ0wsa0JBQVEsU0FBUztBQUFBLFFBQ25CO0FBQUEsTUFFRixDQUFDO0FBQUEsSUFDSCxTQUFTLEtBQVA7QUFDQSxhQUFPLEdBQUc7QUFBQSxJQUNaO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFTyxTQUFTLGtCQUFrQjtBQUNoQyxTQUFPLEtBQUssT0FBTztBQUFBLElBQ2pCLEtBQUs7QUFBQSxFQUNQLENBQUM7QUFDSDtBQUVPLFNBQVMsMEJBQTBCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUs5QixRQUFJLFdBQVcsSUFDYixhQUFhLE9BQU8sUUFBUSxPQUFPLEdBQUc7QUFFeEMsUUFBSSxXQUFXLFdBQVcsS0FBSyxHQUFHO0FBQ2hDLGlCQUFXO0FBQUEsSUFDYixXQUFXLFdBQVcsV0FBVyxRQUFRLEdBQUc7QUFDMUMsaUJBQVc7QUFBQSxJQUNiLE9BQU87QUFDTCxZQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxJQUN2RTtBQUVBLFdBQU8sVUFBVSxZQUFZLFVBQVUsU0FBVSxVQUFVO0FBQ3pELFVBQUksU0FBUyxTQUFTLEtBQUssUUFBTSxHQUFHLE9BQU8sUUFBUSxHQUFHLFVBQVUsUUFBUTtBQUN4RSxVQUFJLENBQUMsUUFBUTtBQUNYLGVBQU8sVUFBVSxPQUFPO0FBQUEsVUFDdEIsT0FBTztBQUFBLFVBQ1A7QUFBQSxRQUNGLEdBQUcsQ0FBQUEsWUFBVTtBQUNYLGlCQUFPLFFBQVFBLE9BQU07QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBTyxRQUFRLE1BQU07QUFBQSxNQUN2QjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBRU8sU0FBUyxrQkFBa0IsS0FBSztBQUNyQyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsNEJBQXdCLEVBQUUsS0FBSyxrQkFBZ0I7QUFDN0MsYUFBTyxVQUFVLE9BQU87QUFBQSxRQUN0QjtBQUFBLE1BQ0YsR0FBRyx1QkFBcUI7QUFDdEIsWUFBSSxNQUFNLGtCQUFrQixVQUFVLFVBQVE7QUFDNUMsaUJBQU8sS0FBSyxhQUFhLGFBQWE7QUFBQSxRQUN4QyxDQUFDO0FBQ0QsWUFBSSxPQUFPLEdBQUc7QUFDWixpQkFBTyxRQUFRLGtCQUFrQixHQUFHLENBQUM7QUFBQSxRQUN2QyxPQUFPO0FBQ0wsaUJBQU8sUUFBUTtBQUFBLFFBQ2pCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFFSCxDQUFDO0FBQ0g7QUFFTyxTQUFTLGtCQUFrQixLQUFLLE9BQU87QUFDNUMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLDRCQUF3QixFQUFFLEtBQUssa0JBQWdCO0FBQzdDLGFBQU8sVUFBVSxPQUFPO0FBQUEsUUFDdEI7QUFBQSxNQUNGLEdBQUcsdUJBQXFCO0FBQ3RCLFlBQUksTUFBTSxrQkFBa0IsVUFBVSxVQUFRO0FBQzVDLGlCQUFPLEtBQUssYUFBYSxhQUFhO0FBQUEsUUFDeEMsQ0FBQztBQUVELFlBQUksUUFBUSxJQUFJO0FBQ2QsaUJBQU8sVUFBVSxPQUFPO0FBQUEsWUFDdEI7QUFBQSxZQUNBO0FBQUEsWUFDQSxVQUFVLGFBQWE7QUFBQSxVQUN6QixHQUFHLE1BQU07QUFDUCxvQkFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0g7QUFDQSxnQkFBUTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBRU8sU0FBUyxvQkFBb0IsS0FBSztBQUN2QyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsNEJBQXdCLEVBQUUsS0FBSyxrQkFBZ0I7QUFDN0MsYUFBTyxVQUFVLE9BQU87QUFBQSxRQUN0QjtBQUFBLE1BQ0YsR0FBRyx1QkFBcUI7QUFDdEIsMEJBQWtCLFFBQVEsVUFBUTtBQUNoQyxjQUFJLEtBQUssYUFBYSxhQUFhO0FBQUk7QUFDdkMsaUJBQU8sVUFBVSxPQUFPLEtBQUssRUFBRTtBQUFBLFFBQ2pDLENBQUM7QUFDRCxlQUFPLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFFTyxTQUFTLE9BQU8sT0FBTyxTQUFTO0FBQ3JDLE1BQUk7QUFDRixRQUFJLE9BQU87QUFDWCxRQUFJLFdBQVc7QUFDZixRQUFJLGlCQUFpQixhQUFhLEtBQUssT0FBTztBQUU5QyxXQUFPLGNBQWM7QUFBQSxNQUNuQjtBQUFBLE1BQWdCO0FBQUEsUUFDaEIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFTO0FBQUEsTUFDWDtBQUFBLE1BQ0UsU0FBVSxLQUFLO0FBQUEsTUFBRTtBQUFBLElBQ25CO0FBQ0EsZUFBVyxXQUFZO0FBQ3JCLFVBQUksQ0FBQztBQUNILGVBQU8sY0FBYyxNQUFNLGdCQUFnQixTQUFVLFlBQVk7QUFBQSxRQUFFLENBQUM7QUFBQSxJQUN4RSxHQUFHLEdBQUk7QUFBQSxFQUNULFNBQVMsR0FBUDtBQUNBLFVBQU0sRUFBRSxPQUFPO0FBQUEsRUFDakI7QUFDRjs7Ozs7Ozs7Ozs7OztBQ3hLQTtBQUFBO0FBRWtCO0FBRWxCLE1BQU0sT0FBTztBQUFBLEVBQ1gsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHO0FBQ3BCLFFBQUksT0FBTztBQUNYLFFBQUksVUFBVSxDQUFDO0FBQ2YsVUFBTSxTQUFTLElBQUksZ0JBQWdCO0FBRW5DLGFBQVMsT0FBTyxNQUFNO0FBQ3BCLGFBQU8sT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDOUI7QUFDQSxVQUFNLGNBQWMsT0FBTyxTQUFTO0FBRXBDLFFBQUksTUFBTSxJQUFJLElBQUksT0FBTyxPQUFPO0FBQ2hDLFVBQU0sTUFBTSxJQUFJO0FBRWhCLFdBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzVDLFVBQUksU0FBUyxJQUFJO0FBQ2YsZ0JBQVEsZUFBZSxJQUFJLFlBQVk7QUFBQSxNQUN6QztBQUVBLFlBQU0sS0FBSztBQUFBLFFBQ1Q7QUFBQSxNQUNGLENBQUMsRUFDRSxLQUFLLGNBQVksU0FBUyxLQUFLLENBQUMsRUFDaEMsS0FBSyxDQUFBQyxVQUFRLFFBQVFBLEtBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQzVDLGVBQU8sS0FBSztBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0g7QUFBQSxFQUVBLEtBQUssT0FBTyxPQUFPLENBQUMsR0FBRyxVQUFVO0FBQUEsSUFDL0IsZ0JBQWdCO0FBQUEsRUFDbEIsR0FBRztBQUNELFdBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzVDLHdFQUFrQixDQUFDLEVBQUUsS0FBSyxnQkFBYztBQUN0QyxjQUFNQyxTQUFRLFdBQVc7QUFDekIsY0FBTUMsV0FBVSxXQUFXO0FBRTNCLFlBQUksT0FBTztBQUNYLFlBQUksTUFBTSxJQUFJLElBQUksT0FBT0EsUUFBTztBQUVoQyxZQUFJLE1BQU0sUUFBUSxNQUFNLEtBQUssR0FBRztBQUM5QixnQkFBTTtBQUFBLFFBQ1I7QUFHQSxZQUFJRCxVQUFTLElBQUk7QUFDZixrQkFBUSxlQUFlLElBQUksWUFBWUE7QUFBQSxRQUN6QztBQUdBLFlBQUksT0FBTztBQUVYLFlBQUksUUFBUSxjQUFjLEVBQUUsUUFBUSxtQ0FBbUMsS0FBSyxHQUFHO0FBQzdFLGNBQUksTUFBTTtBQUNWLHFCQUFXLE1BQU0sTUFBTTtBQUNyQixtQkFDRSxtQkFBbUIsRUFBRSxJQUFJLE1BQU0sbUJBQW1CLEtBQUssRUFBRSxDQUFDLElBQUk7QUFBQSxVQUNsRTtBQUNBLGlCQUFPLElBQUksVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsUUFDeEMsV0FBVyxRQUFRLGNBQWMsTUFBTSxxQ0FBcUM7QUFDMUUsaUJBQU87QUFBQSxRQUNULE9BQU87QUFDTCxrQkFBUSxjQUFjLElBQUk7QUFDMUIsaUJBQU8sS0FBSyxVQUFVLElBQUk7QUFBQSxRQUM1QjtBQUVBLGNBQU0sS0FBSztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsYUFBYTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDLEVBQ0UsS0FBSyxDQUFDLGFBQWE7QUFDbEIsY0FBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixvQkFBUSxJQUFJLCtCQUErQjtBQUMzQyxrQkFBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsVUFDL0M7QUFDQSxpQkFBTyxTQUFTLEtBQUs7QUFBQSxRQUN2QixDQUFDLEVBQUUsS0FBSyxDQUFBRCxVQUFRO0FBQ2Qsa0JBQVEsSUFBSSwwQ0FBMENBLEtBQUk7QUFDMUQsaUJBQU8sUUFBUUEsS0FBSTtBQUFBLFFBQ3JCLENBQUMsRUFDQSxNQUFNLENBQUMsVUFBVTtBQUNoQixrQkFBUSxJQUFJLGlDQUFpQyxLQUFLO0FBQ2xELGdFQUFNLENBQUMsZ0JBQU0sd0VBQWlCRSxRQUFPO0FBQ3JDLGlCQUFPLE9BQU8sS0FBSztBQUFBLFFBQ3JCLENBQUM7QUFBQSxNQUlMLENBQUMsRUFBRSxNQUFNLFdBQVM7QUFDaEIsZ0JBQVEsSUFBSSxrQ0FBa0MsS0FBSztBQUNuRCxlQUFPLE9BQU8sS0FBSztBQUFBLE1BQ3JCLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFFZSxtRUFBSSxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RHc0I7QUFDOUI7QUFjbkIsU0FBUyxvQkFBb0IsS0FBSztBQUNoQyxTQUFPLFFBQVEsTUFBTSxJQUFJLEdBQUc7QUFDNUI7QUFDRjtBQUVBLFNBQWUsT0FBTyxRQUFRLE9BQU87QUFBQTtBQUNuQyxXQUFPLFFBQVEsUUFBUTtBQUFBLEVBQ3pCO0FBQUE7QUFFQSxTQUFTLE1BQU0sUUFBUSxVQUFVLFVBQVUsVUFBVTtBQUNuRCxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUV0QyxRQUFJLFdBQVcsSUFBSTtBQUNqQixZQUFNLElBQUksTUFBTSx1QkFBdUI7QUFBQSxJQUN6QztBQUVBLFFBQUksYUFBYSxJQUFJO0FBQ25CLFlBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLElBQzNDO0FBRUEsUUFBSSxhQUFhLElBQUk7QUFDbkIsWUFBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsSUFDM0M7QUFFQSxRQUFJLE9BQU8sYUFBYSxXQUFXO0FBQ2pDLGlCQUFXO0FBQUEsSUFDYjtBQUdBLFFBQUksV0FBVztBQUNmLFFBQUksWUFBWTtBQUNoQixRQUFJO0FBQ0YsaUJBQVcsSUFBSSxJQUFJLE1BQU07QUFDekIsVUFBSSxTQUFTLFNBQVMsTUFBTSxFQUFFLEtBQUssS0FBSztBQUN0QyxpQkFBUyxXQUFXLFNBQVMsV0FBVztBQUFBLE1BQzFDLE9BQU87QUFDTCxpQkFBUyxXQUFXLFNBQVMsV0FBVyxNQUFNO0FBQUEsTUFDaEQ7QUFBQSxJQUNGLFNBQVMsS0FBUDtBQUNBLFlBQU0sSUFBSSxNQUFNLEdBQUcsMkJBQTJCO0FBQUEsSUFDaEQ7QUFFQSxzREFBTSxDQUFDLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDekI7QUFBQSxNQUNBO0FBQUEsTUFDQSxhQUFhO0FBQUEsSUFDZixDQUFDLEVBQUUsS0FBSyxVQUFRO0FBQ2QsVUFBSSxLQUFLLFFBQVEsR0FBRztBQUNsQixlQUFPLE9BQU8sS0FBSyxHQUFHO0FBQUEsTUFDeEIsT0FBTztBQUNMLGVBQU8sUUFBUSxLQUFLLEtBQUssS0FBSztBQUFBLE1BQ2hDO0FBQUEsSUFDRixDQUFDLEVBQUUsTUFBTSxTQUFPO0FBQ2QsYUFBTyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDOUIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBR0EsSUFBSSxlQUFlLFNBQVMsZUFBZSxlQUFlLEdBQ3hELGFBQWEsU0FBUyxlQUFlLGFBQWEsR0FDbEQsY0FBYyxTQUFTLGVBQWUsY0FBYyxHQUNwRCxnQkFBZ0IsU0FBUyxlQUFlLGdCQUFnQixHQUN4RCxnQkFBZ0IsU0FBUyxlQUFlLGdCQUFnQixHQUN4RCxnQkFBZ0IsU0FBUyxlQUFlLGdCQUFnQixHQUN4RCxXQUFXLFNBQVMsZUFBZSxXQUFXLEdBQzlDLGNBQWMsU0FBUyxlQUFlLGNBQWMsR0FDcEQsU0FBUyxDQUFDO0FBRVosU0FBUyxjQUFjO0FBQ3JCLFdBQVMsTUFBTSxVQUFVO0FBQ3pCLGNBQVksTUFBTSxVQUFVO0FBQzlCO0FBRUEsU0FBUyxjQUFjO0FBQ3JCLFdBQVMsTUFBTSxVQUFVO0FBQ3pCLGNBQVksTUFBTSxVQUFVO0FBQzlCO0FBRUEsU0FBUyxVQUFVLEtBQUs7QUFDdEIsZUFBYSxNQUFNLFVBQVU7QUFDN0IsZUFBYSxjQUFjO0FBQzdCO0FBRUEsU0FBUyxZQUFZO0FBQ25CLGVBQWEsTUFBTSxVQUFVO0FBQy9CO0FBRUEscUVBQWtCLENBQUMsRUFDaEIsS0FBSyxTQUFPO0FBQ1gsVUFBUSxJQUFJLE9BQU8sR0FBRztBQUN0QixXQUFTO0FBRVQsTUFBSSxJQUFJLFVBQVU7QUFBSSxlQUFXLGNBQWM7QUFBQTtBQUMxQyxlQUFXLGNBQWMseUJBQXlCLElBQUk7QUFFM0QsY0FBWSxRQUFRLElBQUk7QUFDeEIsZ0JBQWMsUUFBUSxJQUFJO0FBQzFCLGdCQUFjLFFBQVEsSUFBSTtBQUU1QixDQUFDLEVBQ0EsTUFBTSxTQUFPLFVBQVUsR0FBRyxDQUFDO0FBRzlCLFNBQWUsZ0JBQWdCO0FBQUE7QUFFN0IsUUFBSSxTQUFTLFlBQVksT0FDdkIsV0FBVyxjQUFjLE9BQ3pCLFdBQVcsY0FBYztBQUkzQixVQUFNLFFBQVEsVUFBVSxVQUFVLElBQUksRUFBRSxLQUFLLFdBQVM7QUFFcEQsVUFBSSxPQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLGlCQUFTLE9BQU8sTUFBTSxHQUFHLEVBQUU7QUFBQSxNQUM3QjtBQUVBLGFBQU8sU0FBUztBQUNoQixhQUFPLFFBQVE7QUFDZixhQUFPLFdBQVc7QUFFbEIsYUFBTyxXQUFXO0FBQ2xCLDBCQUFvQixNQUFNO0FBQzFCLGlCQUFXLGNBQWM7QUFFekIsVUFBSSxNQUFNLFNBQVMsSUFBSTtBQUNyQixvQkFBWSxNQUFNLFVBQVU7QUFBQSxNQUM5QjtBQUNBLGFBQU8sUUFBUSxRQUFRO0FBQUEsSUFDekIsQ0FBQyxFQUFFLE1BQU0sU0FBTztBQUNkLGlCQUFXLGNBQWMsSUFBSSxTQUFTO0FBQUEsSUFDeEMsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUVBLFNBQVMsaUJBQWlCLFNBQVMsTUFBTTtBQUN2QyxZQUFVO0FBQ1YsY0FBWTtBQUVaLGdCQUFjLEVBQ1gsTUFBTSxTQUFPLFVBQVUsR0FBRyxDQUFDLEVBQzNCLFFBQVEsTUFBTSxZQUFZLENBQUM7QUFDaEMsQ0FBQyIsImZpbGUiOiJvcHRpb25zLmVudHJ5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9jaHJvbWUvanMvb3B0aW9ucy5qc1wiKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWcoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLmdldChudWxsLCBmdW5jdGlvbiAoaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoaXRlbXMpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRUYWIoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBhY3RpdmUgdGFicyBpbiBjdXJyZW50IHdpbmRvdyAgXG4gICAgICBjaHJvbWUudGFicy5xdWVyeSh7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY3VycmVudFdpbmRvdzogdHJ1ZVxuICAgICAgfSwgKHRhYnMpID0+IHtcbiAgICAgICAgaWYgKCF0YWJzIHx8IHRhYnMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk5vIHRhYiBhdmFpbGFibGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgcHJvdG9jb2xcbiAgICAgICAgbGV0IGFjdGl2ZVRhYiA9IHRhYnNbMF07XG4gICAgICAgIC8vbGV0IHVybCA9IG5ldyBVUkwoYWN0aXZlVGFiLnVybCk7XG4gICAgICAgIC8vbGV0IHN1cHBvcnRlZFByb3RvY29scyA9IFtcImh0dHBzOlwiLCBcImh0dHA6XCIsIFwiZnRwOlwiLCBcImZpbGU6XCJdO1xuXG4gICAgICAgIC8vaWYgKCFzdXBwb3J0ZWRQcm90b2NvbHMuaW5jbHVkZXModXJsLnByb3RvY29sKSkge1xuICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHByb3RvY29sIFwiJHt1cmwucHJvdG9jb2x9XCJgKTtcbiAgICAgICAgLy99XG5cbiAgICAgICAgY29uc29sZS5sb2coYWN0aXZlVGFiKVxuICAgICAgICBpZiAoYWN0aXZlVGFiID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShhY3RpdmVUYWIpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5PcHRpb25zUGFnZSgpIHtcbiAgY2hyb21lLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL3ZpZXcvb3B0aW9ucy5odG1sXCJcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGlvcmlCb29rbWFya0ZvbGRlcigpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgLy8gVE9ETzpcbiAgICAvLyBJJ20gbm90IHN1cmUgaXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5LCBidXQgaXQncyB0aGUgc2ltcGxlc3QuXG4gICAgLy8gV2Ugd2FudCB0byBwdXQgU2hpb3JpIGZvbGRlciBpbiBgT3RoZXIgYm9va21hcmtzYCwgd2hpY2ggaWQgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBjaHJvbWUuXG4gICAgLy8gSW4gRmlyZWZveCwgaXRzIGlkIGlzIGB1bmZpbGVkX19fX19gIHdoaWxlIGluIENocm9tZSB0aGUgaWQgaXMgYDJgLlxuICAgIHZhciBwYXJlbnRJZCA9IFwiXCIsXG4gICAgICBydW50aW1lVXJsID0gY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKFwiL1wiKTtcblxuICAgIGlmIChydW50aW1lVXJsLnN0YXJ0c1dpdGgoXCJtb3pcIikpIHtcbiAgICAgIHBhcmVudElkID0gXCJ1bmZpbGVkX19fX19cIjtcbiAgICB9IGVsc2UgaWYgKHJ1bnRpbWVVcmwuc3RhcnRzV2l0aChcImNocm9tZVwiKSkge1xuICAgICAgcGFyZW50SWQgPSBcIjJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmlnaHQgbm93IGV4dGVuc2lvbiBvbmx5IHN1cHBvcnQgZmlyZWZveCBhbmQgY2hyb21lXCIpXG4gICAgfVxuICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgZm9sZGVyIGFscmVhZHkgaGFzIFNoaW9yaSBmb2xkZXJcbiAgICBjaHJvbWUuYm9va21hcmtzLmdldENoaWxkcmVuKHBhcmVudElkLCBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgIHZhciBzaGlvcmkgPSBjaGlsZHJlbi5maW5kKGVsID0+IGVsLnVybCA9PSBudWxsICYmIGVsLnRpdGxlID09PSBcIlNoaW9yaVwiKTtcbiAgICAgIGlmICghc2hpb3JpKSB7XG4gICAgICAgIGNocm9tZS5ib29rbWFya3MuY3JlYXRlKHtcbiAgICAgICAgICB0aXRsZTogXCJTaGlvcmlcIixcbiAgICAgICAgICBwYXJlbnRJZDogcGFyZW50SWRcbiAgICAgICAgfSwgc2hpb3JpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzaGlvcmkpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoc2hpb3JpKVxuICAgICAgfVxuICAgIH0pO1xuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZExvY2FsQm9va21hcmsodXJsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGdldFNoaW9yaUJvb2ttYXJrRm9sZGVyKCkudGhlbihzaGlvcmlGb2xkZXIgPT4ge1xuICAgICAgY2hyb21lLmJvb2ttYXJrcy5zZWFyY2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgIH0sIGV4aXN0aW5nQm9va21hcmtzID0+IHtcbiAgICAgICAgdmFyIGlkeCA9IGV4aXN0aW5nQm9va21hcmtzLmZpbmRJbmRleChib29rID0+IHtcbiAgICAgICAgICByZXR1cm4gYm9vay5wYXJlbnRJZCA9PT0gc2hpb3JpRm9sZGVyLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoZXhpc3RpbmdCb29rbWFya3NbaWR4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUxvY2FsQm9va21hcmsodXJsLCB0aXRsZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBnZXRTaGlvcmlCb29rbWFya0ZvbGRlcigpLnRoZW4oc2hpb3JpRm9sZGVyID0+IHtcbiAgICAgIGNocm9tZS5ib29rbWFya3Muc2VhcmNoKHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9LCBleGlzdGluZ0Jvb2ttYXJrcyA9PiB7XG4gICAgICAgIHZhciBpZHggPSBleGlzdGluZ0Jvb2ttYXJrcy5maW5kSW5kZXgoYm9vayA9PiB7XG4gICAgICAgICAgcmV0dXJuIGJvb2sucGFyZW50SWQgPT09IHNoaW9yaUZvbGRlci5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICBjaHJvbWUuYm9va21hcmtzLmNyZWF0ZSh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgIHBhcmVudElkOiBzaGlvcmlGb2xkZXIuaWQsXG4gICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgfSlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMb2NhbEJvb2ttYXJrKHVybCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBnZXRTaGlvcmlCb29rbWFya0ZvbGRlcigpLnRoZW4oc2hpb3JpRm9sZGVyID0+IHtcbiAgICAgIGNocm9tZS5ib29rbWFya3Muc2VhcmNoKHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9LCBleGlzdGluZ0Jvb2ttYXJrcyA9PiB7XG4gICAgICAgIGV4aXN0aW5nQm9va21hcmtzLmZvckVhY2goYm9vayA9PiB7XG4gICAgICAgICAgaWYgKGJvb2sucGFyZW50SWQgIT09IHNoaW9yaUZvbGRlci5pZCkgcmV0dXJuO1xuICAgICAgICAgIGNocm9tZS5ib29rbWFya3MucmVtb3ZlKGJvb2suaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgbWVzc2FnZSkge1xuICB0cnkge1xuICAgIHZhciBpY29uID0gXCIvaWNvbnMvaWNvbi5wbmdcIjtcbiAgICB2YXIgaXNDbG9zZWQgPSBmYWxzZTtcbiAgICB2YXIgbm90aWZpY2F0aW9uSWQgPSBcInBvc3RpbmdfXCIgKyBNYXRoLnJhbmRvbSgpO1xuXG4gICAgY2hyb21lLm5vdGlmaWNhdGlvbnMuY3JlYXRlKFxuICAgICAgbm90aWZpY2F0aW9uSWQsIHtcbiAgICAgIHR5cGU6IFwiYmFzaWNcIixcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBpY29uVXJsOiBpY29uLFxuICAgIH0sXG4gICAgICBmdW5jdGlvbiAobklkKSB7IH1cbiAgICApO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFpc0Nsb3NlZClcbiAgICAgICAgY2hyb21lLm5vdGlmaWNhdGlvbnMuY2xlYXIobm90aWZpY2F0aW9uSWQsIGZ1bmN0aW9uICh3YXNDbGVhcmVkKSB7IH0pO1xuICAgIH0sIDUwMDApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYWxlcnQoZS5tZXNzYWdlKTtcbiAgfVxufSIsImltcG9ydCB7XG4gIGdldEV4dGVuc2lvbkNvbmZpZywgbm90aWZ5XG59IGZyb20gXCIuL2hlbHBlclwiO1xuXG5jbGFzcyBpRmV0Y2gge1xuICBnZXQocm91dGUsIGRhdGEgPSB7fSkge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICB2YXIgaGVhZGVycyA9IHt9XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIC8vIOmBjeWOhuWvueixoSzmt7vliqDmr4/kuKrplK7lgLzlr7lcbiAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXksIGRhdGFba2V5XSk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGFyYW1zLnRvU3RyaW5nKCk7IC8vICdhPTEmYj0yJ1xuXG4gICAgdmFyIHVybCA9IG5ldyBVUkwocm91dGUsIGJhc2VVcmwpO1xuICAgIHVybCA9IHVybCArIGA/JHtxdWVyeVN0cmluZ31gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGlmICh0b2tlbiAhPSAnJykge1xuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyB0b2tlblxuICAgICAgfVxuXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLnRoZW4oZGF0YSA9PiByZXNvbHZlKGRhdGEpKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdChyb3V0ZSwgZGF0YSA9IHt9LCBoZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICB9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGdldEV4dGVuc2lvbkNvbmZpZygpLnRoZW4oY29uZmlnRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gY29uZmlnRGF0YS50b2tlblxuICAgICAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnRGF0YS5zZXJ2ZXJcblxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHJvdXRlLCBiYXNlVXJsKTtcblxuICAgICAgICBpZiAocm91dGUuaW5kZXhPZihcImh0dHBcIikgPj0gMCkge1xuICAgICAgICAgIHVybCA9IHJvdXRlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB0b2tlblxuICAgICAgICBpZiAodG9rZW4gIT0gJycpIHtcbiAgICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyB0b2tlblxuICAgICAgICB9XG5cbiAgICAgICAgLy8g5aSE55CGIGJvZHlcbiAgICAgICAgdmFyIGJvZHkgPSBcIlwiO1xuICAgICAgICAvLyDmiorkuIDkuKrlj4LmlbDlr7nosaHmoLzlvI/ljJbkuLrkuIDkuKrlrZfnrKbkuLJcbiAgICAgICAgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID49IDApIHtcbiAgICAgICAgICBsZXQgcmV0ID0gJydcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0IGluIGRhdGEpIHtcbiAgICAgICAgICAgIHJldCArPVxuICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoaXQpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFbaXRdKSArICcmJ1xuICAgICAgICAgIH1cbiAgICAgICAgICBib2R5ID0gcmV0LnN1YnN0cmluZygwLCByZXQubGVuZ3RoIC0gMSlcbiAgICAgICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGE7Y2hhcnNldD1VVEYtOCcpIHtcbiAgICAgICAgICBib2R5ID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgIH1cblxuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2sgMVwiKTtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBvayA9PiByZXR1cm4ganNvblwiLCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2sgM1wiLCBlcnJvcik7XG4gICAgICAgICAgICBub3RpZnkoXCLpgJrnn6VcIiwgXCLmnI3liqHlvILluLjvvIzml6Dms5Xorr/pl67mnI3liqE6XCIgKyBiYXNlVXJsKVxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9KTtcblxuXG5cbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2sgMTJcIiwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKVxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgaUZldGNoKCkiLCJpbXBvcnQgeyBnZXRFeHRlbnNpb25Db25maWcgfSBmcm9tIFwiLi9oZWxwZXIuanNcIjtcbmltcG9ydCBpZmV0Y2ggZnJvbSBcIi4vaUZldGNoLmpzXCJcblxuLy8gYXN5bmMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnKCkge1xuLy8gICB2YXIgaXRlbXMgPSBhd2FpdCBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoKTtcblxuLy8gICByZXR1cm4ge1xuLy8gICAgIHNlcnZlcjogaXRlbXMuc2VydmVyIHx8IFwiXCIsXG4vLyAgICAgdG9rZW46IGl0ZW1zLnRva2VuIHx8IFwiXCIsXG4vLyAgICAgdXNlcm5hbWU6IGl0ZW1zLnVzZXJuYW1lIHx8IFwiXCIsXG4vLyAgICAgcGFzc3dvcmQ6IGl0ZW1zLnBhc3N3b3JkIHx8IFwiXCIsXG4vLyAgICAgcmVtZW1iZXI6IGl0ZW1zLnJlbWVtYmVyIHx8IGZhbHNlLFxuLy8gICB9O1xuLy8gfVxuXG5mdW5jdGlvbiBzYXZlRXh0ZW5zaW9uQ29uZmlnKGNmZykge1xuICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoY2ZnKVxuICByZXR1cm5cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nb3V0KHNlcnZlciwgdG9rZW4pIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5mdW5jdGlvbiBsb2dpbihzZXJ2ZXIsIHVzZXJuYW1lLCBwYXNzd29yZCwgcmVtZW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBWYWxpZGF0ZSBpbnB1dFxuICAgIGlmIChzZXJ2ZXIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlcnZlciBtdXN0IG5vdCBlbXB0eVwiKTtcbiAgICB9XG5cbiAgICBpZiAodXNlcm5hbWUgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVzZXJuYW1lIG11c3Qgbm90IGVtcHR5XCIpO1xuICAgIH1cblxuICAgIGlmIChwYXNzd29yZCA9PT0gXCJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFzc3dvcmQgbXVzdCBub3QgZW1wdHlcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZW1lbWJlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZW1lbWJlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBsb2dpbiBVUkxcbiAgICB2YXIgbG9naW5VUkwgPSBcIlwiO1xuICAgIHZhciBsb2dpblBhdGggPSBcImFwaS9hdXRoL2xvZ2luXCI7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2luVVJMID0gbmV3IFVSTChzZXJ2ZXIpO1xuICAgICAgaWYgKGxvZ2luVVJMLnBhdGhuYW1lLnNsaWNlKC0xKSA9PSBcIi9cIikge1xuICAgICAgICBsb2dpblVSTC5wYXRobmFtZSA9IGxvZ2luVVJMLnBhdGhuYW1lICsgbG9naW5QYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9naW5VUkwucGF0aG5hbWUgPSBsb2dpblVSTC5wYXRobmFtZSArIFwiL1wiICsgbG9naW5QYXRoO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3NlcnZlcn0gaXMgbm90IGEgdmFsaWQgdXJsYCk7XG4gICAgfVxuXG4gICAgaWZldGNoLnBvc3QobG9naW5VUkwuaHJlZiwge1xuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgcmVtZW1iZXJfbWU6IHJlbWVtYmVyLFxuICAgIH0pLnRoZW4ocmVzcCA9PiB7XG4gICAgICBpZiAocmVzcC5jb2RlICE9IDApIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChyZXNwLm1zZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHJlc3AuZGF0YS50b2tlbik7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyLnRvU3RyaW5nKCkpXG4gICAgfSlcbiAgfSk7XG59XG5cbi8vIERlZmluZSBmdW5jdGlvbiBmb3IgVUkgaGFuZGxlclxudmFyIGVycm9yTWVzc2FnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXJyb3ItbWVzc2FnZVwiKSxcbiAgdHh0U2Vzc2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidHh0LXNlc3Npb25cIiksXG4gIGlucHV0U2VydmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dC1zZXJ2ZXJcIiksXG4gIGlucHV0VXNlcm5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlucHV0LXVzZXJuYW1lXCIpLFxuICBpbnB1dFBhc3N3b3JkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbnB1dC1wYXNzd29yZFwiKSxcbiAgaW5wdXRSZW1lbWJlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5wdXQtcmVtZW1iZXJcIiksXG4gIGJ0bkxvZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG4tbG9naW5cIiksXG4gIGxvYWRpbmdTaWduID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb2FkaW5nLXNpZ25cIiksXG4gIGNvbmZpZyA9IHt9O1xuXG5mdW5jdGlvbiBzaG93TG9hZGluZygpIHtcbiAgYnRuTG9naW4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBsb2FkaW5nU2lnbi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xufVxuXG5mdW5jdGlvbiBoaWRlTG9hZGluZygpIHtcbiAgYnRuTG9naW4uc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgbG9hZGluZ1NpZ24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xufVxuXG5mdW5jdGlvbiBzaG93RXJyb3IobXNnKSB7XG4gIGVycm9yTWVzc2FnZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICBlcnJvck1lc3NhZ2UudGV4dENvbnRlbnQgPSBtc2c7XG59XG5cbmZ1bmN0aW9uIGhpZGVFcnJvcigpIHtcbiAgZXJyb3JNZXNzYWdlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbn1cblxuZ2V0RXh0ZW5zaW9uQ29uZmlnKClcbiAgLnRoZW4oY2ZnID0+IHtcbiAgICBjb25zb2xlLmxvZyhcImNmZ1wiLCBjZmcpO1xuICAgIGNvbmZpZyA9IGNmZztcblxuICAgIGlmIChjZmcudG9rZW4gPT09IFwiXCIpIHR4dFNlc3Npb24udGV4dENvbnRlbnQgPSBcIk5vIGFjdGl2ZSBzZXNzaW9uXCI7XG4gICAgZWxzZSB0eHRTZXNzaW9uLnRleHRDb250ZW50ID0gYExvZ2dlZCBpbiBzdWNjZXNzIGJ5YCArIGNmZy51c2VybmFtZTtcblxuICAgIGlucHV0U2VydmVyLnZhbHVlID0gY2ZnLnNlcnZlcjtcbiAgICBpbnB1dFVzZXJuYW1lLnZhbHVlID0gY2ZnLnVzZXJuYW1lO1xuICAgIGlucHV0UGFzc3dvcmQudmFsdWUgPSBjZmcucGFzc3dvcmQ7XG4gICAgLy8gaW5wdXRSZW1lbWJlci5jaGVja2VkID0gY2ZnLnJlbWVtYmVyO1xuICB9KVxuICAuY2F0Y2goZXJyID0+IHNob3dFcnJvcihlcnIpKTtcblxuLy8gUmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJcbmFzeW5jIGZ1bmN0aW9uIGJ0bkxvZ2luQ2xpY2soKSB7XG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICB2YXIgc2VydmVyID0gaW5wdXRTZXJ2ZXIudmFsdWUsXG4gICAgdXNlcm5hbWUgPSBpbnB1dFVzZXJuYW1lLnZhbHVlLFxuICAgIHBhc3N3b3JkID0gaW5wdXRQYXNzd29yZC52YWx1ZTtcbiAgLy8gcmVtZW1iZXIgPSBpbnB1dFJlbWVtYmVyLmNoZWNrZWQ7XG5cbiAgLy8gTG9naW4gdXNpbmcgaW5wdXQgdmFsdWVcbiAgbG9naW4oc2VydmVyLCB1c2VybmFtZSwgcGFzc3dvcmQsIHRydWUpLnRoZW4odG9rZW4gPT4ge1xuICAgIC8vIFNhdmUgaW5wdXQgdmFsdWUgYW5kIHRva2VuIHRvIGNvbmZpZ1xuICAgIGlmIChzZXJ2ZXIuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBzZXJ2ZXIgPSBzZXJ2ZXIuc2xpY2UoMCwgLTEpO1xuICAgIH1cblxuICAgIGNvbmZpZy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgY29uZmlnLnRva2VuID0gdG9rZW47XG4gICAgY29uZmlnLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgLy8gY29uZmlnLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgY29uZmlnLnJlbWVtYmVyID0gdHJ1ZTtcbiAgICBzYXZlRXh0ZW5zaW9uQ29uZmlnKGNvbmZpZyk7XG4gICAgdHh0U2Vzc2lvbi50ZXh0Q29udGVudCA9IGBMb2dnZWQgaW4uYDtcblxuICAgIGlmICh0b2tlbi5sZW5ndGggPiAxMCkge1xuICAgICAgbG9hZGluZ1NpZ24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgdHh0U2Vzc2lvbi50ZXh0Q29udGVudCA9IGVyci50b1N0cmluZygpO1xuICB9KTtcbn1cblxuYnRuTG9naW4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgaGlkZUVycm9yKCk7XG4gIHNob3dMb2FkaW5nKCk7XG5cbiAgYnRuTG9naW5DbGljaygpXG4gICAgLmNhdGNoKGVyciA9PiBzaG93RXJyb3IoZXJyKSlcbiAgICAuZmluYWxseSgoKSA9PiBoaWRlTG9hZGluZygpKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/chrome/dist/popup.entry.js b/chrome/dist/popup.entry.js index 0a653fb..9d4fb91 100644 --- a/chrome/dist/popup.entry.js +++ b/chrome/dist/popup.entry.js @@ -1 +1,180 @@ -/*! Copyright banther@pm.me */!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}({2:function(e,t){var n=document.getElementById("input-tags"),r=document.getElementById("btn-remove"),o=document.getElementById("btn-libraries"),i=document.getElementById("btn-save"),l=document.getElementById("loading-sign");r.addEventListener("click",e=>{i.style.display="none",l.style.display="block",r.style.display="none",chrome.runtime.sendMessage({type:"remove-bookmark"},e=>{window.close()})}),o.addEventListener("click",e=>{chrome.runtime.sendMessage({type:"open-libraries"},e=>{window.close()})}),i.addEventListener("click",e=>{var t=n.value.toLowerCase().replace(/\s+/g," ").split(/\s*,\s*/g).filter(e=>""!==e.trim()).map(e=>e.trim());i.style.display="none",l.style.display="block",chrome.runtime.sendMessage({type:"save-bookmark",tags:t},e=>{window.close()})}),n.addEventListener("keyup",e=>{13===event.keyCode&&(event.preventDefault(),i.click())})}}); \ No newline at end of file +/*! Copyright banther@pm.me */ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./chrome/js/popup.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./chrome/js/popup.js": +/*!****************************!*\ + !*** ./chrome/js/popup.js ***! + \****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; +var inputTags = document.getElementById("input-tags"), btnRemove = document.getElementById("btn-remove"), btnLibraries = document.getElementById("btn-libraries"), btnSave = document.getElementById("btn-save"), loading = document.getElementById("loading-sign"); +function showError(err) { + return __async(this, null, function* () { + var tabs = yield chrome.tabs.query({ + currentWindow: true, + active: true + }); + if (tabs.length < 1) { + throw new Error("no tab available"); + } + if (err instanceof Error) { + err = err.message; + } + return chrome.tabs.sendMessage(tabs[0].id, { + type: "show-error", + message: err + }); + }); +} +btnRemove.addEventListener("click", (e) => { + btnSave.style.display = "none"; + loading.style.display = "block"; + btnRemove.style.display = "none"; + chrome.runtime.sendMessage({ + type: "remove-bookmark" + }, (resp) => { + console.log(resp); + window.close(); + }); +}); +btnLibraries.addEventListener("click", (e) => { + chrome.runtime.sendMessage({ + type: "open-libraries" + }, (resp) => { + console.log(resp); + window.close(); + }); +}); +btnSave.addEventListener("click", (e) => { + var tags = inputTags.value.toLowerCase().replace(/\s+/g, " ").split(/\s*,\s*/g).filter((tag) => tag.trim() !== "").map((tag) => { + return tag.trim(); + }); + btnSave.style.display = "none"; + loading.style.display = "block"; + chrome.runtime.sendMessage({ + type: "save-bookmark", + tags + }, (resp) => { + console.log(resp); + window.close(); + }); +}); +inputTags.addEventListener("keyup", (e) => { + if (event.keyCode === 13) { + event.preventDefault(); + btnSave.click(); + } +}); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY2hyb21lL2pzL3BvcHVwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pGQSxJQUFJLFlBQVksU0FBUyxlQUFlLFlBQVksR0FDbEQsWUFBWSxTQUFTLGVBQWUsWUFBWSxHQUNoRCxlQUFlLFNBQVMsZUFBZSxlQUFlLEdBQ3RELFVBQVUsU0FBUyxlQUFlLFVBQVUsR0FDNUMsVUFBVSxTQUFTLGVBQWUsY0FBYztBQUVsRCxTQUFlLFVBQVUsS0FBSztBQUFBO0FBQzVCLFFBQUksT0FBTyxNQUFNLE9BQU8sS0FBSyxNQUFNO0FBQUEsTUFDakMsZUFBZTtBQUFBLE1BQ2YsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUVELFFBQUksS0FBSyxTQUFTLEdBQUc7QUFDbkIsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDcEM7QUFFQSxRQUFJLGVBQWUsT0FBTztBQUN4QixZQUFNLElBQUk7QUFBQSxJQUNaO0FBRUEsV0FBTyxPQUFPLEtBQUssWUFBWSxLQUFLLENBQUMsRUFBRSxJQUFJO0FBQUEsTUFDekMsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUdBLFVBQVUsaUJBQWlCLFNBQVMsQ0FBQyxNQUFNO0FBRXpDLFVBQVEsTUFBTSxVQUFVO0FBQ3hCLFVBQVEsTUFBTSxVQUFVO0FBQ3hCLFlBQVUsTUFBTSxVQUFVO0FBRzFCLFNBQU8sUUFBUSxZQUFZO0FBQUEsSUFDekIsTUFBTTtBQUFBLEVBQ1IsR0FBRyxDQUFDLFNBQVM7QUFDWCxZQUFRLElBQUksSUFBSTtBQUNoQixXQUFPLE1BQU07QUFBQSxFQUNmLENBQUM7QUFHSCxDQUFDO0FBRUQsYUFBYSxpQkFBaUIsU0FBUyxDQUFDLE1BQU07QUFDNUMsU0FBTyxRQUFRLFlBQVk7QUFBQSxJQUN6QixNQUFNO0FBQUEsRUFDUixHQUFHLENBQUMsU0FBUztBQUNYLFlBQVEsSUFBSSxJQUFJO0FBQ2hCLFdBQU8sTUFBTTtBQUFBLEVBQ2YsQ0FBQztBQUVILENBQUM7QUFFRCxRQUFRLGlCQUFpQixTQUFTLENBQUMsTUFBTTtBQUV2QyxNQUFJLE9BQU8sVUFBVSxNQUNsQixZQUFZLEVBQ1osUUFBUSxRQUFRLEdBQUcsRUFDbkIsTUFBTSxVQUFVLEVBQ2hCLE9BQU8sU0FBTyxJQUFJLEtBQUssTUFBTSxFQUFFLEVBQy9CLElBQUksU0FBTztBQUNWLFdBQU8sSUFBSSxLQUFLO0FBQUEsRUFDbEIsQ0FBQztBQUdILFVBQVEsTUFBTSxVQUFVO0FBQ3hCLFVBQVEsTUFBTSxVQUFVO0FBR3hCLFNBQU8sUUFBUSxZQUFZO0FBQUEsSUFDekIsTUFBTTtBQUFBLElBQ047QUFBQSxFQUNGLEdBQUcsQ0FBQyxTQUFTO0FBQ1gsWUFBUSxJQUFJLElBQUk7QUFDaEIsV0FBTyxNQUFNO0FBQUEsRUFDZixDQUFDO0FBRUgsQ0FBQztBQUVELFVBQVUsaUJBQWlCLFNBQVMsQ0FBQyxNQUFNO0FBRXpDLE1BQUksTUFBTSxZQUFZLElBQUk7QUFDeEIsVUFBTSxlQUFlO0FBQ3JCLFlBQVEsTUFBTTtBQUFBLEVBQ2hCO0FBQ0YsQ0FBQyIsImZpbGUiOiJwb3B1cC5lbnRyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vY2hyb21lL2pzL3BvcHVwLmpzXCIpO1xuIiwiLy8gR2V0IERPTVxudmFyIGlucHV0VGFncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5wdXQtdGFnc1wiKSxcbiAgYnRuUmVtb3ZlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG4tcmVtb3ZlXCIpLFxuICBidG5MaWJyYXJpZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bi1saWJyYXJpZXNcIiksXG4gIGJ0blNhdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bi1zYXZlXCIpLFxuICBsb2FkaW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb2FkaW5nLXNpZ25cIik7XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dFcnJvcihlcnIpIHtcbiAgdmFyIHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7XG4gICAgY3VycmVudFdpbmRvdzogdHJ1ZSxcbiAgICBhY3RpdmU6IHRydWUsXG4gIH0pO1xuXG4gIGlmICh0YWJzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyB0YWIgYXZhaWxhYmxlXCIpO1xuICB9XG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgZXJyID0gZXJyLm1lc3NhZ2U7XG4gIH1cblxuICByZXR1cm4gY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFic1swXS5pZCwge1xuICAgIHR5cGU6IFwic2hvdy1lcnJvclwiLFxuICAgIG1lc3NhZ2U6IGVycixcbiAgfSk7XG59XG5cbi8vIEFkZCBldmVudCBoYW5kbGVyXG5idG5SZW1vdmUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gIC8vIFNob3cgbG9hZGluZyBpbmRpY2F0b3JcbiAgYnRuU2F2ZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIGxvYWRpbmcuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgYnRuUmVtb3ZlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuXG4gIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICB0eXBlOiBcInJlbW92ZS1ib29rbWFya1wiLFxuICB9LCAocmVzcCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgIHdpbmRvdy5jbG9zZSgpXG4gIH0pO1xuXG5cbn0pO1xuXG5idG5MaWJyYXJpZXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICB0eXBlOiBcIm9wZW4tbGlicmFyaWVzXCIsXG4gIH0sIChyZXNwKSA9PiB7XG4gICAgY29uc29sZS5sb2cocmVzcCk7XG4gICAgd2luZG93LmNsb3NlKClcbiAgfSk7XG5cbn0pO1xuXG5idG5TYXZlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAvLyBHZXQgaW5wdXQgdmFsdWVcbiAgdmFyIHRhZ3MgPSBpbnB1dFRhZ3MudmFsdWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgIC5zcGxpdCgvXFxzKixcXHMqL2cpXG4gICAgLmZpbHRlcih0YWcgPT4gdGFnLnRyaW0oKSAhPT0gXCJcIilcbiAgICAubWFwKHRhZyA9PiB7XG4gICAgICByZXR1cm4gdGFnLnRyaW0oKTtcbiAgICB9KTtcblxuICAvLyBTaG93IGxvYWRpbmcgaW5kaWNhdG9yXG4gIGJ0blNhdmUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBsb2FkaW5nLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cbiAgLy8gU2VuZCBkYXRhXG4gIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICB0eXBlOiBcInNhdmUtYm9va21hcmtcIixcbiAgICB0YWdzOiB0YWdzLFxuICB9LCAocmVzcCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgIHdpbmRvdy5jbG9zZSgpXG4gIH0pO1xuXG59KTtcblxuaW5wdXRUYWdzLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoZSkgPT4ge1xuICAvLyBrZXlDb2RlIDEzID0gXCJFbnRlclwiIGtleSBvbiB0aGUga2V5Ym9hcmRcbiAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGJ0blNhdmUuY2xpY2soKVxuICB9XG59KVxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/chrome/js/helper.js b/chrome/js/helper.js index 3bc7871..806d2dc 100644 --- a/chrome/js/helper.js +++ b/chrome/js/helper.js @@ -2,20 +2,8 @@ export function getExtensionConfig() { return new Promise((resolve, reject) => { try { chrome.storage.local.get(null, function (items) { - var token = items.token || ""; - var server = items.server || ""; - if (token === "") { - return reject("no active session, please login first"); - } - if (server === "") { - return reject("server url is not specified"); - } - return resolve({ - token: token, - server: server - }); + return resolve(items); }); - } catch (err) { return reject(err); } diff --git a/chrome/js/iFetch.js b/chrome/js/iFetch.js index d4d7602..9c7dad9 100644 --- a/chrome/js/iFetch.js +++ b/chrome/js/iFetch.js @@ -42,6 +42,9 @@ class iFetch { var that = this; var url = new URL(route, baseUrl); + if (route.indexOf("http") >= 0) { + url = route + } // token if (token != '') { diff --git a/chrome/js/options.js b/chrome/js/options.js index 8c020bb..1fe9857 100644 --- a/chrome/js/options.js +++ b/chrome/js/options.js @@ -1,4 +1,5 @@ import { getExtensionConfig } from "./helper.js"; +import ifetch from "./iFetch.js" // async function getExtensionConfig() { // var items = await chrome.storage.local.get(); @@ -12,70 +13,62 @@ import { getExtensionConfig } from "./helper.js"; // }; // } -async function saveExtensionConfig(cfg) { - return chrome.storage.local.set(cfg); +function saveExtensionConfig(cfg) { + chrome.storage.local.set(cfg) + return } async function logout(server, token) { return Promise.resolve(); } -async function login(server, username, password, remember) { - // Validate input - if (server === "") { - throw new Error("Server must not empty"); - } - - if (username === "") { - throw new Error("Username must not empty"); - } - - if (password === "") { - throw new Error("Password must not empty"); - } - - if (typeof remember !== 'boolean') { - remember = false; - } - - // Create login URL - var loginURL = ""; - var loginPath = "api/auth/login"; - try { - loginURL = new URL(server); - if (loginURL.pathname.slice(-1) == "/") { - loginURL.pathname = loginURL.pathname + loginPath; - } else { - loginURL.pathname = loginURL.pathname + "/" + loginPath; +function login(server, username, password, remember) { + return new Promise((resolve, reject) => { + // Validate input + if (server === "") { + throw new Error("Server must not empty"); } - } catch (err) { - throw new Error(`${server} is not a valid url`); - } - - // Send login request - var response = await fetch(loginURL, { - method: "post", - body: JSON.stringify({ - username: username, - password: password, - remember_me: remember, - }), - headers: { - "Content-Type": "application/json", + + if (username === "") { + throw new Error("Username must not empty"); } - }); - if (!response.ok) { - var err = await response.text(); - throw new Error(err); - } + if (password === "") { + throw new Error("Password must not empty"); + } - var jsonResp = await response.json(), - token = jsonResp.data.token; + if (typeof remember !== 'boolean') { + remember = false; + } - console.log(token); + // Create login URL + var loginURL = ""; + var loginPath = "api/auth/login"; + try { + loginURL = new URL(server); + if (loginURL.pathname.slice(-1) == "/") { + loginURL.pathname = loginURL.pathname + loginPath; + } else { + loginURL.pathname = loginURL.pathname + "/" + loginPath; + } + } catch (err) { + throw new Error(`${server} is not a valid url`); + } - return token; + ifetch.post(loginURL.href, { + username: username, + password: password, + remember_me: remember, + }).then(resp => { + if (resp.code != 0) { + return reject(resp.msg) + } else { + return resolve(resp.data.token); + } + }).catch(err => { + return reject(err.toString()) + }) + }); } // Define function for UI handler @@ -110,6 +103,7 @@ function hideError() { getExtensionConfig() .then(cfg => { + console.log("cfg", cfg); config = cfg; if (cfg.token === "") txtSession.textContent = "No active session"; @@ -131,27 +125,27 @@ async function btnLoginClick() { // remember = inputRemember.checked; // Login using input value - var token = await login(server, username, password, true); - - // Save input value and token to config - - if (server.endsWith("/")) { - server = server.slice(0, -1); - } - - config.server = server; - config.token = token; - config.username = username; - // config.password = password; - config.remember = true; - await saveExtensionConfig(config); - txtSession.textContent = `Logged in.`; + login(server, username, password, true).then(token => { + // Save input value and token to config + if (server.endsWith("/")) { + server = server.slice(0, -1); + } - if (token.length > 10) { - loadingSign.style.display = "none"; - } + config.server = server; + config.token = token; + config.username = username; + // config.password = password; + config.remember = true; + saveExtensionConfig(config); + txtSession.textContent = `Logged in.`; - return Promise.resolve(); + if (token.length > 10) { + loadingSign.style.display = "none"; + } + return Promise.resolve(); + }).catch(err => { + txtSession.textContent = err.toString(); + }); } btnLogin.addEventListener("click", () => { diff --git a/package.json b/package.json index 5675808..3e450cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chrome-bookmark", - "version": "1.6.3", + "version": "1.6.4", "private": true, "scripts": { "dev": "export NODE_ENV='development' && webpack --mode=development --watch",