UNPKG

matrix-react-sdk

Version:
112 lines (109 loc) 21.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.WidgetPip = void 0; var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _arrowLeft = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/arrow-left")); var _PersistentApp = _interopRequireDefault(require("../elements/PersistentApp")); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _useCall = require("../../../hooks/useCall"); var _WidgetStore = _interopRequireDefault(require("../../../stores/WidgetStore")); var _WidgetLayoutStore = require("../../../stores/widgets/WidgetLayoutStore"); var _useEventEmitter = require("../../../hooks/useEventEmitter"); var _Toolbar = _interopRequireDefault(require("../../../accessibility/Toolbar")); var _RovingTabIndex = require("../../../accessibility/RovingTabIndex"); var _hangup = require("../../../../res/img/element-icons/call/hangup.svg"); var _languageHandler = require("../../../languageHandler"); var _WidgetType = require("../../../widgets/WidgetType"); var _WidgetMessagingStore = require("../../../stores/widgets/WidgetMessagingStore"); var _WidgetUtils = _interopRequireDefault(require("../../../utils/WidgetUtils")); var _ElementWidgetActions = require("../../../stores/widgets/ElementWidgetActions"); 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. */ /** * A picture-in-picture view for a widget. Additional controls are shown if the * widget is a call of some sort. */ const WidgetPip = ({ widgetId, room, viewingRoom, onStartMoving, movePersistedElement }) => { const widget = (0, _react.useMemo)(() => _WidgetStore.default.instance.getApps(room.roomId).find(app => app.id === widgetId), [room, widgetId]); const roomName = (0, _useEventEmitter.useTypedEventEmitterState)(room, _matrix.RoomEvent.Name, (0, _react.useCallback)(() => room.name, [room])); const call = (0, _useCall.useCallForWidget)(widgetId, room.roomId); const onBackClick = (0, _react.useCallback)(ev => { ev.preventDefault(); ev.stopPropagation(); if (call !== null) { _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: room.roomId, view_call: true, metricsTrigger: "WebFloatingCallWindow" }); } else if (viewingRoom) { _WidgetLayoutStore.WidgetLayoutStore.instance.moveToContainer(room, widget, _WidgetLayoutStore.Container.Center); } else { _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: room.roomId, metricsTrigger: "WebFloatingCallWindow" }); } }, [room, call, widget, viewingRoom]); const onLeaveClick = (0, _react.useCallback)(ev => { ev.preventDefault(); ev.stopPropagation(); if (call !== null) { call.disconnect().catch(e => console.error("Failed to leave call", e)); } else { // Assumed to be a Jitsi widget _WidgetMessagingStore.WidgetMessagingStore.instance.getMessagingForUid(_WidgetUtils.default.getWidgetUid(widget))?.transport.send(_ElementWidgetActions.ElementWidgetActions.HangupCall, {}).catch(e => console.error("Failed to leave Jitsi", e)); } }, [call, widget]); return /*#__PURE__*/_react.default.createElement("div", { className: "mx_WidgetPip", onMouseDown: onStartMoving, onClick: onBackClick }, /*#__PURE__*/_react.default.createElement(_PersistentApp.default, { persistentWidgetId: widgetId, persistentRoomId: room.roomId, pointerEvents: "none", movePersistedElement: movePersistedElement }, /*#__PURE__*/_react.default.createElement("div", { onMouseDown: onStartMoving, className: "mx_WidgetPip_overlay" }, /*#__PURE__*/_react.default.createElement(_Toolbar.default, { className: "mx_WidgetPip_header" }, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleButton, { onClick: onBackClick, className: "mx_WidgetPip_backButton", "aria-label": (0, _languageHandler._t)("action|back") }, /*#__PURE__*/_react.default.createElement(_arrowLeft.default, { className: "mx_Icon mx_Icon_16" }), roomName)), (call !== null || _WidgetType.WidgetType.JITSI.matches(widget?.type)) && /*#__PURE__*/_react.default.createElement(_Toolbar.default, { className: "mx_WidgetPip_footer" }, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleButton, { onClick: onLeaveClick, title: (0, _languageHandler._t)("action|leave"), "aria-label": (0, _languageHandler._t)("action|leave"), placement: "top" }, /*#__PURE__*/_react.default.createElement(_hangup.Icon, { className: "mx_Icon mx_Icon_24" })))))); }; exports.WidgetPip = WidgetPip; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2Fycm93TGVmdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfUGVyc2lzdGVudEFwcCIsIl9kaXNwYXRjaGVyIiwiX2FjdGlvbnMiLCJfdXNlQ2FsbCIsIl9XaWRnZXRTdG9yZSIsIl9XaWRnZXRMYXlvdXRTdG9yZSIsIl91c2VFdmVudEVtaXR0ZXIiLCJfVG9vbGJhciIsIl9Sb3ZpbmdUYWJJbmRleCIsIl9oYW5ndXAiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX1dpZGdldFR5cGUiLCJfV2lkZ2V0TWVzc2FnaW5nU3RvcmUiLCJfV2lkZ2V0VXRpbHMiLCJfRWxlbWVudFdpZGdldEFjdGlvbnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJXaWRnZXRQaXAiLCJ3aWRnZXRJZCIsInJvb20iLCJ2aWV3aW5nUm9vbSIsIm9uU3RhcnRNb3ZpbmciLCJtb3ZlUGVyc2lzdGVkRWxlbWVudCIsIndpZGdldCIsInVzZU1lbW8iLCJXaWRnZXRTdG9yZSIsImluc3RhbmNlIiwiZ2V0QXBwcyIsInJvb21JZCIsImZpbmQiLCJhcHAiLCJpZCIsInJvb21OYW1lIiwidXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSIsIlJvb21FdmVudCIsIk5hbWUiLCJ1c2VDYWxsYmFjayIsIm5hbWUiLCJ1c2VDYWxsRm9yV2lkZ2V0Iiwib25CYWNrQ2xpY2siLCJldiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIlZpZXdSb29tIiwicm9vbV9pZCIsInZpZXdfY2FsbCIsIm1ldHJpY3NUcmlnZ2VyIiwiV2lkZ2V0TGF5b3V0U3RvcmUiLCJtb3ZlVG9Db250YWluZXIiLCJDb250YWluZXIiLCJDZW50ZXIiLCJvbkxlYXZlQ2xpY2siLCJkaXNjb25uZWN0IiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJXaWRnZXRNZXNzYWdpbmdTdG9yZSIsImdldE1lc3NhZ2luZ0ZvclVpZCIsIldpZGdldFV0aWxzIiwiZ2V0V2lkZ2V0VWlkIiwidHJhbnNwb3J0Iiwic2VuZCIsIkVsZW1lbnRXaWRnZXRBY3Rpb25zIiwiSGFuZ3VwQ2FsbCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJvbk1vdXNlRG93biIsIm9uQ2xpY2siLCJwZXJzaXN0ZW50V2lkZ2V0SWQiLCJwZXJzaXN0ZW50Um9vbUlkIiwicG9pbnRlckV2ZW50cyIsIlJvdmluZ0FjY2Vzc2libGVCdXR0b24iLCJfdCIsIldpZGdldFR5cGUiLCJKSVRTSSIsIm1hdGNoZXMiLCJ0eXBlIiwidGl0bGUiLCJwbGFjZW1lbnQiLCJJY29uIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3BpcHMvV2lkZ2V0UGlwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgRkMsIE11dGFibGVSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBSb29tRXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgQmFja0ljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL2Fycm93LWxlZnRcIjtcblxuaW1wb3J0IFBlcnNpc3RlbnRBcHAgZnJvbSBcIi4uL2VsZW1lbnRzL1BlcnNpc3RlbnRBcHBcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBWaWV3Um9vbVBheWxvYWQgfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9wYXlsb2Fkcy9WaWV3Um9vbVBheWxvYWRcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7IHVzZUNhbGxGb3JXaWRnZXQgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlQ2FsbFwiO1xuaW1wb3J0IFdpZGdldFN0b3JlIGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvV2lkZ2V0U3RvcmVcIjtcbmltcG9ydCB7IENvbnRhaW5lciwgV2lkZ2V0TGF5b3V0U3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3dpZGdldHMvV2lkZ2V0TGF5b3V0U3RvcmVcIjtcbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9Ub29sYmFyXCI7XG5pbXBvcnQgeyBSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvUm92aW5nVGFiSW5kZXhcIjtcbmltcG9ydCB7IEljb24gYXMgSGFuZ3VwSWNvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvY2FsbC9oYW5ndXAuc3ZnXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IFdpZGdldFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vd2lkZ2V0cy9XaWRnZXRUeXBlXCI7XG5pbXBvcnQgeyBXaWRnZXRNZXNzYWdpbmdTdG9yZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvd2lkZ2V0cy9XaWRnZXRNZXNzYWdpbmdTdG9yZVwiO1xuaW1wb3J0IFdpZGdldFV0aWxzIGZyb20gXCIuLi8uLi8uLi91dGlscy9XaWRnZXRVdGlsc1wiO1xuaW1wb3J0IHsgRWxlbWVudFdpZGdldEFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3dpZGdldHMvRWxlbWVudFdpZGdldEFjdGlvbnNcIjtcbmltcG9ydCB7IEJ1dHRvbkV2ZW50IH0gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIHJvb206IFJvb207XG4gICAgdmlld2luZ1Jvb206IGJvb2xlYW47XG4gICAgb25TdGFydE1vdmluZzogKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gICAgbW92ZVBlcnNpc3RlZEVsZW1lbnQ6IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBBIHBpY3R1cmUtaW4tcGljdHVyZSB2aWV3IGZvciBhIHdpZGdldC4gQWRkaXRpb25hbCBjb250cm9scyBhcmUgc2hvd24gaWYgdGhlXG4gKiB3aWRnZXQgaXMgYSBjYWxsIG9mIHNvbWUgc29ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdpZGdldFBpcDogRkM8UHJvcHM+ID0gKHsgd2lkZ2V0SWQsIHJvb20sIHZpZXdpbmdSb29tLCBvblN0YXJ0TW92aW5nLCBtb3ZlUGVyc2lzdGVkRWxlbWVudCB9KSA9PiB7XG4gICAgY29uc3Qgd2lkZ2V0ID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gV2lkZ2V0U3RvcmUuaW5zdGFuY2UuZ2V0QXBwcyhyb29tLnJvb21JZCkuZmluZCgoYXBwKSA9PiBhcHAuaWQgPT09IHdpZGdldElkKSEsXG4gICAgICAgIFtyb29tLCB3aWRnZXRJZF0sXG4gICAgKTtcblxuICAgIGNvbnN0IHJvb21OYW1lID0gdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgcm9vbSxcbiAgICAgICAgUm9vbUV2ZW50Lk5hbWUsXG4gICAgICAgIHVzZUNhbGxiYWNrKCgpID0+IHJvb20ubmFtZSwgW3Jvb21dKSxcbiAgICApO1xuXG4gICAgY29uc3QgY2FsbCA9IHVzZUNhbGxGb3JXaWRnZXQod2lkZ2V0SWQsIHJvb20ucm9vbUlkKTtcblxuICAgIGNvbnN0IG9uQmFja0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChldjogQnV0dG9uRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKGNhbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICB2aWV3X2NhbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3NUcmlnZ2VyOiBcIldlYkZsb2F0aW5nQ2FsbFdpbmRvd1wiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3aW5nUm9vbSkge1xuICAgICAgICAgICAgICAgIFdpZGdldExheW91dFN0b3JlLmluc3RhbmNlLm1vdmVUb0NvbnRhaW5lcihyb29tLCB3aWRnZXQsIENvbnRhaW5lci5DZW50ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogXCJXZWJGbG9hdGluZ0NhbGxXaW5kb3dcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3Jvb20sIGNhbGwsIHdpZGdldCwgdmlld2luZ1Jvb21dLFxuICAgICk7XG5cbiAgICBjb25zdCBvbkxlYXZlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2OiBCdXR0b25FdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoY2FsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGwuZGlzY29ubmVjdCgpLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxlYXZlIGNhbGxcIiwgZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBc3N1bWVkIHRvIGJlIGEgSml0c2kgd2lkZ2V0XG4gICAgICAgICAgICAgICAgV2lkZ2V0TWVzc2FnaW5nU3RvcmUuaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldE1lc3NhZ2luZ0ZvclVpZChXaWRnZXRVdGlscy5nZXRXaWRnZXRVaWQod2lkZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgPy50cmFuc3BvcnQuc2VuZChFbGVtZW50V2lkZ2V0QWN0aW9ucy5IYW5ndXBDYWxsLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxlYXZlIEppdHNpXCIsIGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2NhbGwsIHdpZGdldF0sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwXCIgb25Nb3VzZURvd249e29uU3RhcnRNb3Zpbmd9IG9uQ2xpY2s9e29uQmFja0NsaWNrfT5cbiAgICAgICAgICAgIDxQZXJzaXN0ZW50QXBwXG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudFdpZGdldElkPXt3aWRnZXRJZH1cbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50Um9vbUlkPXtyb29tLnJvb21JZH1cbiAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgbW92ZVBlcnNpc3RlZEVsZW1lbnQ9e21vdmVQZXJzaXN0ZWRFbGVtZW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgb25Nb3VzZURvd249e29uU3RhcnRNb3Zpbmd9IGNsYXNzTmFtZT1cIm14X1dpZGdldFBpcF9vdmVybGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxUb29sYmFyIGNsYXNzTmFtZT1cIm14X1dpZGdldFBpcF9oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25CYWNrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwX2JhY2tCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e190KFwiYWN0aW9ufGJhY2tcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhY2tJY29uIGNsYXNzTmFtZT1cIm14X0ljb24gbXhfSWNvbl8xNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jvb21OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgIHsoY2FsbCAhPT0gbnVsbCB8fCBXaWRnZXRUeXBlLkpJVFNJLm1hdGNoZXMod2lkZ2V0Py50eXBlKSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2xiYXIgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwX2Zvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uTGVhdmVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwiYWN0aW9ufGxlYXZlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcImFjdGlvbnxsZWF2ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYW5ndXBJY29uIGNsYXNzTmFtZT1cIm14X0ljb24gbXhfSWNvbl8yNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9QZXJzaXN0ZW50QXBwPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQUwsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFTLGtCQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxnQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsUUFBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVksZUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsZ0JBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFdBQUEsR0FBQWYsT0FBQTtBQUNBLElBQUFnQixxQkFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixZQUFBLEdBQUFkLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBa0IscUJBQUEsR0FBQWxCLE9BQUE7QUFBb0YsU0FBQW1CLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFyQix3QkFBQXFCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFB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QkFBZ0IsRUFBRXRELElBQUksQ0FBQ1MsTUFBTztJQUM5QjhDLGFBQWEsRUFBQyxNQUFNO0lBQ3BCcEQsb0JBQW9CLEVBQUVBO0VBQXFCLGdCQUUzQzlDLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUE7SUFBS0UsV0FBVyxFQUFFakQsYUFBYztJQUFDZ0QsU0FBUyxFQUFDO0VBQXNCLGdCQUM3RDdGLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUEsQ0FBQy9FLFFBQUEsQ0FBQWMsT0FBTztJQUFDa0UsU0FBUyxFQUFDO0VBQXFCLGdCQUNwQzdGLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUEsQ0FBQzlFLGVBQUEsQ0FBQXFGLHNCQUFzQjtJQUNuQkosT0FBTyxFQUFFaEMsV0FBWTtJQUNyQjhCLFNBQVMsRUFBQyx5QkFBeUI7SUFDbkMsY0FBWSxJQUFBTyxtQkFBRSxFQUFDLGFBQWE7RUFBRSxnQkFFOUJwRyxNQUFBLENBQUEyQixPQUFBLENBQUFpRSxhQUFBLENBQUN4RixVQUFBLENBQUF1QixPQUFRO0lBQUNrRSxTQUFTLEVBQUM7RUFBb0IsQ0FBRSxDQUFDLEVBQzFDckMsUUFDbUIsQ0FDbkIsQ0FBQyxFQUNULENBQUNsQixJQUFJLEtBQUssSUFBSSxJQUFJK0Qsc0JBQVUsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUN4RCxNQUFNLEVBQUV5RCxJQUFJLENBQUMsa0JBQ3JEeEcsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDL0UsUUFBQSxDQUFBYyxPQUFPO0lBQUNrRSxTQUFTLEVBQUM7RUFBcUIsZ0JBQ3BDN0YsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDOUUsZUFBQSxDQUFBcUYsc0JBQXNCO0lBQ25CSixPQUFPLEVBQUVoQixZQUFhO0lBQ3RCMEIsS0FBSyxFQUFFLElBQUFMLG1CQUFFLEVBQUMsY0FBYyxDQUFFO0lBQzFCLGNBQVksSUFBQUEsbUJBQUUsRUFBQyxjQUFjLENBQUU7SUFDL0JNLFNBQVMsRUFBQztFQUFLLGdCQUVmMUcsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDN0UsT0FBQSxDQUFBNEYsSUFBVTtJQUFDZCxTQUFTLEVBQUM7RUFBb0IsQ0FBRSxDQUN4QixDQUNuQixDQUVaLENBQ00sQ0FDZCxDQUFDO0FBRWQsQ0FBQztBQUFDZSxPQUFBLENBQUFuRSxTQUFBLEdBQUFBLFNBQUEiLCJpZ25vcmVMaXN0IjpbXX0=