UNPKG

matrix-react-sdk

Version:
123 lines (119 loc) 17.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _reactTransitionGroup = require("react-transition-group"); var _BreadcrumbsStore = require("../../../stores/BreadcrumbsStore"); var _DecoratedRoomAvatar = _interopRequireDefault(require("../avatars/DecoratedRoomAvatar")); var _languageHandler = require("../../../languageHandler"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _AsyncStore = require("../../../stores/AsyncStore"); var _RovingTabIndex = require("../../../accessibility/RovingTabIndex"); var _Toolbar = _interopRequireDefault(require("../../../accessibility/Toolbar")); var _actions = require("../../../dispatcher/actions"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); /* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ const RoomBreadcrumbTile = ({ room, onClick }) => { const [onFocus, isActive, ref] = (0, _RovingTabIndex.useRovingTabIndex)(); return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { className: "mx_RoomBreadcrumbs_crumb", onClick: onClick, "aria-label": (0, _languageHandler._t)("a11y|room_name", { name: room.name }), title: room.name, onFocus: onFocus, ref: ref, tabIndex: isActive ? 0 : -1, placement: "right" }, /*#__PURE__*/_react.default.createElement(_DecoratedRoomAvatar.default, { room: room, size: "32px", displayBadge: true, hideIfDot: true, tooltipProps: { tabIndex: isActive ? 0 : -1 } })); }; class RoomBreadcrumbs extends _react.default.PureComponent { constructor(props) { super(props); (0, _defineProperty2.default)(this, "isMounted", true); (0, _defineProperty2.default)(this, "onBreadcrumbsUpdate", () => { if (!this.isMounted) return; // We need to trick the CSSTransition component into updating, which means we need to // tell it to not animate, then to animate a moment later. This causes two updates // which means two renders. The skipFirst change is so that our don't-animate state // doesn't show the breadcrumb we're about to reveal as it causes a visual jump/jerk. // The second update, on the next available tick, causes the "enter" animation to start // again and this time we want to show the newest breadcrumb because it'll be hidden // off screen for the animation. this.setState({ doAnimation: false, skipFirst: true }); window.setTimeout(() => this.setState({ doAnimation: true, skipFirst: false }), 0); }); (0, _defineProperty2.default)(this, "viewRoom", (room, index, viaKeyboard = false) => { _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: room.roomId, metricsTrigger: "WebHorizontalBreadcrumbs", metricsViaKeyboard: viaKeyboard }); }); this.state = { doAnimation: true, // technically we want animation on mount, but it won't be perfect skipFirst: false // render the thing, as boring as it is }; _BreadcrumbsStore.BreadcrumbsStore.instance.on(_AsyncStore.UPDATE_EVENT, this.onBreadcrumbsUpdate); } componentWillUnmount() { this.isMounted = false; _BreadcrumbsStore.BreadcrumbsStore.instance.off(_AsyncStore.UPDATE_EVENT, this.onBreadcrumbsUpdate); } render() { const tiles = _BreadcrumbsStore.BreadcrumbsStore.instance.rooms.map((r, i) => /*#__PURE__*/_react.default.createElement(RoomBreadcrumbTile, { key: r.roomId, room: r, onClick: ev => this.viewRoom(r, i, ev.type !== "click") })); if (tiles.length > 0) { // NOTE: The CSSTransition timeout MUST match the timeout in our CSS! return /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.CSSTransition, { appear: true, in: this.state.doAnimation, timeout: 640, classNames: "mx_RoomBreadcrumbs" }, /*#__PURE__*/_react.default.createElement(_Toolbar.default, { className: "mx_RoomBreadcrumbs", "aria-label": (0, _languageHandler._t)("room_list|breadcrumbs_label") }, tiles.slice(this.state.skipFirst ? 1 : 0))); } else { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomBreadcrumbs" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomBreadcrumbs_placeholder" }, (0, _languageHandler._t)("room_list|breadcrumbs_empty"))); } } } exports.default = RoomBreadcrumbs; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFRyYW5zaXRpb25Hcm91cCIsIl9CcmVhZGNydW1ic1N0b3JlIiwiX0RlY29yYXRlZFJvb21BdmF0YXIiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX2Rpc3BhdGNoZXIiLCJfQXN5bmNTdG9yZSIsIl9Sb3ZpbmdUYWJJbmRleCIsIl9Ub29sYmFyIiwiX2FjdGlvbnMiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIlJvb21CcmVhZGNydW1iVGlsZSIsInJvb20iLCJvbkNsaWNrIiwib25Gb2N1cyIsImlzQWN0aXZlIiwicmVmIiwidXNlUm92aW5nVGFiSW5kZXgiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIl90IiwibmFtZSIsInRpdGxlIiwidGFiSW5kZXgiLCJwbGFjZW1lbnQiLCJzaXplIiwiZGlzcGxheUJhZGdlIiwiaGlkZUlmRG90IiwidG9vbHRpcFByb3BzIiwiUm9vbUJyZWFkY3J1bWJzIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJpc01vdW50ZWQiLCJzZXRTdGF0ZSIsImRvQW5pbWF0aW9uIiwic2tpcEZpcnN0Iiwid2luZG93Iiwic2V0VGltZW91dCIsImluZGV4IiwidmlhS2V5Ym9hcmQiLCJkZWZhdWx0RGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiYWN0aW9uIiwiQWN0aW9uIiwiVmlld1Jvb20iLCJyb29tX2lkIiwicm9vbUlkIiwibWV0cmljc1RyaWdnZXIiLCJtZXRyaWNzVmlhS2V5Ym9hcmQiLCJzdGF0ZSIsIkJyZWFkY3J1bWJzU3RvcmUiLCJpbnN0YW5jZSIsIm9uIiwiVVBEQVRFX0VWRU5UIiwib25CcmVhZGNydW1ic1VwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwicmVuZGVyIiwidGlsZXMiLCJyb29tcyIsIm1hcCIsInIiLCJpIiwia2V5IiwiZXYiLCJ2aWV3Um9vbSIsInR5cGUiLCJsZW5ndGgiLCJDU1NUcmFuc2l0aW9uIiwiYXBwZWFyIiwiaW4iLCJ0aW1lb3V0IiwiY2xhc3NOYW1lcyIsInNsaWNlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1Jvb21CcmVhZGNydW1icy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb24gfSBmcm9tIFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cFwiO1xuXG5pbXBvcnQgeyBCcmVhZGNydW1ic1N0b3JlIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9CcmVhZGNydW1ic1N0b3JlXCI7XG5pbXBvcnQgRGVjb3JhdGVkUm9vbUF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9EZWNvcmF0ZWRSb29tQXZhdGFyXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBVUERBVEVfRVZFTlQgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL0FzeW5jU3RvcmVcIjtcbmltcG9ydCB7IHVzZVJvdmluZ1RhYkluZGV4IH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvUm92aW5nVGFiSW5kZXhcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCIuLi8uLi8uLi9hY2Nlc3NpYmlsaXR5L1Rvb2xiYXJcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7IFZpZXdSb29tUGF5bG9hZCB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzL1ZpZXdSb29tUGF5bG9hZFwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24sIHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHt9XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIC8vIEJvdGggb2YgdGhlc2UgY29udHJvbCB0aGUgYW5pbWF0aW9uIGZvciB0aGUgYnJlYWRjcnVtYnMuIEZvciBkZXRhaWxzIG9uIHRoZVxuICAgIC8vIGFjdHVhbCBhbmltYXRpb24sIHNlZSB0aGUgQ1NTLlxuICAgIC8vXG4gICAgLy8gZG9BbmltYXRpb24gaXMgdG8gbGllIHRvIHRoZSBDU1NUcmFuc2l0aW9uIGNvbXBvbmVudCAoc2VlIG9uQnJlYWRjcnVtYnNVcGRhdGVcbiAgICAvLyBmb3IgaW5mbykuIHNraXBGaXJzdCBpcyB1c2VkIHRvIHRyeSBhbmQgcmVkdWNlIGplcmt5IGFuaW1hdGlvbiAtIGFsc28gc2VlIHRoZVxuICAgIC8vIGJyZWFkY3J1bWIgdXBkYXRlIGZ1bmN0aW9uIGZvciBpbmZvIG9uIHRoYXQuXG4gICAgZG9BbmltYXRpb246IGJvb2xlYW47XG4gICAgc2tpcEZpcnN0OiBib29sZWFuO1xufVxuXG5jb25zdCBSb29tQnJlYWRjcnVtYlRpbGU6IFJlYWN0LkZDPHsgcm9vbTogUm9vbTsgb25DbGljazogKGV2OiBCdXR0b25FdmVudCkgPT4gdm9pZCB9PiA9ICh7IHJvb20sIG9uQ2xpY2sgfSkgPT4ge1xuICAgIGNvbnN0IFtvbkZvY3VzLCBpc0FjdGl2ZSwgcmVmXSA9IHVzZVJvdmluZ1RhYkluZGV4KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfUm9vbUJyZWFkY3J1bWJzX2NydW1iXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcImExMXl8cm9vbV9uYW1lXCIsIHsgbmFtZTogcm9vbS5uYW1lIH0pfVxuICAgICAgICAgICAgdGl0bGU9e3Jvb20ubmFtZX1cbiAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgIHRhYkluZGV4PXtpc0FjdGl2ZSA/IDAgOiAtMX1cbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPERlY29yYXRlZFJvb21BdmF0YXJcbiAgICAgICAgICAgICAgICByb29tPXtyb29tfVxuICAgICAgICAgICAgICAgIHNpemU9XCIzMnB4XCJcbiAgICAgICAgICAgICAgICBkaXNwbGF5QmFkZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaGlkZUlmRG90PXt0cnVlfVxuICAgICAgICAgICAgICAgIHRvb2x0aXBQcm9wcz17eyB0YWJJbmRleDogaXNBY3RpdmUgPyAwIDogLTEgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm9vbUJyZWFkY3J1bWJzIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHByaXZhdGUgaXNNb3VudGVkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZG9BbmltYXRpb246IHRydWUsIC8vIHRlY2huaWNhbGx5IHdlIHdhbnQgYW5pbWF0aW9uIG9uIG1vdW50LCBidXQgaXQgd29uJ3QgYmUgcGVyZmVjdFxuICAgICAgICAgICAgc2tpcEZpcnN0OiBmYWxzZSwgLy8gcmVuZGVyIHRoZSB0aGluZywgYXMgYm9yaW5nIGFzIGl0IGlzXG4gICAgICAgIH07XG5cbiAgICAgICAgQnJlYWRjcnVtYnNTdG9yZS5pbnN0YW5jZS5vbihVUERBVEVfRVZFTlQsIHRoaXMub25CcmVhZGNydW1ic1VwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgICBCcmVhZGNydW1ic1N0b3JlLmluc3RhbmNlLm9mZihVUERBVEVfRVZFTlQsIHRoaXMub25CcmVhZGNydW1ic1VwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkJyZWFkY3J1bWJzVXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNNb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB0cmljayB0aGUgQ1NTVHJhbnNpdGlvbiBjb21wb25lbnQgaW50byB1cGRhdGluZywgd2hpY2ggbWVhbnMgd2UgbmVlZCB0b1xuICAgICAgICAvLyB0ZWxsIGl0IHRvIG5vdCBhbmltYXRlLCB0aGVuIHRvIGFuaW1hdGUgYSBtb21lbnQgbGF0ZXIuIFRoaXMgY2F1c2VzIHR3byB1cGRhdGVzXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHR3byByZW5kZXJzLiBUaGUgc2tpcEZpcnN0IGNoYW5nZSBpcyBzbyB0aGF0IG91ciBkb24ndC1hbmltYXRlIHN0YXRlXG4gICAgICAgIC8vIGRvZXNuJ3Qgc2hvdyB0aGUgYnJlYWRjcnVtYiB3ZSdyZSBhYm91dCB0byByZXZlYWwgYXMgaXQgY2F1c2VzIGEgdmlzdWFsIGp1bXAvamVyay5cbiAgICAgICAgLy8gVGhlIHNlY29uZCB1cGRhdGUsIG9uIHRoZSBuZXh0IGF2YWlsYWJsZSB0aWNrLCBjYXVzZXMgdGhlIFwiZW50ZXJcIiBhbmltYXRpb24gdG8gc3RhcnRcbiAgICAgICAgLy8gYWdhaW4gYW5kIHRoaXMgdGltZSB3ZSB3YW50IHRvIHNob3cgdGhlIG5ld2VzdCBicmVhZGNydW1iIGJlY2F1c2UgaXQnbGwgYmUgaGlkZGVuXG4gICAgICAgIC8vIG9mZiBzY3JlZW4gZm9yIHRoZSBhbmltYXRpb24uXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkb0FuaW1hdGlvbjogZmFsc2UsIHNraXBGaXJzdDogdHJ1ZSB9KTtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGRvQW5pbWF0aW9uOiB0cnVlLCBza2lwRmlyc3Q6IGZhbHNlIH0pLCAwKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2aWV3Um9vbSA9IChyb29tOiBSb29tLCBpbmRleDogbnVtYmVyLCB2aWFLZXlib2FyZCA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICByb29tX2lkOiByb29tLnJvb21JZCxcbiAgICAgICAgICAgIG1ldHJpY3NUcmlnZ2VyOiBcIldlYkhvcml6b250YWxCcmVhZGNydW1ic1wiLFxuICAgICAgICAgICAgbWV0cmljc1ZpYUtleWJvYXJkOiB2aWFLZXlib2FyZCxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGlsZXMgPSBCcmVhZGNydW1ic1N0b3JlLmluc3RhbmNlLnJvb21zLm1hcCgociwgaSkgPT4gKFxuICAgICAgICAgICAgPFJvb21CcmVhZGNydW1iVGlsZVxuICAgICAgICAgICAgICAgIGtleT17ci5yb29tSWR9XG4gICAgICAgICAgICAgICAgcm9vbT17cn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXY6IEJ1dHRvbkV2ZW50KSA9PiB0aGlzLnZpZXdSb29tKHIsIGksIGV2LnR5cGUgIT09IFwiY2xpY2tcIil9XG4gICAgICAgICAgICAvPlxuICAgICAgICApKTtcblxuICAgICAgICBpZiAodGlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIENTU1RyYW5zaXRpb24gdGltZW91dCBNVVNUIG1hdGNoIHRoZSB0aW1lb3V0IGluIG91ciBDU1MhXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDU1NUcmFuc2l0aW9uIGFwcGVhcj17dHJ1ZX0gaW49e3RoaXMuc3RhdGUuZG9BbmltYXRpb259IHRpbWVvdXQ9ezY0MH0gY2xhc3NOYW1lcz1cIm14X1Jvb21CcmVhZGNydW1ic1wiPlxuICAgICAgICAgICAgICAgICAgICA8VG9vbGJhciBjbGFzc05hbWU9XCJteF9Sb29tQnJlYWRjcnVtYnNcIiBhcmlhLWxhYmVsPXtfdChcInJvb21fbGlzdHxicmVhZGNydW1ic19sYWJlbFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGlsZXMuc2xpY2UodGhpcy5zdGF0ZS5za2lwRmlyc3QgPyAxIDogMCl9XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cbiAgICAgICAgICAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21CcmVhZGNydW1ic1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21CcmVhZGNydW1ic19wbGFjZWhvbGRlclwiPntfdChcInJvb21fbGlzdHxicmVhZGNydW1ic19lbXB0eVwiKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMscUJBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGlCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxvQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksZ0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFFBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQUVBLElBQUFVLGlCQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBOEJBLE1BQU1XLGtCQUFnRixHQUFHQSxDQUFDO0VBQUVDLElBQUk7RUFBRUM7QUFBUSxDQUFDLEtBQUs7RUFDNUcsTUFBTSxDQUFDQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsR0FBRyxDQUFDLEdBQUcsSUFBQUMsaUNBQWlCLEVBQUMsQ0FBQztFQUVwRCxvQkFDSW5CLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQUMsYUFBQSxDQUFDVCxpQkFBQSxDQUFBUSxPQUFnQjtJQUNiRSxTQUFTLEVBQUMsMEJBQTBCO0lBQ3BDUCxPQUFPLEVBQUVBLE9BQVE7SUFDakIsY0FBWSxJQUFBUSxtQkFBRSxFQUFDLGdCQUFnQixFQUFFO01BQUVDLElBQUksRUFBRVYsSUFBSSxDQUFDVTtJQUFLLENBQUMsQ0FBRTtJQUN0REMsS0FBSyxFQUFFWCxJQUFJLENBQUNVLElBQUs7SUFDakJSLE9BQU8sRUFB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