UNPKG

matrix-react-sdk

Version:
111 lines (109 loc) 22.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _logger = require("matrix-js-sdk/src/logger"); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _languageHandler = require("../../../languageHandler"); var _Modal = _interopRequireDefault(require("../../../Modal")); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var FormattingUtils = _interopRequireWildcard(require("../../../utils/FormattingUtils")); var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore")); var _SettingsFlag = _interopRequireDefault(require("../elements/SettingsFlag")); var _SettingLevel = require("../../../settings/SettingLevel"); var _SettingsSubsection = _interopRequireWildcard(require("./shared/SettingsSubsection")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /* Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ class CryptographyPanel extends _react.default.Component { constructor(props) { super(props); (0, _defineProperty2.default)(this, "onExportE2eKeysClicked", () => { _Modal.default.createDialogAsync(Promise.resolve().then(() => _interopRequireWildcard(require("../../../async-components/views/dialogs/security/ExportE2eKeysDialog"))), { matrixClient: _MatrixClientPeg.MatrixClientPeg.safeGet() }); }); (0, _defineProperty2.default)(this, "onImportE2eKeysClicked", () => { _Modal.default.createDialogAsync(Promise.resolve().then(() => _interopRequireWildcard(require("../../../async-components/views/dialogs/security/ImportE2eKeysDialog"))), { matrixClient: _MatrixClientPeg.MatrixClientPeg.safeGet() }); }); (0, _defineProperty2.default)(this, "updateBlacklistDevicesFlag", checked => { _MatrixClientPeg.MatrixClientPeg.safeGet().setGlobalBlacklistUnverifiedDevices(checked); }); const client = _MatrixClientPeg.MatrixClientPeg.safeGet(); const crypto = client.getCrypto(); if (!crypto) { this.state = { deviceIdentityKey: null }; } else { this.state = { deviceIdentityKey: undefined }; crypto.getOwnDeviceKeys().then(keys => { this.setState({ deviceIdentityKey: keys.ed25519 }); }).catch(e => { _logger.logger.error(`CryptographyPanel: Error fetching own device keys: ${e}`); this.setState({ deviceIdentityKey: null }); }); } } render() { const client = _MatrixClientPeg.MatrixClientPeg.safeGet(); const deviceId = client.deviceId; let identityKey = this.state.deviceIdentityKey; if (identityKey === undefined) { // Should show a spinner here really, but since this will be very transitional, I can't be doing with the // necessary styling. identityKey = "..."; } else if (identityKey === null) { identityKey = (0, _languageHandler._t)("encryption|not_supported"); } else { identityKey = FormattingUtils.formatCryptoKey(identityKey); } let importExportButtons; if (client.getCrypto()) { importExportButtons = /*#__PURE__*/_react.default.createElement("div", { className: "mx_CryptographyPanel_importExportButtons" }, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary_outline", onClick: this.onExportE2eKeysClicked }, (0, _languageHandler._t)("settings|security|export_megolm_keys")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary_outline", onClick: this.onImportE2eKeysClicked }, (0, _languageHandler._t)("settings|security|import_megolm_keys"))); } let noSendUnverifiedSetting; if (_SettingsStore.default.canSetValue("blacklistUnverifiedDevices", null, _SettingLevel.SettingLevel.DEVICE)) { noSendUnverifiedSetting = /*#__PURE__*/_react.default.createElement(_SettingsFlag.default, { name: "blacklistUnverifiedDevices", level: _SettingLevel.SettingLevel.DEVICE, onChange: this.updateBlacklistDevicesFlag }); } return /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("settings|security|cryptography_section") }, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, /*#__PURE__*/_react.default.createElement("table", { className: "mx_CryptographyPanel_sessionInfo" }, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", { scope: "row" }, (0, _languageHandler._t)("settings|security|session_id")), /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement("code", null, deviceId))), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", { scope: "row" }, (0, _languageHandler._t)("settings|security|session_key")), /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement("code", null, /*#__PURE__*/_react.default.createElement("strong", null, identityKey))))))), importExportButtons, noSendUnverifiedSetting); } } exports.default = CryptographyPanel; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfTWF0cml4Q2xpZW50UGVnIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Nb2RhbCIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiRm9ybWF0dGluZ1V0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfU2V0dGluZ3NTdG9yZSIsIl9TZXR0aW5nc0ZsYWciLCJfU2V0dGluZ0xldmVsIiwiX1NldHRpbmdzU3Vic2VjdGlvbiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkNyeXB0b2dyYXBoeVBhbmVsIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nQXN5bmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJtYXRyaXhDbGllbnQiLCJNYXRyaXhDbGllbnRQZWciLCJzYWZlR2V0IiwiY2hlY2tlZCIsInNldEdsb2JhbEJsYWNrbGlzdFVudmVyaWZpZWREZXZpY2VzIiwiY2xpZW50IiwiY3J5cHRvIiwiZ2V0Q3J5cHRvIiwic3RhdGUiLCJkZXZpY2VJZGVudGl0eUtleSIsInVuZGVmaW5lZCIsImdldE93bkRldmljZUtleXMiLCJrZXlzIiwic2V0U3RhdGUiLCJlZDI1NTE5IiwiY2F0Y2giLCJsb2dnZXIiLCJlcnJvciIsInJlbmRlciIsImRldmljZUlkIiwiaWRlbnRpdHlLZXkiLCJfdCIsImZvcm1hdENyeXB0b0tleSIsImltcG9ydEV4cG9ydEJ1dHRvbnMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwia2luZCIsIm9uQ2xpY2siLCJvbkV4cG9ydEUyZUtleXNDbGlja2VkIiwib25JbXBvcnRFMmVLZXlzQ2xpY2tlZCIsIm5vU2VuZFVudmVyaWZpZWRTZXR0aW5nIiwiU2V0dGluZ3NTdG9yZSIsImNhblNldFZhbHVlIiwiU2V0dGluZ0xldmVsIiwiREVWSUNFIiwibmFtZSIsImxldmVsIiwib25DaGFuZ2UiLCJ1cGRhdGVCbGFja2xpc3REZXZpY2VzRmxhZyIsImhlYWRpbmciLCJTZXR0aW5nc1N1YnNlY3Rpb25UZXh0Iiwic2NvcGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc2V0dGluZ3MvQ3J5cHRvZ3JhcGh5UGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHR5cGUgRXhwb3J0RTJlS2V5c0RpYWxvZyBmcm9tIFwiLi4vLi4vLi4vYXN5bmMtY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL3NlY3VyaXR5L0V4cG9ydEUyZUtleXNEaWFsb2dcIjtcbmltcG9ydCB0eXBlIEltcG9ydEUyZUtleXNEaWFsb2cgZnJvbSBcIi4uLy4uLy4uL2FzeW5jLWNvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9zZWN1cml0eS9JbXBvcnRFMmVLZXlzRGlhbG9nXCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vLi4vLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vLi4vTW9kYWxcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgKiBhcyBGb3JtYXR0aW5nVXRpbHMgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Zvcm1hdHRpbmdVdGlsc1wiO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdzU3RvcmVcIjtcbmltcG9ydCBTZXR0aW5nc0ZsYWcgZnJvbSBcIi4uL2VsZW1lbnRzL1NldHRpbmdzRmxhZ1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xldmVsIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdMZXZlbFwiO1xuaW1wb3J0IFNldHRpbmdzU3Vic2VjdGlvbiwgeyBTZXR0aW5nc1N1YnNlY3Rpb25UZXh0IH0gZnJvbSBcIi4vc2hhcmVkL1NldHRpbmdzU3Vic2VjdGlvblwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHt9XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIC8qKiBUaGUgZGV2aWNlJ3MgYmFzZTY0LWVuY29kZWQgRWQyNTUxOSBpZGVudGl0eSBrZXksIG9yOlxuICAgICAqXG4gICAgICogKiBgdW5kZWZpbmVkYDogbm90IHlldCBsb2FkZWRcbiAgICAgKiAqIGBudWxsYDogZW5jcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChvciB0aGUgY3J5cHRvIHN0YWNrIHdhcyBub3QgY29ycmVjdGx5IGluaXRpYWxpemVkKVxuICAgICAqL1xuICAgIGRldmljZUlkZW50aXR5S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcnlwdG9ncmFwaHlQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBjb25zdCBjbGllbnQgPSBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpO1xuICAgICAgICBjb25zdCBjcnlwdG8gPSBjbGllbnQuZ2V0Q3J5cHRvKCk7XG4gICAgICAgIGlmICghY3J5cHRvKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0geyBkZXZpY2VJZGVudGl0eUtleTogbnVsbCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZGV2aWNlSWRlbnRpdHlLZXk6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgY3J5cHRvXG4gICAgICAgICAgICAgICAgLmdldE93bkRldmljZUtleXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkZXZpY2VJZGVudGl0eUtleToga2V5cy5lZDI1NTE5IH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgQ3J5cHRvZ3JhcGh5UGFuZWw6IEVycm9yIGZldGNoaW5nIG93biBkZXZpY2Uga2V5czogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGV2aWNlSWRlbnRpdHlLZXk6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCk7XG4gICAgICAgIGNvbnN0IGRldmljZUlkID0gY2xpZW50LmRldmljZUlkO1xuICAgICAgICBsZXQgaWRlbnRpdHlLZXkgPSB0aGlzLnN0YXRlLmRldmljZUlkZW50aXR5S2V5O1xuICAgICAgICBpZiAoaWRlbnRpdHlLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gU2hvdWxkIHNob3cgYSBzcGlubmVyIGhlcmUgcmVhbGx5LCBidXQgc2luY2UgdGhpcyB3aWxsIGJlIHZlcnkgdHJhbnNpdGlvbmFsLCBJIGNhbid0IGJlIGRvaW5nIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBuZWNlc3Nhcnkgc3R5bGluZy5cbiAgICAgICAgICAgIGlkZW50aXR5S2V5ID0gXCIuLi5cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpZGVudGl0eUtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWRlbnRpdHlLZXkgPSBfdChcImVuY3J5cHRpb258bm90X3N1cHBvcnRlZFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkZW50aXR5S2V5ID0gRm9ybWF0dGluZ1V0aWxzLmZvcm1hdENyeXB0b0tleShpZGVudGl0eUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW1wb3J0RXhwb3J0QnV0dG9uczogSlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjbGllbnQuZ2V0Q3J5cHRvKCkpIHtcbiAgICAgICAgICAgIGltcG9ydEV4cG9ydEJ1dHRvbnMgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9DcnlwdG9ncmFwaHlQYW5lbF9pbXBvcnRFeHBvcnRCdXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5X291dGxpbmVcIiBvbkNsaWNrPXt0aGlzLm9uRXhwb3J0RTJlS2V5c0NsaWNrZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwic2V0dGluZ3N8c2VjdXJpdHl8ZXhwb3J0X21lZ29sbV9rZXlzXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5X291dGxpbmVcIiBvbkNsaWNrPXt0aGlzLm9uSW1wb3J0RTJlS2V5c0NsaWNrZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwic2V0dGluZ3N8c2VjdXJpdHl8aW1wb3J0X21lZ29sbV9rZXlzXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5vU2VuZFVudmVyaWZpZWRTZXR0aW5nOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKFNldHRpbmdzU3RvcmUuY2FuU2V0VmFsdWUoXCJibGFja2xpc3RVbnZlcmlmaWVkRGV2aWNlc1wiLCBudWxsLCBTZXR0aW5nTGV2ZWwuREVWSUNFKSkge1xuICAgICAgICAgICAgbm9TZW5kVW52ZXJpZmllZFNldHRpbmcgPSAoXG4gICAgICAgICAgICAgICAgPFNldHRpbmdzRmxhZ1xuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYmxhY2tsaXN0VW52ZXJpZmllZERldmljZXNcIlxuICAgICAgICAgICAgICAgICAgICBsZXZlbD17U2V0dGluZ0xldmVsLkRFVklDRX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlQmxhY2tsaXN0RGV2aWNlc0ZsYWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvbiBoZWFkaW5nPXtfdChcInNldHRpbmdzfHNlY3VyaXR5fGNyeXB0b2dyYXBoeV9zZWN0aW9uXCIpfT5cbiAgICAgICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm14X0NyeXB0b2dyYXBoeVBhbmVsX3Nlc3Npb25JbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57X3QoXCJzZXR0aW5nc3xzZWN1cml0eXxzZXNzaW9uX2lkXCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPntkZXZpY2VJZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPntfdChcInNldHRpbmdzfHNlY3VyaXR5fHNlc3Npb25fa2V5XCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2lkZW50aXR5S2V5fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvU2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICB7aW1wb3J0RXhwb3J0QnV0dG9uc31cbiAgICAgICAgICAgICAgICB7bm9TZW5kVW52ZXJpZmllZFNldHRpbmd9XG4gICAgICAgICAgICA8L1NldHRpbmdzU3Vic2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRXhwb3J0RTJlS2V5c0NsaWNrZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZ0FzeW5jKFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vYXN5bmMtY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL3NlY3VyaXR5L0V4cG9ydEUyZUtleXNEaWFsb2dcIikgYXMgdW5rbm93biBhcyBQcm9taXNlPFxuICAgICAgICAgICAgICAgIHR5cGVvZiBFeHBvcnRFMmVLZXlzRGlhbG9nXG4gICAgICAgICAgICA+LFxuICAgICAgICAgICAgeyBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCkgfSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkltcG9ydEUyZUtleXNDbGlja2VkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBNb2RhbC5jcmVhdGVEaWFsb2dBc3luYyhcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL2FzeW5jLWNvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9zZWN1cml0eS9JbXBvcnRFMmVLZXlzRGlhbG9nXCIpIGFzIHVua25vd24gYXMgUHJvbWlzZTxcbiAgICAgICAgICAgICAgICB0eXBlb2YgSW1wb3J0RTJlS2V5c0RpYWxvZ1xuICAgICAgICAgICAgPixcbiAgICAgICAgICAgIHsgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpIH0sXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgdXBkYXRlQmxhY2tsaXN0RGV2aWNlc0ZsYWcgPSAoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpLnNldEdsb2JhbEJsYWNrbGlzdFVudmVyaWZpZWREZXZpY2VzKGNoZWNrZWQpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBSUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxpQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sZUFBQSxHQUFBQyx1QkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVEsY0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsYUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsYUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsbUJBQUEsR0FBQUosdUJBQUEsQ0FBQVAsT0FBQTtBQUF5RixTQUFBWSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBTix3QkFBQU0sQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FB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QUFDLDRCQUE0QixFQUFFLElBQUksRUFBRUMsMEJBQVksQ0FBQ0MsTUFBTSxDQUFDLEVBQUU7TUFDcEZKLHVCQUF1QixnQkFDbkIzRSxNQUFBLENBQUFvQixPQUFBLENBQUFpRCxhQUFBLENBQUMxRCxhQUFBLENBQUFTLE9BQVk7UUFDVDRELElBQUksRUFBQyw0QkFBNEI7UUFDakNDLEtBQUssRUFBRUgsMEJBQVksQ0FBQ0MsTUFBTztRQUMzQkcsUUFBUSxFQUFFLElBQUksQ0FBQ0M7TUFBMkIsQ0FDN0MsQ0FDSjtJQUNMO0lBRUEsb0JBQ0luRixNQUFBLENBQUFvQixPQUFBLENBQUFpRCxhQUFBLENBQUN4RCxtQkFBQSxDQUFBTyxPQUFrQjtNQUFDZ0UsT0FBTyxFQUFFLElBQUFsQixtQkFBRSxFQUFDLHdDQUF3QztJQUFFLGdCQUN0RWxFLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQWlELGFBQUEsQ0FBQ3hELG1CQUFBLENBQUF3RSxzQkFBc0IscUJBQ25CckYsTUFBQSxDQUFBb0IsT0FBQSxDQUFBaUQsYUFBQTtNQUFPQyxTQUFTLEVBQUM7SUFBa0MsZ0JBQy9DdEUsTUFBQSxDQUFBb0IsT0FBQSxDQUFBaUQsYUFBQSw2QkFDSXJFLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQWlELGFBQUEsMEJBQ0lyRSxNQUFBLENBQUFvQixPQUFBLENBQUFpRCxhQUFBO01BQUlpQixLQUFLLEVBQUM7SUFBSyxHQUFFLElBQUFwQixtQkFBRSxFQUFDLDhCQUE4QixDQUFNLENBQUMsZUFDekRsRSxNQUFBLENBQUFvQixPQUFBLENBQUFpRCxhQUFBLDBCQUNJckUsTUFBQSxDQUFBb0IsT0FBQSxDQUFBaUQsYUFBQSxlQUFPTCxRQUFlLENBQ3RCLENBQ0osQ0FBQyxlQUNMaEUsTUFBQSxDQUFBb0IsT0FBQSxDQUFBaUQsYUFBQSwwQkFDSXJFLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQWlELGFBQUE7TUFBSWlCLEtBQUssRUFBQztJQUFLLEdBQUUsSUFBQXBCLG1CQUFFLEVBQUMsK0JBQStCLENBQU0sQ0FBQyxlQUMxRGxFLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQWlELGFBQUEsMEJBQ0lyRSxNQUFBLENBQUFvQixPQUFBLENBQUFpRCxhQUFBLDRCQUNJckUsTUFBQSxDQUFBb0IsT0FBQSxDQUFBaUQsYUFBQSxpQkFBU0osV0FBb0IsQ0FDM0IsQ0FDTixDQUNKLENBQ0QsQ0FDSixDQUNhLENBQUMsRUFDeEJHLG1CQUFtQixFQUNuQk8sdUJBQ2UsQ0FBQztFQUU3QjtBQXVCSjtBQUFDWSxPQUFBLENBQUFuRSxPQUFBLEdBQUFjLGlCQUFBIiwiaWdub3JlTGlzdCI6W119