matrix-react-sdk
Version:
SDK for matrix.org using React
133 lines (106 loc) • 16.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _FormattingUtils = require("../../../utils/FormattingUtils");
var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore"));
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _NotificationState = require("../../../stores/notifications/NotificationState");
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _dec, _class, _temp;
let NotificationBadge = (_dec = (0, _replaceableComponent.replaceableComponent)("views.rooms.NotificationBadge"), _dec(_class = (_temp = class NotificationBadge extends _react.default.PureComponent
/*:: <XOR<IProps, IClickableProps>, IState>*/
{
constructor(props
/*: IProps*/
) {
super(props);
(0, _defineProperty2.default)(this, "countWatcherRef", void 0);
(0, _defineProperty2.default)(this, "countPreferenceChanged", () => {
this.setState({
showCounts: _SettingsStore.default.getValue("Notifications.alwaysShowBadgeCounts", this.roomId)
});
});
(0, _defineProperty2.default)(this, "onNotificationUpdate", () => {
this.forceUpdate(); // notification state changed - update
});
this.props.notification.on(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
this.state = {
showCounts: _SettingsStore.default.getValue("Notifications.alwaysShowBadgeCounts", this.roomId)
};
this.countWatcherRef = _SettingsStore.default.watchSetting("Notifications.alwaysShowBadgeCounts", this.roomId, this.countPreferenceChanged);
}
get roomId()
/*: string*/
{
// We should convert this to null for safety with the SettingsStore
return this.props.roomId || null;
}
componentWillUnmount() {
_SettingsStore.default.unwatchSetting(this.countWatcherRef);
this.props.notification.off(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
}
componentDidUpdate(prevProps
/*: Readonly<IProps>*/
) {
if (prevProps.notification) {
prevProps.notification.off(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
}
this.props.notification.on(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
}
render()
/*: React.ReactElement*/
{
/* eslint @typescript-eslint/no-unused-vars: ["error", { "ignoreRestSiblings": true }] */
const _this$props = this.props,
{
notification,
forceCount,
roomId,
onClick
} = _this$props,
props = (0, _objectWithoutProperties2.default)(_this$props, ["notification", "forceCount", "roomId", "onClick"]); // Don't show a badge if we don't need to
if (notification.isIdle) return null; // TODO: Update these booleans for FTUE Notifications: https://github.com/vector-im/element-web/issues/14261
// As of writing, that is "if red, show count always" and "optionally show counts instead of dots".
// See git diff for what that boolean state looks like.
// XXX: We ignore this.state.showCounts (the setting which controls counts vs dots).
const hasAnySymbol = notification.symbol || notification.count > 0;
let isEmptyBadge = !hasAnySymbol || !notification.hasUnreadCount;
if (forceCount) {
isEmptyBadge = false;
if (!notification.hasUnreadCount) return null; // Can't render a badge
}
let symbol = notification.symbol || (0, _FormattingUtils.formatCount)(notification.count);
if (isEmptyBadge) symbol = "";
const classes = (0, _classnames.default)({
'mx_NotificationBadge': true,
'mx_NotificationBadge_visible': isEmptyBadge ? true : notification.hasUnreadCount,
'mx_NotificationBadge_highlighted': notification.hasMentions,
'mx_NotificationBadge_dot': isEmptyBadge,
'mx_NotificationBadge_2char': symbol.length > 0 && symbol.length < 3,
'mx_NotificationBadge_3char': symbol.length > 2
});
if (onClick) {
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, {
className: classes,
onClick: onClick
}), /*#__PURE__*/_react.default.createElement("span", {
className: "mx_NotificationBadge_count"
}, symbol));
}
return /*#__PURE__*/_react.default.createElement("div", {
className: classes
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_NotificationBadge_count"
}, symbol));
}
}, _temp)) || _class);
exports.default = NotificationBadge;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL05vdGlmaWNhdGlvbkJhZGdlLnRzeCJdLCJuYW1lcyI6WyJOb3RpZmljYXRpb25CYWRnZSIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzZXRTdGF0ZSIsInNob3dDb3VudHMiLCJTZXR0aW5nc1N0b3JlIiwiZ2V0VmFsdWUiLCJyb29tSWQiLCJmb3JjZVVwZGF0ZSIsIm5vdGlmaWNhdGlvbiIsIm9uIiwiTk9USUZJQ0FUSU9OX1NUQVRFX1VQREFURSIsIm9uTm90aWZpY2F0aW9uVXBkYXRlIiwic3RhdGUiLCJjb3VudFdhdGNoZXJSZWYiLCJ3YXRjaFNldHRpbmciLCJjb3VudFByZWZlcmVuY2VDaGFuZ2VkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bndhdGNoU2V0dGluZyIsIm9mZiIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInJlbmRlciIsImZvcmNlQ291bnQiLCJvbkNsaWNrIiwiaXNJZGxlIiwiaGFzQW55U3ltYm9sIiwic3ltYm9sIiwiY291bnQiLCJpc0VtcHR5QmFkZ2UiLCJoYXNVbnJlYWRDb3VudCIsImNsYXNzZXMiLCJoYXNNZW50aW9ucyIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7O0lBNkJxQkEsaUIsV0FEcEIsZ0RBQXFCLCtCQUFyQixDLHlCQUFELE1BQ3FCQSxpQkFEckIsU0FDK0NDLGVBQU1DO0FBRHJEO0FBQ3lHO0FBR3JHQyxFQUFBQSxXQUFXLENBQUNDO0FBQUQ7QUFBQSxJQUFnQjtBQUN2QixVQUFNQSxLQUFOO0FBRHVCO0FBQUEsa0VBZ0NNLE1BQU07QUFDbkMsV0FBS0MsUUFBTCxDQUFjO0FBQUNDLFFBQUFBLFVBQVUsRUFBRUMsdUJBQWNDLFFBQWQsQ0FBdUIscUNBQXZCLEVBQThELEtB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QUFTLEVBQUU2QixPQUF4QztBQUFpRCxRQUFBLE9BQU8sRUFBRVA7QUFBMUQsdUJBQ0k7QUFBTSxRQUFBLFNBQVMsRUFBQztBQUFoQixTQUE4Q0csTUFBOUMsQ0FESixDQURKO0FBS0g7O0FBRUQsd0JBQ0k7QUFBSyxNQUFBLFNBQVMsRUFBRUk7QUFBaEIsb0JBQ0k7QUFBTSxNQUFBLFNBQVMsRUFBQztBQUFoQixPQUE4Q0osTUFBOUMsQ0FESixDQURKO0FBS0g7O0FBdEZvRyxDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IGZvcm1hdENvdW50IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Zvcm1hdHRpbmdVdGlsc1wiO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdzU3RvcmVcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgeyBYT1IgfSBmcm9tIFwiLi4vLi4vLi4vQHR5cGVzL2NvbW1vblwiO1xuaW1wb3J0IHsgTk9USUZJQ0FUSU9OX1NUQVRFX1VQREFURSwgTm90aWZpY2F0aW9uU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uU3RhdGVcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblN0YXRlO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIGJhZGdlIHdpbGwgc2hvdyBhIGNvdW50IGlmIGF0IGFsbCBwb3NzaWJsZS4gVGhpcyBpcyB0eXBpY2FsbHlcbiAgICAgKiB1c2VkIHRvIG92ZXJyaWRlIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZSBmb3IgdGhpbmdzIGxpa2Ugcm9vbSBzdWJsaXN0cy5cbiAgICAgKi9cbiAgICBmb3JjZUNvdW50PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSByb29tIElELCBpZiBhbnksIHRoZSBiYWRnZSByZXByZXNlbnRzLlxuICAgICAqL1xuICAgIHJvb21JZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElDbGlja2FibGVQcm9wcyBleHRlbmRzIElQcm9wcywgUmVhY3QuSW5wdXRIVE1MQXR0cmlidXRlczxFbGVtZW50PiB7XG4gICAgLyoqXG4gICAgICogSWYgc3BlY2lmaWVkIHdpbGwgcmV0dXJuIGFuIEFjY2Vzc2libGVCdXR0b24gaW5zdGVhZCBvZiBhIGRpdi5cbiAgICAgKi9cbiAgICBvbkNsaWNrPyhldjogUmVhY3QuTW91c2VFdmVudCk7XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIHNob3dDb3VudHM6IGJvb2xlYW47IC8vIHdoZXRoZXIgb3Igbm90IHRvIHNob3cgY291bnRzLiBJbmRlcGVuZGVudCBvZiBwcm9wcy5mb3JjZUNvdW50XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLnJvb21zLk5vdGlmaWNhdGlvbkJhZGdlXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb3RpZmljYXRpb25CYWRnZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8WE9SPElQcm9wcywgSUNsaWNrYWJsZVByb3BzPiwgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSBjb3VudFdhdGNoZXJSZWY6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBJUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnByb3BzLm5vdGlmaWNhdGlvbi5vbihOT1RJRklDQVRJT05fU1RBVEVfVVBEQVRFLCB0aGlzLm9uTm90aWZpY2F0aW9uVXBkYXRlKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2hvd0NvdW50czogU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcIk5vdGlmaWNhdGlvbnMuYWx3YXlzU2hvd0JhZGdlQ291bnRzXCIsIHRoaXMucm9vbUlkKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNvdW50V2F0Y2hlclJlZiA9IFNldHRpbmdzU3RvcmUud2F0Y2hTZXR0aW5nKFxuICAgICAgICAgICAgXCJOb3RpZmljYXRpb25zLmFsd2F5c1Nob3dCYWRnZUNvdW50c1wiLCB0aGlzLnJvb21JZCxcbiAgICAgICAgICAgIHRoaXMuY291bnRQcmVmZXJlbmNlQ2hhbmdlZCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb29tSWQoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGNvbnZlcnQgdGhpcyB0byBudWxsIGZvciBzYWZldHkgd2l0aCB0aGUgU2V0dGluZ3NTdG9yZVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5yb29tSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIFNldHRpbmdzU3RvcmUudW53YXRjaFNldHRpbmcodGhpcy5jb3VudFdhdGNoZXJSZWYpO1xuICAgICAgICB0aGlzLnByb3BzLm5vdGlmaWNhdGlvbi5vZmYoTk9USUZJQ0FUSU9OX1NUQVRFX1VQREFURSwgdGhpcy5vbk5vdGlmaWNhdGlvblVwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFJlYWRvbmx5PElQcm9wcz4pIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5ub3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgIHByZXZQcm9wcy5ub3RpZmljYXRpb24ub2ZmKE5PVElGSUNBVElPTl9TVEFURV9VUERBVEUsIHRoaXMub25Ob3RpZmljYXRpb25VcGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5ub3RpZmljYXRpb24ub24oTk9USUZJQ0FUSU9OX1NUQVRFX1VQREFURSwgdGhpcy5vbk5vdGlmaWNhdGlvblVwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3VudFByZWZlcmVuY2VDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzaG93Q291bnRzOiBTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiTm90aWZpY2F0aW9ucy5hbHdheXNTaG93QmFkZ2VDb3VudHNcIiwgdGhpcy5yb29tSWQpfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Ob3RpZmljYXRpb25VcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTsgLy8gbm90aWZpY2F0aW9uIHN0YXRlIGNoYW5nZWQgLSB1cGRhdGVcbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICAgICAgICAvKiBlc2xpbnQgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzOiBbXCJlcnJvclwiLCB7IFwiaWdub3JlUmVzdFNpYmxpbmdzXCI6IHRydWUgfV0gKi9cbiAgICAgICAgY29uc3Qge25vdGlmaWNhdGlvbiwgZm9yY2VDb3VudCwgcm9vbUlkLCBvbkNsaWNrLCAuLi5wcm9wc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIC8vIERvbid0IHNob3cgYSBiYWRnZSBpZiB3ZSBkb24ndCBuZWVkIHRvXG4gICAgICAgIGlmIChub3RpZmljYXRpb24uaXNJZGxlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAvLyBUT0RPOiBVcGRhdGUgdGhlc2UgYm9vbGVhbnMgZm9yIEZUVUUgTm90aWZpY2F0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL3ZlY3Rvci1pbS9lbGVtZW50LXdlYi9pc3N1ZXMvMTQyNjFcbiAgICAgICAgLy8gQXMgb2Ygd3JpdGluZywgdGhhdCBpcyBcImlmIHJlZCwgc2hvdyBjb3VudCBhbHdheXNcIiBhbmQgXCJvcHRpb25hbGx5IHNob3cgY291bnRzIGluc3RlYWQgb2YgZG90c1wiLlxuICAgICAgICAvLyBTZWUgZ2l0IGRpZmYgZm9yIHdoYXQgdGhhdCBib29sZWFuIHN0YXRlIGxvb2tzIGxpa2UuXG4gICAgICAgIC8vIFhYWDogV2UgaWdub3JlIHRoaXMuc3RhdGUuc2hvd0NvdW50cyAodGhlIHNldHRpbmcgd2hpY2ggY29udHJvbHMgY291bnRzIHZzIGRvdHMpLlxuICAgICAgICBjb25zdCBoYXNBbnlTeW1ib2wgPSBub3RpZmljYXRpb24uc3ltYm9sIHx8IG5vdGlmaWNhdGlvbi5jb3VudCA+IDA7XG4gICAgICAgIGxldCBpc0VtcHR5QmFkZ2UgPSAhaGFzQW55U3ltYm9sIHx8ICFub3RpZmljYXRpb24uaGFzVW5yZWFkQ291bnQ7XG4gICAgICAgIGlmIChmb3JjZUNvdW50KSB7XG4gICAgICAgICAgICBpc0VtcHR5QmFkZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uLmhhc1VucmVhZENvdW50KSByZXR1cm4gbnVsbDsgLy8gQ2FuJ3QgcmVuZGVyIGEgYmFkZ2VcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW1ib2wgPSBub3RpZmljYXRpb24uc3ltYm9sIHx8IGZvcm1hdENvdW50KG5vdGlmaWNhdGlvbi5jb3VudCk7XG4gICAgICAgIGlmIChpc0VtcHR5QmFkZ2UpIHN5bWJvbCA9IFwiXCI7XG5cbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAgICAgJ214X05vdGlmaWNhdGlvbkJhZGdlJzogdHJ1ZSxcbiAgICAgICAgICAgICdteF9Ob3RpZmljYXRpb25CYWRnZV92aXNpYmxlJzogaXNFbXB0eUJhZGdlID8gdHJ1ZSA6IG5vdGlmaWNhdGlvbi5oYXNVbnJlYWRDb3VudCxcbiAgICAgICAgICAgICdteF9Ob3RpZmljYXRpb25CYWRnZV9oaWdobGlnaHRlZCc6IG5vdGlmaWNhdGlvbi5oYXNNZW50aW9ucyxcbiAgICAgICAgICAgICdteF9Ob3RpZmljYXRpb25CYWRnZV9kb3QnOiBpc0VtcHR5QmFkZ2UsXG4gICAgICAgICAgICAnbXhfTm90aWZpY2F0aW9uQmFkZ2VfMmNoYXInOiBzeW1ib2wubGVuZ3RoID4gMCAmJiBzeW1ib2wubGVuZ3RoIDwgMyxcbiAgICAgICAgICAgICdteF9Ob3RpZmljYXRpb25CYWRnZV8zY2hhcic6IHN5bWJvbC5sZW5ndGggPiAyLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT17Y2xhc3Nlc30gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14X05vdGlmaWNhdGlvbkJhZGdlX2NvdW50XCI+e3N5bWJvbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlc30+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfTm90aWZpY2F0aW9uQmFkZ2VfY291bnRcIj57c3ltYm9sfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==