UNPKG

matrix-react-sdk

Version:
208 lines (196 loc) 33.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PinnedEventTile = PinnedEventTile; var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _compoundWeb = require("@vector-im/compound-web"); var _visibilityOn = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/visibility-on")); var _unpin = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/unpin")); var _forward = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/forward")); var _overflowHorizontal = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/overflow-horizontal")); var _delete = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/delete")); var _threads = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/threads")); var _classnames = _interopRequireDefault(require("classnames")); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _MessageEvent = _interopRequireDefault(require("../messages/MessageEvent")); var _MemberAvatar = _interopRequireDefault(require("../avatars/MemberAvatar")); var _languageHandler = require("../../../languageHandler"); var _FormattingUtils = require("../../../utils/FormattingUtils"); var _MatrixClientContext = require("../../../contexts/MatrixClientContext"); var _useRoomState = require("../../../hooks/useRoomState"); var _EventUtils = require("../../../utils/EventUtils"); var _events = require("../../../events"); var _ConfirmRedactDialog = require("../dialogs/ConfirmRedactDialog"); var _PinningUtils = _interopRequireDefault(require("../../../utils/PinningUtils.ts")); var _PosthogTrackers = _interopRequireDefault(require("../../../PosthogTrackers.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; } /* Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. Copyright 2017 Travis Ralston SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const AVATAR_SIZE = "32px"; /** * Properties for {@link PinnedEventTile}. */ /** * A pinned event tile. */ function PinnedEventTile({ event, room, permalinkCreator }) { const sender = event.getSender(); if (!sender) { throw new Error("Pinned event unexpectedly has no sender"); } const isInThread = Boolean(event.threadRootId); const displayThreadInfo = !event.isThreadRoot && isInThread; return /*#__PURE__*/_react.default.createElement("div", { className: "mx_PinnedEventTile", role: "listitem" }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_MemberAvatar.default, { className: "mx_PinnedEventTile_senderAvatar", member: event.sender, size: AVATAR_SIZE, fallbackUserId: sender })), /*#__PURE__*/_react.default.createElement("div", { className: "mx_PinnedEventTile_wrapper" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_PinnedEventTile_top" }, /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, { label: event.sender?.name || sender }, /*#__PURE__*/_react.default.createElement("span", { className: (0, _classnames.default)("mx_PinnedEventTile_sender", (0, _FormattingUtils.getUserNameColorClass)(sender)) }, event.sender?.name || sender)), /*#__PURE__*/_react.default.createElement(PinMenu, { event: event, room: room, permalinkCreator: permalinkCreator })), /*#__PURE__*/_react.default.createElement(_MessageEvent.default, { mxEvent: event, maxImageHeight: 150, onHeightChanged: () => {} // we need to give this, apparently , permalinkCreator: permalinkCreator, replacingEventId: event.replacingEventId() }), displayThreadInfo && /*#__PURE__*/_react.default.createElement("div", { className: "mx_PinnedEventTile_thread" }, /*#__PURE__*/_react.default.createElement(_threads.default, null), (0, _languageHandler._t)("right_panel|pinned_messages|reply_thread", {}, { link: sub => /*#__PURE__*/_react.default.createElement("button", { type: "button", onClick: () => { if (!event.threadRootId) return; const rootEvent = room.findEventById(event.threadRootId); if (!rootEvent) return; _dispatcher.default.dispatch({ action: _actions.Action.ShowThread, rootEvent: rootEvent, push: true }); } }, sub) })))); } /** * Properties for {@link PinMenu}. */ /** * A popover menu with actions on the pinned event */ function PinMenu({ event, room, permalinkCreator }) { const [open, setOpen] = (0, _react.useState)(false); const matrixClient = (0, _MatrixClientContext.useMatrixClientContext)(); /** * View the event in the timeline. */ const onViewInTimeline = (0, _react.useCallback)(() => { _PosthogTrackers.default.trackInteraction("PinnedMessageListViewTimeline"); _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, event_id: event.getId(), highlighted: true, room_id: event.getRoomId(), metricsTrigger: undefined // room doesn't change }); }, [event]); /** * Whether the client can unpin the event. * If the room state change, we want to check again the permission */ const canUnpin = (0, _useRoomState.useRoomState)(room, () => _PinningUtils.default.canUnpin(matrixClient, event)); /** * Unpin the event. * @param event */ const onUnpin = (0, _react.useCallback)(async () => { await _PinningUtils.default.pinOrUnpinEvent(matrixClient, event); _PosthogTrackers.default.trackPinUnpinMessage("Unpin", "MessagePinningList"); }, [event, matrixClient]); const contentActionable = (0, _EventUtils.isContentActionable)(event); // Get the forwardable event for the given event const forwardableEvent = contentActionable && (0, _events.getForwardableEvent)(event, matrixClient); /** * Open the forward dialog. */ const onForward = (0, _react.useCallback)(() => { if (forwardableEvent) { _dispatcher.default.dispatch({ action: _actions.Action.OpenForwardDialog, event: forwardableEvent, permalinkCreator: permalinkCreator }); } }, [forwardableEvent, permalinkCreator]); /** * Whether the client can redact the event. */ const canRedact = room.getLiveTimeline().getState(_matrix.EventTimeline.FORWARDS)?.maySendRedactionForEvent(event, matrixClient.getSafeUserId()) && event.getType() !== _matrix.EventType.RoomServerAcl && event.getType() !== _matrix.EventType.RoomEncryption; /** * Redact the event. */ const onRedact = (0, _react.useCallback)(() => (0, _ConfirmRedactDialog.createRedactEventDialog)({ mxEvent: event }), [event]); return /*#__PURE__*/_react.default.createElement(_compoundWeb.Menu, { open: open, onOpenChange: setOpen, showTitle: false, title: (0, _languageHandler._t)("right_panel|pinned_messages|menu"), side: "right", align: "start", trigger: /*#__PURE__*/_react.default.createElement(_compoundWeb.IconButton, { size: "24px", "aria-label": (0, _languageHandler._t)("right_panel|pinned_messages|menu") }, /*#__PURE__*/_react.default.createElement(_overflowHorizontal.default, null)) }, /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { Icon: _visibilityOn.default, label: (0, _languageHandler._t)("right_panel|pinned_messages|view"), onSelect: onViewInTimeline }), canUnpin && /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { Icon: _unpin.default, label: (0, _languageHandler._t)("action|unpin"), onSelect: onUnpin }), forwardableEvent && /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { Icon: _forward.default, label: (0, _languageHandler._t)("action|forward"), onSelect: onForward }), canRedact && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_compoundWeb.Separator, null), /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { kind: "critical", Icon: _delete.default, label: (0, _languageHandler._t)("action|delete"), onSelect: onRedact }))); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2NvbXBvdW5kV2ViIiwiX3Zpc2liaWxpdHlPbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW5waW4iLCJfZm9yd2FyZCIsIl9vdmVyZmxvd0hvcml6b250YWwiLCJfZGVsZXRlIiwiX3RocmVhZHMiLCJfY2xhc3NuYW1lcyIsIl9kaXNwYXRjaGVyIiwiX2FjdGlvbnMiLCJfTWVzc2FnZUV2ZW50IiwiX01lbWJlckF2YXRhciIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfRm9ybWF0dGluZ1V0aWxzIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfdXNlUm9vbVN0YXRlIiwiX0V2ZW50VXRpbHMiLCJfZXZlbnRzIiwiX0NvbmZpcm1SZWRhY3REaWFsb2ciLCJfUGlubmluZ1V0aWxzIiwiX1Bvc3Rob2dUcmFja2VycyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkFWQVRBUl9TSVpFIiwiUGlubmVkRXZlbnRUaWxlIiwiZXZlbnQiLCJyb29tIiwicGVybWFsaW5rQ3JlYXRvciIsInNlbmRlciIsImdldFNlbmRlciIsIkVycm9yIiwiaXNJblRocmVhZCIsIkJvb2xlYW4iLCJ0aHJlYWRSb290SWQiLCJkaXNwbGF5VGhyZWFkSW5mbyIsImlzVGhyZWFkUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyb2xlIiwibWVtYmVyIiwic2l6ZSIsImZhbGxiYWNrVXNlcklkIiwiVG9vbHRpcCIsImxhYmVsIiwibmFtZSIsImNsYXNzTmFtZXMiLCJnZXRVc2VyTmFtZUNvbG9yQ2xhc3MiLCJQaW5NZW51IiwibXhFdmVudCIsIm1heEltYWdlSGVpZ2h0Iiwib25IZWlnaHRDaGFuZ2VkIiwicmVwbGFjaW5nRXZlbnRJZCIsIl90IiwibGluayIsInN1YiIsInR5cGUiLCJvbkNsaWNrIiwicm9vdEV2ZW50IiwiZmluZEV2ZW50QnlJZCIsImRpcyIsImRpc3BhdGNoIiwiYWN0aW9uIiwiQWN0aW9uIiwiU2hvd1RocmVhZCIsInB1c2giLCJvcGVuIiwic2V0T3BlbiIsInVzZVN0YXRlIiwibWF0cml4Q2xpZW50IiwidXNlTWF0cml4Q2xpZW50Q29udGV4dCIsIm9uVmlld0luVGltZWxpbmUiLCJ1c2VDYWxsYmFjayIsIlBvc3Rob2dUcmFja2VycyIsInRyYWNrSW50ZXJhY3Rpb24iLCJWaWV3Um9vbSIsImV2ZW50X2lkIiwiZ2V0SWQiLCJoaWdobGlnaHRlZCIsInJvb21faWQiLCJnZXRSb29tSWQiLCJtZXRyaWNzVHJpZ2dlciIsInVuZGVmaW5lZCIsImNhblVucGluIiwidXNlUm9vbVN0YXRlIiwiUGlubmluZ1V0aWxzIiwib25VbnBpbiIsInBpbk9yVW5waW5FdmVudCIsInRyYWNrUGluVW5waW5NZXNzYWdlIiwiY29udGVudEFjdGlvbmFibGUiLCJpc0NvbnRlbnRBY3Rpb25hYmxlIiwiZm9yd2FyZGFibGVFdmVudCIsImdldEZvcndhcmRhYmxlRXZlbnQiLCJvbkZvcndhcmQiLCJPcGVuRm9yd2FyZERpYWxvZyIsImNhblJlZGFjdCIsImdldExpdmVUaW1lbGluZSIsImdldFN0YXRlIiwiRXZlbnRUaW1lbGluZSIsIkZPUldBUkRTIiwibWF5U2VuZFJlZGFjdGlvbkZvckV2ZW50IiwiZ2V0U2FmZVVzZXJJZCIsImdldFR5cGUiLCJFdmVudFR5cGUiLCJSb29tU2VydmVyQWNsIiwiUm9vbUVuY3J5cHRpb24iLCJvblJlZGFjdCIsImNyZWF0ZVJlZGFjdEV2ZW50RGlhbG9nIiwiTWVudSIsIm9uT3BlbkNoYW5nZSIsInNob3dUaXRsZSIsInRpdGxlIiwic2lkZSIsImFsaWduIiwidHJpZ2dlciIsIkljb25CdXR0b24iLCJNZW51SXRlbSIsIkljb24iLCJWaWV3SWNvbiIsIm9uU2VsZWN0IiwiVW5waW5JY29uIiwiRm9yd2FyZEljb24iLCJGcmFnbWVudCIsIlNlcGFyYXRvciIsImtpbmQiLCJEZWxldGVJY29uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvcm9vbXMvUGlubmVkRXZlbnRUaWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMTcgVHJhdmlzIFJhbHN0b25cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IEpTWCwgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdmVudFRpbWVsaW5lLCBFdmVudFR5cGUsIE1hdHJpeEV2ZW50LCBSb29tIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiwgTWVudSwgTWVudUl0ZW0sIFNlcGFyYXRvciwgVG9vbHRpcCB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuaW1wb3J0IFZpZXdJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy92aXNpYmlsaXR5LW9uXCI7XG5pbXBvcnQgVW5waW5JY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy91bnBpblwiO1xuaW1wb3J0IEZvcndhcmRJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9mb3J3YXJkXCI7XG5pbXBvcnQgVHJpZ2dlckljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL292ZXJmbG93LWhvcml6b250YWxcIjtcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9kZWxldGVcIjtcbmltcG9ydCBUaHJlYWRJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy90aHJlYWRzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgZGlzIGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCBNZXNzYWdlRXZlbnQgZnJvbSBcIi4uL21lc3NhZ2VzL01lc3NhZ2VFdmVudFwiO1xuaW1wb3J0IE1lbWJlckF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9NZW1iZXJBdmF0YXJcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0VXNlck5hbWVDb2xvckNsYXNzIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Zvcm1hdHRpbmdVdGlsc1wiO1xuaW1wb3J0IHsgVmlld1Jvb21QYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvVmlld1Jvb21QYXlsb2FkXCI7XG5pbXBvcnQgeyBSb29tUGVybWFsaW5rQ3JlYXRvciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wZXJtYWxpbmtzL1Blcm1hbGlua3NcIjtcbmltcG9ydCB7IHVzZU1hdHJpeENsaWVudENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlUm9vbVN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZVJvb21TdGF0ZVwiO1xuaW1wb3J0IHsgaXNDb250ZW50QWN0aW9uYWJsZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9FdmVudFV0aWxzXCI7XG5pbXBvcnQgeyBnZXRGb3J3YXJkYWJsZUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgT3BlbkZvcndhcmREaWFsb2dQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvT3BlbkZvcndhcmREaWFsb2dQYXlsb2FkXCI7XG5pbXBvcnQgeyBjcmVhdGVSZWRhY3RFdmVudERpYWxvZyB9IGZyb20gXCIuLi9kaWFsb2dzL0NvbmZpcm1SZWRhY3REaWFsb2dcIjtcbmltcG9ydCB7IFNob3dUaHJlYWRQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvU2hvd1RocmVhZFBheWxvYWRcIjtcbmltcG9ydCBQaW5uaW5nVXRpbHMgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL1Bpbm5pbmdVdGlscy50c1wiO1xuaW1wb3J0IFBvc3Rob2dUcmFja2VycyBmcm9tIFwiLi4vLi4vLi4vUG9zdGhvZ1RyYWNrZXJzLnRzXCI7XG5cbmNvbnN0IEFWQVRBUl9TSVpFID0gXCIzMnB4XCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3Ige0BsaW5rIFBpbm5lZEV2ZW50VGlsZX0uXG4gKi9cbmludGVyZmFjZSBQaW5uZWRFdmVudFRpbGVQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHRvIGRpc3BsYXkuXG4gICAgICovXG4gICAgZXZlbnQ6IE1hdHJpeEV2ZW50O1xuICAgIC8qKlxuICAgICAqIFRoZSBwZXJtYWxpbmsgY3JlYXRvciB0byB1c2UuXG4gICAgICovXG4gICAgcGVybWFsaW5rQ3JlYXRvcjogUm9vbVBlcm1hbGlua0NyZWF0b3I7XG4gICAgLyoqXG4gICAgICogVGhlIHJvb20gdGhlIGV2ZW50IGlzIGluLlxuICAgICAqL1xuICAgIHJvb206IFJvb207XG59XG5cbi8qKlxuICogQSBwaW5uZWQgZXZlbnQgdGlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBpbm5lZEV2ZW50VGlsZSh7IGV2ZW50LCByb29tLCBwZXJtYWxpbmtDcmVhdG9yIH06IFBpbm5lZEV2ZW50VGlsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNlbmRlciA9IGV2ZW50LmdldFNlbmRlcigpO1xuICAgIGlmICghc2VuZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBpbm5lZCBldmVudCB1bmV4cGVjdGVkbHkgaGFzIG5vIHNlbmRlclwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0luVGhyZWFkID0gQm9vbGVhbihldmVudC50aHJlYWRSb290SWQpO1xuICAgIGNvbnN0IGRpc3BsYXlUaHJlYWRJbmZvID0gIWV2ZW50LmlzVGhyZWFkUm9vdCAmJiBpc0luVGhyZWFkO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9QaW5uZWRFdmVudFRpbGVcIiByb2xlPVwibGlzdGl0ZW1cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPE1lbWJlckF2YXRhclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9QaW5uZWRFdmVudFRpbGVfc2VuZGVyQXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyPXtldmVudC5zZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIHNpemU9e0FWQVRBUl9TSVpFfVxuICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1VzZXJJZD17c2VuZGVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUGlubmVkRXZlbnRUaWxlX3dyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Bpbm5lZEV2ZW50VGlsZV90b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgbGFiZWw9e2V2ZW50LnNlbmRlcj8ubmFtZSB8fCBzZW5kZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfUGlubmVkRXZlbnRUaWxlX3NlbmRlclwiLCBnZXRVc2VyTmFtZUNvbG9yQ2xhc3Moc2VuZGVyKSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtldmVudC5zZW5kZXI/Lm5hbWUgfHwgc2VuZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDxQaW5NZW51IGV2ZW50PXtldmVudH0gcm9vbT17cm9vbX0gcGVybWFsaW5rQ3JlYXRvcj17cGVybWFsaW5rQ3JlYXRvcn0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZUV2ZW50XG4gICAgICAgICAgICAgICAgICAgIG14RXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgICBtYXhJbWFnZUhlaWdodD17MTUwfVxuICAgICAgICAgICAgICAgICAgICBvbkhlaWdodENoYW5nZWQ9eygpID0+IHt9fSAvLyB3ZSBuZWVkIHRvIGdpdmUgdGhpcywgYXBwYXJlbnRseVxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbmtDcmVhdG9yPXtwZXJtYWxpbmtDcmVhdG9yfVxuICAgICAgICAgICAgICAgICAgICByZXBsYWNpbmdFdmVudElkPXtldmVudC5yZXBsYWNpbmdFdmVudElkKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7ZGlzcGxheVRocmVhZEluZm8gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Bpbm5lZEV2ZW50VGlsZV90aHJlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaHJlYWRJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaWdodF9wYW5lbHxwaW5uZWRfbWVzc2FnZXN8cmVwbHlfdGhyZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rOiAoc3ViKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnRocmVhZFJvb3RJZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RFdmVudCA9IHJvb20uZmluZEV2ZW50QnlJZChldmVudC50aHJlYWRSb290SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb3RFdmVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcy5kaXNwYXRjaDxTaG93VGhyZWFkUGF5bG9hZD4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uU2hvd1RocmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFdmVudDogcm9vdEV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3VifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB7QGxpbmsgUGluTWVudX0uXG4gKi9cbmludGVyZmFjZSBQaW5NZW51UHJvcHMgZXh0ZW5kcyBQaW5uZWRFdmVudFRpbGVQcm9wcyB7fVxuXG4vKipcbiAqIEEgcG9wb3ZlciBtZW51IHdpdGggYWN0aW9ucyBvbiB0aGUgcGlubmVkIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIFBpbk1lbnUoeyBldmVudCwgcm9vbSwgcGVybWFsaW5rQ3JlYXRvciB9OiBQaW5NZW51UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IG1hdHJpeENsaWVudCA9IHVzZU1hdHJpeENsaWVudENvbnRleHQoKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgdGhlIGV2ZW50IGluIHRoZSB0aW1lbGluZS5cbiAgICAgKi9cbiAgICBjb25zdCBvblZpZXdJblRpbWVsaW5lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBQb3N0aG9nVHJhY2tlcnMudHJhY2tJbnRlcmFjdGlvbihcIlBpbm5lZE1lc3NhZ2VMaXN0Vmlld1RpbWVsaW5lXCIpO1xuXG4gICAgICAgIGRpcy5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uLlZpZXdSb29tLFxuICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmdldElkKCksXG4gICAgICAgICAgICBoaWdobGlnaHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHJvb21faWQ6IGV2ZW50LmdldFJvb21JZCgpLFxuICAgICAgICAgICAgbWV0cmljc1RyaWdnZXI6IHVuZGVmaW5lZCwgLy8gcm9vbSBkb2Vzbid0IGNoYW5nZVxuICAgICAgICB9KTtcbiAgICB9LCBbZXZlbnRdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBjYW4gdW5waW4gdGhlIGV2ZW50LlxuICAgICAqIElmIHRoZSByb29tIHN0YXRlIGNoYW5nZSwgd2Ugd2FudCB0byBjaGVjayBhZ2FpbiB0aGUgcGVybWlzc2lvblxuICAgICAqL1xuICAgIGNvbnN0IGNhblVucGluID0gdXNlUm9vbVN0YXRlKHJvb20sICgpID0+IFBpbm5pbmdVdGlscy5jYW5VbnBpbihtYXRyaXhDbGllbnQsIGV2ZW50KSk7XG5cbiAgICAvKipcbiAgICAgKiBVbnBpbiB0aGUgZXZlbnQuXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgY29uc3Qgb25VbnBpbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgUGlubmluZ1V0aWxzLnBpbk9yVW5waW5FdmVudChtYXRyaXhDbGllbnQsIGV2ZW50KTtcbiAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLnRyYWNrUGluVW5waW5NZXNzYWdlKFwiVW5waW5cIiwgXCJNZXNzYWdlUGlubmluZ0xpc3RcIik7XG4gICAgfSwgW2V2ZW50LCBtYXRyaXhDbGllbnRdKTtcblxuICAgIGNvbnN0IGNvbnRlbnRBY3Rpb25hYmxlID0gaXNDb250ZW50QWN0aW9uYWJsZShldmVudCk7XG4gICAgLy8gR2V0IHRoZSBmb3J3YXJkYWJsZSBldmVudCBmb3IgdGhlIGdpdmVuIGV2ZW50XG4gICAgY29uc3QgZm9yd2FyZGFibGVFdmVudCA9IGNvbnRlbnRBY3Rpb25hYmxlICYmIGdldEZvcndhcmRhYmxlRXZlbnQoZXZlbnQsIG1hdHJpeENsaWVudCk7XG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgZm9yd2FyZCBkaWFsb2cuXG4gICAgICovXG4gICAgY29uc3Qgb25Gb3J3YXJkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBpZiAoZm9yd2FyZGFibGVFdmVudCkge1xuICAgICAgICAgICAgZGlzLmRpc3BhdGNoPE9wZW5Gb3J3YXJkRGlhbG9nUGF5bG9hZD4oe1xuICAgICAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uLk9wZW5Gb3J3YXJkRGlhbG9nLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBmb3J3YXJkYWJsZUV2ZW50LFxuICAgICAgICAgICAgICAgIHBlcm1hbGlua0NyZWF0b3I6IHBlcm1hbGlua0NyZWF0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtmb3J3YXJkYWJsZUV2ZW50LCBwZXJtYWxpbmtDcmVhdG9yXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjbGllbnQgY2FuIHJlZGFjdCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgY29uc3QgY2FuUmVkYWN0ID1cbiAgICAgICAgcm9vbVxuICAgICAgICAgICAgLmdldExpdmVUaW1lbGluZSgpXG4gICAgICAgICAgICAuZ2V0U3RhdGUoRXZlbnRUaW1lbGluZS5GT1JXQVJEUylcbiAgICAgICAgICAgID8ubWF5U2VuZFJlZGFjdGlvbkZvckV2ZW50KGV2ZW50LCBtYXRyaXhDbGllbnQuZ2V0U2FmZVVzZXJJZCgpKSAmJlxuICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tU2VydmVyQWNsICYmXG4gICAgICAgIGV2ZW50LmdldFR5cGUoKSAhPT0gRXZlbnRUeXBlLlJvb21FbmNyeXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogUmVkYWN0IHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBjb25zdCBvblJlZGFjdCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAoKTogdm9pZCA9PlxuICAgICAgICAgICAgY3JlYXRlUmVkYWN0RXZlbnREaWFsb2coe1xuICAgICAgICAgICAgICAgIG14RXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIFtldmVudF0sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxNZW51XG4gICAgICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtzZXRPcGVufVxuICAgICAgICAgICAgc2hvd1RpdGxlPXtmYWxzZX1cbiAgICAgICAgICAgIHRpdGxlPXtfdChcInJpZ2h0X3BhbmVsfHBpbm5lZF9tZXNzYWdlc3xtZW51XCIpfVxuICAgICAgICAgICAgc2lkZT1cInJpZ2h0XCJcbiAgICAgICAgICAgIGFsaWduPVwic3RhcnRcIlxuICAgICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICAgICAgPEljb25CdXR0b24gc2l6ZT1cIjI0cHhcIiBhcmlhLWxhYmVsPXtfdChcInJpZ2h0X3BhbmVsfHBpbm5lZF9tZXNzYWdlc3xtZW51XCIpfT5cbiAgICAgICAgICAgICAgICAgICAgPFRyaWdnZXJJY29uIC8+XG4gICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgICA8TWVudUl0ZW0gSWNvbj17Vmlld0ljb259IGxhYmVsPXtfdChcInJpZ2h0X3BhbmVsfHBpbm5lZF9tZXNzYWdlc3x2aWV3XCIpfSBvblNlbGVjdD17b25WaWV3SW5UaW1lbGluZX0gLz5cbiAgICAgICAgICAgIHtjYW5VbnBpbiAmJiA8TWVudUl0ZW0gSWNvbj17VW5waW5JY29ufSBsYWJlbD17X3QoXCJhY3Rpb258dW5waW5cIil9IG9uU2VsZWN0PXtvblVucGlufSAvPn1cbiAgICAgICAgICAgIHtmb3J3YXJkYWJsZUV2ZW50ICYmIDxNZW51SXRlbSBJY29uPXtGb3J3YXJkSWNvbn0gbGFiZWw9e190KFwiYWN0aW9ufGZvcndhcmRcIil9IG9uU2VsZWN0PXtvbkZvcndhcmR9IC8+fVxuICAgICAgICAgICAge2NhblJlZGFjdCAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW0ga2luZD1cImNyaXRpY2FsXCIgSWNvbj17RGVsZXRlSWNvbn0gbGFiZWw9e190KFwiYWN0aW9ufGRlbGV0ZVwiKX0gb25TZWxlY3Q9e29uUmVkYWN0fSAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9NZW51PlxuICAgICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFELHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFGLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTyxtQkFBQSxHQUFBSCxzQkFBQSxDQUFBSixPQUFBO0FBQ0Es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