UNPKG

matrix-react-sdk

Version:
165 lines (159 loc) 27.3 kB
"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 _liveLocation = require("../../../../res/img/location/live-location.svg"); var _useLiveBeacons = require("../../../utils/beacon/useLiveBeacons"); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _BaseDialog = _interopRequireDefault(require("../dialogs/BaseDialog")); var _Map = _interopRequireDefault(require("../location/Map")); var _ZoomButtons = _interopRequireDefault(require("../location/ZoomButtons")); var _BeaconMarker = _interopRequireDefault(require("./BeaconMarker")); var _bounds = require("../../../utils/beacon/bounds"); var _beacon = require("../../../utils/beacon"); var _languageHandler = require("../../../languageHandler"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _DialogSidebar = _interopRequireDefault(require("./DialogSidebar")); var _DialogOwnBeaconStatus = _interopRequireDefault(require("./DialogOwnBeaconStatus")); var _BeaconStatusTooltip = _interopRequireDefault(require("./BeaconStatusTooltip")); var _MapFallback = _interopRequireDefault(require("../location/MapFallback")); var _MapError = require("../location/MapError"); 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. */ // track the 'focused time' as ts // to make it possible to refocus the same beacon // as the beacon location may change // or the map may move around const getBoundsCenter = bounds => { if (!bounds) { return; } return (0, _beacon.getGeoUri)({ latitude: (bounds.north + bounds.south) / 2, longitude: (bounds.east + bounds.west) / 2, timestamp: Date.now() }); }; const useMapPosition = (liveBeacons, { beacon, ts }) => { const [bounds, setBounds] = (0, _react.useState)((0, _bounds.getBeaconBounds)(liveBeacons)); const [centerGeoUri, setCenterGeoUri] = (0, _react.useState)(beacon?.latestLocationState?.uri || getBoundsCenter(bounds)); (0, _react.useEffect)(() => { if ( // this check ignores the first initial focused beacon state // as centering logic on map zooms to show everything // instead of focusing down ts !== 0 && // only set focus to a known location beacon?.latestLocationState?.uri) { // append custom `mxTs` parameter to geoUri // so map is triggered to refocus on this uri // event if it was previously the center geouri // but the map have moved/zoomed setCenterGeoUri(`${beacon?.latestLocationState?.uri};mxTs=${Date.now()}`); setBounds((0, _bounds.getBeaconBounds)([beacon])); } }, [beacon, ts]); return { bounds, centerGeoUri }; }; /** * Dialog to view live beacons maximised */ const BeaconViewDialog = ({ initialFocusedBeacon, roomId, matrixClient, onFinished }) => { const liveBeacons = (0, _useLiveBeacons.useLiveBeacons)(roomId, matrixClient); const [focusedBeaconState, setFocusedBeaconState] = (0, _react.useState)({ beacon: initialFocusedBeacon, ts: 0 }); const [isSidebarOpen, setSidebarOpen] = (0, _react.useState)(false); const { bounds, centerGeoUri } = useMapPosition(liveBeacons, focusedBeaconState); const [mapDisplayError, setMapDisplayError] = (0, _react.useState)(); // automatically open the sidebar if there is no map to see (0, _react.useEffect)(() => { if (mapDisplayError) { setSidebarOpen(true); } }, [mapDisplayError]); const onBeaconListItemClick = beacon => { setFocusedBeaconState({ beacon, ts: Date.now() }); }; const hasOwnBeacon = liveBeacons.filter(beacon => beacon?.beaconInfoOwner === matrixClient.getUserId()).length > 0; return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_BeaconViewDialog", onFinished: onFinished, fixedWidth: false }, /*#__PURE__*/_react.default.createElement(_MatrixClientContext.default.Provider, { value: matrixClient }, centerGeoUri && !mapDisplayError && /*#__PURE__*/_react.default.createElement(_Map.default, { id: "mx_BeaconViewDialog", bounds: bounds, centerGeoUri: centerGeoUri, interactive: true, onError: setMapDisplayError, className: "mx_BeaconViewDialog_map", allowGeolocate: !hasOwnBeacon }, ({ map }) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, liveBeacons.map(beacon => /*#__PURE__*/_react.default.createElement(_BeaconMarker.default, { key: beacon.identifier, map: map, beacon: beacon, tooltip: /*#__PURE__*/_react.default.createElement(_BeaconStatusTooltip.default, { beacon: beacon }) })), /*#__PURE__*/_react.default.createElement(_ZoomButtons.default, { map: map }))), mapDisplayError instanceof Error && /*#__PURE__*/_react.default.createElement(_MapError.MapError, { error: mapDisplayError.message, isMinimised: true }), !centerGeoUri && !mapDisplayError && /*#__PURE__*/_react.default.createElement(_MapFallback.default, { "data-testid": "beacon-view-dialog-map-fallback", className: "mx_BeaconViewDialog_map" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_BeaconViewDialog_mapFallbackMessage" }, (0, _languageHandler._t)("location_sharing|live_locations_empty")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary", onClick: onFinished, "data-testid": "beacon-view-dialog-fallback-close" }, (0, _languageHandler._t)("action|close"))), isSidebarOpen ? /*#__PURE__*/_react.default.createElement(_DialogSidebar.default, { beacons: liveBeacons, onBeaconClick: onBeaconListItemClick, requestClose: () => setSidebarOpen(false) }) : /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary", onClick: () => setSidebarOpen(true), "data-testid": "beacon-view-dialog-open-sidebar", className: "mx_BeaconViewDialog_viewListButton" }, /*#__PURE__*/_react.default.createElement(_liveLocation.Icon, { height: 12 }), "\xA0", (0, _languageHandler._t)("action|view_list")), /*#__PURE__*/_react.default.createElement(_DialogOwnBeaconStatus.default, { roomId: roomId }))); }; var _default = exports.default = BeaconViewDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbGl2ZUxvY2F0aW9uIiwiX3VzZUxpdmVCZWFjb25zIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0Jhc2VEaWFsb2ciLCJfTWFwIiwiX1pvb21CdXR0b25zIiwiX0JlYWNvbk1hcmtlciIsIl9ib3VuZHMiLCJfYmVhY29uIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0RpYWxvZ1NpZGViYXIiLCJfRGlhbG9nT3duQmVhY29uU3RhdHVzIiwiX0JlYWNvblN0YXR1c1Rvb2x0aXAiLCJfTWFwRmFsbGJhY2siLCJfTWFwRXJyb3IiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJnZXRCb3VuZHNDZW50ZXIiLCJib3VuZHMiLCJnZXRHZW9VcmkiLCJsYXRpdHVkZSIsIm5vcnRoIiwic291dGgiLCJsb25naXR1ZGUiLCJlYXN0Iiwid2VzdCIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJ1c2VNYXBQb3NpdGlvbiIsImxpdmVCZWFjb25zIiwiYmVhY29uIiwidHMiLCJzZXRCb3VuZHMiLCJ1c2VTdGF0ZSIsImdldEJlYWNvbkJvdW5kcyIsImNlbnRlckdlb1VyaSIsInNldENlbnRlckdlb1VyaSIsImxhdGVzdExvY2F0aW9uU3RhdGUiLCJ1cmkiLCJ1c2VFZmZlY3QiLCJCZWFjb25WaWV3RGlhbG9nIiwiaW5pdGlhbEZvY3VzZWRCZWFjb24iLCJyb29tSWQiLCJtYXRyaXhDbGllbnQiLCJvbkZpbmlzaGVkIiwidXNlTGl2ZUJlYWNvbnMiLCJmb2N1c2VkQmVhY29uU3RhdGUiLCJzZXRGb2N1c2VkQmVhY29uU3RhdGUiLCJpc1NpZGViYXJPcGVuIiwic2V0U2lkZWJhck9wZW4iLCJtYXBEaXNwbGF5RXJyb3IiLCJzZXRNYXBEaXNwbGF5RXJyb3IiLCJvbkJlYWNvbkxpc3RJdGVtQ2xpY2siLCJoYXNPd25CZWFjb24iLCJmaWx0ZXIiLCJiZWFjb25JbmZvT3duZXIiLCJnZXRVc2VySWQiLCJsZW5ndGgiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiZml4ZWRXaWR0aCIsIlByb3ZpZGVyIiwidmFsdWUiLCJpZCIsImludGVyYWN0aXZlIiwib25FcnJvciIsImFsbG93R2VvbG9jYXRlIiwibWFwIiwiRnJhZ21lbnQiLCJrZXkiLCJpZGVudGlmaWVyIiwidG9vbHRpcCIsIkVycm9yIiwiTWFwRXJyb3IiLCJlcnJvciIsIm1lc3NhZ2UiLCJpc01pbmltaXNlZCIsIl90Iiwia2luZCIsIm9uQ2xpY2siLCJiZWFjb25zIiwib25CZWFjb25DbGljayIsInJlcXVlc3RDbG9zZSIsIkljb24iLCJoZWlnaHQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9iZWFjb24vQmVhY29uVmlld0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE1hdHJpeENsaWVudCwgQmVhY29uLCBSb29tIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0ICogYXMgbWFwbGlicmVnbCBmcm9tIFwibWFwbGlicmUtZ2xcIjtcblxuaW1wb3J0IHsgSWNvbiBhcyBMaXZlTG9jYXRpb25JY29uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3Jlcy9pbWcvbG9jYXRpb24vbGl2ZS1sb2NhdGlvbi5zdmdcIjtcbmltcG9ydCB7IHVzZUxpdmVCZWFjb25zIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2JlYWNvbi91c2VMaXZlQmVhY29uc1wiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gXCIuLi9kaWFsb2dzL0Jhc2VEaWFsb2dcIjtcbmltcG9ydCBNYXAgZnJvbSBcIi4uL2xvY2F0aW9uL01hcFwiO1xuaW1wb3J0IFpvb21CdXR0b25zIGZyb20gXCIuLi9sb2NhdGlvbi9ab29tQnV0dG9uc1wiO1xuaW1wb3J0IEJlYWNvbk1hcmtlciBmcm9tIFwiLi9CZWFjb25NYXJrZXJcIjtcbmltcG9ydCB7IEJvdW5kcywgZ2V0QmVhY29uQm91bmRzIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2JlYWNvbi9ib3VuZHNcIjtcbmltcG9ydCB7IGdldEdlb1VyaSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9iZWFjb25cIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCBEaWFsb2dTaWRlYmFyIGZyb20gXCIuL0RpYWxvZ1NpZGViYXJcIjtcbmltcG9ydCBEaWFsb2dPd25CZWFjb25TdGF0dXMgZnJvbSBcIi4vRGlhbG9nT3duQmVhY29uU3RhdHVzXCI7XG5pbXBvcnQgQmVhY29uU3RhdHVzVG9vbHRpcCBmcm9tIFwiLi9CZWFjb25TdGF0dXNUb29sdGlwXCI7XG5pbXBvcnQgTWFwRmFsbGJhY2sgZnJvbSBcIi4uL2xvY2F0aW9uL01hcEZhbGxiYWNrXCI7XG5pbXBvcnQgeyBNYXBFcnJvciB9IGZyb20gXCIuLi9sb2NhdGlvbi9NYXBFcnJvclwiO1xuaW1wb3J0IHsgTG9jYXRpb25TaGFyZUVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvY2F0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3BzIHtcbiAgICByb29tSWQ6IFJvb21bXCJyb29tSWRcIl07XG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQ7XG4gICAgLy8gb3BlbiB0aGUgbWFwIGNlbnRlcmVkIG9uIHRoaXMgYmVhY29uJ3MgbG9jYXRpb25cbiAgICBpbml0aWFsRm9jdXNlZEJlYWNvbj86IEJlYWNvbjtcbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG59XG5cbi8vIHRyYWNrIHRoZSAnZm9jdXNlZCB0aW1lJyBhcyB0c1xuLy8gdG8gbWFrZSBpdCBwb3NzaWJsZSB0byByZWZvY3VzIHRoZSBzYW1lIGJlYWNvblxuLy8gYXMgdGhlIGJlYWNvbiBsb2NhdGlvbiBtYXkgY2hhbmdlXG4vLyBvciB0aGUgbWFwIG1heSBtb3ZlIGFyb3VuZFxuaW50ZXJmYWNlIEZvY3VzZWRCZWFjb25TdGF0ZSB7XG4gICAgdHM6IG51bWJlcjtcbiAgICBiZWFjb24/OiBCZWFjb247XG59XG5cbmNvbnN0IGdldEJvdW5kc0NlbnRlciA9IChib3VuZHM/OiBCb3VuZHMpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmICghYm91bmRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGdldEdlb1VyaSh7XG4gICAgICAgIGxhdGl0dWRlOiAoYm91bmRzLm5vcnRoICsgYm91bmRzLnNvdXRoKSAvIDIsXG4gICAgICAgIGxvbmdpdHVkZTogKGJvdW5kcy5lYXN0ICsgYm91bmRzLndlc3QpIC8gMixcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0pO1xufTtcblxuY29uc3QgdXNlTWFwUG9zaXRpb24gPSAoXG4gICAgbGl2ZUJlYWNvbnM6IEJlYWNvbltdLFxuICAgIHsgYmVhY29uLCB0cyB9OiBGb2N1c2VkQmVhY29uU3RhdGUsXG4pOiB7XG4gICAgYm91bmRzPzogQm91bmRzO1xuICAgIGNlbnRlckdlb1VyaT86IHN0cmluZztcbn0gPT4ge1xuICAgIGNvbnN0IFtib3VuZHMsIHNldEJvdW5kc10gPSB1c2VTdGF0ZTxCb3VuZHMgfCB1bmRlZmluZWQ+KGdldEJlYWNvbkJvdW5kcyhsaXZlQmVhY29ucykpO1xuICAgIGNvbnN0IFtjZW50ZXJHZW9VcmksIHNldENlbnRlckdlb1VyaV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgICAgICBiZWFjb24/LmxhdGVzdExvY2F0aW9uU3RhdGU/LnVyaSB8fCBnZXRCb3VuZHNDZW50ZXIoYm91bmRzKSxcbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gdGhpcyBjaGVjayBpZ25vcmVzIHRoZSBmaXJzdCBpbml0aWFsIGZvY3VzZWQgYmVhY29uIHN0YXRlXG4gICAgICAgICAgICAvLyBhcyBjZW50ZXJpbmcgbG9naWMgb24gbWFwIHpvb21zIHRvIHNob3cgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBmb2N1c2luZyBkb3duXG4gICAgICAgICAgICB0cyAhPT0gMCAmJlxuICAgICAgICAgICAgLy8gb25seSBzZXQgZm9jdXMgdG8gYSBrbm93biBsb2NhdGlvblxuICAgICAgICAgICAgYmVhY29uPy5sYXRlc3RMb2NhdGlvblN0YXRlPy51cmlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBhcHBlbmQgY3VzdG9tIGBteFRzYCBwYXJhbWV0ZXIgdG8gZ2VvVXJpXG4gICAgICAgICAgICAvLyBzbyBtYXAgaXMgdHJpZ2dlcmVkIHRvIHJlZm9jdXMgb24gdGhpcyB1cmlcbiAgICAgICAgICAgIC8vIGV2ZW50IGlmIGl0IHdhcyBwcmV2aW91c2x5IHRoZSBjZW50ZXIgZ2VvdXJpXG4gICAgICAgICAgICAvLyBidXQgdGhlIG1hcCBoYXZlIG1vdmVkL3pvb21lZFxuICAgICAgICAgICAgc2V0Q2VudGVyR2VvVXJpKGAke2JlYWNvbj8ubGF0ZXN0TG9jYXRpb25TdGF0ZT8udXJpfTtteFRzPSR7RGF0ZS5ub3coKX1gKTtcbiAgICAgICAgICAgIHNldEJvdW5kcyhnZXRCZWFjb25Cb3VuZHMoW2JlYWNvbl0pKTtcbiAgICAgICAgfVxuICAgIH0sIFtiZWFjb24sIHRzXSk7XG5cbiAgICByZXR1cm4geyBib3VuZHMsIGNlbnRlckdlb1VyaSB9O1xufTtcblxuLyoqXG4gKiBEaWFsb2cgdG8gdmlldyBsaXZlIGJlYWNvbnMgbWF4aW1pc2VkXG4gKi9cbmNvbnN0IEJlYWNvblZpZXdEaWFsb2c6IFJlYWN0LkZDPElQcm9wcz4gPSAoeyBpbml0aWFsRm9jdXNlZEJlYWNvbiwgcm9vbUlkLCBtYXRyaXhDbGllbnQsIG9uRmluaXNoZWQgfSkgPT4ge1xuICAgIGNvbnN0IGxpdmVCZWFjb25zID0gdXNlTGl2ZUJlYWNvbnMocm9vbUlkLCBtYXRyaXhDbGllbnQpO1xuICAgIGNvbnN0IFtmb2N1c2VkQmVhY29uU3RhdGUsIHNldEZvY3VzZWRCZWFjb25TdGF0ZV0gPSB1c2VTdGF0ZTxGb2N1c2VkQmVhY29uU3RhdGU+KHtcbiAgICAgICAgYmVhY29uOiBpbml0aWFsRm9jdXNlZEJlYWNvbixcbiAgICAgICAgdHM6IDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBbaXNTaWRlYmFyT3Blbiwgc2V0U2lkZWJhck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgeyBib3VuZHMsIGNlbnRlckdlb1VyaSB9ID0gdXNlTWFwUG9zaXRpb24obGl2ZUJlYWNvbnMsIGZvY3VzZWRCZWFjb25TdGF0ZSk7XG5cbiAgICBjb25zdCBbbWFwRGlzcGxheUVycm9yLCBzZXRNYXBEaXNwbGF5RXJyb3JdID0gdXNlU3RhdGU8dW5rbm93bj4oKTtcblxuICAgIC8vIGF1dG9tYXRpY2FsbHkgb3BlbiB0aGUgc2lkZWJhciBpZiB0aGVyZSBpcyBubyBtYXAgdG8gc2VlXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1hcERpc3BsYXlFcnJvcikge1xuICAgICAgICAgICAgc2V0U2lkZWJhck9wZW4odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbbWFwRGlzcGxheUVycm9yXSk7XG5cbiAgICBjb25zdCBvbkJlYWNvbkxpc3RJdGVtQ2xpY2sgPSAoYmVhY29uOiBCZWFjb24pOiB2b2lkID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZEJlYWNvblN0YXRlKHsgYmVhY29uLCB0czogRGF0ZS5ub3coKSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFzT3duQmVhY29uID1cbiAgICAgICAgbGl2ZUJlYWNvbnMuZmlsdGVyKChiZWFjb24pID0+IGJlYWNvbj8uYmVhY29uSW5mb093bmVyID09PSBtYXRyaXhDbGllbnQuZ2V0VXNlcklkKCkpLmxlbmd0aCA+IDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8QmFzZURpYWxvZyBjbGFzc05hbWU9XCJteF9CZWFjb25WaWV3RGlhbG9nXCIgb25GaW5pc2hlZD17b25GaW5pc2hlZH0gZml4ZWRXaWR0aD17ZmFsc2V9PlxuICAgICAgICAgICAgPE1hdHJpeENsaWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21hdHJpeENsaWVudH0+XG4gICAgICAgICAgICAgICAge2NlbnRlckdlb1VyaSAmJiAhbWFwRGlzcGxheUVycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgPE1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJteF9CZWFjb25WaWV3RGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcz17Ym91bmRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyR2VvVXJpPXtjZW50ZXJHZW9Vcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcj17c2V0TWFwRGlzcGxheUVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQmVhY29uVmlld0RpYWxvZ19tYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dHZW9sb2NhdGU9eyFoYXNPd25CZWFjb259XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsoeyBtYXAgfTogeyBtYXA6IG1hcGxpYnJlZ2wuTWFwIH0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGl2ZUJlYWNvbnMubWFwKChiZWFjb24pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCZWFjb25NYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2JlYWNvbi5pZGVudGlmaWVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcD17bWFwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlYWNvbj17YmVhY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9ezxCZWFjb25TdGF0dXNUb29sdGlwIGJlYWNvbj17YmVhY29ufSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Wm9vbUJ1dHRvbnMgbWFwPXttYXB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L01hcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHttYXBEaXNwbGF5RXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxNYXBFcnJvciBlcnJvcj17bWFwRGlzcGxheUVycm9yLm1lc3NhZ2UgYXMgTG9jYXRpb25TaGFyZUVycm9yfSBpc01pbmltaXNlZCAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgeyFjZW50ZXJHZW9VcmkgJiYgIW1hcERpc3BsYXlFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxNYXBGYWxsYmFjayBkYXRhLXRlc3RpZD1cImJlYWNvbi12aWV3LWRpYWxvZy1tYXAtZmFsbGJhY2tcIiBjbGFzc05hbWU9XCJteF9CZWFjb25WaWV3RGlhbG9nX21hcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfQmVhY29uVmlld0RpYWxvZ19tYXBGYWxsYmFja01lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJsb2NhdGlvbl9zaGFyaW5nfGxpdmVfbG9jYXRpb25zX2VtcHR5XCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImJlYWNvbi12aWV3LWRpYWxvZy1mYWxsYmFjay1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGNsb3NlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L01hcEZhbGxiYWNrPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2lzU2lkZWJhck9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dTaWRlYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWFjb25zPXtsaXZlQmVhY29uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQmVhY29uQ2xpY2s9e29uQmVhY29uTGlzdEl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDbG9zZT17KCkgPT4gc2V0U2lkZWJhck9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaWRlYmFyT3Blbih0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYmVhY29uLXZpZXctZGlhbG9nLW9wZW4tc2lkZWJhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9CZWFjb25WaWV3RGlhbG9nX3ZpZXdMaXN0QnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpdmVMb2NhdGlvbkljb24gaGVpZ2h0PXsxMn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufHZpZXdfbGlzdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPERpYWxvZ093bkJlYWNvblN0YXR1cyByb29tSWQ9e3Jvb21JZH0gLz5cbiAgICAgICAgICAgIDwvTWF0cml4Q2xpZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCZWFjb25WaWV3RGlhbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBSUEsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUYsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFTLE9BQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLGdCQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxpQkFBQSxHQUFBUixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWEsY0FBQSxHQUFBVCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWMsc0JBQUEsR0FBQVYsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFlLG9CQUFBLEdBQUFYLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBZ0IsWUFBQSxHQUFBWixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWlCLFNBQUEsR0FBQWpCLE9BQUE7QUFBZ0QsU0FBQWtCLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFwQix3QkFBQW9CLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxDQUFBSCxPQUFBLEdBQUFMLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBM0JoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFnQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUEsTUFBTVcsZUFBZSxHQUFJQyxNQUFlLElBQXlCO0VBQzdELElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQ1Q7RUFDSjtFQUNBLE9BQU8sSUFBQUMsaUJBQVMsRUFBQztJQUNiQyxRQUFRLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLEdBQUdILE1BQU0sQ0FBQ0ksS0FBSyxJQUFJLENBQUM7SUFDM0NDLFNBQVMsRUFBRSxDQUFDTCxNQUFNLENBQUNNLElBQUksR0FBR04sTUFBTSxDQUFDTyxJQUFJLElBQUksQ0FBQztJQUMxQ0MsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQztFQUN4QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTUMsY0FBYyxHQUFHQSxDQUNuQkMsV0FBcUIsRUFDckI7RUFBRUMsTUFBTTtFQUFFQztBQUF1QixDQUFDLEtBSWpDO0VBQ0QsTUFBTSxDQUFDZCxNQUFNLEVBQUVlLFNBQVMsQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBcUIsSUFBQUMsdUJBQWUsRUFBQ0wsV0FBVyxDQUFDLENBQUM7RUFDdEYsTUFBTSxDQUFDTSxZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHLElBQUFILGVBQVEsRUFDNUNILE1BQU0sRUFBRU8sbUJBQW1CLEVBQUVDLEdBQUcsSUFBSXRCLGVBQWUsQ0FBQ0MsTUFBTSxDQUM5RCxDQUFDO0VBRUQsSUFBQXNCLGdCQUFTLEVBQUMsTUFBTTtJQUNaO0lBQ0k7SUFDQTtJQUNBO0lBQ0FSLEVBQUUsS0FBSyxDQUFDO0lBQ1I7SUFDQUQsTUFBTSxFQUFFTyxtQkFBbUIsRUFBRUMsR0FBRyxFQUNsQztNQUNFO01BQ0E7TUFDQTtNQUNBO01BQ0FGLGVBQWUsQ0FBQyxHQUFHTixNQUFNLEVBQUVPLG1CQUFtQixFQUFFQyxHQUFHLFNBQVNaLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQ3pFSyxTQUFTLENBQUMsSUFBQUUsdUJBQWUsRUFBQyxDQUFDSixNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hDO0VBQ0osQ0FBQyxFQUFFLENBQUNBLE1BQU0sRUFBRUMsRUFBRSxDQUFDLENBQUM7RUFFaEIsT0FBTztJQUFFZCxNQUFNO0lBQUVrQjtFQUFhLENBQUM7QUFDbkMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxNQUFNSyxnQkFBa0MsR0FBR0EsQ0FBQztFQUFFQyxvQkFBb0I7RUFBRUMsTUFBTTtFQUFFQyxZQUFZO0VBQUVDO0FBQVcsQ0FBQyxLQUFLO0VBQ3ZHLE1BQU1mLFdBQVcsR0FBRyxJQUFBZ0IsOEJBQWMsRUFBQ0gsTUFBTSxFQUFFQyxZQUFZLENBQUM7RUFDeEQsTUFBTSxDQUFDRyxrQkFBa0IsRUFBRUMscUJBQXFCLENBQUMsR0FBRyxJQUFBZCxlQUFRLEVBQXFCO0lBQzdFSCxNQUFNLEVBQUVXLG9CQUFvQjtJQUM1QlYsRUFBRSxFQUFFO0VBQ1IsQ0FBQyxDQUFDO0VBRUYsTUFBTSxDQUFDaUIsYUFBYSxFQUFFQyxjQUFjLENBQUMsR0FBRyxJQUFBaEIsZUFBUSxFQUFDLEtBQUssQ0FBQztFQUV2RCxNQUFNO0lBQUVoQixNQUFNO0lBQUVrQjtFQUFhLENBQUMsR0FBR1AsY0FBYyxDQUFDQyxXQUFXLEVBQUVpQixrQkFBa0IsQ0FBQztFQUVoRixNQUFNLENBQUNJLGVBQWUsRUFBRUMsa0JBQWtCLENBQUMsR0FBRyxJQUFBbEIsZUFBUSxFQUFVLENBQUM7O0VBRWpFO0VBQ0EsSUFBQU0sZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSVcsZUFBZSxFQUFFO01BQ2pCRCxjQUFjLENBQUMsSUFBSSxDQUFDO0lBQ3hCO0VBQ0osQ0FBQyxFQUFFLENBQUNDLGVBQWUsQ0FBQyxDQUFDO0VBRXJCLE1BQU1FLHFCQUFxQixHQUFJdEIsTUFBYyxJQUFXO0lBQ3BEaUIscUJBQXFCLENBQUM7TUFBRWpCLE1BQU07TUFBRUMsRUFBRSxFQUFFTCxJQUFJLENBQUNDLEdBQUcsQ0FBQztJQUFFLENBQUMsQ0FBQztFQUNyRCxDQUFDO0VBRUQsTUFBTTBCLFlBQVksR0FDZHhCLFdBQVcsQ0FBQ3lCLE1BQU0sQ0FBRXhCLE1BQU0sSUFBS0EsTUFBTSxFQUFFeUIsZUFBZSxLQUFLWixZQUFZLENBQUNhLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxHQUFHLENBQUM7RUFFbkcsb0JBQ0lqRixNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUMzRSxXQUFBLENBQUFtQixPQUFVO0lBQUN5RCxTQUFTLEVBQUMscUJBQXFCO0lBQUNmLFVBQVUsRUFBRUEsVUFBVztJQUFDZ0IsVUFBVSxFQUFFO0VBQU0sZ0JBQ2xGcEYsTUFBQSxDQUFBMEIsT0FBQSxDQUFBd0QsYUFBQSxDQUFDN0Usb0JBQUEsQ0FBQXFCLE9BQW1CLENBQUMyRCxRQUFRO0lBQUNDLEtBQUssRUFBRW5CO0VBQWEsR0FDN0NSLFlBQVksSUFBSSxDQUFDZSxlQUFlLGlCQUM3QjFFLE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQzFFLElBQUEsQ0FBQWtCLE9BQUc7SUFDQTZELEVBQUUsRUFBQyxxQkFBcUI7SUFDeEI5QyxNQUFNLEVBQUVBLE1BQU87SUFDZmtCLFlBQVksRUFBRUEsWUFBYTtJQUMzQjZCLFdBQVc7SUFDWEMsT0FBTyxFQUFFZCxrQkFBbUI7SUFDNUJRLFNBQVMsRUFBQyx5QkFBeUI7SUFDbkNPLGNBQWMsRUFBRSxDQUFDYjtFQUFhLEdBRTdCLENBQUM7SUFBRWM7RUFBNkIsQ0FBQyxrQkFDOUIzRixNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUFsRixNQUFBLENBQUEwQixPQUFBLENBQUFrRSxRQUFBLFFBQ0t2QyxXQUFXLENBQUNzQyxHQUFHLENBQUVyQyxNQUFNLGlCQUNwQnRELE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQ3hFLGFBQUEsQ0FBQWdCLE9BQVk7SUFDVG1FLEdBQUcsRUFBRXZDLE1BQU0sQ0FBQ3dDLFVBQVc7SUFDdkJILEdBQUcsRUFBRUEsR0FBSTtJQUNUckMsTUFBTSxFQUFFQSxNQUFPO0lBQ2Z5QyxPQUFPLGVBQUUvRixNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUNqRSxvQkFBQSxDQUFBUyxPQUFtQjtNQUFDNEIsTUFBTSxFQUFFQTtJQUFPLENBQUU7RUFBRSxDQUNwRCxDQUNKLENBQUMsZUFDRnRELE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQ3pFLFlBQUEsQ0FBQWlCLE9BQVc7SUFBQ2lFLEdBQUcsRUFBRUE7RUFBSSxDQUFFLENBQzFCLENBRUwsQ0FDUixFQUNBakIsZUFBZSxZQUFZc0IsS0FBSyxpQkFDN0JoRyxNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUMvRCxTQUFBLENBQUE4RSxRQUFRO0lBQUNDLEtBQUssRUFBRXhCLGVBQWUsQ0FBQ3lCLE9BQThCO0lBQUNDLFdBQVc7RUFBQSxDQUFFLENBQ2hGLEVBQ0EsQ0FBQ3pDLFlBQVksSUFBSSxDQUFDZSxlQUFlLGlCQUM5QjFFLE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQ2hFLFlBQUEsQ0FBQVEsT0FBVztJQUFDLGVBQVksaUNBQWlDO0lBQUN5RCxTQUFTLEVBQUM7RUFBeUIsZ0JBQzFGbkYsTUFBQSxDQUFBMEIsT0FBQSxDQUFBd0QsYUFBQTtJQUFNQyxTQUFTLEVBQUM7RUFBd0MsR0FDbkQsSUFBQWtCLG1CQUFFLEVBQUMsdUNBQXVDLENBQ3pDLENBQUMsZUFDUHJHLE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQ3BFLGlCQUFBLENBQUFZLE9BQWdCO0lBQ2I0RSxJQUFJLEVBQUMsU0FBUztJQUNkQyxPQUFPLEVBQUVuQyxVQUFXO0lBQ3BCLGVBQVk7RUFBbUMsR0FFOUMsSUFBQWlDLG1CQUFFLEVBQUMsY0FBYyxDQUNKLENBQ1QsQ0FDaEIsRUFDQTdCLGFBQWEsZ0JBQ1Z4RSxNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUNuRSxjQUFBLENBQUFXLE9BQWE7SUFDVjhFLE9BQU8sRUFBRW5ELFdBQVk7SUFDckJvRCxhQUFhLEVBQUU3QixxQkFBc0I7SUFDckM4QixZQUFZLEVBQUVBLENBQUEsS0FBTWpDLGNBQWMsQ0FBQyxLQUFLO0VBQUUsQ0FDN0MsQ0FBQyxnQkFFRnpFLE1BQUEsQ0FBQTBCLE9BQUEsQ0FBQXdELGFBQUEsQ0FBQ3BFLGlCQUFBLENBQUFZLE9BQWdCO0lBQ2I0RSxJQUFJLEVBQUMsU0FBUztJQUNkQyxPQUFPLEVBQUVBLENBQUEsS0FBTTlCLGNBQWMsQ0FBQyxJQUFJLENBQUU7SUFDcEMsZUFBWSxpQ0FBaUM7SUFDN0NVLFNBQVMsRUFBQztFQUFvQyxnQkFFOUNuRixNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUMvRSxhQUFBLENBQUF3RyxJQUFnQjtJQUFDQyxNQUFNLEVBQUU7RUFBRyxDQUFFLENBQUMsUUFFaEMsRUFBQyxJQUFBUCxtQkFBRSxFQUFDLGtCQUFrQixDQUNSLENBQ3JCLGVBQ0RyRyxNQUFBLENBQUEwQixPQUFBLENBQUF3RCxhQUFBLENBQUNsRSxzQkFBQSxDQUFBVSxPQUFxQjtJQUFDd0MsTUFBTSxFQUFFQTtFQUFPLENBQUUsQ0FDZCxDQUN0QixDQUFDO0FBRXJCLENBQUM7QUFBQyxJQUFBMkMsUUFBQSxHQUFBQyxPQUFBLENBQUFwRixPQUFBLEdBRWFzQyxnQkFBZ0IiLCJpZ25vcmVMaXN0IjpbXX0=