UNPKG

matrix-react-sdk

Version:
183 lines (180 loc) 37.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _types = require("matrix-js-sdk/src/types"); var _languageHandler = require("../../../languageHandler"); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _SearchBox = _interopRequireDefault(require("../../structures/SearchBox")); var _SpaceStore = _interopRequireDefault(require("../../../stores/spaces/SpaceStore")); var _RoomAvatar = _interopRequireDefault(require("../avatars/RoomAvatar")); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _AutoHideScrollbar = _interopRequireDefault(require("../../structures/AutoHideScrollbar")); var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _arrays = require("../../../utils/arrays"); 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. */ const Entry = ({ room, checked, onChange }) => { const localRoom = room instanceof _matrix.Room; let description; if (localRoom) { description = (0, _languageHandler._t)("common|n_members", { count: room.getJoinedMemberCount() }); const numChildRooms = _SpaceStore.default.instance.getChildRooms(room.roomId).length; if (numChildRooms > 0) { description += " · " + (0, _languageHandler._t)("common|n_rooms", { count: numChildRooms }); } } return /*#__PURE__*/_react.default.createElement("label", { className: "mx_ManageRestrictedJoinRuleDialog_entry" }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, localRoom ? /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, { room: room, size: "20px" }) : /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, { oobData: room, size: "20px" }), /*#__PURE__*/_react.default.createElement("span", { className: "mx_ManageRestrictedJoinRuleDialog_entry_name" }, room.name)), description && /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_entry_description" }, description)), /*#__PURE__*/_react.default.createElement(_StyledCheckbox.default, { onChange: onChange ? e => onChange(e.target.checked) : undefined, checked: checked, disabled: !onChange })); }; const addAllParents = (set, room) => { const cli = room.client; const parents = Array.from(_SpaceStore.default.instance.getKnownParents(room.roomId)).map(parentId => cli.getRoom(parentId)); parents.forEach(parent => { if (!parent || set.has(parent)) return; set.add(parent); addAllParents(set, parent); }); }; const ManageRestrictedJoinRuleDialog = ({ room, selected = [], onFinished }) => { const cli = room.client; const [newSelected, setNewSelected] = (0, _react.useState)(new Set(selected)); const [query, setQuery] = (0, _react.useState)(""); const lcQuery = query.toLowerCase().trim(); const [spacesContainingRoom, otherJoinedSpaces, otherEntries] = (0, _react.useMemo)(() => { const parents = new Set(); addAllParents(parents, room); return [Array.from(parents), _SpaceStore.default.instance.spacePanelSpaces.filter(s => !parents.has(s)), (0, _arrays.filterBoolean)(selected.map(roomId => { const room = cli.getRoom(roomId); if (!room) { return { roomId, name: roomId }; } if (room.getMyMembership() !== _types.KnownMembership.Join || !room.isSpaceRoom()) { return room; } }))]; }, [cli, selected, room]); const [filteredSpacesContainingRoom, filteredOtherJoinedSpaces, filteredOtherEntries] = (0, _react.useMemo)(() => [spacesContainingRoom.filter(r => r.name.toLowerCase().includes(lcQuery)), otherJoinedSpaces.filter(r => r.name.toLowerCase().includes(lcQuery)), otherEntries.filter(r => r.name.toLowerCase().includes(lcQuery))], [spacesContainingRoom, otherJoinedSpaces, otherEntries, lcQuery]); const onChange = (checked, room) => { if (checked) { newSelected.add(room.roomId); } else { newSelected.delete(room.roomId); } setNewSelected(new Set(newSelected)); }; let inviteOnlyWarning; if (newSelected.size < 1) { inviteOnlyWarning = /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_section_info" }, (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_empty_warning")); } const totalResults = filteredSpacesContainingRoom.length + filteredOtherJoinedSpaces.length + filteredOtherEntries.length; return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { title: (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_title"), className: "mx_ManageRestrictedJoinRuleDialog", onFinished: onFinished, fixedWidth: false }, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_description", {}, { RoomName: () => /*#__PURE__*/_react.default.createElement("strong", null, room.name) })), /*#__PURE__*/_react.default.createElement(_MatrixClientContext.default.Provider, { value: cli }, /*#__PURE__*/_react.default.createElement(_SearchBox.default, { className: "mx_textinput_icon mx_textinput_search", placeholder: (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_filter_placeholder"), onSearch: setQuery, autoFocus: true }), /*#__PURE__*/_react.default.createElement(_AutoHideScrollbar.default, { className: "mx_ManageRestrictedJoinRuleDialog_content" }, filteredSpacesContainingRoom.length > 0 ? /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_section" }, /*#__PURE__*/_react.default.createElement("h3", null, room.isSpaceRoom() ? (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_heading_space") : (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_heading_room")), filteredSpacesContainingRoom.map(space => { return /*#__PURE__*/_react.default.createElement(Entry, { key: space.roomId, room: space, checked: newSelected.has(space.roomId), onChange: checked => { onChange(checked, space); } }); })) : undefined, filteredOtherEntries.length > 0 ? /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_section" }, /*#__PURE__*/_react.default.createElement("h3", null, (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_heading_other")), /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_section_info" }, /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_heading_unknown"))), filteredOtherEntries.map(space => { return /*#__PURE__*/_react.default.createElement(Entry, { key: space.roomId, room: space, checked: newSelected.has(space.roomId), onChange: checked => { onChange(checked, space); } }); })) : null, filteredOtherJoinedSpaces.length > 0 ? /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_section" }, /*#__PURE__*/_react.default.createElement("h3", null, (0, _languageHandler._t)("room_settings|security|join_rule_restricted_dialog_heading_known")), filteredOtherJoinedSpaces.map(space => { return /*#__PURE__*/_react.default.createElement(Entry, { key: space.roomId, room: space, checked: newSelected.has(space.roomId), onChange: checked => { onChange(checked, space); } }); })) : null, totalResults < 1 ? /*#__PURE__*/_react.default.createElement("span", { className: "mx_ManageRestrictedJoinRuleDialog_noResults" }, (0, _languageHandler._t)("common|no_results")) : undefined), /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_footer" }, inviteOnlyWarning, /*#__PURE__*/_react.default.createElement("div", { className: "mx_ManageRestrictedJoinRuleDialog_footer_buttons" }, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary_outline", onClick: () => onFinished() }, (0, _languageHandler._t)("action|cancel")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary", onClick: () => onFinished(Array.from(newSelected)) }, (0, _languageHandler._t)("action|confirm")))))); }; var _default = exports.default = ManageRestrictedJoinRuleDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX3R5cGVzIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9CYXNlRGlhbG9nIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9TZWFyY2hCb3giLCJfU3BhY2VTdG9yZSIsIl9Sb29tQXZhdGFyIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfQXV0b0hpZGVTY3JvbGxiYXIiLCJfU3R5bGVkQ2hlY2tib3giLCJfTWF0cml4Q2xpZW50Q29udGV4dCIsIl9hcnJheXMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJFbnRyeSIsInJvb20iLCJjaGVja2VkIiwib25DaGFuZ2UiLCJsb2NhbFJvb20iLCJSb29tIiwiZGVzY3JpcHRpb24iLCJfdCIsImNvdW50IiwiZ2V0Sm9pbmVkTWVtYmVyQ291bnQiLCJudW1DaGlsZFJvb21zIiwiU3BhY2VTdG9yZSIsImluc3RhbmNlIiwiZ2V0Q2hpbGRSb29tcyIsInJvb21JZCIsImxlbmd0aCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzaXplIiwib29iRGF0YSIsIm5hbWUiLCJ0YXJnZXQiLCJ1bmRlZmluZWQiLCJkaXNhYmxlZCIsImFkZEFsbFBhcmVudHMiLCJjbGkiLCJjbGllbnQiLCJwYXJlbnRzIiwiQXJyYXkiLCJmcm9tIiwiZ2V0S25vd25QYXJlbnRzIiwibWFwIiwicGFyZW50SWQiLCJnZXRSb29tIiwiZm9yRWFjaCIsInBhcmVudCIsImFkZCIsIk1hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZyIsInNlbGVjdGVkIiwib25GaW5pc2hlZCIsIm5ld1NlbGVjdGVkIiwic2V0TmV3U2VsZWN0ZWQiLCJ1c2VTdGF0ZSIsIlNldCIsInF1ZXJ5Iiwic2V0UXVlcnkiLCJsY1F1ZXJ5IiwidG9Mb3dlckNhc2UiLCJ0cmltIiwic3BhY2VzQ29udGFpbmluZ1Jvb20iLCJvdGhlckpvaW5lZFNwYWNlcyIsIm90aGVyRW50cmllcyIsInVzZU1lbW8iLCJzcGFjZVBhbmVsU3BhY2VzIiwiZmlsdGVyIiwicyIsImZpbHRlckJvb2xlYW4iLCJnZXRNeU1lbWJlcnNoaXAiLCJLbm93bk1lbWJlcnNoaXAiLCJKb2luIiwiaXNTcGFjZVJvb20iLCJmaWx0ZXJlZFNwYWNlc0NvbnRhaW5pbmdSb29tIiwiZmlsdGVyZWRPdGhlckpvaW5lZFNwYWNlcyIsImZpbHRlcmVkT3RoZXJFbnRyaWVzIiwiaW5jbHVkZXMiLCJkZWxldGUiLCJpbnZpdGVPbmx5V2FybmluZyIsInRvdGFsUmVzdWx0cyIsInRpdGxlIiwiZml4ZWRXaWR0aCIsIlJvb21OYW1lIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInBsYWNlaG9sZGVyIiwib25TZWFyY2giLCJhdXRvRm9jdXMiLCJzcGFjZSIsImtleSIsImtpbmQiLCJvbkNsaWNrIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9NYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IEtub3duTWVtYmVyc2hpcCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy90eXBlc1wiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gXCIuL0Jhc2VEaWFsb2dcIjtcbmltcG9ydCBTZWFyY2hCb3ggZnJvbSBcIi4uLy4uL3N0cnVjdHVyZXMvU2VhcmNoQm94XCI7XG5pbXBvcnQgU3BhY2VTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3NwYWNlcy9TcGFjZVN0b3JlXCI7XG5pbXBvcnQgUm9vbUF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9Sb29tQXZhdGFyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IEF1dG9IaWRlU2Nyb2xsYmFyIGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0F1dG9IaWRlU2Nyb2xsYmFyXCI7XG5pbXBvcnQgU3R5bGVkQ2hlY2tib3ggZnJvbSBcIi4uL2VsZW1lbnRzL1N0eWxlZENoZWNrYm94XCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgZmlsdGVyQm9vbGVhbiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9hcnJheXNcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgcm9vbTogUm9vbTtcbiAgICBzZWxlY3RlZD86IHN0cmluZ1tdO1xuICAgIG9uRmluaXNoZWQocm9vbXM/OiBzdHJpbmdbXSk6IHZvaWQ7XG59XG5cbmNvbnN0IEVudHJ5OiBSZWFjdC5GQzx7XG4gICAgcm9vbTogUm9vbTtcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIG9uQ2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbn0+ID0gKHsgcm9vbSwgY2hlY2tlZCwgb25DaGFuZ2UgfSkgPT4ge1xuICAgIGNvbnN0IGxvY2FsUm9vbSA9IHJvb20gaW5zdGFuY2VvZiBSb29tO1xuXG4gICAgbGV0IGRlc2NyaXB0aW9uO1xuICAgIGlmIChsb2NhbFJvb20pIHtcbiAgICAgICAgZGVzY3JpcHRpb24gPSBfdChcImNvbW1vbnxuX21lbWJlcnNcIiwgeyBjb3VudDogcm9vbS5nZXRKb2luZWRNZW1iZXJDb3VudCgpIH0pO1xuICAgICAgICBjb25zdCBudW1DaGlsZFJvb21zID0gU3BhY2VTdG9yZS5pbnN0YW5jZS5nZXRDaGlsZFJvb21zKHJvb20ucm9vbUlkKS5sZW5ndGg7XG4gICAgICAgIGlmIChudW1DaGlsZFJvb21zID4gMCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gXCIgwrcgXCIgKyBfdChcImNvbW1vbnxuX3Jvb21zXCIsIHsgY291bnQ6IG51bUNoaWxkUm9vbXMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibXhfTWFuYWdlUmVzdHJpY3RlZEpvaW5SdWxlRGlhbG9nX2VudHJ5XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIHtsb2NhbFJvb20gPyA8Um9vbUF2YXRhciByb29tPXtyb29tfSBzaXplPVwiMjBweFwiIC8+IDogPFJvb21BdmF0YXIgb29iRGF0YT17cm9vbX0gc2l6ZT1cIjIwcHhcIiAvPn1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfTWFuYWdlUmVzdHJpY3RlZEpvaW5SdWxlRGlhbG9nX2VudHJ5X25hbWVcIj57cm9vbS5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZ19lbnRyeV9kZXNjcmlwdGlvblwiPntkZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2UgPyAoZSkgPT4gb25DaGFuZ2UoZS50YXJnZXQuY2hlY2tlZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IW9uQ2hhbmdlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9sYWJlbD5cbiAgICApO1xufTtcblxuY29uc3QgYWRkQWxsUGFyZW50cyA9IChzZXQ6IFNldDxSb29tPiwgcm9vbTogUm9vbSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHJvb20uY2xpZW50O1xuICAgIGNvbnN0IHBhcmVudHMgPSBBcnJheS5mcm9tKFNwYWNlU3RvcmUuaW5zdGFuY2UuZ2V0S25vd25QYXJlbnRzKHJvb20ucm9vbUlkKSkubWFwKChwYXJlbnRJZCkgPT5cbiAgICAgICAgY2xpLmdldFJvb20ocGFyZW50SWQpLFxuICAgICk7XG5cbiAgICBwYXJlbnRzLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBzZXQuaGFzKHBhcmVudCkpIHJldHVybjtcbiAgICAgICAgc2V0LmFkZChwYXJlbnQpO1xuICAgICAgICBhZGRBbGxQYXJlbnRzKHNldCwgcGFyZW50KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IE1hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZzogUmVhY3QuRkM8SVByb3BzPiA9ICh7IHJvb20sIHNlbGVjdGVkID0gW10sIG9uRmluaXNoZWQgfSkgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHJvb20uY2xpZW50O1xuICAgIGNvbnN0IFtuZXdTZWxlY3RlZCwgc2V0TmV3U2VsZWN0ZWRdID0gdXNlU3RhdGUobmV3IFNldDxzdHJpbmc+KHNlbGVjdGVkKSk7XG4gICAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBsY1F1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBjb25zdCBbc3BhY2VzQ29udGFpbmluZ1Jvb20sIG90aGVySm9pbmVkU3BhY2VzLCBvdGhlckVudHJpZXNdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgU2V0PFJvb20+KCk7XG4gICAgICAgIGFkZEFsbFBhcmVudHMocGFyZW50cywgcm9vbSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFycmF5LmZyb20ocGFyZW50cyksXG4gICAgICAgICAgICBTcGFjZVN0b3JlLmluc3RhbmNlLnNwYWNlUGFuZWxTcGFjZXMuZmlsdGVyKChzKSA9PiAhcGFyZW50cy5oYXMocykpLFxuICAgICAgICAgICAgZmlsdGVyQm9vbGVhbihcbiAgICAgICAgICAgICAgICBzZWxlY3RlZC5tYXAoKHJvb21JZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb29tID0gY2xpLmdldFJvb20ocm9vbUlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb29tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByb29tSWQsIG5hbWU6IHJvb21JZCB9IGFzIFJvb207XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvb20uZ2V0TXlNZW1iZXJzaGlwKCkgIT09IEtub3duTWVtYmVyc2hpcC5Kb2luIHx8ICFyb29tLmlzU3BhY2VSb29tKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb29tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgIH0sIFtjbGksIHNlbGVjdGVkLCByb29tXSk7XG5cbiAgICBjb25zdCBbZmlsdGVyZWRTcGFjZXNDb250YWluaW5nUm9vbSwgZmlsdGVyZWRPdGhlckpvaW5lZFNwYWNlcywgZmlsdGVyZWRPdGhlckVudHJpZXNdID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gW1xuICAgICAgICAgICAgc3BhY2VzQ29udGFpbmluZ1Jvb20uZmlsdGVyKChyKSA9PiByLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsY1F1ZXJ5KSksXG4gICAgICAgICAgICBvdGhlckpvaW5lZFNwYWNlcy5maWx0ZXIoKHIpID0+IHIubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxjUXVlcnkpKSxcbiAgICAgICAgICAgIG90aGVyRW50cmllcy5maWx0ZXIoKHIpID0+IHIubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxjUXVlcnkpKSxcbiAgICAgICAgXSxcbiAgICAgICAgW3NwYWNlc0NvbnRhaW5pbmdSb29tLCBvdGhlckpvaW5lZFNwYWNlcywgb3RoZXJFbnRyaWVzLCBsY1F1ZXJ5XSxcbiAgICApO1xuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoY2hlY2tlZDogYm9vbGVhbiwgcm9vbTogUm9vbSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgbmV3U2VsZWN0ZWQuYWRkKHJvb20ucm9vbUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGVkLmRlbGV0ZShyb29tLnJvb21JZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0TmV3U2VsZWN0ZWQobmV3IFNldChuZXdTZWxlY3RlZCkpO1xuICAgIH07XG5cbiAgICBsZXQgaW52aXRlT25seVdhcm5pbmc7XG4gICAgaWYgKG5ld1NlbGVjdGVkLnNpemUgPCAxKSB7XG4gICAgICAgIGludml0ZU9ubHlXYXJuaW5nID0gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2dfc2VjdGlvbl9pbmZvXCI+XG4gICAgICAgICAgICAgICAge190KFwicm9vbV9zZXR0aW5nc3xzZWN1cml0eXxqb2luX3J1bGVfcmVzdHJpY3RlZF9kaWFsb2dfZW1wdHlfd2FybmluZ1wiKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsUmVzdWx0cyA9XG4gICAgICAgIGZpbHRlcmVkU3BhY2VzQ29udGFpbmluZ1Jvb20ubGVuZ3RoICsgZmlsdGVyZWRPdGhlckpvaW5lZFNwYWNlcy5sZW5ndGggKyBmaWx0ZXJlZE90aGVyRW50cmllcy5sZW5ndGg7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgIHRpdGxlPXtfdChcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8am9pbl9ydWxlX3Jlc3RyaWN0ZWRfZGlhbG9nX3RpdGxlXCIpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfTWFuYWdlUmVzdHJpY3RlZEpvaW5SdWxlRGlhbG9nXCJcbiAgICAgICAgICAgIG9uRmluaXNoZWQ9e29uRmluaXNoZWR9XG4gICAgICAgICAgICBmaXhlZFdpZHRoPXtmYWxzZX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICBcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8am9pbl9ydWxlX3Jlc3RyaWN0ZWRfZGlhbG9nX2Rlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSb29tTmFtZTogKCkgPT4gPHN0cm9uZz57cm9vbS5uYW1lfTwvc3Ryb25nPixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPE1hdHJpeENsaWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NsaX0+XG4gICAgICAgICAgICAgICAgPFNlYXJjaEJveFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF90ZXh0aW5wdXRfaWNvbiBteF90ZXh0aW5wdXRfc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e190KFwicm9vbV9zZXR0aW5nc3xzZWN1cml0eXxqb2luX3J1bGVfcmVzdHJpY3RlZF9kaWFsb2dfZmlsdGVyX3BsYWNlaG9sZGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICBvblNlYXJjaD17c2V0UXVlcnl9XG4gICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxBdXRvSGlkZVNjcm9sbGJhciBjbGFzc05hbWU9XCJteF9NYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2dfY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRTcGFjZXNDb250YWluaW5nUm9vbS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2dfc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jvb20uaXNTcGFjZVJvb20oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdChcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8am9pbl9ydWxlX3Jlc3RyaWN0ZWRfZGlhbG9nX2hlYWRpbmdfc3BhY2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3QoXCJyb29tX3NldHRpbmdzfHNlY3VyaXR5fGpvaW5fcnVsZV9yZXN0cmljdGVkX2RpYWxvZ19oZWFkaW5nX3Jvb21cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRTcGFjZXNDb250YWluaW5nUm9vbS5tYXAoKHNwYWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RW50cnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NwYWNlLnJvb21JZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tPXtzcGFjZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtuZXdTZWxlY3RlZC5oYXMoc3BhY2Uucm9vbUlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UoY2hlY2tlZCwgc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWR9XG5cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkT3RoZXJFbnRyaWVzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZ19zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPntfdChcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8am9pbl9ydWxlX3Jlc3RyaWN0ZWRfZGlhbG9nX2hlYWRpbmdfb3RoZXJcIil9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZ19zZWN0aW9uX2luZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57X3QoXCJyb29tX3NldHRpbmdzfHNlY3VyaXR5fGpvaW5fcnVsZV9yZXN0cmljdGVkX2RpYWxvZ19oZWFkaW5nX3Vua25vd25cIil9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkT3RoZXJFbnRyaWVzLm1hcCgoc3BhY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFbnRyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17c3BhY2Uucm9vbUlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb209e3NwYWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e25ld1NlbGVjdGVkLmhhcyhzcGFjZS5yb29tSWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShjaGVja2VkLCBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkT3RoZXJKb2luZWRTcGFjZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfTWFuYWdlUmVzdHJpY3RlZEpvaW5SdWxlRGlhbG9nX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+e190KFwicm9vbV9zZXR0aW5nc3xzZWN1cml0eXxqb2luX3J1bGVfcmVzdHJpY3RlZF9kaWFsb2dfaGVhZGluZ19rbm93blwiKX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZE90aGVySm9pbmVkU3BhY2VzLm1hcCgoc3BhY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFbnRyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17c3BhY2Uucm9vbUlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb209e3NwYWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e25ld1NlbGVjdGVkLmhhcyhzcGFjZS5yb29tSWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShjaGVja2VkLCBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgICAgICAgICAge3RvdGFsUmVzdWx0cyA8IDEgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9NYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2dfbm9SZXN1bHRzXCI+e190KFwiY29tbW9ufG5vX3Jlc3VsdHNcIil9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIDwvQXV0b0hpZGVTY3JvbGxiYXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZ19mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge2ludml0ZU9ubHlXYXJuaW5nfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01hbmFnZVJlc3RyaWN0ZWRKb2luUnVsZURpYWxvZ19mb290ZXJfYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24ga2luZD1cInByaW1hcnlfb3V0bGluZVwiIG9uQ2xpY2s9eygpID0+IG9uRmluaXNoZWQoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGNhbmNlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5XCIgb25DbGljaz17KCkgPT4gb25GaW5pc2hlZChBcnJheS5mcm9tKG5ld1NlbGVjdGVkKSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImFjdGlvbnxjb25maXJtXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvTWF0cml4Q2xpZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYW5hZ2VSZXN0cmljdGVkSm9pblJ1bGVEaWFsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBRCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBRixzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBSCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQUosc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFVLGtCQUFBLEdBQUFMLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBVyxlQUFBLEdBQUFOLHNC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