From b28440fda67c391bb72fad26b61c4e04e0c3e026 Mon Sep 17 00:00:00 2001 From: Jean Ouina Date: Thu, 21 May 2020 13:32:22 +0200 Subject: [PATCH] :clown: --- BetterDiscordApp/js/main.js | 16 ++- BetterDiscordApp/src/modules/settingsPanel.js | 22 +++- .../src/modules/settingsPanelSidebar.js | 3 + BetterDiscordApp/src/ui/AccountInfos.jsx | 119 ++++++++++++++++++ DiscordJS/src/client/client.ts | 5 +- DiscordJS/src/structures/BaseChannel.ts | 26 +++- DiscordJS/src/structures/BaseStructure.ts | 9 ++ DiscordJS/src/structures/TextChannel.ts | 3 + DiscordJS/src/util/DiscordToModules.ts | 6 +- DiscordJS/src/util/Snowflake.ts | 96 ++++++++++++++ DiscordJS/src/util/util.ts | 70 ++++++++++- .../core/app/mainScreenPreload.js | 18 +-- 12 files changed, 375 insertions(+), 18 deletions(-) create mode 100644 BetterDiscordApp/src/ui/AccountInfos.jsx create mode 100644 DiscordJS/src/structures/BaseStructure.ts create mode 100644 DiscordJS/src/structures/TextChannel.ts create mode 100644 DiscordJS/src/util/Snowflake.ts diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index d3d5164..e84fcc5 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -311,7 +311,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsPanelSidebar */ \"./src/modules/settingsPanelSidebar.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _contentManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentManager */ \"./src/modules/contentManager.js\");\n/* harmony import */ var _bdEvents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bdEvents */ \"./src/modules/bdEvents.js\");\n/* harmony import */ var _coloredText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coloredText */ \"./src/modules/coloredText.js\");\n/* harmony import */ var _24hour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./24hour */ \"./src/modules/24hour.js\");\n/* harmony import */ var _reactDevTools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactDevTools */ \"./src/modules/reactDevTools.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _publicServers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./publicServers */ \"./src/modules/publicServers.js\");\n/* harmony import */ var _voiceMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./voiceMode */ \"./src/modules/voiceMode.js\");\n/* harmony import */ var _classNormalizer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./classNormalizer */ \"./src/modules/classNormalizer.js\");\n/* harmony import */ var _devMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devMode */ \"./src/modules/devMode.js\");\n/* harmony import */ var _ui_tools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../ui/tools */ \"./src/ui/tools.js\");\n/* harmony import */ var _ui_scroller__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/scroller */ \"./src/ui/scroller.js\");\n/* harmony import */ var _ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/sectionedSettingsPanel */ \"./src/ui/sectionedSettingsPanel.js\");\n/* harmony import */ var _ui_settingsPanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/settingsPanel */ \"./src/ui/settingsPanel.js\");\n/* harmony import */ var _ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/cssEditor */ \"./src/ui/cssEditor.js\");\n/* harmony import */ var _ui_addonlist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/addonlist */ \"./src/ui/addonlist.jsx\");\n/* harmony import */ var _ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/presenceSettings */ \"./src/ui/presenceSettings.jsx\");\n/* harmony import */ var _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2_SettingsPanel {\n constructor() {\n this.sideBarOnClick = this.sideBarOnClick.bind(this);\n this.onChange = this.onChange.bind(this);\n this.updateSettings = this.updateSettings.bind(this);\n this.sidebar = new _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.sideBarOnClick); // this.buildPluginProps = this.buildPluginProps.bind(this);\n // this.buildThemeProps = this.buildThemeProps.bind(this);\n\n this.showOriginal = this.showOriginal.bind(this);\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#bd-settingspane-container\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n let [classNameLayer, classSidebar] = [BDModules.get(e => e.layer && e.animating)[0].layer.split(\" \")[0], BDModules.get(e => e.standardSidebarView)[0]];\n const sidebar = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + classNameLayer + \" .\" + classSidebar.standardSidebarView.split(\" \")[0] + \", .\" + classNameLayer + \" .ui-standard-sidebar-view\");\n if (!sidebar) return false;\n const root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createElement(`
`);\n sidebar.append(root);\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n return true;\n }\n\n get coreSettings() {\n const settings = this.getSettings(\"core\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get lightcordSettings() {\n const settings = this.getSettings(\"lightcord\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get PresenceSettings() {\n return this.getSettings(\"status\");\n }\n\n get MsgLogSettings() {\n return this.getSettings(\"msglog\");\n }\n\n getSettings(category) {\n return Object.keys(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]).reduce((arr, key) => {\n const setting = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"][key];\n\n if (setting.cat === category && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n }\n\n return arr;\n }, []);\n }\n\n sideBarOnClick(id) {\n const contentRegion = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".contentRegion-3nDuYy, .content-region\");\n contentRegion.style.display = \"none\";\n this.root.style.display = \"\";\n\n switch (id) {\n case \"core\":\n this.renderCoreSettings();\n break;\n\n case \"customcss\":\n this.renderCustomCssEditor();\n break;\n\n case \"plugins\":\n case \"themes\":\n this.renderAddonPane(id);\n break;\n\n case \"lightcord\":\n this.renderLightCordSettings();\n break;\n\n case \"status\":\n this.renderPresenceSettings();\n }\n }\n\n onClick() {}\n\n onChange(id, checked) {\n this.updateSettings(id, checked);\n }\n\n updateSettings(id, enabled) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][id] = enabled;\n\n if (id == \"bda-gs-2\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal\");\n }\n\n if (id == \"bda-gs-3\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal-chan\");\n }\n\n if (id == \"bda-gs-1\") {\n if (enabled) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();else _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].removeButton();\n }\n\n if (id == \"bda-gs-4\") {\n if (enabled) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();else _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].stop();\n }\n\n if (id == \"bda-gs-5\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n }\n\n if (enabled && id == \"bda-gs-6\") _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n\n if (id == \"bda-gs-7\") {\n if (enabled) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();else _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeColoredText();\n }\n\n if (id == \"fork-ps-4\") {\n if (enabled) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();else _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].stop();\n }\n\n if (id == \"fork-ps-5\") {\n if (enabled) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n } else {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"theme\");\n }\n }\n\n if (id == \"fork-wp-1\") {\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n }\n\n if (id == \"bda-gs-8\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopDebugListener();\n }\n\n if (id == \"fork-dm-1\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopCopySelector();\n }\n\n if (id === \"reactDevTools\") {\n if (enabled) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();else _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].stop();\n }\n\n if (id === \"lightcord-1\") {\n if (enabled) window.Lightcord.Settings.devMode = true;else window.Lightcord.Settings.devMode = false;\n }\n\n if (id === \"lightcord-2\") {\n if (enabled) window.Lightcord.Settings.callRingingBeat = true;else window.Lightcord.Settings.callRingingBeat = false;\n }\n\n if (id === \"lightcord-presence-1\") {\n if (enabled) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();else _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].disable();\n }\n\n this.saveSettings();\n }\n\n async initializeSettings() {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"].reactDevTools) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-2\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-3\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-1\"]) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-4\"]) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-5\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-6\"]) _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-7\"]) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-4\"]) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-1\"]) window.Lightcord.Settings.devMode = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-2\"]) window.Lightcord.Settings.callRingingBeat = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-presence-1\"]) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-5\"]) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-8\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-dm-1\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();\n this.saveSettings();\n }\n\n saveSettings() {\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"settings\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"]);\n }\n\n loadSettings() {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"settings\"));\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"rpc\"));\n }\n\n showOriginal() {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(this.root);\n this.root.style.display = \"none\";\n _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + BDModules.get(e => e.contentRegion)[0].contentRegion.split(\" \")[0] + \", .content-region\").style.display = \"\";\n }\n\n renderSidebar() {\n const tabs = document.querySelectorAll(\"[class*='side-'] > [class*='item-']\");\n\n for (const element of tabs) {\n element.removeEventListener(\"click\", this.showOriginal);\n element.addEventListener(\"click\", this.showOriginal);\n }\n\n this.sidebar.render();\n }\n\n get coreComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"cspanel\",\n onChange: this.onChange,\n sections: this.coreSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get lightcordComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"lspannel\",\n onChange: this.onChange,\n sections: this.lightcordSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get PresenceComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: \"lspannel\",\n onChange: this.onChange,\n settings: this.PresenceSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get customCssComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: \"csseditor\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n renderCoreSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.coreComponent, root);\n }\n\n renderLightCordSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.lightcordComponent, root);\n }\n\n renderPresenceSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.PresenceComponent, root);\n }\n\n renderCustomCssEditor() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.customCssComponent, root);\n } // renderAddonPane(type) {\n // const root = this.root;\n // if (!root) return Utils.err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n // BDV2.reactDom.render(this.contentComponent(type), root);\n // }\n\n\n renderAddonPane(type) {\n if (!this.root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\"); // I know this shouldn't be here, but when it isn't,\n // React refuses to change the button when going\n // between plugins and themes page... something\n // to debug later.\n\n class ContentList extends _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.Component {\n constructor(props) {\n super(props);\n this.prefix = this.props.type.replace(\"s\", \"\");\n this.onChange = this.onChange.bind(this);\n }\n\n componentDidMount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-unloaded`, this.onChange);\n }\n\n componentWillUnmount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-unloaded`, this.onChange);\n }\n\n onChange() {\n this.props.onChange(this.props.type);\n }\n\n render() {\n return this.props.children;\n }\n\n }\n\n const list = type === \"plugins\" ? Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdplugins\"]) : Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemes\"]);\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(ContentList, {\n type,\n onChange: this.sideBarOnClick\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_addonlist__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n type,\n list\n })), this.root);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanM/NTdiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCByZWFjdERldlRvb2xzIGZyb20gXCIuL3JlYWN0RGV2VG9vbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdWkvdG9vbHNcIjtcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vdWkvc2Nyb2xsZXJcIjtcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNpZGVCYXJPbkNsaWNrID0gdGhpcy5zaWRlQmFyT25DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKHRoaXMuc2lkZUJhck9uQ2xpY2spOyAvLyB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMgPSB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMuYmluZCh0aGlzKTtcbiAgICAvLyB0aGlzLmJ1aWxkVGhlbWVQcm9wcyA9IHRoaXMuYnVpbGRUaGVtZVByb3BzLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNob3dPcmlnaW5hbCA9IHRoaXMuc2hvd09yaWdpbmFsLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xuXG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHJldHVybiBfcm9vdDtcbiAgfVxuXG4gIGluamVjdFJvb3QoKSB7XG4gICAgbGV0IFtjbGFzc05hbWVMYXllciwgY2xhc3NTaWRlYmFyXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXV07XG4gICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLlwiICsgY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcbiAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xuICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xuICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XG4gICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgY29yZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjLFxuICAgICAgICBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VjdGlvbnM7XG4gIH1cblxuICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogYyxcbiAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYylcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlY3Rpb25zO1xuICB9XG5cbiAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIik7XG4gIH1cblxuICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIik7XG4gIH1cblxuICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG5cbiAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcbiAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBzaWRlQmFyT25DbGljayhpZCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZWdpb24gPSBET00ucXVlcnkoXCIuY29udGVudFJlZ2lvbi0zbkR1WXksIC5jb250ZW50LXJlZ2lvblwiKTtcbiAgICBjb250ZW50UmVnaW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cbiAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICBjYXNlIFwiY29yZVwiOlxuICAgICAgICB0aGlzLnJlbmRlckNvcmVTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImN1c3RvbWNzc1wiOlxuICAgICAgICB0aGlzLnJlbmRlckN1c3RvbUNzc0VkaXRvcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInBsdWdpbnNcIjpcbiAgICAgIGNhc2UgXCJ0aGVtZXNcIjpcbiAgICAgICAgdGhpcy5yZW5kZXJBZGRvblBhbmUoaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImxpZ2h0Y29yZFwiOlxuICAgICAgICB0aGlzLnJlbmRlckxpZ2h0Q29yZFNldHRpbmdzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic3RhdHVzXCI6XG4gICAgICAgIHRoaXMucmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2soKSB7fVxuXG4gIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCkge1xuICAgIHNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO2Vsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7ZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO2Vsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO2Vsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XG4gICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XG4gICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO2Vsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7ZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWU7ZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZTtlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKCk7ZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKSB7XG4gICAgaWYgKHNldHRpbmdzQ29va2llLnJlYWN0RGV2VG9vbHMpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMlwiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtM1wiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy00XCJdKSB2b2ljZU1vZGUuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNVwiXSkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTRcIl0pIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWU7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKTtcblxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XG4gIH1cblxuICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcbiAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcbiAgfVxuXG4gIHNob3dPcmlnaW5hbCgpIHtcbiAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIERPTS5xdWVyeShcIi5cIiArIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRSZWdpb24pWzBdLmNvbnRlbnRSZWdpb24uc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5jb250ZW50LXJlZ2lvblwiKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgfVxuXG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YWJzKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IGNvcmVDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtcbiAgICAgIGtleTogXCJjc3BhbmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IGxpZ2h0Y29yZENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge1xuICAgICAga2V5OiBcImxzcGFubmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICBnZXQgUHJlc2VuY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICBrZXk6IFwibHNwYW5uZWxcIixcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IGN1c3RvbUNzc0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7XG4gICAgICBrZXk6IFwiY3NzZWRpdG9yXCJcbiAgICB9KSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7XG4gICAgICBrZXk6IFwidG9vbHNcIlxuICAgIH0pKTtcbiAgfVxuXG4gIHJlbmRlckNvcmVTZXR0aW5ncygpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29yZUNvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJMaWdodENvcmRTZXR0aW5ncygpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMubGlnaHRjb3JkQ29tcG9uZW50LCByb290KTtcbiAgfVxuXG4gIHJlbmRlclByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLlByZXNlbmNlQ29tcG9uZW50LCByb290KTtcbiAgfVxuXG4gIHJlbmRlckN1c3RvbUNzc0VkaXRvcigpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LCByb290KTtcbiAgfSAvLyByZW5kZXJBZGRvblBhbmUodHlwZSkge1xuICAvLyAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgLy8gICAgIGlmICghcm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpO1xuICAvLyAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb250ZW50Q29tcG9uZW50KHR5cGUpLCByb290KTtcbiAgLy8gfVxuXG5cbiAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgICBpZiAoIXRoaXMucm9vdCkgcmV0dXJuIFV0aWxzLmVycihcIlNldHRpbmdzUGFuZWxcIiwgXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllci0zUXJVZUcgLnN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpXCIpOyAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXG4gICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXG4gICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcbiAgICAvLyB0byBkZWJ1ZyBsYXRlci5cblxuICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xuICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIEJERXZlbnRzLm9uKGAke3RoaXMucHJlZml4fS1yZWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tbG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XG4gICAgICAgIEJERXZlbnRzLm9uKGAke3RoaXMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS1yZWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vZmYoYCR7dGhpcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy5vbkNoYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ID0gdHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcbiAgICByZXR1cm4gQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7XG4gICAgICB0eXBlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMuc2lkZUJhck9uQ2xpY2tcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHtcbiAgICAgIHR5cGUsXG4gICAgICBsaXN0XG4gICAgfSkpLCB0aGlzLnJvb3QpO1xuICB9XG5cbn0oKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/settingsPanel.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsPanelSidebar */ \"./src/modules/settingsPanelSidebar.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _contentManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentManager */ \"./src/modules/contentManager.js\");\n/* harmony import */ var _bdEvents__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./bdEvents */ \"./src/modules/bdEvents.js\");\n/* harmony import */ var _coloredText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coloredText */ \"./src/modules/coloredText.js\");\n/* harmony import */ var _24hour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./24hour */ \"./src/modules/24hour.js\");\n/* harmony import */ var _reactDevTools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactDevTools */ \"./src/modules/reactDevTools.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _publicServers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./publicServers */ \"./src/modules/publicServers.js\");\n/* harmony import */ var _voiceMode__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./voiceMode */ \"./src/modules/voiceMode.js\");\n/* harmony import */ var _classNormalizer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./classNormalizer */ \"./src/modules/classNormalizer.js\");\n/* harmony import */ var _devMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./devMode */ \"./src/modules/devMode.js\");\n/* harmony import */ var _ui_tools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../ui/tools */ \"./src/ui/tools.js\");\n/* harmony import */ var _ui_scroller__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/scroller */ \"./src/ui/scroller.js\");\n/* harmony import */ var _ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/sectionedSettingsPanel */ \"./src/ui/sectionedSettingsPanel.js\");\n/* harmony import */ var _ui_settingsPanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/settingsPanel */ \"./src/ui/settingsPanel.js\");\n/* harmony import */ var _ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/cssEditor */ \"./src/ui/cssEditor.js\");\n/* harmony import */ var _ui_addonlist__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/addonlist */ \"./src/ui/addonlist.jsx\");\n/* harmony import */ var _ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/presenceSettings */ \"./src/ui/presenceSettings.jsx\");\n/* harmony import */ var _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../ui/AccountInfos */ \"./src/ui/AccountInfos.jsx\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2_SettingsPanel {\n constructor() {\n this.sideBarOnClick = this.sideBarOnClick.bind(this);\n this.onChange = this.onChange.bind(this);\n this.updateSettings = this.updateSettings.bind(this);\n this.sidebar = new _settingsPanelSidebar__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.sideBarOnClick); // this.buildPluginProps = this.buildPluginProps.bind(this);\n // this.buildThemeProps = this.buildThemeProps.bind(this);\n\n this.showOriginal = this.showOriginal.bind(this);\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#bd-settingspane-container\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n let [classNameLayer, classSidebar] = [BDModules.get(e => e.layer && e.animating)[0].layer.split(\" \")[0], BDModules.get(e => e.standardSidebarView)[0]];\n const sidebar = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + classNameLayer + \" .\" + classSidebar.standardSidebarView.split(\" \")[0] + \", .\" + classNameLayer + \" .ui-standard-sidebar-view\");\n if (!sidebar) return false;\n const root = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].createElement(`
`);\n sidebar.append(root);\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n return true;\n }\n\n get coreSettings() {\n const settings = this.getSettings(\"core\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get lightcordSettings() {\n const settings = this.getSettings(\"lightcord\");\n const categories = [...new Set(settings.map(s => s.category))];\n const sections = categories.map(c => {\n return {\n title: c,\n settings: settings.filter(s => s.category == c)\n };\n });\n return sections;\n }\n\n get PresenceSettings() {\n return this.getSettings(\"status\");\n }\n\n get MsgLogSettings() {\n return this.getSettings(\"msglog\");\n }\n\n getSettings(category) {\n return Object.keys(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]).reduce((arr, key) => {\n const setting = _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settings\"][key];\n\n if (setting.cat === category && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n }\n\n return arr;\n }, []);\n }\n\n sideBarOnClick(id) {\n const contentRegion = _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".contentRegion-3nDuYy, .content-region\");\n contentRegion.style.display = \"none\";\n this.root.style.display = \"\";\n\n switch (id) {\n case \"core\":\n this.renderCoreSettings();\n break;\n\n case \"customcss\":\n this.renderCustomCssEditor();\n break;\n\n case \"plugins\":\n case \"themes\":\n this.renderAddonPane(id);\n break;\n\n case \"lightcord\":\n this.renderLightCordSettings();\n break;\n\n case \"status\":\n this.renderPresenceSettings();\n break;\n\n case \"accountinfo\":\n this.renderAccountInfos();\n break;\n }\n }\n\n onClick() {}\n\n onChange(id, checked) {\n this.updateSettings(id, checked);\n }\n\n updateSettings(id, enabled) {\n _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][id] = enabled;\n\n if (id == \"bda-gs-2\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal\");\n }\n\n if (id == \"bda-gs-3\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(document.body, \"bd-minimal-chan\");\n }\n\n if (id == \"bda-gs-1\") {\n if (enabled) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();else _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].removeButton();\n }\n\n if (id == \"bda-gs-4\") {\n if (enabled) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();else _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].stop();\n }\n\n if (id == \"bda-gs-5\") {\n if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");else _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].removeClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n }\n\n if (enabled && id == \"bda-gs-6\") _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n\n if (id == \"bda-gs-7\") {\n if (enabled) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();else _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].removeColoredText();\n }\n\n if (id == \"fork-ps-4\") {\n if (enabled) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();else _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].stop();\n }\n\n if (id == \"fork-ps-5\") {\n if (enabled) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n } else {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].unwatchContent(\"theme\");\n }\n }\n\n if (id == \"fork-wp-1\") {\n _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n }\n\n if (id == \"bda-gs-8\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopDebugListener();\n }\n\n if (id == \"fork-dm-1\") {\n if (enabled) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();else _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].stopCopySelector();\n }\n\n if (id === \"reactDevTools\") {\n if (enabled) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();else _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].stop();\n }\n\n if (id === \"lightcord-1\") {\n if (enabled) window.Lightcord.Settings.devMode = true;else window.Lightcord.Settings.devMode = false;\n }\n\n if (id === \"lightcord-2\") {\n if (enabled) window.Lightcord.Settings.callRingingBeat = true;else window.Lightcord.Settings.callRingingBeat = false;\n }\n\n if (id === \"lightcord-presence-1\") {\n if (enabled) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();else _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].disable();\n }\n\n this.saveSettings();\n }\n\n async initializeSettings() {\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"].reactDevTools) _reactDevTools__WEBPACK_IMPORTED_MODULE_9__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-2\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-3\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(document.body, \"bd-minimal-chan\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-1\"]) _publicServers__WEBPACK_IMPORTED_MODULE_11__[\"default\"].addButton();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-4\"]) _voiceMode__WEBPACK_IMPORTED_MODULE_12__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-5\"]) _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].addClass(_domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\"#app-mount\"), \"bda-dark\");\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-6\"]) _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"].inject24Hour();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-7\"]) _coloredText__WEBPACK_IMPORTED_MODULE_7__[\"default\"].injectColoredText();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-4\"]) _classNormalizer__WEBPACK_IMPORTED_MODULE_13__[\"default\"].start();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-1\"]) window.Lightcord.Settings.devMode = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-2\"]) window.Lightcord.Settings.callRingingBeat = true;\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"lightcord-presence-1\"]) _CustomRichPresence__WEBPACK_IMPORTED_MODULE_22__[\"default\"].enable();\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-ps-5\"]) {\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"plugin\");\n _contentManager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].watchContent(\"theme\");\n }\n\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"bda-gs-8\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startDebugListener();\n if (_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"][\"fork-dm-1\"]) _devMode__WEBPACK_IMPORTED_MODULE_14__[\"default\"].startCopySelector();\n this.saveSettings();\n }\n\n saveSettings() {\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"settings\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"]);\n _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setSettingGroup(\"rpc\", _0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"]);\n }\n\n loadSettings() {\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsCookie\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"settings\"));\n Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"settingsRPC\"], _dataStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getSettingGroup(\"rpc\"));\n }\n\n showOriginal() {\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.unmountComponentAtNode(this.root);\n this.root.style.display = \"none\";\n _domtools__WEBPACK_IMPORTED_MODULE_10__[\"default\"].query(\".\" + BDModules.get(e => e.contentRegion)[0].contentRegion.split(\" \")[0] + \", .content-region\").style.display = \"\";\n }\n\n renderSidebar() {\n const tabs = document.querySelectorAll(\"[class*='side-'] > [class*='item-']\");\n\n for (const element of tabs) {\n element.removeEventListener(\"click\", this.showOriginal);\n element.addEventListener(\"click\", this.showOriginal);\n }\n\n this.sidebar.render();\n }\n\n get coreComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"cspanel\",\n onChange: this.onChange,\n sections: this.coreSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get lightcordComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_sectionedSettingsPanel__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"lspannel\",\n onChange: this.onChange,\n sections: this.lightcordSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get PresenceComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_presenceSettings__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: \"lppannel\",\n onChange: this.onChange,\n settings: this.PresenceSettings\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get AccountInfosComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_AccountInfos__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: \"lapannel\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n get customCssComponent() {\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_scroller__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n contentColumn: true,\n fade: true,\n dark: true\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_cssEditor__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n key: \"csseditor\"\n }), _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_tools__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: \"tools\"\n }));\n }\n\n renderCoreSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.coreComponent, root);\n }\n\n renderLightCordSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.lightcordComponent, root);\n }\n\n renderPresenceSettings() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.PresenceComponent, root);\n }\n\n renderAccountInfos() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.AccountInfosComponent, root);\n }\n\n renderCustomCssEditor() {\n const root = this.root;\n if (!root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(this.customCssComponent, root);\n } // renderAddonPane(type) {\n // const root = this.root;\n // if (!root) return Utils.err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\");\n // BDV2.reactDom.render(this.contentComponent(type), root);\n // }\n\n\n renderAddonPane(type) {\n if (!this.root) return _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].err(\"SettingsPanel\", \"FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i\"); // I know this shouldn't be here, but when it isn't,\n // React refuses to change the button when going\n // between plugins and themes page... something\n // to debug later.\n\n class ContentList extends _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.Component {\n constructor(props) {\n super(props);\n this.prefix = this.props.type.replace(\"s\", \"\");\n this.onChange = this.onChange.bind(this);\n }\n\n componentDidMount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].on(`${this.prefix}-unloaded`, this.onChange);\n }\n\n componentWillUnmount() {\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-reloaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-loaded`, this.onChange);\n _bdEvents__WEBPACK_IMPORTED_MODULE_6__[\"default\"].off(`${this.prefix}-unloaded`, this.onChange);\n }\n\n onChange() {\n this.props.onChange(this.props.type);\n }\n\n render() {\n return this.props.children;\n }\n\n }\n\n const list = type === \"plugins\" ? Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdplugins\"]) : Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bdthemes\"]);\n return _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(ContentList, {\n type,\n onChange: this.sideBarOnClick\n }, _v2__WEBPACK_IMPORTED_MODULE_4__[\"default\"].react.createElement(_ui_addonlist__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n type,\n list\n })), this.root);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanM/NTdiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCByZWFjdERldlRvb2xzIGZyb20gXCIuL3JlYWN0RGV2VG9vbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdWkvdG9vbHNcIjtcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vdWkvc2Nyb2xsZXJcIjtcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNpZGVCYXJPbkNsaWNrID0gdGhpcy5zaWRlQmFyT25DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKHRoaXMuc2lkZUJhck9uQ2xpY2spOyAvLyB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMgPSB0aGlzLmJ1aWxkUGx1Z2luUHJvcHMuYmluZCh0aGlzKTtcbiAgICAvLyB0aGlzLmJ1aWxkVGhlbWVQcm9wcyA9IHRoaXMuYnVpbGRUaGVtZVByb3BzLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNob3dPcmlnaW5hbCA9IHRoaXMuc2hvd09yaWdpbmFsLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xuXG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHJldHVybiBfcm9vdDtcbiAgfVxuXG4gIGluamVjdFJvb3QoKSB7XG4gICAgbGV0IFtjbGFzc05hbWVMYXllciwgY2xhc3NTaWRlYmFyXSA9IFtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXV07XG4gICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLlwiICsgY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5cIiArIGNsYXNzTmFtZUxheWVyICsgXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcbiAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xuICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xuICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XG4gICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgY29yZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjLFxuICAgICAgICBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VjdGlvbnM7XG4gIH1cblxuICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogYyxcbiAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYylcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlY3Rpb25zO1xuICB9XG5cbiAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIik7XG4gIH1cblxuICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIik7XG4gIH1cblxuICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG5cbiAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcbiAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBzaWRlQmFyT25DbGljayhpZCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZWdpb24gPSBET00ucXVlcnkoXCIuY29udGVudFJlZ2lvbi0zbkR1WXksIC5jb250ZW50LXJlZ2lvblwiKTtcbiAgICBjb250ZW50UmVnaW9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cbiAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICBjYXNlIFwiY29yZVwiOlxuICAgICAgICB0aGlzLnJlbmRlckNvcmVTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImN1c3RvbWNzc1wiOlxuICAgICAgICB0aGlzLnJlbmRlckN1c3RvbUNzc0VkaXRvcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInBsdWdpbnNcIjpcbiAgICAgIGNhc2UgXCJ0aGVtZXNcIjpcbiAgICAgICAgdGhpcy5yZW5kZXJBZGRvblBhbmUoaWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImxpZ2h0Y29yZFwiOlxuICAgICAgICB0aGlzLnJlbmRlckxpZ2h0Q29yZFNldHRpbmdzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwic3RhdHVzXCI6XG4gICAgICAgIHRoaXMucmVuZGVyUHJlc2VuY2VTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImFjY291bnRpbmZvXCI6XG4gICAgICAgIHRoaXMucmVuZGVyQWNjb3VudEluZm9zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2soKSB7fVxuXG4gIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCkge1xuICAgIHNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO2Vsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XG4gICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7ZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO2Vsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO2Vsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XG4gICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XG4gICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO2Vsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7ZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWU7ZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xuICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZTtlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcbiAgICAgIGlmIChlbmFibGVkKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKCk7ZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKSB7XG4gICAgaWYgKHNldHRpbmdzQ29va2llLnJlYWN0RGV2VG9vbHMpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMlwiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtM1wiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy00XCJdKSB2b2ljZU1vZGUuc3RhcnQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNVwiXSkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTRcIl0pIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWU7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKTtcblxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkge1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLThcIl0pIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XG4gIH1cblxuICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKTtcbiAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKTtcbiAgfVxuXG4gIHNob3dPcmlnaW5hbCgpIHtcbiAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIERPTS5xdWVyeShcIi5cIiArIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRSZWdpb24pWzBdLmNvbnRlbnRSZWdpb24uc3BsaXQoXCIgXCIpWzBdICsgXCIsIC5jb250ZW50LXJlZ2lvblwiKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgfVxuXG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgY29uc3QgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXVwiKTtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0YWJzKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnNob3dPcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IGNvcmVDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtcbiAgICAgIGtleTogXCJjc3BhbmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IGxpZ2h0Y29yZENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge1xuICAgICAga2V5OiBcImxzcGFubmVsXCIsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIHNlY3Rpb25zOiB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICBnZXQgUHJlc2VuY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICBrZXk6IFwibHBwYW5uZWxcIixcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xuICAgIH0pLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtcbiAgICAgIGtleTogXCJ0b29sc1wiXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7XG4gICAgICBjb250ZW50Q29sdW1uOiB0cnVlLFxuICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgIGRhcms6IHRydWVcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xuICAgICAga2V5OiBcImxhcGFubmVsXCJcbiAgICB9KSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7XG4gICAgICBrZXk6IFwidG9vbHNcIlxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCBjdXN0b21Dc3NDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xuICAgICAgY29udGVudENvbHVtbjogdHJ1ZSxcbiAgICAgIGZhZGU6IHRydWUsXG4gICAgICBkYXJrOiB0cnVlXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge1xuICAgICAga2V5OiBcImNzc2VkaXRvclwiXG4gICAgfSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge1xuICAgICAga2V5OiBcInRvb2xzXCJcbiAgICB9KSk7XG4gIH1cblxuICByZW5kZXJDb3JlU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvcmVDb21wb25lbnQsIHJvb3QpO1xuICB9XG5cbiAgcmVuZGVyTGlnaHRDb3JkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmxpZ2h0Y29yZENvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG4gICAgaWYgKCFyb290KSByZXR1cm4gVXRpbHMuZXJyKFwiU2V0dGluZ3NQYW5lbFwiLCBcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyLTNRclVlRyAuc3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2lcIik7XG4gICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5QcmVzZW5jZUNvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJBY2NvdW50SW5mb3MoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudCwgcm9vdCk7XG4gIH1cblxuICByZW5kZXJDdXN0b21Dc3NFZGl0b3IoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmN1c3RvbUNzc0NvbXBvbmVudCwgcm9vdCk7XG4gIH0gLy8gcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgLy8gICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG4gIC8vICAgICBpZiAoIXJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTtcbiAgLy8gICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29udGVudENvbXBvbmVudCh0eXBlKSwgcm9vdCk7XG4gIC8vIH1cblxuXG4gIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QpIHJldHVybiBVdGlscy5lcnIoXCJTZXR0aW5nc1BhbmVsXCIsIFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXItM1FyVWVHIC5zdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aVwiKTsgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxuICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xuICAgIC8vIGJldHdlZW4gcGx1Z2lucyBhbmQgdGhlbWVzIHBhZ2UuLi4gc29tZXRoaW5nXG4gICAgLy8gdG8gZGVidWcgbGF0ZXIuXG5cbiAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcbiAgICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub24oYCR7dGhpcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgICBCREV2ZW50cy5vbihgJHt0aGlzLnByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIEJERXZlbnRzLm9mZihgJHt0aGlzLnByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS1sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcbiAgICAgICAgQkRFdmVudHMub2ZmKGAke3RoaXMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9IHR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XG4gICAgcmV0dXJuIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge1xuICAgICAgdHlwZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLnNpZGVCYXJPbkNsaWNrXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7XG4gICAgICB0eXBlLFxuICAgICAgbGlzdFxuICAgIH0pKSwgdGhpcy5yb290KTtcbiAgfVxuXG59KCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/settingsPanel.js\n"); /***/ }), @@ -323,7 +323,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0gl /***/ (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 V2_SettingsPanel_Sidebar; });\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _ui_sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/sidebar */ \"./src/ui/sidebar.js\");\n/* harmony import */ var _ui_icons_history__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/icons/history */ \"./src/ui/icons/history.jsx\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n\n\n\n\n\n\n\nclass V2_SettingsPanel_Sidebar {\n constructor(onClick) {\n this.onClick = onClick;\n }\n\n get items() {\n return [{\n text: \"Lightcord Settings\",\n id: \"lightcord\"\n }, {\n text: \"BetterDiscord Settings\",\n id: \"core\"\n }, {\n text: \"Plugins\",\n id: \"plugins\"\n }, {\n text: \"Themes\",\n id: \"themes\"\n }, {\n text: \"Custom CSS\",\n id: \"customcss\"\n }, {\n text: \"RichPresence\",\n id: \"status\"\n }, {\n text: \"Message Logger\",\n id: \"msglog\"\n }];\n }\n\n get component() {\n //\n const changelogButton = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Changelog\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: \"bd-changelog-button\",\n onClick: () => {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showChangelogModal(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]);\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_icons_history__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"bd-icon\",\n size: \"16px\"\n })));\n return _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"span\", null, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: this.onClick,\n headerText: \"Bandaged BD\",\n headerButton: changelogButton,\n items: this.items\n }));\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#bd-settings-sidebar\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n const tabs = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].queryAll(\"[class*='side-'] > [class*='item-']:not([class*=Danger])\");\n const changeLog = tabs[tabs.length - 1];\n if (!changeLog) return false;\n changeLog.parentElement.insertBefore(_domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
`), changeLog.previousElementSibling);\n return true;\n }\n\n render() {\n const root = this.root;\n\n if (!root) {\n console.log(\"FAILED TO LOCATE ROOT: [class*='side-'] > [class*='item-']:not([class*=Danger])\");\n return;\n }\n\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.render(this.component, root);\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsU2lkZWJhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsU2lkZWJhci5qcz85ZTA2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJiZENoYW5nZWxvZyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IFNpZGVCYXIgZnJvbSBcIi4uL3VpL3NpZGViYXJcIjtcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIge1xuICBjb25zdHJ1Y3RvcihvbkNsaWNrKSB7XG4gICAgdGhpcy5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIFNldHRpbmdzXCIsXG4gICAgICBpZDogXCJsaWdodGNvcmRcIlxuICAgIH0sIHtcbiAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLFxuICAgICAgaWQ6IFwiY29yZVwiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJQbHVnaW5zXCIsXG4gICAgICBpZDogXCJwbHVnaW5zXCJcbiAgICB9LCB7XG4gICAgICB0ZXh0OiBcIlRoZW1lc1wiLFxuICAgICAgaWQ6IFwidGhlbWVzXCJcbiAgICB9LCB7XG4gICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIixcbiAgICAgIGlkOiBcImN1c3RvbWNzc1wiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIixcbiAgICAgIGlkOiBcInN0YXR1c1wiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJNZXNzYWdlIExvZ2dlclwiLFxuICAgICAgaWQ6IFwibXNnbG9nXCJcbiAgICB9XTtcbiAgfVxuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgLy88VG9vbHRpcFdyYXAgY29sb3I9XCJibGFja1wiIHNpZGU9XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XG4gICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7XG4gICAgICBjb2xvcjogXCJibGFja1wiLFxuICAgICAgc2lkZTogXCJ0b3BcIixcbiAgICAgIHRleHQ6IFwiQ2hhbmdlbG9nXCJcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIixcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XG4gICAgICB9XG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEhpc3RvcnksIHtcbiAgICAgIGNsYXNzTmFtZTogXCJiZC1pY29uXCIsXG4gICAgICBzaXplOiBcIjE2cHhcIlxuICAgIH0pKSk7XG4gICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVCYXIsIHtcbiAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGljayxcbiAgICAgIGhlYWRlclRleHQ6IFwiQmFuZGFnZWQgQkRcIixcbiAgICAgIGhlYWRlckJ1dHRvbjogY2hhbmdlbG9nQnV0dG9uLFxuICAgICAgaXRlbXM6IHRoaXMuaXRlbXNcbiAgICB9KSk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5ncy1zaWRlYmFyXCIpO1xuXG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHJldHVybiBfcm9vdDtcbiAgfVxuXG4gIGluamVjdFJvb3QoKSB7XG4gICAgY29uc3QgdGFicyA9IERPTS5xdWVyeUFsbChcIltjbGFzcyo9J3NpZGUtJ10gPiBbY2xhc3MqPSdpdGVtLSddOm5vdChbY2xhc3MqPURhbmdlcl0pXCIpO1xuICAgIGNvbnN0IGNoYW5nZUxvZyA9IHRhYnNbdGFicy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWNoYW5nZUxvZykgcmV0dXJuIGZhbHNlO1xuICAgIGNoYW5nZUxvZy5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzLXNpZGViYXJcIj5gKSwgY2hhbmdlTG9nLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiBbY2xhc3MqPSdzaWRlLSddID4gW2NsYXNzKj0naXRlbS0nXTpub3QoW2NsYXNzKj1EYW5nZXJdKVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbXBvbmVudCwgcm9vdCk7XG4gICAgVXRpbHMub25SZW1vdmVkKHJvb3QsICgpID0+IHtcbiAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcbiAgICB9KTtcbiAgfVxuXG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/settingsPanelSidebar.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2_SettingsPanel_Sidebar; });\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony import */ var _ui_sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/sidebar */ \"./src/ui/sidebar.js\");\n/* harmony import */ var _ui_icons_history__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/icons/history */ \"./src/ui/icons/history.jsx\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n\n\n\n\n\n\n\nclass V2_SettingsPanel_Sidebar {\n constructor(onClick) {\n this.onClick = onClick;\n }\n\n get items() {\n return [{\n text: \"Lightcord Settings\",\n id: \"lightcord\"\n }, {\n text: \"BetterDiscord Settings\",\n id: \"core\"\n }, {\n text: \"Plugins\",\n id: \"plugins\"\n }, {\n text: \"Themes\",\n id: \"themes\"\n }, {\n text: \"Custom CSS\",\n id: \"customcss\"\n }, {\n text: \"RichPresence\",\n id: \"status\"\n }, {\n text: \"Message Logger\",\n id: \"msglog\"\n }, {\n text: \"Account Info\",\n id: \"accountinfo\"\n }];\n }\n\n get component() {\n //\n const changelogButton = _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"black\",\n side: \"top\",\n text: \"Changelog\"\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"div\", {\n className: \"bd-changelog-button\",\n onClick: () => {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showChangelogModal(_0globals__WEBPACK_IMPORTED_MODULE_0__[\"bbdChangelog\"]);\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_icons_history__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"bd-icon\",\n size: \"16px\"\n })));\n return _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(\"span\", null, _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].react.createElement(_ui_sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: this.onClick,\n headerText: \"Bandaged BD\",\n headerButton: changelogButton,\n items: this.items\n }));\n }\n\n get root() {\n const _root = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].query(\"#bd-settings-sidebar\");\n\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.root;\n }\n\n return _root;\n }\n\n injectRoot() {\n const tabs = _domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].queryAll(\"[class*='side-'] > [class*='item-']:not([class*=Danger])\");\n const changeLog = tabs[tabs.length - 1];\n if (!changeLog) return false;\n changeLog.parentElement.insertBefore(_domtools__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(`
`), changeLog.previousElementSibling);\n return true;\n }\n\n render() {\n const root = this.root;\n\n if (!root) {\n console.log(\"FAILED TO LOCATE ROOT: [class*='side-'] > [class*='item-']:not([class*=Danger])\");\n return;\n }\n\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.render(this.component, root);\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].onRemoved(root, () => {\n _v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].reactDom.unmountComponentAtNode(root);\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsU2lkZWJhci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9zZXR0aW5nc1BhbmVsU2lkZWJhci5qcz85ZTA2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJiZENoYW5nZWxvZyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IFNpZGVCYXIgZnJvbSBcIi4uL3VpL3NpZGViYXJcIjtcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIge1xuICBjb25zdHJ1Y3RvcihvbkNsaWNrKSB7XG4gICAgdGhpcy5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIFNldHRpbmdzXCIsXG4gICAgICBpZDogXCJsaWdodGNvcmRcIlxuICAgIH0sIHtcbiAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLFxuICAgICAgaWQ6IFwiY29yZVwiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJQbHVnaW5zXCIsXG4gICAgICBpZDogXCJwbHVnaW5zXCJcbiAgICB9LCB7XG4gICAgICB0ZXh0OiBcIlRoZW1lc1wiLFxuICAgICAgaWQ6IFwidGhlbWVzXCJcbiAgICB9LCB7XG4gICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIixcbiAgICAgIGlkOiBcImN1c3RvbWNzc1wiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIixcbiAgICAgIGlkOiBcInN0YXR1c1wiXG4gICAgfSwge1xuICAgICAgdGV4dDogXCJNZXNzYWdlIExvZ2dlclwiLFxuICAgICAgaWQ6IFwibXNnbG9nXCJcbiAgICB9LCB7XG4gICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxuICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxuICAgIH1dO1xuICB9XG5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICAvLzxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cbiAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b24gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtcbiAgICAgIGNvbG9yOiBcImJsYWNrXCIsXG4gICAgICBzaWRlOiBcInRvcFwiLFxuICAgICAgdGV4dDogXCJDaGFuZ2Vsb2dcIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLFxuICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICBVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcbiAgICAgIH1cbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge1xuICAgICAgY2xhc3NOYW1lOiBcImJkLWljb25cIixcbiAgICAgIHNpemU6IFwiMTZweFwiXG4gICAgfSkpKTtcbiAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUJhciwge1xuICAgICAgb25DbGljazogdGhpcy5vbkNsaWNrLFxuICAgICAgaGVhZGVyVGV4dDogXCJCYW5kYWdlZCBCRFwiLFxuICAgICAgaGVhZGVyQnV0dG9uOiBjaGFuZ2Vsb2dCdXR0b24sXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH0pKTtcbiAgfVxuXG4gIGdldCByb290KCkge1xuICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLXNldHRpbmdzLXNpZGViYXJcIik7XG5cbiAgICBpZiAoIV9yb290KSB7XG4gICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yb290O1xuICB9XG5cbiAgaW5qZWN0Um9vdCgpIHtcbiAgICBjb25zdCB0YWJzID0gRE9NLnF1ZXJ5QWxsKFwiW2NsYXNzKj0nc2lkZS0nXSA+IFtjbGFzcyo9J2l0ZW0tJ106bm90KFtjbGFzcyo9RGFuZ2VyXSlcIik7XG4gICAgY29uc3QgY2hhbmdlTG9nID0gdGFic1t0YWJzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghY2hhbmdlTG9nKSByZXR1cm4gZmFsc2U7XG4gICAgY2hhbmdlTG9nLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtc2V0dGluZ3Mtc2lkZWJhclwiPmApLCBjaGFuZ2VMb2cucHJldmlvdXNFbGVtZW50U2libGluZyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IFtjbGFzcyo9J3NpZGUtJ10gPiBbY2xhc3MqPSdpdGVtLSddOm5vdChbY2xhc3MqPURhbmdlcl0pXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29tcG9uZW50LCByb290KTtcbiAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xuICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHJvb3QpO1xuICAgIH0pO1xuICB9XG5cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/settingsPanelSidebar.js\n"); /***/ }), @@ -387,6 +387,18 @@ eval("__webpack_require__.r(__webpack_exports__);\nconst req = webpackJsonp.push /***/ }), +/***/ "./src/ui/AccountInfos.jsx": +/*!*********************************!*\ + !*** ./src/ui/AccountInfos.jsx ***! + \*********************************/ +/*! 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 V2C_AccountInfos; });\n/* harmony import */ var _modules_v2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _settingsTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settingsTitle */ \"./src/ui/settingsTitle.js\");\n/* harmony import */ var _settingsGroup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsGroup */ \"./src/ui/settingsGroup.js\");\n/* harmony import */ var _modules_dataStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _modules_CustomRichPresence__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modules/CustomRichPresence */ \"./src/modules/CustomRichPresence.js\");\n/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./select */ \"./src/ui/select.jsx\");\n/* harmony import */ var _timestampRender__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./timestampRender */ \"./src/ui/timestampRender.js\");\n/* harmony import */ var _modules_domtools__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../modules/domtools */ \"./src/modules/domtools.js\");\n\n\n\n\n\n\n\n\n\n/**\r\n * @type {typeof import(\"react\")}\r\n */\n\nconst React = _modules_v2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].React;\nlet contentModule = BDModules.get(e => e.contentColumn)[0];\nlet marginModule2 = BDModules.get(e => e.defaultMarginh5)[0];\nlet colorModule = BDModules.get(e => e.colorStandard)[0];\nlet sizeModule = BDModules.get(e => e.size32)[0];\nconst scrollbarModule1 = BDModules.get(e => e.scrollbarGhostHairline)[0];\nconst GuildModule = BDModules.get(e => e.default && e.default.getGuilds)[0].default;\nconst relationShipModule = BDModules.get(e => e.default && e.default.getRelationships)[0].default;\nconst sessionModule = BDModules.get(e => e.default && e.default.getSessions)[0].default;\nconst userModule = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default;\nclass V2C_AccountInfos extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return React.createElement(\"div\", {\n className: contentModule.contentColumn + \" \" + contentModule.contentColumnDefault + \" content-column default\",\n style: {\n padding: \"60px 40px 0px\"\n }\n }, React.createElement(_settingsTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"Account Infos\"\n }), React.createElement(\"div\", null, React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, \"Profile\"), React.createElement(CodeContent, {\n content: this.getProfileValue(),\n language: \"diff\"\n }), React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, \"Statistics\"), React.createElement(CodeContent, {\n content: this.getStatistics(),\n language: \"diff\"\n }), React.createElement(\"h5\", {\n className: colorModule.colorStandard + \" \" + sizeModule.size14 + \" \" + marginModule2.h5 + \" \" + marginModule2.defaultMarginh5\n }, \"Connected Sessions\"), React.createElement(CodeContent, {\n content: this.getSessionValue(),\n language: \"diff\"\n })), React.createElement(\"div\", {\n className: BDModules.get(e => e.marginBottom20)[0].marginBottom20\n }));\n }\n\n getSessionValue() {\n const sessionsRaw = sessionModule.getSessions();\n const sessions = Object.keys(sessionsRaw).filter(e => e !== \"all\").map(e => sessionsRaw[e]);\n if (sessions.length === 0) return \"- No session detected. Please try in a few seconds\";\n return sessions.map(e => {\n return `+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase() + e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ active: ${e.active ? \"Yes\" : \"No\"}\n+ Activities: ${e.activities.length}`;\n }).join(\"\\n\" + \"-\".repeat(38) + \"\\n\");\n }\n\n getProfileValue() {\n const user = userModule.getCurrentUser();\n return `+ Username: ${user.username}\n+ Discriminator: ${user.discriminator}\n+ Tag: ${user.tag}\n+ ID: ${user.id}\n+ Avatar: ${user.avatar}\n+ Avatar URL: https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.${user.avatar.startsWith(\"a_\") ? \"gif\" : \"png\"}?size=4096\n+ Email: ${user.email}\n+ Flags: ${user.flags}\n+ 2FA: ${user.mfaEnabled ? \"Yes\" : \"No\"}\n+ Has Been On Mobile: ${user.mobile ? \"Yes\" : \"No\"}\n+ Phone: ${user.phone || \"None\"}\n+ Verified: ${user.verified}\n+ Has Nitro: ${user.hasPremiumSubscription ? \"Yes\" : \"No\"}`;\n }\n\n getStatistics() {\n const guilds = Object.values(GuildModule.getGuilds());\n const relations = Object.keys(relationShipModule.getRelationships());\n const friends = relations.filter(e => relationShipModule.isFriend(e));\n const blocked = relations.filter(e => relationShipModule.isBlocked(e));\n return `+ Server Count: ${guilds.length} servers\n+ Relations: ${relations.length} relations\n+ Friends Count: ${friends.length} friends\n- Blocked Users Count: ${blocked.length} blocked users`;\n }\n\n}\nconst hightlightJS = BDModules.get(e => e.highlight)[0];\nconst messageModule1 = BDModules.get(e => e.markup)[0];\nconst messageModule2 = BDModules.get(e => e.messageContent)[0];\n\nclass CodeContent extends React.Component {\n render() {\n return React.createElement(\"div\", {\n class: `${messageModule1.markup} ${messageModule2.messageContent}`\n }, React.createElement(\"pre\", null, React.createElement(\"code\", {\n class: `${scrollbarModule1.scrollbarGhostHairline} hljs`,\n dangerouslySetInnerHTML: {\n __html: hightlightJS.highlight(this.props.language, this.props.content).value\n }\n })), React.createElement(\"div\", {\n className: BDModules.get(e => e.marginBottom8)[0].marginBottom8\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdWkvQWNjb3VudEluZm9zLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvQWNjb3VudEluZm9zLmpzeD9hYTgyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi4vbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2VcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgdGltZXN0YW1wUmVuZGVyIGZyb20gXCIuL3RpbWVzdGFtcFJlbmRlclwiO1xuaW1wb3J0IERPTVRvb2xzIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcbmxldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF07XG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF07XG5sZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXTtcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXTtcbmNvbnN0IHNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXTtcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0O1xuY29uc3QgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UmVsYXRpb25zaGlwcylbMF0uZGVmYXVsdDtcbmNvbnN0IHNlc3Npb25Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRTZXNzaW9ucylbMF0uZGVmYXVsdDtcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19BY2NvdW50SW5mb3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiICsgY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCArIFwiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHBhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwiXG4gICAgICB9XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChWMkNfU2V0dGluZ3NUaXRsZSwge1xuICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9zXCJcbiAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkICsgXCIgXCIgKyBzaXplTW9kdWxlLnNpemUxNCArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5oNSArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDVcbiAgICB9LCBcIlByb2ZpbGVcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29kZUNvbnRlbnQsIHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0UHJvZmlsZVZhbHVlKCksXG4gICAgICBsYW5ndWFnZTogXCJkaWZmXCJcbiAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCArIFwiIFwiICsgc2l6ZU1vZHVsZS5zaXplMTQgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuaDUgKyBcIiBcIiArIG1hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1XG4gICAgfSwgXCJTdGF0aXN0aWNzXCIpLCBSZWFjdC5jcmVhdGVFbGVtZW50KENvZGVDb250ZW50LCB7XG4gICAgICBjb250ZW50OiB0aGlzLmdldFN0YXRpc3RpY3MoKSxcbiAgICAgIGxhbmd1YWdlOiBcImRpZmZcIlxuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkICsgXCIgXCIgKyBzaXplTW9kdWxlLnNpemUxNCArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5oNSArIFwiIFwiICsgbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDVcbiAgICB9LCBcIkNvbm5lY3RlZCBTZXNzaW9uc1wiKSwgUmVhY3QuY3JlYXRlRWxlbWVudChDb2RlQ29udGVudCwge1xuICAgICAgY29udGVudDogdGhpcy5nZXRTZXNzaW9uVmFsdWUoKSxcbiAgICAgIGxhbmd1YWdlOiBcImRpZmZcIlxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMFxuICAgIH0pKTtcbiAgfVxuXG4gIGdldFNlc3Npb25WYWx1ZSgpIHtcbiAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKTtcbiAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSk7XG4gICAgaWYgKHNlc3Npb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIjtcbiAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xuICAgICAgcmV0dXJuIGArIGlkOiAke2Uuc2Vzc2lvbklkfVxuKyBvczogJHtlLmNsaWVudEluZm8ub3NbMF0udG9VcHBlckNhc2UoKSArIGUuY2xpZW50SW5mby5vcy5zbGljZSgxKX1cbisgY2xpZW50OiAke2UuY2xpZW50SW5mby5jbGllbnR9XG4rIHN0YXR1czogJHtlLnN0YXR1c31cbisgYWN0aXZlOiAke2UuYWN0aXZlID8gXCJZZXNcIiA6IFwiTm9cIn1cbisgQWN0aXZpdGllczogJHtlLmFjdGl2aXRpZXMubGVuZ3RofWA7XG4gICAgfSkuam9pbihcIlxcblwiICsgXCItXCIucmVwZWF0KDM4KSArIFwiXFxuXCIpO1xuICB9XG5cbiAgZ2V0UHJvZmlsZVZhbHVlKCkge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XG4rIERpc2NyaW1pbmF0b3I6ICR7dXNlci5kaXNjcmltaW5hdG9yfVxuKyBUYWc6ICR7dXNlci50YWd9XG4rIElEOiAke3VzZXIuaWR9XG4rIEF2YXRhcjogJHt1c2VyLmF2YXRhcn1cbisgQXZhdGFyIFVSTDogaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXZhdGFycy8ke3VzZXIuaWR9LyR7dXNlci5hdmF0YXJ9LiR7dXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCJ9P3NpemU9NDA5NlxuKyBFbWFpbDogJHt1c2VyLmVtYWlsfVxuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxuKyAyRkE6ICR7dXNlci5tZmFFbmFibGVkID8gXCJZZXNcIiA6IFwiTm9cIn1cbisgSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cbisgUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cbisgVmVyaWZpZWQ6ICR7dXNlci52ZXJpZmllZH1cbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/IFwiWWVzXCIgOiBcIk5vXCJ9YDtcbiAgfVxuXG4gIGdldFN0YXRpc3RpY3MoKSB7XG4gICAgY29uc3QgZ3VpbGRzID0gT2JqZWN0LnZhbHVlcyhHdWlsZE1vZHVsZS5nZXRHdWlsZHMoKSk7XG4gICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSk7XG4gICAgY29uc3QgZnJpZW5kcyA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNGcmllbmQoZSkpO1xuICAgIGNvbnN0IGJsb2NrZWQgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzQmxvY2tlZChlKSk7XG4gICAgcmV0dXJuIGArIFNlcnZlciBDb3VudDogJHtndWlsZHMubGVuZ3RofSBzZXJ2ZXJzXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcbisgRnJpZW5kcyBDb3VudDogJHtmcmllbmRzLmxlbmd0aH0gZnJpZW5kc1xuLSBCbG9ja2VkIFVzZXJzIENvdW50OiAke2Jsb2NrZWQubGVuZ3RofSBibG9ja2VkIHVzZXJzYDtcbiAgfVxuXG59XG5jb25zdCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdO1xuY29uc3QgbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdO1xuY29uc3QgbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF07XG5cbmNsYXNzIENvZGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YFxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwcmVcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge1xuICAgICAgY2xhc3M6IGAke3Njcm9sbGJhck1vZHVsZTEuc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gaGxqc2AsXG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICBfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZVxuICAgICAgfVxuICAgIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbThcbiAgICB9KSk7XG4gIH1cblxufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/AccountInfos.jsx\n"); + +/***/ }), + /***/ "./src/ui/addoncard.jsx": /*!******************************!*\ !*** ./src/ui/addoncard.jsx ***! diff --git a/BetterDiscordApp/src/modules/settingsPanel.js b/BetterDiscordApp/src/modules/settingsPanel.js index 04cdac8..27b48b0 100644 --- a/BetterDiscordApp/src/modules/settingsPanel.js +++ b/BetterDiscordApp/src/modules/settingsPanel.js @@ -23,6 +23,7 @@ import CssEditor from "../ui/cssEditor"; import CardList from "../ui/addonlist"; import V2C_PresenceSettings from "../ui/presenceSettings"; import CustomRichPresence from "./CustomRichPresence"; +import V2C_AccountInfos from "../ui/AccountInfos"; export default new class V2_SettingsPanel { @@ -117,6 +118,10 @@ export default new class V2_SettingsPanel { break case "status": this.renderPresenceSettings() + break + case "accountinfo": + this.renderAccountInfos() + break } } @@ -282,7 +287,7 @@ export default new class V2_SettingsPanel { get PresenceComponent() { return BDV2.react.createElement(Scroller, {contentColumn: true, fade: true, dark: true}, BDV2.react.createElement(V2C_PresenceSettings, { - key: "lspannel", + key: "lppannel", onChange: this.onChange, settings: this.PresenceSettings }), @@ -290,6 +295,15 @@ export default new class V2_SettingsPanel { ); } + get AccountInfosComponent() { + return BDV2.react.createElement(Scroller, {contentColumn: true, fade: true, dark: true}, + BDV2.react.createElement(V2C_AccountInfos, { + key: "lapannel" + }), + BDV2.react.createElement(Tools, {key: "tools"}) + ); + } + get customCssComponent() { return BDV2.react.createElement(Scroller, {contentColumn: true, fade: true, dark: true}, BDV2.react.createElement(CssEditor, {key: "csseditor"}), @@ -315,6 +329,12 @@ export default new class V2_SettingsPanel { BDV2.reactDom.render(this.PresenceComponent, root); } + renderAccountInfos() { + const root = this.root; + if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i"); + BDV2.reactDom.render(this.AccountInfosComponent, root); + } + renderCustomCssEditor() { const root = this.root; if (!root) return Utils.err("SettingsPanel", "FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i"); diff --git a/BetterDiscordApp/src/modules/settingsPanelSidebar.js b/BetterDiscordApp/src/modules/settingsPanelSidebar.js index da53645..ae5be40 100644 --- a/BetterDiscordApp/src/modules/settingsPanelSidebar.js +++ b/BetterDiscordApp/src/modules/settingsPanelSidebar.js @@ -35,6 +35,9 @@ export default class V2_SettingsPanel_Sidebar { }, { text: "Message Logger", id: "msglog" + }, { + text: "Account Info", + id: "accountinfo" }]; } diff --git a/BetterDiscordApp/src/ui/AccountInfos.jsx b/BetterDiscordApp/src/ui/AccountInfos.jsx new file mode 100644 index 0000000..2e0e603 --- /dev/null +++ b/BetterDiscordApp/src/ui/AccountInfos.jsx @@ -0,0 +1,119 @@ +import BDV2 from "../modules/v2"; +import V2C_SettingsTitle from "./settingsTitle"; +import V2C_SettingsGroup from "./settingsGroup"; +import dataStore from "../modules/dataStore"; +import { defaultRPC, settingsRPC } from "../0globals"; +import CustomRichPresence from "../modules/CustomRichPresence" +import Select from "./select"; +import timestampRender from "./timestampRender" +import DOMTools from "../modules/domtools"; + +/** + * @type {typeof import("react")} + */ +const React = BDV2.React; + +let contentModule = BDModules.get(e => e.contentColumn)[0] +let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0] +let colorModule = BDModules.get(e => e.colorStandard)[0] +let sizeModule = BDModules.get(e => e.size32)[0] +const scrollbarModule1 = BDModules.get(e => e.scrollbarGhostHairline)[0] +const GuildModule = BDModules.get(e => e.default && e.default.getGuilds)[0].default +const relationShipModule = BDModules.get(e => e.default && e.default.getRelationships)[0].default +const sessionModule = BDModules.get(e => e.default && e.default.getSessions)[0].default +const userModule = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default + +export default class V2C_AccountInfos extends React.Component { + constructor(props) { + super(props); + } + + render() { + + return (
+ +
+
+ Profile +
+ +
+ Statistics +
+ +
+ Connected Sessions +
+ +
+
e.marginBottom20)[0].marginBottom20}>
+
) + } + + getSessionValue(){ + const sessionsRaw = sessionModule.getSessions() + const sessions = Object.keys(sessionsRaw).filter(e => e !== "all").map(e => sessionsRaw[e]) + + if(sessions.length === 0)return "- No session detected. Please try in a few seconds" + + return sessions.map(e => { + return `+ id: ${e.sessionId} ++ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)} ++ client: ${e.clientInfo.client} ++ status: ${e.status} ++ active: ${e.active ? "Yes" : "No"} ++ Activities: ${e.activities.length}` + }).join("\n"+"-".repeat(38)+"\n") + } + + getProfileValue(){ + const user = userModule.getCurrentUser() + + return `+ Username: ${user.username} ++ Discriminator: ${user.discriminator} ++ Tag: ${user.tag} ++ ID: ${user.id} ++ Avatar: ${user.avatar} ++ Avatar URL: https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.${user.avatar.startsWith("a_") ? "gif" : "png"}?size=4096 ++ Email: ${user.email} ++ Flags: ${user.flags} ++ 2FA: ${user.mfaEnabled ? "Yes" : "No"} ++ Has Been On Mobile: ${user.mobile ? "Yes" : "No"} ++ Phone: ${user.phone || "None"} ++ Verified: ${user.verified} ++ Has Nitro: ${user.hasPremiumSubscription ? "Yes" : "No"}` + } + + getStatistics(){ + + const guilds = Object.values(GuildModule.getGuilds()) + const relations = Object.keys(relationShipModule.getRelationships()) + const friends = relations.filter(e => relationShipModule.isFriend(e)) + const blocked = relations.filter(e => relationShipModule.isBlocked(e)) + + return `+ Server Count: ${guilds.length} servers ++ Relations: ${relations.length} relations ++ Friends Count: ${friends.length} friends +- Blocked Users Count: ${blocked.length} blocked users` + } +} + + +const hightlightJS = BDModules.get(e => e.highlight)[0] +const messageModule1 = BDModules.get(e => e.markup)[0] +const messageModule2 = BDModules.get(e => e.messageContent)[0] + +class CodeContent extends React.Component { + render(){ + + return (
+
+                
+
+                
+            
+
e.marginBottom8)[0].marginBottom8}>
+
) + } +} \ No newline at end of file diff --git a/DiscordJS/src/client/client.ts b/DiscordJS/src/client/client.ts index 5d15e1d..cedebcb 100644 --- a/DiscordJS/src/client/client.ts +++ b/DiscordJS/src/client/client.ts @@ -5,8 +5,11 @@ import { Snowflake, Channel } from ".."; import { channelsModule } from "../util/DiscordToModules"; import { createChannel } from "../util/util"; +let hasInit = false export default class Client extends EventEmitter { constructor(){ + if(hasInit)throw new DiscordJSError("Cannot initialized more than one client.") + hasInit = true super() } @@ -28,7 +31,7 @@ export default class Client extends EventEmitter { } get channels():Collection{ - const channels = Object.values(channelsModule.getChannels()) + const channels = Object.values(channelsModule.getAllChannels()) return new Collection(channels.map(e => ([e.id, createChannel(e)]))) } } \ No newline at end of file diff --git a/DiscordJS/src/structures/BaseChannel.ts b/DiscordJS/src/structures/BaseChannel.ts index 32d88ce..fff6833 100644 --- a/DiscordJS/src/structures/BaseChannel.ts +++ b/DiscordJS/src/structures/BaseChannel.ts @@ -1,5 +1,25 @@ -export default class BaseChannel { - constructor(){ - +import { DiscordChannel, channelsModule } from "../util/DiscordToModules"; +import Client from "../client/client"; +import BaseStructure from "./BaseStructure"; +import Snowflake from "../util/Snowflake" + +export default class BaseChannel extends BaseStructure { + id:string + deleted:boolean + constructor(channel:DiscordChannel){ + super() + this.id = channel.id + this.deleted = false } + + get createdAt():Date{ + return new Date(this.createdTimestamp) + } + get createdTimestamp(): number{ + return Snowflake.deconstruct(this.id).timestamp + } + + delete() { + return channelsModule.delete(this.id); + } } \ No newline at end of file diff --git a/DiscordJS/src/structures/BaseStructure.ts b/DiscordJS/src/structures/BaseStructure.ts new file mode 100644 index 0000000..5684b5b --- /dev/null +++ b/DiscordJS/src/structures/BaseStructure.ts @@ -0,0 +1,9 @@ +import Client from "../client/client"; + +export default class BaseStructure { + constructor(){} + + get client():Client { + return window.DiscordJSClient + } +} \ No newline at end of file diff --git a/DiscordJS/src/structures/TextChannel.ts b/DiscordJS/src/structures/TextChannel.ts new file mode 100644 index 0000000..021640b --- /dev/null +++ b/DiscordJS/src/structures/TextChannel.ts @@ -0,0 +1,3 @@ +export class TextChannel extends TextBasedChannel, GuildChannel { + +} \ No newline at end of file diff --git a/DiscordJS/src/util/DiscordToModules.ts b/DiscordJS/src/util/DiscordToModules.ts index 7c413d0..d1ad8ec 100644 --- a/DiscordJS/src/util/DiscordToModules.ts +++ b/DiscordJS/src/util/DiscordToModules.ts @@ -11,7 +11,7 @@ function requireModule(filter: (module:any) => boolean){ return module && module.default || module } -export const channelsModule:{ +const channelsModuleInternal1:{ getChannel(id:Snowflake): DiscordChannel, getChannels(): { [k:string]: DiscordChannel @@ -30,6 +30,10 @@ export const channelsModule:{ }, getGDMsForRecipients(recipients: Snowflake[]):Set } = requireModule(e => e.default && e.default.getChannels && e.default.getChannel) +export const channelsModule = { + getChannel: channelsModuleInternal1.getChannel, + getAllChannels: channelsModuleInternal1.getChannels +} export interface DiscordChannel { application_id?: Snowflake, diff --git a/DiscordJS/src/util/Snowflake.ts b/DiscordJS/src/util/Snowflake.ts new file mode 100644 index 0000000..e9c4d86 --- /dev/null +++ b/DiscordJS/src/util/Snowflake.ts @@ -0,0 +1,96 @@ +'use strict'; + +import Util = require('../util/util'); + +// Discord epoch (2015-01-01T00:00:00.000Z) +const EPOCH = 1420070400000; +let INCREMENT = 0; + +/** + * A container for useful snowflake-related methods. + */ +export default class SnowflakeUtil { + constructor() { + throw new Error(`The ${this.constructor.name} class may not be instantiated.`); + } + + /** + * A Twitter snowflake, except the epoch is 2015-01-01T00:00:00.000Z + * ``` + * If we have a snowflake '266241948824764416' we can represent it as binary: + * + * 64 22 17 12 0 + * 000000111011000111100001101001000101000000 00001 00000 000000000000 + * number of ms since Discord epoch worker pid increment + * ``` + * @typedef {string} Snowflake + */ + + /** + * Generates a Discord snowflake. + * This hardcodes the worker ID as 1 and the process ID as 0. + * @param {number|Date} [timestamp=Date.now()] Timestamp or date of the snowflake to generate + * @returns {Snowflake} The generated snowflake + */ + static generate(timestamp: number | Date = Date.now()): Snowflake { + if (timestamp instanceof Date) timestamp = timestamp.getTime(); + if (typeof timestamp !== 'number' || isNaN(timestamp)) { + throw new TypeError( + `"timestamp" argument must be a number (received ${isNaN(timestamp) ? 'NaN' : typeof timestamp})`, + ); + } + if (INCREMENT >= 4095) INCREMENT = 0; + // eslint-disable-next-line max-len + const BINARY = `${(timestamp - EPOCH).toString(2).padStart(42, '0')}0000100000${(INCREMENT++) + .toString(2) + .padStart(12, '0')}`; + return Util.binaryToID(BINARY); + } + + /** + * A deconstructed snowflake. + * @typedef {Object} DeconstructedSnowflake + * @property {number} timestamp Timestamp the snowflake was created + * @property {Date} date Date the snowflake was created + * @property {number} workerID Worker ID in the snowflake + * @property {number} processID Process ID in the snowflake + * @property {number} increment Increment in the snowflake + * @property {string} binary Binary representation of the snowflake + */ + + /** + * Deconstructs a Discord snowflake. + * @param {Snowflake} snowflake Snowflake to deconstruct + * @returns {DeconstructedSnowflake} Deconstructed snowflake + */ + static deconstruct(snowflake: Snowflake): DeconstructedSnowflake { + const BINARY = Util.idToBinary(snowflake) + .toString() + .padStart(64, '0'); + const res = { + timestamp: parseInt(BINARY.substring(0, 42), 2) + EPOCH, + workerID: parseInt(BINARY.substring(42, 47), 2), + processID: parseInt(BINARY.substring(47, 52), 2), + increment: parseInt(BINARY.substring(52, 64), 2), + binary: BINARY, + }; + Object.defineProperty(res, 'date', { + get: function get() { + return new Date(this.timestamp); + }, + enumerable: true, + }); + return res as DeconstructedSnowflake; + } +} + +type DeconstructedSnowflake = { + timestamp: number, + workerID: number, + processID: number, + increment: number, + binary: string, + readonly date: Date +} + +type Snowflake = string \ No newline at end of file diff --git a/DiscordJS/src/util/util.ts b/DiscordJS/src/util/util.ts index 8afdc06..5438116 100644 --- a/DiscordJS/src/util/util.ts +++ b/DiscordJS/src/util/util.ts @@ -1,5 +1,71 @@ import { DiscordChannel } from "./DiscordToModules" +import { Channel } from ".."; -export function createChannel(channel:DiscordChannel){ - +export function createChannel(channel:DiscordChannel):Channel{ + let constructor = channels[channel.type] + return new constructor(channel) +} + +const channels:(new(channel:DiscordChannel) => Channel)[] = [ + TextChann +] + +export function applyMixins(derivedCtor: any, baseCtors: any[]) { + baseCtors.forEach(baseCtor => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { + if (name !== 'constructor') { + derivedCtor.prototype[name] = baseCtor.prototype[name]; + } + }); + }); +} + +/** + * Transforms a snowflake from a decimal string to a bit string. + * @param {string} num Snowflake to be transformed + * @returns {string} + * @private + */ +export function idToBinary(num:string):string{ + let bin = ''; + let high = parseInt(num.slice(0, -10)) || 0; + let low = parseInt(num.slice(-10)); + while (low > 0 || high > 0) { + bin = String(low & 1) + bin; + low = Math.floor(low / 2); + if (high > 0) { + low += 5000000000 * (high % 2); + high = Math.floor(high / 2); + } + } + return bin; +} + +/** +* Transforms a snowflake from a bit string to a decimal string. +* @param {string} num Bit string to be transformed +* @returns {string} +* @private +*/ +export function binaryToID(num:string):string { + let dec = ''; + + while (num.length > 50) { + const high = parseInt(num.slice(0, -32), 2); + const low = parseInt((high % 10).toString(2) + num.slice(-32), 2); + + dec = (low % 10).toString() + dec; + num = Math.floor(high / 10).toString(2) + + Math.floor(low / 10) + .toString(2) + .padStart(32, '0'); + } + + let num2 = parseInt(num, 2); + while (num2 > 0) { + dec = (num2 % 10).toString() + dec; + num2 = Math.floor(num2 / 10); + } + + return dec; } \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/mainScreenPreload.js b/modules/discord_desktop_core/core/app/mainScreenPreload.js index 413c280..0ab8aca 100644 --- a/modules/discord_desktop_core/core/app/mainScreenPreload.js +++ b/modules/discord_desktop_core/core/app/mainScreenPreload.js @@ -61,7 +61,7 @@ process.once('loaded', () => { global.setImmediate = _setImmediate; global.clearImmediate = _clearImmediate; - console.log("%cLightcord %s", "text-shadow: -1px -1px hsl(0,100%,50%), 1px 1px hsl(5.4, 100%, 50%), 3px 2px hsl(10.8, 100%, 50%), 5px 3px hsl(16.2, 100%, 50%), 7px 4px hsl(21.6, 100%, 50%), 9px 5px hsl(27, 100%, 50%), 11px 6px hsl(32.4, 100%, 50%), 13px 7px hsl(37.8, 100%, 50%), 14px 8px hsl(43.2, 100%, 50%), 16px 9px hsl(48.6, 100%, 50%), 18px 10px hsl(54, 100%, 50%), 20px 11px hsl(59.4, 100%, 50%), 22px 12px hsl(64.8, 100%, 50%), 23px 13px hsl(70.2, 100%, 50%), 25px 14px hsl(75.6, 100%, 50%), 27px 15px hsl(81, 100%, 50%), 28px 16px hsl(86.4, 100%, 50%), 30px 17px hsl(91.8, 100%, 50%), 32px 18px hsl(97.2, 100%, 50%), 33px 19px hsl(102.6, 100%, 50%), 35px 20px hsl(108, 100%, 50%), 36px 21px hsl(113.4, 100%, 50%), 38px 22px hsl(118.8, 100%, 50%), 39px 23px hsl(124.2, 100%, 50%), 41px 24px hsl(129.6, 100%, 50%), 42px 25px hsl(135, 100%, 50%), 43px 26px hsl(140.4, 100%, 50%), 45px 27px hsl(145.8, 100%, 50%), 46px 28px hsl(151.2, 100%, 50%), 47px 29px hsl(156.6, 100%, 50%), 48px 30px hsl(162, 100%, 50%), 49px 31px hsl(167.4, 100%, 50%), 50px 32px hsl(172.8, 100%, 50%), 51px 33px hsl(178.2, 100%, 50%), 52px 34px hsl(183.6, 100%, 50%), 53px 35px hsl(189, 100%, 50%), 54px 36px hsl(194.4, 100%, 50%), 55px 37px hsl(199.8, 100%, 50%), 55px 38px hsl(205.2, 100%, 50%), 56px 39px hsl(210.6, 100%, 50%), 57px 40px hsl(216, 100%, 50%), 57px 41px hsl(221.4, 100%, 50%), 58px 42px hsl(226.8, 100%, 50%), 58px 43px hsl(232.2, 100%, 50%), 58px 44px hsl(237.6, 100%, 50%), 59px 45px hsl(243, 100%, 50%), 59px 46px hsl(248.4, 100%, 50%), 59px 47px hsl(253.8, 100%, 50%), 59px 48px hsl(259.2, 100%, 50%), 59px 49px hsl(264.6, 100%, 50%), 60px 50px hsl(270, 100%, 50%), 59px 51px hsl(275.4, 100%, 50%), 59px 52px hsl(280.8, 100%, 50%), 59px 53px hsl(286.2, 100%, 50%), 59px 54px hsl(291.6, 100%, 50%), 59px 55px hsl(297, 100%, 50%), 58px 56px hsl(302.4, 100%, 50%), 58px 57px hsl(307.8, 100%, 50%), 58px 58px hsl(313.2, 100%, 50%), 57px 59px hsl(318.6, 100%, 50%), 57px 60px hsl(324, 100%, 50%), 56px 61px hsl(329.4, 100%, 50%), 55px 62px hsl(334.8, 100%, 50%), 55px 63px hsl(340.2, 100%, 50%), 54px 64px hsl(345.6, 100%, 50%), 53px 65px hsl(351, 100%, 50%), 52px 66px hsl(356.4, 100%, 50%), 51px 67px hsl(361.8, 100%, 50%), 50px 68px hsl(367.2, 100%, 50%), 49px 69px hsl(372.6, 100%, 50%), 48px 70px hsl(378, 100%, 50%), 47px 71px hsl(383.4, 100%, 50%), 46px 72px hsl(388.8, 100%, 50%), 45px 73px hsl(394.2, 100%, 50%), 43px 74px hsl(399.6, 100%, 50%), 42px 75px hsl(405, 100%, 50%), 41px 76px hsl(410.4, 100%, 50%), 39px 77px hsl(415.8, 100%, 50%), 38px 78px hsl(421.2, 100%, 50%), 36px 79px hsl(426.6, 100%, 50%), 35px 80px hsl(432, 100%, 50%), 33px 81px hsl(437.4, 100%, 50%), 32px 82px hsl(442.8, 100%, 50%), 30px 83px hsl(448.2, 100%, 50%), 28px 84px hsl(453.6, 100%, 50%), 27px 85px hsl(459, 100%, 50%), 25px 86px hsl(464.4, 100%, 50%), 23px 87px hsl(469.8, 100%, 50%), 22px 88px hsl(475.2, 100%, 50%), 20px 89px hsl(480.6, 100%, 50%), 18px 90px hsl(486, 100%, 50%), 16px 91px hsl(491.4, 100%, 50%), 14px 92px hsl(496.8, 100%, 50%), 13px 93px hsl(502.2, 100%, 50%), 11px 94px hsl(507.6, 100%, 50%), 9px 95px hsl(513, 100%, 50%), 7px 96px hsl(518.4, 100%, 50%), 5px 97px hsl(523.8, 100%, 50%), 3px 98px hsl(529.2, 100%, 50%), 1px 99px hsl(534.6, 100%, 50%), 7px 100px hsl(540, 100%, 50%), -1px 101px hsl(545.4, 100%, 50%), -3px 102px hsl(550.8, 100%, 50%), -5px 103px hsl(556.2, 100%, 50%), -7px 104px hsl(561.6, 100%, 50%), -9px 105px hsl(567, 100%, 50%), -11px 106px hsl(572.4, 100%, 50%), -13px 107px hsl(577.8, 100%, 50%), -14px 108px hsl(583.2, 100%, 50%), -16px 109px hsl(588.6, 100%, 50%), -18px 110px hsl(594, 100%, 50%), -20px 111px hsl(599.4, 100%, 50%), -22px 112px hsl(604.8, 100%, 50%), -23px 113px hsl(610.2, 100%, 50%), -25px 114px hsl(615.6, 100%, 50%), -27px 115px hsl(621, 100%, 50%), -28px 116px hsl(626.4, 100%, 50%), -30px 117px hsl(631.8, 100%, 50%), -32px 118px hsl(637.2, 100%, 50%), -33px 119px hsl(642.6, 100%, 50%), -35px 120px hsl(648, 100%, 50%), -36px 121px hsl(653.4, 100%, 50%), -38px 122px hsl(658.8, 100%, 50%), -39px 123px hsl(664.2, 100%, 50%), -41px 124px hsl(669.6, 100%, 50%), -42px 125px hsl(675, 100%, 50%), -43px 126px hsl(680.4, 100%, 50%), -45px 127px hsl(685.8, 100%, 50%), -46px 128px hsl(691.2, 100%, 50%), -47px 129px hsl(696.6, 100%, 50%), -48px 130px hsl(702, 100%, 50%), -49px 131px hsl(707.4, 100%, 50%), -50px 132px hsl(712.8, 100%, 50%), -51px 133px hsl(718.2, 100%, 50%), -52px 134px hsl(723.6, 100%, 50%), -53px 135px hsl(729, 100%, 50%), -54px 136px hsl(734.4, 100%, 50%), -55px 137px hsl(739.8, 100%, 50%), -55px 138px hsl(745.2, 100%, 50%), -56px 139px hsl(750.6, 100%, 50%), -57px 140px hsl(756, 100%, 50%), -57px 141px hsl(761.4, 100%, 50%), -58px 142px hsl(766.8, 100%, 50%), -58px 143px hsl(772.2, 100%, 50%), -58px 144px hsl(777.6, 100%, 50%), -59px 145px hsl(783, 100%, 50%), -59px 146px hsl(788.4, 100%, 50%), -59px 147px hsl(793.8, 100%, 50%), -59px 148px hsl(799.2, 100%, 50%), -59px 149px hsl(804.6, 100%, 50%), -60px 150px hsl(810, 100%, 50%), -59px 151px hsl(815.4, 100%, 50%), -59px 152px hsl(820.8, 100%, 50%), -59px 153px hsl(826.2, 100%, 50%), -59px 154px hsl(831.6, 100%, 50%), -59px 155px hsl(837, 100%, 50%), -58px 156px hsl(842.4, 100%, 50%), -58px 157px hsl(847.8, 100%, 50%), -58px 158px hsl(853.2, 100%, 50%), -57px 159px hsl(858.6, 100%, 50%), -57px 160px hsl(864, 100%, 50%), -56px 161px hsl(869.4, 100%, 50%), -55px 162px hsl(874.8, 100%, 50%), -55px 163px hsl(880.2, 100%, 50%), -54px 164px hsl(885.6, 100%, 50%), -53px 165px hsl(891, 100%, 50%), -52px 166px hsl(896.4, 100%, 50%), -51px 167px hsl(901.8, 100%, 50%), -50px 168px hsl(907.2, 100%, 50%), -49px 169px hsl(912.6, 100%, 50%), -48px 170px hsl(918, 100%, 50%), -47px 171px hsl(923.4, 100%, 50%), -46px 172px hsl(928.8, 100%, 50%), -45px 173px hsl(934.2, 100%, 50%), -43px 174px hsl(939.6, 100%, 50%), -42px 175px hsl(945, 100%, 50%), -41px 176px hsl(950.4, 100%, 50%), -39px 177px hsl(955.8, 100%, 50%), -38px 178px hsl(961.2, 100%, 50%), -36px 179px hsl(966.6, 100%, 50%), -35px 180px hsl(972, 100%, 50%), -33px 181px hsl(977.4, 100%, 50%), -32px 182px hsl(982.8, 100%, 50%), -30px 183px hsl(988.2, 100%, 50%), -28px 184px hsl(993.6, 100%, 50%), -27px 185px hsl(999, 100%, 50%), -25px 186px hsl(1004.4, 100%, 50%), -23px 187px hsl(1009.8, 100%, 50%), -22px 188px hsl(1015.2, 100%, 50%), -20px 189px hsl(1020.6, 100%, 50%), -18px 190px hsl(1026, 100%, 50%), -16px 191px hsl(1031.4, 100%, 50%), -14px 192px hsl(1036.8, 100%, 50%), -13px 193px hsl(1042.2, 100%, 50%), -11px 194px hsl(1047.6, 100%, 50%), -9px 195px hsl(1053, 100%, 50%), -7px 196px hsl(1058.4, 100%, 50%), -5px 197px hsl(1063.8, 100%, 50%), -3px 198px hsl(1069.2, 100%, 50%), -1px 199px hsl(1074.6, 100%, 50%), -1px 200px hsl(1080, 100%, 50%), 1px 201px hsl(1085.4, 100%, 50%), 3px 202px hsl(1090.8, 100%, 50%), 5px 203px hsl(1096.2, 100%, 50%), 7px 204px hsl(1101.6, 100%, 50%), 9px 205px hsl(1107, 100%, 50%), 11px 206px hsl(1112.4, 100%, 50%), 13px 207px hsl(1117.8, 100%, 50%), 14px 208px hsl(1123.2, 100%, 50%), 16px 209px hsl(1128.6, 100%, 50%), 18px 210px hsl(1134, 100%, 50%), 20px 211px hsl(1139.4, 100%, 50%), 22px 212px hsl(1144.8, 100%, 50%), 23px 213px hsl(1150.2, 100%, 50%), 25px 214px hsl(1155.6, 100%, 50%), 27px 215px hsl(1161, 100%, 50%), 28px 216px hsl(1166.4, 100%, 50%), 30px 217px hsl(1171.8, 100%, 50%), 32px 218px hsl(1177.2, 100%, 50%), 33px 219px hsl(1182.6, 100%, 50%), 35px 220px hsl(1188, 100%, 50%), 36px 221px hsl(1193.4, 100%, 50%), 38px 222px hsl(1198.8, 100%, 50%), 39px 223px hsl(1204.2, 100%, 50%), 41px 224px hsl(1209.6, 100%, 50%), 42px 225px hsl(1215, 100%, 50%), 43px 226px hsl(1220.4, 100%, 50%), 45px 227px hsl(1225.8, 100%, 50%), 46px 228px hsl(1231.2, 100%, 50%), 47px 229px hsl(1236.6, 100%, 50%), 48px 230px hsl(1242, 100%, 50%), 49px 231px hsl(1247.4, 100%, 50%), 50px 232px hsl(1252.8, 100%, 50%), 51px 233px hsl(1258.2, 100%, 50%), 52px 234px hsl(1263.6, 100%, 50%), 53px 235px hsl(1269, 100%, 50%), 54px 236px hsl(1274.4, 100%, 50%), 55px 237px hsl(1279.8, 100%, 50%), 55px 238px hsl(1285.2, 100%, 50%), 56px 239px hsl(1290.6, 100%, 50%), 57px 240px hsl(1296, 100%, 50%), 57px 241px hsl(1301.4, 100%, 50%), 58px 242px hsl(1306.8, 100%, 50%), 58px 243px hsl(1312.2, 100%, 50%), 58px 244px hsl(1317.6, 100%, 50%), 59px 245px hsl(1323, 100%, 50%), 59px 246px hsl(1328.4, 100%, 50%), 59px 247px hsl(1333.8, 100%, 50%), 59px 248px hsl(1339.2, 100%, 50%), 59px 249px hsl(1344.6, 100%, 50%), 60px 250px hsl(1350, 100%, 50%), 59px 251px hsl(1355.4, 100%, 50%), 59px 252px hsl(1360.8, 100%, 50%), 59px 253px hsl(1366.2, 100%, 50%), 59px 254px hsl(1371.6, 100%, 50%), 59px 255px hsl(1377, 100%, 50%), 58px 256px hsl(1382.4, 100%, 50%), 58px 257px hsl(1387.8, 100%, 50%), 58px 258px hsl(1393.2, 100%, 50%), 57px 259px hsl(1398.6, 100%, 50%), 57px 260px hsl(1404, 100%, 50%), 56px 261px hsl(1409.4, 100%, 50%), 55px 262px hsl(1414.8, 100%, 50%), 55px 263px hsl(1420.2, 100%, 50%), 54px 264px hsl(1425.6, 100%, 50%), 53px 265px hsl(1431, 100%, 50%), 52px 266px hsl(1436.4, 100%, 50%), 51px 267px hsl(1441.8, 100%, 50%), 50px 268px hsl(1447.2, 100%, 50%), 49px 269px hsl(1452.6, 100%, 50%), 48px 270px hsl(1458, 100%, 50%), 47px 271px hsl(1463.4, 100%, 50%), 46px 272px hsl(1468.8, 100%, 50%), 45px 273px hsl(1474.2, 100%, 50%), 43px 274px hsl(1479.6, 100%, 50%), 42px 275px hsl(1485, 100%, 50%), 41px 276px hsl(1490.4, 100%, 50%), 39px 277px hsl(1495.8, 100%, 50%), 38px 278px hsl(1501.2, 100%, 50%), 36px 279px hsl(1506.6, 100%, 50%), 35px 280px hsl(1512, 100%, 50%), 33px 281px hsl(1517.4, 100%, 50%), 32px 282px hsl(1522.8, 100%, 50%), 30px 283px hsl(1528.2, 100%, 50%), 28px 284px hsl(1533.6, 100%, 50%), 27px 285px hsl(1539, 100%, 50%), 25px 286px hsl(1544.4, 100%, 50%), 23px 287px hsl(1549.8, 100%, 50%), 22px 288px hsl(1555.2, 100%, 50%), 20px 289px hsl(1560.6, 100%, 50%), 18px 290px hsl(1566, 100%, 50%), 16px 291px hsl(1571.4, 100%, 50%), 14px 292px hsl(1576.8, 100%, 50%), 13px 293px hsl(1582.2, 100%, 50%), 11px 294px hsl(1587.6, 100%, 50%), 9px 295px hsl(1593, 100%, 50%), 7px 296px hsl(1598.4, 100%, 50%), 5px 297px hsl(1603.8, 100%, 50%), 3px 298px hsl(1609.2, 100%, 50%), 1px 299px hsl(1614.6, 100%, 50%), 2px 300px hsl(1620, 100%, 50%), -1px 301px hsl(1625.4, 100%, 50%), -3px 302px hsl(1630.8, 100%, 50%), -5px 303px hsl(1636.2, 100%, 50%), -7px 304px hsl(1641.6, 100%, 50%), -9px 305px hsl(1647, 100%, 50%), -11px 306px hsl(1652.4, 100%, 50%), -13px 307px hsl(1657.8, 100%, 50%), -14px 308px hsl(1663.2, 100%, 50%), -16px 309px hsl(1668.6, 100%, 50%), -18px 310px hsl(1674, 100%, 50%), -20px 311px hsl(1679.4, 100%, 50%), -22px 312px hsl(1684.8, 100%, 50%), -23px 313px hsl(1690.2, 100%, 50%), -25px 314px hsl(1695.6, 100%, 50%), -27px 315px hsl(1701, 100%, 50%), -28px 316px hsl(1706.4, 100%, 50%), -30px 317px hsl(1711.8, 100%, 50%), -32px 318px hsl(1717.2, 100%, 50%), -33px 319px hsl(1722.6, 100%, 50%), -35px 320px hsl(1728, 100%, 50%), -36px 321px hsl(1733.4, 100%, 50%), -38px 322px hsl(1738.8, 100%, 50%), -39px 323px hsl(1744.2, 100%, 50%), -41px 324px hsl(1749.6, 100%, 50%), -42px 325px hsl(1755, 100%, 50%), -43px 326px hsl(1760.4, 100%, 50%), -45px 327px hsl(1765.8, 100%, 50%), -46px 328px hsl(1771.2, 100%, 50%), -47px 329px hsl(1776.6, 100%, 50%), -48px 330px hsl(1782, 100%, 50%), -49px 331px hsl(1787.4, 100%, 50%), -50px 332px hsl(1792.8, 100%, 50%), -51px 333px hsl(1798.2, 100%, 50%), -52px 334px hsl(1803.6, 100%, 50%), -53px 335px hsl(1809, 100%, 50%), -54px 336px hsl(1814.4, 100%, 50%), -55px 337px hsl(1819.8, 100%, 50%), -55px 338px hsl(1825.2, 100%, 50%), -56px 339px hsl(1830.6, 100%, 50%), -57px 340px hsl(1836, 100%, 50%), -57px 341px hsl(1841.4, 100%, 50%), -58px 342px hsl(1846.8, 100%, 50%), -58px 343px hsl(1852.2, 100%, 50%), -58px 344px hsl(1857.6, 100%, 50%), -59px 345px hsl(1863, 100%, 50%), -59px 346px hsl(1868.4, 100%, 50%), -59px 347px hsl(1873.8, 100%, 50%), -59px 348px hsl(1879.2, 100%, 50%), -59px 349px hsl(1884.6, 100%, 50%), -60px 350px hsl(1890, 100%, 50%), -59px 351px hsl(1895.4, 100%, 50%), -59px 352px hsl(1900.8, 100%, 50%), -59px 353px hsl(1906.2, 100%, 50%), -59px 354px hsl(1911.6, 100%, 50%), -59px 355px hsl(1917, 100%, 50%), -58px 356px hsl(1922.4, 100%, 50%), -58px 357px hsl(1927.8, 100%, 50%), -58px 358px hsl(1933.2, 100%, 50%), -57px 359px hsl(1938.6, 100%, 50%), -57px 360px hsl(1944, 100%, 50%), -56px 361px hsl(1949.4, 100%, 50%), -55px 362px hsl(1954.8, 100%, 50%), -55px 363px hsl(1960.2, 100%, 50%), -54px 364px hsl(1965.6, 100%, 50%), -53px 365px hsl(1971, 100%, 50%), -52px 366px hsl(1976.4, 100%, 50%), -51px 367px hsl(1981.8, 100%, 50%), -50px 368px hsl(1987.2, 100%, 50%), -49px 369px hsl(1992.6, 100%, 50%), -48px 370px hsl(1998, 100%, 50%), -47px 371px hsl(2003.4, 100%, 50%), -46px 372px hsl(2008.8, 100%, 50%), -45px 373px hsl(2014.2, 100%, 50%), -43px 374px hsl(2019.6, 100%, 50%), -42px 375px hsl(2025, 100%, 50%), -41px 376px hsl(2030.4, 100%, 50%), -39px 377px hsl(2035.8, 100%, 50%), -38px 378px hsl(2041.2, 100%, 50%), -36px 379px hsl(2046.6, 100%, 50%), -35px 380px hsl(2052, 100%, 50%), -33px 381px hsl(2057.4, 100%, 50%), -32px 382px hsl(2062.8, 100%, 50%), -30px 383px hsl(2068.2, 100%, 50%), -28px 384px hsl(2073.6, 100%, 50%), -27px 385px hsl(2079, 100%, 50%), -25px 386px hsl(2084.4, 100%, 50%), -23px 387px hsl(2089.8, 100%, 50%), -22px 388px hsl(2095.2, 100%, 50%), -20px 389px hsl(2100.6, 100%, 50%), -18px 390px hsl(2106, 100%, 50%), -16px 391px hsl(2111.4, 100%, 50%), -14px 392px hsl(2116.8, 100%, 50%), -13px 393px hsl(2122.2, 100%, 50%), -11px 394px hsl(2127.6, 100%, 50%), -9px 395px hsl(2133, 100%, 50%), -7px 396px hsl(2138.4, 100%, 50%), -5px 397px hsl(2143.8, 100%, 50%), -3px 398px hsl(2149.2, 100%, 50%), -1px 399px hsl(2154.6, 100%, 50%); font-size: 40px;", '& BetterDiscord included'); + console.log("%c%s", "color: #3767ad;font-size:25px", 'Lightcord Client\nhttps://github.com/Lightcord/Lightcord'); let ftime = Date.now() @@ -69,18 +69,20 @@ process.once('loaded', () => { BetterDiscord.events.on("debug", BetterDiscord.logger.log.bind(BetterDiscord.logger)) BetterDiscord.events.on("ready", () => { BetterDiscord.logger.log("BetterDiscord Loaded. took: "+(Date.now() - ftime)+"ms.") + + try{ + // better disabling Discord's tracking request, no error in console. + BDModules.get(e => e.AnalyticsActionHandlers)[1].AnalyticsActionHandlers.handleTrack = () => { + return false + } + }catch(e){} }) const webRequest = electron.remote.getCurrentWebContents().session.webRequest - // disable Discord's tracking request + + // disable Discord's tracking request, error in console webRequest.onBeforeRequest((details, callback) => { if(/api\/v\d\/science/g.test(details.url))return callback({cancel: true}) return callback({}) }) - webRequest.onHeadersReceived(function(details, callback) { - if (!details.responseHeaders["content-security-policy-report-only"] && !details.responseHeaders["content-security-policy"]) return callback({cancel: false}); - delete details.responseHeaders["content-security-policy-report-only"]; - delete details.responseHeaders["content-security-policy"]; - callback({cancel: false, responseHeaders: details.responseHeaders}); - }); }); \ No newline at end of file