matrix-react-sdk
Version:
SDK for matrix.org using React
172 lines (169 loc) • 29.2 kB
JavaScript
"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 _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _UserTab = require("../dialogs/UserTab");
var _membership = require("../../../utils/membership");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _useDispatcher = require("../../../hooks/useDispatcher");
var _useRoomState = require("../../../hooks/useRoomState");
var _useRoomMembers = require("../../../hooks/useRoomMembers");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _InlineSpinner = _interopRequireDefault(require("../elements/InlineSpinner"));
var _RoomName = _interopRequireDefault(require("../elements/RoomName"));
var _RoomTopic = _interopRequireDefault(require("../elements/RoomTopic"));
var _RoomFacePile = _interopRequireDefault(require("../elements/RoomFacePile"));
var _RoomAvatar = _interopRequireDefault(require("../avatars/RoomAvatar"));
var _MemberAvatar = _interopRequireDefault(require("../avatars/MemberAvatar"));
var _BetaCard = require("../beta/BetaCard");
var _RoomInfoLine = _interopRequireDefault(require("./RoomInfoLine"));
var _videoRooms = require("../../../utils/video-rooms");
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 2022 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.
*/
// XXX This component is currently only used for spaces and video rooms, though
// surely we should expand its use to all rooms for consistency? This already
// handles the text room case, though we would need to add support for ignoring
// and viewing invite reasons to achieve parity with the default invite screen.
const RoomPreviewCard = ({
room,
onJoinButtonClicked,
onRejectButtonClicked
}) => {
const cli = (0, _react.useContext)(_MatrixClientContext.default);
const isVideoRoom = (0, _videoRooms.isVideoRoom)(room);
const myMembership = (0, _useRoomMembers.useMyRoomMembership)(room);
(0, _useDispatcher.useDispatcher)(_dispatcher.default, payload => {
if (payload.action === _actions.Action.JoinRoomError && payload.roomId === room.roomId) {
setBusy(false); // stop the spinner, join failed
}
});
const [busy, setBusy] = (0, _react.useState)(false);
const joinRule = (0, _useRoomState.useRoomState)(room, state => state.getJoinRule());
const cannotJoin = (0, _membership.getEffectiveMembership)(myMembership) === _membership.EffectiveMembership.Leave && joinRule !== _matrix.JoinRule.Public;
const viewLabs = () => _dispatcher.default.dispatch({
action: _actions.Action.ViewUserSettings,
initialTabId: _UserTab.UserTab.Labs
});
let inviterSection = null;
let joinButtons;
if (myMembership === _types.KnownMembership.Join) {
joinButtons = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "danger_outline",
onClick: () => {
_dispatcher.default.dispatch({
action: "leave_room",
room_id: room.roomId
});
}
}, (0, _languageHandler._t)("action|leave"));
} else if (myMembership === _types.KnownMembership.Invite) {
const inviteSender = room.getMember(cli.getUserId())?.events.member?.getSender();
if (inviteSender) {
const inviter = room.getMember(inviteSender);
inviterSection = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_inviter"
}, /*#__PURE__*/_react.default.createElement(_MemberAvatar.default, {
member: inviter,
fallbackUserId: inviteSender,
size: "32px"
}), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_inviter_name"
}, (0, _languageHandler._t)("room|invites_you_text", {}, {
inviter: () => /*#__PURE__*/_react.default.createElement("strong", null, inviter?.name || inviteSender)
})), inviter ? /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_inviter_mxid"
}, inviteSender) : null));
}
joinButtons = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "primary_outline",
onClick: () => {
setBusy(true);
onRejectButtonClicked();
}
}, (0, _languageHandler._t)("action|reject")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "primary",
onClick: () => {
setBusy(true);
onJoinButtonClicked();
}
}, (0, _languageHandler._t)("action|accept")));
} else {
joinButtons = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "primary",
onClick: () => {
onJoinButtonClicked();
if (!cli.isGuest()) {
// user will be shown a modal that won't fire a room join error
setBusy(true);
}
},
disabled: cannotJoin
}, (0, _languageHandler._t)("action|join"));
}
if (busy) {
joinButtons = /*#__PURE__*/_react.default.createElement(_InlineSpinner.default, null);
}
let avatarRow;
if (isVideoRoom) {
avatarRow = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, {
room: room,
size: "50px",
viewAvatarOnClick: true
}), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_video"
}), /*#__PURE__*/_react.default.createElement(_BetaCard.BetaPill, {
onClick: viewLabs,
tooltipTitle: (0, _languageHandler._t)("labs|video_rooms_beta")
}));
} else if (room.isSpaceRoom()) {
avatarRow = /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, {
room: room,
size: "80px",
viewAvatarOnClick: true
});
} else {
avatarRow = /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, {
room: room,
size: "50px",
viewAvatarOnClick: true
});
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard"
}, inviterSection, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_avatar"
}, avatarRow), /*#__PURE__*/_react.default.createElement("h1", {
className: "mx_RoomPreviewCard_name"
}, /*#__PURE__*/_react.default.createElement(_RoomName.default, {
room: room
})), /*#__PURE__*/_react.default.createElement(_RoomInfoLine.default, {
room: room
}), /*#__PURE__*/_react.default.createElement(_RoomTopic.default, {
room: room,
className: "mx_RoomPreviewCard_topic"
}), room.getJoinRule() === "public" && /*#__PURE__*/_react.default.createElement(_RoomFacePile.default, {
room: room
}), cannotJoin ? /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_notice"
}, (0, _languageHandler._t)("room|join_failed_needs_invite", {
roomName: room.name
})) : null, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomPreviewCard_joinButtons"
}, joinButtons));
};
var _default = exports.default = RoomPreviewCard;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX3R5cGVzIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9kaXNwYXRjaGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9hY3Rpb25zIiwiX1VzZXJUYWIiLCJfbWVtYmVyc2hpcCIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX3VzZURpc3BhdGNoZXIiLCJfdXNlUm9vbVN0YXRlIiwiX3VzZVJvb21NZW1iZXJzIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfSW5saW5lU3Bpbm5lciIsIl9Sb29tTmFtZSIsIl9Sb29tVG9waWMiLCJfUm9vbUZhY2VQaWxlIiwiX1Jvb21BdmF0YXIiLCJfTWVtYmVyQXZhdGFyIiwiX0JldGFDYXJkIiwiX1Jvb21JbmZvTGluZSIsIl92aWRlb1Jvb21zIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUm9vbVByZXZpZXdDYXJkIiwicm9vbSIsIm9uSm9pbkJ1dHRvbkNsaWNrZWQiLCJvblJlamVjdEJ1dHRvbkNsaWNrZWQiLCJjbGkiLCJ1c2VDb250ZXh0IiwiTWF0cml4Q2xpZW50Q29udGV4dCIsImlzVmlkZW9Sb29tIiwiY2FsY0lzVmlkZW9Sb29tIiwibXlNZW1iZXJzaGlwIiwidXNlTXlSb29tTWVtYmVyc2hpcCIsInVzZURpc3BhdGNoZXIiLCJkZWZhdWx0RGlzcGF0Y2hlciIsInBheWxvYWQiLCJhY3Rpb24iLCJBY3Rpb24iLCJKb2luUm9vbUVycm9yIiwicm9vbUlkIiwic2V0QnVzeSIsImJ1c3kiLCJ1c2VTdGF0ZSIsImpvaW5SdWxlIiwidXNlUm9vbVN0YXRlIiwic3RhdGUiLCJnZXRKb2luUnVsZSIsImNhbm5vdEpvaW4iLCJnZXRFZmZlY3RpdmVNZW1iZXJzaGlwIiwiRWZmZWN0aXZlTWVtYmVyc2hpcCIsIkxlYXZlIiwiSm9pblJ1bGUiLCJQdWJsaWMiLCJ2aWV3TGFicyIsImRpc3BhdGNoIiwiVmlld1VzZXJTZXR0aW5ncyIsImluaXRpYWxUYWJJZCIsIlVzZXJUYWIiLCJMYWJzIiwiaW52aXRlclNlY3Rpb24iLCJqb2luQnV0dG9ucyIsIktub3duTWVtYmVyc2hpcCIsIkpvaW4iLCJjcmVhdGVFbGVtZW50Iiwia2luZCIsIm9uQ2xpY2siLCJyb29tX2lkIiwiX3QiLCJJbnZpdGUiLCJpbnZpdGVTZW5kZXIiLCJnZXRNZW1iZXIiLCJnZXRVc2VySWQiLCJldmVudHMiLCJtZW1iZXIiLCJnZXRTZW5kZXIiLCJpbnZpdGVyIiwiY2xhc3NOYW1lIiwiZmFsbGJhY2tVc2VySWQiLCJzaXplIiwibmFtZSIsIkZyYWdtZW50IiwiaXNHdWVzdCIsImRpc2FibGVkIiwiYXZhdGFyUm93Iiwidmlld0F2YXRhck9uQ2xpY2siLCJCZXRhUGlsbCIsInRvb2x0aXBUaXRsZSIsImlzU3BhY2VSb29tIiwicm9vbU5hbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9yb29tcy9Sb29tUHJldmlld0NhcmQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyBGQywgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20sIEpvaW5SdWxlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgS25vd25NZW1iZXJzaGlwIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3R5cGVzXCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IGRlZmF1bHREaXNwYXRjaGVyIGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7IFVzZXJUYWIgfSBmcm9tIFwiLi4vZGlhbG9ncy9Vc2VyVGFiXCI7XG5pbXBvcnQgeyBFZmZlY3RpdmVNZW1iZXJzaGlwLCBnZXRFZmZlY3RpdmVNZW1iZXJzaGlwIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL21lbWJlcnNoaXBcIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaGVyIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZURpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHVzZVJvb21TdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VSb29tU3RhdGVcIjtcbmltcG9ydCB7IHVzZU15Um9vbU1lbWJlcnNoaXAgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlUm9vbU1lbWJlcnNcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgSW5saW5lU3Bpbm5lciBmcm9tIFwiLi4vZWxlbWVudHMvSW5saW5lU3Bpbm5lclwiO1xuaW1wb3J0IFJvb21OYW1lIGZyb20gXCIuLi9lbGVtZW50cy9Sb29tTmFtZVwiO1xuaW1wb3J0IFJvb21Ub3BpYyBmcm9tIFwiLi4vZWxlbWVudHMvUm9vbVRvcGljXCI7XG5pbXBvcnQgUm9vbUZhY2VQaWxlIGZyb20gXCIuLi9lbGVtZW50cy9Sb29tRmFjZVBpbGVcIjtcbmltcG9ydCBSb29tQXZhdGFyIGZyb20gXCIuLi9hdmF0YXJzL1Jvb21BdmF0YXJcIjtcbmltcG9ydCBNZW1iZXJBdmF0YXIgZnJvbSBcIi4uL2F2YXRhcnMvTWVtYmVyQXZhdGFyXCI7XG5pbXBvcnQgeyBCZXRhUGlsbCB9IGZyb20gXCIuLi9iZXRhL0JldGFDYXJkXCI7XG5pbXBvcnQgUm9vbUluZm9MaW5lIGZyb20gXCIuL1Jvb21JbmZvTGluZVwiO1xuaW1wb3J0IHsgaXNWaWRlb1Jvb20gYXMgY2FsY0lzVmlkZW9Sb29tIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3ZpZGVvLXJvb21zXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIHJvb206IFJvb207XG4gICAgb25Kb2luQnV0dG9uQ2xpY2tlZDogKCkgPT4gdm9pZDtcbiAgICBvblJlamVjdEJ1dHRvbkNsaWNrZWQ6ICgpID0+IHZvaWQ7XG59XG5cbi8vIFhYWCBUaGlzIGNvbXBvbmVudCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBzcGFjZXMgYW5kIHZpZGVvIHJvb21zLCB0aG91Z2hcbi8vIHN1cmVseSB3ZSBzaG91bGQgZXhwYW5kIGl0cyB1c2UgdG8gYWxsIHJvb21zIGZvciBjb25zaXN0ZW5jeT8gVGhpcyBhbHJlYWR5XG4vLyBoYW5kbGVzIHRoZSB0ZXh0IHJvb20gY2FzZSwgdGhvdWdoIHdlIHdvdWxkIG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIGlnbm9yaW5nXG4vLyBhbmQgdmlld2luZyBpbnZpdGUgcmVhc29ucyB0byBhY2hpZXZlIHBhcml0eSB3aXRoIHRoZSBkZWZhdWx0IGludml0ZSBzY3JlZW4uXG5jb25zdCBSb29tUHJldmlld0NhcmQ6IEZDPElQcm9wcz4gPSAoeyByb29tLCBvbkpvaW5CdXR0b25DbGlja2VkLCBvblJlamVjdEJ1dHRvbkNsaWNrZWQgfSkgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHVzZUNvbnRleHQoTWF0cml4Q2xpZW50Q29udGV4dCk7XG4gICAgY29uc3QgaXNWaWRlb1Jvb20gPSBjYWxjSXNWaWRlb1Jvb20ocm9vbSk7XG4gICAgY29uc3QgbXlNZW1iZXJzaGlwID0gdXNlTXlSb29tTWVtYmVyc2hpcChyb29tKTtcbiAgICB1c2VEaXNwYXRjaGVyKGRlZmF1bHREaXNwYXRjaGVyLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC5hY3Rpb24gPT09IEFjdGlvbi5Kb2luUm9vbUVycm9yICYmIHBheWxvYWQucm9vbUlkID09PSByb29tLnJvb21JZCkge1xuICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7IC8vIHN0b3AgdGhlIHNwaW5uZXIsIGpvaW4gZmFpbGVkXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIGNvbnN0IGpvaW5SdWxlID0gdXNlUm9vbVN0YXRlKHJvb20sIChzdGF0ZSkgPT4gc3RhdGUuZ2V0Sm9pblJ1bGUoKSk7XG4gICAgY29uc3QgY2Fubm90Sm9pbiA9XG4gICAgICAgIGdldEVmZmVjdGl2ZU1lbWJlcnNoaXAobXlNZW1iZXJzaGlwKSA9PT0gRWZmZWN0aXZlTWVtYmVyc2hpcC5MZWF2ZSAmJiBqb2luUnVsZSAhPT0gSm9pblJ1bGUuUHVibGljO1xuXG4gICAgY29uc3Qgdmlld0xhYnMgPSAoKTogdm9pZCA9PlxuICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaCh7XG4gICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5WaWV3VXNlclNldHRpbmdzLFxuICAgICAgICAgICAgaW5pdGlhbFRhYklkOiBVc2VyVGFiLkxhYnMsXG4gICAgICAgIH0pO1xuXG4gICAgbGV0IGludml0ZXJTZWN0aW9uOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBqb2luQnV0dG9uczogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKG15TWVtYmVyc2hpcCA9PT0gS25vd25NZW1iZXJzaGlwLkpvaW4pIHtcbiAgICAgICAgam9pbkJ1dHRvbnMgPSAoXG4gICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgIGtpbmQ9XCJkYW5nZXJfb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwibGVhdmVfcm9vbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vbV9pZDogcm9vbS5yb29tSWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGxlYXZlXCIpfVxuICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAobXlNZW1iZXJzaGlwID09PSBLbm93bk1lbWJlcnNoaXAuSW52aXRlKSB7XG4gICAgICAgIGNvbnN0IGludml0ZVNlbmRlciA9IHJvb20uZ2V0TWVtYmVyKGNsaS5nZXRVc2VySWQoKSEpPy5ldmVudHMubWVtYmVyPy5nZXRTZW5kZXIoKTtcblxuICAgICAgICBpZiAoaW52aXRlU2VuZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZpdGVyID0gcm9vbS5nZXRNZW1iZXIoaW52aXRlU2VuZGVyKTtcblxuICAgICAgICAgICAgaW52aXRlclNlY3Rpb24gPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tUHJldmlld0NhcmRfaW52aXRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8TWVtYmVyQXZhdGFyIG1lbWJlcj17aW52aXRlcn0gZmFsbGJhY2tVc2VySWQ9e2ludml0ZVNlbmRlcn0gc2l6ZT1cIjMycHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tUHJldmlld0NhcmRfaW52aXRlcl9uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvb218aW52aXRlc195b3VfdGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52aXRlcjogKCkgPT4gPHN0cm9uZz57aW52aXRlcj8ubmFtZSB8fCBpbnZpdGVTZW5kZXJ9PC9zdHJvbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpbnZpdGVyID8gPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tUHJldmlld0NhcmRfaW52aXRlcl9teGlkXCI+e2ludml0ZVNlbmRlcn08L2Rpdj4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBqb2luQnV0dG9ucyA9IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAga2luZD1cInByaW1hcnlfb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlamVjdEJ1dHRvbkNsaWNrZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtfdChcImFjdGlvbnxyZWplY3RcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSm9pbkJ1dHRvbkNsaWNrZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtfdChcImFjdGlvbnxhY2NlcHRcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgam9pbkJ1dHRvbnMgPSAoXG4gICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uSm9pbkJ1dHRvbkNsaWNrZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGkuaXNHdWVzdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIHdpbGwgYmUgc2hvd24gYSBtb2RhbCB0aGF0IHdvbid0IGZpcmUgYSByb29tIGpvaW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjYW5ub3RKb2lufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtfdChcImFjdGlvbnxqb2luXCIpfVxuICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChidXN5KSB7XG4gICAgICAgIGpvaW5CdXR0b25zID0gPElubGluZVNwaW5uZXIgLz47XG4gICAgfVxuXG4gICAgbGV0IGF2YXRhclJvdzogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKGlzVmlkZW9Sb29tKSB7XG4gICAgICAgIGF2YXRhclJvdyA9IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFJvb21BdmF0YXIgcm9vbT17cm9vbX0gc2l6ZT1cIjUwcHhcIiB2aWV3QXZhdGFyT25DbGljayAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUm9vbVByZXZpZXdDYXJkX3ZpZGVvXCIgLz5cbiAgICAgICAgICAgICAgICA8QmV0YVBpbGwgb25DbGljaz17dmlld0xhYnN9IHRvb2x0aXBUaXRsZT17X3QoXCJsYWJzfHZpZGVvX3Jvb21zX2JldGFcIil9IC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJvb20uaXNTcGFjZVJvb20oKSkge1xuICAgICAgICBhdmF0YXJSb3cgPSA8Um9vbUF2YXRhciByb29tPXtyb29tfSBzaXplPVwiODBweFwiIHZpZXdBdmF0YXJPbkNsaWNrIC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGF2YXRhclJvdyA9IDxSb29tQXZhdGFyIHJvb209e3Jvb219IHNpemU9XCI1MHB4XCIgdmlld0F2YXRhck9uQ2xpY2sgLz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tUHJldmlld0NhcmRcIj5cbiAgICAgICAgICAgIHtpbnZpdGVyU2VjdGlvbn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUm9vbVByZXZpZXdDYXJkX2F2YXRhclwiPnthdmF0YXJSb3d9PC9kaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXhfUm9vbVByZXZpZXdDYXJkX25hbWVcIj5cbiAgICAgICAgICAgICAgICA8Um9vbU5hbWUgcm9vbT17cm9vbX0gLz5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8Um9vbUluZm9MaW5lIHJvb209e3Jvb219IC8+XG4gICAgICAgICAgICA8Um9vbVRvcGljIHJvb209e3Jvb219IGNsYXNzTmFtZT1cIm14X1Jvb21QcmV2aWV3Q2FyZF90b3BpY1wiIC8+XG4gICAgICAgICAgICB7cm9vbS5nZXRKb2luUnVsZSgpID09PSBcInB1YmxpY1wiICYmIDxSb29tRmFjZVBpbGUgcm9vbT17cm9vbX0gLz59XG4gICAgICAgICAgICB7Y2Fubm90Sm9pbiA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21QcmV2aWV3Q2FyZF9ub3RpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAge190KFwicm9vbXxqb2luX2ZhaWxlZF9uZWVkc19pbnZpdGVcIiwgeyByb29tTmFtZTogcm9vbS5uYW1lIH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21QcmV2aWV3Q2FyZF9qb2luQnV0dG9uc1wiPntqb2luQnV0dG9uc308L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvb21QcmV2aWV3Q2FyZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FB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TUFBQ2UsSUFBSSxFQUFFQSxJQUFLO01BQUN1RCxJQUFJLEVBQUMsTUFBTTtNQUFDTSxpQkFBaUI7SUFBQSxDQUFFLENBQUM7RUFDeEU7RUFFQSxvQkFDSTNHLE1BQUEsQ0FBQStCLE9BQUEsQ0FBQXVELGFBQUE7SUFBS2EsU0FBUyxFQUFDO0VBQW9CLEdBQzlCakIsY0FBYyxlQUNmbEYsTUFBQSxDQUFBK0IsT0FBQSxDQUFBdUQsYUFBQTtJQUFLYSxTQUFTLEVBQUM7RUFBMkIsR0FBRU8sU0FBZSxDQUFDLGVBQzVEMUcsTUFBQSxDQUFBK0IsT0FBQSxDQUFBdUQsYUFBQTtJQUFJYSxTQUFTLEVBQUM7RUFBeUIsZ0JBQ25DbkcsTUFBQSxDQUFBK0IsT0FBQSxDQUFBdUQsYUFBQSxDQUFDckUsU0FBQSxDQUFBYyxPQUFRO0lBQUNlLElBQUksRUFBRUE7RUFBSyxDQUFFLENBQ3ZCLENBQUMsZUFDTDlDLE1BQUEsQ0FBQStCLE9BQUEsQ0FBQXVELGFBQUEsQ0FBQy9ELGFBQUEsQ0FBQVEsT0FBWTtJQUFDZSxJQUFJLEVBQUVBO0VBQUssQ0FBRSxDQUFDLGVBQzVCOUMsTUFBQSxDQUFBK0IsT0FBQSxDQUFBdUQsYUFBQSxDQUFDcEUsVUFBQSxDQUFBYSxPQUFTO0lBQUNlLElBQUksRUFBRUEsSUFBSztJQUFDcUQsU0FBUyxFQUFDO0VBQTBCLENBQUUsQ0FBQyxFQUM3RHJELElBQUksQ0FBQ3VCLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxpQkFBSXJFLE1BQUEsQ0FBQStCLE9BQUEsQ0FBQXVELGFBQUEsQ0FBQ25FLGFBQUEsQ0FBQVksT0FBWTtJQUFDZSxJQUFJLEVBQUVBO0VBQUssQ0FBRSxDQUFDLEVBQy9Ed0IsVUFBVSxnQkFDUHRFLE1BQUEsQ0FBQStCLE9BQUEsQ0FBQXVELGFBQUE7SUFBS2EsU0FBUyxFQUFDO0VBQTJCLEdBQ3JDLElBQUFULG1CQUFFLEVBQUMsK0JBQStCLEVBQUU7SUFBRXFCLFFBQVEsRUFBRWpFLElBQUksQ0FBQ3dEO0VBQUssQ0FBQyxDQUMzRCxDQUFDLEdBQ04sSUFBSSxlQUNSdEcsTUFBQSxDQUFBK0IsT0FBQSxDQUFBdUQsYUFBQTtJQUFLYSxTQUFTLEVBQUM7RUFBZ0MsR0FBRWhCLFdBQWlCLENBQ2pFLENBQUM7QUFFZCxDQUFDO0FBQUMsSUFBQTZCLFFBQUEsR0FBQUMsT0FBQSxDQUFBbEYsT0FBQSxHQUVhYyxlQUFlIiwiaWdub3JlTGlzdCI6W119