UNPKG

matrix-react-sdk

Version:
206 lines (167 loc) 24 kB
"use strict"; var _interopRequireWildcard3 = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var sdk = _interopRequireWildcard3(require("../../../../index")); var _languageHandler = require("../../../../languageHandler"); var _SdkConfig = _interopRequireDefault(require("../../../../SdkConfig")); var _SettingsStore = _interopRequireDefault(require("../../../../settings/SettingsStore")); var _Modal = _interopRequireDefault(require("../../../../Modal")); var _FormattingUtils = require("../../../../utils/FormattingUtils"); var _EventIndexPeg = _interopRequireDefault(require("../../../../indexing/EventIndexPeg")); var _SettingLevel = require("../../../../settings/SettingLevel"); /* Copyright 2020-2021 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* * Allows the user to introspect the event index state and disable it. */ class ManageEventIndexDialog extends _react.default.Component /*:: <IProps, IState>*/ { constructor(props) { super(props); (0, _defineProperty2.default)(this, "updateCurrentRoom", async room => { const eventIndex = _EventIndexPeg.default.get(); let stats; try { stats = await eventIndex.getStats(); } catch { // This call may fail if sporadically, not a huge issue as we will // try later again and probably succeed. return; } let currentRoom = null; if (room) currentRoom = room.name; const roomStats = eventIndex.crawlingRooms(); const crawlingRoomsCount = roomStats.crawlingRooms.size; const roomCount = roomStats.totalRooms.size; this.setState({ eventIndexSize: stats.size, eventCount: stats.eventCount, crawlingRoomsCount: crawlingRoomsCount, roomCount: roomCount, currentRoom: currentRoom }); }); (0, _defineProperty2.default)(this, "onDisable", async () => { _Modal.default.createTrackedDialogAsync("Disable message search", "Disable message search", Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require("./DisableEventIndexDialog"))), null, null, /* priority = */ false, /* static = */ true); }); (0, _defineProperty2.default)(this, "onCrawlerSleepTimeChange", e => { this.setState({ crawlerSleepTime: e.target.value }); _SettingsStore.default.setValue("crawlerSleepTime", null, _SettingLevel.SettingLevel.DEVICE, e.target.value); }); this.state = { eventIndexSize: 0, eventCount: 0, crawlingRoomsCount: 0, roomCount: 0, currentRoom: null, crawlerSleepTime: _SettingsStore.default.getValueAt(_SettingLevel.SettingLevel.DEVICE, 'crawlerSleepTime') }; } componentWillUnmount() /*: void*/ { const eventIndex = _EventIndexPeg.default.get(); if (eventIndex !== null) { eventIndex.removeListener("changedCheckpoint", this.updateCurrentRoom); } } async componentDidMount() /*: Promise<void>*/ { let eventIndexSize = 0; let crawlingRoomsCount = 0; let roomCount = 0; let eventCount = 0; let currentRoom = null; const eventIndex = _EventIndexPeg.default.get(); if (eventIndex !== null) { eventIndex.on("changedCheckpoint", this.updateCurrentRoom); try { const stats = await eventIndex.getStats(); eventIndexSize = stats.size; eventCount = stats.eventCount; } catch {// This call may fail if sporadically, not a huge issue as we // will try later again in the updateCurrentRoom call and // probably succeed. } const roomStats = eventIndex.crawlingRooms(); crawlingRoomsCount = roomStats.crawlingRooms.size; roomCount = roomStats.totalRooms.size; const room = eventIndex.currentRoom(); if (room) currentRoom = room.name; } this.setState({ eventIndexSize, eventCount, crawlingRoomsCount, roomCount, currentRoom }); } render() { const brand = _SdkConfig.default.get().brand; const Field = sdk.getComponent('views.elements.Field'); let crawlerState; if (this.state.currentRoom === null) { crawlerState = (0, _languageHandler._t)("Not currently indexing messages for any room."); } else { crawlerState = (0, _languageHandler._t)("Currently indexing: %(currentRoom)s", { currentRoom: this.state.currentRoom }); } const doneRooms = Math.max(0, this.state.roomCount - this.state.crawlingRoomsCount); const eventIndexingSettings = /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("%(brand)s is securely caching encrypted messages locally for them " + "to appear in search results:", { brand }), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_subsectionText" }, crawlerState, /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("Space used:"), " ", (0, _FormattingUtils.formatBytes)(this.state.eventIndexSize, 0), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("Indexed messages:"), " ", (0, _FormattingUtils.formatCountLong)(this.state.eventCount), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("Indexed rooms:"), " ", (0, _languageHandler._t)("%(doneRooms)s out of %(totalRooms)s", { doneRooms: (0, _FormattingUtils.formatCountLong)(doneRooms), totalRooms: (0, _FormattingUtils.formatCountLong)(this.state.roomCount) }), " ", /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(Field, { label: (0, _languageHandler._t)('Message downloading sleep time(ms)'), type: "number", value: this.state.crawlerSleepTime, onChange: this.onCrawlerSleepTimeChange }))); const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return /*#__PURE__*/_react.default.createElement(BaseDialog, { className: "mx_ManageEventIndexDialog", onFinished: this.props.onFinished, title: (0, _languageHandler._t)("Message search") }, eventIndexingSettings, /*#__PURE__*/_react.default.createElement(DialogButtons, { primaryButton: (0, _languageHandler._t)("Done"), onPrimaryButtonClick: this.props.onFinished, primaryButtonClass: "primary", cancelButton: (0, _languageHandler._t)("Disable"), onCancel: this.onDisable, cancelButtonClass: "danger" })); } } exports.default = ManageEventIndexDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hc3luYy1jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvZXZlbnRpbmRleC9NYW5hZ2VFdmVudEluZGV4RGlhbG9nLnRzeCJdLCJuYW1lcyI6WyJNYW5hZ2VFdmVudEluZGV4RGlhbG9nIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwicm9vbSIsImV2ZW50SW5kZXgiLCJFdmVudEluZGV4UGVnIiwiZ2V0Iiwic3RhdHMiLCJnZXRTdGF0cyIsImN1cnJlbnRSb29tIiwibmFtZSIsInJvb21TdGF0cyIsImNyYXdsaW5nUm9vbXMiLCJjcmF3bGluZ1Jvb21zQ291bnQiLCJzaXplIiwicm9vbUNvdW50IiwidG90YWxSb29tcyIsInNldFN0YXRlIiwiZXZlbnRJbmRleFNpemUiLCJldmVudENvdW50IiwiTW9kYWwiLCJjcmVhdGVUcmFja2VkRGlhbG9nQXN5bmMiLCJlIiwiY3Jhd2xlclNsZWVwVGltZSIsInRhcmdldCIsInZhbHVlIiwiU2V0dGluZ3NTdG9yZSIsInNldFZhbHVlIiwiU2V0dGluZ0xldmVsIiwiREVWSUNFIiwic3RhdGUiLCJnZXRWYWx1ZUF0IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVMaXN0ZW5lciIsInVwZGF0ZUN1cnJlbnRSb29tIiwiY29tcG9uZW50RGlkTW91bnQiLCJvbiIsInJlbmRlciIsImJyYW5kIiwiU2RrQ29uZmlnIiwiRmllbGQiLCJzZGsiLCJnZXRDb21wb25lbnQiLCJjcmF3bGVyU3RhdGUiLCJkb25lUm9vbXMiLCJNYXRoIiwibWF4IiwiZXZlbnRJbmRleGluZ1NldHRpbmdzIiwib25DcmF3bGVyU2xlZXBUaW1lQ2hhbmdlIiwiQmFzZURpYWxvZyIsIkRpYWxvZ0J1dHRvbnMiLCJvbkZpbmlzaGVkIiwib25EaXNhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7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LENBQWlCLDBCQUFqQixDQUFuQjtBQUNBLFVBQU1RLGFBQWEsR0FBR1QsR0FBRyxDQUFDQyxZQUFKLENBQWlCLDhCQUFqQixDQUF0QjtBQUVBLHdCQUNJLDZCQUFDLFVBQUQ7QUFBWSxNQUFBLFNBQVMsRUFBQywyQkFBdEI7QUFDSSxNQUFBLFVBQVUsRUFBRSxLQUFLeEMsS0FBTCxDQUFXaUQsVUFEM0I7QUFFSSxNQUFBLEtBQUssRUFBRSx5QkFBRyxnQkFBSDtBQUZYLE9BSUtKLHFCQUpMLGVBS0ksNkJBQUMsYUFBRDtBQUNJLE1BQUEsYUFBYSxFQUFFLHlCQUFHLE1BQUgsQ0FEbkI7QUFFSSxNQUFBLG9CQUFvQixFQUFFLEtBQUs3QyxLQUFMLENBQVdpRCxVQUZyQztBQUdJLE1BQUEsa0JBQWtCLEVBQUMsU0FIdkI7QUFJSSxNQUFBLFlBQVksRUFBRSx5QkFBRyxTQUFILENBSmxCO0FBS0ksTUFBQSxRQUFRLEVBQUUsS0FBS0MsU0FMbkI7QUFNSSxNQUFBLGlCQUFpQixFQUFDO0FBTnRCLE1BTEosQ0FESjtBQWdCSDs7QUFoSytFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIwLTIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgc2RrIGZyb20gJy4uLy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IF90IH0gZnJvbSAnLi4vLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcbmltcG9ydCBTZGtDb25maWcgZnJvbSAnLi4vLi4vLi4vLi4vU2RrQ29uZmlnJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi8uLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5cbmltcG9ydCBNb2RhbCBmcm9tICcuLi8uLi8uLi8uLi9Nb2RhbCc7XG5pbXBvcnQge2Zvcm1hdEJ5dGVzLCBmb3JtYXRDb3VudExvbmd9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9Gb3JtYXR0aW5nVXRpbHNcIjtcbmltcG9ydCBFdmVudEluZGV4UGVnIGZyb20gXCIuLi8uLi8uLi8uLi9pbmRleGluZy9FdmVudEluZGV4UGVnXCI7XG5pbXBvcnQge1NldHRpbmdMZXZlbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdMZXZlbFwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBvbkZpbmlzaGVkOiAoY29uZmlybWVkOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBldmVudEluZGV4U2l6ZTogbnVtYmVyO1xuICAgIGV2ZW50Q291bnQ6IG51bWJlcjtcbiAgICBjcmF3bGluZ1Jvb21zQ291bnQ6IG51bWJlcjtcbiAgICByb29tQ291bnQ6IG51bWJlcjtcbiAgICBjdXJyZW50Um9vbTogc3RyaW5nO1xuICAgIGNyYXdsZXJTbGVlcFRpbWU6IG51bWJlcjtcbn1cblxuLypcbiAqIEFsbG93cyB0aGUgdXNlciB0byBpbnRyb3NwZWN0IHRoZSBldmVudCBpbmRleCBzdGF0ZSBhbmQgZGlzYWJsZSBpdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFuYWdlRXZlbnRJbmRleERpYWxvZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZXZlbnRJbmRleFNpemU6IDAsXG4gICAgICAgICAgICBldmVudENvdW50OiAwLFxuICAgICAgICAgICAgY3Jhd2xpbmdSb29tc0NvdW50OiAwLFxuICAgICAgICAgICAgcm9vbUNvdW50OiAwLFxuICAgICAgICAgICAgY3VycmVudFJvb206IG51bGwsXG4gICAgICAgICAgICBjcmF3bGVyU2xlZXBUaW1lOlxuICAgICAgICAgICAgICAgIFNldHRpbmdzU3RvcmUuZ2V0VmFsdWVBdChTZXR0aW5nTGV2ZWwuREVWSUNFLCAnY3Jhd2xlclNsZWVwVGltZScpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHVwZGF0ZUN1cnJlbnRSb29tID0gYXN5bmMgKHJvb20pID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IEV2ZW50SW5kZXhQZWcuZ2V0KCk7XG4gICAgICAgIGxldCBzdGF0cztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdHMgPSBhd2FpdCBldmVudEluZGV4LmdldFN0YXRzKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gVGhpcyBjYWxsIG1heSBmYWlsIGlmIHNwb3JhZGljYWxseSwgbm90IGEgaHVnZSBpc3N1ZSBhcyB3ZSB3aWxsXG4gICAgICAgICAgICAvLyB0cnkgbGF0ZXIgYWdhaW4gYW5kIHByb2JhYmx5IHN1Y2NlZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFJvb20gPSBudWxsO1xuXG4gICAgICAgIGlmIChyb29tKSBjdXJyZW50Um9vbSA9IHJvb20ubmFtZTtcbiAgICAgICAgY29uc3Qgcm9vbVN0YXRzID0gZXZlbnRJbmRleC5jcmF3bGluZ1Jvb21zKCk7XG4gICAgICAgIGNvbnN0IGNyYXdsaW5nUm9vbXNDb3VudCA9IHJvb21TdGF0cy5jcmF3bGluZ1Jvb21zLnNpemU7XG4gICAgICAgIGNvbnN0IHJvb21Db3VudCA9IHJvb21TdGF0cy50b3RhbFJvb21zLnNpemU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBldmVudEluZGV4U2l6ZTogc3RhdHMuc2l6ZSxcbiAgICAgICAgICAgIGV2ZW50Q291bnQ6IHN0YXRzLmV2ZW50Q291bnQsXG4gICAgICAgICAgICBjcmF3bGluZ1Jvb21zQ291bnQ6IGNyYXdsaW5nUm9vbXNDb3VudCxcbiAgICAgICAgICAgIHJvb21Db3VudDogcm9vbUNvdW50LFxuICAgICAgICAgICAgY3VycmVudFJvb206IGN1cnJlbnRSb29tLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBFdmVudEluZGV4UGVnLmdldCgpO1xuXG4gICAgICAgIGlmIChldmVudEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudEluZGV4LnJlbW92ZUxpc3RlbmVyKFwiY2hhbmdlZENoZWNrcG9pbnRcIiwgdGhpcy51cGRhdGVDdXJyZW50Um9vbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGV2ZW50SW5kZXhTaXplID0gMDtcbiAgICAgICAgbGV0IGNyYXdsaW5nUm9vbXNDb3VudCA9IDA7XG4gICAgICAgIGxldCByb29tQ291bnQgPSAwO1xuICAgICAgICBsZXQgZXZlbnRDb3VudCA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50Um9vbSA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IEV2ZW50SW5kZXhQZWcuZ2V0KCk7XG5cbiAgICAgICAgaWYgKGV2ZW50SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV2ZW50SW5kZXgub24oXCJjaGFuZ2VkQ2hlY2twb2ludFwiLCB0aGlzLnVwZGF0ZUN1cnJlbnRSb29tKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGV2ZW50SW5kZXguZ2V0U3RhdHMoKTtcbiAgICAgICAgICAgICAgICBldmVudEluZGV4U2l6ZSA9IHN0YXRzLnNpemU7XG4gICAgICAgICAgICAgICAgZXZlbnRDb3VudCA9IHN0YXRzLmV2ZW50Q291bnQ7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbGwgbWF5IGZhaWwgaWYgc3BvcmFkaWNhbGx5LCBub3QgYSBodWdlIGlzc3VlIGFzIHdlXG4gICAgICAgICAgICAgICAgLy8gd2lsbCB0cnkgbGF0ZXIgYWdhaW4gaW4gdGhlIHVwZGF0ZUN1cnJlbnRSb29tIGNhbGwgYW5kXG4gICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgc3VjY2VlZC5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm9vbVN0YXRzID0gZXZlbnRJbmRleC5jcmF3bGluZ1Jvb21zKCk7XG4gICAgICAgICAgICBjcmF3bGluZ1Jvb21zQ291bnQgPSByb29tU3RhdHMuY3Jhd2xpbmdSb29tcy5zaXplO1xuICAgICAgICAgICAgcm9vbUNvdW50ID0gcm9vbVN0YXRzLnRvdGFsUm9vbXMuc2l6ZTtcblxuICAgICAgICAgICAgY29uc3Qgcm9vbSA9IGV2ZW50SW5kZXguY3VycmVudFJvb20oKTtcbiAgICAgICAgICAgIGlmIChyb29tKSBjdXJyZW50Um9vbSA9IHJvb20ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXZlbnRJbmRleFNpemUsXG4gICAgICAgICAgICBldmVudENvdW50LFxuICAgICAgICAgICAgY3Jhd2xpbmdSb29tc0NvdW50LFxuICAgICAgICAgICAgcm9vbUNvdW50LFxuICAgICAgICAgICAgY3VycmVudFJvb20sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EaXNhYmxlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBNb2RhbC5jcmVhdGVUcmFja2VkRGlhbG9nQXN5bmMoXCJEaXNhYmxlIG1lc3NhZ2Ugc2VhcmNoXCIsIFwiRGlzYWJsZSBtZXNzYWdlIHNlYXJjaFwiLFxuICAgICAgICAgICAgaW1wb3J0KFwiLi9EaXNhYmxlRXZlbnRJbmRleERpYWxvZ1wiKSxcbiAgICAgICAgICAgIG51bGwsIG51bGwsIC8qIHByaW9yaXR5ID0gKi8gZmFsc2UsIC8qIHN0YXRpYyA9ICovIHRydWUsXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25DcmF3bGVyU2xlZXBUaW1lQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3Jhd2xlclNsZWVwVGltZTogZS50YXJnZXQudmFsdWV9KTtcbiAgICAgICAgU2V0dGluZ3NTdG9yZS5zZXRWYWx1ZShcImNyYXdsZXJTbGVlcFRpbWVcIiwgbnVsbCwgU2V0dGluZ0xldmVsLkRFVklDRSwgZS50YXJnZXQudmFsdWUpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGJyYW5kID0gU2RrQ29uZmlnLmdldCgpLmJyYW5kO1xuICAgICAgICBjb25zdCBGaWVsZCA9IHNkay5nZXRDb21wb25lbnQoJ3ZpZXdzLmVsZW1lbnRzLkZpZWxkJyk7XG5cbiAgICAgICAgbGV0IGNyYXdsZXJTdGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFJvb20gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNyYXdsZXJTdGF0ZSA9IF90KFwiTm90IGN1cnJlbnRseSBpbmRleGluZyBtZXNzYWdlcyBmb3IgYW55IHJvb20uXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3Jhd2xlclN0YXRlID0gKFxuICAgICAgICAgICAgICAgIF90KFwiQ3VycmVudGx5IGluZGV4aW5nOiAlKGN1cnJlbnRSb29tKXNcIiwgeyBjdXJyZW50Um9vbTogdGhpcy5zdGF0ZS5jdXJyZW50Um9vbSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvbmVSb29tcyA9IE1hdGgubWF4KDAsICh0aGlzLnN0YXRlLnJvb21Db3VudCAtIHRoaXMuc3RhdGUuY3Jhd2xpbmdSb29tc0NvdW50KSk7XG5cbiAgICAgICAgY29uc3QgZXZlbnRJbmRleGluZ1NldHRpbmdzID0gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7X3QoXG4gICAgICAgICAgICAgICAgICAgIFwiJShicmFuZClzIGlzIHNlY3VyZWx5IGNhY2hpbmcgZW5jcnlwdGVkIG1lc3NhZ2VzIGxvY2FsbHkgZm9yIHRoZW0gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRvIGFwcGVhciBpbiBzZWFyY2ggcmVzdWx0czpcIixcbiAgICAgICAgICAgICAgICAgICAgeyBicmFuZCB9LFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J214X1NldHRpbmdzVGFiX3N1YnNlY3Rpb25UZXh0Jz5cbiAgICAgICAgICAgICAgICAgICAge2NyYXdsZXJTdGF0ZX08YnIgLz5cbiAgICAgICAgICAgICAgICAgICAge190KFwiU3BhY2UgdXNlZDpcIil9IHtmb3JtYXRCeXRlcyh0aGlzLnN0YXRlLmV2ZW50SW5kZXhTaXplLCAwKX08YnIgLz5cbiAgICAgICAgICAgICAgICAgICAge190KFwiSW5kZXhlZCBtZXNzYWdlczpcIil9IHtmb3JtYXRDb3VudExvbmcodGhpcy5zdGF0ZS5ldmVudENvdW50KX08YnIgLz5cbiAgICAgICAgICAgICAgICAgICAge190KFwiSW5kZXhlZCByb29tczpcIil9IHtfdChcIiUoZG9uZVJvb21zKXMgb3V0IG9mICUodG90YWxSb29tcylzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVSb29tczogZm9ybWF0Q291bnRMb25nKGRvbmVSb29tcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFJvb21zOiBmb3JtYXRDb3VudExvbmcodGhpcy5zdGF0ZS5yb29tQ291bnQpLFxuICAgICAgICAgICAgICAgICAgICB9KX0gPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KCdNZXNzYWdlIGRvd25sb2FkaW5nIHNsZWVwIHRpbWUobXMpJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jcmF3bGVyU2xlZXBUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DcmF3bGVyU2xlZXBUaW1lQ2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgQmFzZURpYWxvZyA9IHNkay5nZXRDb21wb25lbnQoJ3ZpZXdzLmRpYWxvZ3MuQmFzZURpYWxvZycpO1xuICAgICAgICBjb25zdCBEaWFsb2dCdXR0b25zID0gc2RrLmdldENvbXBvbmVudCgndmlld3MuZWxlbWVudHMuRGlhbG9nQnV0dG9ucycpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QmFzZURpYWxvZyBjbGFzc05hbWU9J214X01hbmFnZUV2ZW50SW5kZXhEaWFsb2cnXG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZD17dGhpcy5wcm9wcy5vbkZpbmlzaGVkfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcIk1lc3NhZ2Ugc2VhcmNoXCIpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtldmVudEluZGV4aW5nU2V0dGluZ3N9XG4gICAgICAgICAgICAgICAgPERpYWxvZ0J1dHRvbnNcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUJ1dHRvbj17X3QoXCJEb25lXCIpfVxuICAgICAgICAgICAgICAgICAgICBvblByaW1hcnlCdXR0b25DbGljaz17dGhpcy5wcm9wcy5vbkZpbmlzaGVkfVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5QnV0dG9uQ2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uPXtfdChcIkRpc2FibGVcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXt0aGlzLm9uRGlzYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uQ2xhc3M9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0Jhc2VEaWFsb2c+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19