UNPKG

matrix-react-sdk

Version:
141 lines (134 loc) 25.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PinnedMessagesCard = PinnedMessagesCard; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _compoundWeb = require("@vector-im/compound-web"); var _classnames = _interopRequireDefault(require("classnames")); var _pin = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/pin")); var _languageHandler = require("../../../languageHandler"); var _BaseCard = _interopRequireDefault(require("./BaseCard")); var _Spinner = _interopRequireDefault(require("../elements/Spinner")); var _MatrixClientContext = require("../../../contexts/MatrixClientContext"); var _PinnedEventTile = require("../rooms/PinnedEventTile"); var _useRoomState = require("../../../hooks/useRoomState"); var _RoomContext = _interopRequireWildcard(require("../../../contexts/RoomContext")); var _types = require("./types"); var _arrays = require("../../../utils/arrays"); var _Modal = _interopRequireDefault(require("../../../Modal")); var _UnpinAllDialog = require("../dialogs/UnpinAllDialog"); var _EmptyState = _interopRequireDefault(require("./EmptyState")); var _usePinnedEvents = require("../../../hooks/usePinnedEvents"); var _PinningUtils = _interopRequireDefault(require("../../../utils/PinningUtils.ts")); 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; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* 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. */ /** * List the pinned messages in a room inside a Card. */ function PinnedMessagesCard({ room, onClose, permalinkCreator }) { const cli = (0, _MatrixClientContext.useMatrixClientContext)(); const roomContext = (0, _RoomContext.useRoomContext)(); const pinnedEventIds = (0, _usePinnedEvents.usePinnedEvents)(room); const readPinnedEvents = (0, _usePinnedEvents.useReadPinnedEvents)(room); const pinnedEvents = (0, _usePinnedEvents.useSortedFetchedPinnedEvents)(room, pinnedEventIds); (0, _react.useEffect)(() => { if (!cli || cli.isGuest()) return; // nothing to do const newlyRead = pinnedEventIds.filter(id => !readPinnedEvents.has(id)); if (newlyRead.length > 0) { // clear out any read pinned events which no longer are pinned cli.setRoomAccountData(room.roomId, _types.ReadPinsEventId, { event_ids: pinnedEventIds }); } }, [cli, room.roomId, pinnedEventIds, readPinnedEvents]); let content; if (!pinnedEventIds.length) { content = /*#__PURE__*/_react.default.createElement(_EmptyState.default, { Icon: _pin.default, title: (0, _languageHandler._t)("right_panel|pinned_messages|empty_title"), description: (0, _languageHandler._t)("right_panel|pinned_messages|empty_description", { pinAction: (0, _languageHandler._t)("action|pin") }) }); } else if (pinnedEvents?.length) { content = /*#__PURE__*/_react.default.createElement(PinnedMessages, { events: (0, _arrays.filterBoolean)(pinnedEvents), room: room, permalinkCreator: permalinkCreator }); } else { content = /*#__PURE__*/_react.default.createElement(_Spinner.default, null); } return /*#__PURE__*/_react.default.createElement(_BaseCard.default, { header: (0, _languageHandler._t)("right_panel|pinned_messages|header", { count: pinnedEventIds.length }), className: "mx_PinnedMessagesCard", onClose: onClose }, /*#__PURE__*/_react.default.createElement(_RoomContext.default.Provider, { value: _objectSpread(_objectSpread({}, roomContext), {}, { timelineRenderingType: _RoomContext.TimelineRenderingType.Pinned }) }, content)); } /** * The pinned messages in a room. */ /** * The pinned messages in a room. */ function PinnedMessages({ events, room, permalinkCreator }) { const matrixClient = (0, _MatrixClientContext.useMatrixClientContext)(); /** * Whether the client can unpin events from the room. * Listen to room state to update this value. */ const canUnpin = (0, _useRoomState.useRoomState)(room, () => _PinningUtils.default.userHasPinOrUnpinPermission(matrixClient, room)); /** * Opens the unpin all dialog. */ const onUnpinAll = (0, _react.useCallback)(async () => { _Modal.default.createDialog(_UnpinAllDialog.UnpinAllDialog, { roomId: room.roomId, matrixClient }); }, [room, matrixClient]); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)("mx_PinnedMessagesCard_wrapper", { mx_PinnedMessagesCard_wrapper_unpin_all: canUnpin }), role: "list" }, events.map((event, i) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_PinnedEventTile.PinnedEventTile, { key: event.getId(), event: event, permalinkCreator: permalinkCreator, room: room }), events.length - 1 !== i && /*#__PURE__*/_react.default.createElement(_compoundWeb.Separator, { key: `separator-${event.getId()}`, className: "mx_PinnedMessagesCard_Separator" })))), canUnpin && /*#__PURE__*/_react.default.createElement("div", { className: "mx_PinnedMessagesCard_unpin" }, /*#__PURE__*/_react.default.createElement(_compoundWeb.Button, { kind: "tertiary", onClick: onUnpinAll }, (0, _languageHandler._t)("right_panel|pinned_messages|unpin_all|button")))); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29tcG91bmRXZWIiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGluIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9CYXNlQ2FyZCIsIl9TcGlubmVyIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfUGlubmVkRXZlbnRUaWxlIiwiX3VzZVJvb21TdGF0ZSIsIl9Sb29tQ29udGV4dCIsIl90eXBlcyIsIl9hcnJheXMiLCJfTW9kYWwiLCJfVW5waW5BbGxEaWFsb2ciLCJfRW1wdHlTdGF0ZSIsIl91c2VQaW5uZWRFdmVudHMiLCJfUGlubmluZ1V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiUGlubmVkTWVzc2FnZXNDYXJkIiwicm9vbSIsIm9uQ2xvc2UiLCJwZXJtYWxpbmtDcmVhdG9yIiwiY2xpIiwidXNlTWF0cml4Q2xpZW50Q29udGV4dCIsInJvb21Db250ZXh0IiwidXNlUm9vbUNvbnRleHQiLCJwaW5uZWRFdmVudElkcyIsInVzZVBpbm5lZEV2ZW50cyIsInJlYWRQaW5uZWRFdmVudHMiLCJ1c2VSZWFkUGlubmVkRXZlbnRzIiwicGlubmVkRXZlbnRzIiwidXNlU29ydGVkRmV0Y2hlZFBpbm5lZEV2ZW50cyIsInVzZUVmZmVjdCIsImlzR3Vlc3QiLCJuZXdseVJlYWQiLCJpZCIsInNldFJvb21BY2NvdW50RGF0YSIsInJvb21JZCIsIlJlYWRQaW5zRXZlbnRJZCIsImV2ZW50X2lkcyIsImNvbnRlbnQiLCJjcmVhdGVFbGVtZW50IiwiSWNvbiIsIlBpbkljb24iLCJ0aXRsZSIsIl90IiwiZGVzY3JpcHRpb24iLCJwaW5BY3Rpb24iLCJQaW5uZWRNZXNzYWdlcyIsImV2ZW50cyIsImZpbHRlckJvb2xlYW4iLCJoZWFkZXIiLCJjb3VudCIsImNsYXNzTmFtZSIsIlByb3ZpZGVyIiwidmFsdWUiLCJ0aW1lbGluZVJlbmRlcmluZ1R5cGUiLCJUaW1lbGluZVJlbmRlcmluZ1R5cGUiLCJQaW5uZWQiLCJtYXRyaXhDbGllbnQiLCJjYW5VbnBpbiIsInVzZVJvb21TdGF0ZSIsIlBpbm5pbmdVdGlscyIsInVzZXJIYXNQaW5PclVucGluUGVybWlzc2lvbiIsIm9uVW5waW5BbGwiLCJ1c2VDYWxsYmFjayIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiVW5waW5BbGxEaWFsb2ciLCJGcmFnbWVudCIsImNsYXNzTmFtZXMiLCJteF9QaW5uZWRNZXNzYWdlc0NhcmRfd3JhcHBlcl91bnBpbl9hbGwiLCJyb2xlIiwibWFwIiwiZXZlbnQiLCJQaW5uZWRFdmVudFRpbGUiLCJrZXkiLCJnZXRJZCIsIlNlcGFyYXRvciIsIkJ1dHRvbiIsImtpbmQiLCJvbkNsaWNrIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvcmlnaHRfcGFuZWwvUGlubmVkTWVzc2FnZXNDYXJkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgSlNYIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBNYXRyaXhFdmVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IEJ1dHRvbiwgU2VwYXJhdG9yIH0gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtd2ViXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFBpbkljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL3BpblwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBCYXNlQ2FyZCBmcm9tIFwiLi9CYXNlQ2FyZFwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4uL2VsZW1lbnRzL1NwaW5uZXJcIjtcbmltcG9ydCB7IHVzZU1hdHJpeENsaWVudENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgUGlubmVkRXZlbnRUaWxlIH0gZnJvbSBcIi4uL3Jvb21zL1Bpbm5lZEV2ZW50VGlsZVwiO1xuaW1wb3J0IHsgdXNlUm9vbVN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZVJvb21TdGF0ZVwiO1xuaW1wb3J0IFJvb21Db250ZXh0LCB7IFRpbWVsaW5lUmVuZGVyaW5nVHlwZSwgdXNlUm9vbUNvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvUm9vbUNvbnRleHRcIjtcbmltcG9ydCB7IFJlYWRQaW5zRXZlbnRJZCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBSb29tUGVybWFsaW5rQ3JlYXRvciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wZXJtYWxpbmtzL1Blcm1hbGlua3NcIjtcbmltcG9ydCB7IGZpbHRlckJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYXJyYXlzXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uLy4uL01vZGFsXCI7XG5pbXBvcnQgeyBVbnBpbkFsbERpYWxvZyB9IGZyb20gXCIuLi9kaWFsb2dzL1VucGluQWxsRGlhbG9nXCI7XG5pbXBvcnQgRW1wdHlTdGF0ZSBmcm9tIFwiLi9FbXB0eVN0YXRlXCI7XG5pbXBvcnQgeyB1c2VQaW5uZWRFdmVudHMsIHVzZVJlYWRQaW5uZWRFdmVudHMsIHVzZVNvcnRlZEZldGNoZWRQaW5uZWRFdmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlUGlubmVkRXZlbnRzXCI7XG5pbXBvcnQgUGlubmluZ1V0aWxzIGZyb20gXCIuLi8uLi8uLi91dGlscy9QaW5uaW5nVXRpbHMudHNcIjtcblxuLyoqXG4gKiBMaXN0IHRoZSBwaW5uZWQgbWVzc2FnZXMgaW4gYSByb29tIGluc2lkZSBhIENhcmQuXG4gKi9cbmludGVyZmFjZSBQaW5uZWRNZXNzYWdlc0NhcmRQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvb20gdG8gbGlzdCB0aGUgcGlubmVkIG1lc3NhZ2VzIGZvci5cbiAgICAgKi9cbiAgICByb29tOiBSb29tO1xuICAgIC8qKlxuICAgICAqIFBlcm1hbGluayBvZiB0aGUgcm9vbS5cbiAgICAgKi9cbiAgICBwZXJtYWxpbmtDcmVhdG9yOiBSb29tUGVybWFsaW5rQ3JlYXRvcjtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgY2FyZCBpcyBjbG9zZWQuXG4gICAgICovXG4gICAgb25DbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGlubmVkTWVzc2FnZXNDYXJkKHsgcm9vbSwgb25DbG9zZSwgcGVybWFsaW5rQ3JlYXRvciB9OiBQaW5uZWRNZXNzYWdlc0NhcmRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGkgPSB1c2VNYXRyaXhDbGllbnRDb250ZXh0KCk7XG4gICAgY29uc3Qgcm9vbUNvbnRleHQgPSB1c2VSb29tQ29udGV4dCgpO1xuICAgIGNvbnN0IHBpbm5lZEV2ZW50SWRzID0gdXNlUGlubmVkRXZlbnRzKHJvb20pO1xuICAgIGNvbnN0IHJlYWRQaW5uZWRFdmVudHMgPSB1c2VSZWFkUGlubmVkRXZlbnRzKHJvb20pO1xuICAgIGNvbnN0IHBpbm5lZEV2ZW50cyA9IHVzZVNvcnRlZEZldGNoZWRQaW5uZWRFdmVudHMocm9vbSwgcGlubmVkRXZlbnRJZHMpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjbGkgfHwgY2xpLmlzR3Vlc3QoKSkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgIGNvbnN0IG5ld2x5UmVhZCA9IHBpbm5lZEV2ZW50SWRzLmZpbHRlcigoaWQpID0+ICFyZWFkUGlubmVkRXZlbnRzLmhhcyhpZCkpO1xuICAgICAgICBpZiAobmV3bHlSZWFkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIG91dCBhbnkgcmVhZCBwaW5uZWQgZXZlbnRzIHdoaWNoIG5vIGxvbmdlciBhcmUgcGlubmVkXG4gICAgICAgICAgICBjbGkuc2V0Um9vbUFjY291bnREYXRhKHJvb20ucm9vbUlkLCBSZWFkUGluc0V2ZW50SWQsIHtcbiAgICAgICAgICAgICAgICBldmVudF9pZHM6IHBpbm5lZEV2ZW50SWRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbY2xpLCByb29tLnJvb21JZCwgcGlubmVkRXZlbnRJZHMsIHJlYWRQaW5uZWRFdmVudHNdKTtcblxuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudDtcbiAgICBpZiAoIXBpbm5lZEV2ZW50SWRzLmxlbmd0aCkge1xuICAgICAgICBjb250ZW50ID0gKFxuICAgICAgICAgICAgPEVtcHR5U3RhdGVcbiAgICAgICAgICAgICAgICBJY29uPXtQaW5JY29ufVxuICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcInJpZ2h0X3BhbmVsfHBpbm5lZF9tZXNzYWdlc3xlbXB0eV90aXRsZVwiKX1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17X3QoXCJyaWdodF9wYW5lbHxwaW5uZWRfbWVzc2FnZXN8ZW1wdHlfZGVzY3JpcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBwaW5BY3Rpb246IF90KFwiYWN0aW9ufHBpblwiKSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChwaW5uZWRFdmVudHM/Lmxlbmd0aCkge1xuICAgICAgICBjb250ZW50ID0gKFxuICAgICAgICAgICAgPFBpbm5lZE1lc3NhZ2VzIGV2ZW50cz17ZmlsdGVyQm9vbGVhbihwaW5uZWRFdmVudHMpfSByb29tPXtyb29tfSBwZXJtYWxpbmtDcmVhdG9yPXtwZXJtYWxpbmtDcmVhdG9yfSAvPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnQgPSA8U3Bpbm5lciAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8QmFzZUNhcmRcbiAgICAgICAgICAgIGhlYWRlcj17X3QoXCJyaWdodF9wYW5lbHxwaW5uZWRfbWVzc2FnZXN8aGVhZGVyXCIsIHsgY291bnQ6IHBpbm5lZEV2ZW50SWRzLmxlbmd0aCB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1Bpbm5lZE1lc3NhZ2VzQ2FyZFwiXG4gICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICA+XG4gICAgICAgICAgICA8Um9vbUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi5yb29tQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVSZW5kZXJpbmdUeXBlOiBUaW1lbGluZVJlbmRlcmluZ1R5cGUuUGlubmVkLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L1Jvb21Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0Jhc2VDYXJkPlxuICAgICk7XG59XG5cbi8qKlxuICogVGhlIHBpbm5lZCBtZXNzYWdlcyBpbiBhIHJvb20uXG4gKi9cbmludGVyZmFjZSBQaW5uZWRNZXNzYWdlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGlubmVkIGV2ZW50cy5cbiAgICAgKi9cbiAgICBldmVudHM6IE1hdHJpeEV2ZW50W107XG4gICAgLyoqXG4gICAgICogVGhlIHJvb20gdGhlIGV2ZW50cyBhcmUgaW4uXG4gICAgICovXG4gICAgcm9vbTogUm9vbTtcbiAgICAvKipcbiAgICAgKiBUaGUgcGVybWFsaW5rIGNyZWF0b3IgdG8gdXNlLlxuICAgICAqL1xuICAgIHBlcm1hbGlua0NyZWF0b3I6IFJvb21QZXJtYWxpbmtDcmVhdG9yO1xufVxuXG4vKipcbiAqIFRoZSBwaW5uZWQgbWVzc2FnZXMgaW4gYSByb29tLlxuICovXG5mdW5jdGlvbiBQaW5uZWRNZXNzYWdlcyh7IGV2ZW50cywgcm9vbSwgcGVybWFsaW5rQ3JlYXRvciB9OiBQaW5uZWRNZXNzYWdlc1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1hdHJpeENsaWVudCA9IHVzZU1hdHJpeENsaWVudENvbnRleHQoKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBjYW4gdW5waW4gZXZlbnRzIGZyb20gdGhlIHJvb20uXG4gICAgICogTGlzdGVuIHRvIHJvb20gc3RhdGUgdG8gdXBkYXRlIHRoaXMgdmFsdWUuXG4gICAgICovXG4gICAgY29uc3QgY2FuVW5waW4gPSB1c2VSb29tU3RhdGUocm9vbSwgKCkgPT4gUGlubmluZ1V0aWxzLnVzZXJIYXNQaW5PclVucGluUGVybWlzc2lvbihtYXRyaXhDbGllbnQsIHJvb20pKTtcblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSB1bnBpbiBhbGwgZGlhbG9nLlxuICAgICAqL1xuICAgIGNvbnN0IG9uVW5waW5BbGwgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhVbnBpbkFsbERpYWxvZywge1xuICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCxcbiAgICAgICAgICAgIG1hdHJpeENsaWVudCxcbiAgICAgICAgfSk7XG4gICAgfSwgW3Jvb20sIG1hdHJpeENsaWVudF0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJteF9QaW5uZWRNZXNzYWdlc0NhcmRfd3JhcHBlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG14X1Bpbm5lZE1lc3NhZ2VzQ2FyZF93cmFwcGVyX3VucGluX2FsbDogY2FuVW5waW4sXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgcm9sZT1cImxpc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtldmVudHMubWFwKChldmVudCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBpbm5lZEV2ZW50VGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuZ2V0SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWFsaW5rQ3JlYXRvcj17cGVybWFsaW5rQ3JlYXRvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tPXtyb29tfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBBZGQgYSBzZXBhcmF0b3IgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBwaW5uZWQgbWVzc2FnZSAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtldmVudHMubGVuZ3RoIC0gMSAhPT0gaSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciBrZXk9e2BzZXBhcmF0b3ItJHtldmVudC5nZXRJZCgpfWB9IGNsYXNzTmFtZT1cIm14X1Bpbm5lZE1lc3NhZ2VzQ2FyZF9TZXBhcmF0b3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtjYW5VbnBpbiAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9QaW5uZWRNZXNzYWdlc0NhcmRfdW5waW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBraW5kPVwidGVydGlhcnlcIiBvbkNsaWNrPXtvblVucGluQWxsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInJpZ2h0X3BhbmVsfHBpbm5lZF9tZXNzYWdlc3x1bnBpbl9hbGx8YnV0dG9uXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFBRCxz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