UNPKG

matrix-react-sdk

Version:
208 lines (204 loc) 45.6 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 _AccessibleButton = _interopRequireDefault(require("../../../elements/AccessibleButton")); var _languageHandler = require("../../../../../languageHandler"); var _SdkConfig = _interopRequireDefault(require("../../../../../SdkConfig")); var _Modal = _interopRequireDefault(require("../../../../../Modal")); var _PlatformPeg = _interopRequireDefault(require("../../../../../PlatformPeg")); var _UpdateCheckButton = _interopRequireDefault(require("../../UpdateCheckButton")); var _BugReportDialog = _interopRequireDefault(require("../../../dialogs/BugReportDialog")); var _CopyableText = _interopRequireDefault(require("../../../elements/CopyableText")); var _SettingsTab = _interopRequireDefault(require("../SettingsTab")); var _SettingsSection = require("../../shared/SettingsSection"); var _SettingsSubsection = _interopRequireWildcard(require("../../shared/SettingsSubsection")); var _ExternalLink = _interopRequireDefault(require("../../../elements/ExternalLink")); var _MatrixClientContext = _interopRequireDefault(require("../../../../../contexts/MatrixClientContext")); 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 2019-2023 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 HelpUserSettingsTab extends _react.default.Component { constructor(props, context) { super(props, context); (0, _defineProperty2.default)(this, "onClearCacheAndReload", () => { if (!_PlatformPeg.default.get()) return; // Dev note: please keep this log line, it's useful when troubleshooting a MatrixClient suddenly // stopping in the middle of the logs. _logger.logger.log("Clear cache & reload clicked"); this.context.stopClient(); this.context.store.deleteAllData().then(() => { _PlatformPeg.default.get()?.reload(); }); }); (0, _defineProperty2.default)(this, "onBugReport", () => { _Modal.default.createDialog(_BugReportDialog.default, {}); }); (0, _defineProperty2.default)(this, "getVersionTextToCopy", () => { const { appVersion, cryptoVersion } = this.getVersionInfo(); return `${appVersion}\n${cryptoVersion}`; }); this.state = { appVersion: null, canUpdate: false }; } componentDidMount() { _PlatformPeg.default.get()?.getAppVersion().then(ver => this.setState({ appVersion: ver })).catch(e => { _logger.logger.error("Error getting vector version: ", e); }); _PlatformPeg.default.get()?.canSelfUpdate().then(v => this.setState({ canUpdate: v })).catch(e => { _logger.logger.error("Error getting self updatability: ", e); }); } getVersionInfo() { const brand = _SdkConfig.default.get().brand; const appVersion = this.state.appVersion || "unknown"; const cryptoVersion = this.context.getCrypto()?.getVersion() ?? "<not-enabled>"; return { appVersion: `${(0, _languageHandler._t)("setting|help_about|brand_version", { brand })} ${appVersion}`, cryptoVersion: `${(0, _languageHandler._t)("setting|help_about|crypto_version")} ${cryptoVersion}` }; } renderLegal() { const tocLinks = _SdkConfig.default.get().terms_and_conditions_links; if (!tocLinks) return null; const legalLinks = []; for (const tocEntry of tocLinks) { legalLinks.push( /*#__PURE__*/_react.default.createElement("div", { key: tocEntry.url }, /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: tocEntry.url }, tocEntry.text))); } return /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("common|legal") }, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, legalLinks)); } renderCredits() { // Note: This is not translated because it is legal text. // Also, &nbsp; is ugly but necessary. return /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("common|credits") }, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("credits|default_cover_photo", {}, { photo: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "themes/element/img/backgrounds/lake.jpg", rel: "noreferrer noopener", target: "_blank" }, sub), author: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://www.flickr.com/golan" }, sub), terms: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://creativecommons.org/licenses/by-sa/4.0/", rel: "noreferrer noopener", target: "_blank" }, sub) })), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("credits|twemoji_colr", {}, { colr: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://github.com/matrix-org/twemoji-colr", rel: "noreferrer noopener", target: "_blank" }, sub), author: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://mozilla.org" }, sub), terms: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://www.apache.org/licenses/LICENSE-2.0", rel: "noreferrer noopener", target: "_blank" }, sub) })), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("credits|twemoji", {}, { twemoji: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://twemoji.twitter.com/" }, sub), author: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://twemoji.twitter.com/" }, sub), terms: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://creativecommons.org/licenses/by/4.0/", rel: "noreferrer noopener", target: "_blank" }, sub) }))))); } render() { const brand = _SdkConfig.default.get().brand; const faqText = (0, _languageHandler._t)("setting|help_about|help_link", { brand }, { a: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: _SdkConfig.default.get("help_url") }, sub) }); let updateButton; if (this.state.canUpdate) { updateButton = /*#__PURE__*/_react.default.createElement(_UpdateCheckButton.default, null); } let bugReportingSection; if (_SdkConfig.default.get().bug_report_endpoint_url) { bugReportingSection = /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("bug_reporting|title"), description: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, (0, _languageHandler._t)("bug_reporting|introduction")), (0, _languageHandler._t)("bug_reporting|description")) }, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.onBugReport, kind: "primary_outline" }, (0, _languageHandler._t)("bug_reporting|submit_debug_logs")), /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, (0, _languageHandler._t)("bug_reporting|matrix_security_issue", {}, { a: sub => /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { href: "https://matrix.org/security-disclosure-policy/" }, sub) }))); } const { appVersion, cryptoVersion } = this.getVersionInfo(); return /*#__PURE__*/_react.default.createElement(_SettingsTab.default, null, /*#__PURE__*/_react.default.createElement(_SettingsSection.SettingsSection, null, bugReportingSection, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("common|faq"), description: faqText }), /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("setting|help_about|versions") }, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, /*#__PURE__*/_react.default.createElement(_CopyableText.default, { getTextToCopy: this.getVersionTextToCopy }, appVersion, /*#__PURE__*/_react.default.createElement("br", null), cryptoVersion, /*#__PURE__*/_react.default.createElement("br", null)), updateButton)), this.renderLegal(), this.renderCredits(), /*#__PURE__*/_react.default.createElement(_SettingsSubsection.default, { heading: (0, _languageHandler._t)("common|advanced") }, /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, (0, _languageHandler._t)("setting|help_about|homeserver", { homeserverUrl: this.context.getHomeserverUrl() }, { code: sub => /*#__PURE__*/_react.default.createElement("code", null, sub) })), this.context.getIdentityServerUrl() && /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, (0, _languageHandler._t)("setting|help_about|identity_server", { identityServerUrl: this.context.getIdentityServerUrl() }, { code: sub => /*#__PURE__*/_react.default.createElement("code", null, sub) })), /*#__PURE__*/_react.default.createElement(_SettingsSubsection.SettingsSubsectionText, null, /*#__PURE__*/_react.default.createElement("details", null, /*#__PURE__*/_react.default.createElement("summary", { className: "mx_HelpUserSettingsTab_accessTokenDetails" }, (0, _languageHandler._t)("common|access_token")), /*#__PURE__*/_react.default.createElement("strong", null, (0, _languageHandler._t)("setting|help_about|access_token_detail")), /*#__PURE__*/_react.default.createElement(_CopyableText.default, { getTextToCopy: () => this.context.getAccessToken() }, this.context.getAccessToken()))), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.onClearCacheAndReload, kind: "danger_outline" }, (0, _languageHandler._t)("setting|help_about|clear_cache_reload"))))); } } exports.default = HelpUserSettingsTab; (0, _defineProperty2.default)(HelpUserSettingsTab, "contextType", _MatrixClientContext.default); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfU2RrQ29uZmlnIiwiX01vZGFsIiwiX1BsYXRmb3JtUGVnIiwiX1VwZGF0ZUNoZWNrQnV0dG9uIiwiX0J1Z1JlcG9ydERpYWxvZyIsIl9Db3B5YWJsZVRleHQiLCJfU2V0dGluZ3NUYWIiLCJfU2V0dGluZ3NTZWN0aW9uIiwiX1NldHRpbmdzU3Vic2VjdGlvbiIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0V4dGVybmFsTGluayIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiSGVscFVzZXJTZXR0aW5nc1RhYiIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImNvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkyIiwiUGxhdGZvcm1QZWciLCJsb2dnZXIiLCJsb2ciLCJzdG9wQ2xpZW50Iiwic3RvcmUiLCJkZWxldGVBbGxEYXRhIiwidGhlbiIsInJlbG9hZCIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiQnVnUmVwb3J0RGlhbG9nIiwiYXBwVmVyc2lvbiIsImNyeXB0b1ZlcnNpb24iLCJnZXRWZXJzaW9uSW5mbyIsInN0YXRlIiwiY2FuVXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJnZXRBcHBWZXJzaW9uIiwidmVyIiwic2V0U3RhdGUiLCJjYXRjaCIsImVycm9yIiwiY2FuU2VsZlVwZGF0ZSIsInYiLCJicmFuZCIsIlNka0NvbmZpZyIsImdldENyeXB0byIsImdldFZlcnNpb24iLCJfdCIsInJlbmRlckxlZ2FsIiwidG9jTGlua3MiLCJ0ZXJtc19hbmRfY29uZGl0aW9uc19saW5rcyIsImxlZ2FsTGlua3MiLCJ0b2NFbnRyeSIsInB1c2giLCJjcmVhdGVFbGVtZW50Iiwia2V5IiwidXJsIiwiaHJlZiIsInRleHQiLCJoZWFkaW5nIiwiU2V0dGluZ3NTdWJzZWN0aW9uVGV4dCIsInJlbmRlckNyZWRpdHMiLCJwaG90byIsInN1YiIsInJlbCIsInRhcmdldCIsImF1dGhvciIsInRlcm1zIiwiY29sciIsInR3ZW1vamkiLCJyZW5kZXIiLCJmYXFUZXh0IiwidXBkYXRlQnV0dG9uIiwiYnVnUmVwb3J0aW5nU2VjdGlvbiIsImJ1Z19yZXBvcnRfZW5kcG9pbnRfdXJsIiwiZGVzY3JpcHRpb24iLCJGcmFnbWVudCIsIm9uQ2xpY2siLCJvbkJ1Z1JlcG9ydCIsImtpbmQiLCJTZXR0aW5nc1NlY3Rpb24iLCJnZXRUZXh0VG9Db3B5IiwiZ2V0VmVyc2lvblRleHRUb0NvcHkiLCJob21lc2VydmVyVXJsIiwiZ2V0SG9tZXNlcnZlclVybCIsImNvZGUiLCJnZXRJZGVudGl0eVNlcnZlclVybCIsImlkZW50aXR5U2VydmVyVXJsIiwiY2xhc3NOYW1lIiwiZ2V0QWNjZXNzVG9rZW4iLCJvbkNsZWFyQ2FjaGVBbmRSZWxvYWQiLCJleHBvcnRzIiwiTWF0cml4Q2xpZW50Q29udGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL3RhYnMvdXNlci9IZWxwVXNlclNldHRpbmdzVGFiLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxOS0yMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IFNka0NvbmZpZyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vU2RrQ29uZmlnXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL01vZGFsXCI7XG5pbXBvcnQgUGxhdGZvcm1QZWcgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL1BsYXRmb3JtUGVnXCI7XG5pbXBvcnQgVXBkYXRlQ2hlY2tCdXR0b24gZnJvbSBcIi4uLy4uL1VwZGF0ZUNoZWNrQnV0dG9uXCI7XG5pbXBvcnQgQnVnUmVwb3J0RGlhbG9nIGZyb20gXCIuLi8uLi8uLi9kaWFsb2dzL0J1Z1JlcG9ydERpYWxvZ1wiO1xuaW1wb3J0IENvcHlhYmxlVGV4dCBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudHMvQ29weWFibGVUZXh0XCI7XG5pbXBvcnQgU2V0dGluZ3NUYWIgZnJvbSBcIi4uL1NldHRpbmdzVGFiXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1NlY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL1NldHRpbmdzU2VjdGlvblwiO1xuaW1wb3J0IFNldHRpbmdzU3Vic2VjdGlvbiwgeyBTZXR0aW5nc1N1YnNlY3Rpb25UZXh0IH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9TZXR0aW5nc1N1YnNlY3Rpb25cIjtcbmltcG9ydCBFeHRlcm5hbExpbmsgZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnRzL0V4dGVybmFsTGlua1wiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7fVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICBhcHBWZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIGNhblVwZGF0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVscFVzZXJTZXR0aW5nc1RhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHB1YmxpYyBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXRyaXhDbGllbnRDb250ZXh0O1xuICAgIHB1YmxpYyBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXRyaXhDbGllbnRDb250ZXh0PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzLCBjb250ZXh0OiBSZWFjdC5Db250ZXh0VHlwZTx0eXBlb2YgTWF0cml4Q2xpZW50Q29udGV4dD4pIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhcHBWZXJzaW9uOiBudWxsLFxuICAgICAgICAgICAgY2FuVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgICAgIFBsYXRmb3JtUGVnLmdldCgpXG4gICAgICAgICAgICA/LmdldEFwcFZlcnNpb24oKVxuICAgICAgICAgICAgLnRoZW4oKHZlcikgPT4gdGhpcy5zZXRTdGF0ZSh7IGFwcFZlcnNpb246IHZlciB9KSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGdldHRpbmcgdmVjdG9yIHZlcnNpb246IFwiLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBQbGF0Zm9ybVBlZy5nZXQoKVxuICAgICAgICAgICAgPy5jYW5TZWxmVXBkYXRlKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB0aGlzLnNldFN0YXRlKHsgY2FuVXBkYXRlOiB2IH0pKVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgZ2V0dGluZyBzZWxmIHVwZGF0YWJpbGl0eTogXCIsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWZXJzaW9uSW5mbygpOiB7IGFwcFZlcnNpb246IHN0cmluZzsgY3J5cHRvVmVyc2lvbjogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCBicmFuZCA9IFNka0NvbmZpZy5nZXQoKS5icmFuZDtcbiAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IHRoaXMuc3RhdGUuYXBwVmVyc2lvbiB8fCBcInVua25vd25cIjtcbiAgICAgICAgY29uc3QgY3J5cHRvVmVyc2lvbiA9IHRoaXMuY29udGV4dC5nZXRDcnlwdG8oKT8uZ2V0VmVyc2lvbigpID8/IFwiPG5vdC1lbmFibGVkPlwiO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcHBWZXJzaW9uOiBgJHtfdChcInNldHRpbmd8aGVscF9hYm91dHxicmFuZF92ZXJzaW9uXCIsIHsgYnJhbmQgfSl9ICR7YXBwVmVyc2lvbn1gLFxuICAgICAgICAgICAgY3J5cHRvVmVyc2lvbjogYCR7X3QoXCJzZXR0aW5nfGhlbHBfYWJvdXR8Y3J5cHRvX3ZlcnNpb25cIil9ICR7Y3J5cHRvVmVyc2lvbn1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DbGVhckNhY2hlQW5kUmVsb2FkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIVBsYXRmb3JtUGVnLmdldCgpKSByZXR1cm47XG5cbiAgICAgICAgLy8gRGV2IG5vdGU6IHBsZWFzZSBrZWVwIHRoaXMgbG9nIGxpbmUsIGl0J3MgdXNlZnVsIHdoZW4gdHJvdWJsZXNob290aW5nIGEgTWF0cml4Q2xpZW50IHN1ZGRlbmx5XG4gICAgICAgIC8vIHN0b3BwaW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxvZ3MuXG4gICAgICAgIGxvZ2dlci5sb2coXCJDbGVhciBjYWNoZSAmIHJlbG9hZCBjbGlja2VkXCIpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3RvcENsaWVudCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3RvcmUuZGVsZXRlQWxsRGF0YSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgUGxhdGZvcm1QZWcuZ2V0KCk/LnJlbG9hZCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkJ1Z1JlcG9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgTW9kYWwuY3JlYXRlRGlhbG9nKEJ1Z1JlcG9ydERpYWxvZywge30pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbmRlckxlZ2FsKCk6IFJlYWN0Tm9kZSB7XG4gICAgICAgIGNvbnN0IHRvY0xpbmtzID0gU2RrQ29uZmlnLmdldCgpLnRlcm1zX2FuZF9jb25kaXRpb25zX2xpbmtzO1xuICAgICAgICBpZiAoIXRvY0xpbmtzKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBsZWdhbExpbmtzOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdG9jRW50cnkgb2YgdG9jTGlua3MpIHtcbiAgICAgICAgICAgIGxlZ2FsTGlua3MucHVzaChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17dG9jRW50cnkudXJsfT5cbiAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBocmVmPXt0b2NFbnRyeS51cmx9Pnt0b2NFbnRyeS50ZXh0fTwvRXh0ZXJuYWxMaW5rPlxuICAgICAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvbiBoZWFkaW5nPXtfdChcImNvbW1vbnxsZWdhbFwiKX0+XG4gICAgICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvblRleHQ+e2xlZ2FsTGlua3N9PC9TZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgPC9TZXR0aW5nc1N1YnNlY3Rpb24+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDcmVkaXRzKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgICAgLy8gTm90ZTogVGhpcyBpcyBub3QgdHJhbnNsYXRlZCBiZWNhdXNlIGl0IGlzIGxlZ2FsIHRleHQuXG4gICAgICAgIC8vIEFsc28sICZuYnNwOyBpcyB1Z2x5IGJ1dCBuZWNlc3NhcnkuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uIGhlYWRpbmc9e190KFwiY29tbW9ufGNyZWRpdHNcIil9PlxuICAgICAgICAgICAgICAgIDxTZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNyZWRpdHN8ZGVmYXVsdF9jb3Zlcl9waG90b1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvdG86IChzdWIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ0aGVtZXMvZWxlbWVudC9pbWcvYmFja2dyb3VuZHMvbGFrZS5qcGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdWJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FeHRlcm5hbExpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBocmVmPVwiaHR0cHM6Ly93d3cuZmxpY2tyLmNvbS9nb2xhblwiPntzdWJ9PC9FeHRlcm5hbExpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybXM6IChzdWIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wL1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N1Yn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V4dGVybmFsTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNyZWRpdHN8dHdlbW9qaV9jb2xyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xyOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL21hdHJpeC1vcmcvdHdlbW9qaS1jb2xyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3VifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXh0ZXJuYWxMaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcjogKHN1YikgPT4gPEV4dGVybmFsTGluayBocmVmPVwiaHR0cHM6Ly9tb3ppbGxhLm9yZ1wiPntzdWJ9PC9FeHRlcm5hbExpbms+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybXM6IChzdWIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3VifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXh0ZXJuYWxMaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlZGl0c3x0d2Vtb2ppXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d2Vtb2ppOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBocmVmPVwiaHR0cHM6Ly90d2Vtb2ppLnR3aXR0ZXIuY29tL1wiPntzdWJ9PC9FeHRlcm5hbExpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBocmVmPVwiaHR0cHM6Ly90d2Vtb2ppLnR3aXR0ZXIuY29tL1wiPntzdWJ9PC9FeHRlcm5hbExpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybXM6IChzdWIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N1Yn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V4dGVybmFsTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9TZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgPC9TZXR0aW5nc1N1YnNlY3Rpb24+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWZXJzaW9uVGV4dFRvQ29weSA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCB7IGFwcFZlcnNpb24sIGNyeXB0b1ZlcnNpb24gfSA9IHRoaXMuZ2V0VmVyc2lvbkluZm8oKTtcbiAgICAgICAgcmV0dXJuIGAke2FwcFZlcnNpb259XFxuJHtjcnlwdG9WZXJzaW9ufWA7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgY29uc3QgYnJhbmQgPSBTZGtDb25maWcuZ2V0KCkuYnJhbmQ7XG5cbiAgICAgICAgY29uc3QgZmFxVGV4dCA9IF90KFxuICAgICAgICAgICAgXCJzZXR0aW5nfGhlbHBfYWJvdXR8aGVscF9saW5rXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJhbmQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IChzdWIpID0+IDxFeHRlcm5hbExpbmsgaHJlZj17U2RrQ29uZmlnLmdldChcImhlbHBfdXJsXCIpfT57c3VifTwvRXh0ZXJuYWxMaW5rPixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZUJ1dHRvbjogSlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmNhblVwZGF0ZSkge1xuICAgICAgICAgICAgdXBkYXRlQnV0dG9uID0gPFVwZGF0ZUNoZWNrQnV0dG9uIC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJ1Z1JlcG9ydGluZ1NlY3Rpb247XG4gICAgICAgIGlmIChTZGtDb25maWcuZ2V0KCkuYnVnX3JlcG9ydF9lbmRwb2ludF91cmwpIHtcbiAgICAgICAgICAgIGJ1Z1JlcG9ydGluZ1NlY3Rpb24gPSAoXG4gICAgICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBoZWFkaW5nPXtfdChcImJ1Z19yZXBvcnRpbmd8dGl0bGVcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvblRleHQ+e190KFwiYnVnX3JlcG9ydGluZ3xpbnRyb2R1Y3Rpb25cIil9PC9TZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImJ1Z19yZXBvcnRpbmd8ZGVzY3JpcHRpb25cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gb25DbGljaz17dGhpcy5vbkJ1Z1JlcG9ydH0ga2luZD1cInByaW1hcnlfb3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYnVnX3JlcG9ydGluZ3xzdWJtaXRfZGVidWdfbG9nc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1Z19yZXBvcnRpbmd8bWF0cml4X3NlY3VyaXR5X2lzc3VlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGhyZWY9XCJodHRwczovL21hdHJpeC5vcmcvc2VjdXJpdHktZGlzY2xvc3VyZS1wb2xpY3kvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N1Yn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXh0ZXJuYWxMaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1NldHRpbmdzU3Vic2VjdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgPC9TZXR0aW5nc1N1YnNlY3Rpb24+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBhcHBWZXJzaW9uLCBjcnlwdG9WZXJzaW9uIH0gPSB0aGlzLmdldFZlcnNpb25JbmZvKCk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTZXR0aW5nc1RhYj5cbiAgICAgICAgICAgICAgICA8U2V0dGluZ3NTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YnVnUmVwb3J0aW5nU2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvbiBoZWFkaW5nPXtfdChcImNvbW1vbnxmYXFcIil9IGRlc2NyaXB0aW9uPXtmYXFUZXh0fSAvPlxuICAgICAgICAgICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uIGhlYWRpbmc9e190KFwic2V0dGluZ3xoZWxwX2Fib3V0fHZlcnNpb25zXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3B5YWJsZVRleHQgZ2V0VGV4dFRvQ29weT17dGhpcy5nZXRWZXJzaW9uVGV4dFRvQ29weX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthcHBWZXJzaW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyeXB0b1ZlcnNpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29weWFibGVUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1cGRhdGVCdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NldHRpbmdzU3Vic2VjdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2V0dGluZ3NTdWJzZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMZWdhbCgpfVxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDcmVkaXRzKCl9XG4gICAgICAgICAgICAgICAgICAgIDxTZXR0aW5nc1N1YnNlY3Rpb24gaGVhZGluZz17X3QoXCJjb21tb258YWR2YW5jZWRcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzU3Vic2VjdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNldHRpbmd8aGVscF9hYm91dHxob21lc2VydmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVzZXJ2ZXJVcmw6IHRoaXMuY29udGV4dC5nZXRIb21lc2VydmVyVXJsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IChzdWIpID0+IDxjb2RlPntzdWJ9PC9jb2RlPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZXR0aW5nc1N1YnNlY3Rpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuY29udGV4dC5nZXRJZGVudGl0eVNlcnZlclVybCgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZXR0aW5nfGhlbHBfYWJvdXR8aWRlbnRpdHlfc2VydmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHlTZXJ2ZXJVcmw6IHRoaXMuY29udGV4dC5nZXRJZGVudGl0eVNlcnZlclVybCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3ViKSA9PiA8Y29kZT57c3VifTwvY29kZT4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnkgY2xhc3NOYW1lPVwibXhfSGVscFVzZXJTZXR0aW5nc1RhYl9hY2Nlc3NUb2tlbkRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImNvbW1vbnxhY2Nlc3NfdG9rZW5cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VtbWFyeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57X3QoXCJzZXR0aW5nfGhlbHBfYWJvdXR8YWNjZXNzX3Rva2VuX2RldGFpbFwiKX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvcHlhYmxlVGV4dCBnZXRUZXh0VG9Db3B5PXsoKSA9PiB0aGlzLmNvbnRleHQuZ2V0QWNjZXNzVG9rZW4oKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5jb250ZXh0LmdldEFjY2Vzc1Rva2VuKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29weWFibGVUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2V0dGluZ3NTdWJzZWN0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIG9uQ2xpY2s9e3RoaXMub25DbGVhckNhY2hlQW5kUmVsb2FkfSBraW5kPVwiZGFuZ2VyX291dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJzZXR0aW5nfGhlbHBfYWJvdXR8Y2xlYXJfY2FjaGVfcmVsb2FkXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NldHRpbmdzU3Vic2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8L1NldHRpbmdzU2VjdGlvbj5cbiAgICAgICAgICAgIDwvU2V0dGluZ3NUYWI+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGlCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFWLHNCQUFB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