UNPKG

@nlabs/gothamjs

Version:
152 lines (151 loc) 20.3 kB
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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