matrix-react-sdk
Version:
SDK for matrix.org using React
121 lines (114 loc) • 20.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _logger = require("matrix-js-sdk/src/logger");
var _actionCreators = require("./actionCreators");
var _Modal = _interopRequireDefault(require("../Modal"));
var Rooms = _interopRequireWildcard(require("../Rooms"));
var _languageHandler = require("../languageHandler");
var _RoomListStore = _interopRequireDefault(require("../stores/room-list/RoomListStore"));
var _models = require("../stores/room-list/algorithms/models");
var _models2 = require("../stores/room-list/models");
var _ErrorDialog = _interopRequireDefault(require("../components/views/dialogs/ErrorDialog"));
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 2020 The Matrix.org Foundation C.I.C.
Copyright 2018 New Vector Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
class RoomListActions {
/**
* Creates an action thunk that will do an asynchronous request to
* tag room.
*
* @param {MatrixClient} matrixClient the matrix client to set the
* account data on.
* @param {Room} room the room to tag.
* @param {string} oldTag the tag to remove (unless oldTag ==== newTag)
* @param {string} newTag the tag with which to tag the room.
* @param {?number} oldIndex the previous position of the room in the
* list of rooms.
* @param {?number} newIndex the new position of the room in the list
* of rooms.
* @returns {AsyncActionPayload} an async action payload
* @see asyncAction
*/
static tagRoom(matrixClient, room, oldTag, newTag, newIndex) {
let metaData;
// Is the tag ordered manually?
const store = _RoomListStore.default.instance;
if (newTag && store.getTagSorting(newTag) === _models.SortAlgorithm.Manual) {
const newList = [...store.orderedLists[newTag]];
newList.sort((a, b) => a.tags[newTag].order - b.tags[newTag].order);
const indexBefore = newIndex - 1;
const indexAfter = newIndex;
const prevOrder = indexBefore <= 0 ? 0 : newList[indexBefore].tags[newTag].order;
const nextOrder = indexAfter >= newList.length ? 1 : newList[indexAfter].tags[newTag].order;
metaData = {
order: (prevOrder + nextOrder) / 2.0
};
}
return (0, _actionCreators.asyncAction)("RoomListActions.tagRoom", () => {
const promises = [];
const roomId = room.roomId;
// Evil hack to get DMs behaving
if (oldTag === undefined && newTag === _models2.DefaultTagID.DM || oldTag === _models2.DefaultTagID.DM && newTag === undefined) {
return Rooms.guessAndSetDMRoom(room, newTag === _models2.DefaultTagID.DM).catch(err => {
_logger.logger.error("Failed to set DM tag " + err);
_Modal.default.createDialog(_ErrorDialog.default, {
title: (0, _languageHandler._t)("room_list|failed_set_dm_tag"),
description: err && err.message ? err.message : (0, _languageHandler._t)("invite|failed_generic")
});
});
}
const hasChangedSubLists = oldTag !== newTag;
// More evilness: We will still be dealing with moving to favourites/low prio,
// but we avoid ever doing a request with TAG_DM.
//
// if we moved lists, remove the old tag
if (oldTag && oldTag !== _models2.DefaultTagID.DM && hasChangedSubLists) {
const promiseToDelete = matrixClient.deleteRoomTag(roomId, oldTag).catch(function (err) {
_logger.logger.error("Failed to remove tag " + oldTag + " from room: " + err);
_Modal.default.createDialog(_ErrorDialog.default, {
title: (0, _languageHandler._t)("room_list|failed_remove_tag", {
tagName: oldTag
}),
description: err && err.message ? err.message : (0, _languageHandler._t)("invite|failed_generic")
});
});
promises.push(promiseToDelete);
}
// if we moved lists or the ordering changed, add the new tag
if (newTag && newTag !== _models2.DefaultTagID.DM && (hasChangedSubLists || metaData)) {
const promiseToAdd = matrixClient.setRoomTag(roomId, newTag, metaData).catch(function (err) {
_logger.logger.error("Failed to add tag " + newTag + " to room: " + err);
_Modal.default.createDialog(_ErrorDialog.default, {
title: (0, _languageHandler._t)("room_list|failed_add_tag", {
tagName: newTag
}),
description: err && err.message ? err.message : (0, _languageHandler._t)("invite|failed_generic")
});
throw err;
});
promises.push(promiseToAdd);
}
return Promise.all(promises);
}, () => {
// For an optimistic update
return {
room,
oldTag,
newTag,
metaData
};
});
}
}
exports.default = RoomListActions;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9hY3Rpb25DcmVhdG9ycyIsIl9Nb2RhbCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJSb29tcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Sb29tTGlzdFN0b3JlIiwiX21vZGVscyIsIl9tb2RlbHMyIiwiX0Vycm9yRGlhbG9nIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUm9vbUxpc3RBY3Rpb25zIiwidGFnUm9vbSIsIm1hdHJpeENsaWVudCIsInJvb20iLCJvbGRUYWciLCJuZXdUYWciLCJuZXdJbmRleCIsIm1ldGFEYXRhIiwic3RvcmUiLCJSb29tTGlzdFN0b3JlIiwiaW5zdGFuY2UiLCJnZXRUYWdTb3J0aW5nIiwiU29ydEFsZ29yaXRobSIsIk1hbnVhbCIsIm5ld0xpc3QiLCJvcmRlcmVkTGlzdHMiLCJzb3J0IiwiYiIsInRhZ3MiLCJvcmRlciIsImluZGV4QmVmb3JlIiwiaW5kZXhBZnRlciIsInByZXZPcmRlciIsIm5leHRPcmRlciIsImxlbmd0aCIsImFzeW5jQWN0aW9uIiwicHJvbWlzZXMiLCJyb29tSWQiLCJ1bmRlZmluZWQiLCJEZWZhdWx0VGFnSUQiLCJETSIsImd1ZXNzQW5kU2V0RE1Sb29tIiwiY2F0Y2giLCJlcnIiLCJsb2dnZXIiLCJlcnJvciIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiRXJyb3JEaWFsb2ciLCJ0aXRsZSIsIl90IiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiaGFzQ2hhbmdlZFN1Ykxpc3RzIiwicHJvbWlzZVRvRGVsZXRlIiwiZGVsZXRlUm9vbVRhZyIsInRhZ05hbWUiLCJwdXNoIiwicHJvbWlzZVRvQWRkIiwic2V0Um9vbVRhZyIsIlByb21pc2UiLCJhbGwiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvUm9vbUxpc3RBY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOCBOZXcgVmVjdG9yIEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBNYXRyaXhDbGllbnQsIFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IGFzeW5jQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uQ3JlYXRvcnNcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCAqIGFzIFJvb21zIGZyb20gXCIuLi9Sb29tc1wiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBBc3luY0FjdGlvblBheWxvYWQgfSBmcm9tIFwiLi4vZGlzcGF0Y2hlci9wYXlsb2Fkc1wiO1xuaW1wb3J0IFJvb21MaXN0U3RvcmUgZnJvbSBcIi4uL3N0b3Jlcy9yb29tLWxpc3QvUm9vbUxpc3RTdG9yZVwiO1xuaW1wb3J0IHsgU29ydEFsZ29yaXRobSB9IGZyb20gXCIuLi9zdG9yZXMvcm9vbS1saXN0L2FsZ29yaXRobXMvbW9kZWxzXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGFnSUQsIFRhZ0lEIH0gZnJvbSBcIi4uL3N0b3Jlcy9yb29tLWxpc3QvbW9kZWxzXCI7XG5pbXBvcnQgRXJyb3JEaWFsb2cgZnJvbSBcIi4uL2NvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9FcnJvckRpYWxvZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tTGlzdEFjdGlvbnMge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYWN0aW9uIHRodW5rIHRoYXQgd2lsbCBkbyBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB0b1xuICAgICAqIHRhZyByb29tLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtNYXRyaXhDbGllbnR9IG1hdHJpeENsaWVudCB0aGUgbWF0cml4IGNsaWVudCB0byBzZXQgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50IGRhdGEgb24uXG4gICAgICogQHBhcmFtIHtSb29tfSByb29tIHRoZSByb29tIHRvIHRhZy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkVGFnIHRoZSB0YWcgdG8gcmVtb3ZlICh1bmxlc3Mgb2xkVGFnID09PT0gbmV3VGFnKVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdUYWcgdGhlIHRhZyB3aXRoIHdoaWNoIHRvIHRhZyB0aGUgcm9vbS5cbiAgICAgKiBAcGFyYW0gez9udW1iZXJ9IG9sZEluZGV4IHRoZSBwcmV2aW91cyBwb3NpdGlvbiBvZiB0aGUgcm9vbSBpbiB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2Ygcm9vbXMuXG4gICAgICogQHBhcmFtIHs/bnVtYmVyfSBuZXdJbmRleCB0aGUgbmV3IHBvc2l0aW9uIG9mIHRoZSByb29tIGluIHRoZSBsaXN0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiByb29tcy5cbiAgICAgKiBAcmV0dXJucyB7QXN5bmNBY3Rpb25QYXlsb2FkfSBhbiBhc3luYyBhY3Rpb24gcGF5bG9hZFxuICAgICAqIEBzZWUgYXN5bmNBY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHRhZ1Jvb20oXG4gICAgICAgIG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50LFxuICAgICAgICByb29tOiBSb29tLFxuICAgICAgICBvbGRUYWc6IFRhZ0lEIHwgbnVsbCxcbiAgICAgICAgbmV3VGFnOiBUYWdJRCB8IG51bGwsXG4gICAgICAgIG5ld0luZGV4OiBudW1iZXIsXG4gICAgKTogQXN5bmNBY3Rpb25QYXlsb2FkIHtcbiAgICAgICAgbGV0IG1ldGFEYXRhOiBQYXJhbWV0ZXJzPE1hdHJpeENsaWVudFtcInNldFJvb21UYWdcIl0+WzJdIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIElzIHRoZSB0YWcgb3JkZXJlZCBtYW51YWxseT9cbiAgICAgICAgY29uc3Qgc3RvcmUgPSBSb29tTGlzdFN0b3JlLmluc3RhbmNlO1xuICAgICAgICBpZiAobmV3VGFnICYmIHN0b3JlLmdldFRhZ1NvcnRpbmcobmV3VGFnKSA9PT0gU29ydEFsZ29yaXRobS5NYW51YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4uc3RvcmUub3JkZXJlZExpc3RzW25ld1RhZ11dO1xuXG4gICAgICAgICAgICBuZXdMaXN0LnNvcnQoKGEsIGIpID0+IGEudGFnc1tuZXdUYWddLm9yZGVyIC0gYi50YWdzW25ld1RhZ10ub3JkZXIpO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleEJlZm9yZSA9IG5ld0luZGV4IC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QWZ0ZXIgPSBuZXdJbmRleDtcblxuICAgICAgICAgICAgY29uc3QgcHJldk9yZGVyID0gaW5kZXhCZWZvcmUgPD0gMCA/IDAgOiBuZXdMaXN0W2luZGV4QmVmb3JlXS50YWdzW25ld1RhZ10ub3JkZXI7XG4gICAgICAgICAgICBjb25zdCBuZXh0T3JkZXIgPSBpbmRleEFmdGVyID49IG5ld0xpc3QubGVuZ3RoID8gMSA6IG5ld0xpc3RbaW5kZXhBZnRlcl0udGFnc1tuZXdUYWddLm9yZGVyO1xuXG4gICAgICAgICAgICBtZXRhRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBvcmRlcjogKHByZXZPcmRlciArIG5leHRPcmRlcikgLyAyLjAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jQWN0aW9uKFxuICAgICAgICAgICAgXCJSb29tTGlzdEFjdGlvbnMudGFnUm9vbVwiLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb21JZCA9IHJvb20ucm9vbUlkO1xuXG4gICAgICAgICAgICAgICAgLy8gRXZpbCBoYWNrIHRvIGdldCBETXMgYmVoYXZpbmdcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChvbGRUYWcgPT09IHVuZGVmaW5lZCAmJiBuZXdUYWcgPT09IERlZmF1bHRUYWdJRC5ETSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKG9sZFRhZyA9PT0gRGVmYXVsdFRhZ0lELkRNICYmIG5ld1RhZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUm9vbXMuZ3Vlc3NBbmRTZXRETVJvb20ocm9vbSwgbmV3VGFnID09PSBEZWZhdWx0VGFnSUQuRE0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkZhaWxlZCB0byBzZXQgRE0gdGFnIFwiICsgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhFcnJvckRpYWxvZywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdChcInJvb21fbGlzdHxmYWlsZWRfc2V0X2RtX3RhZ1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBfdChcImludml0ZXxmYWlsZWRfZ2VuZXJpY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNDaGFuZ2VkU3ViTGlzdHMgPSBvbGRUYWcgIT09IG5ld1RhZztcblxuICAgICAgICAgICAgICAgIC8vIE1vcmUgZXZpbG5lc3M6IFdlIHdpbGwgc3RpbGwgYmUgZGVhbGluZyB3aXRoIG1vdmluZyB0byBmYXZvdXJpdGVzL2xvdyBwcmlvLFxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBhdm9pZCBldmVyIGRvaW5nIGEgcmVxdWVzdCB3aXRoIFRBR19ETS5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIG1vdmVkIGxpc3RzLCByZW1vdmUgdGhlIG9sZCB0YWdcbiAgICAgICAgICAgICAgICBpZiAob2xkVGFnICYmIG9sZFRhZyAhPT0gRGVmYXVsdFRhZ0lELkRNICYmIGhhc0NoYW5nZWRTdWJMaXN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlVG9EZWxldGUgPSBtYXRyaXhDbGllbnQuZGVsZXRlUm9vbVRhZyhyb29tSWQsIG9sZFRhZykuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSB0YWcgXCIgKyBvbGRUYWcgKyBcIiBmcm9tIHJvb206IFwiICsgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhFcnJvckRpYWxvZywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdChcInJvb21fbGlzdHxmYWlsZWRfcmVtb3ZlX3RhZ1wiLCB7IHRhZ05hbWU6IG9sZFRhZyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBfdChcImludml0ZXxmYWlsZWRfZ2VuZXJpY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2VUb0RlbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgbW92ZWQgbGlzdHMgb3IgdGhlIG9yZGVyaW5nIGNoYW5nZWQsIGFkZCB0aGUgbmV3IHRhZ1xuICAgICAgICAgICAgICAgIGlmIChuZXdUYWcgJiYgbmV3VGFnICE9PSBEZWZhdWx0VGFnSUQuRE0gJiYgKGhhc0NoYW5nZWRTdWJMaXN0cyB8fCBtZXRhRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZVRvQWRkID0gbWF0cml4Q2xpZW50LnNldFJvb21UYWcocm9vbUlkLCBuZXdUYWcsIG1ldGFEYXRhKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJGYWlsZWQgdG8gYWRkIHRhZyBcIiArIG5ld1RhZyArIFwiIHRvIHJvb206IFwiICsgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhFcnJvckRpYWxvZywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdChcInJvb21fbGlzdHxmYWlsZWRfYWRkX3RhZ1wiLCB7IHRhZ05hbWU6IG5ld1RhZyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBfdChcImludml0ZXxmYWlsZWRfZ2VuZXJpY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZVRvQWRkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgYW4gb3B0aW1pc3RpYyB1cGRhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByb29tLFxuICAgICAgICAgICAgICAgICAgICBvbGRUYWcsXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZyxcbiAgICAgICAgICAgICAgICAgICAgbWV0YURhdGEsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBVUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQU4sT0FBQTtBQUVBLElBQUFPLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUFrRSxTQUFBVyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FB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L0IsTUFBTSxHQUFHLGNBQWMsR0FBRzZCLEdBQUcsQ0FBQztVQUNyRUcsY0FBSyxDQUFDQyxZQUFZLENBQUNDLG9CQUFXLEVBQUU7WUFDNUJDLEtBQUssRUFBRSxJQUFBQyxtQkFBRSxFQUFDLDZCQUE2QixFQUFFO2NBQUVNLE9BQU8sRUFBRTFDO1lBQU8sQ0FBQyxDQUFDO1lBQzdEcUMsV0FBVyxFQUFFUixHQUFHLElBQUlBLEdBQUcsQ0FBQ1MsT0FBTyxHQUFHVCxHQUFHLENBQUNTLE9BQU8sR0FBRyxJQUFBRixtQkFBRSxFQUFDLHVCQUF1QjtVQUM5RSxDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRmQsUUFBUSxDQUFDcUIsSUFBSSxDQUFDSCxlQUFlLENBQUM7TUFDbEM7O01BRUE7TUFDQSxJQUFJdkMsTUFBTSxJQUFJQSxNQUFNLEtBQUt3QixxQkFBWSxDQUFDQyxFQUFFLEtBQUthLGtCQUFrQixJQUFJcEMsUUFBUSxDQUFDLEVBQUU7UUFDMUUsTUFBTXlDLFlBQVksR0FBRzlDLFlBQVksQ0FBQytDLFVBQVUsQ0FBQ3RCLE1BQU0sRUFBRXRCLE1BQU0sRUFBRUUsUUFBUSxDQUFDLENBQUN5QixLQUFLLENBQUMsVUFBVUMsR0FBRyxFQUFFO1VBQ3hGQyxjQUFNLENBQUNDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRzlCLE1BQU0sR0FBRyxZQUFZLEdBQUc0QixHQUFHLENBQUM7VUFDaEVHLGNBQUssQ0FBQ0MsWUFBWSxDQUFDQyxvQkFBVyxFQUFFO1lBQzVCQyxLQUFLLEVBQUUsSUFBQUMsbUJBQUUsRUFBQywwQkFBMEIsRUFBRTtjQUFFTSxPQUFPLEVBQUV6QztZQUFPLENBQUMsQ0FBQztZQUMxRG9DLFdBQVcsRUFBRVIsR0FBRyxJQUFJQSxHQUFHLENBQUNTLE9BQU8sR0FBR1QsR0FBRyxDQUFDUyxPQUFPLEdBQUcsSUFBQUYsbUJBQUUsRUFBQyx1QkFBdUI7VUFDOUUsQ0FBQyxDQUFDO1VBRUYsTUFBTVAsR0FBRztRQUNiLENBQUMsQ0FBQztRQUVGUCxRQUFRLENBQUNxQixJQUFJLENBQUNDLFlBQVksQ0FBQztNQUMvQjtNQUVBLE9BQU9FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDekIsUUFBUSxDQUFDO0lBQ2hDLENBQUMsRUFDRCxNQUFNO01BQ0Y7TUFDQSxPQUFPO1FBQ0h2QixJQUFJO1FBQ0pDLE1BQU07UUFDTkMsTUFBTTtRQUNORTtNQUNKLENBQUM7SUFDTCxDQUNKLENBQUM7RUFDTDtBQUNKO0FBQUM2QyxPQUFBLENBQUFsRSxPQUFBLEdBQUFjLGVBQUEiLCJpZ25vcmVMaXN0IjpbXX0=