UNPKG

matrix-react-sdk

Version:
122 lines (119 loc) 21 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Formatting = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _languageHandler = require("../../../languageHandler"); var _RovingTabIndex = require("../../../accessibility/RovingTabIndex"); var _Toolbar = _interopRequireDefault(require("../../../accessibility/Toolbar")); 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 2019-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. */ let Formatting = exports.Formatting = /*#__PURE__*/function (Formatting) { Formatting["Bold"] = "bold"; Formatting["Italics"] = "italics"; Formatting["Strikethrough"] = "strikethrough"; Formatting["Code"] = "code"; Formatting["Quote"] = "quote"; Formatting["InsertLink"] = "insert_link"; return Formatting; }({}); class MessageComposerFormatBar extends _react.default.PureComponent { constructor(props) { super(props); (0, _defineProperty2.default)(this, "formatBarRef", /*#__PURE__*/(0, _react.createRef)()); this.state = { visible: false }; } render() { const classes = (0, _classnames.default)("mx_MessageComposerFormatBar", { mx_MessageComposerFormatBar_shown: this.state.visible }); return /*#__PURE__*/_react.default.createElement(_Toolbar.default, { className: classes, ref: this.formatBarRef, "aria-label": (0, _languageHandler._t)("composer|formatting_toolbar_label") }, /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("composer|format_bold"), onClick: () => this.props.onAction(Formatting.Bold), icon: "Bold", shortcut: this.props.shortcuts.bold, visible: this.state.visible }), /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("composer|format_italics"), onClick: () => this.props.onAction(Formatting.Italics), icon: "Italic", shortcut: this.props.shortcuts.italics, visible: this.state.visible }), /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("composer|format_strikethrough"), onClick: () => this.props.onAction(Formatting.Strikethrough), icon: "Strikethrough", visible: this.state.visible }), /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("composer|format_code_block"), onClick: () => this.props.onAction(Formatting.Code), icon: "Code", shortcut: this.props.shortcuts.code, visible: this.state.visible }), /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("action|quote"), onClick: () => this.props.onAction(Formatting.Quote), icon: "Quote", shortcut: this.props.shortcuts.quote, visible: this.state.visible }), /*#__PURE__*/_react.default.createElement(FormatButton, { label: (0, _languageHandler._t)("composer|format_insert_link"), onClick: () => this.props.onAction(Formatting.InsertLink), icon: "InsertLink", shortcut: this.props.shortcuts.insert_link, visible: this.state.visible })); } showAt(selectionRect) { if (!this.formatBarRef.current?.parentElement) return; this.setState({ visible: true }); const parentRect = this.formatBarRef.current.parentElement.getBoundingClientRect(); this.formatBarRef.current.style.left = `${selectionRect.left - parentRect.left}px`; const halfBarHeight = this.formatBarRef.current.clientHeight / 2; // used to center the bar const offset = halfBarHeight + 2; // makes sure the bar won't cover selected text const offsetLimit = halfBarHeight + offset; const position = Math.max(selectionRect.top - parentRect.top - offsetLimit, -offsetLimit); this.formatBarRef.current.style.top = `${position}px`; } hide() { this.setState({ visible: false }); } } exports.default = MessageComposerFormatBar; class FormatButton extends _react.default.PureComponent { render() { const className = `mx_MessageComposerFormatBar_button mx_MessageComposerFormatBar_buttonIcon${this.props.icon}`; // element="button" and type="button" are necessary for the buttons to work on WebKit, // otherwise the text is deselected before onClick can ever be called return /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleButton, { element: "button", type: "button", onClick: this.props.onClick, "aria-label": this.props.label, title: this.props.label, caption: this.props.shortcut, className: className }); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX1JvdmluZ1RhYkluZGV4IiwiX1Rvb2xiYXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJGb3JtYXR0aW5nIiwiZXhwb3J0cyIsIk1lc3NhZ2VDb21wb3NlckZvcm1hdEJhciIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkyIiwiY3JlYXRlUmVmIiwic3RhdGUiLCJ2aXNpYmxlIiwicmVuZGVyIiwiY2xhc3NlcyIsImNsYXNzTmFtZXMiLCJteF9NZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXJfc2hvd24iLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiZm9ybWF0QmFyUmVmIiwiX3QiLCJGb3JtYXRCdXR0b24iLCJsYWJlbCIsIm9uQ2xpY2siLCJvbkFjdGlvbiIsIkJvbGQiLCJpY29uIiwic2hvcnRjdXQiLCJzaG9ydGN1dHMiLCJib2xkIiwiSXRhbGljcyIsIml0YWxpY3MiLCJTdHJpa2V0aHJvdWdoIiwiQ29kZSIsImNvZGUiLCJRdW90ZSIsInF1b3RlIiwiSW5zZXJ0TGluayIsImluc2VydF9saW5rIiwic2hvd0F0Iiwic2VsZWN0aW9uUmVjdCIsImN1cnJlbnQiLCJwYXJlbnRFbGVtZW50Iiwic2V0U3RhdGUiLCJwYXJlbnRSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic3R5bGUiLCJsZWZ0IiwiaGFsZkJhckhlaWdodCIsImNsaWVudEhlaWdodCIsIm9mZnNldCIsIm9mZnNldExpbWl0IiwicG9zaXRpb24iLCJNYXRoIiwibWF4IiwidG9wIiwiaGlkZSIsIlJvdmluZ0FjY2Vzc2libGVCdXR0b24iLCJlbGVtZW50IiwidHlwZSIsInRpdGxlIiwiY2FwdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL01lc3NhZ2VDb21wb3NlckZvcm1hdEJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTktMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IFJvdmluZ0FjY2Vzc2libGVCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9Sb3ZpbmdUYWJJbmRleFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvVG9vbGJhclwiO1xuXG5leHBvcnQgZW51bSBGb3JtYXR0aW5nIHtcbiAgICBCb2xkID0gXCJib2xkXCIsXG4gICAgSXRhbGljcyA9IFwiaXRhbGljc1wiLFxuICAgIFN0cmlrZXRocm91Z2ggPSBcInN0cmlrZXRocm91Z2hcIixcbiAgICBDb2RlID0gXCJjb2RlXCIsXG4gICAgUXVvdGUgPSBcInF1b3RlXCIsXG4gICAgSW5zZXJ0TGluayA9IFwiaW5zZXJ0X2xpbmtcIixcbn1cblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgc2hvcnRjdXRzOiBQYXJ0aWFsPFJlY29yZDxGb3JtYXR0aW5nLCBzdHJpbmc+PjtcbiAgICBvbkFjdGlvbihhY3Rpb246IEZvcm1hdHRpbmcpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICB2aXNpYmxlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtYXRCYXJSZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IHZpc2libGU6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyhcIm14X01lc3NhZ2VDb21wb3NlckZvcm1hdEJhclwiLCB7XG4gICAgICAgICAgICBteF9NZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXJfc2hvd246IHRoaXMuc3RhdGUudmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VG9vbGJhciBjbGFzc05hbWU9e2NsYXNzZXN9IHJlZj17dGhpcy5mb3JtYXRCYXJSZWZ9IGFyaWEtbGFiZWw9e190KFwiY29tcG9zZXJ8Zm9ybWF0dGluZ190b29sYmFyX2xhYmVsXCIpfT5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImNvbXBvc2VyfGZvcm1hdF9ib2xkXCIpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9uQWN0aW9uKEZvcm1hdHRpbmcuQm9sZCl9XG4gICAgICAgICAgICAgICAgICAgIGljb249XCJCb2xkXCJcbiAgICAgICAgICAgICAgICAgICAgc2hvcnRjdXQ9e3RoaXMucHJvcHMuc2hvcnRjdXRzLmJvbGR9XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU9e3RoaXMuc3RhdGUudmlzaWJsZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxGb3JtYXRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tcG9zZXJ8Zm9ybWF0X2l0YWxpY3NcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25BY3Rpb24oRm9ybWF0dGluZy5JdGFsaWNzKX1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cIkl0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0PXt0aGlzLnByb3BzLnNob3J0Y3V0cy5pdGFsaWNzfVxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlPXt0aGlzLnN0YXRlLnZpc2libGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImNvbXBvc2VyfGZvcm1hdF9zdHJpa2V0aHJvdWdoXCIpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9uQWN0aW9uKEZvcm1hdHRpbmcuU3RyaWtldGhyb3VnaCl9XG4gICAgICAgICAgICAgICAgICAgIGljb249XCJTdHJpa2V0aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZT17dGhpcy5zdGF0ZS52aXNpYmxlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEZvcm1hdEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJjb21wb3Nlcnxmb3JtYXRfY29kZV9ibG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkFjdGlvbihGb3JtYXR0aW5nLkNvZGUpfVxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0PXt0aGlzLnByb3BzLnNob3J0Y3V0cy5jb2RlfVxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlPXt0aGlzLnN0YXRlLnZpc2libGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImFjdGlvbnxxdW90ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkFjdGlvbihGb3JtYXR0aW5nLlF1b3RlKX1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cIlF1b3RlXCJcbiAgICAgICAgICAgICAgICAgICAgc2hvcnRjdXQ9e3RoaXMucHJvcHMuc2hvcnRjdXRzLnF1b3RlfVxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlPXt0aGlzLnN0YXRlLnZpc2libGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImNvbXBvc2VyfGZvcm1hdF9pbnNlcnRfbGlua1wiKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkFjdGlvbihGb3JtYXR0aW5nLkluc2VydExpbmspfVxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiSW5zZXJ0TGlua1wiXG4gICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0PXt0aGlzLnByb3BzLnNob3J0Y3V0cy5pbnNlcnRfbGlua31cbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZT17dGhpcy5zdGF0ZS52aXNpYmxlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dBdChzZWxlY3Rpb25SZWN0OiBET01SZWN0KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRCYXJSZWYuY3VycmVudD8ucGFyZW50RWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2aXNpYmxlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5mb3JtYXRCYXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmZvcm1hdEJhclJlZi5jdXJyZW50LnN0eWxlLmxlZnQgPSBgJHtzZWxlY3Rpb25SZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnR9cHhgO1xuICAgICAgICBjb25zdCBoYWxmQmFySGVpZ2h0ID0gdGhpcy5mb3JtYXRCYXJSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgLyAyOyAvLyB1c2VkIHRvIGNlbnRlciB0aGUgYmFyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGhhbGZCYXJIZWlnaHQgKyAyOyAvLyBtYWtlcyBzdXJlIHRoZSBiYXIgd29uJ3QgY292ZXIgc2VsZWN0ZWQgdGV4dFxuICAgICAgICBjb25zdCBvZmZzZXRMaW1pdCA9IGhhbGZCYXJIZWlnaHQgKyBvZmZzZXQ7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gTWF0aC5tYXgoc2VsZWN0aW9uUmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcCAtIG9mZnNldExpbWl0LCAtb2Zmc2V0TGltaXQpO1xuICAgICAgICB0aGlzLmZvcm1hdEJhclJlZi5jdXJyZW50LnN0eWxlLnRvcCA9IGAke3Bvc2l0aW9ufXB4YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZpc2libGU6IGZhbHNlIH0pO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIElGb3JtYXRCdXR0b25Qcm9wcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgc2hvcnRjdXQ/OiBzdHJpbmc7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gICAgb25DbGljaygpOiB2b2lkO1xufVxuXG5jbGFzcyBGb3JtYXRCdXR0b24gZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElGb3JtYXRCdXR0b25Qcm9wcz4ge1xuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gYG14X01lc3NhZ2VDb21wb3NlckZvcm1hdEJhcl9idXR0b24gbXhfTWVzc2FnZUNvbXBvc2VyRm9ybWF0QmFyX2J1dHRvbkljb24ke3RoaXMucHJvcHMuaWNvbn1gO1xuXG4gICAgICAgIC8vIGVsZW1lbnQ9XCJidXR0b25cIiBhbmQgdHlwZT1cImJ1dHRvblwiIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBidXR0b25zIHRvIHdvcmsgb24gV2ViS2l0LFxuICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHRleHQgaXMgZGVzZWxlY3RlZCBiZWZvcmUgb25DbGljayBjYW4gZXZlciBiZSBjYWxsZWRcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgZWxlbWVudD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgICAgY2FwdGlvbj17dGhpcy5wcm9wcy5zaG9ydGN1dH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxlQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFBcUQsU0FBQU0seUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVIsd0JBQUFRLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFB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