matrix-react-sdk
Version:
SDK for matrix.org using React
171 lines (166 loc) • 25.6 kB
JavaScript
"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 _edit = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/edit"));
var _share = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/share"));
var _delete = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/delete"));
var _compoundWeb = require("@vector-im/compound-web");
var _classnames = _interopRequireDefault(require("classnames"));
var _languageHandler = require("../../../languageHandler");
var _Media = require("../../../customisations/Media");
var _BrowserWorkarounds = require("../../../utils/BrowserWorkarounds");
var _useId = require("../../../utils/useId");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _BaseAvatar = _interopRequireDefault(require("../avatars/BaseAvatar"));
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-2024 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 AvatarSettingContextMenu = ({
trigger,
onUploadSelect,
onRemoveSelect,
menuOpen,
onOpenChange
}) => {
return /*#__PURE__*/_react.default.createElement(_compoundWeb.Menu, {
trigger: trigger,
title: (0, _languageHandler._t)("action|set_avatar"),
showTitle: false,
open: menuOpen,
onOpenChange: onOpenChange
}, /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, {
as: "div",
Icon: /*#__PURE__*/_react.default.createElement(_share.default, {
width: "24px",
height: "24px"
}),
label: (0, _languageHandler._t)("action|upload_file"),
onSelect: onUploadSelect
}), onRemoveSelect && /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, {
as: "div",
Icon: /*#__PURE__*/_react.default.createElement(_delete.default, {
width: "24px",
height: "24px"
}),
className: "mx_AvatarSetting_removeMenuItem",
label: (0, _languageHandler._t)("action|remove"),
onSelect: onRemoveSelect
}));
};
/**
* Component for setting or removing an avatar on something (eg. a user or a room)
*/
const AvatarSetting = ({
avatar,
avatarAltText,
onChange,
removeAvatar,
disabled,
placeholderId,
placeholderName
}) => {
const fileInputRef = /*#__PURE__*/(0, _react.createRef)();
// Real URL that we can supply to the img element, either a data URL or whatever mediaFromMxc gives
// This represents whatever avatar the user has chosen at the time
const [avatarURL, setAvatarURL] = (0, _react.useState)(undefined);
(0, _react.useEffect)(() => {
if (avatar instanceof File) {
const reader = new FileReader();
reader.onload = () => {
setAvatarURL(reader.result);
};
reader.readAsDataURL(avatar);
} else if (avatar) {
setAvatarURL((0, _Media.mediaFromMxc)(avatar).getSquareThumbnailHttp(96) ?? undefined);
} else {
setAvatarURL(undefined);
}
}, [avatar]);
// Prevents ID collisions when this component is used more than once on the same page.
const a11yId = (0, _useId.useId)();
const onFileChanged = (0, _react.useCallback)(e => {
if (e.target.files) onChange?.(e.target.files[0]);
}, [onChange]);
const uploadAvatar = (0, _react.useCallback)(() => {
fileInputRef.current?.click();
}, [fileInputRef]);
const [menuOpen, setMenuOpen] = (0, _react.useState)(false);
const onOpenChange = (0, _react.useCallback)(newOpen => {
setMenuOpen(newOpen);
}, []);
let avatarElement = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
element: "div",
onClick: uploadAvatar,
className: "mx_AvatarSetting_avatarPlaceholder mx_AvatarSetting_avatarDisplay",
"aria-labelledby": disabled ? undefined : a11yId
// Inhibit tab stop as we have explicit upload/remove buttons
,
tabIndex: -1,
disabled: disabled
}, /*#__PURE__*/_react.default.createElement(_BaseAvatar.default, {
idName: placeholderId,
name: placeholderName,
size: "90px"
}));
if (avatarURL) {
avatarElement = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
element: "img",
className: "mx_AvatarSetting_avatarDisplay",
src: avatarURL,
alt: avatarAltText,
onClick: uploadAvatar
// Inhibit tab stop as we have explicit upload/remove buttons
,
tabIndex: -1,
disabled: disabled
});
}
let uploadAvatarBtn;
if (!disabled) {
const uploadButtonClasses = (0, _classnames.default)("mx_AvatarSetting_uploadButton", {
mx_AvatarSetting_uploadButton_active: menuOpen
});
uploadAvatarBtn = /*#__PURE__*/_react.default.createElement("div", {
className: uploadButtonClasses
}, /*#__PURE__*/_react.default.createElement(_edit.default, {
width: "20px",
height: "20px"
}));
}
const content = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_AvatarSetting_avatar",
role: "group",
"aria-label": avatarAltText
}, avatarElement, uploadAvatarBtn);
if (disabled) {
return content;
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AvatarSettingContextMenu, {
trigger: content,
onUploadSelect: uploadAvatar,
onRemoveSelect: removeAvatar,
menuOpen: menuOpen,
onOpenChange: onOpenChange
}), /*#__PURE__*/_react.default.createElement("input", {
type: "file",
style: {
display: "none"
},
ref: fileInputRef,
onClick: _BrowserWorkarounds.chromeFileInputFix,
onChange: onFileChanged,
accept: "image/*",
alt: (0, _languageHandler._t)("action|upload")
}));
};
var _default = exports.default = AvatarSetting;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZWRpdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2hhcmUiLCJfZGVsZXRlIiwiX2NvbXBvdW5kV2ViIiwiX2NsYXNzbmFtZXMiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX01lZGlhIiwiX0Jyb3dzZXJXb3JrYXJvdW5kcyIsIl91c2VJZCIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0Jhc2VBdmF0YXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJBdmF0YXJTZXR0aW5nQ29udGV4dE1lbnUiLCJ0cmlnZ2VyIiwib25VcGxvYWRTZWxlY3QiLCJvblJlbW92ZVNlbGVjdCIsIm1lbnVPcGVuIiwib25PcGVuQ2hhbmdlIiwiY3JlYXRlRWxlbWVudCIsIk1lbnUiLCJ0aXRsZSIsIl90Iiwic2hvd1RpdGxlIiwib3BlbiIsIk1lbnVJdGVtIiwiYXMiLCJJY29uIiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbCIsIm9uU2VsZWN0IiwiY2xhc3NOYW1lIiwiQXZhdGFyU2V0dGluZyIsImF2YXRhciIsImF2YXRhckFsdFRleHQiLCJvbkNoYW5nZSIsInJlbW92ZUF2YXRhciIsImRpc2FibGVkIiwicGxhY2Vob2xkZXJJZCIsInBsYWNlaG9sZGVyTmFtZSIsImZpbGVJbnB1dFJlZiIsImNyZWF0ZVJlZiIsImF2YXRhclVSTCIsInNldEF2YXRhclVSTCIsInVzZVN0YXRlIiwidW5kZWZpbmVkIiwidXNlRWZmZWN0IiwiRmlsZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwibWVkaWFGcm9tTXhjIiwiZ2V0U3F1YXJlVGh1bWJuYWlsSHR0cCIsImExMXlJZCIsInVzZUlkIiwib25GaWxlQ2hhbmdlZCIsInVzZUNhbGxiYWNrIiwidGFyZ2V0IiwiZmlsZXMiLCJ1cGxvYWRBdmF0YXIiLCJjdXJyZW50IiwiY2xpY2siLCJzZXRNZW51T3BlbiIsIm5ld09wZW4iLCJhdmF0YXJFbGVtZW50IiwiZWxlbWVudCIsIm9uQ2xpY2siLCJ0YWJJbmRleCIsImlkTmFtZSIsIm5hbWUiLCJzaXplIiwic3JjIiwiYWx0IiwidXBsb2FkQXZhdGFyQnRuIiwidXBsb2FkQnV0dG9uQ2xhc3NlcyIsImNsYXNzTmFtZXMiLCJteF9BdmF0YXJTZXR0aW5nX3VwbG9hZEJ1dHRvbl9hY3RpdmUiLCJjb250ZW50Iiwicm9sZSIsIkZyYWdtZW50IiwidHlwZSIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsImNocm9tZUZpbGVJbnB1dEZpeCIsImFjY2VwdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL0F2YXRhclNldHRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE5LTIwMjQgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgY3JlYXRlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IEVkaXRJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9lZGl0XCI7XG5pbXBvcnQgVXBsb2FkSWNvbiBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvc2hhcmVcIjtcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9kZWxldGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVJdGVtIH0gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtd2ViXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IG1lZGlhRnJvbU14YyB9IGZyb20gXCIuLi8uLi8uLi9jdXN0b21pc2F0aW9ucy9NZWRpYVwiO1xuaW1wb3J0IHsgY2hyb21lRmlsZUlucHV0Rml4IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Jyb3dzZXJXb3JrYXJvdW5kc1wiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXNlSWRcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9CYXNlQXZhdGFyXCI7XG5cbmludGVyZmFjZSBNZW51UHJvcHMge1xuICAgIHRyaWdnZXI6IFJlYWN0Tm9kZTtcbiAgICBvblVwbG9hZFNlbGVjdDogKCkgPT4gdm9pZDtcbiAgICBvblJlbW92ZVNlbGVjdD86ICgpID0+IHZvaWQ7XG4gICAgbWVudU9wZW46IGJvb2xlYW47XG4gICAgb25PcGVuQ2hhbmdlOiAobmV3T3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgQXZhdGFyU2V0dGluZ0NvbnRleHRNZW51OiBSZWFjdC5GQzxNZW51UHJvcHM+ID0gKHtcbiAgICB0cmlnZ2VyLFxuICAgIG9uVXBsb2FkU2VsZWN0LFxuICAgIG9uUmVtb3ZlU2VsZWN0LFxuICAgIG1lbnVPcGVuLFxuICAgIG9uT3BlbkNoYW5nZSxcbn0pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8TWVudVxuICAgICAgICAgICAgdHJpZ2dlcj17dHJpZ2dlcn1cbiAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxzZXRfYXZhdGFyXCIpfVxuICAgICAgICAgICAgc2hvd1RpdGxlPXtmYWxzZX1cbiAgICAgICAgICAgIG9wZW49e21lbnVPcGVufVxuICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgIGFzPVwiZGl2XCJcbiAgICAgICAgICAgICAgICBJY29uPXs8VXBsb2FkSWNvbiB3aWR0aD1cIjI0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgLz59XG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiYWN0aW9ufHVwbG9hZF9maWxlXCIpfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtvblVwbG9hZFNlbGVjdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7b25SZW1vdmVTZWxlY3QgJiYgKFxuICAgICAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICBhcz1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgIEljb249ezxEZWxldGVJY29uIHdpZHRoPVwiMjRweFwiIGhlaWdodD1cIjI0cHhcIiAvPn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXZhdGFyU2V0dGluZ19yZW1vdmVNZW51SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImFjdGlvbnxyZW1vdmVcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtvblJlbW92ZVNlbGVjdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9NZW51PlxuICAgICk7XG59O1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYXZhdGFyIFVSTCwgYXMgYW4gbXhjIFVSTCBvciBhIEZpbGUuXG4gICAgICogR2VuZXJhbGx5LCBhbiBteGMgVVJMIHdvdWxkIGJlIHNwZWNpZmllZCB1bnRpbCB0aGUgdXNlciBzZWxlY3RzIGEgZmlsZSwgdGhlblxuICAgICAqIHRoZSBmaWxlIHN1cHBsaWVkIGJ5IHRoZSBvbkNoYW5nZSBjYWxsYmFjayB3b3VsZCBiZSBzdXBwbGllZCBoZXJlIHVudGlsIGl0J3NcbiAgICAgKiBzYXZlZC5cbiAgICAgKi9cbiAgICBhdmF0YXI/OiBzdHJpbmcgfCBGaWxlO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHVzZXIgY2Fubm90IGNoYW5nZSB0aGUgYXZhdGFyXG4gICAgICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgbmV3IGF2YXRhclxuICAgICAqIFRoZSBjYWxsYmFjayBpcyBwYXNzZWQgYSBGaWxlIG9iamVjdCBmb3IgdGhlIG5ldyBhdmF0YXIgZGF0YVxuICAgICAqL1xuICAgIG9uQ2hhbmdlPzogKGY6IEZpbGUpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB3aXNoZXMgdG8gcmVtb3ZlIHRoZSBhdmF0YXJcbiAgICAgKi9cbiAgICByZW1vdmVBdmF0YXI/OiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFsdCB0ZXh0IGZvciB0aGUgYXZhdGFyXG4gICAgICovXG4gICAgYXZhdGFyQWx0VGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHRvIHVzZSBmb3IgY29tcHV0aW5nIHRoZSBjb2xvdXIgb2YgdGhlIHBsYWNlaG9sZGVyIGF2YXRhciBpZiBubyBhdmF0YXIgaXMgc2V0XG4gICAgICovXG4gICAgcGxhY2Vob2xkZXJJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHRvIHVzZSBmb3IgdGhlIHBsYWNlaG9sZGVyIGRpc3BsYXkgaWYgbm8gYXZhdGFyIGlzIHNldFxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCBmb3Igc2V0dGluZyBvciByZW1vdmluZyBhbiBhdmF0YXIgb24gc29tZXRoaW5nIChlZy4gYSB1c2VyIG9yIGEgcm9vbSlcbiAqL1xuY29uc3QgQXZhdGFyU2V0dGluZzogUmVhY3QuRkM8SVByb3BzPiA9ICh7XG4gICAgYXZhdGFyLFxuICAgIGF2YXRhckFsdFRleHQsXG4gICAgb25DaGFuZ2UsXG4gICAgcmVtb3ZlQXZhdGFyLFxuICAgIGRpc2FibGVkLFxuICAgIHBsYWNlaG9sZGVySWQsXG4gICAgcGxhY2Vob2xkZXJOYW1lLFxufSkgPT4ge1xuICAgIGNvbnN0IGZpbGVJbnB1dFJlZiA9IGNyZWF0ZVJlZjxIVE1MSW5wdXRFbGVtZW50PigpO1xuXG4gICAgLy8gUmVhbCBVUkwgdGhhdCB3ZSBjYW4gc3VwcGx5IHRvIHRoZSBpbWcgZWxlbWVudCwgZWl0aGVyIGEgZGF0YSBVUkwgb3Igd2hhdGV2ZXIgbWVkaWFGcm9tTXhjIGdpdmVzXG4gICAgLy8gVGhpcyByZXByZXNlbnRzIHdoYXRldmVyIGF2YXRhciB0aGUgdXNlciBoYXMgY2hvc2VuIGF0IHRoZSB0aW1lXG4gICAgY29uc3QgW2F2YXRhclVSTCwgc2V0QXZhdGFyVVJMXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXZhdGFyIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0QXZhdGFyVVJMKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChhdmF0YXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGF2YXRhcikge1xuICAgICAgICAgICAgc2V0QXZhdGFyVVJMKG1lZGlhRnJvbU14YyhhdmF0YXIpLmdldFNxdWFyZVRodW1ibmFpbEh0dHAoOTYpID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRBdmF0YXJVUkwodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH0sIFthdmF0YXJdKTtcblxuICAgIC8vIFByZXZlbnRzIElEIGNvbGxpc2lvbnMgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIHBhZ2UuXG4gICAgY29uc3QgYTExeUlkID0gdXNlSWQoKTtcblxuICAgIGNvbnN0IG9uRmlsZUNoYW5nZWQgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMpIG9uQ2hhbmdlPy4oZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICB9LFxuICAgICAgICBbb25DaGFuZ2VdLFxuICAgICk7XG5cbiAgICBjb25zdCB1cGxvYWRBdmF0YXIgPSB1c2VDYWxsYmFjaygoKTogdm9pZCA9PiB7XG4gICAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpO1xuICAgIH0sIFtmaWxlSW5wdXRSZWZdKTtcblxuICAgIGNvbnN0IFttZW51T3Blbiwgc2V0TWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3Qgb25PcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG5ld09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgc2V0TWVudU9wZW4obmV3T3Blbik7XG4gICAgfSwgW10pO1xuXG4gICAgbGV0IGF2YXRhckVsZW1lbnQgPSAoXG4gICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICBlbGVtZW50PVwiZGl2XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3VwbG9hZEF2YXRhcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0F2YXRhclNldHRpbmdfYXZhdGFyUGxhY2Vob2xkZXIgbXhfQXZhdGFyU2V0dGluZ19hdmF0YXJEaXNwbGF5XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBhMTF5SWR9XG4gICAgICAgICAgICAvLyBJbmhpYml0IHRhYiBzdG9wIGFzIHdlIGhhdmUgZXhwbGljaXQgdXBsb2FkL3JlbW92ZSBidXR0b25zXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxCYXNlQXZhdGFyIGlkTmFtZT17cGxhY2Vob2xkZXJJZH0gbmFtZT17cGxhY2Vob2xkZXJOYW1lfSBzaXplPVwiOTBweFwiIC8+XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xuICAgIGlmIChhdmF0YXJVUkwpIHtcbiAgICAgICAgYXZhdGFyRWxlbWVudCA9IChcbiAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgZWxlbWVudD1cImltZ1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXZhdGFyU2V0dGluZ19hdmF0YXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICBzcmM9e2F2YXRhclVSTH1cbiAgICAgICAgICAgICAgICBhbHQ9e2F2YXRhckFsdFRleHR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dXBsb2FkQXZhdGFyfVxuICAgICAgICAgICAgICAgIC8vIEluaGliaXQgdGFiIHN0b3AgYXMgd2UgaGF2ZSBleHBsaWNpdCB1cGxvYWQvcmVtb3ZlIGJ1dHRvbnNcbiAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdXBsb2FkQXZhdGFyQnRuOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHVwbG9hZEJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKFwibXhfQXZhdGFyU2V0dGluZ191cGxvYWRCdXR0b25cIiwge1xuICAgICAgICAgICAgbXhfQXZhdGFyU2V0dGluZ191cGxvYWRCdXR0b25fYWN0aXZlOiBtZW51T3BlbixcbiAgICAgICAgfSk7XG4gICAgICAgIHVwbG9hZEF2YXRhckJ0biA9IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt1cGxvYWRCdXR0b25DbGFzc2VzfT5cbiAgICAgICAgICAgICAgICA8RWRpdEljb24gd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0F2YXRhclNldHRpbmdfYXZhdGFyXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD17YXZhdGFyQWx0VGV4dH0+XG4gICAgICAgICAgICB7YXZhdGFyRWxlbWVudH1cbiAgICAgICAgICAgIHt1cGxvYWRBdmF0YXJCdG59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxBdmF0YXJTZXR0aW5nQ29udGV4dE1lbnVcbiAgICAgICAgICAgICAgICB0cmlnZ2VyPXtjb250ZW50fVxuICAgICAgICAgICAgICAgIG9uVXBsb2FkU2VsZWN0PXt1cGxvYWRBdmF0YXJ9XG4gICAgICAgICAgICAgICAgb25SZW1vdmVTZWxlY3Q9e3JlbW92ZUF2YXRhcn1cbiAgICAgICAgICAgICAgICBtZW51T3Blbj17bWVudU9wZW59XG4gICAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19XG4gICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgb25DbGljaz17Y2hyb21lRmlsZUlucHV0Rml4fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkZpbGVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgIGFsdD17X3QoXCJhY3Rpb258dXBsb2FkXCIpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF2YXRhclNldHRpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9B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