@nlabs/gothamjs
Version:
Platform
152 lines (151 loc) • 20.3 kB
JavaScript
import { Transition } from "@headlessui/react";
import { useFluxListener } from "@nlabs/arkhamjs-utils-react";
import { cn } from "@nlabs/utils";
import { Fragment, useEffect, useState } from "react";
import { GothamConstants } from "../../constants/GothamConstants.js";
import { Svg } from "../Svg/Svg.js";
import { jsx, jsxs } from "react/jsx-runtime";
const Button = ({ children, onClick, className = "" }) => /* @__PURE__ */ jsx(
"button",
{
type: "button",
onClick,
className: cn(
"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm",
"text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500",
className
),
children
}
);
const IconButton = ({ children, onClick, className = "" }) => /* @__PURE__ */ jsx(
"button",
{
type: "button",
onClick,
className: cn(
"p-1 rounded-full hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500",
className
),
children
}
);
const Alert = ({ children, severity, onClose }) => {
const bgColors = {
error: "bg-red-500",
info: "bg-blue-500",
success: "bg-green-500",
warning: "bg-yellow-500"
};
return /* @__PURE__ */ jsxs("div", { className: cn(
"rounded-md p-4 w-full flex items-center justify-between",
bgColors[severity] || "bg-gray-500",
"text-white"
), children: [
/* @__PURE__ */ jsx("div", { children }),
onClose && /* @__PURE__ */ jsxs(
"button",
{
type: "button",
onClick: onClose,
className: "ml-auto -mx-1.5 -my-1.5 rounded-md p-1.5 inline-flex text-white hover:bg-opacity-20 hover:bg-black focus:outline-none focus:ring-2 focus:ring-white",
children: [
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Dismiss" }),
/* @__PURE__ */ jsx("svg", { className: "h-5 w-5", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd" }) })
]
}
)
] });
};
const Notify = () => {
const [isOpen, setOpen] = useState(false);
const [notification, setNotification] = useState({});
const [timeoutId, setTimeoutId] = useState(null);
const notifyClose = () => setOpen(false);
useEffect(() => {
if (isOpen && notification.autoHideDuration) {
if (timeoutId) {
clearTimeout(timeoutId);
}
const id = setTimeout(() => {
setOpen(false);
}, notification.autoHideDuration);
setTimeoutId(id);
return () => {
clearTimeout(id);
};
}
return void 0;
}, [isOpen, notification.autoHideDuration, timeoutId]);
const notifyOpen = ({
actions = [],
autoHideDuration = 3e3,
message,
severity,
anchorOrigin = { horizontal: "left", vertical: "bottom" },
...restProps
}) => {
let action;
if (actions.length) {
action = (key) => /* @__PURE__ */ jsx("div", { className: "flex space-x-2", children: actions.map(({ icon, label, onClick }, index) => /* @__PURE__ */ jsx(Fragment, { children: icon ? /* @__PURE__ */ jsx(IconButton, { onClick: () => onClick(key), children: /* @__PURE__ */ jsx(Svg, { color: "inherit", height: 24, name: icon, width: 24 }) }) : /* @__PURE__ */ jsx(Button, { onClick: () => onClick(key), children: label }) }, index)) });
}
setNotification({
...restProps,
actions: [action],
anchorOrigin,
autoHideDuration,
message: severity ? /* @__PURE__ */ jsx(
Alert,
{
onClose: notifyClose,
severity,
children: message
}
) : message,
severity
});
setOpen(true);
};
useFluxListener(GothamConstants.NOTIFY_OPEN, notifyOpen);
useFluxListener(GothamConstants.NOTIFY_CLOSE, notifyClose);
const positionClasses = (() => {
const { horizontal = "left", vertical = "bottom" } = notification.anchorOrigin || {};
const positions = {
bottom: {
center: "bottom-4 left-1/2 transform -translate-x-1/2",
left: "bottom-4 left-4",
right: "bottom-4 right-4"
},
top: {
center: "top-4 left-1/2 transform -translate-x-1/2",
left: "top-4 left-4",
right: "top-4 right-4"
}
};
return positions[vertical][horizontal];
})();
return /* @__PURE__ */ jsx(
Transition,
{
show: isOpen,
as: Fragment,
enter: "transform ease-out duration-300 transition",
enterFrom: "translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2",
enterTo: "translate-y-0 opacity-100 sm:translate-x-0",
leave: "transition ease-in duration-100",
leaveFrom: "opacity-100",
leaveTo: "opacity-0",
children: /* @__PURE__ */ jsx("div", { className: cn(
"fixed z-50 max-w-sm w-full shadow-lg rounded-lg pointer-events-auto overflow-hidden",
positionClasses
), children: /* @__PURE__ */ jsx("div", { className: "ring-1 ring-black ring-opacity-5 bg-white", children: !notification.severity ? /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start", children: [
/* @__PURE__ */ jsx("div", { className: "flex-1", children: notification.message }),
notification.actions?.length && /* @__PURE__ */ jsx("div", { className: "ml-4 flex-shrink-0 flex", children: notification.actions.map(({ icon, label, onClick }, index) => /* @__PURE__ */ jsx(Fragment, { children: icon ? /* @__PURE__ */ jsx(IconButton, { onClick: () => onClick("notification"), children: /* @__PURE__ */ jsx(Svg, { color: "inherit", height: 24, name: icon, width: 24 }) }) : /* @__PURE__ */ jsx(Button, { onClick: () => onClick("notification"), children: label }) }, index)) })
] }) }) : /* @__PURE__ */ jsx("div", { children: notification.message }) }) })
}
);
};
export {
Notify
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvTm90aWZ5L05vdGlmeS50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSAnQGhlYWRsZXNzdWkvcmVhY3QnO1xuaW1wb3J0IHt1c2VGbHV4TGlzdGVuZXJ9IGZyb20gJ0BubGFicy9hcmtoYW1qcy11dGlscy1yZWFjdCc7XG5pbXBvcnQge2NufSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHtGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge0dvdGhhbUNvbnN0YW50c30gZnJvbSAnLi4vLi4vY29uc3RhbnRzL0dvdGhhbUNvbnN0YW50cy5qcyc7XG5pbXBvcnQge1N2Z30gZnJvbSAnLi4vU3ZnL1N2Zy5qcyc7XG5cbmltcG9ydCB0eXBlIHtSZWFjdEVsZW1lbnR9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBHb3RoYW1Ob3RpZnlBY3Rpb24ge1xuICByZWFkb25seSBpY29uPzogc3RyaW5nO1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbiAgcmVhZG9ubHkgb25DbGljazogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBHb3RoYW1TZXZlcml0eSA9ICdlcnJvcicgfCAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybmluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR290aGFtTm90aWZ5UGFyYW1zIHtcbiAgcmVhZG9ubHkgYWN0aW9ucz86IEdvdGhhbU5vdGlmeUFjdGlvbltdO1xuICByZWFkb25seSBhbmNob3JPcmlnaW4/OiB7XG4gICAgdmVydGljYWw6ICd0b3AnIHwgJ2JvdHRvbSc7XG4gICAgaG9yaXpvbnRhbDogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICB9O1xuICByZWFkb25seSBhdXRvSGlkZUR1cmF0aW9uPzogbnVtYmVyO1xuICByZWFkb25seSBtZXNzYWdlPzogUmVhY3RFbGVtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eT86IEdvdGhhbVNldmVyaXR5O1xufVxuXG4vLyBDdXN0b20gQnV0dG9uIGNvbXBvbmVudFxuY29uc3QgQnV0dG9uID0gKHtjaGlsZHJlbiwgb25DbGljaywgY2xhc3NOYW1lID0gJyd9KSA9PiAoXG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAnaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCBzaGFkb3ctc20nLFxuICAgICAgJ3RleHQtd2hpdGUgYmctaW5kaWdvLTYwMCBob3ZlcjpiZy1pbmRpZ28tNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpyaW5nLWluZGlnby01MDAnLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9idXR0b24+XG4pO1xuXG4vLyBDdXN0b20gSWNvbkJ1dHRvbiBjb21wb25lbnRcbmNvbnN0IEljb25CdXR0b24gPSAoe2NoaWxkcmVuLCBvbkNsaWNrLCBjbGFzc05hbWUgPSAnJ30pID0+IChcbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICdwLTEgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMjAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpyaW5nLWluZGlnby01MDAnLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKX1cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9idXR0b24+XG4pO1xuXG4vLyBDdXN0b20gQWxlcnQgY29tcG9uZW50XG5jb25zdCBBbGVydCA9ICh7Y2hpbGRyZW4sIHNldmVyaXR5LCBvbkNsb3NlfSkgPT4ge1xuICBjb25zdCBiZ0NvbG9ycyA9IHtcbiAgICBlcnJvcjogJ2JnLXJlZC01MDAnLFxuICAgIGluZm86ICdiZy1ibHVlLTUwMCcsXG4gICAgc3VjY2VzczogJ2JnLWdyZWVuLTUwMCcsXG4gICAgd2FybmluZzogJ2JnLXllbGxvdy01MDAnXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y24oXG4gICAgICAncm91bmRlZC1tZCBwLTQgdy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsXG4gICAgICBiZ0NvbG9yc1tzZXZlcml0eV0gfHwgJ2JnLWdyYXktNTAwJyxcbiAgICAgICd0ZXh0LXdoaXRlJ1xuICAgICl9PlxuICAgICAgPGRpdj57Y2hpbGRyZW59PC9kaXY+XG4gICAgICB7b25DbG9zZSAmJiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLWF1dG8gLW14LTEuNSAtbXktMS41IHJvdW5kZWQtbWQgcC0xLjUgaW5saW5lLWZsZXggdGV4dC13aGl0ZSBob3ZlcjpiZy1vcGFjaXR5LTIwIGhvdmVyOmJnLWJsYWNrIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy13aGl0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RGlzbWlzczwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImgtNSB3LTVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgIDxwYXRoIGZpbGxSdWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC4yOTMgNC4yOTNhMSAxIDAgMDExLjQxNCAwTDEwIDguNTg2bDQuMjkzLTQuMjkzYTEgMSAwIDExMS40MTQgMS40MTRMMTEuNDE0IDEwbDQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0IDEuNDE0TDEwIDExLjQxNGwtNC4yOTMgNC4yOTNhMSAxIDAgMDEtMS40MTQtMS40MTRMOC41ODYgMTAgNC4yOTMgNS43MDdhMSAxIDAgMDEwLTEuNDE0elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBOb3RpZnkgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbm90aWZpY2F0aW9uLCBzZXROb3RpZmljYXRpb25dID0gdXNlU3RhdGU8R290aGFtTm90aWZ5UGFyYW1zPih7fSk7XG4gIGNvbnN0IFt0aW1lb3V0SWQsIHNldFRpbWVvdXRJZF0gPSB1c2VTdGF0ZTxOb2RlSlMuVGltZW91dCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IG5vdGlmeUNsb3NlID0gKCkgPT4gc2V0T3BlbihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmIG5vdGlmaWNhdGlvbi5hdXRvSGlkZUR1cmF0aW9uKSB7XG4gICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICAgIH0sIG5vdGlmaWNhdGlvbi5hdXRvSGlkZUR1cmF0aW9uKTtcblxuICAgICAgc2V0VGltZW91dElkKGlkKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2lzT3Blbiwgbm90aWZpY2F0aW9uLmF1dG9IaWRlRHVyYXRpb24sIHRpbWVvdXRJZF0pO1xuXG4gIGNvbnN0IG5vdGlmeU9wZW4gPSAoe1xuICAgIGFjdGlvbnMgPSBbXSxcbiAgICBhdXRvSGlkZUR1cmF0aW9uID0gMzAwMCxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5LFxuICAgIGFuY2hvck9yaWdpbiA9IHsgaG9yaXpvbnRhbDogJ2xlZnQnLCB2ZXJ0aWNhbDogJ2JvdHRvbScgfSxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfTogR290aGFtTm90aWZ5UGFyYW1zKSA9PiB7XG4gICAgbGV0IGFjdGlvbjtcblxuICAgIGlmKGFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBhY3Rpb24gPSAoa2V5OiBzdHJpbmcpID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtMlwiPlxuICAgICAgICAgIHthY3Rpb25zLm1hcCgoe2ljb24sIGxhYmVsLCBvbkNsaWNrfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAge2ljb24gPyAoXG4gICAgICAgICAgICAgICAgPEljb25CdXR0b24gb25DbGljaz17KCkgPT4gb25DbGljayhrZXkpfT5cbiAgICAgICAgICAgICAgICAgIDxTdmcgY29sb3I9XCJpbmhlcml0XCIgaGVpZ2h0PXsyNH0gbmFtZT17aWNvbn0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2soa2V5KX0+e2xhYmVsfTwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHNldE5vdGlmaWNhdGlvbih7XG4gICAgICAuLi5yZXN0UHJvcHMsXG4gICAgICBhY3Rpb25zOiBbYWN0aW9uIGFzIEdvdGhhbU5vdGlmeUFjdGlvbl0sXG4gICAgICBhbmNob3JPcmlnaW4sXG4gICAgICBhdXRvSGlkZUR1cmF0aW9uLFxuICAgICAgbWVzc2FnZTogc2V2ZXJpdHkgPyAoXG4gICAgICAgIDxBbGVydFxuICAgICAgICAgIG9uQ2xvc2U9e25vdGlmeUNsb3NlfVxuICAgICAgICAgIHNldmVyaXR5PXtzZXZlcml0eX1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICA8L0FsZXJ0PlxuICAgICAgKSA6IG1lc3NhZ2UsXG4gICAgICBzZXZlcml0eVxuICAgIH0pO1xuICAgIHNldE9wZW4odHJ1ZSk7XG4gIH07XG5cbiAgdXNlRmx1eExpc3RlbmVyKEdvdGhhbUNvbnN0YW50cy5OT1RJRllfT1BFTiwgbm90aWZ5T3Blbik7XG4gIHVzZUZsdXhMaXN0ZW5lcihHb3RoYW1Db25zdGFudHMuTk9USUZZX0NMT1NFLCBub3RpZnlDbG9zZSk7XG5cbiAgY29uc3QgcG9zaXRpb25DbGFzc2VzID0gKCgpID0+IHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbCA9ICdsZWZ0JywgdmVydGljYWwgPSAnYm90dG9tJ30gPSBub3RpZmljYXRpb24uYW5jaG9yT3JpZ2luIHx8IHt9O1xuXG4gICAgY29uc3QgcG9zaXRpb25zID0ge1xuICAgICAgYm90dG9tOiB7XG4gICAgICAgIGNlbnRlcjogJ2JvdHRvbS00IGxlZnQtMS8yIHRyYW5zZm9ybSAtdHJhbnNsYXRlLXgtMS8yJyxcbiAgICAgICAgbGVmdDogJ2JvdHRvbS00IGxlZnQtNCcsXG4gICAgICAgIHJpZ2h0OiAnYm90dG9tLTQgcmlnaHQtNCdcbiAgICAgIH0sXG4gICAgICB0b3A6IHtcbiAgICAgICAgY2VudGVyOiAndG9wLTQgbGVmdC0xLzIgdHJhbnNmb3JtIC10cmFuc2xhdGUteC0xLzInLFxuICAgICAgICBsZWZ0OiAndG9wLTQgbGVmdC00JyxcbiAgICAgICAgcmlnaHQ6ICd0b3AtNCByaWdodC00J1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcG9zaXRpb25zW3ZlcnRpY2FsXVtob3Jpem9udGFsXTtcbiAgfSkoKTtcblxuICByZXR1cm4gKFxuICAgIDxUcmFuc2l0aW9uXG4gICAgICBzaG93PXtpc09wZW59XG4gICAgICBhcz17RnJhZ21lbnR9XG4gICAgICBlbnRlcj1cInRyYW5zZm9ybSBlYXNlLW91dCBkdXJhdGlvbi0zMDAgdHJhbnNpdGlvblwiXG4gICAgICBlbnRlckZyb209XCJ0cmFuc2xhdGUteS0yIG9wYWNpdHktMCBzbTp0cmFuc2xhdGUteS0wIHNtOnRyYW5zbGF0ZS14LTJcIlxuICAgICAgZW50ZXJUbz1cInRyYW5zbGF0ZS15LTAgb3BhY2l0eS0xMDAgc206dHJhbnNsYXRlLXgtMFwiXG4gICAgICBsZWF2ZT1cInRyYW5zaXRpb24gZWFzZS1pbiBkdXJhdGlvbi0xMDBcIlxuICAgICAgbGVhdmVGcm9tPVwib3BhY2l0eS0xMDBcIlxuICAgICAgbGVhdmVUbz1cIm9wYWNpdHktMFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZml4ZWQgei01MCBtYXgtdy1zbSB3LWZ1bGwgc2hhZG93LWxnIHJvdW5kZWQtbGcgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1oaWRkZW4nLFxuICAgICAgICBwb3NpdGlvbkNsYXNzZXNcbiAgICAgICl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJpbmctMSByaW5nLWJsYWNrIHJpbmctb3BhY2l0eS01IGJnLXdoaXRlXCI+XG4gICAgICAgICAgeyFub3RpZmljYXRpb24uc2V2ZXJpdHkgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAge25vdGlmaWNhdGlvbi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtub3RpZmljYXRpb24uYWN0aW9ucz8ubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWwtNCBmbGV4LXNocmluay0wIGZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAge25vdGlmaWNhdGlvbi5hY3Rpb25zLm1hcCgoe2ljb24sIGxhYmVsLCBvbkNsaWNrfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aWNvbiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b24gb25DbGljaz17KCkgPT4gb25DbGljaygnbm90aWZpY2F0aW9uJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdmcgY29sb3I9XCJpbmhlcml0XCIgaGVpZ2h0PXsyNH0gbmFtZT17aWNvbn0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2soJ25vdGlmaWNhdGlvbicpfT57bGFiZWx9PC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge25vdGlmaWNhdGlvbi5tZXNzYWdlIGFzIFJlYWN0RWxlbWVudH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9UcmFuc2l0aW9uPlxuICApO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVEsa0JBQWlCO0FBQ3pCLFNBQVEsdUJBQXNCO0FBQzlCLFNBQVEsVUFBUztBQUNqQixTQUFRLFVBQVUsV0FBVyxnQkFBZTtBQUU1QyxTQUFRLHVCQUFzQjtBQUM5QixTQUFRLFdBQVU7QUF5QmhCLGNBNENNLFlBNUNOO0FBREYsTUFBTSxTQUFTLENBQUMsRUFBQyxVQUFVLFNBQVMsWUFBWSxHQUFFLE1BQ2hEO0FBQUEsRUFBQztBQUFBO0FBQUEsSUFDQyxNQUFLO0FBQUEsSUFDTDtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1Q7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUVDO0FBQUE7QUFDSDtBQUlGLE1BQU0sYUFBYSxDQUFDLEVBQUMsVUFBVSxTQUFTLFlBQVksR0FBRSxNQUNwRDtBQUFBLEVBQUM7QUFBQTtBQUFBLElBQ0MsTUFBSztBQUFBLElBQ0w7QUFBQSxJQUNBLFdBQVc7QUFBQSxNQUNUO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUVDO0FBQUE7QUFDSDtBQUlGLE1BQU0sUUFBUSxDQUFDLEVBQUMsVUFBVSxVQUFVLFFBQU8sTUFBTTtBQUMvQyxRQUFNLFdBQVc7QUFBQSxJQUNmLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxFQUNYO0FBRUEsU0FDRSxxQkFBQyxTQUFJLFdBQVc7QUFBQSxJQUNkO0FBQUEsSUFDQSxTQUFTLFFBQVEsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRixHQUNFO0FBQUEs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