diff --git a/js/main.js b/js/main.js index d7c8c38b..365d57d0 100644 --- a/js/main.js +++ b/js/main.js @@ -527,7 +527,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Utilities; });\n/* eslint-disable no-console */\nclass Utilities {\n static getTextArea() {\n return $(\".channelTextArea-1LDbYG textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n } catch (err) {\n return false;\n }\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n this.err(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = Utilities.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) Utilities.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utilities.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver(mutations => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof obj !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n\n return true;\n }\n /**\r\n * Generates an automatically memoizing version of an object.\r\n * @author Zerebos\r\n * @param {Object} object - object to memoize\r\n * @returns {Proxy} the proxy to the object that memoizes properties\r\n */\n\n\n static memoizeObject(object) {\n const proxy = new Proxy(object, {\n get: function (obj, mod) {\n if (!obj.hasOwnProperty(mod)) return undefined;\n\n if (Object.getOwnPropertyDescriptor(obj, mod).get) {\n const value = obj[mod];\n delete obj[mod];\n obj[mod] = value;\n }\n\n return obj[mod];\n },\n set: function (obj, mod, value) {\n if (obj.hasOwnProperty(mod)) return this.err(\"MemoizedObject\", \"Trying to overwrite existing property\");\n obj[mod] = value;\n return obj[mod];\n }\n });\n Object.defineProperty(proxy, \"hasOwnProperty\", {\n value: function (prop) {\n return this[prop] !== undefined;\n }\n });\n return proxy;\n }\n /**\r\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\r\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\r\n * would return \"Hello, Zerebos\".\r\n * @param {string} string - string to format\r\n * @param {object} values - object literal of placeholders to replacements\r\n * @returns {string} the properly formatted string\r\n */\n\n\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof replacement === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n\n return string;\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter.\r\n * @param {object} tree Tree that should be walked\r\n * @param {callable} searchFilter Filter to check against each object and subobject\r\n * @param {object} options Additional options to customize the search\r\n * @param {Array|null} [options.walkable=null] Array of strings to use as keys that are allowed to be walked on. Null value indicates all keys are walkable\r\n * @param {Array} [options.ignore=[]] Array of strings to use as keys to exclude from the search, most helpful when `walkable = null`.\r\n */\n\n\n static findInTree(tree, searchFilter, {\n walkable = null,\n ignore = []\n } = {}) {\n if (typeof searchFilter === \"string\") {\n if (tree.hasOwnProperty(searchFilter)) return tree[searchFilter];\n } else if (searchFilter(tree)) {\n return tree;\n }\n\n if (typeof tree !== \"object\" || tree == null) return undefined;\n let tempReturn = undefined;\n\n if (tree instanceof Array) {\n for (const value of tree) {\n tempReturn = this.findInTree(value, searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n } else {\n const toWalk = walkable == null ? Object.keys(tree) : walkable;\n\n for (const key of toWalk) {\n if (!tree.hasOwnProperty(key) || ignore.includes(key)) continue;\n tempReturn = this.findInTree(tree[key], searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n }\n\n return tempReturn;\n }\n /**\r\n * Gets a nested property (if it exists) safely. Path should be something like `prop.prop2.prop3`.\r\n * Numbers can be used for arrays as well like `prop.prop2.array.0.id`.\r\n * @param {Object} obj - object to get nested property of\r\n * @param {string} path - representation of the property to obtain\r\n */\n\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (currentObj, prop) {\n return currentObj && currentObj[prop];\n }, obj);\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInRenderTree(tree, searchFilter, {\n walkable = [\"props\", \"children\", \"child\", \"sibling\"],\n ignore = []\n } = {}) {\n return this.findInTree(tree, searchFilter, {\n walkable,\n ignore\n });\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInReactTree(tree, searchFilter) {\n return this.findInTree(tree, searchFilter, {\n walkable: [\"props\", \"children\", \"return\", \"stateNode\"]\n });\n }\n\n static getReactInstance(node) {\n if (node.__reactInternalInstance$) return node.__reactInternalInstance$;\n return node[Object.keys(node).find(k => k.startsWith(\"__reactInternalInstance\"))] || null;\n }\n /**\r\n * Grabs a value from the react internal instance. Allows you to grab\r\n * long depth values safely without accessing no longer valid properties.\r\n * @param {HTMLElement} node - node to obtain react instance of\r\n * @param {object} options - options for the search\r\n * @param {array} [options.include] - list of items to include from the search\r\n * @param {array} [options.exclude=[\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"]] - list of items to exclude from the search\r\n * @param {callable} [options.filter=_=>_] - filter to check the current instance with (should return a boolean)\r\n * @return {(*|null)} the owner instance or undefined if not found.\r\n */\n\n\n static getOwnerInstance(node, {\n include,\n exclude = [\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"],\n filter = _ => _\n } = {}) {\n if (node === undefined) return undefined;\n const excluding = include === undefined;\n const nameFilter = excluding ? exclude : include;\n\n function getDisplayName(owner) {\n const type = owner.type;\n if (!type) return null;\n return type.displayName || type.name || null;\n }\n\n function classFilter(owner) {\n const name = getDisplayName(owner);\n return name !== null && !!(nameFilter.includes(name) ^ excluding);\n }\n\n let curr = this.getReactInstance(node);\n\n for (curr = curr && curr.return; curr !== null; curr = curr.return) {\n if (curr === null) continue;\n const owner = curr.stateNode;\n if (curr !== null && !(owner instanceof HTMLElement) && classFilter(curr) && filter(owner)) return owner;\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzPzk3NjkiXSwibmFtZXMiOlsiVXRpbGl0aWVzIiwiZ2V0VGV4dEFyZWEiLCIkIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwidGV4dCIsImZvY3VzIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJ2YWx1ZSIsImxlbmd0aCIsImRvY3VtZW50IiwiZXhlY0NvbW1hbmQiLCJlc2NhcGUiLCJzIiwicmVwbGFjZSIsInRlc3RKU09OIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsImVyciIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwibWVzc2FnZSIsInBhcmFtcyIsImUiLCJtb25rZXlQYXRjaCIsIndoYXQiLCJtZXRob2ROYW1lIiwib3B0aW9ucyIsImJlZm9yZSIsImFmdGVyIiwiaW5zdGVhZCIsIm9uY2UiLCJzaWxlbnQiLCJmb3JjZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib3JpZ01ldGhvZCIsImNhbmNlbCIsInRoaXNPYmplY3QiLCJtZXRob2RBcmd1bWVudHMiLCJhcmd1bWVudHMiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwicmV0dXJuVmFsdWUiLCJhcHBseSIsInRlbXBSZXQiLCJ1bmRlZmluZWQiLCJfX21vbmtleVBhdGNoZWQiLCJfX29yaWdpbmFsTWV0aG9kIiwib25SZW1vdmVkIiwibm9kZSIsImNhbGxiYWNrIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibSIsIm11dGF0aW9uIiwibm9kZXMiLCJBcnJheSIsImZyb20iLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsImluZGV4T2YiLCJwYXJlbnRNYXRjaCIsInNvbWUiLCJwYXJlbnQiLCJjb250YWlucyIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiYm9keSIsInN1YnRyZWUiLCJjaGlsZExpc3QiLCJpc0VtcHR5Iiwib2JqIiwiaXNBcnJheSIsImtleSIsImhhc093blByb3BlcnR5IiwibWVtb2l6ZU9iamVjdCIsIm9iamVjdCIsInByb3h5IiwiUHJveHkiLCJnZXQiLCJtb2QiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJzZXQiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3AiLCJmb3JtYXRTdHJpbmciLCJzdHJpbmciLCJ2YWx1ZXMiLCJ2YWwiLCJyZXBsYWNlbWVudCIsInN0cmluZ2lmeSIsInRvU3RyaW5nIiwiUmVnRXhwIiwiZmluZEluVHJlZSIsInRyZWUiLCJzZWFyY2hGaWx0ZXIiLCJ3YWxrYWJsZSIsImlnbm9yZSIsInRlbXBSZXR1cm4iLCJ0b1dhbGsiLCJrZXlzIiwiaW5jbHVkZXMiLCJnZXROZXN0ZWRQcm9wIiwicGF0aCIsInNwbGl0IiwicmVkdWNlIiwiY3VycmVudE9iaiIsImZpbmRJblJlbmRlclRyZWUiLCJmaW5kSW5SZWFjdFRyZWUiLCJnZXRSZWFjdEluc3RhbmNlIiwiX19yZWFjdEludGVybmFsSW5zdGFuY2UkIiwiZmluZCIsImsiLCJzdGFydHNXaXRoIiwiZ2V0T3duZXJJbnN0YW5jZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiZmlsdGVyIiwiXyIsImV4Y2x1ZGluZyIsIm5hbWVGaWx0ZXIiLCJnZXREaXNwbGF5TmFtZSIsIm93bmVyIiwidHlwZSIsImNsYXNzRmlsdGVyIiwiY3VyciIsInJldHVybiIsInN0YXRlTm9kZSIsIkhUTUxFbGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNQSxTQUFOLENBQWdCO0FBRTNCLFNBQU9DLFdBQVAsR0FBcUI7QUFDakIsV0FBT0MsQ0FBQyxDQUFDLGtDQUFELENBQVI7QUFDSDs7QUFFRCxTQUFPQyxVQUFQLENBQWtCQyxRQUFsQixFQUE0QkMsSUFBNUIsRUFBa0M7QUFDOUJELFlBQVEsQ0FBQ0UsS0FBVDtBQUNBRixZQUFRLENB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SUFBb0RKLFdBQVcsQ0FBQ0MsSUFBRCxDQUEvRCxJQUF5RVIsTUFBTSxDQUFDSyxLQUFELENBQW5GLEVBQTRGLE9BQU9BLEtBQVA7QUFDNUY7O0FBRUQsV0FBTyxJQUFQO0FBQ0E7O0FBM1A2QiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3V0aWxpdGllcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxpdGllcyB7XHJcblxyXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xyXG4gICAgICAgIHJldHVybiAkKFwiLmNoYW5uZWxUZXh0QXJlYS0xTERiWUcgdGV4dGFyZWFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcclxuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xyXG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcclxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcclxuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcclxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBcInBhdGNoZWQgXCIgKyAod2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCBtZXRob2ROYW1lKTtcclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYW4gYXV0b21hdGljYWxseSBtZW1vaXppbmcgdmVyc2lvbiBvZiBhbiBvYmplY3QuXHJcbiAgICAgKiBAYXV0aG9yIFplcmVib3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBvYmplY3QgdG8gbWVtb2l6ZVxyXG4gICAgICogQHJldHVybnMge1Byb3h5fSB0aGUgcHJveHkgdG8gdGhlIG9iamVjdCB0aGF0IG1lbW9pemVzIHByb3BlcnRpZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG1lbW9pemVPYmplY3Qob2JqZWN0KSB7XHJcbiAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkob2JqZWN0LCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIG1vZCkuZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpbbW9kXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW21vZF07XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW21vZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihvYmosIG1vZCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIHRoaXMuZXJyKFwiTWVtb2l6ZWRPYmplY3RcIiwgXCJUcnlpbmcgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnR5XCIpO1xyXG4gICAgICAgICAgICAgICAgb2JqW21vZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIFwiaGFzT3duUHJvcGVydHlcIiwge3ZhbHVlOiBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfX0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgc3RyaW5ncyB3aXRoIHBsYWNlaG9sZGVycyAoYHt7cGxhY2Vob2xkZXJ9fWApIGludG8gZnVsbCBzdHJpbmdzLlxyXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXHJcbiAgICAgKiB3b3VsZCByZXR1cm4gXCJIZWxsbywgWmVyZWJvc1wiLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIHN0cmluZyB0byBmb3JtYXRcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWwgaW4gdmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHZhbHVlc1t2YWxdO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHJlcGxhY2VtZW50KSA9PT0gXCJvYmplY3RcIiAmJiByZXBsYWNlbWVudCAhPT0gbnVsbCkgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShuZXcgUmVnRXhwKGB7eyR7dmFsfX19YCwgXCJnXCIpLCByZXBsYWNlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHZhbHVlLCBzdWJvYmplY3QsIG9yIGFycmF5IGZyb20gYSB0cmVlIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmljIGZpbHRlci5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0cmVlIFRyZWUgdGhhdCBzaG91bGQgYmUgd2Fsa2VkXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBzZWFyY2hGaWx0ZXIgRmlsdGVyIHRvIGNoZWNrIGFnYWluc3QgZWFjaCBvYmplY3QgYW5kIHN1Ym9iamVjdFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgc2VhcmNoXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz58bnVsbH0gW29wdGlvbnMud2Fsa2FibGU9bnVsbF0gQXJyYXkgb2Ygc3RyaW5ncyB0byB1c2UgYXMga2V5cyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHdhbGtlZCBvbi4gTnVsbCB2YWx1ZSBpbmRpY2F0ZXMgYWxsIGtleXMgYXJlIHdhbGthYmxlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtvcHRpb25zLmlnbm9yZT1bXV0gQXJyYXkgb2Ygc3RyaW5ncyB0byB1c2UgYXMga2V5cyB0byBleGNsdWRlIGZyb20gdGhlIHNlYXJjaCwgbW9zdCBoZWxwZnVsIHdoZW4gYHdhbGthYmxlID0gbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kSW5UcmVlKHRyZWUsIHNlYXJjaEZpbHRlciwge3dhbGthYmxlID0gbnVsbCwgaWdub3JlID0gW119ID0ge30pIHtcclxuICAgICAgICBpZiAodHlwZW9mIHNlYXJjaEZpbHRlciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBpZiAodHJlZS5oYXNPd25Qcm9wZXJ0eShzZWFyY2hGaWx0ZXIpKSByZXR1cm4gdHJlZVtzZWFyY2hGaWx0ZXJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZWFyY2hGaWx0ZXIodHJlZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRyZWUgIT09IFwib2JqZWN0XCIgfHwgdHJlZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgdGVtcFJldHVybiA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHJlZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdHJlZSkge1xyXG4gICAgICAgICAgICAgICAgdGVtcFJldHVybiA9IHRoaXMuZmluZEluVHJlZSh2YWx1ZSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUsIGlnbm9yZX0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wUmV0dXJuICE9IFwidW5kZWZpbmVkXCIpIHJldHVybiB0ZW1wUmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0b1dhbGsgPSB3YWxrYWJsZSA9PSBudWxsID8gT2JqZWN0LmtleXModHJlZSkgOiB3YWxrYWJsZTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdG9XYWxrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyZWUuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBpZ25vcmUuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB0ZW1wUmV0dXJuID0gdGhpcy5maW5kSW5UcmVlKHRyZWVba2V5XSwgc2VhcmNoRmlsdGVyLCB7d2Fsa2FibGUsIGlnbm9yZX0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wUmV0dXJuICE9IFwidW5kZWZpbmVkXCIpIHJldHVybiB0ZW1wUmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZW1wUmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIG5lc3RlZCBwcm9wZXJ0eSAoaWYgaXQgZXhpc3RzKSBzYWZlbHkuIFBhdGggc2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBwcm9wLnByb3AyLnByb3AzYC5cclxuICAgICAqIE51bWJlcnMgY2FuIGJlIHVzZWQgZm9yIGFycmF5cyBhcyB3ZWxsIGxpa2UgYHByb3AucHJvcDIuYXJyYXkuMC5pZGAuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gb2JqZWN0IHRvIGdldCBuZXN0ZWQgcHJvcGVydHkgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gcmVwcmVzZW50YXRpb24gb2YgdGhlIHByb3BlcnR5IHRvIG9idGFpblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24oY3VycmVudE9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudE9iaiAmJiBjdXJyZW50T2JqW3Byb3BdO1xyXG4gICAgICAgIH0sIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHZhbHVlLCBzdWJvYmplY3QsIG9yIGFycmF5IGZyb20gYSB0cmVlIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmljIGZpbHRlci4gR3JlYXQgZm9yIHBhdGNoaW5nIHJlbmRlciBmdW5jdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdHJlZSBSZWFjdCB0cmVlIHRvIGxvb2sgdGhyb3VnaC4gQ2FuIGJlIGEgcmVuZGVyZWQgb2JqZWN0IG9yIGFuIGludGVybmFsIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gc2VhcmNoRmlsdGVyIEZpbHRlciBmdW5jdGlvbiB0byBjaGVjayBzdWJvYmplY3RzIGFnYWluc3QuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kSW5SZW5kZXJUcmVlKHRyZWUsIHNlYXJjaEZpbHRlciwge3dhbGthYmxlID0gW1wicHJvcHNcIiwgXCJjaGlsZHJlblwiLCBcImNoaWxkXCIsIFwic2libGluZ1wiXSwgaWdub3JlID0gW119ID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5kSW5UcmVlKHRyZWUsIHNlYXJjaEZpbHRlciwge3dhbGthYmxlLCBpZ25vcmV9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgdmFsdWUsIHN1Ym9iamVjdCwgb3IgYXJyYXkgZnJvbSBhIHRyZWUgdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMgZmlsdGVyLiBHcmVhdCBmb3IgcGF0Y2hpbmcgcmVuZGVyIGZ1bmN0aW9ucy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0cmVlIFJlYWN0IHRyZWUgdG8gbG9vayB0aHJvdWdoLiBDYW4gYmUgYSByZW5kZXJlZCBvYmplY3Qgb3IgYW4gaW50ZXJuYWwgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBzZWFyY2hGaWx0ZXIgRmlsdGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHN1Ym9iamVjdHMgYWdhaW5zdC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRJblJlYWN0VHJlZSh0cmVlLCBzZWFyY2hGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5kSW5UcmVlKHRyZWUsIHNlYXJjaEZpbHRlciwge3dhbGthYmxlOiBbXCJwcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwicmV0dXJuXCIsIFwic3RhdGVOb2RlXCJdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFJlYWN0SW5zdGFuY2Uobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlLl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJCkgcmV0dXJuIG5vZGUuX19yZWFjdEludGVybmFsSW5zdGFuY2UkO1xyXG4gICAgICAgIHJldHVybiBub2RlW09iamVjdC5rZXlzKG5vZGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogR3JhYnMgYSB2YWx1ZSBmcm9tIHRoZSByZWFjdCBpbnRlcm5hbCBpbnN0YW5jZS4gQWxsb3dzIHlvdSB0byBncmFiXHJcblx0ICogbG9uZyBkZXB0aCB2YWx1ZXMgc2FmZWx5IHdpdGhvdXQgYWNjZXNzaW5nIG5vIGxvbmdlciB2YWxpZCBwcm9wZXJ0aWVzLlxyXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHRvIG9idGFpbiByZWFjdCBpbnN0YW5jZSBvZlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBmb3IgdGhlIHNlYXJjaFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IFtvcHRpb25zLmluY2x1ZGVdIC0gbGlzdCBvZiBpdGVtcyB0byBpbmNsdWRlIGZyb20gdGhlIHNlYXJjaFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IFtvcHRpb25zLmV4Y2x1ZGU9W1wiUG9wb3V0XCIsIFwiVG9vbHRpcFwiLCBcIlNjcm9sbGVyXCIsIFwiQmFja2dyb3VuZEZsYXNoXCJdXSAtIGxpc3Qgb2YgaXRlbXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzZWFyY2hcclxuXHQgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5maWx0ZXI9Xz0+X10gLSBmaWx0ZXIgdG8gY2hlY2sgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugd2l0aCAoc2hvdWxkIHJldHVybiBhIGJvb2xlYW4pXHJcblx0ICogQHJldHVybiB7KCp8bnVsbCl9IHRoZSBvd25lciBpbnN0YW5jZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRPd25lckluc3RhbmNlKG5vZGUsIHtpbmNsdWRlLCBleGNsdWRlID0gW1wiUG9wb3V0XCIsIFwiVG9vbHRpcFwiLCBcIlNjcm9sbGVyXCIsIFwiQmFja2dyb3VuZEZsYXNoXCJdLCBmaWx0ZXIgPSBfID0+IF99ID0ge30pIHtcclxuXHRcdGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBleGNsdWRpbmcgPSBpbmNsdWRlID09PSB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBuYW1lRmlsdGVyID0gZXhjbHVkaW5nID8gZXhjbHVkZSA6IGluY2x1ZGU7XHJcblx0XHRmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShvd25lcikge1xyXG5cdFx0XHRjb25zdCB0eXBlID0gb3duZXIudHlwZTtcclxuXHRcdFx0aWYgKCF0eXBlKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0cmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XHJcblx0XHR9XHJcblx0XHRmdW5jdGlvbiBjbGFzc0ZpbHRlcihvd25lcikge1xyXG5cdFx0XHRjb25zdCBuYW1lID0gZ2V0RGlzcGxheU5hbWUob3duZXIpO1xyXG5cdFx0XHRyZXR1cm4gKG5hbWUgIT09IG51bGwgJiYgISEobmFtZUZpbHRlci5pbmNsdWRlcyhuYW1lKSBeIGV4Y2x1ZGluZykpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRsZXQgY3VyciA9IHRoaXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxuXHRcdGZvciAoY3VyciA9IGN1cnIgJiYgY3Vyci5yZXR1cm47IGN1cnIgIT09IG51bGw7IGN1cnIgPSBjdXJyLnJldHVybikge1xyXG5cdFx0XHRpZiAoY3VyciA9PT0gbnVsbCkgY29udGludWU7XHJcblx0XHRcdGNvbnN0IG93bmVyID0gY3Vyci5zdGF0ZU5vZGU7XHJcblx0XHRcdGlmIChjdXJyICE9PSBudWxsICYmICEob3duZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiYgY2xhc3NGaWx0ZXIoY3VycikgJiYgZmlsdGVyKG93bmVyKSkgcmV0dXJuIG93bmVyO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/utilities.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Utilities; });\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n\nclass Utilities {\n static getTextArea() {\n return $(\".channelTextArea-1LDbYG textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n } catch (err) {\n return false;\n }\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try {\n return method(...params);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stacktrace(\"SuppressedError\", \"Error occurred in \" + message, e);\n }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = Utilities.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) Utilities.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utilities.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver(mutations => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true\n });\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof obj !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n\n return true;\n }\n /**\r\n * Generates an automatically memoizing version of an object.\r\n * @author Zerebos\r\n * @param {Object} object - object to memoize\r\n * @returns {Proxy} the proxy to the object that memoizes properties\r\n */\n\n\n static memoizeObject(object) {\n const proxy = new Proxy(object, {\n get: function (obj, mod) {\n if (!obj.hasOwnProperty(mod)) return undefined;\n\n if (Object.getOwnPropertyDescriptor(obj, mod).get) {\n const value = obj[mod];\n delete obj[mod];\n obj[mod] = value;\n }\n\n return obj[mod];\n },\n set: function (obj, mod, value) {\n if (obj.hasOwnProperty(mod)) return _logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].error(\"MemoizedObject\", \"Trying to overwrite existing property\");\n obj[mod] = value;\n return obj[mod];\n }\n });\n Object.defineProperty(proxy, \"hasOwnProperty\", {\n value: function (prop) {\n return this[prop] !== undefined;\n }\n });\n return proxy;\n }\n /**\r\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\r\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\r\n * would return \"Hello, Zerebos\".\r\n * @param {string} string - string to format\r\n * @param {object} values - object literal of placeholders to replacements\r\n * @returns {string} the properly formatted string\r\n */\n\n\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof replacement === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n\n return string;\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter.\r\n * @param {object} tree Tree that should be walked\r\n * @param {callable} searchFilter Filter to check against each object and subobject\r\n * @param {object} options Additional options to customize the search\r\n * @param {Array|null} [options.walkable=null] Array of strings to use as keys that are allowed to be walked on. Null value indicates all keys are walkable\r\n * @param {Array} [options.ignore=[]] Array of strings to use as keys to exclude from the search, most helpful when `walkable = null`.\r\n */\n\n\n static findInTree(tree, searchFilter, {\n walkable = null,\n ignore = []\n } = {}) {\n if (typeof searchFilter === \"string\") {\n if (tree.hasOwnProperty(searchFilter)) return tree[searchFilter];\n } else if (searchFilter(tree)) {\n return tree;\n }\n\n if (typeof tree !== \"object\" || tree == null) return undefined;\n let tempReturn = undefined;\n\n if (tree instanceof Array) {\n for (const value of tree) {\n tempReturn = this.findInTree(value, searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n } else {\n const toWalk = walkable == null ? Object.keys(tree) : walkable;\n\n for (const key of toWalk) {\n if (!tree.hasOwnProperty(key) || ignore.includes(key)) continue;\n tempReturn = this.findInTree(tree[key], searchFilter, {\n walkable,\n ignore\n });\n if (typeof tempReturn != \"undefined\") return tempReturn;\n }\n }\n\n return tempReturn;\n }\n /**\r\n * Gets a nested property (if it exists) safely. Path should be something like `prop.prop2.prop3`.\r\n * Numbers can be used for arrays as well like `prop.prop2.array.0.id`.\r\n * @param {Object} obj - object to get nested property of\r\n * @param {string} path - representation of the property to obtain\r\n */\n\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function (currentObj, prop) {\n return currentObj && currentObj[prop];\n }, obj);\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInRenderTree(tree, searchFilter, {\n walkable = [\"props\", \"children\", \"child\", \"sibling\"],\n ignore = []\n } = {}) {\n return this.findInTree(tree, searchFilter, {\n walkable,\n ignore\n });\n }\n /**\r\n * Finds a value, subobject, or array from a tree that matches a specific filter. Great for patching render functions.\r\n * @param {object} tree React tree to look through. Can be a rendered object or an internal instance.\r\n * @param {callable} searchFilter Filter function to check subobjects against.\r\n */\n\n\n static findInReactTree(tree, searchFilter) {\n return this.findInTree(tree, searchFilter, {\n walkable: [\"props\", \"children\", \"return\", \"stateNode\"]\n });\n }\n\n static getReactInstance(node) {\n if (node.__reactInternalInstance$) return node.__reactInternalInstance$;\n return node[Object.keys(node).find(k => k.startsWith(\"__reactInternalInstance\"))] || null;\n }\n /**\r\n * Grabs a value from the react internal instance. Allows you to grab\r\n * long depth values safely without accessing no longer valid properties.\r\n * @param {HTMLElement} node - node to obtain react instance of\r\n * @param {object} options - options for the search\r\n * @param {array} [options.include] - list of items to include from the search\r\n * @param {array} [options.exclude=[\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"]] - list of items to exclude from the search\r\n * @param {callable} [options.filter=_=>_] - filter to check the current instance with (should return a boolean)\r\n * @return {(*|null)} the owner instance or undefined if not found.\r\n */\n\n\n static getOwnerInstance(node, {\n include,\n exclude = [\"Popout\", \"Tooltip\", \"Scroller\", \"BackgroundFlash\"],\n filter = _ => _\n } = {}) {\n if (node === undefined) return undefined;\n const excluding = include === undefined;\n const nameFilter = excluding ? exclude : include;\n\n function getDisplayName(owner) {\n const type = owner.type;\n if (!type) return null;\n return type.displayName || type.name || null;\n }\n\n function classFilter(owner) {\n const name = getDisplayName(owner);\n return name !== null && !!(nameFilter.includes(name) ^ excluding);\n }\n\n let curr = this.getReactInstance(node);\n\n for (curr = curr && curr.return; curr !== null; curr = curr.return) {\n if (curr === null) continue;\n const owner = curr.stateNode;\n if (curr !== null && !(owner instanceof HTMLElement) && classFilter(curr) && filter(owner)) return owner;\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzPzk3NjkiXSwibmFtZXMiOlsiVXRpbGl0aWVzIiwiZ2V0VGV4dEFyZWEiLCIkIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwidGV4dCIsImZvY3VzIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJ2YWx1ZSIsImxlbmd0aCIsImRvY3VtZW50IiwiZXhlY0NvbW1hbmQiLCJlc2NhcGUiLCJzIiwicmVwbGFjZSIsInRlc3RKU09OIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsImVyciIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwibWVzc2FnZSIsInBhcmFtcyIsImUiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwibW9ua2V5UGF0Y2giLCJ3aGF0IiwibWV0aG9kTmFtZSIsIm9wdGlvbnMiLCJiZWZvcmUiLCJhZnRlciIsImluc3RlYWQiLCJvbmNlIiwic2lsZW50IiwiZm9yY2UiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJjb25zdHJ1Y3RvciIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsIm9yaWdNZXRob2QiLCJjYW5jZWwiLCJ0aGlzT2JqZWN0IiwibWV0aG9kQXJndW1lbnRzIiwiYXJndW1lbnRzIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInJldHVyblZhbHVlIiwiYXBwbHkiLCJ0ZW1wUmV0IiwidW5kZWZpbmVkIiwiX19tb25rZXlQYXRjaGVkIiwiX19vcmlnaW5hbE1ldGhvZCIsIm9uUmVtb3ZlZCIsIm5vZGUiLCJjYWxsYmFjayIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm0iLCJtdXRhdGlvbiIsIm5vZGVzIiwiQXJyYXkiLCJmcm9tIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJpbmRleE9mIiwicGFyZW50TWF0Y2giLCJzb21lIiwicGFyZW50IiwiY29udGFpbnMiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImJvZHkiLCJzdWJ0cmVlIiwiY2hpbGRMaXN0IiwiaXNFbXB0eSIsIm9iaiIsImlzQXJyYXkiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIm1lbW9pemVPYmplY3QiLCJvYmplY3QiLCJwcm94eSIsIlByb3h5IiwiZ2V0IiwibW9kIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwic2V0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm9wIiwiZm9ybWF0U3RyaW5nIiwic3RyaW5nIiwidmFsdWVzIiwidmFsIiwicmVwbGFjZW1lbnQiLCJzdHJpbmdpZnkiLCJ0b1N0cmluZyIsIlJlZ0V4cCIsImZpbmRJblRyZWUiLCJ0cmVlIiwic2VhcmNoRmlsdGVyIiwid2Fsa2FibGUiLCJpZ25vcmUiLCJ0ZW1wUmV0dXJuIiwidG9XYWxrIiwia2V5cyIsImluY2x1ZGVzIiwiZ2V0TmVzdGVkUHJvcCIsInBhdGgiLCJzcGxpdCIsInJlZHVjZSIsImN1cnJlbnRPYmoiLCJmaW5kSW5SZW5kZXJUcmVlIiwiZmluZEluUmVhY3RUcmVlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJCIsImZpbmQiLCJrIiwic3RhcnRzV2l0aCIsImdldE93bmVySW5zdGFuY2UiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImZpbHRlciIsIl8iLCJleGNsdWRpbmciLCJuYW1lRmlsdGVyIiwiZ2V0RGlzcGxheU5hbWUiLCJvd25lciIsInR5cGUiLCJjbGFzc0ZpbHRlciIsImN1cnIiLCJyZXR1cm4iLCJzdGF0ZU5vZGUiLCJIVE1MRWxlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNQSxTQUFOLENBQWdCO0FBRTNCLFNBQU9DLFdBQVAsR0FBcUI7QUFDakIsV0FBT0MsQ0FBQyxDQUFDLGtDQUFELENBQVI7QUFDSDs7QUFFRCxTQUFPQyxVQUFQLENBQWtCQyxRQUFsQixFQUE0QkMsSUFBNUIsRUFBa0M7QUFDOUJELFlB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QUFLLElBQVQsSUFBaUIsRUFBRUgsS0FBSyxZQUFZTSxXQUFuQixDQUFqQixJQUFvREosV0FBVyxDQUFDQyxJQUFELENBQS9ELElBQXlFUixNQUFNLENBQUNLLEtBQUQsQ0FBbkYsRUFBNEYsT0FBT0EsS0FBUDtBQUM1Rjs7QUFFRCxXQUFPLElBQVA7QUFDQTs7QUEzUDZCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvdXRpbGl0aWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxpdGllcyB7XHJcblxyXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xyXG4gICAgICAgIHJldHVybiAkKFwiLmNoYW5uZWxUZXh0QXJlYS0xTERiWUcgdGV4dGFyZWFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcclxuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xyXG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcclxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcclxuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcclxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBcInBhdGNoZWQgXCIgKyAod2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCBtZXRob2ROYW1lKTtcclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYW4gYXV0b21hdGljYWxseSBtZW1vaXppbmcgdmVyc2lvbiBvZiBhbiBvYmplY3QuXHJcbiAgICAgKiBAYXV0aG9yIFplcmVib3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBvYmplY3QgdG8gbWVtb2l6ZVxyXG4gICAgICogQHJldHVybnMge1Byb3h5fSB0aGUgcHJveHkgdG8gdGhlIG9iamVjdCB0aGF0IG1lbW9pemVzIHByb3BlcnRpZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG1lbW9pemVPYmplY3Qob2JqZWN0KSB7XHJcbiAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkob2JqZWN0LCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIG1vZCkuZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpbbW9kXTtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW21vZF07XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW21vZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbW9kXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihvYmosIG1vZCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIExvZ2dlci5lcnJvcihcIk1lbW9pemVkT2JqZWN0XCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0eVwiKTtcclxuICAgICAgICAgICAgICAgIG9ialttb2RdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBcImhhc093blByb3BlcnR5XCIsIHt2YWx1ZTogZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH19KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3h5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybWF0IHN0cmluZ3Mgd2l0aCBwbGFjZWhvbGRlcnMgKGB7e3BsYWNlaG9sZGVyfX1gKSBpbnRvIGZ1bGwgc3RyaW5ncy5cclxuICAgICAqIFF1aWNrIGV4YW1wbGU6IGBQbHVnaW5VdGlsaXRpZXMuZm9ybWF0U3RyaW5nKFwiSGVsbG8sIHt7dXNlcn19XCIsIHt1c2VyOiBcIlplcmVib3NcIn0pYFxyXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBzdHJpbmcgdG8gZm9ybWF0XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIC0gb2JqZWN0IGxpdGVyYWwgb2YgcGxhY2Vob2xkZXJzIHRvIHJlcGxhY2VtZW50c1xyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhzdHJpbmcsIHZhbHVlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xyXG4gICAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB2YWx1ZXNbdmFsXTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVwbGFjZW1lbnQpKSByZXBsYWNlbWVudCA9IEpTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobmV3IFJlZ0V4cChge3ske3ZhbH19fWAsIFwiZ1wiKSwgcmVwbGFjZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSB2YWx1ZSwgc3Vib2JqZWN0LCBvciBhcnJheSBmcm9tIGEgdHJlZSB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYyBmaWx0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdHJlZSBUcmVlIHRoYXQgc2hvdWxkIGJlIHdhbGtlZFxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gc2VhcmNoRmlsdGVyIEZpbHRlciB0byBjaGVjayBhZ2FpbnN0IGVhY2ggb2JqZWN0IGFuZCBzdWJvYmplY3RcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHNlYXJjaFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fG51bGx9IFtvcHRpb25zLndhbGthYmxlPW51bGxdIEFycmF5IG9mIHN0cmluZ3MgdG8gdXNlIGFzIGtleXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB3YWxrZWQgb24uIE51bGwgdmFsdWUgaW5kaWNhdGVzIGFsbCBrZXlzIGFyZSB3YWxrYWJsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbb3B0aW9ucy5pZ25vcmU9W11dIEFycmF5IG9mIHN0cmluZ3MgdG8gdXNlIGFzIGtleXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzZWFyY2gsIG1vc3QgaGVscGZ1bCB3aGVuIGB3YWxrYWJsZSA9IG51bGxgLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZEluVHJlZSh0cmVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSA9IG51bGwsIGlnbm9yZSA9IFtdfSA9IHt9KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2hGaWx0ZXIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRyZWUuaGFzT3duUHJvcGVydHkoc2VhcmNoRmlsdGVyKSkgcmV0dXJuIHRyZWVbc2VhcmNoRmlsdGVyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoRmlsdGVyKHRyZWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0cmVlICE9PSBcIm9iamVjdFwiIHx8IHRyZWUgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbGV0IHRlbXBSZXR1cm4gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRyZWUgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRyZWUpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBSZXR1cm4gPSB0aGlzLmZpbmRJblRyZWUodmFsdWUsIHNlYXJjaEZpbHRlciwge3dhbGthYmxlLCBpZ25vcmV9KTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcFJldHVybiAhPSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdGVtcFJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdG9XYWxrID0gd2Fsa2FibGUgPT0gbnVsbCA/IE9iamVjdC5rZXlzKHRyZWUpIDogd2Fsa2FibGU7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRvV2Fsaykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0cmVlLmhhc093blByb3BlcnR5KGtleSkgfHwgaWdub3JlLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGVtcFJldHVybiA9IHRoaXMuZmluZEluVHJlZSh0cmVlW2tleV0sIHNlYXJjaEZpbHRlciwge3dhbGthYmxlLCBpZ25vcmV9KTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcFJldHVybiAhPSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdGVtcFJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGVtcFJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBuZXN0ZWQgcHJvcGVydHkgKGlmIGl0IGV4aXN0cykgc2FmZWx5LiBQYXRoIHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSBgcHJvcC5wcm9wMi5wcm9wM2AuXHJcbiAgICAgKiBOdW1iZXJzIGNhbiBiZSB1c2VkIGZvciBhcnJheXMgYXMgd2VsbCBsaWtlIGBwcm9wLnByb3AyLmFycmF5LjAuaWRgLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIG9iamVjdCB0byBnZXQgbmVzdGVkIHByb3BlcnR5IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9wZXJ0eSB0byBvYnRhaW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKGN1cnJlbnRPYmosIHByb3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRPYmogJiYgY3VycmVudE9ialtwcm9wXTtcclxuICAgICAgICB9LCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSB2YWx1ZSwgc3Vib2JqZWN0LCBvciBhcnJheSBmcm9tIGEgdHJlZSB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYyBmaWx0ZXIuIEdyZWF0IGZvciBwYXRjaGluZyByZW5kZXIgZnVuY3Rpb25zLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHRyZWUgUmVhY3QgdHJlZSB0byBsb29rIHRocm91Z2guIENhbiBiZSBhIHJlbmRlcmVkIG9iamVjdCBvciBhbiBpbnRlcm5hbCBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IHNlYXJjaEZpbHRlciBGaWx0ZXIgZnVuY3Rpb24gdG8gY2hlY2sgc3Vib2JqZWN0cyBhZ2FpbnN0LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZEluUmVuZGVyVHJlZSh0cmVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSA9IFtcInByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjaGlsZFwiLCBcInNpYmxpbmdcIl0sIGlnbm9yZSA9IFtdfSA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEluVHJlZSh0cmVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZSwgaWdub3JlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHZhbHVlLCBzdWJvYmplY3QsIG9yIGFycmF5IGZyb20gYSB0cmVlIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmljIGZpbHRlci4gR3JlYXQgZm9yIHBhdGNoaW5nIHJlbmRlciBmdW5jdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdHJlZSBSZWFjdCB0cmVlIHRvIGxvb2sgdGhyb3VnaC4gQ2FuIGJlIGEgcmVuZGVyZWQgb2JqZWN0IG9yIGFuIGludGVybmFsIGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gc2VhcmNoRmlsdGVyIEZpbHRlciBmdW5jdGlvbiB0byBjaGVjayBzdWJvYmplY3RzIGFnYWluc3QuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kSW5SZWFjdFRyZWUodHJlZSwgc2VhcmNoRmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEluVHJlZSh0cmVlLCBzZWFyY2hGaWx0ZXIsIHt3YWxrYWJsZTogW1wicHJvcHNcIiwgXCJjaGlsZHJlblwiLCBcInJldHVyblwiLCBcInN0YXRlTm9kZVwiXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRSZWFjdEluc3RhbmNlKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZS5fX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQpIHJldHVybiBub2RlLl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJDtcclxuICAgICAgICByZXR1cm4gbm9kZVtPYmplY3Qua2V5cyhub2RlKS5maW5kKGsgPT4gay5zdGFydHNXaXRoKFwiX19yZWFjdEludGVybmFsSW5zdGFuY2VcIikpXSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEdyYWJzIGEgdmFsdWUgZnJvbSB0aGUgcmVhY3QgaW50ZXJuYWwgaW5zdGFuY2UuIEFsbG93cyB5b3UgdG8gZ3JhYlxyXG5cdCAqIGxvbmcgZGVwdGggdmFsdWVzIHNhZmVseSB3aXRob3V0IGFjY2Vzc2luZyBubyBsb25nZXIgdmFsaWQgcHJvcGVydGllcy5cclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byBvYnRhaW4gcmVhY3QgaW5zdGFuY2Ugb2ZcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgZm9yIHRoZSBzZWFyY2hcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBbb3B0aW9ucy5pbmNsdWRlXSAtIGxpc3Qgb2YgaXRlbXMgdG8gaW5jbHVkZSBmcm9tIHRoZSBzZWFyY2hcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBbb3B0aW9ucy5leGNsdWRlPVtcIlBvcG91dFwiLCBcIlRvb2x0aXBcIiwgXCJTY3JvbGxlclwiLCBcIkJhY2tncm91bmRGbGFzaFwiXV0gLSBsaXN0IG9mIGl0ZW1zIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgc2VhcmNoXHJcblx0ICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMuZmlsdGVyPV89Pl9dIC0gZmlsdGVyIHRvIGNoZWNrIHRoZSBjdXJyZW50IGluc3RhbmNlIHdpdGggKHNob3VsZCByZXR1cm4gYSBib29sZWFuKVxyXG5cdCAqIEByZXR1cm4geygqfG51bGwpfSB0aGUgb3duZXIgaW5zdGFuY2Ugb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0T3duZXJJbnN0YW5jZShub2RlLCB7aW5jbHVkZSwgZXhjbHVkZSA9IFtcIlBvcG91dFwiLCBcIlRvb2x0aXBcIiwgXCJTY3JvbGxlclwiLCBcIkJhY2tncm91bmRGbGFzaFwiXSwgZmlsdGVyID0gXyA9PiBffSA9IHt9KSB7XHJcblx0XHRpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgZXhjbHVkaW5nID0gaW5jbHVkZSA9PT0gdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgbmFtZUZpbHRlciA9IGV4Y2x1ZGluZyA/IGV4Y2x1ZGUgOiBpbmNsdWRlO1xyXG5cdFx0ZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUob3duZXIpIHtcclxuXHRcdFx0Y29uc3QgdHlwZSA9IG93bmVyLnR5cGU7XHJcblx0XHRcdGlmICghdHlwZSkgcmV0dXJuIG51bGw7XHJcblx0XHRcdHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xyXG5cdFx0fVxyXG5cdFx0ZnVuY3Rpb24gY2xhc3NGaWx0ZXIob3duZXIpIHtcclxuXHRcdFx0Y29uc3QgbmFtZSA9IGdldERpc3BsYXlOYW1lKG93bmVyKTtcclxuXHRcdFx0cmV0dXJuIChuYW1lICE9PSBudWxsICYmICEhKG5hbWVGaWx0ZXIuaW5jbHVkZXMobmFtZSkgXiBleGNsdWRpbmcpKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY3VyciA9IHRoaXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxuXHRcdGZvciAoY3VyciA9IGN1cnIgJiYgY3Vyci5yZXR1cm47IGN1cnIgIT09IG51bGw7IGN1cnIgPSBjdXJyLnJldHVybikge1xyXG5cdFx0XHRpZiAoY3VyciA9PT0gbnVsbCkgY29udGludWU7XHJcblx0XHRcdGNvbnN0IG93bmVyID0gY3Vyci5zdGF0ZU5vZGU7XHJcblx0XHRcdGlmIChjdXJyICE9PSBudWxsICYmICEob3duZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiYgY2xhc3NGaWx0ZXIoY3VycikgJiYgZmlsdGVyKG93bmVyKSkgcmV0dXJuIG93bmVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/utilities.js\n"); /***/ }), @@ -767,19 +767,19 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ServerCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass ServerCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n if (!this.props.server.iconUrl) this.props.server.iconUrl = this.props.fallback;\n this.state = {\n imageError: false,\n joined: this.props.guildList.includes(this.props.server.identifier)\n };\n }\n\n render() {\n const {\n server\n } = this.props;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", // cardPrimary-1Hv-to\n {\n className: `card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${server.pinned ? \" bd-server-card-pinned\" : \"\"}`\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n ref: \"img\",\n className: \"bd-server-image\",\n src: server.iconUrl,\n onError: this.handleError.bind(this)\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flexChild-faoVW3 bd-server-content\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"h5\", {\n className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name\"\n }, server.name), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"h5\", {\n className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count\"\n }, server.members, \" Members\")), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"scroller-2FKFPG scroller bd-server-description\"\n }, server.description))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flexChild-faoVW3 bd-server-tags\",\n style: {\n flex: \"1 1 auto\"\n }\n }, server.categories.join(\", \")), this.state.joined && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\",\n backgroundColor: \"#3ac15c\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Joined\")), server.error && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\",\n backgroundColor: \"#c13a3a\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Error\")), !server.error && !this.state.joined && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\"\n },\n onClick: () => {\n this.join();\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Join\")))) // )\n );\n }\n\n handleError() {\n this.props.server.iconUrl = this.props.fallback;\n this.setState({\n imageError: true\n });\n }\n\n join() {\n this.props.join(this); //this.setState({joined: true});\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvY2FyZC5qcz9mMjgxIl0sIm5hbWVzIjpbIlNlcnZlckNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzZXJ2ZXIiLCJpY29uVXJsIiwiZmFsbGJhY2siLCJzdGF0ZSIsImltYWdlRXJyb3IiLCJqb2luZWQiLCJndWlsZExpc3QiLCJpbmNsdWRlcyIsImlkZW50aWZpZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicGlubmVkIiwicmVmIiwic3JjIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiYmluZCIsIm5hbWUiLCJtZW1iZXJzIiwiZGVzY3JpcHRpb24iLCJzdHlsZSIsImZsZXgiLCJjYXRlZ29yaWVzIiwiam9pbiIsInR5cGUiLCJtaW5IZWlnaHQiLCJtYXJnaW5Ub3AiLCJiYWNrZ3JvdW5kQ29sb3IiLCJlcnJvciIsIm9uQ2xpY2siLCJzZXRTdGF0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNQSxVQUFOLFNBQXlCQyw2Q0FBSyxDQUFDQyxTQUEvQixDQUF5QztBQUNwREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsUUFBSSxDQUFDLEtBQUtBLEtBQUwsQ0FBV0MsTUFBWCxDQUFrQkMsT0FBdkIsRUFBZ0MsS0FBS0YsS0FBTCxDQUFXQyxNQUFYLENBQWtCQyxPQUFsQixHQUE0QixLQUFLRixLQUFMLENBQVdHLFFBQXZDO0FBQ2hDLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxnQkFBVSxFQUFFLEtBREg7QUFFVEMsWUFBTSxFQUFFLEtBQUtOLEtBQUwsQ0FBV08sU0FBWCxDQUFxQkMsUUFBckIsQ0FBOEIsS0FBS1IsS0FBTCxDQUFXQyxNQUFYLENBQWtCUSxVQUFoRDtBQUZDLEtBQWI7QUFJSDs7QUFFREMsUUFBTSxHQUFHO0FBQ0wsVUFBTTtBQUFDVDtBQUFELFFBQVcsS0FBS0QsS0FBdEI7QUFDQSxXQUFPSCw2Q0FBSyxDQUFDYyxhQUFOLENBQ0gsS0FERyxFQUNJO0FBQ1A7QUFBQ0MsZUFBUyxFQUFHLHFFQUFvRVgsTUFBTSxDQUFDWSxNQUFQLEdBQWdCLHdCQUFoQixHQUEyQyxFQUFHO0FBQS9ILEtBRkcsRUFHQ2hCLDZDQUFLLENBQUNjLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0csU0FBRyxFQUFFLEtBQU47QUFBYUYsZUFBUyxFQUFFLGlCQUF4QjtBQUEyQ0csU0FBRyxFQUFFZCxNQUFNLENBQUNDLE9BQXZEO0FBQWdFYyxhQUFPLEVBQUUsS0FBS0MsV0FBTCxDQUFpQkMsSUFBakIsQ0FBc0IsSUFBdEI7QUFBekUsS0FBM0IsQ0FIRCxFQUlDckIsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0lmLDZDQUFLLENBQUNjLGFBQU4sQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJZiw2Q0FBSyxDQUFDYyxhQUFOLENBQ0ksSUFESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSVgsTUFBTSxDQUFDa0IsSUFIWCxDQUhKLEVBUUl0Qiw2Q0FBSyxDQUFDYyxhQUFOLENBQ0ksSUFESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSVgsTUFBTSxDQUFDbUIsT0FIWCxFQUlJLFVBSkosQ0FSSixDQUhKLEVBa0JJdkIsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0lmLDZDQUFLLENBQUNjLGFBQU4sQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJZiw2Q0FBSyxDQUFDYyxhQUFOLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHUVgsTUFBTSxDQUFDb0IsV0FIZixDQUhKLENBSEosQ0FsQkosRUErQkl4Qiw2Q0FBSyxDQUFDYyxhQUFOLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSWYsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsaUNBQVo7QUFBK0NVLFdBQUssRUFBRTtBQUFDQyxZQUFJLEVBQUU7QUFBUDtBQUF0RCxLQUZKLEVBR0l0QixNQUFNLENBQUN1QixVQUFQLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUhKLENBSEosRUFRSSxLQUFLckIsS0FBTCxDQUFXRSxNQUFYLElBQXFCVCw2Q0FBSyxDQUFDYyxhQUFOLENBQ2pCLFFBRGlCLEVBRWpCO0FBQUNlLFVBQUksRUFBRSxRQUFQO0FBQWlCZCxlQUFTLEVBQUUsZ0dBQTVCO0FBQThIVSxXQUFLLEVBQUU7QUFBQ0ssaUJBQVMsRUFBRSxNQUFaO0FBQW9CQyxpQkFBUyxFQUFFLEtBQS9CO0FBQXNDQyx1QkFBZSxFQUFFO0FBQXZEO0FBQXJJLEtBRmlCLEVBR2pCaEMsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksUUFISixDQUhpQixDQVJ6QixFQWlCSVgsTUFBTSxDQUFDNkIsS0FBUCxJQUFnQmpDLDZDQUFLLENBQUNjLGFBQU4sQ0FDWixRQURZLEVBRVo7QUFBQ2UsVUFBSSxFQUFFLFFBQVA7QUFBaUJkLGVBQVMsRUFBRSw4RkFBNUI7QUFBNEhVLFdBQUssRUFBRTtBQUFDSyxpQkFBUyxFQUFFLE1BQVo7QUFBb0JDLGlCQUFTLEVBQUUsS0FBL0I7QUFBc0NDLHVCQUFlLEVBQUU7QUFBdkQ7QUFBbkksS0FGWSxFQUdaaEMsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksT0FISixDQUhZLENBakJwQixFQTBCSSxDQUFDWCxNQUFNLENBQUM2QixLQUFSLElBQWlCLENBQUMsS0FBSzFCLEtBQUwsQ0FBV0UsTUFBN0IsSUFBdUNULDZDQUFLLENBQUNjLGFBQU4sQ0FDbkMsUUFEbUMsRUFFbkM7QUFBQ2UsVUFBSSxFQUFFLFFBQVA7QUFBaUJkLGVBQVMsRUFBRSw4RUFBNUI7QUFBNEdVLFdBQUssRUFBRTtBQUFDSyxpQkFBUyxFQUFFLE1BQVo7QUFBb0JDLGlCQUFTLEVBQUU7QUFBL0IsT0FBbkg7QUFBMEpHLGFBQU8sRUFBRSxNQUFNO0FBQUMsYUFBS04sSUFBTDtBQUFhO0FBQXZMLEtBRm1DLEVBR25DNUIsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksTUFISixDQUhtQyxDQTFCM0MsQ0EvQkosQ0FKRCxDQXdFSDtBQXhFRyxLQUFQO0FBMEVIOztBQUVESyxhQUFXLEdBQUc7QUFDVixTQUFLakIsS0FBTCxDQUFXQyxNQUFYLENBQWtCQyxPQUFsQixHQUE0QixLQUFLRixLQUFMLENBQVdHLFFBQXZDO0FBQ0EsU0FBSzZCLFFBQUwsQ0FBYztBQUFDM0IsZ0JBQVUsRUFBRTtBQUFiLEtBQWQ7QUFDSDs7QUFFRG9CLE1BQUksR0FBRztBQUNILFNBQUt6QixLQUFMLENBQVd5QixJQUFYLENBQWdCLElBQWhCLEVBREcsQ0FFSDtBQUNIOztBQWhHbUQiLCJmaWxlIjoiLi9zcmMvdWkvcHVibGljc2VydmVycy9jYXJkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcnZlckNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpbWFnZUVycm9yOiBmYWxzZSxcclxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXJ2ZXJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGBjYXJkLTNRal9ZeCBjYXJkUHJpbWFyeS0xSHYtdG8gbWFyZ2luQm90dG9tOC1BdFpPZFQgYmQtc2VydmVyLWNhcmQke3NlcnZlci5waW5uZWQgPyBcIiBiZC1zZXJ2ZXItY2FyZC1waW5uZWRcIiA6IFwiXCJ9YH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpfSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4Q2hpbGQtZmFvVlczIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbWVtYmVyLWNvdW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXkgYmQtc2VydmVyLWRlc2NyaXB0aW9uLWNvbnRhaW5lclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNhdGVnb3JpZXMuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcclxuICAgICAgICAvL3RoaXMuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/publicservers/card.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ServerCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _manager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./manager */ \"./src/ui/publicservers/manager.js\");\n\n\nclass ServerCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n if (!this.props.server.iconUrl) this.props.server.iconUrl = _manager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDefaultAvatar();\n this.state = {\n imageError: false,\n joined: _manager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].hasJoined(this.props.server.identifier)\n };\n }\n\n render() {\n const {\n server\n } = this.props;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", // cardPrimary-1Hv-to\n {\n className: `card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${server.pinned ? \" bd-server-card-pinned\" : \"\"}`\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n ref: \"img\",\n className: \"bd-server-image\",\n src: server.iconUrl,\n onError: this.handleError.bind(this)\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flexChild-faoVW3 bd-server-content\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"h5\", {\n className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name\"\n }, server.name), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"h5\", {\n className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count\"\n }, server.members, \" Members\")), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"scroller-2FKFPG scroller bd-server-description\"\n }, server.description))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"flexChild-faoVW3 bd-server-tags\",\n style: {\n flex: \"1 1 auto\"\n }\n }, server.categories.join(\", \")), this.state.joined && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\",\n backgroundColor: \"#3ac15c\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, typeof this.state.joined == \"string\" ? \"Joining...\" : \"Joined\")), server.error && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\",\n backgroundColor: \"#c13a3a\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Error\")), !server.error && !this.state.joined && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN\",\n style: {\n minHeight: \"12px\",\n marginTop: \"4px\"\n },\n onClick: () => {\n this.join();\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Join\")))) // )\n );\n }\n\n handleError() {\n this.props.server.iconUrl = _manager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDefaultAvatar();\n this.setState({\n imageError: true\n });\n }\n\n async join() {\n this.setState({\n joined: \"joining\"\n });\n const didJoin = await _manager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].join(this.props.server.identifier, this.props.server.nativejoin);\n this.setState({\n joined: didJoin\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvY2FyZC5qcz9mMjgxIl0sIm5hbWVzIjpbIlNlcnZlckNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzZXJ2ZXIiLCJpY29uVXJsIiwiTWFuYWdlciIsImdldERlZmF1bHRBdmF0YXIiLCJzdGF0ZSIsImltYWdlRXJyb3IiLCJqb2luZWQiLCJoYXNKb2luZWQiLCJpZGVudGlmaWVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInBpbm5lZCIsInJlZiIsInNyYyIsIm9uRXJyb3IiLCJoYW5kbGVFcnJvciIsImJpbmQiLCJuYW1lIiwibWVtYmVycyIsImRlc2NyaXB0aW9uIiwic3R5bGUiLCJmbGV4IiwiY2F0ZWdvcmllcyIsImpvaW4iLCJ0eXBlIiwibWluSGVpZ2h0IiwibWFyZ2luVG9wIiwiYmFja2dyb3VuZENvbG9yIiwiZXJyb3IiLCJvbkNsaWNrIiwic2V0U3RhdGUiLCJkaWRKb2luIiwibmF0aXZlam9pbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsTUFBTUEsVUFBTixTQUF5QkMsNkNBQUssQ0FBQ0MsU0FBL0IsQ0FBeUM7QUFDcERDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFFBQUksQ0FBQyxLQUFLQSxLQUFMLENBQVdDLE1BQVgsQ0FBa0JDLE9BQXZCLEVBQWdDLEtBQUtGLEtBQUwsQ0FBV0MsTUFBWCxDQUFrQkMsT0FBbEIsR0FBNEJDLGdEQUFPLENBQUNDLGdCQUFSLEVBQTVCO0FBQ2hDLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxnQkFBVSxFQUFFLEtBREg7QUFFVEMsWUFBTSxFQUFFSixnREFBTyxDQUFDSyxTQUFSLENBQWtCLEtBQUtSLEtBQUwsQ0FBV0MsTUFBWCxDQUFrQlEsVUFBcEM7QUFGQyxLQUFiO0FBSUg7O0FBRURDLFFB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QUhZLENBakJwQixFQTBCSSxDQUFDWCxNQUFNLENBQUM2QixLQUFSLElBQWlCLENBQUMsS0FBS3pCLEtBQUwsQ0FBV0UsTUFBN0IsSUFBdUNWLDZDQUFLLENBQUNjLGFBQU4sQ0FDbkMsUUFEbUMsRUFFbkM7QUFBQ2UsVUFBSSxFQUFFLFFBQVA7QUFBaUJkLGVBQVMsRUFBRSw4RUFBNUI7QUFBNEdVLFdBQUssRUFBRTtBQUFDSyxpQkFBUyxFQUFFLE1BQVo7QUFBb0JDLGlCQUFTLEVBQUU7QUFBL0IsT0FBbkg7QUFBMEpHLGFBQU8sRUFBRSxNQUFNO0FBQUMsYUFBS04sSUFBTDtBQUFhO0FBQXZMLEtBRm1DLEVBR25DNUIsNkNBQUssQ0FBQ2MsYUFBTixDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksTUFISixDQUhtQyxDQTFCM0MsQ0EvQkosQ0FKRCxDQXdFSDtBQXhFRyxLQUFQO0FBMEVIOztBQUVESyxhQUFXLEdBQUc7QUFDVixTQUFLakIsS0FBTCxDQUFXQyxNQUFYLENBQWtCQyxPQUFsQixHQUE0QkMsZ0RBQU8sQ0FBQ0MsZ0JBQVIsRUFBNUI7QUFDQSxTQUFLNEIsUUFBTCxDQUFjO0FBQUMxQixnQkFBVSxFQUFFO0FBQWIsS0FBZDtBQUNIOztBQUVELFFBQU1tQixJQUFOLEdBQWE7QUFDVCxTQUFLTyxRQUFMLENBQWM7QUFBQ3pCLFlBQU0sRUFBRTtBQUFULEtBQWQ7QUFDQSxVQUFNMEIsT0FBTyxHQUFHLE1BQU05QixnREFBTyxDQUFDc0IsSUFBUixDQUFhLEtBQUt6QixLQUFMLENBQVdDLE1BQVgsQ0FBa0JRLFVBQS9CLEVBQTJDLEtBQUtULEtBQUwsQ0FBV0MsTUFBWCxDQUFrQmlDLFVBQTdELENBQXRCO0FBQ0EsU0FBS0YsUUFBTCxDQUFjO0FBQUN6QixZQUFNLEVBQUUwQjtBQUFULEtBQWQ7QUFDSDs7QUFqR21EIiwiZmlsZSI6Ii4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvY2FyZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3R9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBNYW5hZ2VyIGZyb20gXCIuL21hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcnZlckNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gTWFuYWdlci5nZXREZWZhdWx0QXZhdGFyKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaW1hZ2VFcnJvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGpvaW5lZDogTWFuYWdlci5oYXNKb2luZWQodGhpcy5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2VydmVyfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIC8vIGNhcmRQcmltYXJ5LTFIdi10b1xyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgY2FyZC0zUWpfWXggY2FyZFByaW1hcnktMUh2LXRvIG1hcmdpbkJvdHRvbTgtQXRaT2RUIGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7cmVmOiBcImltZ1wiLCBjbGFzc05hbWU6IFwiYmQtc2VydmVyLWltYWdlXCIsIHNyYzogc2VydmVyLmljb25VcmwsIG9uRXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKX0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItY29udGVudFwifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW5hbWVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZih0aGlzLnN0YXRlLmpvaW5lZCkgPT0gXCJzdHJpbmdcIiA/IFwiSm9pbmluZy4uLlwiIDogXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSBNYW5hZ2VyLmdldERlZmF1bHRBdmF0YXIoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbigpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtqb2luZWQ6IFwiam9pbmluZ1wifSk7XHJcbiAgICAgICAgY29uc3QgZGlkSm9pbiA9IGF3YWl0IE1hbmFnZXIuam9pbih0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyLCB0aGlzLnByb3BzLnNlcnZlci5uYXRpdmVqb2luKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtqb2luZWQ6IGRpZEpvaW59KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/publicservers/card.js\n"); /***/ }), -/***/ "./src/ui/publicservers/exitbutton.js": -/*!********************************************!*\ - !*** ./src/ui/publicservers/exitbutton.js ***! - \********************************************/ +/***/ "./src/ui/publicservers/manager.js": +/*!*****************************************!*\ + !*** ./src/ui/publicservers/manager.js ***! + \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Tools; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n\n\nclass Tools extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"tools-container toolsContainer-1edPuj\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"tools tools-3-3s-N\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"container-1sFeqf\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"btn-close closeButton-1tv5uR\",\n onClick: this.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"esc-text keybind-KpFkfr\"\n }, \"ESC\"))));\n }\n\n onClick() {\n if (this.props.onClick) {\n this.props.onClick();\n }\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvZXhpdGJ1dHRvbi5qcz9lMjY1Il0sIm5hbWVzIjpbIlRvb2xzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwib25DbGljayIsImJpbmQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiQ2xvc2VCdXR0b24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLE1BQU1BLEtBQU4sU0FBb0JDLDZDQUFLLENBQUNDLFNBQTFCLENBQW9DO0FBRS9DQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhQyxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDSDs7QUFFREMsUUFBTSxHQUFHO0FBQ0wsV0FBT04sNkNBQUssQ0FBQ08sYUFBTixDQUFvQixLQUFwQixFQUEyQjtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUEzQixFQUNIUiw2Q0FBSyxDQUFDTyxhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTNCLEVBQ0lSLDZDQUFLLENBQUNPLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBM0IsRUFDSVIsNkNBQUssQ0FBQ08sYUFBTixDQUFvQixLQUFwQixFQUNJO0FBQUNDLGVBQVMsRUFBRSw4QkFBWjtBQUE0Q0osYUFBTyxFQUFFLEtBQUtBO0FBQTFELEtBREosRUFFSUosNkNBQUssQ0FBQ08sYUFBTixDQUFvQkUsb0RBQXBCLEVBQWlDLElBQWpDLENBRkosQ0FESixFQUtJVCw2Q0FBSyxDQUFDTyxhQUFOLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxLQUhKLENBTEosQ0FESixDQURHLENBQVA7QUFlSDs7QUFFREosU0FBTyxHQUFHO0FBQ04sUUFBSSxLQUFLRCxLQUFMLENBQVdDLE9BQWYsRUFBd0I7QUFDcEIsV0FBS0QsS0FBTCxDQUFXQyxPQUFYO0FBQ0g7QUFDSjs7QUE3QjhDIiwiZmlsZSI6Ii4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvZXhpdGJ1dHRvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3R9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvb2xzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scy1jb250YWluZXIgdG9vbHNDb250YWluZXItMWVkUHVqXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgdG9vbHMtMy0zcy1OXCJ9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRhaW5lci0xc0ZlcWZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBjbG9zZUJ1dHRvbi0xdHY1dVJcIiwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDbG9zZUJ1dHRvbiwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZXNjLXRleHQga2V5YmluZC1LcEZrZnJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRVNDXCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/publicservers/exitbutton.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PublicServersConnection; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nconst SortedGuildStore = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getSortedGuilds\");\nconst AvatarDefaults = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\nconst InviteActions = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"acceptInvite\");\n\nconst BrowserWindow = __webpack_require__(/*! electron */ \"electron\").remote.BrowserWindow;\n\nclass PublicServersConnection {\n static get endPoint() {\n return \"https://search.discordservers.com\";\n }\n\n static get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n static get connectEndPoint() {\n return \"https://auth.discordservers.com/info\";\n }\n\n static getDefaultAvatar() {\n return AvatarDefaults.DEFAULT_AVATARS[Math.floor(Math.random() * 5)];\n }\n\n static hasJoined(id) {\n return SortedGuildStore.guildPositions.includes(id);\n }\n\n static search({\n term = \"\",\n category = \"All\",\n from = 0\n } = {}) {\n return new Promise(resolve => {\n const query = `?category=${category}&from=${from}${term ? `&term=${term}` : \"\"}`;\n $.ajax({\n method: \"GET\",\n url: `${this.endPoint}${query}`,\n success: data => {\n const next = data.size + data.from;\n resolve({\n servers: data.results,\n size: data.size,\n from: data.from,\n total: data.total,\n next: next >= data.total ? null : next\n });\n },\n error: resolve(null)\n });\n });\n }\n\n static join(id, native = false) {\n return new Promise(resolve => {\n if (native) return InviteActions.acceptInvite(id), resolve(true);\n $.ajax({\n method: \"GET\",\n url: `${this.joinEndPoint}/${id}`,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\",\n \"x-discord-token\": this._accessToken\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: () => resolve(true),\n error: () => resolve(false)\n });\n });\n }\n\n static checkConnection() {\n return new Promise(resolve => {\n try {\n $.ajax({\n method: \"GET\",\n url: this.connectEndPoint,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\"\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: data => {\n this._accessToken = data.accessToken;\n console.log(this._accessToken);\n resolve(data);\n },\n error: () => resolve(false)\n });\n } catch (error) {\n resolve(false);\n }\n });\n }\n\n static connect() {\n return new Promise(resolve => {\n const joinWindow = new BrowserWindow(this.windowOptions);\n const url = `https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;\n joinWindow.webContents.on(\"did-navigate\", (event, navUrl) => {\n if (navUrl != this.connectEndPoint) return;\n joinWindow.close();\n resolve();\n });\n joinWindow.loadURL(url);\n });\n }\n\n static get windowOptions() {\n return {\n width: 500,\n height: 550,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: false,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: false,\n center: true,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWFuYWdlci5qcz81Nzc0Il0sIm5hbWVzIjpbIlNvcnRlZEd1aWxkU3RvcmUiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJBdmF0YXJEZWZhdWx0cyIsIkludml0ZUFjdGlvbnMiLCJCcm93c2VyV2luZG93IiwicmVxdWlyZSIsInJlbW90ZSIsIlB1YmxpY1NlcnZlcnNDb25uZWN0aW9uIiwiZW5kUG9pbnQiLCJqb2luRW5kUG9pbnQiLCJjb25uZWN0RW5kUG9pbnQiLCJnZXREZWZhdWx0QXZhdGFyIiwiREVGQVVMVF9BVkFUQVJTIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiaGFzSm9pbmVkIiwiaWQiLCJndWlsZFBvc2l0aW9ucyIsImluY2x1ZGVzIiwic2VhcmNoIiwidGVybSIsImNhdGVnb3J5IiwiZnJvbSIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcnkiLCIkIiwiYWpheCIsIm1ldGhvZCIsInVybCIsInN1Y2Nlc3MiLCJkYXRhIiwibmV4dCIsInNpemUiLCJzZXJ2ZXJzIiwicmVzdWx0cyIsInRvdGFsIiwiZXJyb3IiLCJqb2luIiwibmF0aXZlIiwiYWNjZXB0SW52aXRlIiwiaGVhZGVycyIsIl9hY2Nlc3NUb2tlbiIsImNyb3NzRG9tYWluIiwieGhyRmllbGRzIiwid2l0aENyZWRlbnRpYWxzIiwiY2hlY2tDb25uZWN0aW9uIiwiYWNjZXNzVG9rZW4iLCJjb25zb2xlIiwibG9nIiwiY29ubmVjdCIsImpvaW5XaW5kb3ciLCJ3aW5kb3dPcHRpb25zIiwid2ViQ29udGVudHMiLCJvbiIsImV2ZW50IiwibmF2VXJsIiwiY2xvc2UiLCJsb2FkVVJMIiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzaG93IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiZnJhbWUiLCJjZW50ZXIiLCJ3ZWJQcmVm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QUFLcEIsZUFBZ0IsRUFBM0c7QUFDQTBDLGdCQUFVLENBQUNFLFdBQVgsQ0FBdUJDLEVBQXZCLENBQTBCLGNBQTFCLEVBQTBDLENBQUNDLEtBQUQsRUFBUUMsTUFBUixLQUFtQjtBQUN6RCxZQUFJQSxNQUFNLElBQUksS0FBSy9DLGVBQW5CLEVBQW9DO0FBQ3BDMEMsa0JBQVUsQ0FBQ00sS0FBWDtBQUNBakMsZUFBTztBQUNWLE9BSkQ7QUFLQTJCLGdCQUFVLENBQUNPLE9BQVgsQ0FBbUI3QixHQUFuQjtBQUNILEtBVE0sQ0FBUDtBQVVIOztBQUVELGFBQVd1QixhQUFYLEdBQTJCO0FBQ3ZCLFdBQU87QUFDSE8sV0FBSyxFQUFFLEdBREo7QUFFSEMsWUFBTSxFQUFFLEdBRkw7QUFHSEMscUJBQWUsRUFBRSxTQUhkO0FBSUhDLFVBQUksRUFBRSxJQUpIO0FBS0hDLGVBQVMsRUFBRSxLQUxSO0FBTUhDLGlCQUFXLEVBQUUsS0FOVjtBQU9IQyxpQkFBVyxFQUFFLEtBUFY7QUFRSEMsaUJBQVcsRUFBRSxJQVJWO0FBU0hDLFdBQUssRUFBRSxLQVRKO0FBVUhDLFlBQU0sRUFBRSxJQVZMO0FBV0hDLG9CQUFjLEVBQUU7QUFDWkMsdUJBQWUsRUFBRTtBQURMO0FBWGIsS0FBUDtBQWVIOztBQWpId0MiLCJmaWxlIjoiLi9zcmMvdWkvcHVibGljc2VydmVycy9tYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IFNvcnRlZEd1aWxkU3RvcmUgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U29ydGVkR3VpbGRzXCIpO1xyXG5jb25zdCBBdmF0YXJEZWZhdWx0cyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCIpO1xyXG5jb25zdCBJbnZpdGVBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTtcclxuXHJcbmNvbnN0IEJyb3dzZXJXaW5kb3cgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3c7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGljU2VydmVyc0Nvbm5lY3Rpb24ge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgZW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7fVxyXG4gICAgc3RhdGljIGdldCBqb2luRW5kUG9pbnQoKSB7cmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO31cclxuICAgIHN0YXRpYyBnZXQgY29ubmVjdEVuZFBvaW50KCkge3JldHVybiBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO31cclxuXHJcbiAgICBzdGF0aWMgZ2V0RGVmYXVsdEF2YXRhcigpIHtcclxuICAgICAgICByZXR1cm4gQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGFzSm9pbmVkKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIFNvcnRlZEd1aWxkU3RvcmUuZ3VpbGRQb3NpdGlvbnMuaW5jbHVkZXMoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzZWFyY2goe3Rlcm0gPSBcIlwiLCBjYXRlZ29yeSA9IFwiQWxsXCIsIGZyb20gPSAwfSA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IGA/Y2F0ZWdvcnk9JHtjYXRlZ29yeX0mZnJvbT0ke2Zyb219JHt0ZXJtID8gYCZ0ZXJtPSR7dGVybX1gIDogXCJcIn1gO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmVuZFBvaW50fSR7cXVlcnl9YCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcnM6IGRhdGEucmVzdWx0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogZGF0YS5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBkYXRhLmZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID49IGRhdGEudG90YWwgPyBudWxsIDogbmV4dFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiByZXNvbHZlKG51bGwpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBqb2luKGlkLCBuYXRpdmUgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgaWYgKG5hdGl2ZSkgcmV0dXJuIEludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlKGlkKSwgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7aWR9YCxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb247XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiICxcclxuICAgICAgICAgICAgICAgICAgICBcIngtZGlzY29yZC10b2tlblwiOiB0aGlzLl9hY2Nlc3NUb2tlblxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNyb3NzRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgeGhyRmllbGRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogKCkgPT4gcmVzb2x2ZSh0cnVlKSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy5jb25uZWN0RW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb247XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbjtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3Jvc3NEb21haW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgeGhyRmllbGRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuID0gZGF0YS5hY2Nlc3NUb2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5fYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHJlc29sdmUoZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqb2luV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3codGhpcy53aW5kb3dPcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9JHt0aGlzLmNvbm5lY3RFbmRQb2ludH1gO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgbmF2VXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2VXJsICE9IHRoaXMuY29ubmVjdEVuZFBvaW50KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBqb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBqb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IHRydWUsXHJcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/publicservers/manager.js\n"); /***/ }), @@ -791,19 +791,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PublicServers; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _exitbutton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./exitbutton */ \"./src/ui/publicservers/exitbutton.js\");\n/* harmony import */ var _tabbar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tabbar */ \"./src/ui/publicservers/tabbar.js\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./card */ \"./src/ui/publicservers/card.js\");\n\n\n\n\n\nconst AvatarDefaults = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\nconst InviteActions = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"acceptInvite\");\nconst SortedGuildStore = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"getSortedGuilds\");\nconst SettingsView = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"SettingsView\"); //SettingsView\n//onClose pop layer\n//onSetSection dispatch user settings modal set section section subsection\n//section selected one\n//sections []\n//theme dark\n\nclass PublicServers extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedCategory: \"All\",\n title: \"Loading...\",\n loading: true,\n servers: [],\n next: null,\n connection: {\n state: 0,\n user: null\n }\n };\n this.close = this.close.bind(this);\n this.changeCategory = this.changeCategory.bind(this);\n this.search = this.search.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.checkConnection = this.checkConnection.bind(this);\n this.join = this.join.bind(this);\n this.connect = this.connect.bind(this);\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n close() {\n this.props.close();\n }\n\n search(query, clear) {\n $.ajax({\n method: \"GET\",\n url: `${this.endPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`,\n success: data => {\n let servers = data.results.reduce((arr, server) => {\n server.joined = false;\n arr.push(server); // arr.push();\n\n return arr;\n }, []);\n\n if (!clear) {\n servers = this.state.servers.concat(servers);\n } else {//servers.unshift(this.bdServer);\n }\n\n console.log(data);\n let end = data.size + data.from;\n data.next = `?from=${end}`;\n if (this.state.term) data.next += `&term=${this.state.term}`;\n if (this.state.selectedCategory) data.next += `&category=${this.state.selectedCategory}`;\n\n if (end >= data.total) {\n end = data.total;\n data.next = null;\n }\n\n let title = `Showing 1-${end} of ${data.total} results in ${this.state.selectedCategory}`;\n if (this.state.term) title += ` for ${this.state.term}`;\n this.setState({\n loading: false,\n title: title,\n servers: servers,\n next: data.next\n });\n\n if (clear) {//console.log(this);\n // this.refs.sbv.refs.contentScroller.scrollTop = 0;\n }\n },\n error: () => {\n this.setState({\n loading: false,\n title: \"Failed to load servers. Check console for details\"\n });\n }\n });\n }\n\n join(serverCard) {\n if (serverCard.props.pinned) return InviteActions.acceptInvite(serverCard.props.invite_code);\n $.ajax({\n method: \"GET\",\n url: `${this.joinEndPoint}/${serverCard.props.server.identifier}`,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\",\n \"x-discord-token\": this.state.connection.user.accessToken\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: () => {\n serverCard.setState({\n joined: true\n });\n }\n });\n }\n\n connect() {\n const options = this.windowOptions;\n options.x = Math.round(window.screenX + window.innerWidth / 2 - options.width / 2);\n options.y = Math.round(window.screenY + window.innerHeight / 2 - options.height / 2);\n this.joinWindow = new (window.require(\"electron\").remote.BrowserWindow)(options);\n const url = \"https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info\";\n this.joinWindow.webContents.on(\"did-navigate\", (event, navUrl) => {\n if (navUrl != \"https://auth.discordservers.com/info\") return;\n this.joinWindow.close();\n this.checkConnection();\n });\n this.joinWindow.loadURL(url);\n }\n\n get windowOptions() {\n return {\n width: 500,\n height: 550,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: false,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: false,\n center: false,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"7500+\",\n members: \"20000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for support etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n const guildList = SortedGuildStore.guildPositions;\n const defaultList = AvatarDefaults.DEFAULT_AVATARS;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n server: server,\n pinned: true,\n join: this.join,\n guildList: guildList,\n fallback: defaultList[Math.floor(Math.random() * 5)]\n });\n }\n\n get endPoint() {\n return \"https://search.discordservers.com\";\n }\n\n get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n get connectEndPoint() {\n return \"https://join.discordservers.com/connect\";\n }\n\n checkConnection() {\n try {\n $.ajax({\n method: \"GET\",\n url: `https://auth.discordservers.com/info`,\n headers: {\n \"Accept\": \"application/json;\",\n \"Content-Type\": \"application/json;\"\n },\n crossDomain: true,\n xhrFields: {\n withCredentials: true\n },\n success: data => {\n // Utils.log(\"PublicServer\", \"Got data: \" + JSON.stringify(data));\n this.setState({\n selectedCategory: \"All\",\n connection: {\n state: 2,\n user: data\n }\n });\n this.search(\"\", true);\n },\n error: () => {\n this.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: \"All\",\n connection: {\n state: 1,\n user: null\n }\n });\n }\n });\n } catch (error) {\n this.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: \"All\",\n connection: {\n state: 1,\n user: null\n }\n });\n }\n } //SettingsView\n //onClose pop layer\n //onSetSection dispatch user settings modal set section section subsection\n //section selected one\n //sections []\n //theme dark\n\n\n render() {\n const categories = this.categoryButtons.map(name => {\n const section = {\n section: name,\n //.toLowerCase().replace(\" \", \"_\"),\n label: name //element: () => name == \"All\" ? this.content : null\n\n };\n if (name == \"All\") section.element = () => this.content; // else section.onClick = () => this.changeCategory(name);\n\n return section;\n });\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(SettingsView, {\n onClose: this.close,\n onSetSection: (e, ee, eee) => {\n console.log(e, ee, eee);\n this.changeCategory(e);\n },\n section: this.state.selectedCategory,\n sections: [{\n section: \"HEADER\",\n label: \"Public Servers\"\n }, {\n section: \"CUSTOM\",\n element: () => this.searchInput\n }, {\n section: \"HEADER\",\n label: \"Categories\"\n }, ...categories],\n theme: \"dark\"\n }); // return React.createElement(StandardSidebarView, {id: \"pubslayer\", ref: \"sbv\", notice: null, theme: \"dark\", closeAction: this.close, content: this.content, sidebar: this.sidebar});\n }\n\n get component() {\n return {\n sidebar: {\n component: this.sidebar\n },\n content: {\n component: this.content\n },\n tools: {\n component: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_exitbutton__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n key: \"pt\",\n ref: \"tools\",\n onClick: this.close\n })\n }\n };\n }\n\n get sidebar() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-tab-bar SIDE\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-tab-bar-header\",\n style: {\n fontSize: \"16px\"\n }\n }, \"Public Servers\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Separator, null), this.searchInput, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Separator, null), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Header, {\n text: \"Categories\"\n }), this.categoryButtons.map((value, index) => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Item, {\n id: index,\n onClick: this.changeCategory,\n key: index,\n text: value,\n selected: this.state.selectedCategory === index\n });\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Separator, null), this.footer, this.connection);\n }\n\n get searchInput() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-form-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-text-input flex-vertical\",\n style: {\n width: \"172px\",\n marginLeft: \"10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n onKeyDown: this.searchKeyDown,\n onChange: () => {},\n type: \"text\",\n className: \"input default\",\n placeholder: \"Search...\",\n maxLength: \"50\"\n })));\n }\n\n searchKeyDown(e) {\n if (this.state.loading || e.which !== 13) return;\n this.setState({\n loading: true,\n title: \"Loading...\",\n term: e.target.value\n });\n let query = `?term=${e.target.value}`;\n\n if (this.state.selectedCategory !== 0) {\n query += `&category=${this.state.selectedCategory}`;\n }\n\n this.search(query, true);\n }\n\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n changeCategory(id) {\n if (this.state.loading) return; // this.refs.searchinput.value = \"\";\n\n this.setState({\n loading: true,\n selectedCategory: id,\n title: \"Loading...\",\n term: null\n });\n\n if (id === 0) {\n this.search(\"\", true);\n return;\n }\n\n this.search(`?category=${this.state.selectedCategory.replace(\" \", \"%20\")}`, true);\n }\n\n get content() {\n const guildList = SortedGuildStore.guildPositions;\n const defaultList = AvatarDefaults.DEFAULT_AVATARS;\n if (this.state.connection.state === 1) return this.notConnected;\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: this.state.title\n }), this.state.selectedCategory == \"All\" && this.bdServer, this.state.servers.map(server => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: server.identifier,\n server: server,\n join: this.join,\n guildList: guildList,\n fallback: defaultList[Math.floor(Math.random() * 5)]\n });\n }), this.state.next && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n onClick: () => {\n if (this.state.loading) return;\n this.setState({\n loading: true\n });\n this.search(this.state.next, false);\n },\n className: \"ui-button filled brand small grow\",\n style: {\n width: \"100%\",\n marginTop: \"10px\",\n marginBottom: \"10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, this.state.loading ? \"Loading\" : \"Load More\")), this.state.servers.length > 0 && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: this.state.title\n })];\n }\n\n get notConnected() {\n //return React.createElement(SettingsTitle, { text: this.state.title });\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"h2\", {\n className: \"ui-form-title h2 margin-reset margin-bottom-20\"\n }, \"Not connected to discordservers.com!\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.connect,\n type: \"button\",\n className: \"ui-button filled brand small grow\",\n style: {\n display: \"inline-block\",\n minHeight: \"18px\",\n marginLeft: \"10px\",\n lineHeight: \"14px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, \"Connect\"))), this.bdServer];\n }\n\n get footer() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-tab-bar-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n href: \"https://discordservers.com\",\n target: \"_blank\"\n }, \"Discordservers.com\"));\n }\n\n get connection() {\n const {\n connection\n } = this.state;\n if (connection.state !== 2) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", null);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", null, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_tabbar__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Separator, null), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n style: {\n color: \"#b9bbbe\",\n fontSize: \"10px\",\n marginLeft: \"10px\"\n }\n }, \"Connected as: \", `${connection.user.username}#${connection.user.discriminator}`), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n style: {\n padding: \"5px 10px 0 10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n style: {\n width: \"100%\",\n minHeight: \"20px\"\n },\n type: \"button\",\n className: \"ui-button filled brand small grow\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\",\n onClick: this.connect\n }, \"Reconnect\"))));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWVudS5qcz85YWNkIl0sIm5hbWVzIjpbIkF2YXRhckRlZmF1bHRzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiSW52aXRlQWN0aW9ucyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJTZXR0aW5nc1ZpZXciLCJnZXRCeURpc3BsYXlOYW1lIiwiUHVibGljU2VydmVycyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwic2VsZWN0ZWRDYXRlZ29yeSIsInRpdGxlIiwibG9hZGluZyIsInNlcnZlcnMiLCJuZXh0IiwiY29ubmVjdGlvbiIsInVzZXIiLCJjbG9zZSIsImJpbmQiLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaCIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJqb2luIiwiY29ubmVjdCIsImNvbXBvbmVudERpZE1vdW50IiwicXVlcnkiLCJjbGVhciIsIiQiLCJhamF4IiwibWV0aG9kIiwidXJsIiwiZW5kUG9pbnQiLCJzdWNjZXNzIiwiZGF0YSIsInJlc3VsdHMiLCJyZWR1Y2UiLCJhcnIiLCJzZXJ2ZXIiLCJqb2luZWQiLCJwdXNoIiwiY29uY2F0IiwiY29uc29sZSIsImxvZyIsImVuZCIsInNpemUiLCJmcm9tIiwidGVybSIsInRvdGFsIiwic2V0U3RhdGUiLCJlcnJvciIsInNlcnZlckNhcmQiLCJwaW5uZWQiLCJhY2NlcHRJbnZpdGUiLCJpbnZpdGVfY29kZSIsImpvaW5FbmRQb2ludCIsImlkZW50aWZpZXIiLCJoZWFkZXJzIiwiYWNjZXNzVG9rZW4iLCJjcm9zc0RvbWFpbiIsInhockZpZWxkcyIsIndpdGhDcmVkZW50aWFscyIsIm9wdGlvbnMiLCJ3aW5kb3dPcHRpb25zIiwieCIsIk1hdGgiLCJyb3VuZCIsIndpbmRvdyIsInNjcmVlblgiLCJpbm5lcldpZHRoIiwid2lkdGgiLCJ5Iiwic2NyZWVuWSIsImlubmVySGVpZ2h0IiwiaGVpZ2h0Iiwiam9pbldpbmRvdyIsInJlcXVpcmUiLCJyZW1vdGUiLCJCcm93c2VyV2luZG93Iiwid2ViQ29udGVudHMiLCJvbiIsImV2ZW50IiwibmF2VXJsIiwibG9hZFVSTCIsImJhY2tncm91bmRDb2xvciIsInNob3ciLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25Ub3AiLCJmcmFtZSIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJuYW1lIiwib25saW5lIiwibWVtYmVycyIsImNhdGVnb3JpZXMiLCJkZXNjcmlwdGlvbiIsImljb25VcmwiLCJuYXRpdmVqb2luIiwiZ3VpbGRMaXN0IiwiZ3VpbGRQb3NpdGlvbnMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsImNyZWF0ZUVsZW1lbnQiLCJTZXJ2ZXJDYXJkIiwiZmFsbGJhY2siLCJmbG9vciIsInJhbmRvbSIsImNvbm5lY3RFbmRQb2ludCIsInJlbmRlciIsImNhdGVnb3J5QnV0dG9ucyIsIm1hcCIsInNlY3Rpb24iLCJsYWJlbCIsImVsZW1lbnQiLCJjb250ZW50Iiwib25DbG9zZSIsIm9uU2V0U2VjdGlvbiIsImUiLCJlZSIsImVlZSIsInNlY3Rpb25zIiwic2VhcmNoSW5wdXQiLCJ0aGVtZSIsImNvbXBvbmVudCIsInNpZGViYXIiLCJ0b29scyIsIlRvb2xzIiwia2V5IiwicmVmIiwib25DbGljayIsImNsYXNzTmFtZSIsInN0eWxlIiwiZm9udFNpemUiLCJUYWJCYXIiLCJTZXBhcmF0b3IiLCJIZWFkZXIiLCJ0ZXh0IiwidmFsdWUiLCJpbmRleCIsIkl0ZW0iLCJpZCIsInNlbGVjdGVkIiwiZm9vdGVyIiwibWFyZ2luTGVmdCIsIm9uS2V5RG93biIsIm9uQ2hhbmdlIiwidHlwZSIsInBsYWNlaG9sZGVyIiwibWF4TGVuZ3RoIiwid2hpY2giLCJ0YXJnZXQiLCJyZXBsYWNlIiwibm90Q29ubmVjdGVkIiwiU2V0dGluZ3NUaXRsZSIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImxlbmd0aCIsImRpc3BsYXkiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiaHJlZiIsImNvbG9yIiwidXNlcm5hbWUiLCJkaXNjcmltaW5hdG9yIiwicGFkZGluZyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsY0FBYyxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLGtCQUExQixFQUE4QyxpQkFBOUMsQ0FBdkI7QUFDQSxNQUFNQyxhQUFhLEdBQUdGLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsY0FBMUIsQ0FBdEI7QUFDQSxNQUFNRSxnQkFBZ0IsR0FBR0gsc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixpQkFBMUIsQ0FBekI7QUFDQSxNQUFNRyxZQUFZLEdBQUdKLHNEQUFjLENBQUNLLGdCQUFmLENBQWdDLGNBQWhDLENBQXJCLEMsQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsTUFBTUMsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFFdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxzQkFBZ0IsRUFBRSxLQURUO0FBRVRDLFdBQUssRUFBRSxZQUZFO0FBR1RDLGFBQU8sRUFBRSxJQUhBO0FBSVRDLGFBQU8sRUFBRSxFQUpBO0FBS1RDLFVBQUksRUFBRSxJQUxHO0FBTVRDLGdCQUFVLEVBQUU7QUFDUk4sYUFBSyxFQUFFLENBREM7QUFFUk8sWUFBSSxFQUFFO0FBRkU7QUFOSCxLQUFiO0FBV0EsU0FBS0MsS0FBTCxHQUFhLEtBQUtBLEtBQUwsQ0FBV0MsSUFBWCxDQUFnQixJQUFoQixDQUFiO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUFLQSxjQUFMLENBQW9CRCxJQUFwQixDQUF5QixJQUF6QixD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LEVBQTRCLE9BQU9KLDZDQUFLLENBQUNxRyxhQUFOLENBQW9CLE1BQXBCLEVBQTRCLElBQTVCLENBQVA7QUFFNUIsV0FBT3JHLDZDQUFLLENBQUNxRyxhQUFOLENBQ0gsTUFERyxFQUVILElBRkcsRUFHSHJHLDZDQUFLLENBQUNxRyxhQUFOLENBQW9CK0IsK0NBQU0sQ0FBQ0MsU0FBM0IsRUFBc0MsSUFBdEMsQ0FIRyxFQUlIckksNkNBQUssQ0FBQ3FHLGFBQU4sQ0FDSSxNQURKLEVBRUk7QUFBQzZCLFdBQUssRUFBRTtBQUFDOEIsYUFBSyxFQUFFLFNBQVI7QUFBbUI3QixnQkFBUSxFQUFFLE1BQTdCO0FBQXFDVyxrQkFBVSxFQUFFO0FBQWpEO0FBQVIsS0FGSixFQUdJLGdCQUhKLEVBSUssR0FBRXBJLFVBQVUsQ0FBQ0MsSUFBWCxDQUFnQnNKLFFBQVMsSUFBR3ZKLFVBQVUsQ0FBQ0MsSUFBWCxDQUFnQnVKLGFBQWMsRUFKakUsQ0FKRyxFQVVIbEssNkNBQUssQ0FBQ3FHLGFBQU4sQ0FDSSxLQURKLEVBRUk7QUFBQzZCLFdBQUssRUFBRTtBQUFDaUMsZUFBTyxFQUFFO0FBQVY7QUFBUixLQUZKLEVBR0luSyw2Q0FBSyxDQUFDcUcsYUFBTixDQUNJLFFBREosRUFFSTtBQUFDNkIsV0FBSyxFQUFFO0FBQUNqRSxhQUFLLEVBQUUsTUFBUjtBQUFnQjRGLGlCQUFTLEVBQUU7QUFBM0IsT0FBUjtBQUE0Q1osVUFBSSxFQUFFLFFBQWxEO0FBQTREaEIsZUFBUyxFQUFFO0FBQXZFLEtBRkosRUFHSWpJLDZDQUFLLENBQUNxRyxhQUFOLENBQ0ksS0FESixFQUVJO0FBQUM0QixlQUFTLEVBQUUsb0JBQVo7QUFBa0NELGFBQU8sRUFBRSxLQUFLN0c7QUFBaEQsS0FGSixFQUdJLFdBSEosQ0FISixDQUhKLENBVkcsQ0FBUDtBQXdCUDs7QUEzYTBEIiwiZmlsZSI6Ii4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFdlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4vZXhpdGJ1dHRvblwiO1xyXG5pbXBvcnQgVGFiQmFyIGZyb20gXCIuL3RhYmJhclwiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vc2V0dGluZ3MvdGl0bGVcIjtcclxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vY2FyZFwiO1xyXG5cclxuY29uc3QgQXZhdGFyRGVmYXVsdHMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTtcclxuY29uc3QgSW52aXRlQWN0aW9ucyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhY2NlcHRJbnZpdGVcIik7XHJcbmNvbnN0IFNvcnRlZEd1aWxkU3RvcmUgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U29ydGVkR3VpbGRzXCIpO1xyXG5jb25zdCBTZXR0aW5nc1ZpZXcgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiU2V0dGluZ3NWaWV3XCIpO1xyXG4vL1NldHRpbmdzVmlld1xyXG4vL29uQ2xvc2UgcG9wIGxheWVyXHJcbi8vb25TZXRTZWN0aW9uIGRpc3BhdGNoIHVzZXIgc2V0dGluZ3MgbW9kYWwgc2V0IHNlY3Rpb24gc2VjdGlvbiBzdWJzZWN0aW9uXHJcbi8vc2VjdGlvbiBzZWxlY3RlZCBvbmVcclxuLy9zZWN0aW9ucyBbXVxyXG4vL3RoZW1lIGRhcmtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IFwiQWxsXCIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmpvaW4gPSB0aGlzLmpvaW4uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmVuZFBvaW50fSR7cXVlcnl9JHtxdWVyeSA/IFwiJnNjaGVtYT1uZXdcIiA6IFwiP3NjaGVtYT1uZXdcIn1gLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17dGhpcy5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICAgICAgfSwgW10pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gdGhpcy5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHRoaXMuYmRTZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBgP2Zyb209JHtlbmR9YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRlcm0pIGRhdGEubmV4dCArPSBgJnRlcm09JHt0aGlzLnN0YXRlLnRlcm19YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7dGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7dGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS50ZXJtKSB0aXRsZSArPSBgIGZvciAke3RoaXMuc3RhdGUudGVybX1gO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnJlZnMuc2J2LnJlZnMuY29udGVudFNjcm9sbGVyLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJGYWlsZWQgdG8gbG9hZCBzZXJ2ZXJzLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICB1cmw6IGAke3RoaXMuam9pbkVuZFBvaW50fS8ke3NlcnZlckNhcmQucHJvcHMuc2VydmVyLmlkZW50aWZpZXJ9YCxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiLFxyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiICxcclxuICAgICAgICAgICAgICAgIFwieC1kaXNjb3JkLXRva2VuXCI6IHRoaXMuc3RhdGUuY29ubmVjdGlvbi51c2VyLmFjY2Vzc1Rva2VuXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNyb3NzRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgICB4aHJGaWVsZHM6IHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJDYXJkLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMud2luZG93T3B0aW9ucztcclxuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xyXG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgdGhpcy5qb2luV2luZG93ID0gbmV3ICh3aW5kb3cucmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5Ccm93c2VyV2luZG93KShvcHRpb25zKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XHJcbiAgICAgICAgdGhpcy5qb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgbmF2VXJsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuYXZVcmwgIT0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmpvaW5XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmpvaW5XaW5kb3cubG9hZFVSTCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB3aW5kb3dPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGhlaWdodDogNTUwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgYWx3YXlzT25Ub3A6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gU29ydGVkR3VpbGRTdG9yZS5ndWlsZFBvc2l0aW9ucztcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IEF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb247XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uO1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3Jvc3NEb21haW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICB4aHJGaWVsZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVdGlscy5sb2coXCJQdWJsaWNTZXJ2ZXJcIiwgXCJHb3QgZGF0YTogXCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IFwiQWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBcIkFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogXCJBbGxcIixcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1NldHRpbmdzVmlld1xyXG4vL29uQ2xvc2UgcG9wIGxheWVyXHJcbi8vb25TZXRTZWN0aW9uIGRpc3BhdGNoIHVzZXIgc2V0dGluZ3MgbW9kYWwgc2V0IHNlY3Rpb24gc2VjdGlvbiBzdWJzZWN0aW9uXHJcbi8vc2VjdGlvbiBzZWxlY3RlZCBvbmVcclxuLy9zZWN0aW9ucyBbXVxyXG4vL3RoZW1lIGRhcmtcclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcChuYW1lID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IG5hbWUsLy8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKFwiIFwiLCBcIl9cIiksXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZSxcclxuICAgICAgICAgICAgICAgIC8vZWxlbWVudDogKCkgPT4gbmFtZSA9PSBcIkFsbFwiID8gdGhpcy5jb250ZW50IDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG5hbWUgPT0gXCJBbGxcIikgc2VjdGlvbi5lbGVtZW50ID0gKCkgPT4gdGhpcy5jb250ZW50O1xyXG4gICAgICAgICAgICAvLyBlbHNlIHNlY3Rpb24ub25DbGljayA9ICgpID0+IHRoaXMuY2hhbmdlQ2F0ZWdvcnkobmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVmlldywge1xyXG4gICAgICAgICAgICBvbkNsb3NlOiB0aGlzLmNsb3NlLFxyXG4gICAgICAgICAgICBvblNldFNlY3Rpb246IChlLCBlZSwgZWVlKSA9PiB7Y29uc29sZS5sb2coZSwgZWUsIGVlZSk7dGhpcy5jaGFuZ2VDYXRlZ29yeShlKTt9LFxyXG4gICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnksXHJcbiAgICAgICAgICAgIHNlY3Rpb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJIRUFERVJcIiwgbGFiZWw6IFwiUHVibGljIFNlcnZlcnNcIn0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJDVVNUT01cIiwgZWxlbWVudDogKCkgPT4gdGhpcy5zZWFyY2hJbnB1dH0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJIRUFERVJcIiwgbGFiZWw6IFwiQ2F0ZWdvcmllc1wifSxcclxuICAgICAgICAgICAgICAgIC4uLmNhdGVnb3JpZXNcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgdGhlbWU6IFwiZGFya1wiXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3RhbmRhcmRTaWRlYmFyVmlldywge2lkOiBcInB1YnNsYXllclwiLCByZWY6IFwic2J2XCIsIG5vdGljZTogbnVsbCwgdGhlbWU6IFwiZGFya1wiLCBjbG9zZUFjdGlvbjogdGhpcy5jbG9zZSwgY29udGVudDogdGhpcy5jb250ZW50LCBzaWRlYmFyOiB0aGlzLnNpZGViYXJ9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNpZGViYXI6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5zaWRlYmFyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5jb250ZW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvb2xzOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXIgU0lERVwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXIuU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhci5TZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXIuSGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyLkl0ZW0sIHtpZDogaW5kZXgsIG9uQ2xpY2s6IHRoaXMuY2hhbmdlQ2F0ZWdvcnksIGtleTogaW5kZXgsIHRleHQ6IHZhbHVlLCBzZWxlY3RlZDogdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ID09PSBpbmRleH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhci5TZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGV4dC1pbnB1dCBmbGV4LXZlcnRpY2FsXCIsIHN0eWxlOiB7d2lkdGg6IFwiMTcycHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7b25LZXlEb3duOiB0aGlzLnNlYXJjaEtleURvd24sIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJ0ZXh0XCIsIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIHBsYWNlaG9sZGVyOiBcIlNlYXJjaC4uLlwiLCBtYXhMZW5ndGg6IFwiNTBcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaEtleURvd24oZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xyXG4gICAgICAgICAgICBxdWVyeSArPSBgJmNhdGVnb3J5PSR7dGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoKHF1ZXJ5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBbGxcIiwgXCJGUFMgR2FtZXNcIiwgXCJNTU8gR2FtZXNcIiwgXCJTdHJhdGVneSBHYW1lc1wiLCBcIk1PQkEgR2FtZXNcIiwgXCJSUEcgR2FtZXNcIiwgXCJUYWJsZXRvcCBHYW1lc1wiLCBcIlNhbmRib3ggR2FtZXNcIiwgXCJTaW11bGF0aW9uIEdhbWVzXCIsIFwiTXVzaWNcIiwgXCJDb21tdW5pdHlcIiwgXCJMYW5ndWFnZVwiLCBcIlByb2dyYW1taW5nXCIsIFwiT3RoZXJcIl07XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgLy8gdGhpcy5yZWZzLnNlYXJjaGlucHV0LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogaWQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaChgP2NhdGVnb3J5PSR7dGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5LnJlcGxhY2UoXCIgXCIsIFwiJTIwXCIpfWAsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IFNvcnRlZEd1aWxkU3RvcmUuZ3VpbGRQb3NpdGlvbnM7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSBBdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIHRoaXMubm90Q29ubmVjdGVkO1xyXG4gICAgICAgIHJldHVybiBbUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGhpcy5zdGF0ZS50aXRsZX0pLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgPT0gXCJBbGxcIiAmJiB0aGlzLmJkU2VydmVyLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtrZXk6IHNlcnZlci5pZGVudGlmaWVyLCBzZXJ2ZXI6IHNlcnZlciwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5uZXh0ICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZykgcmV0dXJuO3RoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgdGhpcy5zZWFyY2godGhpcy5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aGlzLnN0YXRlLnRpdGxlfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RDb25uZWN0ZWQoKSB7XHJcbiAgICAgICAgLy9yZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7IHRleHQ6IHRoaXMuc3RhdGUudGl0bGUgfSk7XHJcbiAgICAgICAgcmV0dXJuIFtSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMuY29ubmVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgdGhpcy5iZFNlcnZlcl07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyLlNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtaW5IZWlnaHQ6IFwiMjBweFwifSwgdHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiB0aGlzLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/publicservers/menu.js\n"); - -/***/ }), - -/***/ "./src/ui/publicservers/tabbar.js": -/*!****************************************!*\ - !*** ./src/ui/publicservers/tabbar.js ***! - \****************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TabBar; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nclass TabBarItem extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n selected: this.props.selected || false\n };\n this.onClick = this.onClick.bind(this);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: `ui-tab-bar-item${this.props.selected ? \" selected\" : \"\"}`,\n onClick: this.onClick\n }, this.props.text);\n }\n\n onClick() {\n if (this.props.onClick) {\n this.props.onClick(this.props.id);\n }\n }\n\n}\n\nclass TabBarSeparator extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-tab-bar-separator margin-top-8 margin-bottom-8\"\n });\n }\n\n}\n\nclass TabBarHeader extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-tab-bar-header\"\n }, this.props.text);\n }\n\n}\n\nclass TabBar {\n static get Item() {\n return TabBarItem;\n }\n\n static get Header() {\n return TabBarHeader;\n }\n\n static get Separator() {\n return TabBarSeparator;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvdGFiYmFyLmpzPzRhMGQiXSwibmFtZXMiOlsiVGFiQmFySXRlbSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwic2VsZWN0ZWQiLCJvbkNsaWNrIiwiYmluZCIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0ZXh0IiwiaWQiLCJUYWJCYXJTZXBhcmF0b3IiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXIiLCJJdGVtIiwiSGVhZGVyIiwiU2VwYXJhdG9yIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQSxNQUFNQSxVQUFOLFNBQXlCQyw2Q0FBSyxDQUFDQyxTQUEvQixDQUF5QztBQUVyQ0MsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLGNBQVEsRUFBRSxLQUFLRixLQUFMLENBQVdFLFFBQVgsSUFBdUI7QUFEeEIsS0FBYjtBQUdBLFNBQUtDLE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWFDLElBQWIsQ0FBa0IsSUFBbEIsQ0FBZjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxXQUFPUiw2Q0FBSyxDQUFDUyxhQUFOLENBQ0gsS0FERyxFQUVIO0FBQUNDLGVBQVMsRUFBRyxrQkFBaUIsS0FBS1AsS0FBTCxDQUFXRSxRQUFYLEdBQXNCLFdBQXRCLEdBQW9DLEVBQUcsRUFBckU7QUFBd0VDLGFBQU8sRUFBRSxLQUFLQTtBQUF0RixLQUZHLEVBR0gsS0FBS0gsS0FBTCxDQUFXUSxJQUhSLENBQVA7QUFLSDs7QUFFREwsU0FBTyxHQUFHO0FBQ04sUUFBSSxLQUFLSCxLQUFMLENBQVdHLE9BQWYsRUFBd0I7QUFDcEIsV0FBS0gsS0FBTCxDQUFXRyxPQUFYLENBQW1CLEtBQUtILEtBQUwsQ0FBV1MsRUFBOUI7QUFDSDtBQUNKOztBQXRCb0M7O0FBeUJ6QyxNQUFNQyxlQUFOLFNBQThCYiw2Q0FBSyxDQUFDQyxTQUFwQyxDQUE4QztBQUMxQ0MsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRURLLFFBQU0sR0FBRztBQUNMLFdBQU9SLDZDQUFLLENBQUNTLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBM0IsQ0FBUDtBQUNIOztBQVB5Qzs7QUFVOUMsTUFBTUksWUFBTixTQUEyQmQsNkNBQUssQ0FBQ0MsU0FBakMsQ0FBMkM7QUFDdkNDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVESyxRQUFNLEdBQUc7QUFDTCxXQUFPUiw2Q0FBSyxDQUFDUyxhQUFOLENBQ0gsS0FERyxFQUVIO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkcsRUFHSCxLQUFLUCxLQUFMLENBQVdRLElBSFIsQ0FBUDtBQUtIOztBQVhzQzs7QUFjNUIsTUFBTUksTUFBTixDQUFhO0FBQ3hCLGFBQVdDLElBQVgsR0FBa0I7QUFDZCxXQUFPakIsVUFBUDtBQUNIOztBQUNELGFBQVdrQixNQUFYLEdBQW9CO0FBQ2hCLFdBQU9ILFlBQVA7QUFDSDs7QUFDRCxhQUFXSSxTQUFYLEdBQXVCO0FBQ25CLFdBQU9MLGVBQVA7QUFDSDs7QUFUdUIiLCJmaWxlIjoiLi9zcmMvdWkvcHVibGljc2VydmVycy90YWJiYXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuY2xhc3MgVGFiQmFySXRlbSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMucHJvcHMuc2VsZWN0ZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYHVpLXRhYi1iYXItaXRlbSR7dGhpcy5wcm9wcy5zZWxlY3RlZCA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWAsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRhYkJhclNlcGFyYXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLXNlcGFyYXRvciBtYXJnaW4tdG9wLTggbWFyZ2luLWJvdHRvbS04XCJ9KTtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiQmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFiQmFyIHtcclxuICAgIHN0YXRpYyBnZXQgSXRlbSgpIHtcclxuICAgICAgICByZXR1cm4gVGFiQmFySXRlbTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXQgSGVhZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBUYWJCYXJIZWFkZXI7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0IFNlcGFyYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gVGFiQmFyU2VwYXJhdG9yO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/publicservers/tabbar.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PublicServers; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./card */ \"./src/ui/publicservers/card.js\");\n/* harmony import */ var _manager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manager */ \"./src/ui/publicservers/manager.js\");\n\n\n\n\nconst SettingsView = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"SettingsView\");\nclass PublicServers extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedCategory: \"All\",\n title: \"Loading...\",\n loading: true,\n servers: [],\n next: null,\n connection: {\n state: 0,\n user: null\n }\n };\n this.close = this.close.bind(this);\n this.changeCategory = this.changeCategory.bind(this);\n this.search = this.search.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.checkConnection = this.checkConnection.bind(this);\n this.connect = this.connect.bind(this);\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n close() {\n this.props.close();\n }\n\n search(query, clear) {\n $.ajax({\n method: \"GET\",\n url: `${this.endPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`,\n success: data => {\n let servers = data.results.reduce((arr, server) => {\n server.joined = false;\n arr.push(server); // arr.push();\n\n return arr;\n }, []);\n\n if (!clear) {\n servers = this.state.servers.concat(servers);\n } else {//servers.unshift(this.bdServer);\n }\n\n console.log(data);\n let end = data.size + data.from;\n data.next = `?from=${end}`;\n if (this.state.term) data.next += `&term=${this.state.term}`;\n if (this.state.selectedCategory) data.next += `&category=${this.state.selectedCategory}`;\n\n if (end >= data.total) {\n end = data.total;\n data.next = null;\n }\n\n let title = `Showing 1-${end} of ${data.total} results in ${this.state.selectedCategory}`;\n if (this.state.term) title += ` for ${this.state.term}`;\n this.setState({\n loading: false,\n title: title,\n servers: servers,\n next: data.next\n });\n\n if (clear) {//console.log(this);\n // this.refs.sbv.refs.contentScroller.scrollTop = 0;\n }\n },\n error: () => {\n this.setState({\n loading: false,\n title: \"Failed to load servers. Check console for details\"\n });\n }\n });\n }\n\n async connect() {\n await _manager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].connect();\n this.checkConnection();\n }\n\n get windowOptions() {\n return {\n width: 500,\n height: 550,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: false,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: false,\n center: false,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"7500+\",\n members: \"20000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for support etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n server: server,\n pinned: true\n });\n }\n\n get endPoint() {\n return \"https://search.discordservers.com\";\n }\n\n get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n get connectEndPoint() {\n return \"https://join.discordservers.com/connect\";\n }\n\n async checkConnection() {\n const userData = await _manager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].checkConnection();\n\n if (!userData) {\n return this.setState({\n loading: true,\n connection: {\n state: 1,\n user: null\n }\n });\n }\n\n this.setState({\n connection: {\n state: 2,\n user: userData\n }\n });\n this.search(\"\", true);\n }\n\n render() {\n const categories = this.categoryButtons.map(name => ({\n section: name,\n label: name,\n element: () => this.content\n }));\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(SettingsView, {\n onClose: this.close,\n onSetSection: this.changeCategory,\n section: this.state.selectedCategory,\n sections: [{\n section: \"HEADER\",\n label: \"Search\"\n }, {\n section: \"CUSTOM\",\n element: () => this.searchInput\n }, {\n section: \"HEADER\",\n label: \"Categories\"\n }, ...categories, {\n section: \"DIVIDER\"\n }, {\n section: \"HEADER\",\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n href: \"https://discordservers.com\",\n target: \"_blank\"\n }, \"Discordservers.com\")\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: () => this.connection\n }],\n theme: \"dark\"\n }); // return React.createElement(StandardSidebarView, {id: \"pubslayer\", ref: \"sbv\", notice: null, theme: \"dark\", closeAction: this.close, content: this.content, sidebar: this.sidebar});\n }\n\n get searchInput() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-form-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-text-input flex-vertical\",\n style: {\n width: \"172px\",\n marginLeft: \"10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n onKeyDown: this.searchKeyDown,\n onChange: () => {},\n type: \"text\",\n className: \"input default\",\n placeholder: \"Search...\",\n maxLength: \"50\"\n })));\n }\n\n searchKeyDown(e) {\n if (this.state.loading || e.which !== 13) return;\n this.setState({\n loading: true,\n title: \"Loading...\",\n term: e.target.value\n });\n let query = `?term=${e.target.value}`;\n\n if (this.state.selectedCategory !== \"All\") {\n query += `&category=${this.state.selectedCategory}`;\n }\n\n this.search(query, true);\n }\n\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n changeCategory(id) {\n if (this.state.loading) return; // this.refs.searchinput.value = \"\";\n\n this.setState({\n loading: true,\n selectedCategory: id,\n title: \"Loading...\",\n term: null\n });\n\n if (id === \"All\") {\n this.search(\"\", true);\n return;\n }\n\n this.search(`?category=${this.state.selectedCategory.replace(\" \", \"%20\")}`, true);\n }\n\n get content() {\n const pinned = this.state.selectedCategory == \"All\" || this.state.connection.state === 1 ? this.bdServer : null;\n const servers = this.state.servers.map(server => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_card__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: server.identifier,\n server: server\n });\n });\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.state.title\n }), pinned, servers, this.state.next ? this.nextButton : null, this.state.servers.length > 0 && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: this.state.title\n })];\n }\n\n get nextButton() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n type: \"button\",\n onClick: () => {\n if (this.state.loading) return;\n this.setState({\n loading: true\n });\n this.search(this.state.next, false);\n },\n className: \"ui-button filled brand small grow\",\n style: {\n width: \"100%\",\n marginTop: \"10px\",\n marginBottom: \"10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\"\n }, this.state.loading ? \"Loading\" : \"Load More\"));\n }\n\n get connection() {\n const {\n connection\n } = this.state;\n if (connection.state !== 2) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", null);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", null, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n style: {\n color: \"#b9bbbe\",\n fontSize: \"10px\",\n marginLeft: \"10px\"\n }\n }, \"Connected as: \", `${connection.user.username}#${connection.user.discriminator}`), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n style: {\n padding: \"5px 10px 0 10px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n style: {\n width: \"100%\",\n minHeight: \"20px\"\n },\n type: \"button\",\n className: \"ui-button filled brand small grow\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"ui-button-contents\",\n onClick: this.connect\n }, \"Reconnect\"))));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvbWVudS5qcz85YWNkIl0sIm5hbWVzIjpbIlNldHRpbmdzVmlldyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIlB1YmxpY1NlcnZlcnMiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJ0aXRsZSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwibmV4dCIsImNvbm5lY3Rpb24iLCJ1c2VyIiwiY2xvc2UiLCJiaW5kIiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2giLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsImNvbXBvbmVudERpZE1vdW50IiwicXVlcnkiLCJjbGVhciIsIiQiLCJhamF4IiwibWV0aG9kIiwidXJsIiwiZW5kUG9pbnQiLCJzdWNjZXNzIiwiZGF0YSIsInJlc3VsdHMiLCJyZWR1Y2UiLCJhcnIiLCJzZXJ2ZXIiLCJqb2luZWQiLCJwdXNoIiwiY29uY2F0IiwiY29uc29sZSIsImxvZyIsImVuZCIsInNpemUiLCJmcm9tIiwidGVybSIsInRvdGFsIiwic2V0U3RhdGUiLCJlcnJvciIsIk1hbmFnZXIiLCJ3aW5kb3dPcHRpb25zIiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzaG93IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiZnJhbWUiLCJjZW50ZXIiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImJkU2VydmVyIiwibmFtZSIsIm9ubGluZSIsIm1lbWJlcnMiLCJjYXRlZ29yaWVzIiwiZGVzY3JpcHRpb24iLCJpZGVudGlmaWVyIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJpbnZpdGVfY29kZSIsInBpbm5lZCIsImNyZWF0ZUVsZW1lbnQiLCJTZXJ2ZXJDYXJkIiwiam9pbkVuZFBvaW50IiwiY29ubmVjdEVuZFBvaW50IiwidXNlckRhdGEiLCJyZW5kZXIiLCJjYXRlZ29yeUJ1dHRvbnMiLCJtYXAiLCJzZWN0aW9uIiwibGFiZWwiLCJlbGVtZW50IiwiY29udGVudCIsIm9uQ2xvc2UiLCJvblNldFNlY3Rpb24iLCJzZWN0aW9ucyIsInNlYXJjaElucHV0IiwiaHJlZiIsInRhcmdldCIsInRoZW1lIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0Iiwib25LZXlEb3duIiwib25DaGFuZ2UiLCJ0eXBlIiwicGxhY2Vob2xkZXIiLCJtYXhMZW5ndGgiLCJlIiwid2hpY2giLCJ2YWx1ZSIsImlkIiwicmVwbGFjZSIsImtleSIsIlNldHRpbmdzVGl0bGUiLCJ0ZXh0IiwibmV4dEJ1dHRvbiIsImxlbmd0aCIsIm9uQ2xpY2siLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJjb2xvciIsImZvbnRTaXplIiwidXNlcm5hbWUiLCJkaXNjcmltaW5hdG9yIiwicGFkZGluZyIsIm1pbkhlaWdodCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxZQUFZLEdBQUdDLHNEQUFjLENBQUNDLGdCQUFmLENBQWdDLGNBQWhDLENBQXJCO0FBRWUsTUFBTUMsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFFdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxzQkFBZ0IsRUFBRSxLQURUO0FBRVRDLFdBQUssRUFBRSxZQUZFO0FBR1RDLGFBQU8sRUFBRSxJQUhBO0FBSVRDLGFBQU8sRUFBRSxFQUpBO0FBS1RDLFVBQUksRUFBRSxJQUxHO0FBTVRDLGdCQUFVLEVBQUU7QUFDUk4sYUFBSyxFQUFFLENBREM7QUFFUk8sWUFBSSxFQUFFO0FBRkU7QUFOSCxLQUFiO0FBV0EsU0FBS0MsS0FB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QUUsTUFBN0I7QUFBcUNwQixrQkFBVSxFQUFFO0FBQWpEO0FBQVIsS0FBNUIsRUFDSSxnQkFESixFQUVLLEdBQUVqRixVQUFVLENBQUNDLElBQVgsQ0FBZ0JxRyxRQUFTLElBQUd0RyxVQUFVLENBQUNDLElBQVgsQ0FBZ0JzRyxhQUFjLEVBRmpFLENBREcsRUFLSGpILDZDQUFLLENBQUNzRSxhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQUNvQixXQUFLLEVBQUU7QUFBQ3dCLGVBQU8sRUFBRTtBQUFWO0FBQVIsS0FBM0IsRUFDSWxILDZDQUFLLENBQUNzRSxhQUFOLENBQW9CLFFBQXBCLEVBQ0k7QUFBQ29CLFdBQUssRUFBRTtBQUFDM0MsYUFBSyxFQUFFLE1BQVI7QUFBZ0JvRSxpQkFBUyxFQUFFO0FBQTNCLE9BQVI7QUFBNENyQixVQUFJLEVBQUUsUUFBbEQ7QUFBNERMLGVBQVMsRUFBRTtBQUF2RSxLQURKLEVBRUl6Riw2Q0FBSyxDQUFDc0UsYUFBTixDQUFvQixLQUFwQixFQUEyQjtBQUFDbUIsZUFBUyxFQUFFLG9CQUFaO0FBQWtDa0IsYUFBTyxFQUFFLEtBQUt6RjtBQUFoRCxLQUEzQixFQUFxRixXQUFyRixDQUZKLENBREosQ0FMRyxDQUFQO0FBWUg7O0FBcFFzRCIsImZpbGUiOiIuL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL21lbnUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzL3RpdGxlXCI7XHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL2NhcmRcIjtcclxuaW1wb3J0IE1hbmFnZXIgZnJvbSBcIi4vbWFuYWdlclwiO1xyXG5cclxuY29uc3QgU2V0dGluZ3NWaWV3ID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlNldHRpbmdzVmlld1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IFwiQWxsXCIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2gocXVlcnksIGNsZWFyKSB7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICB1cmw6IGAke3RoaXMuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXt0aGlzLmpvaW59Lz4pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcnMgPSB0aGlzLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQodGhpcy5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcclxuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3RoaXMuc3RhdGUudGVybX1gO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHt0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnl9YDtcclxuICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHt0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnl9YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7dGhpcy5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb25uZWN0KCkge1xyXG4gICAgICAgIGF3YWl0IE1hbmFnZXIuY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IE1hbmFnZXIuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKCF1c2VyRGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZSwgY29ubmVjdGlvbjoge3N0YXRlOiAxLCB1c2VyOiBudWxsfX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjb25uZWN0aW9uOiB7c3RhdGU6IDIsIHVzZXI6IHVzZXJEYXRhfX0pO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKG5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogbmFtZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NWaWV3LCB7XHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IHRoaXMuY2xvc2UsXHJcbiAgICAgICAgICAgIG9uU2V0U2VjdGlvbjogdGhpcy5jaGFuZ2VDYXRlZ29yeSxcclxuICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5LFxyXG4gICAgICAgICAgICBzZWN0aW9uczogW1xyXG4gICAgICAgICAgICAgICAge3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIlNlYXJjaFwifSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiAoKSA9PiB0aGlzLnNlYXJjaElucHV0fSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogXCJDYXRlZ29yaWVzXCJ9LFxyXG4gICAgICAgICAgICAgICAgLi4uY2F0ZWdvcmllcyxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkRJVklERVJcIn0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJIRUFERVJcIiwgbGFiZWw6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtocmVmOiBcImh0dHBzOi8vZGlzY29yZHNlcnZlcnMuY29tXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiRGlzY29yZHNlcnZlcnMuY29tXCIpfSxcclxuICAgICAgICAgICAgICAgIHtzZWN0aW9uOiBcIkRJVklERVJcIn0sXHJcbiAgICAgICAgICAgICAgICB7c2VjdGlvbjogXCJDVVNUT01cIiwgZWxlbWVudDogKCkgPT4gdGhpcy5jb25uZWN0aW9ufVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB0aGVtZTogXCJkYXJrXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdGFuZGFyZFNpZGViYXJWaWV3LCB7aWQ6IFwicHVic2xheWVyXCIsIHJlZjogXCJzYnZcIiwgbm90aWNlOiBudWxsLCB0aGVtZTogXCJkYXJrXCIsIGNsb3NlQWN0aW9uOiB0aGlzLmNsb3NlLCBjb250ZW50OiB0aGlzLmNvbnRlbnQsIHNpZGViYXI6IHRoaXMuc2lkZWJhcn0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtvbktleURvd246IHRoaXMuc2VhcmNoS2V5RG93biwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcInRleHRcIiwgY2xhc3NOYW1lOiBcImlucHV0IGRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIG1heExlbmd0aDogXCI1MFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ICE9PSBcIkFsbFwiKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHt0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICAvLyB0aGlzLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSBcIkFsbFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoKGA/Y2F0ZWdvcnk9JHt0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkucmVwbGFjZShcIiBcIiwgXCIlMjBcIil9YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgcGlubmVkID0gdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ID09IFwiQWxsXCIgfHwgdGhpcy5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxID8gdGhpcy5iZFNlcnZlciA6IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc2VydmVycyA9IHRoaXMuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXJ9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRoaXMuc3RhdGUudGl0bGV9KSxcclxuICAgICAgICAgICAgcGlubmVkLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5leHQgPyB0aGlzLm5leHRCdXR0b24gOiBudWxsLFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aGlzLnN0YXRlLnRpdGxlfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuZXh0QnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh0aGlzLnN0YXRlLm5leHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSwgdGhpcy5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7Y29sb3I6IFwiI2I5YmJiZVwiLCBmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXHJcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogdGhpcy5jb25uZWN0fSwgXCJSZWNvbm5lY3RcIilcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/publicservers/menu.js\n"); /***/ }), diff --git a/js/main.min.js b/js/main.min.js index 8469d7c8..f21f5fa3 100644 --- a/js/main.min.js +++ b/js/main.min.js @@ -1 +1 @@ -var Core=function(e){var t={};function s(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},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,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=6)}([function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("request")},function(e,t,s){"use strict";s.r(t);var n={};s.r(n),s.d(n,"Menu",function(){return ge}),s.d(n,"Card",function(){return me}),s.d(n,"Layer",function(){return fe});var i={};s.r(i),s.d(i,"VoiceMode",function(){return ke}),s.d(i,"ClassNormalizer",function(){return Me}),s.d(i,"DeveloperMode",function(){return Ne}),s.d(i,"PublicServers",function(){return Be}),s.d(i,"DarkMode",function(){return Te}),s.d(i,"MinimalMode",function(){return $e}),s.d(i,"TwentyFourHour",function(){return Fe}),s.d(i,"ColoredText",function(){return Le}),s.d(i,"VoiceDisconnect",function(){return Oe}),s.d(i,"EmoteMenu",function(){return _e}),s.d(i,"EmoteAutocaps",function(){return He}),s.d(i,"EmoteModule",function(){return ze}),s.d(i,"WindowPrefs",function(){return Ze}),s.d(i,"CustomCSS",function(){return st});var r={local:!1,localServer:"//localhost:8080",minified:!0,version:"0.3.0",branch:"master",repo:"rauenzi",minSupportedVersion:"0.3.0",bbdVersion:"0.2.17"},o={TwitchGlobal:{url:"https://twitchemotes.com/api_cache/v3/global.json",backup:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_twitch_global.json",variable:"TwitchGlobal",getEmoteURL:e=>`https://static-cdn.jtvnw.net/emoticons/v1/${e.id}/1.0`,getOldData:(e,t)=>({id:e.match(/\/([0-9]+)\//)[1],code:t,emoticon_set:0,description:null})},TwitchSubscriber:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_twitch_subscriber.json",variable:"TwitchSubscriber",getEmoteURL:e=>`https://static-cdn.jtvnw.net/emoticons/v1/${e}/1.0`,getOldData:e=>e.match(/\/([0-9]+)\//)[1]},FrankerFaceZ:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_ffz.json",variable:"FrankerFaceZ",getEmoteURL:e=>`https://cdn.frankerfacez.com/emoticon/${e}/1`,getOldData:e=>e.match(/\/([0-9]+)\//)[1]},BTTV:{url:"https://api.betterttv.net/emotes",variable:"BTTV",parser:e=>{const t={};for(let s=0,n=e.emotes.length;s`${e}`,getOldData:e=>e},BTTV2:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_bttv.json",variable:"BTTV2",oldVariable:"emotesBTTV2",getEmoteURL:e=>`https://cdn.betterttv.net/emote/${e}/1x`,getOldData:e=>e.match(/emote\/(.+)\//)[1]}},a=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"download",name:"Download Emotes",note:"Download emotes once a week to stay up to date",value:!0},{type:"switch",id:"emoteMenu",name:"Emote Menu",note:"Show Twitch/Favourite emotes in emote menu",value:!0},{type:"switch",id:"hideEmojiMenu",name:"Hide Emoji Menu",note:"Hides Discord's emoji menu when using emote menu",value:!1,enableWith:"emoteMenu"},{type:"switch",id:"autoCaps",name:"Emote Autocapitalization",note:"Autocapitalize emote commands",value:!1},{type:"switch",id:"showNames",name:"Show Names",note:"Show emote names on hover",value:!0},{type:"switch",id:"modifiers",name:"Show Emote Modifiers",note:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)",value:!0},{type:"switch",id:"animateOnHover",name:"Animate On Hover",note:"Only animate the emote modifiers on hover",value:!1}]},{type:"category",id:"categories",name:"Categories",collapsible:!0,settings:[{type:"switch",id:"twitch",name:"Twitch",note:"Show Twitch global & subscriber emotes",value:!0},{type:"switch",id:"ffz",name:"FrankerFaceZ",note:"Show emotes from FFZ",value:!0},{type:"switch",id:"bttv",name:"BetterTTV",note:"Show emotes from BTTV",value:!0}]}],l=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"emotes",name:"Emote System",note:"Enables BD's emote system",value:!0},{type:"switch",id:"publicServers",name:"Public Servers",note:"Display public servers button",value:!0},{type:"switch",id:"voiceDisconnect",name:"Voice Disconnect",note:"Disconnect from voice server when closing Discord",value:!1},{type:"switch",id:"twentyFourHour",name:"24 Hour Timestamps",note:"Hides channels when in minimal mode",value:!1},{type:"switch",id:"classNormalizer",name:"Normalize Classes",note:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",value:!0},{type:"switch",id:"showToasts",name:"Show Toasts",note:"Shows a small notification for important information",value:!0}]},{type:"category",id:"appearance",name:"Appearance",collapsible:!0,settings:[{type:"switch",id:"voiceMode",name:"Voice Mode",note:"Hides everything that isn't voice chat",value:!1},{type:"switch",id:"minimalMode",name:"Minimal Mode",note:"Hide elements and reduce the size of elements",value:!1},{type:"switch",id:"hideChannels",name:"Hide Channels",note:"Hides channels when in minimal mode",value:!1,enableWith:"minimalMode"},{type:"switch",id:"darkMode",name:"Dark Mode",note:"Make certain elements dark by default",value:!0},{type:"switch",id:"coloredText",name:"Colored Text",note:"Make text colour the same as role color",value:!1}]},{type:"category",id:"content",name:"Content Manager",collapsible:!0,settings:[{type:"switch",id:"contentErrors",name:"Show Content Errors",note:"Shows a modal with plugin/theme errors",value:!0},{type:"switch",id:"autoScroll",name:"Scroll To Settings",note:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",value:!0},{type:"switch",id:"autoReload",name:"Automatic Loading",note:"Automatically loads, reloads, and unloads plugins and themes",value:!0}]},{type:"category",id:"developer",name:"Developer Settings",collapsible:!0,shown:!1,settings:[{type:"switch",id:"developerMode",name:"Developer Mode",note:"Allows activating debugger when pressing F8",value:!1},{type:"switch",id:"copySelector",name:"Copy Selector",note:'Adds a "Copy Selector" option to context menus when developer mode is active',value:!1,enableWith:"developerMode"}]},{type:"category",id:"window",name:"Window Preferences",collapsible:!0,shown:!1,settings:[{type:"switch",id:"transparency",name:"Enable Transparency",note:"Enables the main window to be see-through (requires restart)",value:!1},{type:"switch",id:"frame",name:"Window Frame",note:"Adds the native os window frame to the main window",value:!1,hidden:!0}]},{type:"category",id:"customcss",name:"Custom CSS",collapsible:!0,shown:!1,settings:[{type:"switch",id:"customcss",name:"Custom CSS",note:"Enables the Custom CSS tab",value:!0},{type:"switch",id:"liveUpdate",name:"Live Update",note:"Updates the css as you type",value:!1},{type:"switch",id:"startDetached",name:"Start Detached",note:"Clicking the Custom CSS tab opens the editor in a separate window",value:!1,disableWith:"nativeOpen"},{type:"switch",id:"nativeOpen",name:"Open in Native Editor",note:"Clicking the Custom CSS tab opens your custom css in your native editor",value:!1,disableWith:"startDetached"}]}];class c{static get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)}static get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)}static stripBOM(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}static getTextArea(){return $(".channelTextArea-1LDbYG textarea")}static getInternalInstance(e){return e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))]||null}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static injectCss(e){$("",{type:"text/css",rel:"stylesheet",href:e}).appendTo($("head"))}static injectJs(e){return new Promise(t=>{$("