matrix-react-sdk
Version:
SDK for matrix.org using React
114 lines (111 loc) • 20.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.awaitRoomDownSync = awaitRoomDownSync;
exports.upgradeRoom = upgradeRoom;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _types = require("matrix-js-sdk/src/types");
var _logger = require("matrix-js-sdk/src/logger");
var _RoomInvite = require("../RoomInvite");
var _Modal = _interopRequireDefault(require("../Modal"));
var _languageHandler = require("../languageHandler");
var _ErrorDialog = _interopRequireDefault(require("../components/views/dialogs/ErrorDialog"));
var _SpaceStore = _interopRequireDefault(require("../stores/spaces/SpaceStore"));
var _Spinner = _interopRequireDefault(require("../components/views/elements/Spinner"));
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.
*/
async function awaitRoomDownSync(cli, roomId) {
const room = cli.getRoom(roomId);
if (room) return room; // already have the room
return new Promise(resolve => {
// We have to wait for the js-sdk to give us the room back so
// we can more effectively abuse the MultiInviter behaviour
// which heavily relies on the Room object being available.
const checkForRoomFn = room => {
if (room.roomId !== roomId) return;
resolve(room);
cli.off(_matrix.ClientEvent.Room, checkForRoomFn);
};
cli.on(_matrix.ClientEvent.Room, checkForRoomFn);
});
}
async function upgradeRoom(room, targetVersion, inviteUsers = false, handleError = true, updateSpaces = true, awaitRoom = false, progressCallback) {
const cli = room.client;
let spinnerModal;
if (!progressCallback) {
spinnerModal = _Modal.default.createDialog(_Spinner.default, undefined, "mx_Dialog_spinner");
}
let toInvite = [];
if (inviteUsers) {
toInvite = [...room.getMembersWithMembership(_types.KnownMembership.Join), ...room.getMembersWithMembership(_types.KnownMembership.Invite)].map(m => m.userId).filter(m => m !== cli.getUserId());
}
let parentsToRelink = [];
if (updateSpaces) {
parentsToRelink = Array.from(_SpaceStore.default.instance.getKnownParents(room.roomId)).map(roomId => cli.getRoom(roomId)).filter(parent => parent?.currentState.maySendStateEvent(_matrix.EventType.SpaceChild, cli.getUserId()));
}
const progress = {
roomUpgraded: false,
roomSynced: awaitRoom || inviteUsers ? false : undefined,
inviteUsersProgress: inviteUsers ? 0 : undefined,
inviteUsersTotal: toInvite.length,
updateSpacesProgress: updateSpaces ? 0 : undefined,
updateSpacesTotal: parentsToRelink.length
};
progressCallback?.(progress);
let newRoomId;
try {
({
replacement_room: newRoomId
} = await cli.upgradeRoom(room.roomId, targetVersion));
} catch (e) {
if (!handleError) throw e;
_logger.logger.error(e);
_Modal.default.createDialog(_ErrorDialog.default, {
title: (0, _languageHandler._t)("room|upgrade_error_title"),
description: (0, _languageHandler._t)("room|upgrade_error_description")
});
throw e;
}
progress.roomUpgraded = true;
progressCallback?.(progress);
if (awaitRoom || inviteUsers) {
await awaitRoomDownSync(room.client, newRoomId);
progress.roomSynced = true;
progressCallback?.(progress);
}
if (toInvite.length > 0) {
// Errors are handled internally to this function
await (0, _RoomInvite.inviteUsersToRoom)(cli, newRoomId, toInvite, () => {
progress.inviteUsersProgress++;
progressCallback?.(progress);
});
}
if (parentsToRelink.length > 0) {
try {
for (const parent of parentsToRelink) {
const currentEv = parent.currentState.getStateEvents(_matrix.EventType.SpaceChild, room.roomId);
await cli.sendStateEvent(parent.roomId, _matrix.EventType.SpaceChild, _objectSpread(_objectSpread({}, currentEv?.getContent() || {}), {}, {
// copy existing attributes like suggested
via: [cli.getDomain()]
}), newRoomId);
await cli.sendStateEvent(parent.roomId, _matrix.EventType.SpaceChild, {}, room.roomId);
progress.updateSpacesProgress++;
progressCallback?.(progress);
}
} catch (e) {
// These errors are not critical to the room upgrade itself
_logger.logger.warn("Failed to update parent spaces during room upgrade", e);
}
}
spinnerModal?.close();
return newRoomId;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl90eXBlcyIsIl9sb2dnZXIiLCJfUm9vbUludml0ZSIsIl9Nb2RhbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0Vycm9yRGlhbG9nIiwiX1NwYWNlU3RvcmUiLCJfU3Bpbm5lciIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImF3YWl0Um9vbURvd25TeW5jIiwiY2xpIiwicm9vbUlkIiwicm9vbSIsImdldFJvb20iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoZWNrRm9yUm9vbUZuIiwib2ZmIiwiQ2xpZW50RXZlbnQiLCJSb29tIiwib24iLCJ1cGdyYWRlUm9vbSIsInRhcmdldFZlcnNpb24iLCJpbnZpdGVVc2VycyIsImhhbmRsZUVycm9yIiwidXBkYXRlU3BhY2VzIiwiYXdhaXRSb29tIiwicHJvZ3Jlc3NDYWxsYmFjayIsImNsaWVudCIsInNwaW5uZXJNb2RhbCIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiU3Bpbm5lciIsInVuZGVmaW5lZCIsInRvSW52aXRlIiwiZ2V0TWVtYmVyc1dpdGhNZW1iZXJzaGlwIiwiS25vd25NZW1iZXJzaGlwIiwiSm9pbiIsIkludml0ZSIsIm1hcCIsIm0iLCJ1c2VySWQiLCJnZXRVc2VySWQiLCJwYXJlbnRzVG9SZWxpbmsiLCJBcnJheSIsImZyb20iLCJTcGFjZVN0b3JlIiwiaW5zdGFuY2UiLCJnZXRLbm93blBhcmVudHMiLCJwYXJlbnQiLCJjdXJyZW50U3RhdGUiLCJtYXlTZW5kU3RhdGVFdmVudCIsIkV2ZW50VHlwZSIsIlNwYWNlQ2hpbGQiLCJwcm9ncmVzcyIsInJvb21VcGdyYWRlZCIsInJvb21TeW5jZWQiLCJpbnZpdGVVc2Vyc1Byb2dyZXNzIiwiaW52aXRlVXNlcnNUb3RhbCIsInVwZGF0ZVNwYWNlc1Byb2dyZXNzIiwidXBkYXRlU3BhY2VzVG90YWwiLCJuZXdSb29tSWQiLCJyZXBsYWNlbWVudF9yb29tIiwibG9nZ2VyIiwiZXJyb3IiLCJFcnJvckRpYWxvZyIsInRpdGxlIiwiX3QiLCJkZXNjcmlwdGlvbiIsImludml0ZVVzZXJzVG9Sb29tIiwiY3VycmVudEV2IiwiZ2V0U3RhdGVFdmVudHMiLCJzZW5kU3RhdGVFdmVudCIsImdldENvbnRlbnQiLCJ2aWEiLCJnZXREb21haW4iLCJ3YXJuIiwiY2xvc2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvUm9vbVVwZ3JhZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgUm9vbSwgRXZlbnRUeXBlLCBDbGllbnRFdmVudCwgTWF0cml4Q2xpZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgS25vd25NZW1iZXJzaGlwIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IGludml0ZVVzZXJzVG9Sb29tIH0gZnJvbSBcIi4uL1Jvb21JbnZpdGVcIjtcbmltcG9ydCBNb2RhbCwgeyBJSGFuZGxlIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBFcnJvckRpYWxvZyBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL0Vycm9yRGlhbG9nXCI7XG5pbXBvcnQgU3BhY2VTdG9yZSBmcm9tIFwiLi4vc3RvcmVzL3NwYWNlcy9TcGFjZVN0b3JlXCI7XG5pbXBvcnQgU3Bpbm5lciBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9lbGVtZW50cy9TcGlubmVyXCI7XG5cbmludGVyZmFjZSBJUHJvZ3Jlc3Mge1xuICAgIHJvb21VcGdyYWRlZDogYm9vbGVhbjtcbiAgICByb29tU3luY2VkPzogYm9vbGVhbjtcbiAgICBpbnZpdGVVc2Vyc1Byb2dyZXNzPzogbnVtYmVyO1xuICAgIGludml0ZVVzZXJzVG90YWw6IG51bWJlcjtcbiAgICB1cGRhdGVTcGFjZXNQcm9ncmVzcz86IG51bWJlcjtcbiAgICB1cGRhdGVTcGFjZXNUb3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRSb29tRG93blN5bmMoY2xpOiBNYXRyaXhDbGllbnQsIHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxSb29tPiB7XG4gICAgY29uc3Qgcm9vbSA9IGNsaS5nZXRSb29tKHJvb21JZCk7XG4gICAgaWYgKHJvb20pIHJldHVybiByb29tOyAvLyBhbHJlYWR5IGhhdmUgdGhlIHJvb21cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxSb29tPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBqcy1zZGsgdG8gZ2l2ZSB1cyB0aGUgcm9vbSBiYWNrIHNvXG4gICAgICAgIC8vIHdlIGNhbiBtb3JlIGVmZmVjdGl2ZWx5IGFidXNlIHRoZSBNdWx0aUludml0ZXIgYmVoYXZpb3VyXG4gICAgICAgIC8vIHdoaWNoIGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBSb29tIG9iamVjdCBiZWluZyBhdmFpbGFibGUuXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yUm9vbUZuID0gKHJvb206IFJvb20pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmIChyb29tLnJvb21JZCAhPT0gcm9vbUlkKSByZXR1cm47XG4gICAgICAgICAgICByZXNvbHZlKHJvb20pO1xuICAgICAgICAgICAgY2xpLm9mZihDbGllbnRFdmVudC5Sb29tLCBjaGVja0ZvclJvb21Gbik7XG4gICAgICAgIH07XG4gICAgICAgIGNsaS5vbihDbGllbnRFdmVudC5Sb29tLCBjaGVja0ZvclJvb21Gbik7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGdyYWRlUm9vbShcbiAgICByb29tOiBSb29tLFxuICAgIHRhcmdldFZlcnNpb246IHN0cmluZyxcbiAgICBpbnZpdGVVc2VycyA9IGZhbHNlLFxuICAgIGhhbmRsZUVycm9yID0gdHJ1ZSxcbiAgICB1cGRhdGVTcGFjZXMgPSB0cnVlLFxuICAgIGF3YWl0Um9vbSA9IGZhbHNlLFxuICAgIHByb2dyZXNzQ2FsbGJhY2s/OiAocHJvZ3Jlc3M6IElQcm9ncmVzcykgPT4gdm9pZCxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY2xpID0gcm9vbS5jbGllbnQ7XG4gICAgbGV0IHNwaW5uZXJNb2RhbDogSUhhbmRsZTxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGlmICghcHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgICAgICBzcGlubmVyTW9kYWwgPSBNb2RhbC5jcmVhdGVEaWFsb2coU3Bpbm5lciwgdW5kZWZpbmVkLCBcIm14X0RpYWxvZ19zcGlubmVyXCIpO1xuICAgIH1cblxuICAgIGxldCB0b0ludml0ZTogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoaW52aXRlVXNlcnMpIHtcbiAgICAgICAgdG9JbnZpdGUgPSBbXG4gICAgICAgICAgICAuLi5yb29tLmdldE1lbWJlcnNXaXRoTWVtYmVyc2hpcChLbm93bk1lbWJlcnNoaXAuSm9pbiksXG4gICAgICAgICAgICAuLi5yb29tLmdldE1lbWJlcnNXaXRoTWVtYmVyc2hpcChLbm93bk1lbWJlcnNoaXAuSW52aXRlKSxcbiAgICAgICAgXVxuICAgICAgICAgICAgLm1hcCgobSkgPT4gbS51c2VySWQpXG4gICAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtICE9PSBjbGkuZ2V0VXNlcklkKCkpO1xuICAgIH1cblxuICAgIGxldCBwYXJlbnRzVG9SZWxpbms6IFJvb21bXSA9IFtdO1xuICAgIGlmICh1cGRhdGVTcGFjZXMpIHtcbiAgICAgICAgcGFyZW50c1RvUmVsaW5rID0gQXJyYXkuZnJvbShTcGFjZVN0b3JlLmluc3RhbmNlLmdldEtub3duUGFyZW50cyhyb29tLnJvb21JZCkpXG4gICAgICAgICAgICAubWFwKChyb29tSWQpID0+IGNsaS5nZXRSb29tKHJvb21JZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChwYXJlbnQpID0+XG4gICAgICAgICAgICAgICAgcGFyZW50Py5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlNwYWNlQ2hpbGQsIGNsaS5nZXRVc2VySWQoKSEpLFxuICAgICAgICAgICAgKSBhcyBSb29tW107XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3M6IElQcm9ncmVzcyA9IHtcbiAgICAgICAgcm9vbVVwZ3JhZGVkOiBmYWxzZSxcbiAgICAgICAgcm9vbVN5bmNlZDogYXdhaXRSb29tIHx8IGludml0ZVVzZXJzID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgICAgIGludml0ZVVzZXJzUHJvZ3Jlc3M6IGludml0ZVVzZXJzID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW52aXRlVXNlcnNUb3RhbDogdG9JbnZpdGUubGVuZ3RoLFxuICAgICAgICB1cGRhdGVTcGFjZXNQcm9ncmVzczogdXBkYXRlU3BhY2VzID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXBkYXRlU3BhY2VzVG90YWw6IHBhcmVudHNUb1JlbGluay5sZW5ndGgsXG4gICAgfTtcbiAgICBwcm9ncmVzc0NhbGxiYWNrPy4ocHJvZ3Jlc3MpO1xuXG4gICAgbGV0IG5ld1Jvb21JZDogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICAgICh7IHJlcGxhY2VtZW50X3Jvb206IG5ld1Jvb21JZCB9ID0gYXdhaXQgY2xpLnVwZ3JhZGVSb29tKHJvb20ucm9vbUlkLCB0YXJnZXRWZXJzaW9uKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIWhhbmRsZUVycm9yKSB0aHJvdyBlO1xuICAgICAgICBsb2dnZXIuZXJyb3IoZSk7XG5cbiAgICAgICAgTW9kYWwuY3JlYXRlRGlhbG9nKEVycm9yRGlhbG9nLCB7XG4gICAgICAgICAgICB0aXRsZTogX3QoXCJyb29tfHVwZ3JhZGVfZXJyb3JfdGl0bGVcIiksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogX3QoXCJyb29tfHVwZ3JhZGVfZXJyb3JfZGVzY3JpcHRpb25cIiksXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHByb2dyZXNzLnJvb21VcGdyYWRlZCA9IHRydWU7XG4gICAgcHJvZ3Jlc3NDYWxsYmFjaz8uKHByb2dyZXNzKTtcblxuICAgIGlmIChhd2FpdFJvb20gfHwgaW52aXRlVXNlcnMpIHtcbiAgICAgICAgYXdhaXQgYXdhaXRSb29tRG93blN5bmMocm9vbS5jbGllbnQsIG5ld1Jvb21JZCk7XG4gICAgICAgIHByb2dyZXNzLnJvb21TeW5jZWQgPSB0cnVlO1xuICAgICAgICBwcm9ncmVzc0NhbGxiYWNrPy4ocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmICh0b0ludml0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEVycm9ycyBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5IHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgYXdhaXQgaW52aXRlVXNlcnNUb1Jvb20oY2xpLCBuZXdSb29tSWQsIHRvSW52aXRlLCAoKSA9PiB7XG4gICAgICAgICAgICBwcm9ncmVzcy5pbnZpdGVVc2Vyc1Byb2dyZXNzISsrO1xuICAgICAgICAgICAgcHJvZ3Jlc3NDYWxsYmFjaz8uKHByb2dyZXNzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudHNUb1JlbGluay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRzVG9SZWxpbmspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RXYgPSBwYXJlbnQuY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5TcGFjZUNoaWxkLCByb29tLnJvb21JZCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xpLnNlbmRTdGF0ZUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuU3BhY2VDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGN1cnJlbnRFdj8uZ2V0Q29udGVudCgpIHx8IHt9KSwgLy8gY29weSBleGlzdGluZyBhdHRyaWJ1dGVzIGxpa2Ugc3VnZ2VzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWE6IFtjbGkuZ2V0RG9tYWluKCkhXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3Um9vbUlkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xpLnNlbmRTdGF0ZUV2ZW50KHBhcmVudC5yb29tSWQsIEV2ZW50VHlwZS5TcGFjZUNoaWxkLCB7fSwgcm9vbS5yb29tSWQpO1xuXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3MudXBkYXRlU3BhY2VzUHJvZ3Jlc3MhKys7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NDYWxsYmFjaz8uKHByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgZXJyb3JzIGFyZSBub3QgY3JpdGljYWwgdG8gdGhlIHJvb20gdXBncmFkZSBpdHNlbGZcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIHVwZGF0ZSBwYXJlbnQgc3BhY2VzIGR1cmluZyByb29tIHVwZ3JhZGVcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzcGlubmVyTW9kYWw/LmNsb3NlKCk7XG4gICAgcmV0dXJuIG5ld1Jvb21JZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQUYsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUwsT0FBQTtBQUEyRCxTQUFBVSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFB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