@use-glyph/sdk-react 2.2.7 → 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"WalletRuntime.js","sources":["../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/arrow-up-right.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/fuel.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/plus.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/send.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/x.js","../src/assets/images/USDIcon.png","../src/assets/svg/LinkIcon.tsx","../src/lib/numericInputs.ts","../src/assets/svg/NoTokenIcon.tsx","../src/components/shared/NativeTokenIcon.tsx","../../node_modules/.pnpm/truncate-eth-address@1.0.2/node_modules/truncate-eth-address/dist/index.js","../src/assets/svg/BackIcon.tsx","../src/assets/svg/CopyIcon.tsx","../src/components/shared/CopyButton.tsx","../src/components/shared/WalletViewHeader.tsx","../src/components/shared/WalletViewTemplate.tsx","../src/assets/svg/HelpIcon.tsx","../src/components/ui/tooltip-element.tsx","../src/assets/svg/FailureIcon.tsx","../src/components/widget/internal/WalletFundFailedView.tsx","../src/assets/svg/CaretDownIcon.tsx","../src/assets/svg/LoadingCircleIcon.tsx","../src/components/widget/internal/WalletFundPendingView.tsx","../src/assets/svg/SuccessIcon.tsx","../src/components/widget/internal/WalletFundSuccessView.tsx","../src/components/widget/WalletFundView.tsx","../src/assets/svg/ActivityIcon.tsx","../src/assets/svg/HomeIcon.tsx","../src/assets/svg/TokensIcon.tsx","../src/assets/svg/WalletsTabFilledIcon.tsx","../src/assets/svg/WalletsTabOutlinedIcon.tsx","../src/components/shared/WalletViewFooterNav.tsx","../src/assets/svg/TxSendIcon.tsx","../src/assets/svg/TxSwapIcon.tsx","../src/components/shared/ActivityRow.tsx","../src/components/shared/LinkWithIcon.tsx","../src/components/shared/skeletons/ActivityRowSkeleton.tsx","../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@19_muim6z7bx2nodwhe5jbljsxt2i/node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.12_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@_qwmxdrckbupeeptqza4y3m5kju/node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.1.1_react@19.1.3/node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-accordion@1.2.12_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@19_lxxemfbyzd55jn6miwtbtq2axa/node_modules/@radix-ui/react-accordion/dist/index.mjs","../src/components/ui/accordion.tsx","../src/components/widget/WalletActivityTab.tsx","../src/assets/svg/PlusSign.tsx","../src/assets/svg/QRIcon.tsx","../src/components/widget/WalletHomeTab.tsx","../src/components/widget/WalletLinkedAccountsTab.tsx","../src/assets/svg/ExpandItemIcon.tsx","../src/assets/svg/LinkedNFTChip.tsx","../src/assets/svg/NFTImgFail.tsx","../src/components/widget/WalletNFTsTab.tsx","../src/components/widget/internal/TokenAndChainIcon.tsx","../src/components/widget/WalletTokensTab.tsx","../src/components/widget/internal/WalletTokenVsNftSwitcher.tsx","../src/components/widget/WalletMainView.tsx","../src/assets/images/profile-gradient.png","../src/assets/svg/EditIcon.tsx","../src/components/widget/WalletProfileView.tsx","../../node_modules/.pnpm/qrcode.react@4.2.0_react@19.1.3/node_modules/qrcode.react/lib/esm/index.js","../src/assets/images/icon.png","../src/components/widget/WalletReceiveView.tsx","../src/components/ui/dialog.tsx","../src/components/widget/internal/SendFundChainAndTokenSelector.tsx","../src/components/ui/input-helper.tsx","../src/components/ui/input.tsx","../src/components/widget/internal/WalletSendFundEnterAddressView.tsx","../src/components/widget/internal/WalletSendFundFailedView.tsx","../src/components/widget/internal/WalletSendFundPendingView.tsx","../src/components/widget/internal/WalletSendFundSuccessView.tsx","../src/components/widget/WalletSendFundView.tsx","../src/lib/customErrors.ts","../src/lib/rpcPublic.ts","../src/hooks/useGlyphRelayEvmAdapter.ts","../src/hooks/useRelayExecute.ts","../src/hooks/useRelayIntentStatus.ts","../src/hooks/useRelayQuote.ts","../src/hooks/useTokenBalance.ts","../src/lib/relayNativeMaxAmount.ts","../src/hooks/useBalancesForChain.ts","../src/hooks/useRelayTokenList.ts","../src/hooks/useRelayYourTokensList.ts","../src/components/widget/internal/AddGasToSourceChainButton.tsx","../src/components/widget/internal/SwapChainAndTokenSelector.tsx","../src/components/widget/internal/WalletSwapTopUpGas.tsx","../src/components/widget/internal/WalletTradeFailedView.tsx","../src/components/widget/internal/WalletTradePendingView.tsx","../src/components/widget/internal/WalletTradeSuccessView.tsx","../src/components/widget/WalletTradeView.tsx","../src/components/widget/WalletRuntime.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M7 7h10v10\", key: \"1tivn9\" }],\n [\"path\", { d: \"M7 17 17 7\", key: \"1vkiza\" }]\n];\nconst ArrowUpRight = createLucideIcon(\"arrow-up-right\", __iconNode);\n\nexport { __iconNode, ArrowUpRight as default };\n//# sourceMappingURL=arrow-up-right.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"3\", x2: \"15\", y1: \"22\", y2: \"22\", key: \"xegly4\" }],\n [\"line\", { x1: \"4\", x2: \"14\", y1: \"9\", y2: \"9\", key: \"xcnuvu\" }],\n [\"path\", { d: \"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18\", key: \"16j0yd\" }],\n [\n \"path\",\n {\n d: \"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5\",\n key: \"7cu91f\"\n }\n ]\n];\nconst Fuel = createLucideIcon(\"fuel\", __iconNode);\n\nexport { __iconNode, Fuel as default };\n//# sourceMappingURL=fuel.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","export default import.meta.ROLLUP_FILE_URL_Bwp$ikdv;","export function LinkIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_2143_5128)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.61602 3.16387C2.96293 2.81696 3.43344 2.62207 3.92404 2.62207H6.92085C7.31525 2.62207 7.63497 2.94179 7.63497 3.33619C7.63497 3.73059 7.31525 4.05031 6.92085 4.05031H3.92404C3.81223 4.05031 3.705 4.09473 3.62594 4.17379C3.54688 4.25285 3.50246 4.36008 3.50246 4.47189V12.4218C3.50246 12.5336 3.54688 12.6409 3.62594 12.7199C3.705 12.799 3.81223 12.8434 3.92404 12.8434H11.874C11.9858 12.8434 12.093 12.799 12.1721 12.7199C12.2511 12.6409 12.2955 12.5336 12.2955 12.4218V9.16244C12.2955 8.76805 12.6153 8.44832 13.0097 8.44832C13.4041 8.44832 13.7238 8.76805 13.7238 9.16244V12.4218C13.7238 12.9124 13.5289 13.3829 13.182 13.7298C12.8351 14.0767 12.3646 14.2716 11.874 14.2716H3.92404C3.43344 14.2716 2.96293 14.0767 2.61602 13.7298C2.26911 13.3829 2.07422 12.9124 2.07422 12.4218V4.47189C2.07422 3.98129 2.26911 3.51078 2.61602 3.16387Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.36743 1.93238C8.36743 1.53718 8.68781 1.2168 9.08301 1.2168H14.3571V6.70854C14.3571 7.10375 14.0367 7.42413 13.6415 7.42413C13.2463 7.42413 12.9259 7.10375 12.9259 6.70854V3.7643L7.50929 9.63969C7.24141 9.93026 6.7887 9.94865 6.49813 9.68077C6.20756 9.41289 6.18917 8.96018 6.45705 8.66961L12.0085 2.64797H9.08301C8.68781 2.64797 8.36743 2.32759 8.36743 1.93238Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_2143_5128\">\n <rect width=\"14.3118\" height=\"15.0273\" fill=\"white\" transform=\"translate(0.792969 0.389648)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","export function limitDecimals(value: string, separator: string, maxDecimals: number): string {\n let formattedValue = value;\n\n if (formattedValue.includes(separator) && !formattedValue.endsWith(separator)) {\n const [whole, decimal] = formattedValue.split(separator);\n if (decimal.length > maxDecimals) {\n formattedValue = `${whole}${separator}${decimal.substring(0, maxDecimals)}`;\n }\n }\n\n return formattedValue;\n}\n\nexport function formatInputNumber(value: string, maxDecimals: number): string {\n let formattedValue = value;\n\n // check for multiple leading zeros (only allow one when followed by decimal)\n if (formattedValue.match(/^0+[.,]/)) formattedValue = formattedValue.replace(/^0+/, \"0\");\n if (formattedValue.match(/^0[0-9]+/)) formattedValue = formattedValue.replace(/^0+/, \"\");\n\n // limit decimal places (separated by either . or ,)\n formattedValue = limitDecimals(formattedValue, \".\", maxDecimals);\n formattedValue = limitDecimals(formattedValue, \",\", maxDecimals);\n\n return formattedValue;\n}\n","export default function NoTokenIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"175\" height=\"175\" viewBox=\"0 0 175 175\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx=\"87.5\" cy=\"87.5\" r=\"87.5\" fill=\"#929792\" />\n <g clipPath=\"url(#clip0_4594_16001)\" filter=\"url(#filter0_d_4594_16001)\">\n <g filter=\"url(#filter1_d_4594_16001)\">\n <path\n d=\"M110.139 65.9764C99.9177 55.4825 88.8017 47.8048 79.3155 43.8935C74.5667 41.9482 70.2392 40.9505 66.6961 40.9515C63.1529 40.9524 60.5034 41.8708 58.6363 43.6892C56.7693 45.5076 55.7814 48.1321 55.687 51.6739C55.5927 55.2158 56.4759 59.5682 58.2954 64.3666C61.9552 73.9526 69.3371 85.2671 79.5579 95.7611C89.7788 106.255 100.895 113.933 110.376 117.839C115.133 119.793 119.457 120.787 123 120.786C126.544 120.785 129.193 119.867 131.06 118.048C132.927 116.23 133.915 113.605 134.009 110.064C134.104 106.522 133.224 102.173 131.396 97.3661C127.741 87.7849 120.359 76.4704 110.139 65.9764ZM51.6994 50.4456L43.6197 58.3151C42.6057 59.3027 41.6178 61.9271 41.5234 65.469C41.429 69.0108 42.3122 73.3632 44.1317 78.1616C47.7916 87.7476 55.1734 99.0622 65.3943 109.556C75.6151 120.05 86.7311 127.728 96.2126 131.634C100.969 133.588 105.294 134.582 108.837 134.581C112.38 134.58 115.029 133.662 116.043 132.674L124.123 124.805C123.741 124.832 123.376 124.843 122.995 124.838C118.721 124.829 113.938 123.685 108.849 121.585C98.6564 117.399 87.2109 109.415 76.6608 98.5828C66.1108 87.7509 58.4315 76.0988 54.5189 65.8024C52.5545 60.662 51.5344 55.8471 51.64 51.5761C51.6466 51.1965 51.6787 50.8108 51.6994 50.4456Z\"\n fill=\"#B9B9B9\"\n />\n </g>\n </g>\n <defs>\n <filter\n id=\"filter0_d_4594_16001\"\n x=\"2.43213\"\n y=\"6.43359\"\n width=\"170.669\"\n height=\"170.668\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4594_16001\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4594_16001\" result=\"shape\" />\n </filter>\n <filter\n id=\"filter1_d_4594_16001\"\n x=\"37.5165\"\n y=\"40.9531\"\n width=\"100.5\"\n height=\"101.629\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.458139 0 0 0 0 0.458139 0 0 0 0 0.458139 0 0 0 1 0\"\n />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4594_16001\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4594_16001\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_4594_16001\">\n <rect\n width=\"115.034\"\n height=\"115.034\"\n fill=\"white\"\n transform=\"translate(88.8388 6.43359) rotate(45.7554)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useChainId } from \"wagmi\";\nimport NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\n\nexport default function NativeTokenIcon({ className }: { className?: string }) {\n const { balances } = useGlyph();\n const chainId = useChainId();\n\n const nativeBalance = balances?.tokens?.find?.((balance) => balance.native && balance?.chainId === chainId);\n const logoUrl = nativeBalance?.logo;\n\n return logoUrl ? (\n <img\n src={logoUrl}\n alt={nativeBalance?.symbol}\n className={cn(\"gw-size-6 gw-rounded-full gw-object-cover\", className)}\n />\n ) : (\n <NoTokenIcon className={cn(\"gw-size-6\", className)} />\n );\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Captures 0x + 4 characters, then the last 4 characters.\nvar truncateRegex = /^(0x[a-zA-Z0-9]{4})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/;\n/**\n * Truncates an ethereum address to the format 0x0000…0000\n * @param address Full address to truncate\n * @returns Truncated address\n */\nvar truncateEthAddress = function (address) {\n var match = address.match(truncateRegex);\n if (!match)\n return address;\n return match[1] + \"\\u2026\" + match[2];\n};\nexports.default = truncateEthAddress;\n","function BackIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M15.41 16.59L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.59Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport default BackIcon;\n","interface Props extends React.SVGProps<SVGSVGElement> {\n isCopied?: boolean;\n}\n\nfunction CopyIcon(props: Props) {\n const { isCopied, ...rest } = props;\n return !isCopied ? (\n <svg viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.87207 8.31641C6.87207 7.21184 7.7675 6.31641 8.87207 6.31641H14.5016C15.6061 6.31641 16.5016 7.21184 16.5016 8.31641V13.3281C16.5016 14.4327 15.6061 15.3281 14.5016 15.3281H8.87207C7.7675 15.3281 6.87207 14.4327 6.87207 13.3281V8.31641ZM14.5016 8.31641H8.87207V13.3281H14.5016V8.31641Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.02246 3.36719C3.02246 2.26262 3.91789 1.36719 5.02246 1.36719H10.3771C11.4817 1.36719 12.3771 2.26262 12.3771 3.36719V4.63574H10.3771V3.36719H5.02246V8.99737H5.67204V10.9974H5.02246C3.91789 10.9974 3.02246 10.1019 3.02246 8.99737V3.36719Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <path\n d=\"M8.6 14.6L15.65 7.55L14.25 6.15L8.6 11.8L5.75 8.95L4.35 10.35L8.6 14.6ZM10 20C8.61667 20 7.31667 19.7373 6.1 19.212C4.88333 18.6873 3.825 17.975 2.925 17.075C2.025 16.175 1.31267 15.1167 0.788 13.9C0.262667 12.6833 0 11.3833 0 10C0 8.61667 0.262667 7.31667 0.788 6.1C1.31267 4.88333 2.025 3.825 2.925 2.925C3.825 2.025 4.88333 1.31233 6.1 0.787C7.31667 0.262333 8.61667 0 10 0C11.3833 0 12.6833 0.262333 13.9 0.787C15.1167 1.31233 16.175 2.025 17.075 2.925C17.975 3.825 18.6873 4.88333 19.212 6.1C19.7373 7.31667 20 8.61667 20 10C20 11.3833 19.7373 12.6833 19.212 13.9C18.6873 15.1167 17.975 16.175 17.075 17.075C16.175 17.975 15.1167 18.6873 13.9 19.212C12.6833 19.7373 11.3833 20 10 20Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default CopyIcon;\n","import { memo, useState } from \"react\";\nimport CopyIcon from \"../../assets/svg/CopyIcon\";\nimport { cn, copyToClipboard } from \"../../lib/utils\";\n\ninterface CopyButtonProps {\n text: string;\n textToCopy?: string; // If different than the button text\n className?: string;\n textClassName?: string;\n iconClassName?: string;\n}\n\nconst CopyButton = ({ text, textToCopy, className, textClassName, iconClassName }: CopyButtonProps) => {\n const [copied, setCopied] = useState<boolean>(false);\n\n return (\n <button\n onClick={() => {\n const copied = copyToClipboard(textToCopy || text);\n setCopied(copied);\n\n setTimeout(() => {\n setCopied(false);\n }, 2000);\n }}\n className={cn(\"gw-inline-flex gw-items-center gw-justify-end gw-text-brand-gray-500 gw-gap-1\", className)}\n >\n <span className={textClassName}>{text}</span>\n <span>\n <CopyIcon isCopied={copied} className={cn(\"gw-text-secondary gw-size-4\", iconClassName)} />\n </span>\n </button>\n );\n};\n\nexport default memo(CopyButton);\n","import { X } from \"lucide-react\";\nimport { memo, useEffect, useRef, useState } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport BackIcon from \"../../assets/svg/BackIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport ChainSelector from \"./ChainSelector\";\nimport CopyButton from \"./CopyButton\";\nimport UserAvatar from \"./UserAvatar\";\n\ninterface WalletViewHeaderProps {\n fullScreenHeader?: {\n title?: string;\n onBackClick?: () => void;\n onCloseClick?: () => void;\n };\n onProfileClick?: () => void;\n isStickyHeader: boolean;\n}\n\nconst WalletViewHeader = ({ fullScreenHeader, onProfileClick, isStickyHeader }: WalletViewHeaderProps) => {\n const { user } = useGlyph();\n\n const headerRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n\n // Detect when header is stuck by checking if content has scrolled past header\n useEffect(() => {\n if (!isStickyHeader) return;\n\n if (!fullScreenHeader?.title) return;\n\n const headerElement = headerRef.current;\n if (!headerElement) return;\n\n // Find the scrolling container (gw-wallet-view) and content area\n const scrollContainer = headerElement.closest(\".gw-wallet-view\") as HTMLElement;\n const contentArea = scrollContainer?.querySelector(\".gw-wallet-content\") as HTMLElement;\n if (!scrollContainer || !contentArea) return;\n\n // Get the initial offset - how far the header is from the top of the scroll container\n const headerWrapper = headerElement.closest(\".gw-wallet-header\") as HTMLElement;\n const initialHeaderOffset = headerWrapper ? headerWrapper.offsetTop : 0;\n\n const checkStuck = () => {\n const scrollTop = scrollContainer.scrollTop;\n\n // Header is stuck when we've scrolled past the header's original position\n const isCurrentlyStuck = scrollTop > initialHeaderOffset;\n setIsStuck(isCurrentlyStuck);\n };\n\n // Check initially\n checkStuck();\n\n // Check on scroll\n scrollContainer.addEventListener(\"scroll\", checkStuck, { passive: true });\n\n return () => {\n scrollContainer.removeEventListener(\"scroll\", checkStuck);\n };\n }, [fullScreenHeader?.title, isStickyHeader]);\n\n return fullScreenHeader && fullScreenHeader?.title ? (\n <>\n <div ref={headerRef} className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\">\n <div className=\"gw-size-12\">\n {fullScreenHeader?.onBackClick ? (\n <button\n className={cn(\"gw-size-full gw-inline-flex gw-items-center\")}\n onClick={fullScreenHeader?.onBackClick}\n >\n <span\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-1 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full\"\n : \"gw-border-transparent gw-shadow-none\"\n )}\n >\n <BackIcon\n className={cn(\"gw-transition-all\", isStuck ? \"gw-w-5 gw-h-5\" : \"gw-w-6 gw-h-6\")}\n />\n </span>\n </button>\n ) : null}\n </div>\n <div\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full gw-typography-body2\"\n : \"gw-typography-subtitle1 gw-border-transparent gw-shadow-none\"\n )}\n >\n {fullScreenHeader.title}\n </div>\n <div className=\"gw-size-12\">\n {fullScreenHeader?.onCloseClick ? (\n <button\n className={cn(\"gw-size-full gw-inline-flex gw-items-center\")}\n onClick={fullScreenHeader?.onCloseClick}\n >\n <span\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-1 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full\"\n : \"gw-border-transparent gw-shadow-none\"\n )}\n >\n <X className={cn(\"gw-transition-all\", isStuck ? \"gw-w-5 gw-h-5\" : \"gw-w-6 gw-h-6\")} />\n </span>\n </button>\n ) : null}\n </div>\n </div>\n </>\n ) : (\n <>\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\">\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between\">\n <button onClick={onProfileClick} disabled={!user?.hasProfile}>\n <UserAvatar className=\"gw-size-12\" />\n </button>\n\n <div className=\"gw-flex gw-flex-col\">\n <button onClick={onProfileClick} disabled={!user?.hasProfile}>\n <div className=\"gw-mt-1.5 gw-typography-subtitle1 gw-text-left\">{user?.name}</div>\n </button>\n <div>\n <CopyButton\n textClassName=\"gw-max-w-56 gw-break-all gw-typography-body2\"\n text={truncateEthAddress(user!.evmWallet)}\n textToCopy={user!.evmWallet}\n />\n </div>\n </div>\n </div>\n\n {/* Chain Selector */}\n <ChainSelector />\n </div>\n </>\n );\n};\n\nexport default memo(WalletViewHeader);\n","import { cn } from \"../../lib/utils\";\n\nexport type SelectedView = \"main\" | \"add-funds\";\n\nexport type WalletScreenProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n footerCols?: boolean;\n mainFooter?: boolean;\n setView?: (view: SelectedView) => void;\n headerClassName?: string;\n footerClassName?: string;\n isStickyHeader: boolean;\n};\n\nexport function WalletViewTemplate({ mainFooter = true, isStickyHeader, ...props }: WalletScreenProps) {\n return (\n <div\n className={cn(\"gw-wallet-view\", \"gw-overflow-y-auto\")}\n style={{\n scrollbarGutter: \"stable\"\n }}\n >\n {/* Header */}\n {props.header && (\n <div\n className={cn(\n \"gw-wallet-header\",\n isStickyHeader ? \"gw-sticky gw-top-0 gw-z-10\" : \"\",\n props.headerClassName\n )}\n >\n {props.header}\n </div>\n )}\n\n {/* Content */}\n <div className=\"gw-wallet-content\">{props.content}</div>\n\n {/* Footer */}\n {props.footer && (\n <div\n className={cn(\n `${mainFooter ? \"gw-wallet-footer-nav gw-sticky gw-z-10 gw-rounded-full gw-m-4 gw-bottom-4 gw-right-4 gw-mt-0\" + \" \" + \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" : \"gw-wallet-footer\"} ${props.footerCols ? \"gw-flex-col gw-flex-nowrap gw-items-center\" : \"gw-flex-row gw-flex-nowrap\"}`,\n props.footerClassName\n )}\n >\n {props.footer}\n </div>\n )}\n </div>\n );\n}\n","export function HelpIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_114_7349)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.17526 2.92832C4.83466 2.92832 2.12656 5.63641 2.12656 8.97702C2.12656 12.3176 4.83466 15.0257 8.17526 15.0257C11.5159 15.0257 14.224 12.3176 14.224 8.97702C14.224 5.63641 11.5159 2.92832 8.17526 2.92832ZM0.890625 8.97702C0.890625 4.95383 4.15207 1.69238 8.17526 1.69238C12.1985 1.69238 15.4599 4.95383 15.4599 8.97702C15.4599 13.0002 12.1985 16.2617 8.17526 16.2617C4.15207 16.2617 0.890625 13.0002 0.890625 8.97702ZM8.01797 6.09037C7.56262 6.17853 7.23374 6.458 7.13875 6.82319C7.05283 7.15349 6.71542 7.35161 6.38511 7.26569C6.05481 7.17978 5.85669 6.84236 5.94261 6.51206C6.18584 5.57696 6.98216 5.03202 7.78305 4.87696C8.58183 4.72232 9.52098 4.92632 10.1262 5.64535C10.809 6.45654 10.9445 7.49367 10.5598 8.34691C10.2421 9.05142 9.59704 9.57332 8.74137 9.74306V9.94707C8.74137 10.2884 8.4647 10.565 8.1234 10.565C7.78211 10.565 7.50543 10.2884 7.50543 9.94707V9.18426C7.50543 8.84297 7.78211 8.5663 8.1234 8.5663C8.84083 8.5663 9.25922 8.22452 9.43309 7.8389C9.61246 7.44109 9.57333 6.90774 9.18068 6.44127C8.92354 6.13579 8.47542 6.0018 8.01797 6.09037ZM8.0833 12.9359C8.53581 12.9359 8.90264 12.5691 8.90264 12.1166C8.90264 11.664 8.53581 11.2972 8.0833 11.2972C7.63079 11.2972 7.26396 11.664 7.26396 12.1166C7.26396 12.5691 7.63079 12.9359 8.0833 12.9359Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_114_7349\">\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.173828 0.977539)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","\"use client\";\n\nimport { ReactElement, useState } from \"react\";\nimport { HelpIcon } from \"../../assets/svg/HelpIcon\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\";\n\nfunction TooltipElement({\n contentClassName,\n triggerClassName,\n description,\n children,\n side,\n align,\n defaultOpen,\n open,\n onOpenChange,\n stopPropagation\n}: {\n contentClassName?: string;\n triggerClassName?: string;\n description: React.ReactNode;\n stopPropagation: boolean;\n children?: React.ReactNode;\n side?: \"bottom\" | \"top\" | \"right\" | \"left\" | undefined;\n align?: \"center\" | \"end\" | \"start\" | undefined;\n defaultOpen?: boolean;\n // When open is undefined internal state is used, but if open is null, undefined is passed\n open?: boolean | null;\n onOpenChange?: ((open: boolean) => void) | undefined;\n}): ReactElement {\n const [openInternal, setOpenInternal] = useState<boolean>(false);\n return (\n <Tooltip\n defaultOpen={defaultOpen}\n delayDuration={0}\n onOpenChange={onOpenChange === undefined ? setOpenInternal : onOpenChange}\n open={open === undefined ? openInternal : open === null ? undefined : open}\n >\n <TooltipTrigger\n asChild\n onClick={(e) => {\n if (stopPropagation) {\n e.stopPropagation();\n }\n if (open === undefined && !onOpenChange) {\n setOpenInternal((v) => !v);\n }\n }}\n >\n {children ?? (\n <div>\n <HelpIcon className={cn(\"gw-text-brand-gray-500 gw-size-5\", triggerClassName)} />\n </div>\n )}\n </TooltipTrigger>\n <TooltipContent align={align} className={cn(\"gw-max-w-72\", contentClassName)} side={side}>\n <div>{description}</div>\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport default TooltipElement;\n","export function FailureIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"105\" height=\"105\" viewBox=\"0 0 105 105\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M20.361 59.0825V55.3721H21.8028C22.5926 55.3721 23.1279 55.8703 23.1279 56.6018C23.1279 57.328 22.5926 57.8263 21.8028 57.8263H20.9918V59.0825H20.361ZM20.9918 57.2644H21.8134C22.2109 57.2644 22.4919 56.9941 22.4919 56.6018C22.4919 56.2043 22.2109 55.934 21.8134 55.934H20.9918V57.2644ZM23.6416 59.0825V55.3721H24.2565V59.0825H23.6416ZM26.0586 59.1461C25.2741 59.1461 24.6698 58.579 24.6698 57.7733C24.6698 56.9676 25.2635 56.4004 26.0321 56.4004C26.7901 56.4004 27.3307 56.9146 27.3307 57.6991C27.3307 57.7945 27.3201 57.8952 27.3148 57.9429H25.29C25.3324 58.351 25.6451 58.6267 26.0586 58.6267C26.3978 58.6267 26.6417 58.4358 26.7265 58.2185L27.2777 58.3669C27.1399 58.8069 26.6735 59.1461 26.0586 59.1461ZM25.3112 57.4923H26.7371C26.6947 57.1372 26.3978 56.9252 26.0374 56.9252C25.6823 56.9252 25.396 57.1319 25.3112 57.4923ZM28.5601 59.1461C28.0459 59.1461 27.6378 58.8599 27.6378 58.3722C27.6378 57.9323 27.924 57.662 28.4594 57.5771L29.3499 57.4393V57.3651C29.3499 57.0789 29.1325 56.9252 28.8092 56.9252C28.4912 56.9252 28.2526 57.1001 28.136 57.3704L27.659 57.1266C27.8233 56.6813 28.2579 56.4004 28.8092 56.4004C29.4983 56.4004 29.9647 56.8033 29.9647 57.3651V59.0825H29.3552V58.8281C29.1749 59.0295 28.9046 59.1461 28.5601 59.1461ZM28.2367 58.3404C28.2367 58.5631 28.4223 58.685 28.6979 58.6797C29.0848 58.6744 29.3499 58.4517 29.3499 58.0701V57.8793L28.576 58.0012C28.3693 58.0383 28.2367 58.1602 28.2367 58.3404ZM31.4905 59.1461C30.9074 59.1461 30.4303 58.8228 30.3667 58.3934L30.8915 58.2556C30.9445 58.5048 31.1724 58.6797 31.4851 58.6797C31.7343 58.6797 31.8986 58.5631 31.8986 58.3828C31.8986 58.2291 31.7873 58.1337 31.4851 58.0489L31.1618 57.9588C30.6901 57.821 30.4515 57.5824 30.4515 57.2008C30.4515 56.7237 30.8226 56.4004 31.4109 56.4004C31.9516 56.4004 32.3598 56.6919 32.4711 57.1372L31.941 57.2379C31.8668 57.0206 31.6654 56.8722 31.4162 56.8722C31.183 56.8669 31.0346 56.9941 31.0346 57.1637C31.0346 57.3174 31.1459 57.4128 31.4427 57.487L31.7714 57.5718C32.2325 57.6991 32.4817 57.927 32.4817 58.3298C32.4817 58.8175 32.0788 59.1461 31.4905 59.1461ZM34.1737 59.1461C33.3892 59.1461 32.785 58.579 32.785 57.7733C32.785 56.9676 33.3786 56.4004 34.1472 56.4004C34.9052 56.4004 35.4459 56.9146 35.4459 57.6991C35.4459 57.7945 35.4353 57.8952 35.43 57.9429H33.4051C33.4475 58.351 33.7603 58.6267 34.1737 58.6267C34.513 58.6267 34.7568 58.4358 34.8416 58.2185L35.3929 58.3669C35.255 58.8069 34.7886 59.1461 34.1737 59.1461ZM33.4263 57.4923H34.8522C34.8098 57.1372 34.513 56.9252 34.1525 56.9252C33.7974 56.9252 33.5111 57.1319 33.4263 57.4923ZM38.2586 59.1461C37.5006 59.1461 36.9441 58.5843 36.9441 57.7733C36.9441 56.9676 37.5006 56.4004 38.2586 56.4004C38.6138 56.4004 38.9265 56.5276 39.1385 56.7608V55.3721H39.7534V59.0825H39.1385V58.791C38.9159 59.0242 38.6085 59.1461 38.2586 59.1461ZM37.559 57.7733C37.559 58.2503 37.8982 58.5896 38.3487 58.5896C38.7993 58.5896 39.1385 58.2503 39.1385 57.7733C39.1385 57.3015 38.7993 56.957 38.3487 56.957C37.8982 56.957 37.559 57.2962 37.559 57.7733ZM41.559 59.1461C40.7745 59.1461 40.1702 58.579 40.1702 57.7733C40.1702 56.9729 40.7798 56.4004 41.559 56.4004C42.3382 56.4004 42.9477 56.9729 42.9477 57.7733C42.9477 58.579 42.3382 59.1461 41.559 59.1461ZM40.7851 57.7733C40.7851 58.245 41.1084 58.5896 41.559 58.5896C42.0042 58.5896 42.3329 58.245 42.3329 57.7733C42.3329 57.3015 42.0042 56.957 41.559 56.957C41.1084 56.957 40.7851 57.3015 40.7851 57.7733ZM44.5861 59.0825V56.464H45.201V56.7184C45.3653 56.5117 45.625 56.4004 45.9536 56.4004C46.5367 56.4004 46.9449 56.8086 46.9449 57.3969V59.0825H46.33V57.5612C46.33 57.1902 46.118 56.957 45.7734 56.957C45.4236 56.957 45.201 57.1955 45.201 57.5612V59.0825H44.5861ZM48.7372 59.1461C47.9527 59.1461 47.3484 58.579 47.3484 57.7733C47.3484 56.9729 47.958 56.4004 48.7372 56.4004C49.5164 56.4004 50.1259 56.9729 50.1259 57.7733C50.1259 58.579 49.5164 59.1461 48.7372 59.1461ZM47.9633 57.7733C47.9633 58.245 48.2866 58.5896 48.7372 58.5896C49.1824 58.5896 49.5111 58.245 49.5111 57.7733C49.5111 57.3015 49.1824 56.957 48.7372 56.957C48.2866 56.957 47.9633 57.3015 47.9633 57.7733ZM51.6924 59.1143C51.1517 59.1143 50.7966 58.7804 50.7966 58.2662V56.9888H50.2983V56.464H50.5104C50.7224 56.464 50.7966 56.3368 50.7966 55.9764V55.7643H51.4115V56.464H52.0846V56.9888H51.4115V58.2291C51.4115 58.4676 51.544 58.6055 51.7719 58.6055C51.8938 58.6055 52.0157 58.579 52.1164 58.5472L52.2013 59.0295C52.0475 59.0825 51.8726 59.1143 51.6924 59.1143ZM55.0089 59.1461C54.2191 59.1461 53.6466 58.579 53.6466 57.7786C53.6466 56.9729 54.2244 56.4004 55.0089 56.4004C55.6344 56.4004 56.1061 56.7608 56.2227 57.222L55.6715 57.3704C55.6026 57.1584 55.364 56.957 55.0195 56.957C54.5848 56.957 54.2615 57.275 54.2615 57.7786C54.2615 58.2768 54.5848 58.5896 55.0195 58.5896C55.364 58.5896 55.6026 58.3881 55.6715 58.1814L56.2227 58.3298C56.1061 58.7857 55.6344 59.1461 55.0089 59.1461ZM56.6429 59.0825V55.3721H57.2578V59.0825H56.6429ZM59.0599 59.1461C58.2754 59.1461 57.6712 58.579 57.6712 57.7733C57.6712 56.9729 58.2807 56.4004 59.0599 56.4004C59.8391 56.4004 60.4487 56.9729 60.4487 57.7733C60.4487 58.579 59.8391 59.1461 59.0599 59.1461ZM58.286 57.7733C58.286 58.245 58.6094 58.5896 59.0599 58.5896C59.5052 58.5896 59.8338 58.245 59.8338 57.7733C59.8338 57.3015 59.5052 56.957 59.0599 56.957C58.6094 56.957 58.286 57.3015 58.286 57.7733ZM61.8765 59.1461C61.2934 59.1461 60.8163 58.8228 60.7527 58.3934L61.2775 58.2556C61.3305 58.5048 61.5584 58.6797 61.8712 58.6797C62.1203 58.6797 62.2846 58.5631 62.2846 58.3828C62.2846 58.2291 62.1733 58.1337 61.8712 58.0489L61.5478 57.9588C61.0761 57.821 60.8375 57.5824 60.8375 57.2008C60.8375 56.7237 61.2086 56.4004 61.797 56.4004C62.3376 56.4004 62.7458 56.6919 62.8571 57.1372L62.327 57.2379C62.2528 57.0206 62.0514 56.8722 61.8023 56.8722C61.569 56.8669 61.4206 56.9941 61.4206 57.1637C61.4206 57.3174 61.5319 57.4128 61.8288 57.487L62.1574 57.5718C62.6186 57.6991 62.8677 57.927 62.8677 58.3298C62.8677 58.8175 62.4648 59.1461 61.8765 59.1461ZM64.5597 59.1461C63.7752 59.1461 63.171 58.579 63.171 57.7733C63.171 56.9676 63.7646 56.4004 64.5332 56.4004C65.2912 56.4004 65.8319 56.9146 65.8319 57.6991C65.8319 57.7945 65.8213 57.8952 65.816 57.9429H63.7911C63.8336 58.351 64.1463 58.6267 64.5597 58.6267C64.899 58.6267 65.1428 58.4358 65.2276 58.2185L65.7789 58.3669C65.6411 58.8069 65.1746 59.1461 64.5597 59.1461ZM63.8124 57.4923H65.2382C65.1958 57.1372 64.899 56.9252 64.5385 56.9252C64.1834 56.9252 63.8972 57.1319 63.8124 57.4923ZM68.6447 59.1143C68.104 59.1143 67.7489 58.7804 67.7489 58.2662V56.9888H67.2506V56.464H67.4626C67.6746 56.464 67.7489 56.3368 67.7489 55.9764V55.7643H68.3637V56.464H69.0369V56.9888H68.3637V58.2291C68.3637 58.4676 68.4962 58.6055 68.7242 58.6055C68.8461 58.6055 68.968 58.579 69.0687 58.5472L69.1535 59.0295C68.9998 59.0825 68.8249 59.1143 68.6447 59.1143ZM69.5137 59.0825V55.3721H70.1286V56.7661C70.2929 56.5276 70.5526 56.4004 70.8813 56.4004C71.4643 56.4004 71.8725 56.8086 71.8725 57.3969V59.0825H71.2576V57.5612C71.2576 57.1902 71.0456 56.957 70.701 56.957C70.3512 56.957 70.1286 57.1955 70.1286 57.5612V59.0825H69.5137ZM72.3983 59.0825V56.464H73.0132V59.0825H72.3983ZM72.2976 55.7219C72.2976 55.4993 72.4778 55.3138 72.7058 55.3138C72.939 55.3138 73.1192 55.4993 73.1192 55.7219C73.1192 55.9499 72.939 56.1354 72.7058 56.1354C72.4778 56.1354 72.2976 55.9499 72.2976 55.7219ZM74.5764 59.1461C73.9934 59.1461 73.5163 58.8228 73.4527 58.3934L73.9775 58.2556C74.0305 58.5048 74.2584 58.6797 74.5711 58.6797C74.8203 58.6797 74.9846 58.5631 74.9846 58.3828C74.9846 58.2291 74.8733 58.1337 74.5711 58.0489L74.2478 57.9588C73.776 57.821 73.5375 57.5824 73.5375 57.2008C73.5375 56.7237 73.9085 56.4004 74.4969 56.4004C75.0376 56.4004 75.4457 56.6919 75.557 57.1372L75.027 57.2379C74.9528 57.0206 74.7513 56.8722 74.5022 56.8722C74.269 56.8669 74.1206 56.9941 74.1206 57.1637C74.1206 57.3174 74.2319 57.4128 74.5287 57.487L74.8574 57.5718C75.3185 57.6991 75.5676 57.927 75.5676 58.3298C75.5676 58.8175 75.1648 59.1461 74.5764 59.1461ZM78.3825 59.1143C77.8418 59.1143 77.4867 58.7804 77.4867 58.2662V56.9888H76.9884V56.464H77.2004C77.4125 56.464 77.4867 56.3368 77.4867 55.9764V55.7643H78.1015V56.464H78.7747V56.9888H78.1015V58.2291C78.1015 58.4676 78.2341 58.6055 78.462 58.6055C78.5839 58.6055 78.7058 58.579 78.8065 58.5472L78.8913 59.0295C78.7376 59.0825 78.5627 59.1143 78.3825 59.1143ZM80.0678 59.1461C79.5537 59.1461 79.1455 58.8599 79.1455 58.3722C79.1455 57.9323 79.4317 57.662 79.9671 57.5771L80.8576 57.4393V57.3651C80.8576 57.0789 80.6403 56.9252 80.3169 56.9252C79.9989 56.9252 79.7604 57.1001 79.6438 57.3704L79.1667 57.1266C79.331 56.6813 79.7657 56.4004 80.3169 56.4004C81.006 56.4004 81.4725 56.8033 81.4725 57.3651V59.0825H80.8629V58.8281C80.6827 59.0295 80.4124 59.1461 80.0678 59.1461ZM79.7445 58.3404C79.7445 58.5631 79.93 58.685 80.2056 58.6797C80.5926 58.6744 80.8576 58.4517 80.8576 58.0701V57.8793L80.0837 58.0012C79.877 58.0383 79.7445 58.1602 79.7445 58.3404ZM83.4859 59.1461C83.136 59.1461 82.8286 59.0242 82.606 58.791V59.0825H81.9911V55.3721H82.606V56.7608C82.818 56.5276 83.1254 56.4004 83.4859 56.4004C84.2438 56.4004 84.8004 56.9676 84.8004 57.7733C84.8004 58.5843 84.2438 59.1461 83.4859 59.1461ZM82.606 57.7733C82.606 58.2503 82.9452 58.5896 83.3957 58.5896C83.8463 58.5896 84.1855 58.2503 84.1855 57.7733C84.1855 57.2962 83.8463 56.957 83.3957 56.957C82.9452 56.957 82.606 57.3015 82.606 57.7733ZM85.3637 59.1143C85.1411 59.1143 84.9714 58.9394 84.9714 58.7221C84.9714 58.5101 85.1411 58.3298 85.3637 58.3298C85.5863 58.3298 85.7559 58.5101 85.7559 58.7221C85.7559 58.9394 85.5863 59.1143 85.3637 59.1143Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M40.2522 49.5017C38.9037 49.5017 38.0556 48.5942 37.9538 47.7885L38.8613 47.5341C38.9631 47.9836 39.4295 48.5688 40.2437 48.5688C40.8458 48.5688 41.3038 48.2804 41.3038 47.7716C41.3038 47.3305 40.9307 47.0931 40.4133 46.9489L39.6246 46.7199C38.6917 46.4485 38.1234 45.9312 38.1234 45.0831C38.1234 44.0314 38.9885 43.3614 40.108 43.3614C41.3802 43.3614 42.0756 44.0908 42.2282 44.8795L41.3123 45.134C41.219 44.7269 40.8543 44.2943 40.1504 44.2943C39.5652 44.2943 39.1581 44.5912 39.1581 45.0661C39.1581 45.5071 39.4804 45.7107 40.0317 45.8633L40.8204 46.0838C41.8381 46.3807 42.3385 46.9319 42.3385 47.7546C42.3385 48.8232 41.4141 49.5017 40.2522 49.5017ZM44.6365 49.5017C43.6951 49.5017 43.0421 48.8317 43.0421 47.8055V45.2103H44.0259V47.6528C44.0259 48.2634 44.3821 48.6112 44.9249 48.6112C45.4761 48.6112 45.8323 48.2041 45.8323 47.5765V45.2103H46.8161V49.3999H45.8323V48.8995C45.5609 49.2896 45.1539 49.5017 44.6365 49.5017ZM49.5742 49.5017C48.3105 49.5017 47.3946 48.5942 47.3946 47.3136C47.3946 46.0245 48.319 45.1085 49.5742 45.1085C50.5749 45.1085 51.3297 45.6852 51.5163 46.4231L50.6343 46.6605C50.5241 46.3213 50.1424 45.999 49.5911 45.999C48.8957 45.999 48.3784 46.5079 48.3784 47.3136C48.3784 48.1108 48.8957 48.6112 49.5911 48.6112C50.1424 48.6112 50.5241 48.2889 50.6343 47.9581L51.5163 48.1956C51.3297 48.925 50.5749 49.5017 49.5742 49.5017ZM54.0797 49.5017C52.816 49.5017 51.9001 48.5942 51.9001 47.3136C51.9001 46.0245 52.8245 45.1085 54.0797 45.1085C55.0805 45.1085 55.8353 45.6852 56.0219 46.4231L55.1398 46.6605C55.0296 46.3213 54.6479 45.999 54.0967 45.999C53.4012 45.999 52.8839 46.5079 52.8839 47.3136C52.8839 48.1108 53.4012 48.6112 54.0967 48.6112C54.6479 48.6112 55.0296 48.2889 55.1398 47.9581L56.0219 48.1956C55.8353 48.925 55.0805 49.5017 54.0797 49.5017ZM58.6276 49.5017C57.3725 49.5017 56.4056 48.5942 56.4056 47.3051C56.4056 46.016 57.3555 45.1085 58.5852 45.1085C59.798 45.1085 60.6631 45.9312 60.6631 47.1864C60.6631 47.339 60.6461 47.5002 60.6376 47.5765H57.3979C57.4657 48.2295 57.9661 48.6705 58.6276 48.6705C59.1704 48.6705 59.5606 48.3652 59.6962 48.0175L60.5783 48.255C60.3578 48.9589 59.6114 49.5017 58.6276 49.5017ZM57.4318 46.8556H59.7132C59.6454 46.2874 59.1704 45.9481 58.5937 45.9481C58.0255 45.9481 57.5675 46.2789 57.4318 46.8556ZM62.8588 49.5017C61.9259 49.5017 61.1626 48.9843 61.0608 48.2974L61.9004 48.0769C61.9853 48.4755 62.3499 48.7553 62.8503 48.7553C63.2489 48.7553 63.5118 48.5688 63.5118 48.2804C63.5118 48.0345 63.3337 47.8818 62.8503 47.7461L62.333 47.6019C61.5782 47.3814 61.1965 46.9998 61.1965 46.3891C61.1965 45.6259 61.7902 45.1085 62.7316 45.1085C63.5966 45.1085 64.2497 45.575 64.4278 46.2874L63.5797 46.4485C63.4609 46.1008 63.1387 45.8633 62.7401 45.8633C62.3669 45.8548 62.1294 46.0584 62.1294 46.3298C62.1294 46.5757 62.3075 46.7284 62.7825 46.8471L63.3083 46.9828C64.0461 47.1864 64.4447 47.551 64.4447 48.1956C64.4447 48.9759 63.8002 49.5017 62.8588 49.5017ZM66.6686 49.5017C65.7357 49.5017 64.9724 48.9843 64.8706 48.2974L65.7103 48.0769C65.7951 48.4755 66.1598 48.7553 66.6601 48.7553C67.0587 48.7553 67.3217 48.5688 67.3217 48.2804C67.3217 48.0345 67.1436 47.8818 66.6601 47.7461L66.1428 47.6019C65.388 47.3814 65.0063 46.9998 65.0063 46.3891C65.0063 45.6259 65.6 45.1085 66.5414 45.1085C67.4065 45.1085 68.0595 45.575 68.2376 46.2874L67.3895 46.4485C67.2708 46.1008 66.9485 45.8633 66.5499 45.8633C66.1767 45.8548 65.9393 46.0584 65.9393 46.3298C65.9393 46.5757 66.1174 46.7284 66.5923 46.8471L67.1181 46.9828C67.856 47.1864 68.2546 47.551 68.2546 48.1956C68.2546 48.9759 67.61 49.5017 66.6686 49.5017Z\"\n fill=\"black\"\n />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint0_linear_266_5356)\" />\n <path d=\"M33.2988 33.1992L72.6068 72.5072\" stroke=\"#FAFAFA\" strokeWidth=\"4\" strokeLinecap=\"round\" />\n <path d=\"M72.6074 33.1992L33.2995 72.5072\" stroke=\"#FAFAFA\" strokeWidth=\"4\" strokeLinecap=\"round\" />\n <defs>\n <linearGradient\n id=\"paint0_linear_266_5356\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#E67E75\" />\n <stop offset=\"1\" stopColor=\"#DF5448\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport CopyButton from \"../../shared/CopyButton\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletFundFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n id: string;\n}\n\nconst WalletFundFailedView: React.FC<WalletFundFailedViewProps> = ({ onEnd, onShowActivity, id }) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n <div className=\"gw-my-10 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n <span>Transaction ID: </span>\n <CopyButton\n className=\"!gw-text-foreground\"\n textToCopy={id}\n text={id.slice(0, 20) + \"...\"}\n />\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletFundFailedView);\n","export function CaretDownIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"15\" viewBox=\"0 0 15 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.3943 0.341538C14.0449 -0.00777915 13.4786 -0.00777917 13.1293 0.341538L7.5004 5.97041L1.87152 0.341538C1.52221 -0.0077797 0.955853 -0.00777972 0.606536 0.341538C0.257219 0.690854 0.257219 1.25721 0.606536 1.60652L6.86791 7.86789C7.21722 8.21721 7.78358 8.21721 8.13289 7.86789L14.3943 1.60653C14.7436 1.25721 14.7436 0.690855 14.3943 0.341538Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","function LoadingCircleIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"255\" height=\"254\" viewBox=\"0 0 255 254\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M237.421 190.499C252.107 165.061 257.519 135.317 252.735 106.337C247.95 77.3557 233.264 50.9305 211.181 31.5634C189.097 12.1963 160.981 1.08568 131.623 0.124617C102.266 -0.836447 73.4833 8.41152 50.18 26.2928C26.8767 44.174 10.4944 69.5822 3.82443 98.1881C-2.84552 126.794 0.609563 156.828 13.601 183.172C26.5924 209.516 48.3163 230.54 75.0713 242.662C101.826 254.785 131.957 257.256 160.329 249.653L159.284 245.754C131.814 253.114 102.642 250.722 76.7374 238.985C50.8331 227.248 29.7999 206.892 17.2216 181.386C4.64325 155.88 1.29802 126.801 7.75589 99.1047C14.2138 71.4085 30.0752 46.8082 52.6375 29.4955C75.1998 12.1828 103.067 3.22887 131.491 4.15937C159.915 5.08988 187.137 15.8472 208.519 34.5985C229.901 53.3498 244.119 78.9348 248.752 106.994C253.384 135.053 248.144 163.851 233.925 188.48L237.421 190.499Z\"\n fill=\"url(#paint0_linear_116_7923)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_116_7923\"\n x1=\"127.469\"\n y1=\"0.0566442\"\n x2=\"187.157\"\n y2=\"231.817\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#8FCA94\" />\n <stop offset=\"1\" stopColor=\"#5D9461\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n\nexport default LoadingCircleIcon;\n","import { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport CopyButton from \"../../shared/CopyButton\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport NativeTokenIcon from \"../../shared/NativeTokenIcon\";\n\ninterface WalletFundPendingViewProps {\n onBack: () => void;\n id: string;\n value: number;\n}\n\nconst WalletFundPendingView: React.FC<WalletFundPendingViewProps> = ({ onBack, id, value }) => {\n const { user, nativeSymbol } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n <h6>Finalizing Purchase</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">1-5 mins</span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-justify-center gw-relative gw-z-[1]\">\n <NativeTokenIcon className=\"gw-size-8\" />\n\n <div className=\"gw-typography-h6 gw-ml-3\">\n <span>{value}</span> <span className=\"gw-text-brand-gray-500\">{nativeSymbol}</span>\n </div>\n </div>\n\n <div className=\"gw-my-4 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar className=\"gw-size-8\" />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">{user?.name}</div>\n <div className=\"gw-text-brand-gray-600\">{truncateEthAddress(user!.evmWallet)}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500\">\n <span>Transaction ID: </span>\n <CopyButton textToCopy={id} text={id.slice(0, 20) + \"...\"} />\n </span>\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletFundPendingView);\n","export function SuccessIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"105\" height=\"105\" viewBox=\"0 0 105 105\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M20.361 59.082V55.3716H21.8028C22.5926 55.3716 23.1279 55.8699 23.1279 56.6013C23.1279 57.3275 22.5926 57.8258 21.8028 57.8258H20.9918V59.082H20.361ZM20.9918 57.2639H21.8134C22.2109 57.2639 22.4919 56.9936 22.4919 56.6013C22.4919 56.2038 22.2109 55.9335 21.8134 55.9335H20.9918V57.2639ZM23.6416 59.082V55.3716H24.2565V59.082H23.6416ZM26.0586 59.1456C25.2741 59.1456 24.6698 58.5785 24.6698 57.7728C24.6698 56.9671 25.2635 56.3999 26.0321 56.3999C26.7901 56.3999 27.3307 56.9141 27.3307 57.6986C27.3307 57.794 27.3201 57.8947 27.3148 57.9424H25.29C25.3324 58.3505 25.6451 58.6262 26.0586 58.6262C26.3978 58.6262 26.6417 58.4354 26.7265 58.218L27.2777 58.3664C27.1399 58.8064 26.6735 59.1456 26.0586 59.1456ZM25.3112 57.4918H26.7371C26.6947 57.1367 26.3978 56.9247 26.0374 56.9247C25.6823 56.9247 25.396 57.1314 25.3112 57.4918ZM28.5601 59.1456C28.0459 59.1456 27.6378 58.8594 27.6378 58.3717C27.6378 57.9318 27.924 57.6615 28.4594 57.5767L29.3499 57.4388V57.3646C29.3499 57.0784 29.1325 56.9247 28.8092 56.9247C28.4912 56.9247 28.2526 57.0996 28.136 57.3699L27.659 57.1261C27.8233 56.6808 28.2579 56.3999 28.8092 56.3999C29.4983 56.3999 29.9647 56.8028 29.9647 57.3646V59.082H29.3552V58.8276C29.1749 59.029 28.9046 59.1456 28.5601 59.1456ZM28.2367 58.3399C28.2367 58.5626 28.4223 58.6845 28.6979 58.6792C29.0848 58.6739 29.3499 58.4513 29.3499 58.0696V57.8788L28.576 58.0007C28.3693 58.0378 28.2367 58.1597 28.2367 58.3399ZM31.4905 59.1456C30.9074 59.1456 30.4303 58.8223 30.3667 58.393L30.8915 58.2551C30.9445 58.5043 31.1724 58.6792 31.4851 58.6792C31.7343 58.6792 31.8986 58.5626 31.8986 58.3823C31.8986 58.2286 31.7873 58.1332 31.4851 58.0484L31.1618 57.9583C30.6901 57.8205 30.4515 57.582 30.4515 57.2003C30.4515 56.7233 30.8226 56.3999 31.4109 56.3999C31.9516 56.3999 32.3598 56.6915 32.4711 57.1367L31.941 57.2374C31.8668 57.0201 31.6654 56.8717 31.4162 56.8717C31.183 56.8664 31.0346 56.9936 31.0346 57.1632C31.0346 57.3169 31.1459 57.4123 31.4427 57.4865L31.7714 57.5714C32.2325 57.6986 32.4817 57.9265 32.4817 58.3293C32.4817 58.817 32.0788 59.1456 31.4905 59.1456ZM34.1737 59.1456C33.3892 59.1456 32.785 58.5785 32.785 57.7728C32.785 56.9671 33.3786 56.3999 34.1472 56.3999C34.9052 56.3999 35.4459 56.9141 35.4459 57.6986C35.4459 57.794 35.4353 57.8947 35.43 57.9424H33.4051C33.4475 58.3505 33.7603 58.6262 34.1737 58.6262C34.513 58.6262 34.7568 58.4354 34.8416 58.218L35.3929 58.3664C35.255 58.8064 34.7886 59.1456 34.1737 59.1456ZM33.4263 57.4918H34.8522C34.8098 57.1367 34.513 56.9247 34.1525 56.9247C33.7974 56.9247 33.5111 57.1314 33.4263 57.4918ZM38.2586 59.1456C37.5006 59.1456 36.9441 58.5838 36.9441 57.7728C36.9441 56.9671 37.5006 56.3999 38.2586 56.3999C38.6138 56.3999 38.9265 56.5271 39.1385 56.7604V55.3716H39.7534V59.082H39.1385V58.7905C38.9159 59.0237 38.6085 59.1456 38.2586 59.1456ZM37.559 57.7728C37.559 58.2498 37.8982 58.5891 38.3487 58.5891C38.7993 58.5891 39.1385 58.2498 39.1385 57.7728C39.1385 57.301 38.7993 56.9565 38.3487 56.9565C37.8982 56.9565 37.559 57.2957 37.559 57.7728ZM41.559 59.1456C40.7745 59.1456 40.1702 58.5785 40.1702 57.7728C40.1702 56.9724 40.7798 56.3999 41.559 56.3999C42.3382 56.3999 42.9477 56.9724 42.9477 57.7728C42.9477 58.5785 42.3382 59.1456 41.559 59.1456ZM40.7851 57.7728C40.7851 58.2445 41.1084 58.5891 41.559 58.5891C42.0042 58.5891 42.3329 58.2445 42.3329 57.7728C42.3329 57.301 42.0042 56.9565 41.559 56.9565C41.1084 56.9565 40.7851 57.301 40.7851 57.7728ZM44.5861 59.082V56.4635H45.201V56.718C45.3653 56.5112 45.625 56.3999 45.9536 56.3999C46.5367 56.3999 46.9449 56.8081 46.9449 57.3964V59.082H46.33V57.5608C46.33 57.1897 46.118 56.9565 45.7734 56.9565C45.4236 56.9565 45.201 57.195 45.201 57.5608V59.082H44.5861ZM48.7372 59.1456C47.9527 59.1456 47.3484 58.5785 47.3484 57.7728C47.3484 56.9724 47.958 56.3999 48.7372 56.3999C49.5164 56.3999 50.1259 56.9724 50.1259 57.7728C50.1259 58.5785 49.5164 59.1456 48.7372 59.1456ZM47.9633 57.7728C47.9633 58.2445 48.2866 58.5891 48.7372 58.5891C49.1824 58.5891 49.5111 58.2445 49.5111 57.7728C49.5111 57.301 49.1824 56.9565 48.7372 56.9565C48.2866 56.9565 47.9633 57.301 47.9633 57.7728ZM51.6924 59.1138C51.1517 59.1138 50.7966 58.7799 50.7966 58.2657V56.9883H50.2983V56.4635H50.5104C50.7224 56.4635 50.7966 56.3363 50.7966 55.9759V55.7638H51.4115V56.4635H52.0846V56.9883H51.4115V58.2286C51.4115 58.4672 51.544 58.605 51.7719 58.605C51.8938 58.605 52.0157 58.5785 52.1164 58.5467L52.2013 59.029C52.0475 59.082 51.8726 59.1138 51.6924 59.1138ZM55.0089 59.1456C54.2191 59.1456 53.6466 58.5785 53.6466 57.7781C53.6466 56.9724 54.2244 56.3999 55.0089 56.3999C55.6344 56.3999 56.1061 56.7604 56.2227 57.2215L55.6715 57.3699C55.6026 57.1579 55.364 56.9565 55.0195 56.9565C54.5848 56.9565 54.2615 57.2745 54.2615 57.7781C54.2615 58.2763 54.5848 58.5891 55.0195 58.5891C55.364 58.5891 55.6026 58.3876 55.6715 58.1809L56.2227 58.3293C56.1061 58.7852 55.6344 59.1456 55.0089 59.1456ZM56.6429 59.082V55.3716H57.2578V59.082H56.6429ZM59.0599 59.1456C58.2754 59.1456 57.6712 58.5785 57.6712 57.7728C57.6712 56.9724 58.2807 56.3999 59.0599 56.3999C59.8391 56.3999 60.4487 56.9724 60.4487 57.7728C60.4487 58.5785 59.8391 59.1456 59.0599 59.1456ZM58.286 57.7728C58.286 58.2445 58.6094 58.5891 59.0599 58.5891C59.5052 58.5891 59.8338 58.2445 59.8338 57.7728C59.8338 57.301 59.5052 56.9565 59.0599 56.9565C58.6094 56.9565 58.286 57.301 58.286 57.7728ZM61.8765 59.1456C61.2934 59.1456 60.8163 58.8223 60.7527 58.393L61.2775 58.2551C61.3305 58.5043 61.5584 58.6792 61.8712 58.6792C62.1203 58.6792 62.2846 58.5626 62.2846 58.3823C62.2846 58.2286 62.1733 58.1332 61.8712 58.0484L61.5478 57.9583C61.0761 57.8205 60.8375 57.582 60.8375 57.2003C60.8375 56.7233 61.2086 56.3999 61.797 56.3999C62.3376 56.3999 62.7458 56.6915 62.8571 57.1367L62.327 57.2374C62.2528 57.0201 62.0514 56.8717 61.8023 56.8717C61.569 56.8664 61.4206 56.9936 61.4206 57.1632C61.4206 57.3169 61.5319 57.4123 61.8288 57.4865L62.1574 57.5714C62.6186 57.6986 62.8677 57.9265 62.8677 58.3293C62.8677 58.817 62.4648 59.1456 61.8765 59.1456ZM64.5597 59.1456C63.7752 59.1456 63.171 58.5785 63.171 57.7728C63.171 56.9671 63.7646 56.3999 64.5332 56.3999C65.2912 56.3999 65.8319 56.9141 65.8319 57.6986C65.8319 57.794 65.8213 57.8947 65.816 57.9424H63.7911C63.8336 58.3505 64.1463 58.6262 64.5597 58.6262C64.899 58.6262 65.1428 58.4354 65.2276 58.218L65.7789 58.3664C65.6411 58.8064 65.1746 59.1456 64.5597 59.1456ZM63.8124 57.4918H65.2382C65.1958 57.1367 64.899 56.9247 64.5385 56.9247C64.1834 56.9247 63.8972 57.1314 63.8124 57.4918ZM68.6447 59.1138C68.104 59.1138 67.7489 58.7799 67.7489 58.2657V56.9883H67.2506V56.4635H67.4626C67.6746 56.4635 67.7489 56.3363 67.7489 55.9759V55.7638H68.3637V56.4635H69.0369V56.9883H68.3637V58.2286C68.3637 58.4672 68.4962 58.605 68.7242 58.605C68.8461 58.605 68.968 58.5785 69.0687 58.5467L69.1535 59.029C68.9998 59.082 68.8249 59.1138 68.6447 59.1138ZM69.5137 59.082V55.3716H70.1286V56.7657C70.2929 56.5271 70.5526 56.3999 70.8813 56.3999C71.4643 56.3999 71.8725 56.8081 71.8725 57.3964V59.082H71.2576V57.5608C71.2576 57.1897 71.0456 56.9565 70.701 56.9565C70.3512 56.9565 70.1286 57.195 70.1286 57.5608V59.082H69.5137ZM72.3983 59.082V56.4635H73.0132V59.082H72.3983ZM72.2976 55.7214C72.2976 55.4988 72.4778 55.3133 72.7058 55.3133C72.939 55.3133 73.1192 55.4988 73.1192 55.7214C73.1192 55.9494 72.939 56.1349 72.7058 56.1349C72.4778 56.1349 72.2976 55.9494 72.2976 55.7214ZM74.5764 59.1456C73.9934 59.1456 73.5163 58.8223 73.4527 58.393L73.9775 58.2551C74.0305 58.5043 74.2584 58.6792 74.5711 58.6792C74.8203 58.6792 74.9846 58.5626 74.9846 58.3823C74.9846 58.2286 74.8733 58.1332 74.5711 58.0484L74.2478 57.9583C73.776 57.8205 73.5375 57.582 73.5375 57.2003C73.5375 56.7233 73.9085 56.3999 74.4969 56.3999C75.0376 56.3999 75.4457 56.6915 75.557 57.1367L75.027 57.2374C74.9528 57.0201 74.7513 56.8717 74.5022 56.8717C74.269 56.8664 74.1206 56.9936 74.1206 57.1632C74.1206 57.3169 74.2319 57.4123 74.5287 57.4865L74.8574 57.5714C75.3185 57.6986 75.5676 57.9265 75.5676 58.3293C75.5676 58.817 75.1648 59.1456 74.5764 59.1456ZM78.3825 59.1138C77.8418 59.1138 77.4867 58.7799 77.4867 58.2657V56.9883H76.9884V56.4635H77.2004C77.4125 56.4635 77.4867 56.3363 77.4867 55.9759V55.7638H78.1015V56.4635H78.7747V56.9883H78.1015V58.2286C78.1015 58.4672 78.2341 58.605 78.462 58.605C78.5839 58.605 78.7058 58.5785 78.8065 58.5467L78.8913 59.029C78.7376 59.082 78.5627 59.1138 78.3825 59.1138ZM80.0678 59.1456C79.5537 59.1456 79.1455 58.8594 79.1455 58.3717C79.1455 57.9318 79.4317 57.6615 79.9671 57.5767L80.8576 57.4388V57.3646C80.8576 57.0784 80.6403 56.9247 80.3169 56.9247C79.9989 56.9247 79.7604 57.0996 79.6438 57.3699L79.1667 57.1261C79.331 56.6808 79.7657 56.3999 80.3169 56.3999C81.006 56.3999 81.4725 56.8028 81.4725 57.3646V59.082H80.8629V58.8276C80.6827 59.029 80.4124 59.1456 80.0678 59.1456ZM79.7445 58.3399C79.7445 58.5626 79.93 58.6845 80.2056 58.6792C80.5926 58.6739 80.8576 58.4513 80.8576 58.0696V57.8788L80.0837 58.0007C79.877 58.0378 79.7445 58.1597 79.7445 58.3399ZM83.4859 59.1456C83.136 59.1456 82.8286 59.0237 82.606 58.7905V59.082H81.9911V55.3716H82.606V56.7604C82.818 56.5271 83.1254 56.3999 83.4859 56.3999C84.2438 56.3999 84.8004 56.9671 84.8004 57.7728C84.8004 58.5838 84.2438 59.1456 83.4859 59.1456ZM82.606 57.7728C82.606 58.2498 82.9452 58.5891 83.3957 58.5891C83.8463 58.5891 84.1855 58.2498 84.1855 57.7728C84.1855 57.2957 83.8463 56.9565 83.3957 56.9565C82.9452 56.9565 82.606 57.301 82.606 57.7728ZM85.3637 59.1138C85.1411 59.1138 84.9714 58.9389 84.9714 58.7216C84.9714 58.5096 85.1411 58.3293 85.3637 58.3293C85.5863 58.3293 85.7559 58.5096 85.7559 58.7216C85.7559 58.9389 85.5863 59.1138 85.3637 59.1138Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M40.2522 49.5012C38.9037 49.5012 38.0556 48.5937 37.9538 47.788L38.8613 47.5336C38.9631 47.9831 39.4295 48.5683 40.2437 48.5683C40.8458 48.5683 41.3038 48.2799 41.3038 47.7711C41.3038 47.3301 40.9307 47.0926 40.4133 46.9484L39.6246 46.7194C38.6917 46.448 38.1234 45.9307 38.1234 45.0826C38.1234 44.0309 38.9885 43.3609 40.108 43.3609C41.3802 43.3609 42.0756 44.0903 42.2282 44.879L41.3123 45.1335C41.219 44.7264 40.8543 44.2939 40.1504 44.2939C39.5652 44.2939 39.1581 44.5907 39.1581 45.0656C39.1581 45.5066 39.4804 45.7102 40.0317 45.8628L40.8204 46.0833C41.8381 46.3802 42.3385 46.9314 42.3385 47.7541C42.3385 48.8227 41.4141 49.5012 40.2522 49.5012ZM44.6365 49.5012C43.6951 49.5012 43.0421 48.8312 43.0421 47.805V45.2098H44.0259V47.6523C44.0259 48.263 44.3821 48.6107 44.9249 48.6107C45.4761 48.6107 45.8323 48.2036 45.8323 47.576V45.2098H46.8161V49.3994H45.8323V48.899C45.5609 49.2892 45.1539 49.5012 44.6365 49.5012ZM49.5742 49.5012C48.3105 49.5012 47.3946 48.5937 47.3946 47.3131C47.3946 46.024 48.319 45.108 49.5742 45.108C50.5749 45.108 51.3297 45.6847 51.5163 46.4226L50.6343 46.6601C50.5241 46.3208 50.1424 45.9985 49.5911 45.9985C48.8957 45.9985 48.3784 46.5074 48.3784 47.3131C48.3784 48.1103 48.8957 48.6107 49.5911 48.6107C50.1424 48.6107 50.5241 48.2884 50.6343 47.9576L51.5163 48.1951C51.3297 48.9245 50.5749 49.5012 49.5742 49.5012ZM54.0797 49.5012C52.816 49.5012 51.9001 48.5937 51.9001 47.3131C51.9001 46.024 52.8245 45.108 54.0797 45.108C55.0805 45.108 55.8353 45.6847 56.0219 46.4226L55.1398 46.6601C55.0296 46.3208 54.6479 45.9985 54.0967 45.9985C53.4012 45.9985 52.8839 46.5074 52.8839 47.3131C52.8839 48.1103 53.4012 48.6107 54.0967 48.6107C54.6479 48.6107 55.0296 48.2884 55.1398 47.9576L56.0219 48.1951C55.8353 48.9245 55.0805 49.5012 54.0797 49.5012ZM58.6276 49.5012C57.3725 49.5012 56.4056 48.5937 56.4056 47.3046C56.4056 46.0155 57.3555 45.108 58.5852 45.108C59.798 45.108 60.6631 45.9307 60.6631 47.1859C60.6631 47.3385 60.6461 47.4997 60.6376 47.576H57.3979C57.4657 48.229 57.9661 48.67 58.6276 48.67C59.1704 48.67 59.5606 48.3647 59.6962 48.017L60.5783 48.2545C60.3578 48.9584 59.6114 49.5012 58.6276 49.5012ZM57.4318 46.8551H59.7132C59.6454 46.2869 59.1704 45.9476 58.5937 45.9476C58.0255 45.9476 57.5675 46.2784 57.4318 46.8551ZM62.8588 49.5012C61.9259 49.5012 61.1626 48.9838 61.0608 48.2969L61.9004 48.0764C61.9853 48.475 62.3499 48.7549 62.8503 48.7549C63.2489 48.7549 63.5118 48.5683 63.5118 48.2799C63.5118 48.034 63.3337 47.8813 62.8503 47.7456L62.333 47.6014C61.5782 47.3809 61.1965 46.9993 61.1965 46.3887C61.1965 45.6254 61.7902 45.108 62.7316 45.108C63.5966 45.108 64.2497 45.5745 64.4278 46.2869L63.5797 46.448C63.4609 46.1003 63.1387 45.8628 62.7401 45.8628C62.3669 45.8544 62.1294 46.0579 62.1294 46.3293C62.1294 46.5752 62.3075 46.7279 62.7825 46.8466L63.3083 46.9823C64.0461 47.1859 64.4447 47.5506 64.4447 48.1951C64.4447 48.9754 63.8002 49.5012 62.8588 49.5012ZM66.6686 49.5012C65.7357 49.5012 64.9724 48.9838 64.8706 48.2969L65.7103 48.0764C65.7951 48.475 66.1598 48.7549 66.6601 48.7549C67.0587 48.7549 67.3217 48.5683 67.3217 48.2799C67.3217 48.034 67.1436 47.8813 66.6601 47.7456L66.1428 47.6014C65.388 47.3809 65.0063 46.9993 65.0063 46.3887C65.0063 45.6254 65.6 45.108 66.5414 45.108C67.4065 45.108 68.0595 45.5745 68.2376 46.2869L67.3895 46.448C67.2708 46.1003 66.9485 45.8628 66.5499 45.8628C66.1767 45.8544 65.9393 46.0579 65.9393 46.3293C65.9393 46.5752 66.1174 46.7279 66.5923 46.8466L67.1181 46.9823C67.856 47.1859 68.2546 47.5506 68.2546 48.1951C68.2546 48.9754 67.61 49.5012 66.6686 49.5012Z\"\n fill=\"black\"\n />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint0_linear_125_5849)\" />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint1_linear_125_5849)\" />\n <path\n d=\"M29.7695 53.0065L44.5519 67.7889C44.5519 67.7889 64.5228 47.8179 77.3193 35.0215\"\n stroke=\"#FAFAFA\"\n strokeWidth=\"6.09\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_125_5849\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#56F68B\" />\n <stop offset=\"1\" stopColor=\"#3DCF6E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_125_5849\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#8FCA94\" />\n <stop offset=\"1\" stopColor=\"#5D9461\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport NativeTokenIcon from \"../../shared/NativeTokenIcon\";\nimport { cn } from \"../../../lib/utils\";\n\ninterface WalletFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n value: number;\n}\n\nconst WalletFundSuccessView: React.FC<WalletFundSuccessViewProps> = ({ onEnd, onShowActivity, value }) => {\n const { user, nativeSymbol } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your account has been\\nsuccessfully funded!`}\n </span>\n\n <div\n className={cn(\n \"gw-my-10 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-2 gw-w-full gw-justify-between\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" // liquid glass shadow\n )}\n >\n <NativeTokenIcon className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-typography-body2\">\n <span>\n {value} {nativeSymbol}\n </span>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <span className=\"gw-break-all gw-typography-body2\">\n {truncateEthAddress(user!.evmWallet)}\n </span>\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletFundSuccessView);\n","import { Loader2 } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport USDIcon from \"../../assets/images/USDIcon.png\";\nimport { LinkIcon } from \"../../assets/svg/LinkIcon\";\nimport { useGlyphFunding } from \"../../hooks/useGlyphFunding\";\nimport { FundView, INTERNAL_GRADIENT_TYPE } from \"../../lib/constants\";\nimport { currencyToSymbol, formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport { cn } from \"../../lib/utils\";\nimport NativeTokenIcon from \"../shared/NativeTokenIcon\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\nimport WalletFundFailedView from \"./internal/WalletFundFailedView\";\nimport WalletFundPendingView from \"./internal/WalletFundPendingView\";\nimport WalletFundSuccessView from \"./internal/WalletFundSuccessView\";\n\nexport type WalletFundProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nconst MAX_DECIMALS = 2;\n\nexport function WalletFundView({ onBack, onEnd, onShowActivity, setGradientType }: WalletFundProps) {\n const QA = false;\n\n const {\n userCurrency,\n fundAmount,\n fundMinAmount,\n fundMaxAmount,\n fundIntermediaryToken,\n fundDone,\n fundError,\n fundAmountError,\n fundQuote,\n fundStatus,\n quoteLoading,\n doFunding,\n setFundAmount,\n isOnrampEnabled,\n onramppDisabledError,\n fundSymbol\n } = useGlyphFunding();\n\n const [view, setView] = useState<FundView>(FundView.BUY);\n\n const [fetchingPaymentLink, setFetchingPaymentLink] = useState<boolean>(false);\n\n const handleBuy = async () => {\n if (!isOnrampEnabled && !QA) return;\n setFetchingPaymentLink(true);\n doFunding(\n () => {\n setView(FundView.WAIT);\n setFetchingPaymentLink(false);\n },\n (error: string) => {\n toast.error(error);\n setFetchingPaymentLink(false);\n }\n );\n };\n\n useEffect(() => {\n if (fundDone) setView(FundView.END);\n }, [fundDone]);\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === FundView.END && fundStatus === \"SUCCESS\") setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n if (view === FundView.END && fundStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, fundStatus, view]);\n\n const validAmountEntered = fundAmount && !fundAmountError;\n\n return (\n <>\n {view === FundView.BUY && (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Fund Wallet\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-h-full gw-flex gw-flex-col gw-justify-center\">\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {validAmountEntered ? \"Pay\" : \"Enter Amount\"}\n </div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1\">\n <div\n className={`gw-w-full gw-text-center gw-border-b-2 gw-border-border focus-within:gw-border-foreground gw-pb-1 gw-flex gw-justify-between gw-items-center gw-typography-h3-nr`}\n >\n <span>{currencyToSymbol(userCurrency)}</span>\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n min={fundMinAmount ?? 0}\n max={fundMaxAmount ?? 999999}\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (fundAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n disabled={fetchingPaymentLink || (!isOnrampEnabled && !QA)}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={fundAmount}\n onChange={(e) =>\n setFundAmount((v: string) => {\n let value = formatInputNumber(e.target.value, MAX_DECIMALS);\n if (\n e.target.max &&\n parseFloat(value) > parseFloat(e.target.max)\n )\n value = v;\n\n return value;\n })\n }\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {userCurrency === \"USD\" ? (\n <img src={USDIcon} alt=\"coin\" className=\"gw-size-10 gw-rounded-full\" />\n ) : (\n <div className=\"gw-rounded-full gw-size-10 gw-inline-flex gw-justify-center gw-items-center gw-bg-primary gw-text-primary-foreground gw-typography-body2\">\n {userCurrency}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"gw-typography-caption\">\n <div className=\"gw-mt-2 gw-text-brand-gray-500 gw-text-center\">\n {fundAmountError ||\n (isOnrampEnabled &&\n `${formatCurrency(fundMinAmount ?? 0, userCurrency)} min - ${formatCurrency(fundMaxAmount ?? 999999, userCurrency)} max`)}\n </div>\n\n {!validAmountEntered &&\n (isOnrampEnabled ? (\n <div className=\"gw-mt-4 gw-flex gw-space-x-2 gw-text-brand-gray-500 gw-items-center gw-justify-center\">\n <span>You will receive {fundSymbol}</span>\n <NativeTokenIcon />\n </div>\n ) : (\n <div\n className=\"gw-mt-8 gw-text-brand-gray-600 gw-text-center gw-text-xs gw-px-4 gw-py-3 gw-rounded-xl gw-border\"\n style={{\n borderColor: \"#FFBD42\",\n backgroundColor: \"rgba(253, 215, 53, 0.08)\"\n }}\n >\n To fund your wallet, switch your network to{\" \"}\n <b className=\"gw-text-brand-gray-700\">ApeChain</b>. From Home, choose\n ApeChain in the top right. Remember, funds remain on{\" \"}\n <b className=\"gw-text-brand-gray-700\">ApeChain</b>.\n </div>\n ))}\n </div>\n </div>\n\n {validAmountEntered && (\n <div>\n <div className=\"gw-flex gw-flex-col gw-mt-5\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Receive</div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1\">\n <div className=\"gw-typography-h3-nr\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-20 gw-h-10\" />\n ) : (\n fundQuote?.out_tokens_amount\n )}\n </div>\n\n <NativeTokenIcon className=\"gw-size-10 gw-rounded-full\" />\n </div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500 gw-mt-1 gw-text-center gw-flex gw-items-center gw-justify-center gw-gap-0.5\">\n <span>1 {fundSymbol} = </span>\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-4 gw-inline-block\" />\n ) : (\n // TODO: Do the calculation before showing it in diff currency\n `${formatCurrency(fundQuote?.ape_to_currency, fundQuote?.currency)}`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-py-4 gw-border-b gw-border-muted\">\n <span className=\"gw-typography-caption\">How this transaction works</span>\n <TooltipElement\n stopPropagation\n description={\n <div className=\"gw-p-3 gw-max-w-xs\">\n <div className=\"gw-typography-body2 !gw-font-bold gw-text-center\">\n How This Transaction Works\n </div>\n <p className=\"gw-typography-caption gw-text-brand-gray-500 gw-mt-2\">\n Once you enter an amount, we&apos;ll take care of the rest. Your\n order is processed via Coinbase.\n </p>\n <div className=\"gw-mt-4 gw-space-y-3\">\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 1\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">\n Buy {fundIntermediaryToken}:\n </span>{\" \"}\n Your {userCurrency} is converted to{\" \"}\n {fundIntermediaryToken}\n </p>\n </div>\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 2\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">\n Swap to {fundSymbol}:\n </span>{\" \"}\n {fundIntermediaryToken} is exchanged for {fundSymbol} on\n current chain\n </p>\n </div>\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 3\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">Receive Funds:</span>{\" \"}\n {fundSymbol} is sent to your wallet\n </p>\n </div>\n </div>\n </div>\n }\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Tx data */}\n <div className=\"gw-typography-body2 gw-mt-4\">\n <div className=\"gw-flex gw-justify-between gw-items-center\">\n <span>Transaction Time</span>\n <span className=\"gw-text-brand-gray-500\">1-5 mins</span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n `${formatCurrency(fundQuote?.estimated_fees_amount, fundQuote?.currency)}`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2\">\n <span>Total</span>\n <div className=\"gw-text-brand-gray-500\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n `${formatCurrency(fundQuote?.in_amount, fundQuote?.currency)}`\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n }\n footer={\n <>\n <span\n className={cn(\n `gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-mb-2 ${fundError ? \"gw-text-destructive\" : \"gw-text-brand-gray-500\"}`\n )}\n >\n <span\n className={cn(\n \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-rounded-full\",\n fundError ? \"gw-bg-destructive-foreground/60\" : \"gw-bg-brand-white/60\"\n )}\n >\n {fundError\n ? fundError\n : !validAmountEntered\n ? `*You pay in ${currencyToSymbol(userCurrency)} (${userCurrency})`\n : \"*Your order will be fulfilled via Coinbase\"}\n </span>\n </span>\n\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full\"\n style={{\n backgroundColor: isOnrampEnabled ? undefined : \"#EAEAEA\",\n color: isOnrampEnabled ? undefined : \"#808080\"\n }}\n disabled={\n quoteLoading ||\n !!fundError ||\n fetchingPaymentLink ||\n (!isOnrampEnabled && !QA) ||\n !validAmountEntered\n }\n onClick={handleBuy}\n >\n {isOnrampEnabled || QA ? (\n <>\n {validAmountEntered && !quoteLoading ? (\n <>\n Continue to Coinbase <LinkIcon className=\"gw-size-4\" />\n </>\n ) : (\n \"Continue\"\n )}\n {((quoteLoading && validAmountEntered) || fetchingPaymentLink) && (\n <Loader2 className=\"gw-size-4 gw-animate-spin\" />\n )}\n </>\n ) : (\n onramppDisabledError || \"Continue\"\n )}\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === FundView.WAIT && (\n <WalletFundPendingView\n onBack={onBack}\n id={fundQuote?.id || \"\"}\n value={fundQuote?.out_tokens_amount || 0}\n />\n )}\n\n {view === FundView.END &&\n (fundStatus === \"SUCCESS\" ? (\n <WalletFundSuccessView\n value={fundQuote?.out_tokens_amount || 0}\n onEnd={onEnd}\n onShowActivity={onShowActivity}\n />\n ) : (\n <WalletFundFailedView id={fundQuote?.id || \"\"} onEnd={onEnd} onShowActivity={onShowActivity} />\n ))}\n </>\n );\n}\n","interface Props extends React.SVGProps<SVGSVGElement> {\n isActive: boolean;\n}\n\nfunction ActivityIcon(props: Props) {\n const { isActive, ...rest } = props;\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <g clipPath=\"url(#clip0_665_3257)\">\n <path\n d=\"M10.3926 17.54C14.7882 17.54 18.3516 13.9767 18.3516 9.58105C18.3516 5.18543 14.7882 1.62207 10.3926 1.62207C5.99695 1.62207 2.43359 5.18543 2.43359 9.58105C2.43359 13.9767 5.99695 17.54 10.3926 17.54Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.3926 4.80566V9.58105L13.5762 11.1729\"\n className={isActive ? \"gw-stroke-popover\" : \"gw-stroke-current\"}\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_665_3257\">\n <rect width=\"19.1016\" height=\"19.1016\" fill=\"white\" transform=\"translate(0.841797 0.0302734)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ActivityIcon;\n","function HomeIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"23\" height=\"21\" viewBox=\"0 0 23 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.3892 1.5525L2.16118 7.25004C1.89143 7.43683 1.73047 7.74406 1.73047 8.07217V18.2133C1.73047 19.2694 2.6134 20.1524 3.66956 20.1524H7.61845C8.17073 20.1524 8.61845 19.7046 8.61845 19.1524V14.491C8.61845 13.9387 9.06616 13.491 9.61844 13.491H13.4348C13.9871 13.491 14.4348 13.9387 14.4348 14.491V19.1524C14.4348 19.7046 14.8825 20.1524 15.4348 20.1524H19.3291C20.3853 20.1524 21.2682 19.2694 21.2682 18.2133V8.07021C21.2682 7.74319 21.1083 7.43683 20.84 7.24983L12.6715 1.55603C11.9861 1.07831 11.076 1.0769 10.3892 1.5525Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default HomeIcon;\n","function TokensIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"21\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_661_2577)\">\n <rect\n x=\"1.01807\"\n y=\"1.20703\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"12.1294\"\n y=\"1.20703\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"12.1294\"\n y=\"12.3184\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"1.01807\"\n y=\"12.3181\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_661_2577\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.268066 0.457031)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default TokensIcon;\n","const WalletsTabFilledIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"22\" height=\"18\" viewBox=\"0 0 22 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19.1504 0C20.669 0.000237059 21.9004 1.23136 21.9004 2.75V11.7832H21.8926V15.7539C21.8926 16.8585 20.9971 17.7539 19.8926 17.7539H2.00391C0.899349 17.7539 0.00392532 16.8585 0.00390625 15.7539V11.1855H0V2.75C1.28851e-07 1.23122 1.23122 0 2.75 0H19.1504ZM2.75 5.58594C2.05964 5.58594 1.5 6.14558 1.5 6.83594V8.07324H7.34863C7.85585 8.07324 8.34436 8.26589 8.71484 8.6123L9.65625 9.49219C10.425 10.2111 11.6189 10.2111 12.3877 9.49219L13.3291 8.6123C13.6996 8.26586 14.1881 8.07324 14.6953 8.07324H20.4004V6.83594C20.4004 6.14573 19.8405 5.58617 19.1504 5.58594H2.75ZM2.75 1.5C2.05964 1.5 1.5 2.05964 1.5 2.75V4.38867C1.87532 4.19658 2.29942 4.08594 2.75 4.08594H19.1504C19.6009 4.08601 20.0251 4.19653 20.4004 4.38867V2.75C20.4004 2.05979 19.8405 1.50024 19.1504 1.5H2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WalletsTabFilledIcon;\n","const WalletsTabOutlinedIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"22\" height=\"18\" viewBox=\"0 0 22 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19.1504 0C20.669 0.000237059 21.9004 1.23136 21.9004 2.75V11.7832H21.8926V15.7539C21.8926 16.8585 20.9971 17.7539 19.8926 17.7539H2.00391C0.899349 17.7539 0.00392532 16.8585 0.00390625 15.7539V11.1855H0V2.75C1.28851e-07 1.23122 1.23122 0 2.75 0H19.1504ZM1.50391 15.7539C1.50393 16.03 1.72778 16.2539 2.00391 16.2539H19.8926C20.1687 16.2539 20.3926 16.03 20.3926 15.7539V9.57324H14.6953C14.5685 9.57324 14.4461 9.6214 14.3535 9.70801L13.4121 10.5879C12.0667 11.8459 9.9772 11.8459 8.63184 10.5879L7.69043 9.70801C7.59781 9.6214 7.47544 9.57324 7.34863 9.57324H1.50391V15.7539ZM2.75 5.58594C2.05964 5.58594 1.5 6.14558 1.5 6.83594V8.07324H7.34863C7.85585 8.07324 8.34436 8.26589 8.71484 8.6123L9.65625 9.49219C10.425 10.2111 11.6189 10.2111 12.3877 9.49219L13.3291 8.6123C13.6996 8.26586 14.1881 8.07324 14.6953 8.07324H20.4004V6.83594C20.4004 6.14573 19.8405 5.58617 19.1504 5.58594H2.75ZM2.75 1.5C2.05964 1.5 1.5 2.05964 1.5 2.75V4.38867C1.87532 4.19658 2.29942 4.08594 2.75 4.08594H19.1504C19.6009 4.08601 20.0251 4.19653 20.4004 4.38867V2.75C20.4004 2.05979 19.8405 1.50024 19.1504 1.5H2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WalletsTabOutlinedIcon;\n","import { memo } from \"react\";\nimport ActivityIcon from \"../../assets/svg/ActivityIcon\";\nimport HomeIcon from \"../../assets/svg/HomeIcon\";\nimport TokensIcon from \"../../assets/svg/TokensIcon\";\nimport WalletsTabFilledIcon from \"../../assets/svg/WalletsTabFilledIcon\";\nimport WalletsTabOutlinedIcon from \"../../assets/svg/WalletsTabOutlinedIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { WalletMainViewTab } from \"../../lib/constants\";\nimport { cn } from \"../../lib/utils\";\n\ninterface WalletViewFooterNavProps {\n tab: WalletMainViewTab;\n setTab: (tab: WalletMainViewTab) => void;\n}\n\nconst WalletViewFooterNav: React.FC<WalletViewFooterNavProps> = ({ tab, setTab }) => {\n const { user } = useGlyph();\n\n return (\n <>\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.HOME)}>\n <HomeIcon\n className={cn(\n tab === WalletMainViewTab.HOME ? \"gw-fill-secondary gw-text-secondary\" : \"gw-text-primary\",\n \"gw-size-5\"\n )}\n />\n <span className=\"gw-sr-only\">Home</span>\n </button>\n\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.TOKENS)}>\n <TokensIcon\n className={cn(\n tab === WalletMainViewTab.TOKENS || tab === WalletMainViewTab.NFTS\n ? \"gw-fill-secondary gw-text-secondary\"\n : \"gw-text-primary\",\n \"gw-size-5\"\n )}\n />\n <span className=\"gw-sr-only\">Tokens & NFTs</span>\n </button>\n\n {/* Replace the button below with discover once we reach that point */}\n {/* <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.NFTS)}>\n <NFTsIcon selected={tab === WalletMainViewTab.NFTS} />\n <span className=\"gw-sr-only\">NFTs</span>\n </button> */}\n\n {/* Only show Wallets tab button for Glyph users */}\n {user?.hasProfile && (\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.LINKED_ACCOUNTS)}>\n {tab === WalletMainViewTab.LINKED_ACCOUNTS ? (\n <WalletsTabFilledIcon className={\"gw-text-secondary gw-h-5\"} />\n ) : (\n <WalletsTabOutlinedIcon className={\"gw-text-primary gw-h-5\"} />\n )}\n <span className=\"gw-sr-only\">Linked Accounts</span>\n </button>\n )}\n\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.ACTIVITY)}>\n <ActivityIcon\n isActive={tab === WalletMainViewTab.ACTIVITY}\n className={cn(\n tab === WalletMainViewTab.ACTIVITY ? \"gw-fill-secondary gw-text-secondary\" : \"gw-text-primary\",\n \"gw-size-6\"\n )}\n />\n <span className=\"gw-sr-only\">Activity</span>\n </button>\n </>\n );\n};\n\nexport default memo(WalletViewFooterNav);\n","export function TxSendIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.998047 0C0.445762 0 -0.00195312 0.447715 -0.00195312 1C-0.00195312 1.55228 0.445762 2 0.998047 2H8.61174L0.292089 10.2927C-0.0990687 10.6826 -0.100097 11.3157 0.289793 11.7069C0.679683 12.0981 1.31285 12.0991 1.704 11.7092L9.99805 3.44204V11C9.99805 11.5523 10.4458 12 10.998 12C11.5503 12 11.998 11.5523 11.998 11V1C11.998 0.447715 11.5503 0 10.998 0H0.998047Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","export function TxSwapIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"16\" viewBox=\"0 0 21 16\" fill=\"none\" {...props}>\n <path d=\"M5.85383 2.51924L5.83203 14.75\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10.9179 9.66607L5.83393 14.75L0.75 9.66607\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M14.801 12.9808L14.7793 0.75\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M19.8568 5.83393L14.7729 0.75L9.68896 5.83393\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n","import { TxSendIcon } from \"../../assets/svg/TxSendIcon\";\nimport { TxSwapIcon } from \"../../assets/svg/TxSwapIcon\";\nimport { CHAIN_NAMES } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { chainIdToRelayChain, cn } from \"../../lib/utils\";\n\nexport interface ActivityRowProps {\n data: {\n type: string;\n type_text: string;\n status: string;\n value: string;\n amount: string;\n amount_currency: string;\n name_on_list: string | null;\n chain_id?: number; // Only pass chain_id if fetchForAllNetworks is true\n };\n}\n\nexport function ActivityRow({ data }: ActivityRowProps) {\n const chain = data?.chain_id ? chainIdToRelayChain(data.chain_id) : undefined;\n\n return (\n <div className=\"gw-flex gw-items-center gw-typography-body1 gw-flex-1 gw-space-x-3\">\n <span className=\"gw-relative gw-flex-shrink-0\">\n <span\n className={cn(\n \"gw-rounded-full gw-size-10 gw-flex-shrink-0 gw-flex gw-justify-center gw-items-center\",\n data.status === \"Confirmed\"\n ? data.type === \"swap\"\n ? \"gw-bg-brand-swapsuccess\"\n : \"gw-bg-brand-success\"\n : data.status === \"Failed\"\n ? \"gw-bg-destructive\"\n : \"gw-bg-brand-warning\"\n )}\n >\n {data.type === \"swap\" ? (\n <TxSwapIcon />\n ) : data.type === \"receive\" ? (\n <TxSendIcon className=\"gw-size-3 gw-rotate-180\" />\n ) : (\n <TxSendIcon />\n )}\n </span>\n\n {chain?.iconUrl && (\n <span\n className={cn(\n \"gw-absolute gw-bottom-0 gw-right-0 gw-translate-x-[10%] gw-translate-y-[10%] gw-size-5 gw-rounded-full gw-bg-background\"\n )}\n >\n <img\n src={chain?.iconUrl}\n alt={CHAIN_NAMES[chain?.id] || chain?.name}\n className=\"gw-rounded-full gw-size-full\"\n />\n </span>\n )}\n </span>\n <div className=\"gw-w-full gw-flex gw-justify-between gw-items-center gw-flex-1\">\n {/* Left side */}\n <div className=\"gw-max-w-[35%] gw-flex gw-flex-col gw-text-start\">\n <div className=\"gw-font-medium gw-capitalize\">{data.type_text || data.type}</div>\n <div\n className={cn(\n \"gw-typography-caption\",\n data.status === \"Confirmed\"\n ? \"gw-text-brand-success\"\n : data.status === \"Failed\"\n ? \"gw-text-destructive\"\n : \"gw-text-brand-warning\"\n )}\n >\n {data.status}\n </div>\n </div>\n {/* Right side */}\n <div className=\"gw-max-w-[55%] gw-flex gw-flex-col gw-items-end\">\n <div className=\"gw-font-medium\">{data.value}</div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500 gw-line-clamp-1\">{`${data.name_on_list !== null ? data.name_on_list.toUpperCase() : formatCurrency(data.amount, data.amount_currency)}`}</div>\n </div>\n </div>\n </div>\n );\n}\n","import { TxSendIcon } from \"../../assets/svg/TxSendIcon\";\nimport { buttonVariants } from \"../ui/button\";\n\nexport function LinkWithIcon({ text, url }: { text: string; url: string }) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonVariants({\n variant: \"link\",\n size: \"sm\",\n className: \"gw-py-0 gw-h-auto\",\n scale: false\n })}\n >\n <div className=\"gw-inline-flex gw-items-center gw-space-x-1 gw-text-foreground gw-typography-body2\">\n <span>{text}&nbsp;</span>\n <TxSendIcon className=\"!gw-size-2.5 gw-text-primary\" />\n </div>\n </a>\n );\n}\n","import { cn } from \"../../../lib/utils\";\nimport { Skeleton } from \"../../ui/skeleton\";\n\nexport function ActivityRowSkeleton() {\n return (\n <div className=\"gw-flex gw-items-center gw-typography-body1 gw-flex-1 gw-space-x-3 gw-py-3.5\">\n <div\n className={cn(\n \"gw-rounded-full gw-overflow-hidden gw-size-10 gw-flex-shrink-0 gw-flex gw-justify-center gw-items-center\"\n )}\n >\n <Skeleton className=\"gw-w-full gw-h-full gw-rounded-full\" />\n </div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-flex-1\">\n <div className=\"gw-flex gw-flex-col gw-text-start gw-space-y-1\">\n <div className=\"gw-font-medium gw-capitalize\">\n <Skeleton className=\"gw-w-14 gw-h-4\" />\n </div>\n <div className={cn(\"gw-typography-caption\")}>\n <Skeleton className=\"gw-w-14 gw-h-3\" />\n </div>\n </div>\n <div className=\"gw-flex gw-flex-col gw-text-end gw-space-y-1\">\n <div className=\"gw-font-medium\">\n <Skeleton className=\"gw-w-10 gw-h-4\" />\n </div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">\n <Skeleton className=\"gw-w-10 gw-h-3\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n (props, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps;\n const multipleProps = accordionProps;\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n (props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n collapsible = false,\n ...accordionSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemOpen: setValue,\n onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n }\n );\n }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...accordionMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n const handleItemOpen = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleItemClose = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value,\n onItemOpen: handleItemOpen,\n onItemClose: handleItemClose,\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n }\n );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n if (triggerIndex === -1) return;\n event.preventDefault();\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n switch (event.key) {\n case \"Home\":\n nextIndex = homeIndex;\n break;\n case \"End\":\n nextIndex = endIndex;\n break;\n case \"ArrowRight\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case \"ArrowDown\":\n if (orientation === \"vertical\") {\n moveNext();\n }\n break;\n case \"ArrowLeft\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case \"ArrowUp\":\n if (orientation === \"vertical\") {\n movePrev();\n }\n break;\n }\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex].ref.current?.focus();\n });\n return /* @__PURE__ */ jsx(\n AccordionImplProvider,\n {\n scope: __scopeAccordion,\n disabled,\n direction: dir,\n orientation,\n children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...accordionProps,\n \"data-orientation\": orientation,\n ref: composedRefs,\n onKeyDown: disabled ? void 0 : handleKeyDown\n }\n ) })\n }\n );\n }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = value && valueContext.value.includes(value) || false;\n const disabled = accordionContext.disabled || props.disabled;\n return /* @__PURE__ */ jsx(\n AccordionItemProvider,\n {\n scope: __scopeAccordion,\n open,\n disabled,\n triggerId,\n children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Root,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(open),\n ...collapsibleScope,\n ...accordionItemProps,\n ref: forwardedRef,\n disabled,\n open,\n onOpenChange: (open2) => {\n if (open2) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }\n }\n )\n }\n );\n }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return /* @__PURE__ */ jsx(\n Primitive.h3,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(itemContext.open),\n \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n ...headerProps,\n ref: forwardedRef\n }\n );\n }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Trigger,\n {\n \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n \"data-orientation\": accordionContext.orientation,\n id: itemContext.triggerId,\n ...collapsibleScope,\n ...triggerProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Content,\n {\n role: \"region\",\n \"aria-labelledby\": itemContext.triggerId,\n \"data-orientation\": accordionContext.orientation,\n ...collapsibleScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n ...props.style\n }\n }\n );\n }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n Accordion,\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n AccordionTrigger,\n Content2 as Content,\n Header,\n Item,\n Root2 as Root,\n Trigger2 as Trigger,\n createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ComponentPropsWithoutRef, ComponentRef, forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Item>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />);\n\nconst AccordionTrigger = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"gw-flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\"gw-flex gw-flex-1 gw-items-center gw-justify-between gw-py-3 gw-transition-all\", className)}\n {...props}\n >\n {children}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\n\nconst AccordionContent = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Content>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"gw-overflow-hidden gw-text-sm gw-transition-all data-[state=closed]:gw-animate-accordion-up data-[state=open]:gw-animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"gw-pb-2 gw-pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n","import { ArrowUpRight } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useChainId } from \"wagmi\";\nimport { useActivity } from \"../../hooks/useActivity\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { chainIdToRelayChain, cn } from \"../../lib/utils\";\nimport { ActivityRow } from \"../shared/ActivityRow\";\nimport CopyButton from \"../shared/CopyButton\";\nimport { LinkWithIcon } from \"../shared/LinkWithIcon\";\nimport { ActivityRowSkeleton } from \"../shared/skeletons/ActivityRowSkeleton\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../ui/accordion\";\nimport TooltipElement from \"../ui/tooltip-element\";\n\nexport type WalletActivityTabProps = {\n expandFirst?: boolean;\n};\n\nexport function WalletActivityTab({ expandFirst = false }: WalletActivityTabProps) {\n const { user, fetchForAllNetworks } = useGlyph();\n const chainId = useChainId();\n const currentBlockExplorerUrl = fetchForAllNetworks ? null : chainIdToRelayChain(chainId)?.explorerUrl;\n const { transactionGroups, fetchTransactions, loadMore, hasMore, isLoading, refreshKey } = useActivity();\n\n const observerTarget = useRef<HTMLDivElement>(null);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n const [expandedItemId, setExpandedItemId] = useState<string>(\"\");\n\n const totalTransactions = transactionGroups.reduce((count, group) => count + group.transactions.length, 0);\n\n const fetchCurrent = useRef(fetchTransactions);\n fetchCurrent.current = fetchTransactions;\n // Reload once per account/API/filter/chain lifetime, not each pagination update.\n useEffect(() => {\n void fetchCurrent.current(true);\n }, [refreshKey]);\n\n // open first item if required\n useEffect(() => {\n if (!expandFirst) return;\n\n setExpandedItemId(expandedItemId || transactionGroups?.[0]?.transactions?.[0]?.id || \"\");\n }, [expandedItemId, transactionGroups, expandFirst]);\n\n // handle infinite scrolling\n const handleScroll = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n const [entry] = entries;\n if (entry.isIntersecting && hasMore && !isLoading) {\n loadMore();\n }\n },\n [hasMore, isLoading, loadMore]\n );\n\n useEffect(() => {\n const observer = new IntersectionObserver(handleScroll, {\n root: null,\n rootMargin: \"0px\",\n threshold: 1.0\n });\n\n const currentTarget = observerTarget.current;\n if (currentTarget) {\n observer.observe(currentTarget);\n }\n\n return () => {\n if (currentTarget) {\n observer.unobserve(currentTarget);\n }\n };\n }, [handleScroll]);\n\n // Detect when sticky element is stuck using a sentinel element\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // When sentinel is not intersecting (scrolled past), sticky element is stuck\n setIsStuck(!entry.isIntersecting);\n },\n {\n root: null,\n rootMargin: \"0px\",\n threshold: 0\n }\n );\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <div className=\"gw-pl-4 gw-pt-4 gw-flex gw-flex-col gw-h-full gw-relative\">\n {/* Sentinel element to detect when sticky is stuck */}\n <div ref={sentinelRef} className=\"gw-absolute gw-top-4\" />\n <a\n href={\n currentBlockExplorerUrl\n ? `${currentBlockExplorerUrl}/address/${user?.evmWallet}`\n : `https://blockscan.com/address/${user?.evmWallet}`\n }\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n \"gw-sticky gw-z-10 gw-top-4 gw-self-start gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/20 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid gw-rounded-full gw-typography-body2 gw-left-1/2 -gw-translate-x-1/2\"\n : \"gw-typography-body1 gw-left-0 gw-translate-x-0 gw-border-transparent gw-shadow-none\"\n )}\n >\n <span className=\"gw-flex gw-items-center gw-space-x-2\">\n My Activity <ArrowUpRight className={cn(\"gw-text-primary\", isStuck ? \"gw-size-4\" : \"gw-size-5\")} />\n </span>\n </a>\n\n <div className=\"gw-absolute gw-top-4 gw-right-4\">\n <TooltipElement\n description=\"Activity keeps track of your transactions and their status. Click any transaction to see details.\"\n stopPropagation\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n <div className=\"gw-grid gw-grid-cols-1 gw-overflow-auto gw-pr-4 gw-min-h-0\">\n {isLoading && totalTransactions === 0 ? (\n // initial loading state\n new Array(3).fill(null).map((_, index) => {\n return (\n <div key={index}>\n <ActivityRowSkeleton />\n {index < 2 && <hr className=\"gw-border-muted\" />}\n </div>\n );\n })\n ) : totalTransactions > 0 ? (\n <>\n {transactionGroups.map((group, groupIndex) => (\n <div key={group.label || `group-${groupIndex}`}>\n {/* group label (may not be present) */}\n {group.label && (\n <div className=\"gw-text-brand-gray-500 gw-rounded-md gw-py-3 gw-typography-body2\">\n {group.label}\n </div>\n )}\n\n {/* group transactions */}\n <Accordion\n type=\"single\"\n collapsible\n value={expandedItemId}\n onValueChange={setExpandedItemId}\n >\n {group.transactions.map((t, index) => {\n return (\n <div key={t.id}>\n <AccordionItem value={t.id}>\n <AccordionTrigger>\n <ActivityRow\n data={{\n status: t.status,\n type: t.type,\n type_text: t.type_text,\n value: t.value,\n amount: t.amount,\n amount_currency: t.amount_currency,\n name_on_list: t.name_on_list,\n chain_id: fetchForAllNetworks ? t.chain_id : undefined // Do not show chain icon when a particular chain is selected\n }}\n />\n </AccordionTrigger>\n <AccordionContent>\n {t.detail_rows?.length ? (\n <div className=\"gw-w-[50%] gw-flex gw-flex-col gw-space-y-1 gw-px-3 gw-text-brand-gray-500\">\n {t.detail_rows?.map?.((row) => (\n <div className=\"gw-line-clamp-1 gw-truncate\">\n {row.toUpperCase()}\n </div>\n ))}\n </div>\n ) : null}\n {t.blockExplorerTxns?.length ? (\n <div className=\"gw-flex gw-flex-col gw-items-start gw-space-y-1 gw-mb-2\">\n {t.blockExplorerTxns?.map?.((tx) => (\n <LinkWithIcon\n key={tx.url}\n text={tx.text}\n url={tx.url}\n />\n ))}\n </div>\n ) : (\n <div className=\"gw-w-full gw-mb-2 gw-text-brand-gray-500 gw-typography-caption gw-text-center\">\n {t.status_text || \"No transaction data\"}\n </div>\n )}\n {t.allowIdCopy && (\n <span className=\"gw-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500 gw-w-full gw-justify-center\">\n <span>Transaction ID: </span>{\" \"}\n <CopyButton\n textToCopy={t?.id}\n text={t?.id.slice(0, 20) + \"...\"}\n />\n </span>\n )}\n </AccordionContent>\n </AccordionItem>\n {index < group.transactions.length - 1 && (\n <hr className=\"gw-border-muted\" />\n )}\n </div>\n );\n })}\n </Accordion>\n\n {/* divider between groups, except for the last group */}\n {groupIndex < transactionGroups.length - 1 && (\n <div className=\"gw-mb-2 gw-border-t gw-border-muted\"></div>\n )}\n </div>\n ))}\n\n {/* loading indicator w/ observer target */}\n {hasMore && (\n <div className=\"gw-py-2 gw-mb-4 gw-flex gw-justify-center\">\n {isLoading ? (\n <div className=\"gw-animate-pulse gw-flex gw-space-x-2 gw-items-center\">\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n </div>\n ) : (\n <div ref={observerTarget} className=\"gw-h-4\"></div>\n )}\n </div>\n )}\n </>\n ) : (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-text-brand-gray-500 gw-typography-body2 gw-py-8\">\n No transactions\n </div>\n )}\n </div>\n </div>\n );\n}\n","export function PlusSign(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_685_2031)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.9216 1.04389C10.9216 0.536266 10.5101 0.124756 10.0025 0.124756C9.49487 0.124756 9.08336 0.536266 9.08336 1.04389V8.806H1.31952C0.811901 8.806 0.400391 9.21751 0.400391 9.72514C0.400391 10.2328 0.811901 10.6443 1.31952 10.6443H9.08336V18.4042C9.08336 18.9118 9.49487 19.3234 10.0025 19.3234C10.5101 19.3234 10.9216 18.9118 10.9216 18.4042V10.6443H18.6799C19.1875 10.6443 19.599 10.2328 19.599 9.72514C19.599 9.21752 19.1875 8.80601 18.6799 8.80601H10.9216V1.04389Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_685_2031\">\n <rect width=\"19.2\" height=\"19.2\" fill=\"white\" transform=\"translate(0.400391 0.124023)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","export function QRIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_685_1277)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.86887 4.35704C8.86887 6.69582 6.97292 8.59177 4.63414 8.59177C2.29537 8.59177 0.399414 6.69582 0.399414 4.35704C0.399414 2.01827 2.29537 0.122314 4.63414 0.122314C6.97292 0.122314 8.86887 2.01827 8.86887 4.35704ZM6.98266 4.35691C6.98266 5.65403 5.93113 6.70556 4.63401 6.70556C3.33688 6.70556 2.28535 5.65403 2.28535 4.35691C2.28535 3.05978 3.33688 2.00825 4.63401 2.00825C5.93113 2.00825 6.98266 3.05978 6.98266 4.35691ZM8.86887 15.0869C8.86887 17.4257 6.97292 19.3217 4.63414 19.3217C2.29537 19.3217 0.399414 17.4257 0.399414 15.0869C0.399414 12.7481 2.29537 10.8522 4.63414 10.8522C6.97292 10.8522 8.86887 12.7481 8.86887 15.0869ZM6.98266 15.0868C6.98266 16.3839 5.93113 17.4354 4.63401 17.4354C3.33688 17.4354 2.28535 16.3839 2.28535 15.0868C2.28535 13.7897 3.33688 12.7381 4.63401 12.7381C5.93113 12.7381 6.98266 13.7897 6.98266 15.0868ZM15.0338 8.59177C17.3725 8.59177 19.2685 6.69582 19.2685 4.35704C19.2685 2.01827 17.3725 0.122314 15.0338 0.122314C12.695 0.122314 10.799 2.01827 10.799 4.35704C10.799 6.69582 12.695 8.59177 15.0338 8.59177ZM15.0336 6.70556C16.3307 6.70556 17.3823 5.65403 17.3823 4.35691C17.3823 3.05978 16.3307 2.00825 15.0336 2.00825C13.7365 2.00825 12.685 3.05978 12.685 4.35691C12.685 5.65403 13.7365 6.70556 15.0336 6.70556ZM12.2106 13.6753C12.9902 13.6753 13.6222 13.0434 13.6222 12.2638C13.6222 11.4842 12.9902 10.8522 12.2106 10.8522C11.431 10.8522 10.799 11.4842 10.799 12.2638C10.799 13.0434 11.431 13.6753 12.2106 13.6753ZM19.6108 12.2638C19.6108 13.0434 18.9789 13.6753 18.1993 13.6753C17.4197 13.6753 16.7877 13.0434 16.7877 12.2638C16.7877 11.4842 17.4197 10.8522 18.1993 10.8522C18.9789 10.8522 19.6108 11.4842 19.6108 12.2638ZM15.2071 16.4996C15.9867 16.4996 16.6187 15.8676 16.6187 15.088C16.6187 14.3084 15.9867 13.6764 15.2071 13.6764C14.4275 13.6764 13.7955 14.3084 13.7955 15.088C13.7955 15.8676 14.4275 16.4996 15.2071 16.4996ZM13.6222 17.911C13.6222 18.6906 12.9902 19.3226 12.2106 19.3226C11.431 19.3226 10.799 18.6906 10.799 17.911C10.799 17.1314 11.431 16.4995 12.2106 16.4995C12.9902 16.4995 13.6222 17.1314 13.6222 17.911ZM18.1993 19.3226C18.9789 19.3226 19.6108 18.6906 19.6108 17.911C19.6108 17.1314 18.9789 16.4995 18.1993 16.4995C17.4197 16.4995 16.7877 17.1314 16.7877 17.911C16.7877 18.6906 17.4197 19.3226 18.1993 19.3226Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_685_1277\">\n <rect width=\"19.2101\" height=\"19.1992\" fill=\"white\" transform=\"translate(0.400391 0.123535)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { ArrowUpDown, SendIcon } from \"lucide-react\";\nimport { PlusSign } from \"../../assets/svg/PlusSign\";\nimport { QRIcon } from \"../../assets/svg/QRIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { WalletView } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { cn, formatTokenCount } from \"../../lib/utils\";\nimport NativeTokenIcon from \"../shared/NativeTokenIcon\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\n\nexport type WalletHomeTabProps = {\n setWalletView: (view: WalletView) => void;\n};\n\nexport function WalletHomeTab({ setWalletView }: WalletHomeTabProps) {\n const { user, balances, hasBalances, fetchForAllNetworks } = useGlyph();\n\n // We can safely fetch the native balance here without chainId check because we only show this when a single chain is selected\n const nativeBalance = balances?.tokens?.find?.((balance) => balance.native);\n\n const allBalances = balances?.wallet_value;\n const tokens = balances?.tokens;\n\n return (\n <div className=\"gw-w-full gw-h-full gw-p-4 gw-flex gw-flex-col gw-justify-between gw-gap-10 gw-items-center\">\n {/* Balance */}\n <div\n className={cn(\n \"gw-flex gw-items-center gw-w-full gw-min-h-6\",\n fetchForAllNetworks ? \"gw-justify-end\" : \"gw-justify-between\"\n )}\n >\n {!fetchForAllNetworks ? (\n <>\n <span>My Balance</span>\n <div className=\"gw-flex gw-font-medium gw-items-center gw-gap-1\">\n {!hasBalances || nativeBalance?.value === undefined ? (\n <Skeleton className=\"gw-w-20 gw-h-6\" />\n ) : (\n <>\n <NativeTokenIcon className=\"gw-size-5\" />\n <span>\n {formatTokenCount(\n nativeBalance?.valueInWei,\n nativeBalance?.decimals,\n nativeBalance?.displayDecimals\n )}{\" \"}\n <span className=\"gw-text-brand-gray-600 gw-typography-body2\">\n {nativeBalance?.symbol}\n </span>\n </span>\n </>\n )}\n </div>\n </>\n ) : (\n <TooltipElement\n description={`Portfolio value reflects fungible tokens held on supported networks only.`}\n stopPropagation={true}\n align=\"end\"\n side=\"left\"\n />\n )}\n </div>\n\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-col\">\n <span className=\"gw-typography-h2-nr\">\n {!hasBalances || allBalances?.tokens === undefined ? (\n <Skeleton className=\"gw-w-20 gw-h-[3.75rem]\" />\n ) : (\n <>\n {formatCurrency(\n allBalances?.tokens,\n undefined,\n tokens?.some((t) => BigInt(t.valueInWei) !== 0n),\n \"decimal\"\n )}\n <span className=\"gw-text-foreground gw-typography-h6-nr gw-pl-0.5\">\n {allBalances?.currency || \"USD\"}\n </span>\n </>\n )}\n </span>\n <span className=\"gw-typography-subtitle1 !gw-font-normal gw-text-brand-gray-600 gw-mt-2\">\n Portfolio Value\n </span>\n </div>\n\n {/* Actions */}\n <div className=\"gw-flex gw-space-x-2 gw-w-fit gw-pb-2 gw-mb-4\">\n {/* Fund button */}\n <Button shadow variant=\"cube\" size=\"cube\" onClick={() => setWalletView(WalletView.FUND)}>\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <PlusSign />\n <span>Fund</span>\n </span>\n </Button>\n\n {/* Trade/Swap button */}\n <Button shadow variant=\"cube\" size=\"cube\" onClick={() => setWalletView(WalletView.SWAP)}>\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <ArrowUpDown />\n <span>Swap</span>\n </span>\n </Button>\n\n {/* Receive button */}\n <Button\n shadow\n variant=\"cube\"\n size=\"cube\"\n onClick={() => setWalletView(WalletView.RECEIVE)}\n disabled={!user?.evmWallet}\n >\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <QRIcon />\n <span>Receive</span>\n </span>\n </Button>\n\n {/* Send button */}\n <Button\n shadow\n variant=\"cube\"\n size=\"cube\"\n onClick={() => setWalletView(WalletView.SEND)}\n disabled={!user?.evmWallet}\n >\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <SendIcon />\n <span>Send</span>\n </span>\n </Button>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { PlusSign } from \"../../assets/svg/PlusSign\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport CopyButton from \"../shared/CopyButton\";\nimport { Button } from \"../ui/button\";\nimport TooltipElement from \"../ui/tooltip-element\";\n\nexport function WalletLinkedAccountsTab() {\n const { user, glyphUrl } = useGlyph();\n const profileUrl = new URL(\"/profile\", glyphUrl).toString();\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n\n // Detect when sticky element is stuck using a sentinel element\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // When sentinel is not intersecting (scrolled past), sticky element is stuck\n setIsStuck(!entry.isIntersecting);\n },\n {\n root: null,\n rootMargin: \"0px\",\n threshold: 0\n }\n );\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <div className=\"gw-p-4 gw-flex gw-flex-col gw-justify-between gw-min-h-full gw-relative\">\n <div>\n {/* Sentinel element to detect when sticky is stuck */}\n <div ref={sentinelRef} className=\"gw-absolute gw-top-4\" />\n <div\n className={cn(\n \"gw-sticky gw-inline-block gw-z-10 gw-top-4 gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/20 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid gw-rounded-full gw-typography-body2 gw-left-1/2 -gw-translate-x-1/2\"\n : \"gw-typography-body1 gw-left-0 gw-translate-x-0 gw-border-transparent gw-shadow-none\"\n )}\n >\n My Wallets\n </div>\n\n <div className=\"gw-absolute gw-top-4 gw-right-4\">\n <TooltipElement\n stopPropagation\n description=\"Your standard crypto wallet for storing assets, sending, and receiving funds.\"\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Show Glyph wallet */}\n {user?.hasProfile && (\n <div className=\"gw-flex gw-items-center gw-w-full gw-mt-3\">\n <div className=\"gw-flex gw-items-start\">\n <div className=\"gw-typography-body1\">\n <div className=\"gw-font-medium\">Main Wallet</div>\n <div className=\"gw-text-brand-gray-500 gw-typography-caption\">\n {truncateEthAddress(user.evmWallet)}\n </div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={user.evmWallet}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n )}\n {/* Show smart wallet */}\n {/* {user?.smartWallet && (\n <div className=\"gw-flex gw-items-center gw-w-full gw-mt-2\">\n <div className=\"gw-flex gw-items-center\">\n <GlyphIcon className=\"gw-size-8 gw-text-primary\" />\n <div className=\"gw-ml-4 gw-typography-body2\">\n <div>Smart Wallet</div>\n <div className=\"gw-text-brand-gray-500\">{truncateEthAddress(user.smartWallet)}</div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={user.smartWallet}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n )} */}\n\n <hr className=\"gw-my-5 gw-border-muted\" />\n\n <div className=\"gw-mb-6 gw-flex gw-items-center gw-justify-between\">\n <span>Linked Wallets</span>\n <TooltipElement\n stopPropagation\n description={\n \"Prove token ownership across multiple wallets, access gated content, and manage assets without transfers.\"\n }\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Show linked wallets */}\n {user?.linkedWallets?.length ? (\n user?.linkedWallets?.map?.((wallet) => (\n <div key={wallet.address} className=\"gw-flex gw-items-center gw-w-full gw-mt-2\">\n <div className=\"gw-flex gw-items-center\">\n <div className=\"gw-flex gw-items-start\">\n <div className=\"gw-typography-body1\">\n <div className=\"gw-font-medium gw-capitalize\">\n {wallet.walletClientType?.split?.(\"_\")?.join?.(\" \") || \"External Wallet\"}\n </div>\n <div className=\"gw-text-brand-gray-500 gw-typography-caption\">\n {truncateEthAddress(wallet.address)}\n </div>\n </div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={wallet.address}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n ))\n ) : (\n <div className=\"gw-flex gw-items-center gw-justify-center gw-w-full gw-text-center gw-my-8 gw-text-brand-gray-500 gw-typography-body2\">\n To link an existing wallet or\n <br />\n account, please go to the\n <br />\n Glyph Dashboard.\n </div>\n )}\n </div>\n\n <Button\n className=\"gw-w-full gw-mt-5\"\n onClick={() => {\n window.open(`${profileUrl}?linkAccounts=true`, \"_blank\");\n }}\n variant={\"link\"}\n >\n <PlusSign className=\"!gw-size-3 gw-mr-1\" />\n Link Wallet or Account\n </Button>\n </div>\n );\n}\n","export default function ExpandItemIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" {...props}>\n <path d=\"M9.02588 4.85156L5 0.825684L0.974121 4.85156\" stroke=\"#095546\" strokeWidth=\"1.34196\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n","function LinkedNFTChip(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" {...props}>\n <g>\n <circle cx=\"6.5\" cy=\"6.5\" r=\"6.5\" fill=\"black\" fillOpacity=\"0.5\" />\n <path\n transform=\"translate(2 2)\"\n d=\"M5.21106 3.78895C4.60357 3.18146 3.61865 3.18146 3.01117 3.78895L1.45561 5.3445C0.848129 5.95198 0.848129 6.93691 1.45561 7.54439C2.06309 8.15187 3.04802 8.15187 3.6555 7.54439L4.08389 7.116M3.78895 5.21106C4.39643 5.81854 5.38135 5.81854 5.98883 5.21106L7.54439 3.6555C8.15187 3.04802 8.15187 2.06309 7.54439 1.45561C6.93691 0.848129 5.95198 0.848129 5.3445 1.45561L4.91687 1.88324\"\n stroke=\"white\"\n strokeWidth=\"0.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </svg>\n );\n}\n\nexport default LinkedNFTChip;\n","export const NFTImgFail = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"66\" height=\"66\" viewBox=\"0 0 66 66\" fill=\"none\" {...props}>\n <path\n d=\"M0 5C0 2.23858 2.23858 0 5 0H61C63.7614 0 66 2.23858 66 5V61C66 63.7614 63.7614 66 61 66H5C2.23858 66 0 63.7614 0 61V5Z\"\n fill=\"#DFDFDF\" />\n <path\n d=\"M26.3147 21.6523C26.4077 21.7503 26.501 21.8483 26.594 21.9463C28.4087 23.8579 30.2236 25.77 32.0383 27.6816C31.3606 28.037 30.5969 28.2393 29.7883 28.2393C26.9975 28.239 24.7346 25.8572 24.7346 22.9199C24.7347 22.067 24.9267 21.2613 25.2659 20.5469C25.6156 20.9153 25.9651 21.284 26.3147 21.6523ZM29.7883 17.6016C32.5793 17.6016 34.8419 19.9826 34.842 22.9199C34.842 23.897 34.5904 24.8118 34.1536 25.5986C32.3451 23.6938 30.5371 21.7886 28.7288 19.8838C28.6356 19.7857 28.5426 19.687 28.4495 19.5889C28.0487 19.1667 27.6472 18.7453 27.2463 18.3232C27.9931 17.8648 28.8614 17.6016 29.7883 17.6016Z\"\n fill=\"#969E96\" />\n <g filter=\"url(#filter0_d_2977_3039)\">\n <path\n d=\"M43.5314 25.4015C44.1049 25.1215 44.8406 25.1888 45.458 25.333C46.1015 25.4833 46.7446 25.7483 47.2143 25.9973C47.4875 26.1423 47.7248 26.3783 47.9501 26.6657C48.1779 26.9563 48.4185 27.3328 48.6878 27.7959C49.225 28.7197 49.9199 30.0636 50.9025 31.9036C51.8101 33.6032 53.5769 36.111 54.5178 37.5396C55.2851 38.7046 55.9735 39.7613 56.4989 40.6429C57.0137 41.5066 57.4078 42.2604 57.5435 42.8018C57.7956 43.8087 57.5709 44.6716 57.4837 45.0031C57.3662 45.4495 57.0877 45.7825 56.7885 46.0241C56.3653 46.3658 55.8233 46.5391 55.2762 46.6513C54.7298 46.7633 54.0998 46.8281 53.4896 46.906C52.8697 46.9852 51.8968 47.0121 49.778 47.0593C47.6374 47.107 44.3463 47.0208 42.4956 47.015C40.6223 47.0092 40.7079 47.0188 39.9927 47.0203C39.7511 47.0208 38.8787 47.0594 33.8482 47.0331C33.2081 47.0298 32.5006 47.0242 31.7427 47.017C30.1433 45.0629 28.5446 43.1082 26.9452 41.154C30.7496 38.7451 34.5554 36.3369 38.3598 33.928L39.8208 33.003L38.6891 31.6812C38.5515 31.5206 38.4136 31.3602 38.276 31.1996C38.9175 30.3623 39.3449 29.6955 39.606 29.3208C40.6967 27.7562 41.4821 26.8659 42.1007 26.3195C42.7331 25.761 43.1835 25.5713 43.5314 25.4015ZM19.8279 29.915C20.8419 29.7909 22.0906 29.8957 23.2044 30.6189C24.4481 31.4267 25.0305 32.3473 25.65 33.0747C26.3784 33.9298 27.8879 35.2664 29.1087 36.2237C27.3748 37.3218 25.6415 38.4209 23.9076 39.5188L22.4789 40.4232L23.5558 41.7383C24.9822 43.4811 26.409 45.2237 27.8354 46.9666C23.2092 46.901 17.922 46.7974 14.4754 46.6802C11.9432 46.5941 10.663 46.5954 9.97801 46.5529C9.63098 46.5313 9.36454 46.4962 9.13394 46.4052C8.89311 46.3102 8.7273 46.1673 8.57653 46.0383C8.2984 45.7999 8.13482 45.4897 8.0309 45.2328C7.93208 44.9883 7.85902 44.7091 7.82351 44.5984L7.81762 44.5809L7.81367 44.5623C7.79586 44.4878 7.79188 44.4114 7.7908 44.3661C7.78949 44.3109 7.79165 44.2498 7.79433 44.1883C7.79975 44.0644 7.81134 43.918 7.82764 43.7732C7.84395 43.6285 7.86559 43.4777 7.89022 43.3444C7.90745 43.2512 7.93471 43.1428 7.96674 43.0454C7.97044 43.0292 7.97311 43.0178 7.97449 43.0131C7.98116 42.9909 7.98791 42.9731 7.99196 42.9633C8.00019 42.9433 8.00906 42.9267 8.01433 42.9164C8.02555 42.8944 8.03872 42.8687 8.05421 42.8421C8.08608 42.7873 8.13866 42.7019 8.22355 42.5673C8.39438 42.2965 8.70734 41.8129 9.27681 40.9508C10.2998 39.4022 12.2842 36.5449 13.438 34.9157C15.3246 32.2518 16.4351 31.3658 17.559 30.659C18.3142 30.1842 19.124 30.0012 19.8279 29.915Z\"\n fill=\"#969E96\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2977_3039\" x=\"3.79053\" y=\"24.207\" width=\"57.8689\" height=\"29.8672\"\n filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"3\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.258824 0 0 0 0 0.372549 0 0 0 0 0.247059 0 0 0 0.25 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2977_3039\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2977_3039\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n);\n","import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"@radix-ui/react-accordion\";\nimport { useState } from \"react\";\nimport ExpandItemIcon from \"../../assets/svg/ExpandItemIcon\";\nimport LinkedNFTChip from \"../../assets/svg/LinkedNFTChip\";\nimport { NFTImgFail } from \"../../assets/svg/NFTImgFail\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"../ui/button\";\n\ntype NFTImageProps = React.SVGProps<SVGSVGElement> & {\n alt: string;\n url?: string | null;\n title?: string;\n className?: string;\n};\n\nconst NFTImg = ({ url, alt, title, className, ...props }: NFTImageProps) => {\n const [imgErr, setImgErr] = useState(false);\n\n return (\n <>\n {!imgErr && url ? (\n <img\n src={url}\n alt={alt}\n title={title}\n onError={() => setImgErr(true)}\n className={cn(\"gw-object-cover gw-rounded-md gw-block\", className)}\n />\n ) : (\n <NFTImgFail style={{ width: \"100%\", height: \"100%\" }} {...props} />\n )}\n </>\n );\n};\n\nexport function WalletNFTsTab() {\n const { glyphUrl, balances, hasBalances } = useGlyph();\n const [expandedItemId, setExpandedItemId] = useState<string>(\"\");\n const nfts = balances?.nfts || [];\n // const totalValue = balances?.wallet_value?.nfts;\n\n const nftsURL = new URL(\"/nfts\", glyphUrl).toString();\n\n return (\n <div className=\"gw-pl-4 gw-py-4 gw-flex gw-flex-col gw-h-full gw-min-h-0\">\n {/* Fixed header */}\n <div className=\"gw-flex gw-mb-2 gw-flex-row gw-justify-between gw-items-center gw-w-full gw-flex-shrink-0 gw-pr-4\">\n <span>My NFTs</span>\n {/* {totalValue ? (\n <div className=\"gw-typography-body1\">\n <span className=\"amount gw-font-medium gw-text-brand-gray-600\">\n {formatCurrency(totalValue, balances?.wallet_value?.currency, nfts.length > 0)}\n </span>\n </div>\n ) : null} */}\n </div>\n\n {hasBalances && nfts?.length ? (\n <div className=\"gw-flex gw-flex-col gw-flex-1 gw-min-h-0\">\n {/* Scrollable accordion area */}\n <div className=\"gw-flex-1 gw-min-h-0 gw-overflow-auto\">\n <Accordion\n className=\"gw-w-full\"\n type=\"single\"\n collapsible\n value={expandedItemId}\n onValueChange={setExpandedItemId}\n >\n {nfts.map((t, idx) => {\n return (\n <div key={idx.toString()}>\n <AccordionItem value={idx.toString()} className=\"gw-pr-4\">\n <AccordionTrigger asChild>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-py-2 gw-cursor-pointer\">\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-min-w-0 gw-flex-1\">\n <div className=\"gw-flex-shrink-0\">\n <NFTImg\n url={t.contractImage || t.image}\n alt={t.name}\n className=\"gw-w-10 gw-h-10\" // for img\n height=\"40\" // for svg\n width=\"40\" // for svg\n />\n </div>\n <span className=\"gw-text-sm gw-line-clamp-1 gw-truncate gw-letter-spacing-0.12 gw-min-w-0 gw-max-w-[75%]\">\n {t.name?.toLocaleUpperCase?.() || t.symbol || \"\"}\n </span>\n </div>\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-text-end gw-flex-shrink-0\">\n <ExpandItemIcon\n className={`${expandedItemId === idx.toString() ? \"\" : \"gw-rotate-180\"}`}\n />\n </div>\n </div>\n </AccordionTrigger>\n <AccordionContent>\n <div className=\"gw-grid gw-grid-cols-4 gw-gap-4 gw-my-2\">\n {t.items.map((item) => (\n <div key={item.tokenId} className=\"gw-relative\">\n {item.fromLinked && (\n <div className=\"gw-absolute gw-top-1 gw-right-1 gw-z-10\">\n <LinkedNFTChip />\n </div>\n )}\n {item.fromDelegated && (\n <div className=\"gw-absolute gw-bottom-0 gw-left-0 gw-right-0 gw-z-10\">\n <div className=\"gw-bg-black gw-bg-opacity-50 gw-text-white gw-text-center gw-text-[10px] gw-py-0.5 gw-px-1\">\n Delegate\n </div>\n </div>\n )}\n <NFTImg\n url={item.tokenImage || item.image?.thumbnailUrl}\n alt={item.tokenId}\n className=\"gw-w-16 gw-h-16\" // for img\n height=\"64\" // for svg\n width=\"64\" // for svg\n title={item.tokenName || item.name || item.tokenId}\n />\n </div>\n ))}\n </div>\n </AccordionContent>\n </AccordionItem>\n </div>\n );\n })}\n </Accordion>\n </div>\n\n {/* Fixed footer */}\n <div className=\"gw-flex gw-justify-center gw-items-center gw-w-full gw-text-brand-gray-500 gw-typography-body2 gw-flex-shrink-0 gw-mt-2\">\n Need to transfer? Use\n <a\n href={nftsURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonVariants({\n variant: \"link-inline\",\n size: \"xs-inline\",\n scale: false\n })}\n >\n Glyph Dashboard\n </a>\n </div>\n </div>\n ) : (\n <div\n className={cn(\n \"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-2 gw-whitespace-pre-wrap gw-text-center\",\n hasBalances ? \"!gw-text-[13px]\" : \"\"\n )}\n >\n {hasBalances\n ? `No NFTs found.\\nIf you own NFTs, they may be on a different network.\\nCheck your network selection.`\n : \"Loading...\"}\n </div>\n )}\n </div>\n );\n}\n","import NoTokenIcon from \"../../../assets/svg/NoTokenIcon\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TokenAndChainIcon = ({\n token,\n chain,\n tokenClassName,\n chainClassName\n}: {\n token: {\n logoUrl: string | undefined;\n name: string | undefined;\n };\n tokenClassName?: string;\n chain?: {\n id: number;\n logoUrl: string | undefined | null;\n name: string;\n };\n chainClassName?: string;\n}) => {\n return (\n <span className=\"gw-relative gw-flex-shrink-0\">\n {token.logoUrl ? (\n <img\n src={token.logoUrl}\n alt={token.name}\n className={cn(\"gw-rounded-full gw-size-10\", tokenClassName)}\n />\n ) : (\n <NoTokenIcon className={cn(\"gw-size-10 gw-rounded-full\", tokenClassName)} />\n )}\n\n {chain?.logoUrl && (\n <span\n className={cn(\n \"gw-absolute gw-bottom-0 gw-right-0 gw-translate-x-[10%] gw-translate-y-[10%] gw-size-5 gw-rounded-full gw-bg-background\",\n chainClassName\n )}\n >\n <img\n src={chain.logoUrl}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-full\"\n />\n </span>\n )}\n </span>\n );\n};\n","import NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useBalances } from \"../../hooks/useBalances\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { chainIdToRelayChain, formatTokenCount } from \"../../lib/utils\";\nimport { TokenAndChainIcon } from \"./internal/TokenAndChainIcon\";\n\nexport function WalletTokensTab() {\n const { balances, hasBalances, fetchForAllNetworks } = useBalances();\n\n const tokens = balances?.tokens || [];\n const totalValue = balances?.wallet_value?.tokens;\n\n return (\n <div className=\"gw-pl-4 gw-py-4 gw-flex gw-flex-col gw-h-full gw-min-h-0\">\n {/* Balance */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-pr-4\">\n <span>My Tokens</span>\n <div className=\"gw-typography-body1\">\n <span className=\"amount gw-font-medium gw-text-brand-gray-600\">\n {/* If tokens are present and any of the token has valueInWei > 0, show <0.01 */}\n {formatCurrency(\n totalValue,\n tokens[0]?.currency,\n tokens?.some((t) => BigInt(t.valueInWei) !== 0n)\n )}\n </span>\n </div>\n </div>\n\n {hasBalances && tokens?.length ? (\n <div className=\"gw-grid gw-grid-cols-1 gw-mt-2 gw-max-h-100 gw-min-h-0 gw-overflow-auto gw-pr-4\">\n {tokens.map((t, index) => {\n if (t?.hide) return null;\n const TokenIcon = t.logo ? (\n <img src={t.logo} alt={t.symbol} className=\"gw-size-10 gw-rounded-full\" />\n ) : (\n <NoTokenIcon className=\"gw-size-10\" />\n );\n\n const chain = chainIdToRelayChain(t.chainId);\n\n return (\n <div key={`${t?.chainId}:${t?.address}_token_list`} className=\"gw-w-full\">\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-py-2\">\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n {fetchForAllNetworks ? (\n <TokenAndChainIcon\n token={{\n name: t?.name,\n logoUrl: t?.logo ?? undefined\n }}\n chain={{\n id: t?.chainId,\n name: chain?.name ?? \"\",\n logoUrl: chain?.iconUrl ?? undefined\n }}\n />\n ) : (\n TokenIcon\n )}\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-max-w-32 gw-truncate\">\n {t.symbol || t.name}\n </span>\n {Number.isFinite(t.priceChangePct) && t.priceChangePct !== 0 && (\n <span\n className={`gw-typography-caption \n ${t.priceChangePct >= 0 ? \"gw-text-brand-success\" : \"gw-text-destructive\"}`}\n >\n {t.priceChangePct >= 0 ? \"+\" : \"\"}\n {t.priceChangePct.toFixed(2)}%\n </span>\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-text-end\">\n <span className=\"gw-font-medium\">\n {/* If USD amount is 0, but token value is not 0, show <0.01 */}\n {formatCurrency(t.amount, t.currency, BigInt(t.valueInWei) !== 0n)}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500 gw-flex gw-items-center gw-justify-end gw-gap-0.5 gw-flex-wrap\">\n <span>\n {formatTokenCount(t.valueInWei, t.decimals, t.displayDecimals)}{\" \"}\n </span>\n <span className=\"gw-max-w-20 gw-truncate gw-inline-block gw-break-words\">\n {t.symbol}\n </span>\n </span>\n </div>\n </div>\n {index < tokens.length - 1 && <hr className=\"gw-my-2 gw-border-muted\" />}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n {hasBalances ? \"No tokens found\" : \"Loading...\"}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { WalletMainViewTab } from \"../../../lib/constants\";\nimport { cn } from \"../../../lib/utils\";\n\nexport function WalletTokenVSNftSwitcher({\n activeTab,\n setActiveTab\n}: {\n activeTab: WalletMainViewTab;\n setActiveTab: (tab: WalletMainViewTab) => void;\n}) {\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabChange = (tab: WalletMainViewTab) => {\n setIsAnimating(true);\n setActiveTab(tab);\n setTimeout(() => setIsAnimating(false), 300);\n };\n return (\n <div className=\"gw-mx-auto gw-w-fit gw-my-2 gw-sticky gw-top-4 gw-z-10\">\n <div className=\"gw-mx-auto gw-w-fit gw-rounded-full gw-bg-brand-bone gw-ring gw-ring-brand-clay\">\n <div className=\"gw-flex\">\n <div className=\"gw-flex-1 gw-px-2 gw-py-1 gw-relative gw-z-20 gw-min-w-[60px]\">\n <button\n onClick={() => handleTabChange(WalletMainViewTab.TOKENS)}\n className={cn(\n activeTab === WalletMainViewTab.TOKENS\n ? \"gw-text-foreground\"\n : \"gw-text-brand-gray-500\",\n \"gw-px-2 gw-w-full gw-text-center gw-justify-center gw-flex gw-items-center gw-transition-colors gw-delay-75 gw-duration-300\"\n )}\n >\n Tokens\n </button>\n </div>\n\n <div className=\"gw-flex-1 gw-px-2 gw-py-1 gw-relative gw-z-20 gw-min-w-[60px]\">\n <button\n onClick={() => handleTabChange(WalletMainViewTab.NFTS)}\n className={cn(\n activeTab === WalletMainViewTab.NFTS ? \"gw-text-foreground\" : \"gw-text-brand-gray-500\",\n \"gw-px-2 gw-w-full gw-text-center gw-justify-center gw-flex gw-items-center gw-transition-colors gw-delay-75 gw-duration-300\"\n )}\n >\n NFTs\n </button>\n </div>\n </div>\n </div>\n <div\n className={cn(\n \"gw-absolute gw-bottom-0 gw-left-0 gw-h-full gw-rounded-full gw-right-0 gw-w-1/2 gw-z-10 gw-transition-all gw-duration-300 gw-ease-in-out\",\n activeTab === WalletMainViewTab.NFTS ? \"gw-left-1/2\" : \"\",\n isAnimating ? \"gw-scale-110\" : \"\",\n \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-bg-brand-white/20 gw-shadow-liquidSm\"\n )}\n />\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport { INTERNAL_GRADIENT_TYPE, WalletMainViewTab, WalletView } from \"../../lib/constants\";\nimport WalletViewFooterNav from \"../shared/WalletViewFooterNav\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { WalletActivityTab } from \"./WalletActivityTab\";\nimport { WalletHomeTab } from \"./WalletHomeTab\";\nimport { WalletLinkedAccountsTab } from \"./WalletLinkedAccountsTab\";\nimport { WalletNFTsTab } from \"./WalletNFTsTab\";\nimport { WalletTokensTab } from \"./WalletTokensTab\";\nimport { WalletTokenVSNftSwitcher } from \"./internal/WalletTokenVsNftSwitcher\";\n\nexport type WalletMainProps = {\n setWalletView: (view: WalletView) => void;\n activeMainViewScreen: WalletMainViewTab;\n setActiveMainViewScreen: (screen: WalletMainViewTab) => void;\n expandFirstActivityRow?: boolean;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport function WalletMainView({\n setWalletView,\n activeMainViewScreen,\n setActiveMainViewScreen,\n expandFirstActivityRow = false,\n setGradientType\n}: WalletMainProps) {\n // Set the gradient type to primary when the main view is opened\n useEffect(() => {\n setGradientType(INTERNAL_GRADIENT_TYPE.PRIMARY);\n\n // Reset the gradient type when the main view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType]);\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n header={\n <WalletViewHeader isStickyHeader={false} onProfileClick={() => setWalletView(WalletView.PROFILE)} />\n }\n content={\n <>\n {/* Home Tab */}\n {activeMainViewScreen === WalletMainViewTab.HOME && <WalletHomeTab setWalletView={setWalletView} />}\n\n {[WalletMainViewTab.TOKENS, WalletMainViewTab.NFTS].includes(activeMainViewScreen) && (\n <div className=\"gw-flex gw-flex-col gw-h-full\">\n {/* Token vs NFT Switcher */}\n <WalletTokenVSNftSwitcher\n activeTab={activeMainViewScreen}\n setActiveTab={setActiveMainViewScreen}\n />\n {/* Tokens Tab */}\n {activeMainViewScreen === WalletMainViewTab.TOKENS && <WalletTokensTab />}\n {/* NFTs Tab */}\n {activeMainViewScreen === WalletMainViewTab.NFTS && <WalletNFTsTab />}\n </div>\n )}\n\n {/* Linked Accounts Tab */}\n {activeMainViewScreen === WalletMainViewTab.LINKED_ACCOUNTS && <WalletLinkedAccountsTab />}\n {/* Activity Tab */}\n {activeMainViewScreen === WalletMainViewTab.ACTIVITY && (\n <WalletActivityTab expandFirst={expandFirstActivityRow} />\n )}\n </>\n }\n footer={<WalletViewFooterNav tab={activeMainViewScreen} setTab={setActiveMainViewScreen} />}\n />\n );\n}\n","export default import.meta.ROLLUP_FILE_URL_C9$sJpBj;","function EditIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_385_15340)\">\n <path\n d=\"M6.40951 2.54541H2.51315C2.2179 2.54541 1.93474 2.6627 1.72596 2.87147C1.51719 3.08025 1.3999 3.36341 1.3999 3.65866V11.4514C1.3999 11.7466 1.51719 12.0298 1.72596 12.2386C1.93474 12.4473 2.2179 12.5646 2.51315 12.5646H10.3059C10.6011 12.5646 10.8843 12.4473 11.0931 12.2386C11.3018 12.0298 11.4191 11.7466 11.4191 11.4514V7.55502\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33587\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.5843 1.7101C10.8057 1.48866 11.1061 1.36426 11.4192 1.36426C11.7324 1.36426 12.0327 1.48866 12.2542 1.7101C12.4756 1.93154 12.6 2.23187 12.6 2.54503C12.6 2.8582 12.4756 3.15853 12.2542 3.37997L6.96624 8.66789L4.73975 9.22452L5.29637 6.99802L10.5843 1.7101Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33587\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_385_15340\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default EditIcon;\n","import profileGradient from \"../../assets/images/profile-gradient.png\";\nimport EditIcon from \"../../assets/svg/EditIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport UserAvatar from \"../shared/UserAvatar\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\n\nexport type WalletProfileProps = {\n onBack: () => void;\n};\n\nexport function WalletProfileView({ onBack }: WalletProfileProps) {\n const { user, logout, glyphUrl } = useGlyph();\n const editUrl = new URL(\"/profile/edit\", glyphUrl).toString();\n\n return (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Profile\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-w-full gw-flex gw-flex-col gw-h-full\">\n <div className=\"gw-flex gw-flex-col gw-relative gw-justify-center gw-items-center gw-p-4 gw-overflow-hidden gw-h-32\">\n <Button\n variant={\"tertiary\"}\n shadow\n onClick={() => {\n window.open(editUrl, \"_blank\");\n }}\n className=\"gw-absolute gw-group gw-rounded-full !gw-ring-0 gw-h-8 gw-px-2.5 gw-gap-0 gw-top-2 gw-right-2 gw-z-[1] gw-inline-flex gw-items-center\"\n >\n <span\n className={cn(\n `group-hover:gw-w-16 gw-w-0 gw-overflow-hidden gw-whitespace-nowrap gw-transition-all gw-duration-300 gw-text-xs`\n )}\n >\n Edit Profile\n </span>\n <EditIcon className=\"!gw-size-3\" />\n </Button>\n <img\n src={profileGradient}\n alt=\"profile-gradient\"\n className=\"gw-absolute gw-top-0 gw-left-0 gw-w-full gw-h-full gw-object-cover\"\n />\n </div>\n\n <div className=\"gw-relative gw-z-[1] gw-flex gw-flex-col gw-items-center gw-justify-center -gw-translate-y-1/2 gw-top-4 gw-typography-h6-nr\">\n <UserAvatar className=\"gw-size-28 gw-border-popover gw-border-4\" />\n <div className=\"gw-mt-4 gw-font-bold\">{user?.name}</div>\n </div>\n\n <div className=\"gw-p-4 gw-flex-1 gw-flex gw-flex-col gw-justify-end gw-items-center gw-w-full\">\n <div className=\"gw-flex gw-flex-col gw-space-y-3 gw-w-full\">\n <Button\n variant=\"tertiary\"\n className=\"gw-w-full\"\n onClick={() => {\n window.open(editUrl, \"_blank\");\n }}\n >\n Edit Profile on Glyph Dashboard\n </Button>\n\n <Button variant=\"outline\" className=\"gw-w-full\" onClick={logout}>\n Log Out\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","export default import.meta.ROLLUP_FILE_URL_CKQMVLPb;","import { QRCodeSVG } from \"qrcode.react\";\nimport { useEffect } from \"react\";\nimport { toast } from \"sonner\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport Icon from \"../../assets/images/icon.png\";\nimport { useBalances } from \"../../hooks/useBalances\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { chainIdToRelayChain } from \"../../lib/utils\";\nimport CopyButton from \"../shared/CopyButton\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { buttonVariants } from \"../ui/button\";\n\nconst BALANCE_REFRESH_INTERVAL_MS = 5000;\n\nexport type WalletReceiveProps = {\n onBack: () => void;\n};\n\nexport function WalletReceiveView({ onBack }: WalletReceiveProps) {\n const { ready, user } = useGlyph();\n const { refreshBalances, balances } = useBalances();\n\n useEffect(() => {\n if (!ready) return;\n\n const interval = setInterval(\n () =>\n refreshBalances(\n true,\n balances?.tokens.reduce(\n (acc, token) => ({\n ...acc,\n [`${token.chainId}:${token.address}`]: (amount: number) =>\n toast.success(\n `Received ${amount} ${token.symbol} on ${chainIdToRelayChain(token.chainId)?.displayName || token?.chainId}`\n )\n }),\n {}\n )\n ),\n BALANCE_REFRESH_INTERVAL_MS\n );\n return () => clearInterval(interval);\n }, [ready, refreshBalances, balances]);\n\n return (\n <WalletViewTemplate\n header={\n <WalletViewHeader\n fullScreenHeader={{\n title: \"Receive\",\n onBackClick: onBack\n }}\n isStickyHeader={true}\n />\n }\n isStickyHeader={true}\n content={\n <div className=\"gw-w-full gw-p-4 gw-flex gw-flex-col gw-items-center gw-justify-evenly gw-space-y-6 gw-h-full\">\n <div className=\"gw-bg-primary gw-rounded-3xl gw-p-2 gw-shadow-lg\">\n <QRCodeSVG\n value={user!.evmWallet!}\n width={180}\n height={180}\n className=\"gw-rounded-2xl gw-p-3 gw-bg-background\"\n imageSettings={{\n src: Icon,\n height: 24,\n width: 24,\n excavate: true\n }}\n />\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-center gw-space-y-2 gw-justify-center\">\n <h6>{user?.name}</h6>\n <span className=\"gw-text-brand-gray-500\">{truncateEthAddress(user!.evmWallet!)}</span>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-w-full\">\n <div className=\"gw-h-0 gw-border-b gw-w-full gw-flex-1 gw-border-brand-gray-500 gw-mr-4\" />\n <span className=\"gw-text-brand-gray-500 gw-typography-body2\">or</span>\n <div className=\"gw-h-0 gw-border-b gw-w-full gw-flex-1 gw-border-brand-gray-500 gw-ml-4\" />\n </div>\n\n <CopyButton\n text=\"Copy Wallet Address\"\n textToCopy={user?.evmWallet}\n className={buttonVariants({\n variant: \"default\",\n size: \"default\",\n className: \"gw-w-full\"\n })}\n iconClassName=\"gw-text-secondary-foreground\"\n />\n </div>\n }\n />\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"gw-fixed gw-inset-0 gw-z-50 gw-bg-black/40 data-[state=open]:gw-animate-in data-[state=closed]:gw-animate-out data-[state=closed]:gw-fade-out-0 data-[state=open]:gw-fade-in-0 gw-rounded-t-3xl md:gw-rounded-6xl\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n container?: HTMLElement | null;\n }\n>(({ className, children, container, ...props }, ref) => (\n <DialogPortal container={container}>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"gw-fixed gw-left-[50%] gw-top-[50%] gw-z-50 gw-grid gw-w-[calc(100%-1rem)] gw-max-h-[calc(100vh-2rem)] gw-overflow-auto sm:gw-max-w-lg gw-translate-x-[-50%] gw-translate-y-[-50%] gw-gap-4 gw-bg-popover/80 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-p-4 gw-shadow-liquid gw-duration-200 data-[state=open]:gw-animate-in data-[state=closed]:gw-animate-out data-[state=closed]:gw-fade-out-0 data-[state=open]:gw-fade-in-0 data-[state=closed]:gw-zoom-out-95 data-[state=open]:gw-zoom-in-95 data-[state=closed]:gw-slide-out-to-left-1/2 data-[state=closed]:gw-slide-out-to-top-[48%] data-[state=open]:gw-slide-in-from-left-1/2 data-[state=open]:gw-slide-in-from-top-[48%] gw-rounded-4xl\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"gw-absolute gw-right-4 gw-top-4 gw-rounded-sm gw-opacity-70 gw-ring-offset-background gw-transition-opacity hover:gw-opacity-100 focus:gw-outline-none focus:gw-ring-2 focus:gw-ring-ring focus:gw-ring-offset-2 disabled:gw-pointer-events-none data-[state=open]:gw-bg-accent data-[state=open]:gw-text-muted-foreground\">\n <X className=\"gw-h-4 gw-w-4\" />\n <span className=\"gw-sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"gw-flex gw-flex-col gw-space-y-1.5 gw-text-center\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"gw-flex gw-flex-col-reverse sm:gw-flex-row sm:gw-justify-end sm:gw-space-x-2\", className)}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"gw-typography-subtitle1 !gw-text-lg gw-font-semibold gw-leading-none gw-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"gw-typography-body2 gw-text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n};\n","import { ChevronDown, FuelIcon } from \"lucide-react\";\nimport { memo, useEffect, useMemo, useRef, useState } from \"react\";\nimport { zeroAddress } from \"viem\";\nimport { useChainId, useSwitchChain } from \"wagmi\";\nimport { useBalances } from \"../../../hooks/useBalances\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { chainIdToRelayChain, cn, formatTokenCount } from \"../../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from \"../../ui/dialog\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport TooltipElement from \"../../ui/tooltip-element\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\nconst SendFundChainAndTokenSelector = ({\n onTokenSelect,\n selectedToken\n}: {\n onTokenSelect: (token: GlyphWidgetTokenBalancesItem | undefined) => void;\n selectedToken: GlyphWidgetTokenBalancesItem | undefined;\n}) => {\n const [open, setOpen] = useState<boolean>(false);\n\n const chainId = useChainId();\n const { switchChainAsync } = useSwitchChain();\n\n const { balances, hasBalances, fetchForAllNetworks, setFetchForAllNetworks } = useBalances();\n const currentChainId = fetchForAllNetworks ? \"all\" : chainId;\n\n const selectedTokenChain = useMemo(() => {\n if (!selectedToken?.chainId) return null;\n return chainIdToRelayChain(selectedToken.chainId);\n }, [selectedToken?.chainId]);\n\n // const [searchTerm, setSearchTerm] = useState<string>(\"\");\n // const [debouncedSearchTerm, setDebouncedSearchTerm] = useState<string>(\"\");\n // const debouncedFunc = useMemo(\n // () =>\n // debounce(500, (value: string) => {\n // setDebouncedSearchTerm(value);\n // }),\n // []\n // );\n // const isTermAnAddress = isAddress(debouncedSearchTerm);\n\n const [currentChain] = useMemo(() => {\n if (currentChainId === \"all\") return [null];\n const chain = chainIdToRelayChain(currentChainId);\n return [chain];\n }, [currentChainId]);\n\n const collisionRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n collisionRef.current = document.querySelector(\".gw-wallet-container\");\n }, []);\n\n const handleTokenSelect = async (token: GlyphWidgetTokenBalancesItem) => {\n // setToken first and then switch chain\n onTokenSelect(token);\n\n if (chainId !== token?.chainId) {\n await switchChainAsync({ chainId: token.chainId });\n }\n setOpen(false);\n };\n\n return (\n <>\n <Dialog open={open} onOpenChange={setOpen} modal>\n <DialogTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n // TODO: Logic to open token selector\n }}\n className={cn(\n \"gw-rounded-full gw-p-1 gw-pr-2 gw-h-12 gw-w-auto gw-min-w-0 !gw-ring-0 gw-flex gw-items-center gw-space-x-1\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n {selectedTokenChain && selectedToken ? (\n <div className=\"gw-flex gw-items-center gw-gap-1.5\">\n <TokenAndChainIcon\n token={{\n name: selectedToken.name,\n logoUrl: selectedToken.logo ?? undefined\n }}\n chain={{\n id: selectedTokenChain.id,\n name: selectedTokenChain.name,\n logoUrl: selectedTokenChain.iconUrl\n }}\n />\n\n <span className=\"gw-flex gw-flex-col gw-items-start gw-justify-between gw-gap-1\">\n <span className=\"gw-typography-body1 !gw-leading-none !gw-font-bold gw-inline-block gw-pr-1\">\n {selectedToken.symbol}\n </span>\n <span className=\"gw-typography-caption !gw-leading-none gw-text-brand-gray-500\">\n {CHAIN_NAMES[selectedTokenChain.id] || selectedTokenChain.displayName}\n </span>\n </span>\n </div>\n ) : (\n <div className=\"gw-h-8 gw-rounded-full gw-typography-caption gw-flex gw-items-center gw-justify-center gw-text-brand-gray-500 gw-pl-3\">\n Select Token\n </div>\n )}\n <ChevronDown className=\"gw-size-4 gw-flex-shrink-0 gw-text-gray-500\" />\n </button>\n </DialogTrigger>\n <DialogContent container={collisionRef.current} className=\"gw-max-h-[calc(100%-1rem)]\">\n <DialogHeader>\n <DialogTitle>Select Token</DialogTitle>\n <DialogDescription className=\"gw-sr-only\">Select a token to transfer</DialogDescription>\n </DialogHeader>\n\n <div className=\"gw-flex gw-flex-col gw-gap-4\">\n {/* <Input\n type=\"text\"\n placeholder=\"Search token name or paste address\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n debouncedFunc(e.target.value);\n }}\n /> */}\n\n {/* Networks */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Select Network</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n <Button\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === \"all\" && \"gw-bg-muted/80 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setFetchForAllNetworks(true)}\n >\n <span className=\"gw-typography-caption\">All</span>\n </Button>\n {relayClient.chains.map((chain) => (\n <Button\n key={`${chain.id}_networks`}\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === chain.id &&\n \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={async () => {\n if (currentChainId === chain.id) return;\n // Reset the selected token\n onTokenSelect(undefined);\n\n // Switch chain first and then set fetchForAllNetworks to false - otherwise useEffect would fetch balances twice\n await switchChainAsync({\n chainId: chain.id\n });\n setFetchForAllNetworks(false);\n }}\n >\n {chain.iconUrl ? (\n <img\n src={chain.iconUrl || \"\"}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-8\"\n />\n ) : (\n <span className=\"gw-typography-caption\">\n {CHAIN_NAMES[chain.id] || chain.name}\n </span>\n )}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Token List */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">{\"Your tokens\"}</div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {hasBalances && balances?.tokens.length ? (\n balances?.tokens?.map((token, index) => {\n const tokenChain = currentChain ?? chainIdToRelayChain(token?.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain?.id;\n return (\n <div\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleTokenSelect(token);\n }\n }}\n onClick={() => handleTokenSelect(token)}\n key={`${token.chainId}:${token.address}_token_list`}\n className=\"gw-w-full\"\n >\n <div\n className={cn(\n \"gw-flex gw-justify-between gw-items-center gw-w-full gw-p-2 gw-rounded-xl hover:gw-bg-gray-500/15\",\n {\n \"gw-bg-green-500/15 gw-shadow-liquidSm gw-backdrop-blur-sm gw-border gw-border-brand-white/20\":\n isTokenSelected\n }\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.logo ?? undefined\n }}\n chain={{\n id: tokenChain.id,\n name: tokenChain.name,\n logoUrl: tokenChain.iconUrl\n }}\n />\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-flex gw-gap-1 gw-items-center\">\n <span className=\"gw-font-medium\">{token.symbol}</span>\n {token.address === zeroAddress && (\n <TooltipElement\n side=\"bottom\"\n align=\"center\"\n stopPropagation\n description=\"Gas Token\"\n >\n <span className=\"gw-size-[18px] gw-bg-brand-success gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <FuelIcon />\n </span>\n </TooltipElement>\n )}\n </span>\n\n <span\n className={`gw-typography-caption gw-text-brand-gray-500 `}\n >\n {CHAIN_NAMES[tokenChain.id] || tokenChain.displayName}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-h-full gw-text-right\">\n <span className=\"gw-typography-caption\">\n {/* If USD amount is 0, but token value is not 0, show <0.01 */}\n {formatCurrency(\n token.amount,\n token.currency,\n BigInt(token.valueInWei) !== 0n\n )}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {formatTokenCount(\n token.valueInWei,\n token.decimals,\n token.displayDecimals\n )}{\" \"}\n {token.symbol}\n </span>\n </div>\n </div>\n {index < balances?.tokens.length - 1 && (\n <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />\n )}\n </div>\n );\n })\n ) : hasBalances ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n No tokens found\n </div>\n ) : (\n new Array(3).fill(0).map((_, index) => (\n <div key={index} className=\"gw-w-full\">\n <Skeleton className=\"gw-flex gw-items-center gw-justify-center gw-h-14\" />\n {index < 2 && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nexport default memo(SendFundChainAndTokenSelector);\n","import type { FunctionComponent } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputHelperProps {\n type?: \"error\" | \"helper\";\n text?: string;\n className?: string;\n}\n\nconst InputHelper: FunctionComponent<InputHelperProps> = ({ text, type, className }) => (\n <div className=\"gw-relative gw-w-full\">\n {text ? (\n <p\n className={cn(\n `gw-absolute gw-translate-y-1 gw-pr-2 gw-w-full gw-typography-caption`,\n type === \"error\" ? \"gw-text-destructive\" : \"gw-text-muted\",\n className\n )}\n >\n {text}\n </p>\n ) : null}\n </div>\n);\n\nexport default InputHelper;\n","import { forwardRef, InputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport InputHelper from \"./input-helper\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: {\n value: string;\n htmlFor: string;\n className?: string;\n floatingLabel?: boolean;\n };\n leadingIcon?: {\n element: ReactNode;\n className?: string;\n };\n trailingIcon?: {\n element: ReactNode;\n className?: string;\n };\n parentClassName?: string;\n bodyClassName?: string;\n supportingText?: {\n value: string;\n isError?: boolean;\n className?: string;\n };\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n supportingText,\n parentClassName,\n bodyClassName,\n leadingIcon,\n trailingIcon,\n\n // Input tag related\n className,\n type,\n placeholder,\n ...props\n },\n ref\n ) => {\n return (\n <div className={cn(\"gw-typography-body2 gw-pb-3 gw-w-full\", parentClassName)}>\n {label && !label.floatingLabel ? (\n <label\n className={cn(\n \"gw-text-brand-gray-500\",\n supportingText?.isError && \"gw-text-destructive\",\n label.className\n )}\n htmlFor={label.htmlFor}\n >\n {label.value}\n </label>\n ) : null}\n\n <div\n className={cn(\n `gw-relative gw-w-full gw-text-foreground gw-typography-body1 `,\n supportingText?.isError && \"gw-text-destructive\",\n !label?.floatingLabel && \"gw-mt-1\",\n bodyClassName\n )}\n >\n {leadingIcon ? (\n <div\n className={cn(\n `gw-absolute gw-inset-y-0 gw-z-[1] gw-left-0 gw-rounded-l-xl gw-flex gw-items-center gw-w-11 gw-pointer-events-none`,\n props.disabled && \"gw-opacity-50\",\n leadingIcon.className\n )}\n >\n {leadingIcon.element}\n </div>\n ) : null}\n\n <input\n className={cn(\n \"gw-peer gw-flex gw-w-full gw-rounded-full gw-outline-none gw-py-3 gw-px-5 gw-h-12 gw-transition-all file:gw-border-0 gw-placeholder-brand-gray-500 focus-visible:gw-outline-none focus-visible:gw-ring-secondary disabled:gw-cursor-not-allowed disabled:gw-opacity-50\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border-1 hover:gw-ring-2 focus:gw-ring-1 gw-ring-input gw-border-brand-white/20 gw-shadow-liquidSm\", // liquid glass shadow\n supportingText?.isError &&\n \"gw-ring-destructive/50 dark:gw-ring-destructive/50 focus-visible:gw-ring-destructive\",\n Boolean(leadingIcon) && \"gw-pl-11\",\n Boolean(trailingIcon) && \"gw-pr-11\",\n label?.floatingLabel &&\n (supportingText?.isError\n ? \"gw-placeholder-transparent focus:gw-placeholder-error/50\"\n : \"gw-placeholder-transparent focus:gw-placeholder-brand-gray-500\"),\n className\n )}\n // If passed separately will be overridden in props\n id={label?.htmlFor}\n // Don't allow \"e\" in field type number\n onKeyDown={(evt) => {\n if (type === \"number\" && evt.key === \"e\") {\n evt.preventDefault();\n }\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n // Blur when scroll happens [To not allow increment/decrement in number field on scroll inside field]\n placeholder={!label?.floatingLabel ? placeholder : placeholder || \" \"}\n ref={ref}\n type={type}\n {...props}\n />\n {label && label.floatingLabel ? (\n <label\n className={cn(\n `gw-absolute gw-cursor-text gw-duration-300 gw-text-brand-gray-500 peer-placeholder-shown:gw-text-input peer-focus:gw-text-foreground gw-transform gw-typography-caption gw--translate-y-1/2 gw-scale-90 gw-top-0 gw-z-[1] gw-bg-background peer-focus:gw-px-1.5 peer-placeholder-shown:gw-px-0 gw-px-1.5 gw-left-1.5 peer-focus:gw-left-1.5 peer-focus:gw-top-0 peer-focus:gw-scale-90 peer-focus:gw--translate-y-1/2 peer-placeholder-shown:gw-scale-100 peer-placeholder-shown:gw--translate-y-1/2 peer-placeholder-shown:gw-top-1/2 gw-pointer-events-none autofill:gw-bg-transparent`,\n leadingIcon && \"peer-placeholder-shown:gw-left-11\",\n trailingIcon && \"peer-placeholder-shown:gw-right-11\",\n props.disabled && \"gw-text-foreground/50 peer-placeholder-shown:gw-text-input/50\",\n supportingText?.isError && \"gw-text-destructive\",\n label.className\n )}\n htmlFor={label.htmlFor}\n >\n {label.value}\n </label>\n ) : null}\n\n {trailingIcon ? (\n <div\n className={cn(\n `gw-absolute gw-inset-y-0 gw-z-[1] gw-flex gw-items-center gw-w-11 gw-right-0 gw-rounded-r-xl gw-pointer-events-none`,\n props.disabled && \"gw-opacity-50\",\n trailingIcon.className\n )}\n >\n {trailingIcon.element}\n </div>\n ) : null}\n </div>\n\n {supportingText ? (\n <InputHelper\n className={supportingText?.className}\n text={supportingText?.value}\n type={supportingText?.isError ? \"error\" : \"helper\"}\n />\n ) : null}\n </div>\n );\n }\n);\n\nexport { Input };\n","import { memo, useEffect } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { checksumAddress, Hex, isAddress } from \"viem\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { SendView } from \"../../../lib/constants\";\nimport { cn, ethereumAvatar } from \"../../../lib/utils\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\n\ninterface WalletSendFundEnterAddressViewProps {\n onBack: () => void;\n setView: (view: SendView) => void;\n setRecipientAddress: (address: string) => void;\n setRecipientAddressError: (error: string) => void;\n recipientAddress: string;\n recipientAddressError: string | null;\n}\n\nconst WalletSendFundEnterAddressView = ({\n onBack,\n setView,\n setRecipientAddress,\n setRecipientAddressError,\n recipientAddress,\n recipientAddressError\n}: WalletSendFundEnterAddressViewProps) => {\n const { user } = useGlyph();\n\n useEffect(() => {\n if (recipientAddressError) return;\n if (!recipientAddress) return;\n\n if (!isAddress(recipientAddress, { strict: false }))\n setRecipientAddressError(\"Please enter a valid recipient wallet address\");\n }, [recipientAddress, recipientAddressError, setRecipientAddressError]);\n\n return (\n <WalletViewTemplate\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Send Funds\",\n onBackClick: onBack\n }}\n />\n }\n isStickyHeader={true}\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full gw-flex gw-flex-col\">\n <div>\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">From</div>\n <div\n className={cn(\n \"gw-rounded-full gw-px-2.5 gw-py-2 gw-mt-3 gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\" // liquid glass shadow\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between\">\n <UserAvatar className=\"gw-size-11\" />\n\n <div className=\"gw-flex gw-flex-col\">\n <div className=\"gw-mt-1.5 gw-typography-subtitle1 gw-text-left\">{user?.name}</div>\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {truncateEthAddress(user?.evmWallet || \"\")}\n </div>\n </div>\n\n <div />\n </div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-primary gw-my-6 gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-5 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-5\" />\n </div>\n\n <div>\n <Input\n label={{\n htmlFor: \"recipientAddress\",\n value: \"To\"\n }}\n leadingIcon={\n isAddress(recipientAddress)\n ? {\n element: (\n <UserAvatar\n className=\"gw-size-10 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(recipientAddress)}\n />\n ),\n className: \"gw-justify-center gw-w-14\"\n }\n : undefined\n }\n id=\"recipientAddress\"\n className={cn(\n \"gw-rounded-full gw-border gw-py-4 gw-h-auto gw-mt-3 gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\",\n isAddress(recipientAddress) && \"gw-pl-14\"\n )}\n placeholder=\"Enter recipient wallet address\"\n value={recipientAddress}\n onChange={(e) => {\n setRecipientAddress(e.target.value);\n if (!e.target.value) return setRecipientAddressError(\"\");\n\n if (!isAddress(e.target.value, { strict: false }))\n return setRecipientAddressError(\"Please enter a valid wallet address\");\n\n if (\n user?.evmWallet &&\n checksumAddress(e.target.value as Hex) === checksumAddress(user?.evmWallet as Hex)\n )\n return setRecipientAddressError(\"You cannot send funds to your own wallet\");\n\n setRecipientAddressError(\"\");\n }}\n supportingText={{\n value: recipientAddressError || \"\",\n isError: !!recipientAddressError,\n className: \"gw-ml-2\"\n }}\n />\n </div>\n </div>\n }\n footer={\n <>\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full gw-shadow-2xl before:gw-backdrop-blur-sm\"\n disabled={!recipientAddress || !!recipientAddressError}\n onClick={() => {\n setRecipientAddress(checksumAddress(recipientAddress as Hex));\n setView(SendView.ENTER_AMOUNT);\n }}\n >\n Continue\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n );\n};\n\nexport default memo(WalletSendFundEnterAddressView);\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletSendFundFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n txHash: string | undefined;\n txBlockExplorerUrl: string | undefined;\n txBlockExplorerName: string | undefined;\n}\n\nconst WalletSendFundFailedView: React.FC<WalletSendFundFailedViewProps> = ({\n onEnd,\n onShowActivity,\n txHash,\n txBlockExplorerUrl,\n txBlockExplorerName\n}) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n <div className=\"gw-my-10 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txHash && txBlockExplorerUrl ? (\n <LinkWithIcon\n key={txHash}\n text={`View on ${txBlockExplorerName || \"block explorer\"}`}\n url={txBlockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundFailedView);\n","import { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { ethereumAvatar } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { SendFundQuote } from \"../WalletSendFundView\";\n\ninterface WalletSendFundPendingViewProps {\n onBack: () => void;\n txHash: string | undefined;\n txBlockExplorerUrl: string | undefined;\n txBlockExplorerName: string | undefined;\n quote: SendFundQuote;\n tokenSymbol: string;\n TokenIcon: React.JSX.Element;\n}\n\nconst WalletSendFundPendingView: React.FC<WalletSendFundPendingViewProps> = ({\n onBack,\n txHash,\n txBlockExplorerUrl,\n txBlockExplorerName,\n quote,\n tokenSymbol,\n TokenIcon\n}) => {\n const { user } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n <h6>In Progress</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">1 min</span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar className=\"gw-size-8\" />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">From</div>\n <div>{truncateEthAddress(user!.evmWallet)}</div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-gap-3 gw-items-center\">\n <div className=\"gw-my-5 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n\n <div className=\"gw-flex gw-items-center gw-justify-center gw-relative gw-z-[1]\">\n {TokenIcon}\n <div className=\"gw-typography-body2 gw-ml-2\">\n <span>{quote?.receivable_amount_in_token}</span>{\" \"}\n <span className=\"gw-text-brand-gray-500\">{tokenSymbol}</span>\n </div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar\n className=\"gw-size-8\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(quote?.receiver_address)}\n />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">To</div>\n <div>{truncateEthAddress(quote?.receiver_address)}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n {txHash && txBlockExplorerUrl && (\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500\">\n <LinkWithIcon\n key={txHash}\n text={`View on ${txBlockExplorerName || \"block explorer\"}`}\n url={txBlockExplorerUrl}\n />\n </span>\n )}\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletSendFundPendingView);\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { cn, ethereumAvatar } from \"../../../lib/utils\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { SendFundQuote } from \"../WalletSendFundView\";\n\ninterface WalletSendFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n quote: SendFundQuote;\n tokenSymbol: string;\n}\n\nconst WalletSendFundSuccessView: React.FC<WalletSendFundSuccessViewProps> = ({\n onEnd,\n onShowActivity,\n quote,\n tokenSymbol\n}) => {\n const { user } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`${quote.receivable_amount_in_token} ${tokenSymbol} have been successfully\\nsent to ${truncateEthAddress(quote.receiver_address)}`}\n </span>\n\n <div\n className={cn(\n \"gw-my-10 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-2 gw-w-full gw-justify-between\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" // liquid glass shadow\n )}\n >\n <div className=\"gw-flex gw-gap-2 gw-items-center\">\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">From</span>\n <span className=\"gw-break-all\">\n {user?.name || truncateEthAddress(user?.evmWallet || \"\")}\n </span>\n </div>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-min-w-24\">\n <UserAvatar\n className=\"gw-size-6 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(quote.receiver_address)}\n />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">To</span>\n <span className=\"gw-break-all\">\n {truncateEthAddress(quote.receiver_address)}\n </span>\n </div>\n </div>\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundSuccessView);\n","import { Loader2 } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { debounce } from \"throttle-debounce\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport {\n createPublicClient,\n encodeFunctionData,\n erc20Abi,\n fallback,\n formatUnits,\n Hex,\n http,\n parseEther,\n zeroAddress\n} from \"viem\";\nimport { useChainId, useChains } from \"wagmi\";\nimport { CaretDownIcon } from \"../../assets/svg/CaretDownIcon\";\nimport NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { useGlyphApi } from \"../../hooks/useGlyphApi\";\nimport { INTERNAL_GRADIENT_TYPE, MAX_DECIMALS_FOR_CRYPTO, SendView } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport {\n cn,\n createLogger,\n displayNumberPrecision,\n ethereumAvatar,\n formatTokenCount,\n tokenToBigIntWei\n} from \"../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../types\";\nimport UserAvatar from \"../shared/UserAvatar\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport SendFundChainAndTokenSelector from \"./internal/SendFundChainAndTokenSelector\";\nimport WalletSendFundEnterAddressView from \"./internal/WalletSendFundEnterAddressView\";\nimport WalletSendFundFailedView from \"./internal/WalletSendFundFailedView\";\nimport WalletSendFundPendingView from \"./internal/WalletSendFundPendingView\";\nimport WalletSendFundSuccessView from \"./internal/WalletSendFundSuccessView\";\n\nexport type WalletSendFundProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport type SendFundQuote = {\n tokenAddress: Hex;\n receivable_amount: bigint;\n receivable_amount_in_token: number;\n receivable_amount_in_currency: string;\n estimated_fees_amount: string;\n estimated_fees_amount_in_currency: string | undefined;\n currency: string;\n in_amount: string;\n receiver_address: Hex;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n gasPrice?: bigint;\n gasLimit: bigint;\n};\n\nconst SEND_STATUS_REFRESH_INTERNAL_MS = 10 * 1000; // 10 seconds\n// Stop polling for a quote after this many consecutive RPC failures (e.g. when the RPC is rate-limiting us),\n// otherwise the 5s interval keeps hammering the RPC forever and worsens the rate limiting.\nconst MAX_QUOTE_FETCH_RETRIES = 5;\nconst QUOTE_BUSY_ERROR = \"Network is busy. Please try again.\";\nconst MAX_BALANCE_ERROR = \"Not enough balance\";\nconst NO_TOKENS_ERROR = \"Balance not enough to transfer\";\n\nexport function WalletSendFundView({ onBack, onEnd, onShowActivity, setGradientType }: WalletSendFundProps) {\n const { user, sendTransaction, refreshBalances, hasBalances, balances } = useGlyph();\n const { glyphApiFetch } = useGlyphApi();\n const chainId = useChainId();\n const chains = useChains();\n\n const chain = useMemo(() => chains.find((c) => c.id === chainId), [chainId, chains]);\n\n const [recipientAddress, setRecipientAddress] = useState<string>(\"\");\n const [recipientAddressError, setRecipientAddressError] = useState<string | null>(null);\n\n const [view, setView] = useState<SendView>(SendView.ENTER_ADDRESS);\n\n const nativeToken = useMemo(\n () => balances?.tokens?.find((token) => token.native && token.chainId === chainId),\n [balances?.tokens, chainId]\n );\n const [token, setToken] = useState<GlyphWidgetTokenBalancesItem | undefined>();\n\n const publicClient = useMemo(() => {\n // Use the selected chain's RPC (which carries any consumer-supplied rpcUrls override), falling back\n // across all configured URLs. filter(Boolean) avoids fallback([])/http(undefined) when a chain has no\n // configured http url; http() with no chain is a no-op until a chain loads.\n const httpUrls = chain ? chain.rpcUrls.default.http.filter(Boolean) : [];\n return createPublicClient({\n chain,\n transport: httpUrls.length ? fallback(httpUrls.map((url) => http(url))) : http()\n });\n }, [chain]);\n\n useEffect(() => {\n if (!token) {\n setToken(nativeToken);\n }\n }, [nativeToken]);\n\n const [sendAmount, setSendAmount] = useState<string>(\"\");\n const [debouncedSendAmount, setDebouncedSendAmount] = useState<number>(Number(sendAmount));\n const [transferMax, setTransferMax] = useState<boolean>(false);\n\n const [quote, setQuote] = useState<SendFundQuote | null>(null);\n const [quoteLoading, setQuoteLoading] = useState<boolean>(false);\n // Counts consecutive failed quote fetches. A ref (not state) so bumping it doesn't retrigger the\n // quote effect and reset the polling interval. Reset to 0 on every successful fetch and effect re-run.\n const quoteFetchFailuresRef = useRef<number>(0);\n const [isSignaturePending, setIsSignaturePending] = useState<boolean>(false);\n\n const [isPending, setIsPending] = useState<boolean>(false);\n const [statusFetchCount, setStatusFetchCount] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const [maxValueError, setMaxValueError] = useState<boolean>(false);\n const [txHash, setTxHash] = useState<string>();\n\n const [txBlockExplorerUrl, setTxBlockExplorerUrl] = useState<string>();\n const [txBlockExplorerName, setTxBlockExplorerName] = useState<string>();\n const [txStatus, setTxStatus] = useState<\"SUCCESS\" | \"FAILED\" | \"PENDING\">(\"PENDING\");\n\n const logger = useMemo(() => createLogger(\"SendFundView\"), []);\n\n useEffect(() => {\n // Only set if no balance and no other error is set\n if (!Number(token?.value || \"0\") && !error) {\n setQuoteLoading(false);\n setError(NO_TOKENS_ERROR);\n } else if (token?.value && Number(token?.value) > 0 && error === NO_TOKENS_ERROR) {\n // Only unset the error if balance is there and error is set to NO_TOKENS_ERROR\n setQuoteLoading(false);\n setError(null);\n }\n }, [token?.value, error, setError, setQuoteLoading]);\n\n useEffect(() => {\n // Fresh failure budget each time the effect (re)runs, i.e. whenever inputs change.\n quoteFetchFailuresRef.current = 0;\n let interval: ReturnType<typeof setInterval> | undefined = undefined;\n\n // Count a failed quote fetch. Once we hit the retry cap, stop the polling loop and surface a\n // terminal error instead of hammering the (likely rate-limiting) RPC forever.\n const registerFailure = (err?: any, fallbackMessage: string = QUOTE_BUSY_ERROR) => {\n quoteFetchFailuresRef.current += 1;\n setQuoteLoading(false);\n if (quoteFetchFailuresRef.current >= MAX_QUOTE_FETCH_RETRIES) {\n logger.error(\"Giving up on Send quote after consecutive RPC failures\", err);\n setError(QUOTE_BUSY_ERROR);\n if (interval) clearInterval(interval);\n } else {\n setError(err?.shortMessage || fallbackMessage);\n }\n };\n\n const fetchQuote = async () => {\n // If on any other screen or signature is pending, don't fetch quote\n if (view !== SendView.ENTER_AMOUNT || isSignaturePending || maxValueError || !publicClient) return;\n\n if (\n token &&\n debouncedSendAmount &&\n recipientAddress &&\n token?.address &&\n (transferMax || debouncedSendAmount <= Number(token?.value || 0))\n ) {\n setQuote(null);\n setQuoteLoading(true);\n setError(null);\n let maxFeePerGas: bigint | undefined;\n let maxPriorityFeePerGas: bigint | undefined;\n let gasPrice: bigint | undefined;\n\n try {\n const fees = await publicClient.estimateFeesPerGas();\n maxFeePerGas = fees.maxFeePerGas;\n maxPriorityFeePerGas = fees.maxPriorityFeePerGas ?? fees.maxFeePerGas / 2n;\n } catch {\n try {\n gasPrice = await publicClient.getGasPrice();\n } catch (error: any) {\n registerFailure(error, \"Failed to estimate fees\");\n return;\n }\n }\n\n let gasUnits;\n\n try {\n const valueToSend =\n (transferMax || debouncedSendAmount === Number(token.value || 0)) && token.valueInWei\n ? BigInt(token.valueInWei || 0)\n : token?.address === zeroAddress\n ? parseEther(`${debouncedSendAmount}`)\n : tokenToBigIntWei(debouncedSendAmount, token.decimals || 18);\n\n if (token?.address === zeroAddress) {\n gasUnits = await publicClient.estimateGas({\n account: user?.evmWallet as Hex,\n to: recipientAddress as Hex,\n value: valueToSend\n });\n } else {\n gasUnits = await publicClient.estimateContractGas({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipientAddress as Hex, valueToSend],\n account: user?.evmWallet as Hex,\n address: token?.address as Hex\n });\n }\n } catch (error: any) {\n registerFailure(error, \"Failed to estimate gas\");\n return;\n }\n\n const feePerGas = maxFeePerGas ?? gasPrice;\n if (!feePerGas) {\n registerFailure(undefined, \"Failed to estimate fees\");\n return;\n }\n const gasCost = feePerGas * gasUnits;\n\n let valueToReturn: bigint;\n // If user is sending native token and has selected max amount, we need to subtract the gas cost from the total balance\n if (\n token?.address === zeroAddress &&\n (transferMax || debouncedSendAmount === Number(token.value || 0))\n ) {\n valueToReturn = BigInt(token.valueInWei || 0) - gasCost;\n } else {\n // If user is sending ERC20 token, we need to use the amount entered by the user (true for max amount as well)\n if (gasCost > BigInt(nativeToken?.valueInWei || 0)) {\n setError(\"Insufficient gas balance\");\n setQuoteLoading(false);\n return;\n }\n valueToReturn =\n transferMax || debouncedSendAmount === Number(token.value || 0)\n ? BigInt(token.valueInWei || 0)\n : tokenToBigIntWei(debouncedSendAmount, token.decimals || 18);\n }\n\n const receivableAmountInToken = displayNumberPrecision(\n +formatUnits(valueToReturn, token.decimals || 18),\n token.displayDecimals\n );\n\n setQuote({\n tokenAddress: token?.address,\n receiver_address: recipientAddress as Hex,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gasPrice,\n receivable_amount: valueToReturn,\n receivable_amount_in_token: receivableAmountInToken,\n receivable_amount_in_currency: formatCurrency(\n receivableAmountInToken * +(token.rateInCurrency || 0),\n user?.currency || \"USD\",\n valueToReturn !== 0n\n ),\n estimated_fees_amount: formatUnits(gasCost, nativeToken?.decimals || 18),\n estimated_fees_amount_in_currency: formatCurrency(\n +formatUnits(gasCost, nativeToken?.decimals || 18) * +(nativeToken?.rateInCurrency || 0),\n user?.currency || \"USD\",\n gasCost !== 0n\n ),\n currency: nativeToken?.currency || \"\",\n in_amount: debouncedSendAmount.toString(),\n gasLimit: gasUnits\n });\n\n // Successful fetch — reset the failure budget.\n quoteFetchFailuresRef.current = 0;\n setQuoteLoading(false);\n }\n };\n\n // Initial fetch\n fetchQuote();\n\n // Set up interval\n interval = setInterval(fetchQuote, 5000);\n\n // Cleanup\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [\n debouncedSendAmount,\n isSignaturePending,\n logger,\n maxValueError,\n nativeToken,\n publicClient,\n recipientAddress,\n token,\n transferMax,\n user,\n view\n ]);\n\n useEffect(() => {\n if (view === SendView.WAIT) setIsPending(true);\n }, [view]);\n\n useEffect(() => {\n if (!isPending) return setStatusFetchCount(0);\n }, [isPending]);\n\n const fetchSendStatus = useCallback(async () => {\n if (!glyphApiFetch) return toast.error(\"Glyph API not ready\");\n\n setStatusFetchCount((c) => c + 1);\n try {\n if (!txHash) throw new Error(\"Cannot fetch tx status for ID\"); // we know it's \"hash\" instead of \"ID\"\n\n const res = await glyphApiFetch(`/api/widget/transactions/${txHash}?chainId=${chainId}`);\n if (!res.ok) throw new Error(\"Cannot fetch tx status\");\n\n const data = await res.json();\n setTxStatus(data.status!);\n setTxBlockExplorerUrl(data.blockExplorerUrl);\n setTxBlockExplorerName(data.blockExplorerName);\n\n if (data.status === \"PENDING\") return;\n\n await refreshBalances(true);\n setIsPending(false);\n setView(SendView.END);\n } catch (e: any) {\n toast.error(e?.message);\n return;\n }\n }, [chainId, txHash, glyphApiFetch, refreshBalances]);\n\n // check tx status every `SEND_STATUS_REFRESH_INTERNAL_MS` miliseconds when tx is in progress\n useEffect(() => {\n if (!isPending) return;\n\n // fetch instantly the first time, then use the interval\n const interval = setInterval(() => fetchSendStatus(), statusFetchCount ? SEND_STATUS_REFRESH_INTERNAL_MS : 0);\n return () => clearInterval(interval);\n }, [isPending, statusFetchCount, fetchSendStatus]);\n\n const debouncedFunc = useMemo(\n () =>\n debounce(500, (value: string) => {\n setQuote(null);\n setDebouncedSendAmount(Number(value));\n }),\n []\n );\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === SendView.END && txStatus === \"SUCCESS\") setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n if (view === SendView.END && txStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, txStatus, view]);\n\n const validAmountEntered = debouncedSendAmount > 0 && debouncedSendAmount <= Number(token?.value || \"0\");\n\n const TokenIcon = token?.logo ? (\n <img src={token.logo} alt={token.symbol} className=\"gw-w-6 gw-h-6 gw-mr-1 gw-rounded-full\" />\n ) : (\n <NoTokenIcon />\n );\n\n const selectedTokenBalanceFormatted = token\n ? formatTokenCount(token?.valueInWei, token?.decimals, token?.displayDecimals)\n : undefined;\n const selectedTokenValueFormatted = token\n ? token?.rateInCurrency\n ? formatCurrency(\n parseFloat(formatUnits(BigInt(token?.valueInWei || 0), token?.decimals ?? 18)) *\n parseFloat(token?.rateInCurrency),\n token?.currency,\n BigInt(token?.valueInWei || 0) > 0n\n )\n : formatCurrency(token?.amount || 0, token?.currency, BigInt(token?.valueInWei || 0) !== 0n)\n : undefined;\n\n return (\n <>\n {view === SendView.ENTER_ADDRESS && (\n <WalletSendFundEnterAddressView\n onBack={onBack}\n setView={setView}\n setRecipientAddress={setRecipientAddress}\n setRecipientAddressError={setRecipientAddressError}\n recipientAddress={recipientAddress}\n recipientAddressError={recipientAddressError}\n />\n )}\n\n {view === SendView.ENTER_AMOUNT && (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Send Funds\",\n onBackClick: () => {\n setView(SendView.ENTER_ADDRESS);\n }\n }}\n />\n }\n content={\n <div\n className={cn(\n \"gw-px-4 gw-h-full gw-flex gw-flex-col gw-justify-between gw-items-center gw-gap-3\"\n )}\n >\n <div className=\"gw-w-full\">\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full\">\n <h6>{!validAmountEntered ? \"Enter Amount\" : \"Sending\"}</h6>\n\n <SendFundChainAndTokenSelector\n selectedToken={token}\n onTokenSelect={(token) => {\n // Reset amounts if token changes\n setSendAmount(\"\");\n setTransferMax(false);\n // Directly reset debounced amount to 0 (without delay)\n setDebouncedSendAmount(0);\n setError(null);\n setQuote(null);\n\n setToken(token);\n }}\n />\n </div>\n {/* Balance */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-typography-body2 gw-mt-2\">\n <div>Balance</div>\n {token && (\n <div className=\"gw-text-brand-gray-600\">\n {selectedTokenBalanceFormatted} {token?.symbol} (\n {selectedTokenValueFormatted})\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-w-full\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-flex-col\">\n <div className=\"gw-w-full gw-text-center gw-border-b-2 gw-border-border focus-within:gw-border-foreground gw-pb-1 gw-typography-h2-nr gw-flex gw-justify-between gw-items-center\">\n <div className=\"gw-flex gw-items-baseline gw-gap-2 gw-justify-center gw-flex-1\">\n <div className=\"gw-relative gw-inline-block gw-max-w-44\">\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <span\n aria-hidden\n className=\"gw-invisible gw-whitespace-pre gw-select-none gw-max-w-60\"\n >\n {sendAmount || \"0\"}\n </span>\n <input\n type=\"text\"\n max={token?.value || \"0\"}\n disabled={!Number(token?.value || \"0\")}\n // Don't allow \"e\" in field type number\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (sendAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n\n // check if this keystroke would make the value exceed the max\n const input = e.currentTarget as HTMLInputElement;\n const newValue = input.value + e.key;\n if (\n input.max &&\n !isNaN(parseFloat(newValue)) &&\n parseFloat(newValue) > parseFloat(input.max)\n ) {\n setError(MAX_BALANCE_ERROR);\n }\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={sendAmount}\n onChange={(e) => {\n // Reset transfer max if amount is changed\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n token?.displayDecimals ?? MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // check if input exceeds balance\n if (\n !isNaN(parseFloat(e.target.max)) &&\n parseFloat(value) > parseFloat(e.target.max)\n ) {\n // allow setting the wrong value only once\n if (maxValueError) return;\n setMaxValueError(true);\n } else {\n setError(null);\n setMaxValueError(false);\n }\n\n debouncedFunc(value);\n setSendAmount(value);\n setTransferMax(false);\n }}\n placeholder=\"0\"\n className={cn(\n \"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-absolute gw-inset-0 gw-w-full gw-max-w-44\",\n !Number(token?.value || \"0\") &&\n \"gw-opacity-50 gw-cursor-not-allowed\"\n )}\n />\n </div>\n </div>\n <span className=\"gw-text-input gw-typography-h4-nr\">\n {token?.symbol || \"\"}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-center gw-items-center gw-mt-4 gw-gap-4\">\n {token?.rateInCurrency && (\n <div className=\"gw-text-brand-gray-600\">\n {formatCurrency(\n +token?.rateInCurrency * +sendAmount,\n token?.currency,\n Number(sendAmount) !== 0\n )}\n </div>\n )}\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n disabled={!Number(token?.value || \"0\")}\n className=\"gw-py-1 gw-px-2 gw-h-auto gw-w-16\"\n onClick={() => {\n const valueToSet = transferMax ? \"\" : `${+(token?.value || 0) || \"\"}`;\n setSendAmount(valueToSet);\n debouncedFunc(valueToSet);\n setTransferMax((v) => !v);\n }}\n >\n <span className=\"gw-typography-overline\">\n {!transferMax ? \"Max\" : \"Clear\"}\n </span>\n </Button>\n </div>\n </div>\n </div>\n\n {validAmountEntered ? (\n <div\n className={cn(\n \"gw-typography-caption gw-mt-2 gw-mx-1 gw-w-full gw-rounded-xl gw-p-2\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-space-x-1\">\n <span>Transaction Time</span>\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n <span className=\"gw-text-brand-gray-500 gw-text-right\">{`<1 min`}</span>\n )}\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500 gw-text-right\">\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n `${formatTokenCount(tokenToBigIntWei(quote?.estimated_fees_amount || 0, nativeToken?.decimals || 18), nativeToken?.decimals || 18, nativeToken?.displayDecimals)} ${nativeToken?.symbol} (${quote?.estimated_fees_amount_in_currency})`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Expected receivable amount</span>\n <div className=\"gw-text-brand-gray-500 gw-text-right\">\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n `${quote?.receivable_amount_in_token} ${token?.symbol} (${quote?.receivable_amount_in_currency})`\n )}\n </div>\n </div>\n </div>\n ) : (\n <div />\n )}\n </div>\n }\n footer={\n <>\n <div className={cn(\"gw-text-destructive gw-typography-caption gw-text-center gw-min-h-4\")}>\n {error ? (\n <span className=\"gw-bg-destructive-foreground/60 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-rounded-full\">\n {error}\n </span>\n ) : null}\n </div>\n\n <div\n className={cn(\n \"gw-p-3 gw-rounded-full gw-flex gw-items-center gw-space-x-2 gw-w-full gw-mt-2 gw-justify-between\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-gap-2 gw-items-center\">\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">From</span>\n <span className=\"gw-break-all\">\n {user?.name || truncateEthAddress(user?.evmWallet || \"\")}\n </span>\n </div>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-primary gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-min-w-24\">\n <UserAvatar\n className=\"gw-size-6 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(recipientAddress)}\n />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">To</span>\n <span className=\"gw-break-all\">{truncateEthAddress(recipientAddress)}</span>\n </div>\n </div>\n </div>\n\n <Button\n variant=\"default\"\n className=\"gw-w-full gw-mt-2\"\n disabled={\n !hasBalances || // most likely means user just switched chains and balances haven't been loaded yet\n isSignaturePending ||\n quoteLoading ||\n !!error ||\n !quote ||\n !sendAmount ||\n +sendAmount <= 0 ||\n (token?.value ? +sendAmount > +token.value : false)\n }\n onClick={async () => {\n let receipt;\n setIsSignaturePending(true);\n setError(null);\n try {\n if (!quote?.receivable_amount) {\n throw new Error(\"No receivable amount\");\n }\n if (!publicClient) {\n throw new Error(\"Missing publicClient\");\n }\n\n let hash_: string | undefined;\n if (token?.address === zeroAddress) {\n receipt = await sendTransaction({\n transaction: {\n to: recipientAddress,\n value: quote?.receivable_amount,\n ...(quote?.gasPrice\n ? { type: 0, gasPrice: quote.gasPrice }\n : {\n maxFeePerGas: quote?.maxFeePerGas,\n maxPriorityFeePerGas: quote?.maxPriorityFeePerGas\n })\n }\n });\n hash_ = receipt;\n } else {\n const txData = await publicClient.simulateContract({\n abi: erc20Abi,\n functionName: \"transfer\",\n account: user?.evmWallet as Hex,\n address: token?.address as Hex,\n args: [recipientAddress as Hex, quote?.receivable_amount],\n chain,\n gas: quote?.gasLimit\n });\n try {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipientAddress as Hex, quote?.receivable_amount]\n });\n\n receipt = await sendTransaction({\n transaction: {\n to: token?.address,\n data,\n ...(quote?.gasPrice\n ? { type: 0, gasPrice: quote.gasPrice }\n : {\n maxFeePerGas: txData?.request?.maxFeePerGas,\n maxPriorityFeePerGas:\n txData?.request?.maxPriorityFeePerGas\n })\n }\n });\n hash_ = receipt;\n } catch (error) {\n logger.error(\"error sending txn - send tx failed\", error);\n throw error;\n }\n }\n logger.debug(\"using tx\", hash_);\n if (!glyphApiFetch) return toast.error(\"Glyph API not ready\");\n const res = await glyphApiFetch(`/api/widget/transactions/${hash_}`, {\n method: \"POST\",\n body: JSON.stringify({ chainId })\n });\n if (res.ok) {\n setTxHash(hash_);\n setError(null);\n setView(SendView.WAIT);\n await refreshBalances(true);\n } else setError(\"Failed to send transaction\");\n } catch (error) {\n logger.error(\"error sending txn\", error);\n setError(\"Request rejected or failed\");\n toast.error(\"Request rejected or failed\");\n } finally {\n setIsSignaturePending(false);\n }\n }}\n >\n Confirm\n {isSignaturePending && <Loader2 className=\"gw-size-4 gw-animate-spin\" />}\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === SendView.WAIT && (\n <WalletSendFundPendingView\n onBack={onBack}\n txHash={txHash}\n txBlockExplorerUrl={txBlockExplorerUrl}\n txBlockExplorerName={txBlockExplorerName}\n quote={quote!}\n tokenSymbol={token?.symbol || \"\"}\n TokenIcon={TokenIcon}\n />\n )}\n\n {view === SendView.END &&\n (txStatus === \"SUCCESS\" ? (\n <WalletSendFundSuccessView\n onEnd={() =>\n refreshBalances(true)\n .catch()\n .finally(() => onEnd())\n }\n onShowActivity={() =>\n refreshBalances()\n .catch()\n .finally(() => onShowActivity())\n }\n quote={quote!}\n tokenSymbol={token?.symbol || \"\"}\n />\n ) : (\n <WalletSendFundFailedView\n txHash={txHash}\n txBlockExplorerUrl={txBlockExplorerUrl}\n txBlockExplorerName={txBlockExplorerName}\n onEnd={() =>\n refreshBalances(true)\n .catch()\n .finally(() => onEnd())\n }\n onShowActivity={() =>\n refreshBalances()\n .catch()\n .finally(() => onShowActivity())\n }\n />\n ))}\n </>\n );\n}\n","export const SWAP_ERROR_MESSAGES = {\n INSUFFICIENT_BALANCE: \"Insufficient balance\",\n INSUFFICIENT_GAS: \"Insufficient gas to execute tx\",\n FAILED_TO_MAX_LOW_GAS:\n \"Unable to set max amount. Balance too low for gas fees. Try entering a smaller amount manually.\",\n NO_ROUTES_FOUND:\n \"No swap routes available for this pair or amount. Try a different token or amount, or try again later.\",\n STATUS_CHECK_FAILED: \"Couldn't fetch swap status, check blockchain directly or contact support\",\n PRECHECK_FAILURE: \"Something went wrong during the swap precheck\",\n WALLET_NOT_READY: \"wallet not ready, please refresh and try again\",\n SOLANA_NOT_IMPLEMENTED: \"Solana wallet not implemented\",\n NO_GLYPHAPIFETCH: \"Wallet not authenticated properly, please refresh and try again\",\n NO_FINAL_QUOTE: \"Failed to lock in the quote, please try again\",\n SOMETHING_WENT_WRONG: \"Something went wrong, please try again\"\n};\n\nexport const reformatSwapError = (error: string) => {\n if (typeof error !== \"string\" || !error) return SWAP_ERROR_MESSAGES.SOMETHING_WENT_WRONG;\n\n try {\n // raw error sent by relay or blockchain\n if (\n error === SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS ||\n error.toLowerCase().includes(\"estimategas\") ||\n (error.toLowerCase().includes(\"gas\") && error.toLowerCase().includes(\"exceeds\"))\n ) {\n return SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS;\n }\n\n // Sent by relay\n if (error.toLowerCase().includes(\"no routes found\")) {\n return SWAP_ERROR_MESSAGES.NO_ROUTES_FOUND;\n }\n } catch {\n // ignore error\n }\n\n return error.length < 300 ? error : SWAP_ERROR_MESSAGES.SOMETHING_WENT_WRONG;\n};\n","import { configureViemChain } from \"@relayprotocol/relay-sdk\";\nimport { createPublicClient, extractChain, fallback, http, type PublicClient } from \"viem\";\nimport { relayClient } from \"./relay\";\nimport { mainnet } from \"viem/chains\";\n\n/**\n * Intended primarily for client-side code. Could be used as a fallback on server-side code, but bear in mind we could be rate-limited.\n */\nexport function createDefaultPublicClient(chainId: number): PublicClient {\n const relayChains = relayClient?.chains || [];\n\n const viemChains = relayChains.map((c) => configureViemChain(c as any).viemChain);\n\n // configureViemChain discards a RelayChain's httpRpcUrl for well-known chains and returns viem's bundled\n // chain, whose default RPC (e.g. eth.merkle.io for mainnet) can be unreliable. Read the relay chain's\n // httpRpcUrl directly so the consumer's rpcUrls override (which useGlyphConfigureDynamicChains injects onto\n // httpRpcUrl) — and otherwise the relay-provided RPC — take precedence over the viem default.\n const httpRpcUrl = relayChains.find((c: any) => c.id === chainId)?.httpRpcUrl;\n\n return createPublicClient({\n chain: extractChain({ chains: viemChains, id: chainId }),\n transport: httpRpcUrl\n ? http(httpRpcUrl)\n : chainId === mainnet.id\n ? fallback([http(\"https://ethereum-rpc.publicnode.com\"), http()])\n : http()\n });\n}\n","import { AdaptedWallet, LogLevel } from \"@relayprotocol/relay-sdk\";\nimport { useMemo } from \"react\";\nimport { useGlyph } from \"./useGlyph\";\n\nimport { Address, hexToBigInt } from \"viem\";\nimport { Config, useSwitchChain } from \"wagmi\";\nimport { getChainId, getPublicClient } from \"wagmi/actions\";\nimport { relayClient } from \"../lib/relay\";\nimport { createDefaultPublicClient } from \"../lib/rpcPublic\";\n\nexport const useGlyphRelayEvmAdapter = (config: Config | undefined): AdaptedWallet | null => {\n const { user, signMessage, signTypedData, sendTransaction } = useGlyph();\n\n const { switchChainAsync } = useSwitchChain();\n\n return useMemo(() => {\n if (!user?.evmWallet || !switchChainAsync || !config) {\n return null;\n }\n\n return {\n vmType: \"evm\",\n address: () => Promise.resolve(user?.evmWallet),\n getChainId: async () => {\n const chainId = getChainId(config);\n return chainId;\n },\n handleSignMessageStep: async (stepItem) => {\n const signData = stepItem.data?.sign;\n let signature: string | undefined;\n if (signData) {\n if (signData.signatureKind === \"eip191\") {\n relayClient.log([\"Execute Steps: Signing with eip191\"], LogLevel.Verbose);\n if (signData.message.match(/0x[0-9a-fA-F]{64}/)) {\n // If the message represents a hash, we need to convert it to raw bytes first\n signature = await signMessage({\n message: signData.message\n });\n } else {\n signature = await signMessage({\n message: signData.message\n });\n }\n } else if (signData.signatureKind === \"eip712\") {\n relayClient.log([\"Execute Steps: Signing with eip712\"], LogLevel.Verbose);\n signature = await signTypedData({\n data: {\n domain: signData.domain as any,\n types: signData.types as any,\n primaryType: signData.primaryType,\n message: signData.value\n }\n });\n }\n }\n return signature;\n },\n handleSendTransactionStep: async (chainId, stepItem) => {\n const stepData = stepItem.data;\n const res = await sendTransaction({\n transaction: {\n data: stepData.data,\n to: stepData.to,\n value: hexToBigInt((stepData.value as any) || 0),\n from: stepData.from,\n chainId: chainId\n }\n });\n return res;\n },\n handleConfirmTransactionStep: async (txHash, chainId, onReplaced, onCancelled) => {\n const firstPassAtPublicClient = getPublicClient(config, { chainId: chainId });\n const publicClient = firstPassAtPublicClient ?? createDefaultPublicClient(chainId);\n\n if (!publicClient) {\n console.error(\"Public client couldn't be initialized\");\n throw new Error(\"Couldn't fetch transaction status\");\n }\n\n\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: txHash as Address,\n onReplaced: (replacement) => {\n if (replacement.reason === \"cancelled\") {\n onCancelled();\n throw Error(\"Transaction cancelled\");\n }\n onReplaced(replacement.transaction.hash);\n }\n });\n\n if (receipt.status === \"reverted\") {\n throw new Error(`Execution reverted`);\n }\n\n\n return receipt;\n },\n switchChain: async (chainId) => {\n await switchChainAsync({ chainId });\n }\n };\n }, [switchChainAsync, sendTransaction, signMessage, signTypedData, user?.evmWallet, config]);\n};\n","import { Execute } from \"@relayprotocol/relay-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useChainId, useConfig } from \"wagmi\";\nimport { useGlyphSwap } from \"../context/GlyphSwapContext\";\nimport { SWAP_ERROR_MESSAGES } from \"../lib/customErrors\";\nimport { relayClient, SOLANA_RELAY_ID } from \"../lib/relay\";\nimport { useGlyphApi } from \"./useGlyphApi\";\nimport { useGlyphRelayEvmAdapter } from \"./useGlyphRelayEvmAdapter\";\n\nexport const PRECHECK_FAILURE_CODE = \"PRECHECK_FAILED\";\n\nexport const buildErrorPayloadWithCode = (code: string, message: string) => {\n return { code: code, message: message };\n};\n\nexport const useRelayExecute = () => {\n const chainId = useChainId();\n const { glyphApiFetch } = useGlyphApi();\n const { reportSwapFailed } = useGlyphSwap();\n\n const config = useConfig();\n const evmAdapter = useGlyphRelayEvmAdapter(config);\n\n return useMutation({\n mutationFn: async ({ qt, onExecutionStart }: { qt: Execute; onExecutionStart?: (quote: Execute) => void }) => {\n if (!config) {\n console.error(\"useConfig not ready\");\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.WALLET_NOT_READY);\n }\n if (!evmAdapter) {\n console.error(\"evmAdapter function not ready\");\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.WALLET_NOT_READY);\n }\n\n const quoteChainId = qt.details?.currencyIn?.currency?.chainId;\n if (quoteChainId === SOLANA_RELAY_ID) {\n // TODO: implement solana adapter\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.SOLANA_NOT_IMPLEMENTED);\n }\n\n if (!glyphApiFetch) {\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.NO_GLYPHAPIFETCH);\n }\n let parsedRes = null;\n\n // Handle error related to qupte generations differently than execution error. We want to show quote generation error right on the START screen for better UX\n try {\n const res = await glyphApiFetch(`/api/widget/swap/quote`, {\n method: \"POST\",\n body: JSON.stringify({ ...qt.request?.data })\n });\n if (!res.ok) throw { code: PRECHECK_FAILURE_CODE, message: SWAP_ERROR_MESSAGES.NO_FINAL_QUOTE };\n\n if (quoteChainId && quoteChainId !== chainId) {\n await evmAdapter.switchChain(quoteChainId);\n }\n parsedRes = await res.json();\n } catch (e) {\n console.error(e);\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.NO_FINAL_QUOTE);\n }\n\n const { id: txnId, quote: finalQuote } = parsedRes;\n\n onExecutionStart?.(finalQuote);\n\n let result: any;\n try {\n const EXECUTE_TIMEOUT_MS = 180_000;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const resetTimeout = (reject: (reason?: any) => void) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n reject(new Error(\"Swap execution timed out. Check blockchain for transaction status.\"));\n }, EXECUTE_TIMEOUT_MS);\n };\n\n result = await new Promise((resolve, reject) => {\n resetTimeout(reject);\n relayClient.actions\n .execute({\n quote: finalQuote,\n wallet: evmAdapter,\n onProgress: () => {\n resetTimeout(reject);\n }\n })\n .then(resolve)\n .catch(reject)\n .finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n });\n });\n } catch (error) {\n await reportSwapFailed(txnId);\n throw error;\n }\n\n // Some relay-sdk flows resolve with a failure object instead of throwing.\n // Normalize that into an exception so the UI catch path runs.\n const resultStatus = (result as any)?.status ?? (result as any)?.state;\n const resultError = (result as any)?.error ?? (result as any)?.reason ?? (result as any)?.message;\n const failedStatuses = new Set([\"error\", \"failed\", \"failure\", \"reverted\"]);\n if (failedStatuses.has(String(resultStatus).toLowerCase()) || (result as any)?.ok === false) {\n await reportSwapFailed(txnId);\n throw new Error(typeof resultError === \"string\" ? resultError : \"Relay execution failed\");\n }\n\n const requestId = (finalQuote as any)?.steps?.[0]?.requestId as string | undefined;\n\n return { requestId, txnId, result };\n }\n });\n};\n","import { MAINNET_RELAY_API, paths } from \"@relayprotocol/relay-sdk\";\nimport { Dispatch, SetStateAction, useEffect, useRef, useState } from \"react\";\nimport { SwapView } from \"../lib/constants\";\nimport { useBalances } from \"./useBalances\";\n\ntype TxDetails = {\n hash: string;\n blockExplorerName?: string;\n blockExplorerUrl?: string;\n};\n\ntype UseRelayIntentStatusParams = {\n intentRequestId: string | null;\n setTxStatus: Dispatch<SetStateAction<\"SUCCESS\" | \"FAILED\" | \"PENDING\">>;\n setView: Dispatch<SetStateAction<SwapView>>;\n onError?: () => Promise<void>;\n};\n\nexport const useRelayIntentStatus = ({\n intentRequestId,\n setTxStatus,\n setView,\n onError\n}: UseRelayIntentStatusParams) => {\n const [txDetails, setTxDetails] = useState<TxDetails>();\n const [error, setError] = useState<string>(\"\");\n\n const { refreshBalances, isBalancesLoading } = useBalances();\n\n const latest = useRef({ onError, refreshBalances, isBalancesLoading });\n latest.current = { onError, refreshBalances, isBalancesLoading };\n\n useEffect(() => {\n if (!intentRequestId) return;\n\n let cancelled = false;\n const controller = new AbortController();\n let failures = 0;\n setError(\"\");\n setTxDetails({\n hash: intentRequestId,\n blockExplorerName: \"Relay Explorer\",\n blockExplorerUrl: `https://relay.link/transaction/${intentRequestId}`\n });\n const wait = (ms: number) =>\n new Promise<void>((resolve) => {\n const finish = () => {\n clearTimeout(timer);\n controller.signal.removeEventListener(\"abort\", finish);\n resolve();\n };\n const timer = setTimeout(finish, ms);\n controller.signal.addEventListener(\"abort\", finish, { once: true });\n if (controller.signal.aborted) finish();\n });\n\n const pollStatus = async () => {\n while (!cancelled) {\n try {\n const readController = new AbortController();\n const abortRead = () => readController.abort();\n controller.signal.addEventListener(\"abort\", abortRead, { once: true });\n const timeout = setTimeout(abortRead, 15000);\n let data: paths[\"/intents/status/v2\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\n try {\n const resp = await fetch(\n `${MAINNET_RELAY_API}/intents/status/v2?requestId=${encodeURIComponent(intentRequestId)}`,\n { signal: readController.signal }\n );\n if (!resp.ok) throw new Error(\"Failed to get execution status\");\n data = await resp.json();\n if (readController.signal.aborted)\n throw new DOMException(\"Status read cancelled\", \"AbortError\");\n } finally {\n clearTimeout(timeout);\n controller.signal.removeEventListener(\"abort\", abortRead);\n }\n if (cancelled) return;\n const status = data?.status;\n\n if (!status) {\n throw new Error(\"Missing execution status\");\n }\n\n failures = 0;\n setError(\"\");\n try {\n const relayTxDetails: TxDetails = {\n hash: intentRequestId,\n blockExplorerName: \"Relay Explorer\",\n blockExplorerUrl: `https://relay.link/transaction/${intentRequestId}`\n };\n // Using relay tx hash as the primary tx details\n setTxDetails(relayTxDetails);\n } catch (error) {\n console.error(\"Error getting tx hash:\", error);\n }\n\n if (status === \"success\") {\n if (!cancelled) {\n if (!latest.current.isBalancesLoading) {\n latest.current.refreshBalances?.();\n }\n setTxStatus(\"SUCCESS\");\n setView(SwapView.END);\n }\n return;\n }\n\n if (status === \"refund\" || status === \"failure\") {\n if (!cancelled) {\n if (!latest.current.isBalancesLoading) {\n latest.current.refreshBalances?.();\n }\n if (latest.current.onError) {\n try {\n await latest.current.onError();\n } catch {\n /* Settlement is authoritative. */\n }\n }\n if (cancelled) return;\n setTxStatus(\"FAILED\");\n setView(SwapView.END);\n if (status === \"refund\") {\n setError(\"Will be refunded back to you!\");\n } else {\n if (data.details) {\n setError(data?.details);\n }\n }\n }\n return;\n }\n } catch {\n if (cancelled) return;\n failures += 1;\n // A status-read outage does not mean a submitted transaction failed.\n setError(\"Swap status temporarily unavailable. Check Relay Explorer before taking another action.\");\n if (failures >= 6) return;\n }\n\n await wait(Math.min(5000 * 2 ** failures, 30000));\n }\n };\n\n pollStatus();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [intentRequestId, setTxStatus, setView]);\n\n return {\n error,\n txDetails\n };\n};\n","import { Execute } from \"@relayprotocol/relay-sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { RelayAPIToken, useGlyphSwap } from \"../context/GlyphSwapContext\";\nimport { SOLANA_RELAY_ID } from \"../lib/relay\";\nimport { assertHasValue, chainIdToRelayChain, isNativeAndWrappedPair } from \"../lib/utils\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useGlyphApi } from \"./useGlyphApi\";\n\nconst QUOTE_REFETCH_INTERVAL = 30_000;\n\nexport const GAS_BUFFER = 115n; // 15% gas buffer for actual execution - this is unrelated to the \"max\" button feature\n\nexport const checkIfGasIsEnough = (\n gasCurrencyAddress: string,\n sourceToken: RelayAPIToken | undefined,\n quoteGasAmountInWei: number | string | undefined | null,\n sourceGasBalanceInWei: number | string | undefined | null,\n sellAmount: string | undefined | null // in wei\n) => {\n return (\n sourceGasBalanceInWei !== undefined &&\n sourceGasBalanceInWei !== null &&\n sourceToken &&\n (gasCurrencyAddress !== sourceToken?.address\n ? BigInt(sourceGasBalanceInWei) * 100n >= BigInt(quoteGasAmountInWei || 0) * GAS_BUFFER // If different token than gas token -> check if gas is at least 15% more than required\n : (BigInt(sourceGasBalanceInWei) - BigInt(sellAmount || \"0\")) * 100n >=\n BigInt(quoteGasAmountInWei || 0) * GAS_BUFFER)\n ); // If same token is being sold, reserve some for gas and require 15% buffer\n};\n\nexport const useRelayQuote = (enabled?: boolean) => {\n const swapState = useGlyphSwap();\n const { glyphApiFetch } = useGlyphApi();\n\n const { fromCurrency, toCurrency, tradeType, amount, topupGas, topupGasAmount } = swapState;\n const { user } = useGlyph();\n\n const fromChain = fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined;\n const isNativeFromCurrency = fromCurrency?.address === fromChain?.currency?.address;\n\n const evmWallet = user?.evmWallet;\n const solanaWallet = user?.solanaWallet;\n\n let amountIsValid = true;\n try {\n amountIsValid = BigInt(amount ?? \"0\") > 0n;\n } catch {\n amountIsValid = false;\n }\n\n const isQuotable =\n fromCurrency?.chainId === SOLANA_RELAY_ID\n ? !!solanaWallet\n : !!evmWallet &&\n !!fromCurrency &&\n !!toCurrency &&\n amountIsValid &&\n (enabled !== undefined ? enabled : true); // Only use this if enabled is passed as props\n\n const nativeAndWrappedPair = isNativeAndWrappedPair(fromCurrency, toCurrency);\n const operation = nativeAndWrappedPair ? (isNativeFromCurrency ? \"wrap\" : \"unwrap\") : \"swap\";\n\n const quoteQuery = useQuery({\n queryKey: [\"relayQuote\", evmWallet, solanaWallet, swapState],\n queryFn: async () => {\n assertHasValue(evmWallet);\n assertHasValue(solanaWallet);\n assertHasValue(fromCurrency);\n assertHasValue(toCurrency);\n assertHasValue(amount);\n\n if (!glyphApiFetch) throw new Error(\"Wallet not authenticated properly, please refresh and try again\");\n\n const fromWallet = fromCurrency.chainId === SOLANA_RELAY_ID ? solanaWallet : evmWallet;\n const toWallet = toCurrency.chainId === SOLANA_RELAY_ID ? solanaWallet : evmWallet;\n\n // Goes through the host app's own server rather than calling Relay's /quote directly --\n // this call can never safely carry a Relay API key since it runs in this\n // browser-bundled package, and Relay now rejects unauthenticated /quote requests. The\n // host app computes appFees itself server-side (same isNativeAndWrappedPair waiver),\n // so it isn't sent here; nativeAndWrappedPair below is only for this hook's own\n // appFeesWaived/operation return values, not for what's actually charged.\n const res = await glyphApiFetch(\"/api/widget/swap/quote/preview\", {\n method: \"POST\",\n body: JSON.stringify({\n originChainId: fromCurrency.chainId!,\n originCurrency: fromCurrency.address!,\n destinationChainId: toCurrency.chainId!,\n destinationCurrency: toCurrency.address!,\n tradeType,\n amount, // amount already in wei\n user: fromWallet,\n recipient: toWallet,\n topupGas,\n topupGasAmount\n })\n });\n if (!res.ok) {\n const body = await res.json().catch(() => null);\n throw new Error(body?.error || \"Failed to fetch quote\");\n }\n\n return res.json() as Promise<Execute>;\n },\n enabled: isQuotable,\n refetchInterval: QUOTE_REFETCH_INTERVAL,\n gcTime: 0,\n retry: 1\n });\n\n return { ...quoteQuery, appFeesWaived: nativeAndWrappedPair, operation };\n};\n","import { useGlyphApi } from \"./useGlyphApi\";\nimport { GlyphWidgetTokenBalancesItem } from \"../types\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { checksumAddress, Hex } from \"viem\";\n\nexport const useTokenBalance = (\n tokenAddress: string | undefined,\n chainId: number | undefined\n): {\n balance: string | undefined;\n isLoading: boolean;\n error: string | undefined;\n} => {\n const { balances } = useGlyph();\n const { glyphApiFetch } = useGlyphApi();\n\n // first try to find the token in the balances.tokens array\n const foundToken = tokenAddress && chainId\n ? balances?.tokens?.find?.(\n (token) =>\n token.chainId === chainId &&\n checksumAddress(token.address as Hex) === checksumAddress(tokenAddress as Hex)\n )\n : undefined;\n\n // ...otherwise, fetch from API\n const { data: fetchedValueInWei, isLoading, error } = useQuery({\n queryKey: [\"tokenBalance\", tokenAddress, chainId],\n queryFn: async () => {\n if (!tokenAddress || !chainId || !glyphApiFetch) {\n return undefined;\n }\n\n const response = await glyphApiFetch(`/api/widget/balances/${tokenAddress}?chainId=${chainId}`);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n const data = await response.json() as GlyphWidgetTokenBalancesItem;\n return data.valueInWei;\n },\n // there are rare instances where chainId is `0x0000000000000000000000000000000000000000`, so we protect ourselves against this\n enabled: !foundToken && !!tokenAddress && Number.isInteger(chainId) && Number(chainId) !== 0\n });\n\n return {\n balance: foundToken?.valueInWei ?? fetchedValueInWei ?? \"0\", // if no balance found, return 0 so query result is not undefined\n isLoading,\n error: error ? (error as Error).message : undefined\n };\n};\n","import { QueryClient } from \"@tanstack/react-query\";\nimport { PublicClient } from \"viem\";\nimport { fetchRelayRequests } from \"./relay\";\nimport { createDefaultPublicClient } from \"./rpcPublic\";\nimport { chainIdToRelayChain } from \"./utils\";\n\n// Taken from: https://github.com/relayprotocol/relay-kit/blob/main/packages/ui/src/constants/maxGasBuffer.ts#L3\nconst MINIMUM_GAS_PRICE_WEI = 100000000n; // 0.1 Gwei\nconst EVM_DEFAULT_FEE_WEI = 5000000000000000n; // Default fee in Wei (0.005 ETH) for EVM\nconst EVM_GAS_BUFFER_MULTIPLIER = 2n; // 2x buffer\nconst SOLANA_FEE_BUFFER_MULTIPLIER = 5n; // 5x buffer for Solana\nconst SOLANA_DEFAULT_FEE_LAMPORTS = 1000000n; // Default fee in lamports (0.001 SOL) for Solana\nconst ECLIPSE_FEE_BUFFER_MULTIPLIER = 200n; // 200x buffer for Eclipse\nconst ECLIPSE_DEFAULT_FEE_WEI = 50000000000000n; // Default fee in Wei (0.00005 ETH) for Eclipse\n\n// Create a QueryClient instance for fee buffer caching\n// Cache time: 5 minutes (300000ms) as per original implementation\nlet feeBufferQueryClient: QueryClient | null = null;\n\nconst getFeeBufferQueryClient = (): QueryClient => {\n if (!feeBufferQueryClient) {\n feeBufferQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 30 * 1000, // 30 seconds\n retry: 1\n }\n }\n });\n }\n return feeBufferQueryClient;\n};\n\n/**\n * Calculates the gas buffer needed for a native EVM token transfer.\n * This buffer is estimated based on gas price and a standard limit,\n * then multiplied by a safety factor.\n *\n * @param publicClient - A VIEM PublicClient connected to the EVM chain.\n * @param balance - The total native balance of the user (used for early exit).\n * @param gasLimit - Optional: The gas limit to use for estimation (defaults to 400000n).\n * @returns The calculated gas buffer amount as a bigint, or 0n if estimation fails or balance is zero.\n */\nexport const calculateEvmNativeGasBuffer = async (\n publicClient: PublicClient,\n balance: bigint,\n gasLimit: bigint = 400000n\n): Promise<bigint> => {\n if (!balance || balance <= 0n) {\n return 0n;\n }\n\n // Fixed fallback buffer: 0.005 ETH in Wei\n const defaultBuffer = EVM_DEFAULT_FEE_WEI;\n\n try {\n let feeData;\n try {\n feeData = await publicClient.estimateFeesPerGas();\n } catch (eip1559Error) {\n // Fallback to legacy gas price estimation\n try {\n const gasPrice = await publicClient.getGasPrice();\n feeData = {\n maxFeePerGas: gasPrice,\n gasPrice: gasPrice\n };\n } catch (legacyError) {\n // If both estimations fail, return fallback buffer\n console.error(\"Failed to estimate gas price:\", legacyError);\n return defaultBuffer;\n }\n }\n\n // Prefer EIP-1559 maxFeePerGas if available, otherwise use gasPrice\n let gasPriceToUse = feeData.maxFeePerGas ?? feeData.gasPrice;\n\n if (!gasPriceToUse || gasPriceToUse <= 0n) {\n console.error(\"Invalid gas price data received:\", feeData);\n return defaultBuffer;\n }\n\n if (gasPriceToUse < MINIMUM_GAS_PRICE_WEI) {\n gasPriceToUse = MINIMUM_GAS_PRICE_WEI;\n }\n\n const estimatedGasCost = gasPriceToUse * gasLimit;\n const buffer = estimatedGasCost * EVM_GAS_BUFFER_MULTIPLIER;\n\n // return the calculated buffer\n return buffer;\n } catch (error) {\n console.error(\"Error calculating EVM native gas buffer:\", error);\n return defaultBuffer;\n }\n};\n\n/**\n * Calculates the fee buffer needed for a native SVM (e.g., Solana) or Eclipse transaction.\n * Uses specific multipliers and default fees for each type.\n * Falls back to a default fee if API data is unavailable or invalid.\n *\n * @param chainId - The chain ID of the SVM or Eclipse network.\n * @returns The calculated fee buffer amount (in lamports for Solana, Wei for Eclipse) as a bigint, or a fallback buffer if estimation fails.\n */\nexport const calculateSvmNativeFeeBuffer = async (chainId: number): Promise<bigint> => {\n const isEclipseChain = chainId === 9286185;\n const multiplier = isEclipseChain ? ECLIPSE_FEE_BUFFER_MULTIPLIER : SOLANA_FEE_BUFFER_MULTIPLIER;\n\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER;\n\n try {\n const queryOptions = {\n limit: \"20\",\n originChainId: chainId.toString()\n } as const;\n\n const resp = await fetchRelayRequests(queryOptions);\n\n if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) {\n console.warn(\"No valid fees found in response. Using fallback buffer.\");\n return fallbackBuffer;\n }\n\n // Extract fees data from the response\n const fees: bigint[] = resp.requests\n .map((r: any) => {\n const feeStr = r?.data?.inTxs?.[0]?.fee;\n try {\n return BigInt(feeStr);\n } catch {\n return null;\n }\n })\n .filter((f: bigint | null): f is bigint => f !== null);\n\n if (fees.length === 0) {\n return fallbackBuffer;\n }\n\n // Find the maximum fee among the valid fees\n const maxFee = fees.reduce((max, current) => (current > max ? current : max), 0n);\n\n // Apply buffer multiplier to the maximum fee\n const buffer = maxFee * multiplier;\n\n return buffer;\n } catch (error) {\n console.error(\"Error calculating SVM native fee buffer:\", error);\n return fallbackBuffer;\n }\n};\n\n/**\n * Gets the fee buffer amount for a given chain and VM type.\n * Uses QueryClient for caching and deduplication of requests.\n *\n * @param vmType - The virtual machine type ('evm' or 'svm').\n * @param chainId - The chain ID.\n * @param balance - The current balance (required for EVM calculation).\n * @param publicClient - VIEM PublicClient (required for EVM calculation).\n * @param queryClient - Optional QueryClient instance. If not provided, a default one will be created.\n * @returns A promise that resolves to the fee buffer amount as a bigint.\n */\nexport const getFeeBufferAmount = async (chainId: number, balance: bigint): Promise<bigint> => {\n const client = getFeeBufferQueryClient();\n const chain = chainIdToRelayChain(chainId);\n const vmType = chain?.vmType;\n const queryKey = [\"feeBuffer\", vmType, chainId];\n const publicClient = createDefaultPublicClient(chainId);\n\n // Handle unsupported VM types\n if (vmType !== \"evm\" && vmType !== \"svm\") {\n console.warn(`Unsupported VM type encountered: ${vmType}. Returning default EVM buffer.`);\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n }\n\n return client.fetchQuery({\n queryKey,\n queryFn: async (): Promise<bigint> => {\n if (vmType === \"evm\") {\n if (!publicClient) {\n console.error(\"PublicClient is required for EVM fee buffer calculation.\");\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n }\n return calculateEvmNativeGasBuffer(publicClient, balance);\n } else if (vmType === \"svm\") {\n const isEclipseChain = chainId === 9286185;\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER;\n try {\n return await calculateSvmNativeFeeBuffer(chainId!);\n } catch (error) {\n console.error(`Failed to calculate SVM fee buffer for chain ${chainId}:`, error);\n return fallbackBuffer;\n }\n }\n // This should never be reached due to the check above, but TypeScript needs it\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n },\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 30 * 1000 // 30 seconds\n });\n};\n","import { decodeGlyphBalances } from \"../lib/balancesImageTransport\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { fetchScopedGlyphData, shouldRetryGlyphData } from \"../context/glyphDataQuery\";\nimport { TOKEN_REFRESH_INTERVAL_MS } from \"../lib/constants\";\nimport { GlyphWidgetBalances } from \"../types\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useGlyphReadScope } from \"./useGlyphReadScope\";\n\nexport function useBalancesForChain(chainId?: number | \"all\") {\n const { user } = useGlyph();\n const { scope, isCurrent } = useGlyphReadScope(user?.evmWallet);\n const client = useQueryClient();\n useEffect(\n () => () => {\n void client.cancelQueries({ queryKey: [\"glyphWidgetChainBalances\", scope.key] });\n },\n [client, scope]\n );\n const query = useQuery({\n queryKey: [\"glyphWidgetChainBalances\", scope.key, chainId],\n enabled: isCurrent() && !!chainId && !!user?.evmWallet,\n gcTime: 0,\n placeholderData: () => undefined,\n refetchInterval: TOKEN_REFRESH_INTERVAL_MS,\n queryFn: ({ signal }) =>\n fetchScopedGlyphData<GlyphWidgetBalances>(\n scope.apiFetch,\n `/api/widget/balances?chainId=${chainId}&nftImageEncoding=references-v1`,\n signal,\n isCurrent,\n scope.key,\n decodeGlyphBalances\n ),\n retry: (count, error) => isCurrent() && shouldRetryGlyphData(error, count, 3),\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000)\n });\n return {\n ...query,\n data: isCurrent() && !query.isError && query.data?.scope === scope.key ? query.data.value : null\n };\n}\n","import { MAINNET_RELAY_API, type paths } from \"@relayprotocol/relay-sdk\";\nimport { useQuery, type DefaultError, type QueryKey } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nexport type GetCurrenciesBody = NonNullable<\n paths[\"/currencies/v2\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"] & { referrer?: string };\nexport type GetCurrenciesResponse = paths[\"/currencies/v2\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\ntype QueryType = typeof useQuery<GetCurrenciesResponse, DefaultError, GetCurrenciesResponse, QueryKey>;\ntype QueryOptions = Parameters<QueryType>[\"0\"];\n\nexport const queryTokenList = async function (\n options?: GetCurrenciesBody,\n headers?: Record<string, string>\n): Promise<GetCurrenciesResponse> {\n const url = new URL(`${MAINNET_RELAY_API}/currencies/v2`);\n const res = await fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: JSON.stringify(options)\n });\n\n if (!res.ok) {\n throw new Error(`Failed to fetch token list: ${res.status} ${res.statusText}`);\n }\n\n return (await res.json()) as GetCurrenciesResponse;\n};\n\nexport default function (options?: GetCurrenciesBody, queryOptions?: Partial<QueryOptions>) {\n const response = (useQuery as QueryType)({\n queryKey: [\"useTokenList\", options],\n queryFn: () => queryTokenList(options),\n enabled: options ? true : false,\n retry: false,\n ...queryOptions\n });\n\n return useMemo(() => {\n return {\n ...response,\n data: response.error ? undefined : response.data\n } as Omit<ReturnType<QueryType>, \"data\"> & {\n data?: GetCurrenciesResponse;\n };\n }, [response.data, response.error, response.isLoading]);\n}\n","import { useMemo } from \"react\";\nimport { RelayAPIToken } from \"../context/GlyphSwapContext\";\nimport { GlyphWidgetTokenBalancesItem } from \"../types\";\nimport { useBalancesForChain } from \"./useBalancesForChain\";\nimport useRelayTokenList from \"./useRelayTokenList\";\n\nexport const useRelayYourTokensList = (currentChainId: number | \"all\", chainIds: number[]) => {\n const { data: balances, isLoading: isBalancesLoading, error: balancesError } = useBalancesForChain(\"all\"); // fetch balance for all supported networks at once\n\n // Balances might contain native token in the array even if the balance is 0\n const nonZeroBalances = useMemo(\n () =>\n balances?.tokens?.filter(\n (t) =>\n t.valueInWei &&\n BigInt(t.valueInWei) > 0n &&\n (currentChainId === \"all\" || t.chainId === currentChainId)\n ),\n [balances?.tokens, currentChainId]\n );\n\n // Token balances that are supported by Relay\n const {\n data: yourTokenList,\n isLoading: isYourTokenListLoading,\n error: yourTokenListError\n } = useRelayTokenList(\n balances?.tokens?.length\n ? {\n depositAddressOnly: false, // for swap\n chainIds: chainIds, // fetch for all the supported chains at once\n defaultList: false,\n tokens: balances?.tokens?.map((token) => `${token.chainId}:${token.address}`) // fetch all the tokens having balance across all the supported chains at once\n }\n : undefined\n );\n\n return useMemo(() => {\n const relaySupportedTokensBalances = nonZeroBalances?.reduce(\n (acc, token) => {\n const relayToken = yourTokenList?.find(\n (t) => t.chainId === token.chainId && t.address?.toLowerCase() === token.address?.toLowerCase()\n );\n if (!relayToken) {\n return acc;\n }\n\n acc[`${token.chainId!}:${token.address!.toLowerCase()}`] = {\n ...token,\n relayToken: relayToken\n };\n return acc;\n },\n {} as Record<string, GlyphWidgetTokenBalancesItem & { relayToken: RelayAPIToken }>\n );\n return {\n isLoading: isBalancesLoading || isYourTokenListLoading,\n isError: !!balancesError || !!yourTokenListError,\n error: balancesError || yourTokenListError,\n nonZeroBalances,\n relaySupportedTokens: yourTokenList || [],\n relaySupportedTokensBalances,\n relaySupportedTokensBalancesLength: relaySupportedTokensBalances\n ? Object.keys(relaySupportedTokensBalances).length\n : 0\n };\n }, [nonZeroBalances, yourTokenList, isBalancesLoading, isYourTokenListLoading, balancesError, yourTokenListError]);\n};\n","import { useMemo } from \"react\";\nimport { RelayAPIToken } from \"../../../context/GlyphSwapContext\";\nimport { useRelayYourTokensList } from \"../../../hooks/useRelayYourTokensList\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { Button } from \"../../ui/button\";\n\nexport default function AddGasToSourceChainButton({\n sourceChainNativeSymbol,\n sourceChainName,\n addGasToSourceChain\n}: {\n sourceChainNativeSymbol?: string;\n sourceChainName?: string;\n addGasToSourceChain: (toCurrency: RelayAPIToken | undefined) => void;\n}) {\n const chains = relayClient.chains || [];\n const chainIds = useMemo(() => chains.map((chain) => chain.id), []);\n\n const { relaySupportedTokensBalances } = useRelayYourTokensList(\"all\", chainIds);\n\n return (\n <Button\n onClick={() => {\n addGasToSourceChain(Object.values(relaySupportedTokensBalances || {})?.[0]?.relayToken ?? undefined);\n }}\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-foreground !gw-text-background !gw-h-5\"\n >\n <span className=\"gw-typography-caption\">\n {sourceChainNativeSymbol && sourceChainName\n ? `Add ${sourceChainNativeSymbol}`\n : \"Add gas on source chain\"}\n </span>\n </Button>\n );\n}\n","import { RelayChain } from \"@relayprotocol/relay-sdk\";\nimport { AlertTriangle, ChevronDown, FuelIcon, Loader2 } from \"lucide-react\";\nimport { memo, useEffect, useMemo, useRef, useState } from \"react\";\nimport { debounce } from \"throttle-debounce\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { isAddress, zeroAddress } from \"viem\";\nimport { RelayAPIToken } from \"../../../context/GlyphSwapContext\";\nimport useRelayTokenList from \"../../../hooks/useRelayTokenList\";\nimport { useRelayYourTokensList } from \"../../../hooks/useRelayYourTokensList\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { cn, formatTokenCount } from \"../../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from \"../../ui/dialog\";\nimport { Input } from \"../../ui/input\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport TooltipElement from \"../../ui/tooltip-element\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\n// The swap token selector component behaves a bit differently from the send token selector component\n// because this component is being used twice on the same screen - (to and from currency) and hence we cannot switch chain from each of them, so they have their own state of currentChainId and once user goes on to perform the transaction only then we change the chainId in wagmi, unlike the send token selector where we switch the chainId in wagmi as soon as the user selects a chain in the selector\nconst SwapChainAndTokenSelector = ({\n onTokenSelect,\n selectedToken,\n defaultChainId\n}: {\n onTokenSelect: (token: RelayAPIToken) => void;\n selectedToken: RelayAPIToken | undefined;\n defaultChainId?: number | undefined;\n}) => {\n const chains = relayClient.chains || [];\n const chainIds = useMemo(() => chains.map((chain) => chain.id), []);\n\n const [open, setOpen] = useState<boolean>(false);\n\n // Chain ID of the current network selected (network selector)\n const [currentChainId, setCurrentChainId] = useState<number | undefined>(defaultChainId);\n\n const selectedTokenChain = useMemo(() => {\n if (!selectedToken?.chainId) return null;\n return chains.find((chain) => chain.id === selectedToken.chainId);\n }, [selectedToken?.chainId]);\n\n const {\n relaySupportedTokensBalances,\n relaySupportedTokensBalancesLength,\n isLoading: isYourTokensLoading\n } = useRelayYourTokensList(currentChainId ?? \"all\", chainIds);\n\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState<string>(\"\");\n const debouncedFunc = useMemo(\n () =>\n debounce(500, (value: string) => {\n setDebouncedSearchTerm(value);\n }),\n []\n );\n const isTermAnAddress = isAddress(debouncedSearchTerm);\n\n const [currentChain, featuredTokens] = useMemo(() => {\n if (!currentChainId) return [null, []];\n const chain = chains.find((chain) => chain.id === currentChainId);\n const featuredTokens = chain?.featuredTokens || [];\n return [chain, featuredTokens];\n }, [currentChainId]);\n\n const collisionRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n collisionRef.current = document.querySelector(\".gw-wallet-container\");\n }, []);\n\n const handleTokenSelect = (token: RelayAPIToken) => {\n onTokenSelect(token);\n setOpen(false);\n };\n\n const {\n data: tokenList,\n isLoading,\n isError\n } = useRelayTokenList(\n {\n limit: 12, // Same as Relay demo\n depositAddressOnly: false, // for swap\n chainIds: currentChainId ? [currentChainId] : chainIds,\n defaultList: debouncedSearchTerm === \"\",\n term: !isTermAnAddress ? debouncedSearchTerm : undefined,\n address: isTermAnAddress ? debouncedSearchTerm : undefined\n },\n {}\n );\n\n return (\n <>\n <Dialog open={open} onOpenChange={setOpen} modal>\n <DialogTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n // TODO: Logic to open token selector\n }}\n className={cn(\n \"gw-rounded-full gw-p-1 gw-pr-2 gw-h-12 gw-w-auto gw-min-w-0 !gw-ring-0 gw-flex gw-items-center gw-space-x-1\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n {selectedTokenChain && selectedToken ? (\n <div className=\"gw-flex gw-items-center gw-gap-1.5\">\n <TokenAndChainIcon\n token={{\n name: selectedToken.name,\n logoUrl: selectedToken.metadata?.logoURI\n }}\n chain={{\n id: selectedTokenChain.id,\n name: selectedTokenChain.name,\n logoUrl: selectedTokenChain.iconUrl\n }}\n />\n\n <span className=\"gw-flex gw-flex-col gw-items-start gw-justify-between gw-gap-1\">\n <span className=\"gw-typography-body1 !gw-leading-none !gw-font-bold gw-inline-block gw-pr-1\">\n {selectedToken.symbol}\n </span>\n <span className=\"gw-typography-caption !gw-leading-none gw-text-brand-gray-500\">\n {CHAIN_NAMES[selectedTokenChain.id] || selectedTokenChain.displayName}\n </span>\n </span>\n </div>\n ) : (\n <div className=\"gw-h-8 gw-rounded-full gw-typography-caption gw-flex gw-items-center gw-justify-center gw-text-brand-gray-500 gw-pl-3\">\n Select Token\n </div>\n )}\n <ChevronDown className=\"gw-size-4 gw-flex-shrink-0 gw-text-gray-500\" />\n </button>\n </DialogTrigger>\n <DialogContent container={collisionRef.current} className=\"gw-max-h-[calc(100%-1rem)]\">\n <DialogHeader>\n <DialogTitle>Select Token</DialogTitle>\n <DialogDescription className=\"gw-sr-only\">Select a token to swap</DialogDescription>\n </DialogHeader>\n\n <div className=\"gw-flex gw-flex-col gw-gap-6\">\n <div className=\"gw-flex gw-relative\">\n <Input\n type=\"text\"\n placeholder=\"Search token name or paste address\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n debouncedFunc(e.target.value);\n }}\n parentClassName=\"gw-pb-0\"\n />\n\n {isYourTokensLoading ? (\n <div className=\"gw-flex gw-z-0 gw-w-full gw-absolute -gw-bottom-1.5 gw-translate-y-full gw-origin-top gw-justify-center gw-items-center gw-gap-1 gw-text-[10px] gw-text-brand-gray-600 !gw-leading-none\">\n <Loader2 className=\"gw-size-2.5 gw-animate-spin\" />\n <span>Retrieving tokens available in your wallet</span>\n </div>\n ) : null}\n </div>\n\n {/* Networks */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Select Network</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n <Button\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === undefined && \"gw-bg-muted/80 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setCurrentChainId(undefined)}\n >\n <span className=\"gw-typography-caption\">All</span>\n </Button>\n {chains.map((chain) => (\n <Button\n key={`${chain.id}_networks`}\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === chain.id &&\n \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setCurrentChainId(chain.id)}\n >\n {chain.iconUrl ? (\n <img\n src={chain.iconUrl || \"\"}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-8\"\n />\n ) : (\n <span className=\"gw-typography-caption\">\n {CHAIN_NAMES[chain.id] || chain.name}\n </span>\n )}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Popular Tokens */}\n {currentChain && featuredTokens && !debouncedSearchTerm && (\n <div className=\"gw-flex gw-flex-col gw-gap-1.5\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Popular Tokens</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n {featuredTokens?.map((token) => {\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === currentChainId;\n return (\n <Button\n key={`${token.address}_popular_tokens`}\n variant={\"liquidGlass\"}\n size=\"sm\"\n className={cn(\n \"gw-px-1 gw-gap-1\",\n isTokenSelected && \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n // Since chainId is not available in featuredTokens list, we are using currentChainId of the network selector\n onClick={() => handleTokenSelect({ ...token, chainId: currentChainId })}\n >\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.metadata?.logoURI\n }}\n chain={{\n id: currentChain.id,\n name: currentChain.name,\n logoUrl: currentChain.iconUrl\n }}\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <span className=\"gw-typography-body2 !gw-font-medium gw-inline-block gw-pr-1\">\n {token.symbol}\n </span>\n </Button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Your Tokens List */}\n {!debouncedSearchTerm && !!relaySupportedTokensBalancesLength && (\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Your Tokens</div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {Object.values(relaySupportedTokensBalances || {})?.map((token, index) => {\n const tokenChain =\n currentChain ?? chains.find((chain) => chain.id === token.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain.id;\n return (\n <TokenTile\n key={`${tokenChain.id}:${token.address}_token_list`}\n currentChainId={currentChainId}\n handleTokenSelect={handleTokenSelect}\n isTokenSelected={isTokenSelected}\n token={token?.relayToken}\n tokenChain={tokenChain}\n showDivider={index < relaySupportedTokensBalancesLength - 1}\n tokenBalance={token}\n />\n );\n })}\n </div>\n </div>\n )}\n\n {/* Token List */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {debouncedSearchTerm ? \"Search Results\" : \"Global 24H Volume\"}\n </div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {isLoading ? (\n new Array(12).fill(0).map((_, index) => (\n <div key={index} className=\"gw-w-full\">\n <Skeleton className=\"gw-flex gw-items-center gw-justify-center gw-h-14\" />\n {index < 11 && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n ))\n ) : isError ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-destructive gw-typography-body2 gw-pr-4\">\n <AlertTriangle className=\"gw-size-5 gw-mr-2\" /> Couldn't fetch the token list\n </div>\n ) : tokenList?.length === 0 ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n No tokens found\n </div>\n ) : (\n tokenList?.map((token, index) => {\n const tokenChain =\n currentChain ?? chains.find((chain) => chain.id === token.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain.id;\n return (\n <TokenTile\n key={`${tokenChain.id}:${token.address}_token_list`}\n currentChainId={currentChainId}\n handleTokenSelect={handleTokenSelect}\n isTokenSelected={isTokenSelected}\n token={token}\n tokenChain={tokenChain}\n showDivider={index < tokenList.length - 1}\n tokenBalance={\n relaySupportedTokensBalances?.[\n `${token.chainId}:${token.address?.toLowerCase()}`\n ]\n }\n />\n );\n })\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nconst TokenTile = ({\n handleTokenSelect,\n token,\n tokenChain,\n currentChainId,\n isTokenSelected,\n showDivider,\n tokenBalance\n}: {\n handleTokenSelect: (token: RelayAPIToken) => void;\n token: RelayAPIToken;\n tokenChain: RelayChain;\n currentChainId: number | undefined;\n isTokenSelected: boolean;\n showDivider?: boolean;\n tokenBalance?: GlyphWidgetTokenBalancesItem;\n}) => {\n return (\n <div\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleTokenSelect(token);\n }\n }}\n onClick={() => handleTokenSelect(token)}\n className=\"gw-w-full\"\n >\n <div\n className={cn(\n \"gw-flex gw-justify-between gw-items-center gw-w-full gw-p-2 gw-rounded-xl hover:gw-bg-gray-500/15\",\n {\n \"gw-bg-green-500/15 gw-shadow-liquidSm gw-backdrop-blur-sm gw-border gw-border-brand-white/20\":\n isTokenSelected\n }\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.metadata?.logoURI\n }}\n chain={{\n id: tokenChain.id,\n name: tokenChain.name,\n logoUrl: tokenChain.iconUrl\n }}\n />\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-flex gw-gap-1 gw-items-center\">\n <span className=\"gw-font-medium\">{token.symbol}</span>\n {token.metadata?.verified === false && (\n <TooltipElement side=\"bottom\" align=\"center\" stopPropagation description=\"Not verified\">\n <span className=\"gw-size-[18px] gw-bg-brand-warning gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <AlertTriangle />\n </span>\n </TooltipElement>\n )}\n {currentChainId && token.address === zeroAddress && (\n <TooltipElement side=\"bottom\" align=\"center\" stopPropagation description=\"Gas Token\">\n <span className=\"gw-size-[18px] gw-bg-brand-success gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <FuelIcon />\n </span>\n </TooltipElement>\n )}\n </span>\n\n <span className={`gw-typography-caption gw-text-brand-gray-500 `}>\n {/* {CHAIN_NAMES[tokenChain.id] || tokenChain.displayName} */}\n {truncateEthAddress(token.address!)}\n </span>\n </div>\n </div>\n\n {tokenBalance && (\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-h-full gw-text-end\">\n <span className=\"gw-min-h-5 gw-font-medium\">\n {formatCurrency(\n tokenBalance.amount,\n tokenBalance.currency,\n BigInt(tokenBalance.valueInWei) !== 0n\n )}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {formatTokenCount(\n tokenBalance.valueInWei,\n tokenBalance.decimals,\n tokenBalance.displayDecimals\n )}{\" \"}\n {token.symbol}\n </span>\n </div>\n )}\n </div>\n {showDivider && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n );\n};\n\nexport default memo(SwapChainAndTokenSelector);\n","import { paths } from \"@relayprotocol/relay-sdk\";\nimport { CheckIcon, PlusIcon, X } from \"lucide-react\";\nimport { useTokenBalance } from \"../../../hooks/useTokenBalance\";\nimport { MAX_DECIMALS_FOR_CRYPTO } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { displayNumberPrecision } from \"../../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport TooltipElement from \"../../ui/tooltip-element\";\n\nexport type TopUpDetails =\n | NonNullable<\n paths[\"/quote\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"][\"details\"]\n >[\"currencyGasTopup\"]\n | undefined;\n\ntype WalletSwapTopUpGasProps = {\n destinationChainId?: number;\n topUpGas: boolean;\n setTopUpGas: (value: boolean) => void;\n topUpDetails: TopUpDetails;\n tokenAddress: string;\n quoteReady?: boolean;\n};\n\nexport const WalletSwapTopUpGas = ({\n destinationChainId,\n topUpGas,\n setTopUpGas,\n topUpDetails,\n quoteReady,\n tokenAddress\n}: WalletSwapTopUpGasProps) => {\n const { balance } = useTokenBalance(tokenAddress, destinationChainId);\n\n const topupValue = displayNumberPrecision(\n parseFloat(topUpDetails?.amountFormatted || \"0\"),\n Math.min(topUpDetails?.currency?.decimals || MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n );\n const topupAmount = Number(topUpDetails?.amountUsd || \"0\");\n\n const topupCurrency = topUpDetails?.currency;\n\n if (balance === undefined || balance === null || BigInt(balance) > 0n || !quoteReady) {\n return null;\n }\n\n return (\n <>\n <Button\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-brand-success !gw-text-foreground !gw-h-5\"\n variant={\"default\"}\n onClick={() => setTopUpGas(!topUpGas)}\n >\n {!topUpGas && <PlusIcon className=\"!gw-size-3\" />}{\" \"}\n <span className=\"gw-typography-caption gw-inline-flex gw-gap-1 gw-items-center\">\n {!topUpGas ? (\n \"Add Gas\"\n ) : topUpDetails ? (\n <>\n <span>+{topupValue}</span>\n <span>({formatCurrency(topupAmount, \"USD\")})</span>\n {topupCurrency?.metadata?.logoURI && (\n <img\n src={topupCurrency?.metadata?.logoURI || \"\"}\n alt={topupCurrency?.name}\n className=\"gw-rounded-full gw-size-4\"\n />\n )}\n <span>{topupCurrency?.symbol}</span>\n <X className=\"!gw-size-3\" />\n </>\n ) : (\n <>\n <CheckIcon className=\"!gw-size-3\" />\n <span>Added Gas</span>\n </>\n )}\n </span>\n </Button>\n\n <TooltipElement\n description=\"No gas detected on the destination chain. A gas top-up is recommended which is reserved from your buy total, not charged extra.\"\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n triggerClassName=\"gw-ml-1\"\n />\n </>\n );\n};\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletTradeFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n };\n reason?: string | null;\n}\n\nconst WalletTradeFailedView: React.FC<WalletTradeFailedViewProps> = ({ onEnd, onShowActivity, txDetails, reason }) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n {reason ? (\n <span className=\"gw-mt-3 gw-min-h-8 gw-typography-caption gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n Reason - <span className=\"first-letter:gw-uppercase\">{reason}</span>\n </span>\n ) : null}\n\n <div className=\"gw-my-6 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails?.hash}\n text={`View on ${txDetails?.blockExplorerName || \"block explorer\"}`}\n url={txDetails?.blockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletTradeFailedView);\n","import { memo, useMemo } from \"react\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyphSwap } from \"../../../context/GlyphSwapContext\";\nimport { chainIdToRelayChain } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\ninterface WalletTradePendingViewProps {\n onBack: () => void;\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n estimatedTime?: number;\n };\n sellAmount: number;\n buyAmount: number;\n isTxApproved: boolean;\n statusError?: string;\n}\n\nconst WalletTradePendingView: React.FC<WalletTradePendingViewProps> = ({\n onBack,\n txDetails,\n sellAmount,\n buyAmount,\n isTxApproved,\n statusError\n}) => {\n const { fromCurrency, toCurrency } = useGlyphSwap();\n\n const fromChain = useMemo(\n () => (fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined),\n [fromCurrency?.chainId]\n );\n const toChain = useMemo(\n () => (toCurrency?.chainId ? chainIdToRelayChain(toCurrency?.chainId) : undefined),\n [toCurrency?.chainId]\n );\n\n const isGlyphDashboard = useMemo(() => {\n return [\"useglyph.io\", \"staging.useglyph.io\"].includes(window.location.hostname);\n }, []);\n\n return (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n footerClassName=\"!gw-pt-2\"\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n {statusError && (\n <p role=\"status\" className=\"gw-mb-4 gw-typography-caption\">\n {statusError}\n </p>\n )}\n <h6>{!isGlyphDashboard && !isTxApproved ? \"Waiting For Approval\" : \"Finalizing Transaction\"}</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">\n {/* Add 15 seconds buffer to fetch status */}\n {txDetails?.estimatedTime ? `${txDetails?.estimatedTime} secs` : \"<15 secs\"}\n </span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-justify-between gw-relative gw-z-[1]\">\n <TokenAndChainIcon\n token={{\n name: fromCurrency?.name,\n logoUrl: fromCurrency?.metadata?.logoURI\n }}\n chain={\n fromChain\n ? {\n id: fromChain?.id,\n name: fromChain?.name,\n logoUrl: fromChain?.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <div className=\"gw-px-2 gw-flex gw-flex-col gw-gap-0.5\">\n <span className=\"gw-typography-h6\">{sellAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {fromCurrency?.symbol}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-gap-3 gw-items-center\">\n <div className=\"gw-my-5 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-justify-between gw-relative gw-z-[1]\">\n <TokenAndChainIcon\n token={{\n name: toCurrency?.name,\n logoUrl: toCurrency?.metadata?.logoURI\n }}\n chain={\n toChain\n ? {\n id: toChain.id,\n name: toChain.name,\n logoUrl: toChain.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <div className=\"gw-px-2 gw-flex gw-flex-col gw-gap-0.5\">\n <span className=\"gw-typography-h6\">{buyAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {toCurrency?.symbol}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500 gw-text-center\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails?.hash}\n text={`View on ${txDetails?.blockExplorerName || \"block explorer\"}`}\n url={txDetails?.blockExplorerUrl}\n />\n ) : (\n <span>\n {!isGlyphDashboard && !isTxApproved ? (\n <span className=\"gw-text-foreground\">\n *Approvals open in a new window for your safety. Please approve each and return\n here.*\n </span>\n ) : (\n \"*Please do not close this tab.*\"\n )}\n </span>\n )}\n </span>\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletTradePendingView);\n","import { X } from \"lucide-react\";\nimport { memo, useMemo } from \"react\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyphSwap } from \"../../../context/GlyphSwapContext\";\nimport { chainIdToRelayChain, cn } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\ninterface WalletSendFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n\n sellAmount: number;\n buyAmount: number;\n\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n };\n}\n\nconst WalletSendFundSuccessView: React.FC<WalletSendFundSuccessViewProps> = ({\n onEnd,\n onShowActivity,\n sellAmount,\n buyAmount,\n txDetails\n}) => {\n const { fromCurrency, toCurrency } = useGlyphSwap();\n\n const fromChain = useMemo(\n () => (fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined),\n [fromCurrency?.chainId]\n );\n const toChain = useMemo(\n () => (toCurrency?.chainId ? chainIdToRelayChain(toCurrency?.chainId) : undefined),\n [toCurrency?.chainId]\n );\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {fromCurrency?.symbol &&\n toCurrency?.symbol &&\n `You have successfully swapped\\n${fromCurrency.symbol} for ${toCurrency.symbol}`}\n </span>\n\n <div\n className={cn(\n \"gw-my-6 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-3 gw-w-full gw-justify-center\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\"\n )}\n >\n <TokenAndChainIcon\n token={{\n name: fromCurrency?.name,\n logoUrl: fromCurrency?.metadata?.logoURI\n }}\n chain={\n fromChain\n ? {\n id: fromChain?.id,\n name: fromChain?.name,\n logoUrl: fromChain?.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n <div className=\"gw-flex gw-flex-col gw-gap-0.5 gw-min-w-12\">\n <span className=\"gw-typography-body1 !gw-leading-none\">{sellAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {fromCurrency?.symbol}\n </span>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <TokenAndChainIcon\n token={{\n name: toCurrency?.name,\n logoUrl: toCurrency?.metadata?.logoURI\n }}\n chain={\n toChain\n ? {\n id: toChain.id,\n name: toChain.name,\n logoUrl: toChain.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n <div className=\"gw-flex gw-flex-col gw-gap-0.5 gw-min-w-12\">\n <span className=\"gw-typography-body1 !gw-leading-none\">{buyAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {toCurrency?.symbol}\n </span>\n </div>\n </div>\n\n <div className=\"gw-my-1 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails.hash}\n text={`View on ${txDetails.blockExplorerName || \"block explorer\"}`}\n url={txDetails.blockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundSuccessView);\n","import { ArrowUpDown, Loader2 } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { debounce } from \"throttle-debounce\";\nimport { formatUnits, parseUnits, zeroAddress } from \"viem\";\nimport { useChainId } from \"wagmi\";\nimport { GlyphSwapContextData, RelayAPIToken, useGlyphSwap } from \"../../context/GlyphSwapContext\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { buildErrorPayloadWithCode, PRECHECK_FAILURE_CODE, useRelayExecute } from \"../../hooks/useRelayExecute\";\nimport { useRelayIntentStatus } from \"../../hooks/useRelayIntentStatus\";\nimport { checkIfGasIsEnough, useRelayQuote } from \"../../hooks/useRelayQuote\";\nimport { useTokenBalance } from \"../../hooks/useTokenBalance\";\nimport { INTERNAL_GRADIENT_TYPE, MAX_DECIMALS_FOR_CRYPTO, RELAY_APP_FEE_BPS, SwapView } from \"../../lib/constants\";\nimport { reformatSwapError, SWAP_ERROR_MESSAGES } from \"../../lib/customErrors\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport { getFeeBufferAmount } from \"../../lib/relayNativeMaxAmount\";\nimport { chainIdToRelayChain, cn, displayNumberPrecision, formatTokenCount, getRPCErrorString } from \"../../lib/utils\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\nimport AddGasToSourceChainButton from \"./internal/AddGasToSourceChainButton\";\nimport SwapChainAndTokenSelector from \"./internal/SwapChainAndTokenSelector\";\nimport { WalletSwapTopUpGas } from \"./internal/WalletSwapTopUpGas\";\nimport WalletTradeFailedView from \"./internal/WalletTradeFailedView\";\nimport WalletTradePendingView from \"./internal/WalletTradePendingView\";\nimport WalletTradeSuccessView from \"./internal/WalletTradeSuccessView\";\n\nexport type WalletTradeProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport function WalletTradeView({ onBack, onEnd, onShowActivity, setGradientType }: WalletTradeProps) {\n const { fetchForAllNetworks } = useGlyph();\n const chainId = useChainId();\n\n const [view, setView] = useState<SwapView>(SwapView.START);\n const [txStatus, setTxStatus] = useState<\"SUCCESS\" | \"FAILED\" | \"PENDING\">(\"PENDING\");\n const [intentRequestId, setIntentRequestId] = useState<string | null>(null);\n const [swapTxnId, setSwapTxnId] = useState<string | null>(null);\n\n const [isTxApproved, setIsTxApproved] = useState<boolean>(false);\n\n // Swap hooks\n const { update, reportSwapFailed, fromCurrency, toCurrency, tradeType, amount, topupGas } = useGlyphSwap();\n const { mutateAsync: executeSwap, isPending: executePending } = useRelayExecute();\n const {\n data: quote,\n isLoading: quoteLoading,\n error: quoteError,\n isEnabled: quoteEnabled,\n appFeesWaived,\n operation\n } = useRelayQuote(view === SwapView.START);\n const onError = useCallback(async () => {\n if (swapTxnId) await reportSwapFailed(swapTxnId);\n setSwapTxnId(null);\n }, [swapTxnId, setSwapTxnId, reportSwapFailed]);\n const { txDetails, error: swapError } = useRelayIntentStatus({\n intentRequestId,\n setTxStatus,\n setView,\n onError\n });\n\n const switchTokensHandler = () => {\n const prevFromCurrency = fromCurrency;\n const prevFromAmount = formatUnits(BigInt(amount), fromCurrency?.decimals || 18);\n const prevToCurrency = toCurrency;\n const prevToAmount = formatUnits(BigInt(amount), toCurrency?.decimals || 18);\n update({\n fromCurrency: prevToCurrency,\n toCurrency: prevFromCurrency,\n tradeType: tradeType === \"EXACT_INPUT\" ? \"EXACT_OUTPUT\" : \"EXACT_INPUT\"\n });\n\n if (tradeType === \"EXACT_INPUT\") {\n setBuyAmount(prevFromAmount);\n } else {\n setSellAmount(prevToAmount);\n }\n };\n\n // Update the amount and trade type with some debounce - such that quote is not fetched for every user interaction\n const debouncedAmountFunc = useMemo(\n () =>\n debounce(500, (value: bigint, newTradeType: GlyphSwapContextData[\"tradeType\"]) => {\n setExecuteError(\"\");\n update({\n amount: value.toString(),\n tradeType: newTradeType\n });\n }),\n [update] // safe to keep as a dep\n );\n\n const [executeError, setExecuteError] = useState<string>(\"\");\n\n const [swapFromAndToTokensAnimation, setSwapFromAndToTokensAnimation] = useState<boolean>(false);\n\n useEffect(() => {\n // Reset amount so that quote is not refilled on remount\n return () => {\n update({\n amount: \"\",\n topupGas: false,\n fromCurrency: undefined,\n toCurrency: undefined\n });\n };\n }, []);\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === SwapView.END && txStatus === \"SUCCESS\") {\n setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n }\n if (view === SwapView.END && txStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, txStatus, view]);\n\n // Temporary variables\n const [sellAmount, setSellAmount] = useState<string>(\"\");\n const [buyAmount, setBuyAmount] = useState<string>(\"\");\n\n const [transferMaxLoading, setTransferMaxLoading] = useState<boolean>(false);\n const [lastFeeBuffer, setLastFeeBuffer] = useState<bigint>(0n);\n\n useEffect(() => {\n if (quote) {\n const quoteGasWithBuffer = (BigInt(quote?.fees?.gas?.amount || \"0\") * 120n) / 100n; // 5% more than the error check\n if (transferMaxLoading) {\n // If the last fee buffer is less than the quote gas, recalculate the fee buffer\n if (lastFeeBuffer < BigInt(quote?.fees?.gas?.amount || \"0\")) {\n const newFeeBuffer = quoteGasWithBuffer;\n setLastFeeBuffer(newFeeBuffer);\n const isNativeToken =\n fromCurrency?.address ===\n (chainIdToRelayChain(fromCurrency!.chainId!)!.currency?.address ?? zeroAddress);\n const valueToSet = isNativeToken ? maxSellAmount(newFeeBuffer) : maxSellAmount(0n);\n setSellAmount(valueToSet);\n debouncedAmountFunc(\n isNativeToken\n ? BigInt(sellTokenBalance ?? \"0\") > newFeeBuffer\n ? BigInt(sellTokenBalance ?? \"0\") - newFeeBuffer\n : 0n\n : BigInt(sellTokenBalance ?? \"0\"),\n \"EXACT_INPUT\"\n );\n setTransferMaxLoading(false);\n return;\n }\n // If the last fee buffer is greater than the quote gas, we are good to go and we can set the transfer max loading to false\n setTransferMaxLoading(false);\n }\n if (tradeType === \"EXACT_INPUT\" && quote.details?.currencyOut?.amount) {\n setBuyAmount(\n formatTokenCount(\n quote.details.currencyOut.amount,\n toCurrency?.decimals || 18,\n Math.min(toCurrency?.decimals ?? MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString()\n );\n } else if (tradeType === \"EXACT_OUTPUT\" && quote.details?.currencyIn?.amount) {\n setSellAmount(\n formatTokenCount(\n quote.details.currencyIn.amount,\n fromCurrency?.decimals || 18,\n Math.min(fromCurrency?.decimals ?? MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString()\n );\n }\n }\n }, [quote]);\n\n const {\n balance: sellTokenBalance,\n isLoading: sellTokenBalanceLoading,\n error: sellTokenBalanceError\n } = useTokenBalance(fromCurrency?.address, fromCurrency?.chainId);\n\n // Calculate max sell amount from balance\n const maxSellAmount = useCallback(\n (gasFee: bigint) => {\n if (sellTokenBalance !== undefined && fromCurrency?.decimals && BigInt(sellTokenBalance) > gasFee) {\n return displayNumberPrecision(\n parseFloat(formatUnits(BigInt(sellTokenBalance) - gasFee, fromCurrency.decimals)),\n Math.min(fromCurrency.decimals || MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString();\n }\n return \"0\";\n },\n [sellTokenBalance, fromCurrency?.decimals]\n );\n\n const {\n balance: buyTokenBalance,\n isLoading: buyTokenBalanceLoading,\n error: buyTokenBalanceError\n } = useTokenBalance(toCurrency?.address, toCurrency?.chainId);\n\n const quoteGas = quote?.fees?.gas;\n\n // Source chain gas balance to determine if transaction can be executed\n const gasCurrencyAddress = quoteGas?.currency?.address || zeroAddress;\n const {\n balance: sourceGasBalance,\n isLoading: sourceGasBalanceLoading,\n error: sourceGasBalanceError\n } = useTokenBalance(gasCurrencyAddress, fromCurrency?.chainId);\n\n const sellAmountInWeiToUse =\n tradeType === \"EXACT_INPUT\" ? amount : parseUnits(sellAmount, fromCurrency?.decimals || 18);\n const insufficientBalanceError =\n fromCurrency?.decimals && sellAmount && sellTokenBalance !== undefined\n ? BigInt(sellTokenBalance) < BigInt(sellAmountInWeiToUse)\n ? SWAP_ERROR_MESSAGES.INSUFFICIENT_BALANCE\n : null\n : null;\n\n const hasSourceGas = checkIfGasIsEnough(\n gasCurrencyAddress,\n fromCurrency,\n quoteGas?.amount || \"0\",\n sourceGasBalance,\n sellAmountInWeiToUse.toString()\n );\n\n const gasUnavailableError =\n quote &&\n fromCurrency?.chainId &&\n !sourceGasBalanceLoading &&\n !hasSourceGas &&\n !transferMaxLoading &&\n buyAmount !== \"\"\n ? SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS\n : null;\n\n const blockingError =\n swapError || // Error from swap intent status\n executeError || // Error during execution\n (view === SwapView.START\n ? quoteError?.message ||\n sellTokenBalanceError ||\n buyTokenBalanceError ||\n sourceGasBalanceError ||\n insufficientBalanceError ||\n gasUnavailableError\n : undefined); // These errors are only relevant when on start screen\n\n const appFees = Number(quote?.fees?.app?.amountUsd || \"0\"); // It's absolute value\n\n const totalImpact = Math.abs(Number(quote?.details?.totalImpact?.usd || \"0\")); // It's negative already\n const networkFees = Math.abs(totalImpact - appFees);\n\n const currencyInUsd = quote?.details?.currencyIn?.amountUsd\n ? Number(quote?.details?.currencyIn?.amountUsd)\n : undefined;\n const currencyOutUsd = quote?.details?.currencyOut?.amountUsd\n ? Number(quote?.details?.currencyOut?.amountUsd)\n : undefined;\n\n const [isFromTokenNative, sourceChainNativeSymbol, sourceChainName] = useMemo(() => {\n if (!fromCurrency?.address || !fromCurrency?.chainId) return [false, undefined, undefined];\n const sourceChain = chainIdToRelayChain(fromCurrency.chainId!);\n const nativeAddress = sourceChain?.currency?.address ?? zeroAddress;\n return [\n fromCurrency.address.toLowerCase() === nativeAddress.toLowerCase(),\n // nativeAddress,\n sourceChain?.currency?.symbol ?? undefined,\n sourceChain?.displayName ?? undefined\n ];\n }, [fromCurrency?.address, fromCurrency?.chainId]); // if from token is native token, source chain native symbol and source chain name\n\n const [isToTokenNative, destinationChainNativeAddress] = useMemo(() => {\n if (!toCurrency?.address || !toCurrency?.chainId) return [false, undefined];\n const nativeAddress = chainIdToRelayChain(toCurrency.chainId!)!.currency?.address ?? zeroAddress;\n return [toCurrency.address.toLowerCase() === nativeAddress.toLowerCase(), nativeAddress];\n }, [toCurrency?.address, toCurrency?.chainId]); // if to token is native token and destination chain native address\n\n const addGasToSourceChain = useCallback(\n (fromCurrency: RelayAPIToken | undefined) => {\n if (!quoteGas) return;\n\n // Set the output currency to the gas currency needed and amount to 2x the gas amount needed\n const gasFromLastQuote = BigInt(quoteGas?.amount || \"0\");\n const gasToAdd = gasFromLastQuote * 2n;\n setSellAmount(\"\"); // Reset sell amount to 0\n setBuyAmount(formatUnits(gasToAdd, quoteGas?.currency?.decimals || 18));\n if (!fromCurrency) {\n toast.info(\"Please select the source token to proceed!\");\n }\n update({\n fromCurrency: fromCurrency,\n toCurrency: quoteGas?.currency,\n amount: gasToAdd.toString(),\n tradeType: \"EXACT_OUTPUT\"\n });\n },\n [quoteGas]\n );\n\n return (\n <>\n {view === SwapView.START && (\n <WalletViewTemplate\n isStickyHeader\n headerClassName=\"!gw-py-2\"\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Swap\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-px-4 gw-h-full gw-flex gw-flex-col gw-justify-start\">\n {/* From Token */}\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-border-b gw-border-muted gw-pb-6 gw-relative\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">Sell</div>\n\n {/* Sell Input */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-mb-1.5\">\n <div\n className={`gw-w-full gw-text-center gw-flex gw-justify-between gw-items-center gw-typography-h3-nr gw-gap-1`}\n >\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (sellAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={sellAmount}\n onChange={(e) => {\n setSellAmount(() => {\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n fromCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // If value is reset, reset the other value as well\n if (e.target.value === \"\") {\n setBuyAmount(\"\");\n }\n\n // If sell amount is manually changed - that means user want swap of type \"EXACT_INPUT\"\n debouncedAmountFunc(\n parseUnits(value, fromCurrency?.decimals || 18),\n \"EXACT_INPUT\"\n );\n\n return value;\n });\n }}\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {/* From Token selector */}\n {chainId && (\n <SwapChainAndTokenSelector\n selectedToken={fromCurrency}\n onTokenSelect={(t) => {\n update({\n fromCurrency: t\n });\n\n // If source token is changed and user entered the source amount manually, reset the sell amount and buy amount and amount.\n if (tradeType === \"EXACT_INPUT\") {\n setSellAmount(\"\");\n setBuyAmount(\"\");\n update({\n amount: \"\"\n });\n }\n\n // Sell token and buy token cannot be same - unset buy token if it is same\n if (\n toCurrency &&\n toCurrency.address === t.address &&\n toCurrency.chainId === t.chainId\n ) {\n setBuyAmount(\"\");\n update({\n amount: \"\",\n toCurrency: undefined\n });\n }\n }}\n defaultChainId={fetchForAllNetworks ? undefined : chainId}\n />\n )}\n </div>\n </div>\n\n {/* Value in USD and tokens available */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-text-brand-gray-500 gw-min-h-5\">\n {currencyInUsd === undefined ? (\n <div className=\"gw-h-5 gw-w-1\" />\n ) : (\n <div className=\"gw-typography-caption\">\n {currencyInUsd < 0.01\n ? \"<$0.01\"\n : `${formatCurrency(currencyInUsd || \"0\", \"USD\")}`}\n </div>\n )}\n <>\n {sellTokenBalanceLoading ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n <Skeleton className=\"gw-h-5 gw-w-10 gw-inline-block gw-ml-0.5\" />\n </div>\n ) : !!sellTokenBalance && fromCurrency?.decimals ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4 gw-gap-1\">\n {/* Max button - only show if the sell token balance is greater than 0 */}\n {BigInt(sellTokenBalance) > 0n && (\n <>\n <Button\n disabled={transferMaxLoading || !toCurrency}\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-brand-success !gw-text-foreground !gw-h-5\"\n onClick={async () => {\n setTransferMaxLoading(true);\n try {\n if (!fromCurrency) {\n return;\n }\n const feeGasBuffer = await getFeeBufferAmount(\n fromCurrency?.chainId as number,\n BigInt(sellTokenBalance)\n );\n const valueToSet = isFromTokenNative\n ? maxSellAmount(feeGasBuffer)\n : maxSellAmount(0n);\n // If the max sell amount is 0, throw an error as we don't have enough balance to cover the gas fee\n if (valueToSet === \"0\") {\n throw new Error(\n SWAP_ERROR_MESSAGES.FAILED_TO_MAX_LOW_GAS\n );\n }\n\n const newWeiValueForQuote = isFromTokenNative\n ? BigInt(sellTokenBalance) - feeGasBuffer\n : BigInt(sellTokenBalance);\n\n if (newWeiValueForQuote.toString() !== amount) {\n setLastFeeBuffer(feeGasBuffer);\n setSellAmount(valueToSet);\n setBuyAmount(\"\");\n debouncedAmountFunc(\n newWeiValueForQuote,\n \"EXACT_INPUT\"\n );\n } else {\n setTransferMaxLoading(false);\n }\n } catch (_e: any) {\n setExecuteError(_e?.message);\n setTransferMaxLoading(false);\n }\n }}\n >\n {transferMaxLoading && (\n <Loader2 className=\"!gw-size-3 gw-animate-spin\" />\n )}\n <span className=\"gw-typography-caption\">Max</span>\n </Button>\n {(!toCurrency || isFromTokenNative) && (\n <TooltipElement\n description={\n !toCurrency\n ? \"Select destination token to continue\"\n : \"This swap uses a native token, a small amount will be reserved to cover gas fees.\"\n }\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n />\n )}\n </>\n )}\n {displayNumberPrecision(\n parseFloat(\n formatUnits(BigInt(sellTokenBalance), fromCurrency?.decimals)\n ),\n Math.min(\n fromCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n )}{\" \"}\n {fromCurrency?.symbol}\n </div>\n ) : (\n <div className=\"gw-h-4 gw-w-1\" />\n )}\n </>\n </div>\n\n {/* Swap to and from tokens */}\n <Button\n className={cn(\n \"gw-absolute gw-z-[1] gw-bottom-0 gw-translate-y-1/2 gw-left-1/2 -gw-translate-x-1/2 gw-h-8 gw-w-8 gw-transition-transform gw-duration-300 gw-ease-in-out\",\n swapFromAndToTokensAnimation && \"gw-rotate-180\"\n )}\n variant={\"liquidGlass\"}\n size={\"icon\"}\n onClick={(e) => {\n e.stopPropagation();\n setSwapFromAndToTokensAnimation((v) => !v);\n switchTokensHandler();\n }}\n >\n <ArrowUpDown className=\"!gw-size-5 !gw-text-brand-gray-500\" />\n </Button>\n </div>\n\n {/* To Token */}\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-pt-4 gw-pb-4 gw-relative\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">Buy</div>\n\n {/*Buy Input */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-mb-1.5\">\n <div\n className={`gw-w-full gw-text-center gw-flex gw-justify-between gw-items-center gw-typography-h3-nr gw-gap-1`}\n >\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (buyAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={buyAmount}\n onChange={(e) =>\n setBuyAmount(() => {\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n toCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // If value is reset, reset the other value as well\n if (e.target.value === \"\") {\n setSellAmount(\"\");\n }\n\n // If buy amount is manually changed - that means user want swap of type \"EXACT_OUTPUT\"\n debouncedAmountFunc(\n parseUnits(value, toCurrency?.decimals || 18),\n \"EXACT_OUTPUT\"\n );\n\n return value;\n })\n }\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {/* To Token selector */}\n {chainId && (\n <SwapChainAndTokenSelector\n selectedToken={toCurrency}\n onTokenSelect={(t) => {\n update({\n toCurrency: t\n });\n\n // If destination token is changed and user entered the destination amount manually, reset the sell amount and buy amount and amount.\n if (tradeType === \"EXACT_OUTPUT\") {\n setBuyAmount(\"\");\n\n // If the buy amount is not empty and the from currency is not undefined, set the amount to the sell amount and trade type to exact input for better user experience\n if (buyAmount && fromCurrency) {\n update({\n amount: parseUnits(\n sellAmount,\n fromCurrency?.decimals || 18\n ).toString(),\n tradeType: \"EXACT_INPUT\"\n });\n } else {\n update({\n amount: \"\"\n });\n }\n }\n\n // Buy token and sell token cannot be same - unset sell token if it is same\n if (\n fromCurrency &&\n fromCurrency.address === t.address &&\n fromCurrency.chainId === t.chainId\n ) {\n setSellAmount(\"\");\n setBuyAmount(\"\");\n update({\n amount: \"\",\n fromCurrency: undefined\n });\n }\n }}\n defaultChainId={fetchForAllNetworks ? undefined : chainId}\n />\n )}\n </div>\n </div>\n\n {/* Value in USD and tokens available */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-text-brand-gray-500\">\n {currencyOutUsd === undefined ? (\n <div className=\"gw-h-4 gw-w-1\" />\n ) : (\n <div className=\"gw-typography-caption\">\n {currencyOutUsd < 0.01\n ? \"<$0.01\"\n : `${formatCurrency(currencyOutUsd || \"0\", \"USD\")}`}\n </div>\n )}\n {\n <>\n {buyTokenBalanceLoading ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n <Skeleton className=\"gw-h-4 gw-w-10 gw-inline-block gw-ml-0.5\" />\n </div>\n ) : buyTokenBalance !== undefined && toCurrency?.decimals ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n {displayNumberPrecision(\n parseFloat(\n formatUnits(BigInt(buyTokenBalance), toCurrency?.decimals)\n ),\n Math.min(\n toCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n )}{\" \"}\n {toCurrency?.symbol}\n </div>\n ) : (\n <div className=\"gw-h-4 gw-w-1\" />\n )}\n </>\n }\n </div>\n\n {/* Reserve height for the gas top up button */}\n <div className=\"gw-h-5 gw-mt-1 gw-flex gw-items-center\">\n {/* Only show if the current buy token is not the native token */}\n {!isToTokenNative && destinationChainNativeAddress ? (\n <WalletSwapTopUpGas\n destinationChainId={toCurrency?.chainId}\n topUpGas={topupGas}\n setTopUpGas={(v) => {\n update({\n topupGas: v\n });\n }}\n topUpDetails={quote?.details?.currencyGasTopup}\n quoteReady={!!quote}\n tokenAddress={destinationChainNativeAddress}\n />\n ) : null}\n </div>\n </div>\n\n {/* Tx data */}\n {quoteEnabled && (\n <div\n className={cn(\n \"gw-typography-body2 gw-mt-2 gw-w-full gw-rounded-xl gw-p-2\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-space-x-1\">\n <span>Max Slippage</span>\n <span className=\"gw-text-brand-gray-500 gw-flex gw-items-center gw-gap-2\">\n <span className=\"gw-text-foreground gw-bg-muted gw-rounded-full gw-px-2 gw-py-0.5 gw-typography-caption\">\n Auto\n </span>\n <span>\n {/* If same chain, show origin slippage, else destination slippage */}\n {quote\n ? (fromCurrency?.chainId === toCurrency?.chainId\n ? quote?.details?.slippageTolerance?.origin?.percent\n : quote?.details?.slippageTolerance?.destination?.percent ||\n \"0\") + \"%\"\n : \"-\"}\n </span>\n </span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Transaction Time</span>\n <span className=\"gw-text-brand-gray-500\">\n {quote ? (quote?.details?.timeEstimate || \"<15\") + \"s\" : \"-\"}\n </span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Fees {appFeesWaived ? \"\" : `(${RELAY_APP_FEE_BPS / 100}%)`}</span>\n <div className=\"gw-text-brand-gray-500\">\n {quote ? (\n appFeesWaived ? (\n \"0\"\n ) : appFees < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(appFees || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500\">\n {quote ? (\n networkFees < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(networkFees || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Total</span>\n <div className=\"gw-text-foreground gw-font-medium\">\n {quote && currencyInUsd ? (\n currencyInUsd < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(currencyInUsd || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n }\n footer={\n <>\n <span\n className={cn(\n `gw-inline-flex gw-items-center gw-text-center gw-space-x-2 gw-mb-2 gw-typography-caption first-letter:gw-uppercase ${blockingError ? \"gw-text-destructive gw-bg-destructive-foreground/60\" : \"gw-text-brand-gray-500\"}`,\n blockingError\n ? \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-py-0.5 gw-rounded-full\"\n : \"\"\n )}\n >\n {(() => {\n if (blockingError) {\n const error = reformatSwapError(blockingError);\n if (error === SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS) {\n return (\n <div className=\"gw-flex gw-items-center gw-gap-1\">\n <span>{SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS}</span>\n <TooltipElement\n description={`You need to add some ${sourceChainNativeSymbol ?? \"gas\"} on the ${sourceChainName ?? \"source\"} chain to proceed with this transaction.`}\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n triggerClassName=\"gw-text-destructive gw-size-4\"\n />\n {quoteGas ? (\n <AddGasToSourceChainButton\n sourceChainNativeSymbol={sourceChainNativeSymbol}\n sourceChainName={sourceChainName}\n addGasToSourceChain={addGasToSourceChain}\n />\n ) : null}\n </div>\n );\n }\n return error;\n }\n return null;\n })()}\n </span>\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full\"\n disabled={!!blockingError || !quote || !currencyInUsd || executePending}\n onClick={async () => {\n if (!quote || blockingError) return;\n\n try {\n const execResult = await executeSwap({\n qt: quote,\n onExecutionStart: (finalQuote) => {\n // Check if gas amount is enough according to the final quote generated by the backend\n const gasAmount = finalQuote?.fees?.gas?.amount;\n const hasEnoughGas = checkIfGasIsEnough(\n gasCurrencyAddress,\n fromCurrency,\n gasAmount || \"0\",\n sourceGasBalance,\n sellAmountInWeiToUse.toString()\n );\n\n if (!sourceGasBalanceLoading && !hasEnoughGas) {\n throw buildErrorPayloadWithCode(\n PRECHECK_FAILURE_CODE,\n SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS\n );\n }\n\n // If everything goes well, set the transaction status to pending and show the wait view\n setTxStatus(\"PENDING\");\n setView(SwapView.WAIT);\n setIsTxApproved(false);\n }\n });\n setIsTxApproved(true);\n const requestId = execResult?.requestId;\n const txnId = execResult?.txnId ?? null;\n\n if (requestId && txnId) {\n setIntentRequestId(requestId);\n setSwapTxnId(txnId);\n } else {\n toast.error(SWAP_ERROR_MESSAGES.STATUS_CHECK_FAILED);\n }\n } catch (error) {\n if (\n typeof error === \"object\" &&\n (error as any)?.code === PRECHECK_FAILURE_CODE\n ) {\n console.error(\"Error executing swap - precheck:\", error);\n setExecuteError(\n (error as any)?.message || SWAP_ERROR_MESSAGES.PRECHECK_FAILURE\n );\n return;\n }\n console.error(\"Error executing swap:\", error);\n setExecuteError(getRPCErrorString(error));\n setTxStatus(\"FAILED\");\n setView(SwapView.END);\n }\n }}\n >\n {executePending\n ? \"Preparing transaction...\"\n : operation === \"wrap\"\n ? \"Wrap\"\n : operation === \"unwrap\"\n ? \"Unwrap\"\n : \"Swap\"}\n </Button>\n </>\n }\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === SwapView.WAIT && (\n <WalletTradePendingView\n statusError={swapError || undefined}\n onBack={onBack}\n txDetails={{ ...txDetails, estimatedTime: quote?.details?.timeEstimate }}\n sellAmount={Number(sellAmount)}\n buyAmount={Number(buyAmount)}\n isTxApproved={isTxApproved}\n />\n )}\n\n {view === SwapView.END &&\n (txStatus === \"SUCCESS\" ? (\n <WalletTradeSuccessView\n txDetails={txDetails}\n onEnd={() => onEnd()}\n onShowActivity={() => onShowActivity()}\n sellAmount={Number(sellAmount)}\n buyAmount={Number(buyAmount)}\n />\n ) : (\n <WalletTradeFailedView\n txDetails={txDetails}\n reason={blockingError ? reformatSwapError(blockingError) : null}\n onEnd={() => onEnd()}\n onShowActivity={() => onShowActivity()}\n />\n ))}\n </>\n );\n}\n","import { memo, useContext, useEffect, useState } from \"react\";\nimport { GlyphViewContext } from \"../../context/GlyphViewContext\";\nimport { INTERNAL_GRADIENT_TYPE, WalletMainViewTab, WalletView } from \"../../lib/constants\";\nimport { WalletFundView } from \"./WalletFundView\";\nimport { WalletMainView } from \"./WalletMainView\";\nimport { WalletProfileView } from \"./WalletProfileView\";\nimport { WalletReceiveView } from \"./WalletReceiveView\";\nimport { WalletSendFundView } from \"./WalletSendFundView\";\nimport { WalletTradeView } from \"./WalletTradeView\";\n\nexport const Wallet = memo(\n ({\n setGradientType\n }: {\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n }) => {\n const viewCtx = useContext(GlyphViewContext);\n if (!viewCtx) throw new Error(\"GlyphWidgetWallet must be used within a GlyphViewProvider\");\n\n const { walletMainViewTab, setWalletMainViewTab, walletView, setWalletView } = viewCtx;\n\n const [expandFirstActivityRow, setExpandFirstActivityRow] = useState<boolean>(false);\n\n // reset `expandFirstActivityRow` only when Activity tab is closed\n useEffect(() => {\n if (walletView === WalletView.MAIN && walletMainViewTab === WalletMainViewTab.ACTIVITY) return;\n\n setExpandFirstActivityRow(false);\n }, [walletView, walletMainViewTab, setExpandFirstActivityRow]);\n\n return (\n <>\n {walletView === WalletView.MAIN && (\n <WalletMainView\n setGradientType={setGradientType}\n activeMainViewScreen={walletMainViewTab}\n setActiveMainViewScreen={setWalletMainViewTab}\n setWalletView={setWalletView}\n expandFirstActivityRow={expandFirstActivityRow}\n />\n )}\n\n {walletView === WalletView.RECEIVE && (\n <WalletReceiveView onBack={() => setWalletView(WalletView.MAIN)} />\n )}\n\n {walletView === WalletView.FUND && (\n <WalletFundView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n {walletView === WalletView.SEND && (\n <WalletSendFundView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n\n {walletView === WalletView.PROFILE && (\n <WalletProfileView onBack={() => setWalletView(WalletView.MAIN)} />\n )}\n\n {walletView === WalletView.SWAP && (\n <WalletTradeView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n </>\n );\n }\n);\n"],"names":["__iconNode","ArrowUpDown","createLucideIcon","ArrowUpRight","Check","Fuel","Plus","Send","TriangleAlert","X","USDIcon","LinkIcon","props","jsxs","jsx","limitDecimals","value","separator","maxDecimals","formattedValue","whole","decimal","formatInputNumber","NoTokenIcon","NativeTokenIcon","className","balances","useGlyph","chainId","useChainId","nativeBalance","balance","logoUrl","cn","dist","truncateRegex","truncateEthAddress","address","match","BackIcon","CopyIcon","isCopied","rest","CopyButton","text","textToCopy","textClassName","iconClassName","copied","setCopied","useState","copyToClipboard","CopyButton$1","memo","WalletViewHeader","fullScreenHeader","onProfileClick","isStickyHeader","user","headerRef","useRef","isStuck","setIsStuck","useEffect","headerElement","scrollContainer","contentArea","headerWrapper","initialHeaderOffset","checkStuck","isCurrentlyStuck","Fragment","UserAvatar","ChainSelector","WalletViewHeader$1","WalletViewTemplate","mainFooter","HelpIcon","TooltipElement","contentClassName","triggerClassName","description","children","side","align","defaultOpen","open","onOpenChange","stopPropagation","openInternal","setOpenInternal","Tooltip","TooltipTrigger","e","v","TooltipContent","FailureIcon","WalletFundFailedView","onEnd","onShowActivity","id","Button","WalletFundFailedView$1","CaretDownIcon","LoadingCircleIcon","WalletFundPendingView","onBack","nativeSymbol","WalletFundPendingView$1","SuccessIcon","WalletFundSuccessView","WalletFundSuccessView$1","MAX_DECIMALS","WalletFundView","setGradientType","userCurrency","fundAmount","fundMinAmount","fundMaxAmount","fundIntermediaryToken","fundDone","fundError","fundAmountError","fundQuote","fundStatus","quoteLoading","doFunding","setFundAmount","isOnrampEnabled","onramppDisabledError","fundSymbol","useGlyphFunding","view","setView","FundView","fetchingPaymentLink","setFetchingPaymentLink","handleBuy","error","toast","INTERNAL_GRADIENT_TYPE","validAmountEntered","input","currencyToSymbol","formatCurrency","Skeleton","Loader2","ActivityIcon","isActive","HomeIcon","TokensIcon","WalletsTabFilledIcon","WalletsTabOutlinedIcon","WalletViewFooterNav","tab","setTab","WalletMainViewTab","WalletViewFooterNav$1","TxSendIcon","TxSwapIcon","ActivityRow","data","chain","chainIdToRelayChain","CHAIN_NAMES","LinkWithIcon","url","buttonVariants","ActivityRowSkeleton","createCollection","name","PROVIDER_NAME","createCollectionContext","createCollectionScope","createContextScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","scope","ref","React","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","createSlot","CollectionSlot","forwardedRef","context","composedRefs","useComposedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","a","b","COLLAPSIBLE_NAME","createCollapsibleContext","createCollapsibleScope","CollapsibleProvider","useCollapsibleContext","Collapsible","__scopeCollapsible","openProp","disabled","collapsibleProps","setOpen","useControllableState","useId","prevOpen","Primitive","getState","TRIGGER_NAME","CollapsibleTrigger","triggerProps","composeEventHandlers","CONTENT_NAME","CollapsibleContent","forceMount","contentProps","Presence","present","CollapsibleContentImpl","isPresent","setIsPresent","heightRef","height","widthRef","width","isOpen","isMountAnimationPreventedRef","originalStylesRef","rAF","useLayoutEffect","node","rect","Root","Trigger","Content","DirectionContext","useDirection","localDir","globalDir","ACCORDION_NAME","ACCORDION_KEYS","Collection","createAccordionContext","useCollapsibleScope","Accordion","type","accordionProps","singleProps","multipleProps","AccordionImplMultiple","AccordionImplSingle","AccordionValueProvider","useAccordionValueContext","AccordionCollapsibleProvider","useAccordionCollapsibleContext","valueProp","defaultValue","onValueChange","collapsible","accordionSingleProps","setValue","AccordionImpl","accordionMultipleProps","handleItemOpen","itemValue","prevValue","handleItemClose","value2","AccordionImplProvider","useAccordionContext","__scopeAccordion","dir","orientation","accordionRef","getItems","isDirectionLTR","handleKeyDown","event","target","triggerCollection","item","triggerIndex","triggerCount","nextIndex","homeIndex","endIndex","moveNext","movePrev","clampedIndex","ITEM_NAME","AccordionItemProvider","useAccordionItemContext","AccordionItem","accordionItemProps","accordionContext","valueContext","collapsibleScope","triggerId","CollapsiblePrimitive.Root","open2","HEADER_NAME","AccordionHeader","headerProps","itemContext","AccordionTrigger","collapsibleContext","CollapsiblePrimitive.Trigger","AccordionContent","CollapsiblePrimitive.Content","Root2","Item","Header","Trigger2","Content2","AccordionPrimitive.Root","forwardRef","AccordionPrimitive.Item","AccordionPrimitive.Header","AccordionPrimitive.Trigger","AccordionPrimitive.Content","WalletActivityTab","expandFirst","fetchForAllNetworks","currentBlockExplorerUrl","transactionGroups","fetchTransactions","loadMore","hasMore","isLoading","refreshKey","useActivity","observerTarget","sentinelRef","expandedItemId","setExpandedItemId","totalTransactions","count","group","fetchCurrent","handleScroll","useCallback","entries","entry","observer","currentTarget","sentinel","_","index","groupIndex","t","row","tx","PlusSign","QRIcon","WalletHomeTab","setWalletView","hasBalances","allBalances","tokens","formatTokenCount","WalletView","SendIcon","WalletLinkedAccountsTab","glyphUrl","profileUrl","wallet","ExpandItemIcon","LinkedNFTChip","NFTImgFail","NFTImg","alt","title","imgErr","setImgErr","WalletNFTsTab","nfts","nftsURL","idx","TokenAndChainIcon","token","tokenClassName","chainClassName","WalletTokensTab","useBalances","totalValue","TokenIcon","WalletTokenVSNftSwitcher","activeTab","setActiveTab","isAnimating","setIsAnimating","handleTabChange","WalletMainView","activeMainViewScreen","setActiveMainViewScreen","expandFirstActivityRow","profileGradient","EditIcon","WalletProfileView","logout","editUrl","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","__spreadValues","prop","__objRest","source","exclude","qrcodegen","qrcodegen2","_QrCode","version","errorCorrectionLevel","dataCodewords","msk","i","allCodewords","minPenalty","penalty","assert","ecl","segs","seg","minVersion","maxVersion","mask","boostEcl","dataUsedBits","dataCapacityBits2","usedBits","QrSegment","newEcl","bb","appendBits","dataCapacityBits","padByte","x","y","alignPatPos","numAlign","j","rem","bits","getBit","color","dy","dx","xx","yy","isDark","ver","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","blocks","rsDiv","k","dat","ecc","result","block","right","vert","invert","runColor","runX","runHistory","runY","dark","sum","total","step","pos","degree","root","divisor","factor","coef","z","n","core","currentRunColor","currentRunLength","val","len","cond","_QrSegment","mode","numChars","bitData","digits","temp","assignVal","ccbits","str","QrCode2","_Ecc","ordinal","formatBits","QrSegment2","_Mode","modeBits","numBitsCharCount","qrcodegen_default","ERROR_LEVEL_MAP","DEFAULT_SIZE","DEFAULT_LEVEL","DEFAULT_BGCOLOR","DEFAULT_FGCOLOR","DEFAULT_INCLUDEMARGIN","DEFAULT_MINVERSION","SPEC_MARGIN_SIZE","DEFAULT_MARGIN_SIZE","DEFAULT_IMG_SCALE","generatePath","modules","margin","ops","start","cell","excavateModules","excavation","getImageSettings","cells","size","imageSettings","numCells","defaultSize","scale","w","h","opacity","floorX","floorY","ceilW","ceilH","crossOrigin","getMarginSize","includeMargin","marginSize","useQRCode","level","boostLevel","qrcode","segments","accum","calculatedImageSettings","cells2","margin2","numCells2","calculatedImageSettings2","SUPPORTS_PATH2D","QRCodeCanvas","_a","bgColor","fgColor","_b","style","otherProps","imgSrc","_canvas","_image","setCanvasRef","isImgLoaded","setIsImageLoaded","canvas","ctx","cellsToDraw","image","haveImageToRender","pixelRatio","rdx","cdx","canvasStyle","img","QRCodeSVG","fgPath","Icon","BALANCE_REFRESH_INTERVAL_MS","WalletReceiveView","ready","refreshBalances","interval","acc","amount","Dialog","DialogPrimitive.Root","DialogTrigger","DialogPrimitive.Trigger","DialogPortal","DialogPrimitive.Portal","DialogOverlay","DialogPrimitive.Overlay","DialogContent","container","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogTitle","DialogPrimitive.Title","DialogDescription","DialogPrimitive.Description","SendFundChainAndTokenSelector","onTokenSelect","selectedToken","switchChainAsync","useSwitchChain","setFetchForAllNetworks","currentChainId","selectedTokenChain","useMemo","currentChain","collisionRef","handleTokenSelect","ChevronDown","relayClient","tokenChain","isTokenSelected","zeroAddress","FuelIcon","SendFundChainAndTokenSelector$1","InputHelper","Input","label","supportingText","parentClassName","bodyClassName","leadingIcon","trailingIcon","placeholder","evt","WalletSendFundEnterAddressView","setRecipientAddress","setRecipientAddressError","recipientAddress","recipientAddressError","isAddress","ethereumAvatar","checksumAddress","SendView","WalletSendFundEnterAddressView$1","WalletSendFundFailedView","txHash","txBlockExplorerUrl","txBlockExplorerName","WalletSendFundFailedView$1","WalletSendFundPendingView","quote","tokenSymbol","WalletSendFundPendingView$1","WalletSendFundSuccessView","WalletSendFundSuccessView$2","SEND_STATUS_REFRESH_INTERNAL_MS","MAX_QUOTE_FETCH_RETRIES","QUOTE_BUSY_ERROR","MAX_BALANCE_ERROR","NO_TOKENS_ERROR","WalletSendFundView","sendTransaction","glyphApiFetch","useGlyphApi","chains","useChains","c","nativeToken","setToken","publicClient","httpUrls","createPublicClient","fallback","http","sendAmount","setSendAmount","debouncedSendAmount","setDebouncedSendAmount","transferMax","setTransferMax","setQuote","setQuoteLoading","quoteFetchFailuresRef","isSignaturePending","setIsSignaturePending","isPending","setIsPending","statusFetchCount","setStatusFetchCount","setError","maxValueError","setMaxValueError","setTxHash","setTxBlockExplorerUrl","setTxBlockExplorerName","txStatus","setTxStatus","logger","createLogger","registerFailure","err","fallbackMessage","fetchQuote","maxFeePerGas","maxPriorityFeePerGas","gasPrice","fees","gasUnits","valueToSend","parseEther","tokenToBigIntWei","erc20Abi","feePerGas","gasCost","valueToReturn","receivableAmountInToken","displayNumberPrecision","formatUnits","fetchSendStatus","res","debouncedFunc","debounce","selectedTokenBalanceFormatted","selectedTokenValueFormatted","newValue","MAX_DECIMALS_FOR_CRYPTO","valueToSet","receipt","hash_","txData","encodeFunctionData","SWAP_ERROR_MESSAGES","reformatSwapError","createDefaultPublicClient","relayChains","viemChains","configureViemChain","httpRpcUrl","extractChain","mainnet","useGlyphRelayEvmAdapter","config","signMessage","signTypedData","getChainId","stepItem","signData","signature","LogLevel","stepData","hexToBigInt","onReplaced","onCancelled","getPublicClient","replacement","PRECHECK_FAILURE_CODE","buildErrorPayloadWithCode","code","message","useRelayExecute","reportSwapFailed","useGlyphSwap","useConfig","evmAdapter","useMutation","qt","onExecutionStart","quoteChainId","SOLANA_RELAY_ID","parsedRes","txnId","finalQuote","timeoutId","resetTimeout","reject","resolve","resultStatus","resultError","useRelayIntentStatus","intentRequestId","onError","txDetails","setTxDetails","isBalancesLoading","latest","cancelled","controller","failures","wait","ms","finish","timer","readController","abortRead","timeout","resp","MAINNET_RELAY_API","status","relayTxDetails","SwapView","QUOTE_REFETCH_INTERVAL","GAS_BUFFER","checkIfGasIsEnough","gasCurrencyAddress","sourceToken","quoteGasAmountInWei","sourceGasBalanceInWei","sellAmount","useRelayQuote","enabled","swapState","fromCurrency","toCurrency","tradeType","topupGas","topupGasAmount","fromChain","isNativeFromCurrency","evmWallet","solanaWallet","amountIsValid","isQuotable","nativeAndWrappedPair","isNativeAndWrappedPair","operation","useQuery","assertHasValue","fromWallet","toWallet","body","useTokenBalance","tokenAddress","foundToken","fetchedValueInWei","response","MINIMUM_GAS_PRICE_WEI","EVM_DEFAULT_FEE_WEI","EVM_GAS_BUFFER_MULTIPLIER","SOLANA_FEE_BUFFER_MULTIPLIER","SOLANA_DEFAULT_FEE_LAMPORTS","ECLIPSE_FEE_BUFFER_MULTIPLIER","ECLIPSE_DEFAULT_FEE_WEI","feeBufferQueryClient","getFeeBufferQueryClient","QueryClient","calculateEvmNativeGasBuffer","gasLimit","defaultBuffer","feeData","legacyError","gasPriceToUse","calculateSvmNativeFeeBuffer","isEclipseChain","multiplier","fallbackBuffer","queryOptions","fetchRelayRequests","r","feeStr","f","max","current","getFeeBufferAmount","client","vmType","queryKey","useBalancesForChain","isCurrent","useGlyphReadScope","useQueryClient","query","TOKEN_REFRESH_INTERVAL_MS","signal","fetchScopedGlyphData","decodeGlyphBalances","shouldRetryGlyphData","attempt","queryTokenList","options","headers","useRelayTokenList","useRelayYourTokensList","chainIds","balancesError","nonZeroBalances","yourTokenList","isYourTokenListLoading","yourTokenListError","relaySupportedTokensBalances","relayToken","AddGasToSourceChainButton","sourceChainNativeSymbol","sourceChainName","addGasToSourceChain","SwapChainAndTokenSelector","defaultChainId","setCurrentChainId","relaySupportedTokensBalancesLength","isYourTokensLoading","searchTerm","setSearchTerm","debouncedSearchTerm","setDebouncedSearchTerm","isTermAnAddress","featuredTokens","tokenList","isError","TokenTile","AlertTriangle","showDivider","tokenBalance","SwapChainAndTokenSelector$1","WalletSwapTopUpGas","destinationChainId","topUpGas","setTopUpGas","topUpDetails","quoteReady","topupValue","topupAmount","topupCurrency","PlusIcon","CheckIcon","WalletTradeFailedView","reason","WalletTradeFailedView$1","WalletTradePendingView","buyAmount","isTxApproved","statusError","toChain","isGlyphDashboard","WalletTradePendingView$1","WalletTradeSuccessView","WalletTradeView","setIntentRequestId","swapTxnId","setSwapTxnId","setIsTxApproved","update","executeSwap","executePending","quoteError","quoteEnabled","appFeesWaived","swapError","switchTokensHandler","prevFromCurrency","prevFromAmount","prevToCurrency","prevToAmount","setBuyAmount","setSellAmount","debouncedAmountFunc","newTradeType","setExecuteError","executeError","swapFromAndToTokensAnimation","setSwapFromAndToTokensAnimation","transferMaxLoading","setTransferMaxLoading","lastFeeBuffer","setLastFeeBuffer","quoteGasWithBuffer","newFeeBuffer","isNativeToken","maxSellAmount","sellTokenBalance","sellTokenBalanceLoading","sellTokenBalanceError","gasFee","buyTokenBalance","buyTokenBalanceLoading","buyTokenBalanceError","quoteGas","sourceGasBalance","sourceGasBalanceLoading","sourceGasBalanceError","sellAmountInWeiToUse","parseUnits","insufficientBalanceError","hasSourceGas","gasUnavailableError","blockingError","appFees","totalImpact","networkFees","currencyInUsd","currencyOutUsd","isFromTokenNative","sourceChain","nativeAddress","isToTokenNative","destinationChainNativeAddress","gasToAdd","feeGasBuffer","newWeiValueForQuote","_e","RELAY_APP_FEE_BPS","execResult","gasAmount","hasEnoughGas","requestId","getRPCErrorString","Wallet","viewCtx","useContext","GlyphViewContext","walletMainViewTab","setWalletMainViewTab","walletView","setExpandFirstActivityRow"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,13,40,41,42,43,61]}
1
+ {"version":3,"file":"WalletRuntime.js","sources":["../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/arrow-up-right.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/fuel.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/plus.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/send.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../node_modules/.pnpm/lucide-react@0.542.0_react@19.1.3/node_modules/lucide-react/dist/esm/icons/x.js","../src/assets/images/USDIcon.png","../src/assets/svg/LinkIcon.tsx","../src/lib/numericInputs.ts","../src/assets/svg/NoTokenIcon.tsx","../src/components/shared/NativeTokenIcon.tsx","../../node_modules/.pnpm/truncate-eth-address@1.0.2/node_modules/truncate-eth-address/dist/index.js","../src/assets/svg/BackIcon.tsx","../src/assets/svg/CopyIcon.tsx","../src/components/shared/CopyButton.tsx","../src/components/shared/WalletViewHeader.tsx","../src/components/shared/WalletViewTemplate.tsx","../src/assets/svg/HelpIcon.tsx","../src/components/ui/tooltip-element.tsx","../src/assets/svg/FailureIcon.tsx","../src/components/widget/internal/WalletFundFailedView.tsx","../src/assets/svg/CaretDownIcon.tsx","../src/assets/svg/LoadingCircleIcon.tsx","../src/components/widget/internal/WalletFundPendingView.tsx","../src/assets/svg/SuccessIcon.tsx","../src/components/widget/internal/WalletFundSuccessView.tsx","../src/components/widget/WalletFundView.tsx","../src/assets/svg/ActivityIcon.tsx","../src/assets/svg/HomeIcon.tsx","../src/assets/svg/TokensIcon.tsx","../src/assets/svg/WalletsTabFilledIcon.tsx","../src/assets/svg/WalletsTabOutlinedIcon.tsx","../src/components/shared/WalletViewFooterNav.tsx","../src/assets/svg/TxSendIcon.tsx","../src/assets/svg/TxSwapIcon.tsx","../src/components/shared/ActivityRow.tsx","../src/components/shared/LinkWithIcon.tsx","../src/components/shared/skeletons/ActivityRowSkeleton.tsx","../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@19_muim6z7bx2nodwhe5jbljsxt2i/node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-collapsible@1.1.12_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@_qwmxdrckbupeeptqza4y3m5kju/node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.1.1_react@19.1.3/node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-accordion@1.2.12_@types+react-dom@19.1.1_@types+react@19.1.1__@types+react@19_lxxemfbyzd55jn6miwtbtq2axa/node_modules/@radix-ui/react-accordion/dist/index.mjs","../src/components/ui/accordion.tsx","../src/components/widget/WalletActivityTab.tsx","../src/assets/svg/PlusSign.tsx","../src/assets/svg/QRIcon.tsx","../src/components/widget/WalletHomeTab.tsx","../src/components/widget/WalletLinkedAccountsTab.tsx","../src/assets/svg/ExpandItemIcon.tsx","../src/assets/svg/LinkedNFTChip.tsx","../src/assets/svg/NFTImgFail.tsx","../src/components/widget/WalletNFTsTab.tsx","../src/components/widget/internal/TokenAndChainIcon.tsx","../src/components/widget/WalletTokensTab.tsx","../src/components/widget/internal/WalletTokenVsNftSwitcher.tsx","../src/components/widget/WalletMainView.tsx","../src/assets/images/profile-gradient.png","../src/assets/svg/EditIcon.tsx","../src/components/widget/WalletProfileView.tsx","../../node_modules/.pnpm/qrcode.react@4.2.0_react@19.1.3/node_modules/qrcode.react/lib/esm/index.js","../src/assets/images/icon.png","../src/components/widget/WalletReceiveView.tsx","../src/components/ui/dialog.tsx","../src/components/widget/internal/SendFundChainAndTokenSelector.tsx","../src/components/ui/input-helper.tsx","../src/components/ui/input.tsx","../src/components/widget/internal/WalletSendFundEnterAddressView.tsx","../src/components/widget/internal/WalletSendFundFailedView.tsx","../src/components/widget/internal/WalletSendFundPendingView.tsx","../src/components/widget/internal/WalletSendFundSuccessView.tsx","../src/components/widget/WalletSendFundView.tsx","../src/lib/customErrors.ts","../src/lib/rpcPublic.ts","../src/hooks/useGlyphRelayEvmAdapter.ts","../src/hooks/useRelayExecute.ts","../src/hooks/useRelayIntentStatus.ts","../src/hooks/useRelayQuote.ts","../src/hooks/useTokenBalance.ts","../src/lib/relayNativeMaxAmount.ts","../src/hooks/useBalancesForChain.ts","../src/hooks/useRelayTokenList.ts","../src/hooks/useRelayYourTokensList.ts","../src/components/widget/internal/AddGasToSourceChainButton.tsx","../src/components/widget/internal/SwapChainAndTokenSelector.tsx","../src/components/widget/internal/WalletSwapTopUpGas.tsx","../src/components/widget/internal/WalletTradeFailedView.tsx","../src/components/widget/internal/WalletTradePendingView.tsx","../src/components/widget/internal/WalletTradeSuccessView.tsx","../src/components/widget/WalletTradeView.tsx","../src/components/widget/WalletRuntime.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M7 7h10v10\", key: \"1tivn9\" }],\n [\"path\", { d: \"M7 17 17 7\", key: \"1vkiza\" }]\n];\nconst ArrowUpRight = createLucideIcon(\"arrow-up-right\", __iconNode);\n\nexport { __iconNode, ArrowUpRight as default };\n//# sourceMappingURL=arrow-up-right.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"3\", x2: \"15\", y1: \"22\", y2: \"22\", key: \"xegly4\" }],\n [\"line\", { x1: \"4\", x2: \"14\", y1: \"9\", y2: \"9\", key: \"xcnuvu\" }],\n [\"path\", { d: \"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18\", key: \"16j0yd\" }],\n [\n \"path\",\n {\n d: \"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5\",\n key: \"7cu91f\"\n }\n ]\n];\nconst Fuel = createLucideIcon(\"fuel\", __iconNode);\n\nexport { __iconNode, Fuel as default };\n//# sourceMappingURL=fuel.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","export default import.meta.ROLLUP_FILE_URL_Bwp$ikdv;","export function LinkIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_2143_5128)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.61602 3.16387C2.96293 2.81696 3.43344 2.62207 3.92404 2.62207H6.92085C7.31525 2.62207 7.63497 2.94179 7.63497 3.33619C7.63497 3.73059 7.31525 4.05031 6.92085 4.05031H3.92404C3.81223 4.05031 3.705 4.09473 3.62594 4.17379C3.54688 4.25285 3.50246 4.36008 3.50246 4.47189V12.4218C3.50246 12.5336 3.54688 12.6409 3.62594 12.7199C3.705 12.799 3.81223 12.8434 3.92404 12.8434H11.874C11.9858 12.8434 12.093 12.799 12.1721 12.7199C12.2511 12.6409 12.2955 12.5336 12.2955 12.4218V9.16244C12.2955 8.76805 12.6153 8.44832 13.0097 8.44832C13.4041 8.44832 13.7238 8.76805 13.7238 9.16244V12.4218C13.7238 12.9124 13.5289 13.3829 13.182 13.7298C12.8351 14.0767 12.3646 14.2716 11.874 14.2716H3.92404C3.43344 14.2716 2.96293 14.0767 2.61602 13.7298C2.26911 13.3829 2.07422 12.9124 2.07422 12.4218V4.47189C2.07422 3.98129 2.26911 3.51078 2.61602 3.16387Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.36743 1.93238C8.36743 1.53718 8.68781 1.2168 9.08301 1.2168H14.3571V6.70854C14.3571 7.10375 14.0367 7.42413 13.6415 7.42413C13.2463 7.42413 12.9259 7.10375 12.9259 6.70854V3.7643L7.50929 9.63969C7.24141 9.93026 6.7887 9.94865 6.49813 9.68077C6.20756 9.41289 6.18917 8.96018 6.45705 8.66961L12.0085 2.64797H9.08301C8.68781 2.64797 8.36743 2.32759 8.36743 1.93238Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_2143_5128\">\n <rect width=\"14.3118\" height=\"15.0273\" fill=\"white\" transform=\"translate(0.792969 0.389648)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","export function limitDecimals(value: string, separator: string, maxDecimals: number): string {\n let formattedValue = value;\n\n if (formattedValue.includes(separator) && !formattedValue.endsWith(separator)) {\n const [whole, decimal] = formattedValue.split(separator);\n if (decimal.length > maxDecimals) {\n formattedValue = `${whole}${separator}${decimal.substring(0, maxDecimals)}`;\n }\n }\n\n return formattedValue;\n}\n\nexport function formatInputNumber(value: string, maxDecimals: number): string {\n let formattedValue = value;\n\n // check for multiple leading zeros (only allow one when followed by decimal)\n if (formattedValue.match(/^0+[.,]/)) formattedValue = formattedValue.replace(/^0+/, \"0\");\n if (formattedValue.match(/^0[0-9]+/)) formattedValue = formattedValue.replace(/^0+/, \"\");\n\n // limit decimal places (separated by either . or ,)\n formattedValue = limitDecimals(formattedValue, \".\", maxDecimals);\n formattedValue = limitDecimals(formattedValue, \",\", maxDecimals);\n\n return formattedValue;\n}\n","export default function NoTokenIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"175\" height=\"175\" viewBox=\"0 0 175 175\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx=\"87.5\" cy=\"87.5\" r=\"87.5\" fill=\"#929792\" />\n <g clipPath=\"url(#clip0_4594_16001)\" filter=\"url(#filter0_d_4594_16001)\">\n <g filter=\"url(#filter1_d_4594_16001)\">\n <path\n d=\"M110.139 65.9764C99.9177 55.4825 88.8017 47.8048 79.3155 43.8935C74.5667 41.9482 70.2392 40.9505 66.6961 40.9515C63.1529 40.9524 60.5034 41.8708 58.6363 43.6892C56.7693 45.5076 55.7814 48.1321 55.687 51.6739C55.5927 55.2158 56.4759 59.5682 58.2954 64.3666C61.9552 73.9526 69.3371 85.2671 79.5579 95.7611C89.7788 106.255 100.895 113.933 110.376 117.839C115.133 119.793 119.457 120.787 123 120.786C126.544 120.785 129.193 119.867 131.06 118.048C132.927 116.23 133.915 113.605 134.009 110.064C134.104 106.522 133.224 102.173 131.396 97.3661C127.741 87.7849 120.359 76.4704 110.139 65.9764ZM51.6994 50.4456L43.6197 58.3151C42.6057 59.3027 41.6178 61.9271 41.5234 65.469C41.429 69.0108 42.3122 73.3632 44.1317 78.1616C47.7916 87.7476 55.1734 99.0622 65.3943 109.556C75.6151 120.05 86.7311 127.728 96.2126 131.634C100.969 133.588 105.294 134.582 108.837 134.581C112.38 134.58 115.029 133.662 116.043 132.674L124.123 124.805C123.741 124.832 123.376 124.843 122.995 124.838C118.721 124.829 113.938 123.685 108.849 121.585C98.6564 117.399 87.2109 109.415 76.6608 98.5828C66.1108 87.7509 58.4315 76.0988 54.5189 65.8024C52.5545 60.662 51.5344 55.8471 51.64 51.5761C51.6466 51.1965 51.6787 50.8108 51.6994 50.4456Z\"\n fill=\"#B9B9B9\"\n />\n </g>\n </g>\n <defs>\n <filter\n id=\"filter0_d_4594_16001\"\n x=\"2.43213\"\n y=\"6.43359\"\n width=\"170.669\"\n height=\"170.668\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4594_16001\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4594_16001\" result=\"shape\" />\n </filter>\n <filter\n id=\"filter1_d_4594_16001\"\n x=\"37.5165\"\n y=\"40.9531\"\n width=\"100.5\"\n height=\"101.629\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"4\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0.458139 0 0 0 0 0.458139 0 0 0 0 0.458139 0 0 0 1 0\"\n />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_4594_16001\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_4594_16001\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_4594_16001\">\n <rect\n width=\"115.034\"\n height=\"115.034\"\n fill=\"white\"\n transform=\"translate(88.8388 6.43359) rotate(45.7554)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { useChainId } from \"wagmi\";\nimport NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\n\nexport default function NativeTokenIcon({ className }: { className?: string }) {\n const { balances } = useGlyph();\n const chainId = useChainId();\n\n const nativeBalance = balances?.tokens?.find?.((balance) => balance.native && balance?.chainId === chainId);\n const logoUrl = nativeBalance?.logo;\n\n return logoUrl ? (\n <img\n src={logoUrl}\n alt={nativeBalance?.symbol}\n className={cn(\"gw-size-6 gw-rounded-full gw-object-cover\", className)}\n />\n ) : (\n <NoTokenIcon className={cn(\"gw-size-6\", className)} />\n );\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Captures 0x + 4 characters, then the last 4 characters.\nvar truncateRegex = /^(0x[a-zA-Z0-9]{4})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/;\n/**\n * Truncates an ethereum address to the format 0x0000…0000\n * @param address Full address to truncate\n * @returns Truncated address\n */\nvar truncateEthAddress = function (address) {\n var match = address.match(truncateRegex);\n if (!match)\n return address;\n return match[1] + \"\\u2026\" + match[2];\n};\nexports.default = truncateEthAddress;\n","function BackIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M15.41 16.59L10.83 12L15.41 7.41L14 6L8 12L14 18L15.41 16.59Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport default BackIcon;\n","interface Props extends React.SVGProps<SVGSVGElement> {\n isCopied?: boolean;\n}\n\nfunction CopyIcon(props: Props) {\n const { isCopied, ...rest } = props;\n return !isCopied ? (\n <svg viewBox=\"0 0 18 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.87207 8.31641C6.87207 7.21184 7.7675 6.31641 8.87207 6.31641H14.5016C15.6061 6.31641 16.5016 7.21184 16.5016 8.31641V13.3281C16.5016 14.4327 15.6061 15.3281 14.5016 15.3281H8.87207C7.7675 15.3281 6.87207 14.4327 6.87207 13.3281V8.31641ZM14.5016 8.31641H8.87207V13.3281H14.5016V8.31641Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.02246 3.36719C3.02246 2.26262 3.91789 1.36719 5.02246 1.36719H10.3771C11.4817 1.36719 12.3771 2.26262 12.3771 3.36719V4.63574H10.3771V3.36719H5.02246V8.99737H5.67204V10.9974H5.02246C3.91789 10.9974 3.02246 10.1019 3.02246 8.99737V3.36719Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <path\n d=\"M8.6 14.6L15.65 7.55L14.25 6.15L8.6 11.8L5.75 8.95L4.35 10.35L8.6 14.6ZM10 20C8.61667 20 7.31667 19.7373 6.1 19.212C4.88333 18.6873 3.825 17.975 2.925 17.075C2.025 16.175 1.31267 15.1167 0.788 13.9C0.262667 12.6833 0 11.3833 0 10C0 8.61667 0.262667 7.31667 0.788 6.1C1.31267 4.88333 2.025 3.825 2.925 2.925C3.825 2.025 4.88333 1.31233 6.1 0.787C7.31667 0.262333 8.61667 0 10 0C11.3833 0 12.6833 0.262333 13.9 0.787C15.1167 1.31233 16.175 2.025 17.075 2.925C17.975 3.825 18.6873 4.88333 19.212 6.1C19.7373 7.31667 20 8.61667 20 10C20 11.3833 19.7373 12.6833 19.212 13.9C18.6873 15.1167 17.975 16.175 17.075 17.075C16.175 17.975 15.1167 18.6873 13.9 19.212C12.6833 19.7373 11.3833 20 10 20Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nexport default CopyIcon;\n","import { memo, useState } from \"react\";\nimport CopyIcon from \"../../assets/svg/CopyIcon\";\nimport { cn, copyToClipboard } from \"../../lib/utils\";\n\ninterface CopyButtonProps {\n text: string;\n textToCopy?: string; // If different than the button text\n className?: string;\n textClassName?: string;\n iconClassName?: string;\n}\n\nconst CopyButton = ({ text, textToCopy, className, textClassName, iconClassName }: CopyButtonProps) => {\n const [copied, setCopied] = useState<boolean>(false);\n\n return (\n <button\n onClick={() => {\n const copied = copyToClipboard(textToCopy || text);\n setCopied(copied);\n\n setTimeout(() => {\n setCopied(false);\n }, 2000);\n }}\n className={cn(\"gw-inline-flex gw-items-center gw-justify-end gw-text-brand-gray-500 gw-gap-1\", className)}\n >\n <span className={textClassName}>{text}</span>\n <span>\n <CopyIcon isCopied={copied} className={cn(\"gw-text-secondary gw-size-4\", iconClassName)} />\n </span>\n </button>\n );\n};\n\nexport default memo(CopyButton);\n","import { X } from \"lucide-react\";\nimport { memo, useEffect, useRef, useState } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport BackIcon from \"../../assets/svg/BackIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport ChainSelector from \"./ChainSelector\";\nimport CopyButton from \"./CopyButton\";\nimport UserAvatar from \"./UserAvatar\";\n\ninterface WalletViewHeaderProps {\n fullScreenHeader?: {\n title?: string;\n onBackClick?: () => void;\n onCloseClick?: () => void;\n };\n onProfileClick?: () => void;\n isStickyHeader: boolean;\n}\n\nconst WalletViewHeader = ({ fullScreenHeader, onProfileClick, isStickyHeader }: WalletViewHeaderProps) => {\n const { user } = useGlyph();\n\n const headerRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n\n // Detect when header is stuck by checking if content has scrolled past header\n useEffect(() => {\n if (!isStickyHeader) return;\n\n if (!fullScreenHeader?.title) return;\n\n const headerElement = headerRef.current;\n if (!headerElement) return;\n\n // Find the scrolling container (gw-wallet-view) and content area\n const scrollContainer = headerElement.closest(\".gw-wallet-view\") as HTMLElement;\n const contentArea = scrollContainer?.querySelector(\".gw-wallet-content\") as HTMLElement;\n if (!scrollContainer || !contentArea) return;\n\n // Get the initial offset - how far the header is from the top of the scroll container\n const headerWrapper = headerElement.closest(\".gw-wallet-header\") as HTMLElement;\n const initialHeaderOffset = headerWrapper ? headerWrapper.offsetTop : 0;\n\n const checkStuck = () => {\n const scrollTop = scrollContainer.scrollTop;\n\n // Header is stuck when we've scrolled past the header's original position\n const isCurrentlyStuck = scrollTop > initialHeaderOffset;\n setIsStuck(isCurrentlyStuck);\n };\n\n // Check initially\n checkStuck();\n\n // Check on scroll\n scrollContainer.addEventListener(\"scroll\", checkStuck, { passive: true });\n\n return () => {\n scrollContainer.removeEventListener(\"scroll\", checkStuck);\n };\n }, [fullScreenHeader?.title, isStickyHeader]);\n\n return fullScreenHeader && fullScreenHeader?.title ? (\n <>\n <div ref={headerRef} className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\">\n <div className=\"gw-size-12\">\n {fullScreenHeader?.onBackClick ? (\n <button\n className={cn(\"gw-size-full gw-inline-flex gw-items-center\")}\n onClick={fullScreenHeader?.onBackClick}\n >\n <span\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-1 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full\"\n : \"gw-border-transparent gw-shadow-none\"\n )}\n >\n <BackIcon\n className={cn(\"gw-transition-all\", isStuck ? \"gw-w-5 gw-h-5\" : \"gw-w-6 gw-h-6\")}\n />\n </span>\n </button>\n ) : null}\n </div>\n <div\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full gw-typography-body2\"\n : \"gw-typography-subtitle1 gw-border-transparent gw-shadow-none\"\n )}\n >\n {fullScreenHeader.title}\n </div>\n <div className=\"gw-size-12\">\n {fullScreenHeader?.onCloseClick ? (\n <button\n className={cn(\"gw-size-full gw-inline-flex gw-items-center\")}\n onClick={fullScreenHeader?.onCloseClick}\n >\n <span\n className={cn(\n \"gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-1 gw-py-1 gw-bg-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-rounded-full\"\n : \"gw-border-transparent gw-shadow-none\"\n )}\n >\n <X className={cn(\"gw-transition-all\", isStuck ? \"gw-w-5 gw-h-5\" : \"gw-w-6 gw-h-6\")} />\n </span>\n </button>\n ) : null}\n </div>\n </div>\n </>\n ) : (\n <>\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\">\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between\">\n <button onClick={onProfileClick} disabled={!user?.hasProfile}>\n <UserAvatar className=\"gw-size-12\" />\n </button>\n\n <div className=\"gw-flex gw-flex-col\">\n <button onClick={onProfileClick} disabled={!user?.hasProfile}>\n <div className=\"gw-mt-1.5 gw-typography-subtitle1 gw-text-left\">{user?.name}</div>\n </button>\n <div>\n <CopyButton\n textClassName=\"gw-max-w-56 gw-break-all gw-typography-body2\"\n text={truncateEthAddress(user!.evmWallet)}\n textToCopy={user!.evmWallet}\n />\n </div>\n </div>\n </div>\n\n {/* Chain Selector */}\n <ChainSelector />\n </div>\n </>\n );\n};\n\nexport default memo(WalletViewHeader);\n","import { cn } from \"../../lib/utils\";\n\nexport type SelectedView = \"main\" | \"add-funds\";\n\nexport type WalletScreenProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n footerCols?: boolean;\n mainFooter?: boolean;\n setView?: (view: SelectedView) => void;\n headerClassName?: string;\n footerClassName?: string;\n isStickyHeader: boolean;\n};\n\nexport function WalletViewTemplate({ mainFooter = true, isStickyHeader, ...props }: WalletScreenProps) {\n return (\n <div\n className={cn(\"gw-wallet-view\", \"gw-overflow-y-auto\")}\n style={{\n scrollbarGutter: \"stable\"\n }}\n >\n {/* Header */}\n {props.header && (\n <div\n className={cn(\n \"gw-wallet-header\",\n isStickyHeader ? \"gw-sticky gw-top-0 gw-z-10\" : \"\",\n props.headerClassName\n )}\n >\n {props.header}\n </div>\n )}\n\n {/* Content */}\n <div className=\"gw-wallet-content\">{props.content}</div>\n\n {/* Footer */}\n {props.footer && (\n <div\n className={cn(\n `${mainFooter ? \"gw-wallet-footer-nav gw-sticky gw-z-10 gw-rounded-full gw-m-4 gw-bottom-4 gw-right-4 gw-mt-0\" + \" \" + \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" : \"gw-wallet-footer\"} ${props.footerCols ? \"gw-flex-col gw-flex-nowrap gw-items-center\" : \"gw-flex-row gw-flex-nowrap\"}`,\n props.footerClassName\n )}\n >\n {props.footer}\n </div>\n )}\n </div>\n );\n}\n","export function HelpIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_114_7349)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.17526 2.92832C4.83466 2.92832 2.12656 5.63641 2.12656 8.97702C2.12656 12.3176 4.83466 15.0257 8.17526 15.0257C11.5159 15.0257 14.224 12.3176 14.224 8.97702C14.224 5.63641 11.5159 2.92832 8.17526 2.92832ZM0.890625 8.97702C0.890625 4.95383 4.15207 1.69238 8.17526 1.69238C12.1985 1.69238 15.4599 4.95383 15.4599 8.97702C15.4599 13.0002 12.1985 16.2617 8.17526 16.2617C4.15207 16.2617 0.890625 13.0002 0.890625 8.97702ZM8.01797 6.09037C7.56262 6.17853 7.23374 6.458 7.13875 6.82319C7.05283 7.15349 6.71542 7.35161 6.38511 7.26569C6.05481 7.17978 5.85669 6.84236 5.94261 6.51206C6.18584 5.57696 6.98216 5.03202 7.78305 4.87696C8.58183 4.72232 9.52098 4.92632 10.1262 5.64535C10.809 6.45654 10.9445 7.49367 10.5598 8.34691C10.2421 9.05142 9.59704 9.57332 8.74137 9.74306V9.94707C8.74137 10.2884 8.4647 10.565 8.1234 10.565C7.78211 10.565 7.50543 10.2884 7.50543 9.94707V9.18426C7.50543 8.84297 7.78211 8.5663 8.1234 8.5663C8.84083 8.5663 9.25922 8.22452 9.43309 7.8389C9.61246 7.44109 9.57333 6.90774 9.18068 6.44127C8.92354 6.13579 8.47542 6.0018 8.01797 6.09037ZM8.0833 12.9359C8.53581 12.9359 8.90264 12.5691 8.90264 12.1166C8.90264 11.664 8.53581 11.2972 8.0833 11.2972C7.63079 11.2972 7.26396 11.664 7.26396 12.1166C7.26396 12.5691 7.63079 12.9359 8.0833 12.9359Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_114_7349\">\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.173828 0.977539)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","\"use client\";\n\nimport { ReactElement, useState } from \"react\";\nimport { HelpIcon } from \"../../assets/svg/HelpIcon\";\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\";\n\nfunction TooltipElement({\n contentClassName,\n triggerClassName,\n description,\n children,\n side,\n align,\n defaultOpen,\n open,\n onOpenChange,\n stopPropagation\n}: {\n contentClassName?: string;\n triggerClassName?: string;\n description: React.ReactNode;\n stopPropagation: boolean;\n children?: React.ReactNode;\n side?: \"bottom\" | \"top\" | \"right\" | \"left\" | undefined;\n align?: \"center\" | \"end\" | \"start\" | undefined;\n defaultOpen?: boolean;\n // When open is undefined internal state is used, but if open is null, undefined is passed\n open?: boolean | null;\n onOpenChange?: ((open: boolean) => void) | undefined;\n}): ReactElement {\n const [openInternal, setOpenInternal] = useState<boolean>(false);\n return (\n <Tooltip\n defaultOpen={defaultOpen}\n delayDuration={0}\n onOpenChange={onOpenChange === undefined ? setOpenInternal : onOpenChange}\n open={open === undefined ? openInternal : open === null ? undefined : open}\n >\n <TooltipTrigger\n asChild\n onClick={(e) => {\n if (stopPropagation) {\n e.stopPropagation();\n }\n if (open === undefined && !onOpenChange) {\n setOpenInternal((v) => !v);\n }\n }}\n >\n {children ?? (\n <div>\n <HelpIcon className={cn(\"gw-text-brand-gray-500 gw-size-5\", triggerClassName)} />\n </div>\n )}\n </TooltipTrigger>\n <TooltipContent align={align} className={cn(\"gw-max-w-72\", contentClassName)} side={side}>\n <div>{description}</div>\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport default TooltipElement;\n","export function FailureIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"105\" height=\"105\" viewBox=\"0 0 105 105\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M20.361 59.0825V55.3721H21.8028C22.5926 55.3721 23.1279 55.8703 23.1279 56.6018C23.1279 57.328 22.5926 57.8263 21.8028 57.8263H20.9918V59.0825H20.361ZM20.9918 57.2644H21.8134C22.2109 57.2644 22.4919 56.9941 22.4919 56.6018C22.4919 56.2043 22.2109 55.934 21.8134 55.934H20.9918V57.2644ZM23.6416 59.0825V55.3721H24.2565V59.0825H23.6416ZM26.0586 59.1461C25.2741 59.1461 24.6698 58.579 24.6698 57.7733C24.6698 56.9676 25.2635 56.4004 26.0321 56.4004C26.7901 56.4004 27.3307 56.9146 27.3307 57.6991C27.3307 57.7945 27.3201 57.8952 27.3148 57.9429H25.29C25.3324 58.351 25.6451 58.6267 26.0586 58.6267C26.3978 58.6267 26.6417 58.4358 26.7265 58.2185L27.2777 58.3669C27.1399 58.8069 26.6735 59.1461 26.0586 59.1461ZM25.3112 57.4923H26.7371C26.6947 57.1372 26.3978 56.9252 26.0374 56.9252C25.6823 56.9252 25.396 57.1319 25.3112 57.4923ZM28.5601 59.1461C28.0459 59.1461 27.6378 58.8599 27.6378 58.3722C27.6378 57.9323 27.924 57.662 28.4594 57.5771L29.3499 57.4393V57.3651C29.3499 57.0789 29.1325 56.9252 28.8092 56.9252C28.4912 56.9252 28.2526 57.1001 28.136 57.3704L27.659 57.1266C27.8233 56.6813 28.2579 56.4004 28.8092 56.4004C29.4983 56.4004 29.9647 56.8033 29.9647 57.3651V59.0825H29.3552V58.8281C29.1749 59.0295 28.9046 59.1461 28.5601 59.1461ZM28.2367 58.3404C28.2367 58.5631 28.4223 58.685 28.6979 58.6797C29.0848 58.6744 29.3499 58.4517 29.3499 58.0701V57.8793L28.576 58.0012C28.3693 58.0383 28.2367 58.1602 28.2367 58.3404ZM31.4905 59.1461C30.9074 59.1461 30.4303 58.8228 30.3667 58.3934L30.8915 58.2556C30.9445 58.5048 31.1724 58.6797 31.4851 58.6797C31.7343 58.6797 31.8986 58.5631 31.8986 58.3828C31.8986 58.2291 31.7873 58.1337 31.4851 58.0489L31.1618 57.9588C30.6901 57.821 30.4515 57.5824 30.4515 57.2008C30.4515 56.7237 30.8226 56.4004 31.4109 56.4004C31.9516 56.4004 32.3598 56.6919 32.4711 57.1372L31.941 57.2379C31.8668 57.0206 31.6654 56.8722 31.4162 56.8722C31.183 56.8669 31.0346 56.9941 31.0346 57.1637C31.0346 57.3174 31.1459 57.4128 31.4427 57.487L31.7714 57.5718C32.2325 57.6991 32.4817 57.927 32.4817 58.3298C32.4817 58.8175 32.0788 59.1461 31.4905 59.1461ZM34.1737 59.1461C33.3892 59.1461 32.785 58.579 32.785 57.7733C32.785 56.9676 33.3786 56.4004 34.1472 56.4004C34.9052 56.4004 35.4459 56.9146 35.4459 57.6991C35.4459 57.7945 35.4353 57.8952 35.43 57.9429H33.4051C33.4475 58.351 33.7603 58.6267 34.1737 58.6267C34.513 58.6267 34.7568 58.4358 34.8416 58.2185L35.3929 58.3669C35.255 58.8069 34.7886 59.1461 34.1737 59.1461ZM33.4263 57.4923H34.8522C34.8098 57.1372 34.513 56.9252 34.1525 56.9252C33.7974 56.9252 33.5111 57.1319 33.4263 57.4923ZM38.2586 59.1461C37.5006 59.1461 36.9441 58.5843 36.9441 57.7733C36.9441 56.9676 37.5006 56.4004 38.2586 56.4004C38.6138 56.4004 38.9265 56.5276 39.1385 56.7608V55.3721H39.7534V59.0825H39.1385V58.791C38.9159 59.0242 38.6085 59.1461 38.2586 59.1461ZM37.559 57.7733C37.559 58.2503 37.8982 58.5896 38.3487 58.5896C38.7993 58.5896 39.1385 58.2503 39.1385 57.7733C39.1385 57.3015 38.7993 56.957 38.3487 56.957C37.8982 56.957 37.559 57.2962 37.559 57.7733ZM41.559 59.1461C40.7745 59.1461 40.1702 58.579 40.1702 57.7733C40.1702 56.9729 40.7798 56.4004 41.559 56.4004C42.3382 56.4004 42.9477 56.9729 42.9477 57.7733C42.9477 58.579 42.3382 59.1461 41.559 59.1461ZM40.7851 57.7733C40.7851 58.245 41.1084 58.5896 41.559 58.5896C42.0042 58.5896 42.3329 58.245 42.3329 57.7733C42.3329 57.3015 42.0042 56.957 41.559 56.957C41.1084 56.957 40.7851 57.3015 40.7851 57.7733ZM44.5861 59.0825V56.464H45.201V56.7184C45.3653 56.5117 45.625 56.4004 45.9536 56.4004C46.5367 56.4004 46.9449 56.8086 46.9449 57.3969V59.0825H46.33V57.5612C46.33 57.1902 46.118 56.957 45.7734 56.957C45.4236 56.957 45.201 57.1955 45.201 57.5612V59.0825H44.5861ZM48.7372 59.1461C47.9527 59.1461 47.3484 58.579 47.3484 57.7733C47.3484 56.9729 47.958 56.4004 48.7372 56.4004C49.5164 56.4004 50.1259 56.9729 50.1259 57.7733C50.1259 58.579 49.5164 59.1461 48.7372 59.1461ZM47.9633 57.7733C47.9633 58.245 48.2866 58.5896 48.7372 58.5896C49.1824 58.5896 49.5111 58.245 49.5111 57.7733C49.5111 57.3015 49.1824 56.957 48.7372 56.957C48.2866 56.957 47.9633 57.3015 47.9633 57.7733ZM51.6924 59.1143C51.1517 59.1143 50.7966 58.7804 50.7966 58.2662V56.9888H50.2983V56.464H50.5104C50.7224 56.464 50.7966 56.3368 50.7966 55.9764V55.7643H51.4115V56.464H52.0846V56.9888H51.4115V58.2291C51.4115 58.4676 51.544 58.6055 51.7719 58.6055C51.8938 58.6055 52.0157 58.579 52.1164 58.5472L52.2013 59.0295C52.0475 59.0825 51.8726 59.1143 51.6924 59.1143ZM55.0089 59.1461C54.2191 59.1461 53.6466 58.579 53.6466 57.7786C53.6466 56.9729 54.2244 56.4004 55.0089 56.4004C55.6344 56.4004 56.1061 56.7608 56.2227 57.222L55.6715 57.3704C55.6026 57.1584 55.364 56.957 55.0195 56.957C54.5848 56.957 54.2615 57.275 54.2615 57.7786C54.2615 58.2768 54.5848 58.5896 55.0195 58.5896C55.364 58.5896 55.6026 58.3881 55.6715 58.1814L56.2227 58.3298C56.1061 58.7857 55.6344 59.1461 55.0089 59.1461ZM56.6429 59.0825V55.3721H57.2578V59.0825H56.6429ZM59.0599 59.1461C58.2754 59.1461 57.6712 58.579 57.6712 57.7733C57.6712 56.9729 58.2807 56.4004 59.0599 56.4004C59.8391 56.4004 60.4487 56.9729 60.4487 57.7733C60.4487 58.579 59.8391 59.1461 59.0599 59.1461ZM58.286 57.7733C58.286 58.245 58.6094 58.5896 59.0599 58.5896C59.5052 58.5896 59.8338 58.245 59.8338 57.7733C59.8338 57.3015 59.5052 56.957 59.0599 56.957C58.6094 56.957 58.286 57.3015 58.286 57.7733ZM61.8765 59.1461C61.2934 59.1461 60.8163 58.8228 60.7527 58.3934L61.2775 58.2556C61.3305 58.5048 61.5584 58.6797 61.8712 58.6797C62.1203 58.6797 62.2846 58.5631 62.2846 58.3828C62.2846 58.2291 62.1733 58.1337 61.8712 58.0489L61.5478 57.9588C61.0761 57.821 60.8375 57.5824 60.8375 57.2008C60.8375 56.7237 61.2086 56.4004 61.797 56.4004C62.3376 56.4004 62.7458 56.6919 62.8571 57.1372L62.327 57.2379C62.2528 57.0206 62.0514 56.8722 61.8023 56.8722C61.569 56.8669 61.4206 56.9941 61.4206 57.1637C61.4206 57.3174 61.5319 57.4128 61.8288 57.487L62.1574 57.5718C62.6186 57.6991 62.8677 57.927 62.8677 58.3298C62.8677 58.8175 62.4648 59.1461 61.8765 59.1461ZM64.5597 59.1461C63.7752 59.1461 63.171 58.579 63.171 57.7733C63.171 56.9676 63.7646 56.4004 64.5332 56.4004C65.2912 56.4004 65.8319 56.9146 65.8319 57.6991C65.8319 57.7945 65.8213 57.8952 65.816 57.9429H63.7911C63.8336 58.351 64.1463 58.6267 64.5597 58.6267C64.899 58.6267 65.1428 58.4358 65.2276 58.2185L65.7789 58.3669C65.6411 58.8069 65.1746 59.1461 64.5597 59.1461ZM63.8124 57.4923H65.2382C65.1958 57.1372 64.899 56.9252 64.5385 56.9252C64.1834 56.9252 63.8972 57.1319 63.8124 57.4923ZM68.6447 59.1143C68.104 59.1143 67.7489 58.7804 67.7489 58.2662V56.9888H67.2506V56.464H67.4626C67.6746 56.464 67.7489 56.3368 67.7489 55.9764V55.7643H68.3637V56.464H69.0369V56.9888H68.3637V58.2291C68.3637 58.4676 68.4962 58.6055 68.7242 58.6055C68.8461 58.6055 68.968 58.579 69.0687 58.5472L69.1535 59.0295C68.9998 59.0825 68.8249 59.1143 68.6447 59.1143ZM69.5137 59.0825V55.3721H70.1286V56.7661C70.2929 56.5276 70.5526 56.4004 70.8813 56.4004C71.4643 56.4004 71.8725 56.8086 71.8725 57.3969V59.0825H71.2576V57.5612C71.2576 57.1902 71.0456 56.957 70.701 56.957C70.3512 56.957 70.1286 57.1955 70.1286 57.5612V59.0825H69.5137ZM72.3983 59.0825V56.464H73.0132V59.0825H72.3983ZM72.2976 55.7219C72.2976 55.4993 72.4778 55.3138 72.7058 55.3138C72.939 55.3138 73.1192 55.4993 73.1192 55.7219C73.1192 55.9499 72.939 56.1354 72.7058 56.1354C72.4778 56.1354 72.2976 55.9499 72.2976 55.7219ZM74.5764 59.1461C73.9934 59.1461 73.5163 58.8228 73.4527 58.3934L73.9775 58.2556C74.0305 58.5048 74.2584 58.6797 74.5711 58.6797C74.8203 58.6797 74.9846 58.5631 74.9846 58.3828C74.9846 58.2291 74.8733 58.1337 74.5711 58.0489L74.2478 57.9588C73.776 57.821 73.5375 57.5824 73.5375 57.2008C73.5375 56.7237 73.9085 56.4004 74.4969 56.4004C75.0376 56.4004 75.4457 56.6919 75.557 57.1372L75.027 57.2379C74.9528 57.0206 74.7513 56.8722 74.5022 56.8722C74.269 56.8669 74.1206 56.9941 74.1206 57.1637C74.1206 57.3174 74.2319 57.4128 74.5287 57.487L74.8574 57.5718C75.3185 57.6991 75.5676 57.927 75.5676 58.3298C75.5676 58.8175 75.1648 59.1461 74.5764 59.1461ZM78.3825 59.1143C77.8418 59.1143 77.4867 58.7804 77.4867 58.2662V56.9888H76.9884V56.464H77.2004C77.4125 56.464 77.4867 56.3368 77.4867 55.9764V55.7643H78.1015V56.464H78.7747V56.9888H78.1015V58.2291C78.1015 58.4676 78.2341 58.6055 78.462 58.6055C78.5839 58.6055 78.7058 58.579 78.8065 58.5472L78.8913 59.0295C78.7376 59.0825 78.5627 59.1143 78.3825 59.1143ZM80.0678 59.1461C79.5537 59.1461 79.1455 58.8599 79.1455 58.3722C79.1455 57.9323 79.4317 57.662 79.9671 57.5771L80.8576 57.4393V57.3651C80.8576 57.0789 80.6403 56.9252 80.3169 56.9252C79.9989 56.9252 79.7604 57.1001 79.6438 57.3704L79.1667 57.1266C79.331 56.6813 79.7657 56.4004 80.3169 56.4004C81.006 56.4004 81.4725 56.8033 81.4725 57.3651V59.0825H80.8629V58.8281C80.6827 59.0295 80.4124 59.1461 80.0678 59.1461ZM79.7445 58.3404C79.7445 58.5631 79.93 58.685 80.2056 58.6797C80.5926 58.6744 80.8576 58.4517 80.8576 58.0701V57.8793L80.0837 58.0012C79.877 58.0383 79.7445 58.1602 79.7445 58.3404ZM83.4859 59.1461C83.136 59.1461 82.8286 59.0242 82.606 58.791V59.0825H81.9911V55.3721H82.606V56.7608C82.818 56.5276 83.1254 56.4004 83.4859 56.4004C84.2438 56.4004 84.8004 56.9676 84.8004 57.7733C84.8004 58.5843 84.2438 59.1461 83.4859 59.1461ZM82.606 57.7733C82.606 58.2503 82.9452 58.5896 83.3957 58.5896C83.8463 58.5896 84.1855 58.2503 84.1855 57.7733C84.1855 57.2962 83.8463 56.957 83.3957 56.957C82.9452 56.957 82.606 57.3015 82.606 57.7733ZM85.3637 59.1143C85.1411 59.1143 84.9714 58.9394 84.9714 58.7221C84.9714 58.5101 85.1411 58.3298 85.3637 58.3298C85.5863 58.3298 85.7559 58.5101 85.7559 58.7221C85.7559 58.9394 85.5863 59.1143 85.3637 59.1143Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M40.2522 49.5017C38.9037 49.5017 38.0556 48.5942 37.9538 47.7885L38.8613 47.5341C38.9631 47.9836 39.4295 48.5688 40.2437 48.5688C40.8458 48.5688 41.3038 48.2804 41.3038 47.7716C41.3038 47.3305 40.9307 47.0931 40.4133 46.9489L39.6246 46.7199C38.6917 46.4485 38.1234 45.9312 38.1234 45.0831C38.1234 44.0314 38.9885 43.3614 40.108 43.3614C41.3802 43.3614 42.0756 44.0908 42.2282 44.8795L41.3123 45.134C41.219 44.7269 40.8543 44.2943 40.1504 44.2943C39.5652 44.2943 39.1581 44.5912 39.1581 45.0661C39.1581 45.5071 39.4804 45.7107 40.0317 45.8633L40.8204 46.0838C41.8381 46.3807 42.3385 46.9319 42.3385 47.7546C42.3385 48.8232 41.4141 49.5017 40.2522 49.5017ZM44.6365 49.5017C43.6951 49.5017 43.0421 48.8317 43.0421 47.8055V45.2103H44.0259V47.6528C44.0259 48.2634 44.3821 48.6112 44.9249 48.6112C45.4761 48.6112 45.8323 48.2041 45.8323 47.5765V45.2103H46.8161V49.3999H45.8323V48.8995C45.5609 49.2896 45.1539 49.5017 44.6365 49.5017ZM49.5742 49.5017C48.3105 49.5017 47.3946 48.5942 47.3946 47.3136C47.3946 46.0245 48.319 45.1085 49.5742 45.1085C50.5749 45.1085 51.3297 45.6852 51.5163 46.4231L50.6343 46.6605C50.5241 46.3213 50.1424 45.999 49.5911 45.999C48.8957 45.999 48.3784 46.5079 48.3784 47.3136C48.3784 48.1108 48.8957 48.6112 49.5911 48.6112C50.1424 48.6112 50.5241 48.2889 50.6343 47.9581L51.5163 48.1956C51.3297 48.925 50.5749 49.5017 49.5742 49.5017ZM54.0797 49.5017C52.816 49.5017 51.9001 48.5942 51.9001 47.3136C51.9001 46.0245 52.8245 45.1085 54.0797 45.1085C55.0805 45.1085 55.8353 45.6852 56.0219 46.4231L55.1398 46.6605C55.0296 46.3213 54.6479 45.999 54.0967 45.999C53.4012 45.999 52.8839 46.5079 52.8839 47.3136C52.8839 48.1108 53.4012 48.6112 54.0967 48.6112C54.6479 48.6112 55.0296 48.2889 55.1398 47.9581L56.0219 48.1956C55.8353 48.925 55.0805 49.5017 54.0797 49.5017ZM58.6276 49.5017C57.3725 49.5017 56.4056 48.5942 56.4056 47.3051C56.4056 46.016 57.3555 45.1085 58.5852 45.1085C59.798 45.1085 60.6631 45.9312 60.6631 47.1864C60.6631 47.339 60.6461 47.5002 60.6376 47.5765H57.3979C57.4657 48.2295 57.9661 48.6705 58.6276 48.6705C59.1704 48.6705 59.5606 48.3652 59.6962 48.0175L60.5783 48.255C60.3578 48.9589 59.6114 49.5017 58.6276 49.5017ZM57.4318 46.8556H59.7132C59.6454 46.2874 59.1704 45.9481 58.5937 45.9481C58.0255 45.9481 57.5675 46.2789 57.4318 46.8556ZM62.8588 49.5017C61.9259 49.5017 61.1626 48.9843 61.0608 48.2974L61.9004 48.0769C61.9853 48.4755 62.3499 48.7553 62.8503 48.7553C63.2489 48.7553 63.5118 48.5688 63.5118 48.2804C63.5118 48.0345 63.3337 47.8818 62.8503 47.7461L62.333 47.6019C61.5782 47.3814 61.1965 46.9998 61.1965 46.3891C61.1965 45.6259 61.7902 45.1085 62.7316 45.1085C63.5966 45.1085 64.2497 45.575 64.4278 46.2874L63.5797 46.4485C63.4609 46.1008 63.1387 45.8633 62.7401 45.8633C62.3669 45.8548 62.1294 46.0584 62.1294 46.3298C62.1294 46.5757 62.3075 46.7284 62.7825 46.8471L63.3083 46.9828C64.0461 47.1864 64.4447 47.551 64.4447 48.1956C64.4447 48.9759 63.8002 49.5017 62.8588 49.5017ZM66.6686 49.5017C65.7357 49.5017 64.9724 48.9843 64.8706 48.2974L65.7103 48.0769C65.7951 48.4755 66.1598 48.7553 66.6601 48.7553C67.0587 48.7553 67.3217 48.5688 67.3217 48.2804C67.3217 48.0345 67.1436 47.8818 66.6601 47.7461L66.1428 47.6019C65.388 47.3814 65.0063 46.9998 65.0063 46.3891C65.0063 45.6259 65.6 45.1085 66.5414 45.1085C67.4065 45.1085 68.0595 45.575 68.2376 46.2874L67.3895 46.4485C67.2708 46.1008 66.9485 45.8633 66.5499 45.8633C66.1767 45.8548 65.9393 46.0584 65.9393 46.3298C65.9393 46.5757 66.1174 46.7284 66.5923 46.8471L67.1181 46.9828C67.856 47.1864 68.2546 47.551 68.2546 48.1956C68.2546 48.9759 67.61 49.5017 66.6686 49.5017Z\"\n fill=\"black\"\n />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint0_linear_266_5356)\" />\n <path d=\"M33.2988 33.1992L72.6068 72.5072\" stroke=\"#FAFAFA\" strokeWidth=\"4\" strokeLinecap=\"round\" />\n <path d=\"M72.6074 33.1992L33.2995 72.5072\" stroke=\"#FAFAFA\" strokeWidth=\"4\" strokeLinecap=\"round\" />\n <defs>\n <linearGradient\n id=\"paint0_linear_266_5356\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#E67E75\" />\n <stop offset=\"1\" stopColor=\"#DF5448\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport CopyButton from \"../../shared/CopyButton\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletFundFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n id: string;\n}\n\nconst WalletFundFailedView: React.FC<WalletFundFailedViewProps> = ({ onEnd, onShowActivity, id }) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n <div className=\"gw-my-10 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n <span>Transaction ID: </span>\n <CopyButton\n className=\"!gw-text-foreground\"\n textToCopy={id}\n text={id.slice(0, 20) + \"...\"}\n />\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletFundFailedView);\n","export function CaretDownIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"15\" viewBox=\"0 0 15 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.3943 0.341538C14.0449 -0.00777915 13.4786 -0.00777917 13.1293 0.341538L7.5004 5.97041L1.87152 0.341538C1.52221 -0.0077797 0.955853 -0.00777972 0.606536 0.341538C0.257219 0.690854 0.257219 1.25721 0.606536 1.60652L6.86791 7.86789C7.21722 8.21721 7.78358 8.21721 8.13289 7.86789L14.3943 1.60653C14.7436 1.25721 14.7436 0.690855 14.3943 0.341538Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","function LoadingCircleIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"255\" height=\"254\" viewBox=\"0 0 255 254\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M237.421 190.499C252.107 165.061 257.519 135.317 252.735 106.337C247.95 77.3557 233.264 50.9305 211.181 31.5634C189.097 12.1963 160.981 1.08568 131.623 0.124617C102.266 -0.836447 73.4833 8.41152 50.18 26.2928C26.8767 44.174 10.4944 69.5822 3.82443 98.1881C-2.84552 126.794 0.609563 156.828 13.601 183.172C26.5924 209.516 48.3163 230.54 75.0713 242.662C101.826 254.785 131.957 257.256 160.329 249.653L159.284 245.754C131.814 253.114 102.642 250.722 76.7374 238.985C50.8331 227.248 29.7999 206.892 17.2216 181.386C4.64325 155.88 1.29802 126.801 7.75589 99.1047C14.2138 71.4085 30.0752 46.8082 52.6375 29.4955C75.1998 12.1828 103.067 3.22887 131.491 4.15937C159.915 5.08988 187.137 15.8472 208.519 34.5985C229.901 53.3498 244.119 78.9348 248.752 106.994C253.384 135.053 248.144 163.851 233.925 188.48L237.421 190.499Z\"\n fill=\"url(#paint0_linear_116_7923)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_116_7923\"\n x1=\"127.469\"\n y1=\"0.0566442\"\n x2=\"187.157\"\n y2=\"231.817\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#8FCA94\" />\n <stop offset=\"1\" stopColor=\"#5D9461\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n\nexport default LoadingCircleIcon;\n","import { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport CopyButton from \"../../shared/CopyButton\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport NativeTokenIcon from \"../../shared/NativeTokenIcon\";\n\ninterface WalletFundPendingViewProps {\n onBack: () => void;\n id: string;\n value: number;\n}\n\nconst WalletFundPendingView: React.FC<WalletFundPendingViewProps> = ({ onBack, id, value }) => {\n const { user, nativeSymbol } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n <h6>Finalizing Purchase</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">1-5 mins</span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-justify-center gw-relative gw-z-[1]\">\n <NativeTokenIcon className=\"gw-size-8\" />\n\n <div className=\"gw-typography-h6 gw-ml-3\">\n <span>{value}</span> <span className=\"gw-text-brand-gray-500\">{nativeSymbol}</span>\n </div>\n </div>\n\n <div className=\"gw-my-4 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar className=\"gw-size-8\" />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">{user?.name}</div>\n <div className=\"gw-text-brand-gray-600\">{truncateEthAddress(user!.evmWallet)}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500\">\n <span>Transaction ID: </span>\n <CopyButton textToCopy={id} text={id.slice(0, 20) + \"...\"} />\n </span>\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletFundPendingView);\n","export function SuccessIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"105\" height=\"105\" viewBox=\"0 0 105 105\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M20.361 59.082V55.3716H21.8028C22.5926 55.3716 23.1279 55.8699 23.1279 56.6013C23.1279 57.3275 22.5926 57.8258 21.8028 57.8258H20.9918V59.082H20.361ZM20.9918 57.2639H21.8134C22.2109 57.2639 22.4919 56.9936 22.4919 56.6013C22.4919 56.2038 22.2109 55.9335 21.8134 55.9335H20.9918V57.2639ZM23.6416 59.082V55.3716H24.2565V59.082H23.6416ZM26.0586 59.1456C25.2741 59.1456 24.6698 58.5785 24.6698 57.7728C24.6698 56.9671 25.2635 56.3999 26.0321 56.3999C26.7901 56.3999 27.3307 56.9141 27.3307 57.6986C27.3307 57.794 27.3201 57.8947 27.3148 57.9424H25.29C25.3324 58.3505 25.6451 58.6262 26.0586 58.6262C26.3978 58.6262 26.6417 58.4354 26.7265 58.218L27.2777 58.3664C27.1399 58.8064 26.6735 59.1456 26.0586 59.1456ZM25.3112 57.4918H26.7371C26.6947 57.1367 26.3978 56.9247 26.0374 56.9247C25.6823 56.9247 25.396 57.1314 25.3112 57.4918ZM28.5601 59.1456C28.0459 59.1456 27.6378 58.8594 27.6378 58.3717C27.6378 57.9318 27.924 57.6615 28.4594 57.5767L29.3499 57.4388V57.3646C29.3499 57.0784 29.1325 56.9247 28.8092 56.9247C28.4912 56.9247 28.2526 57.0996 28.136 57.3699L27.659 57.1261C27.8233 56.6808 28.2579 56.3999 28.8092 56.3999C29.4983 56.3999 29.9647 56.8028 29.9647 57.3646V59.082H29.3552V58.8276C29.1749 59.029 28.9046 59.1456 28.5601 59.1456ZM28.2367 58.3399C28.2367 58.5626 28.4223 58.6845 28.6979 58.6792C29.0848 58.6739 29.3499 58.4513 29.3499 58.0696V57.8788L28.576 58.0007C28.3693 58.0378 28.2367 58.1597 28.2367 58.3399ZM31.4905 59.1456C30.9074 59.1456 30.4303 58.8223 30.3667 58.393L30.8915 58.2551C30.9445 58.5043 31.1724 58.6792 31.4851 58.6792C31.7343 58.6792 31.8986 58.5626 31.8986 58.3823C31.8986 58.2286 31.7873 58.1332 31.4851 58.0484L31.1618 57.9583C30.6901 57.8205 30.4515 57.582 30.4515 57.2003C30.4515 56.7233 30.8226 56.3999 31.4109 56.3999C31.9516 56.3999 32.3598 56.6915 32.4711 57.1367L31.941 57.2374C31.8668 57.0201 31.6654 56.8717 31.4162 56.8717C31.183 56.8664 31.0346 56.9936 31.0346 57.1632C31.0346 57.3169 31.1459 57.4123 31.4427 57.4865L31.7714 57.5714C32.2325 57.6986 32.4817 57.9265 32.4817 58.3293C32.4817 58.817 32.0788 59.1456 31.4905 59.1456ZM34.1737 59.1456C33.3892 59.1456 32.785 58.5785 32.785 57.7728C32.785 56.9671 33.3786 56.3999 34.1472 56.3999C34.9052 56.3999 35.4459 56.9141 35.4459 57.6986C35.4459 57.794 35.4353 57.8947 35.43 57.9424H33.4051C33.4475 58.3505 33.7603 58.6262 34.1737 58.6262C34.513 58.6262 34.7568 58.4354 34.8416 58.218L35.3929 58.3664C35.255 58.8064 34.7886 59.1456 34.1737 59.1456ZM33.4263 57.4918H34.8522C34.8098 57.1367 34.513 56.9247 34.1525 56.9247C33.7974 56.9247 33.5111 57.1314 33.4263 57.4918ZM38.2586 59.1456C37.5006 59.1456 36.9441 58.5838 36.9441 57.7728C36.9441 56.9671 37.5006 56.3999 38.2586 56.3999C38.6138 56.3999 38.9265 56.5271 39.1385 56.7604V55.3716H39.7534V59.082H39.1385V58.7905C38.9159 59.0237 38.6085 59.1456 38.2586 59.1456ZM37.559 57.7728C37.559 58.2498 37.8982 58.5891 38.3487 58.5891C38.7993 58.5891 39.1385 58.2498 39.1385 57.7728C39.1385 57.301 38.7993 56.9565 38.3487 56.9565C37.8982 56.9565 37.559 57.2957 37.559 57.7728ZM41.559 59.1456C40.7745 59.1456 40.1702 58.5785 40.1702 57.7728C40.1702 56.9724 40.7798 56.3999 41.559 56.3999C42.3382 56.3999 42.9477 56.9724 42.9477 57.7728C42.9477 58.5785 42.3382 59.1456 41.559 59.1456ZM40.7851 57.7728C40.7851 58.2445 41.1084 58.5891 41.559 58.5891C42.0042 58.5891 42.3329 58.2445 42.3329 57.7728C42.3329 57.301 42.0042 56.9565 41.559 56.9565C41.1084 56.9565 40.7851 57.301 40.7851 57.7728ZM44.5861 59.082V56.4635H45.201V56.718C45.3653 56.5112 45.625 56.3999 45.9536 56.3999C46.5367 56.3999 46.9449 56.8081 46.9449 57.3964V59.082H46.33V57.5608C46.33 57.1897 46.118 56.9565 45.7734 56.9565C45.4236 56.9565 45.201 57.195 45.201 57.5608V59.082H44.5861ZM48.7372 59.1456C47.9527 59.1456 47.3484 58.5785 47.3484 57.7728C47.3484 56.9724 47.958 56.3999 48.7372 56.3999C49.5164 56.3999 50.1259 56.9724 50.1259 57.7728C50.1259 58.5785 49.5164 59.1456 48.7372 59.1456ZM47.9633 57.7728C47.9633 58.2445 48.2866 58.5891 48.7372 58.5891C49.1824 58.5891 49.5111 58.2445 49.5111 57.7728C49.5111 57.301 49.1824 56.9565 48.7372 56.9565C48.2866 56.9565 47.9633 57.301 47.9633 57.7728ZM51.6924 59.1138C51.1517 59.1138 50.7966 58.7799 50.7966 58.2657V56.9883H50.2983V56.4635H50.5104C50.7224 56.4635 50.7966 56.3363 50.7966 55.9759V55.7638H51.4115V56.4635H52.0846V56.9883H51.4115V58.2286C51.4115 58.4672 51.544 58.605 51.7719 58.605C51.8938 58.605 52.0157 58.5785 52.1164 58.5467L52.2013 59.029C52.0475 59.082 51.8726 59.1138 51.6924 59.1138ZM55.0089 59.1456C54.2191 59.1456 53.6466 58.5785 53.6466 57.7781C53.6466 56.9724 54.2244 56.3999 55.0089 56.3999C55.6344 56.3999 56.1061 56.7604 56.2227 57.2215L55.6715 57.3699C55.6026 57.1579 55.364 56.9565 55.0195 56.9565C54.5848 56.9565 54.2615 57.2745 54.2615 57.7781C54.2615 58.2763 54.5848 58.5891 55.0195 58.5891C55.364 58.5891 55.6026 58.3876 55.6715 58.1809L56.2227 58.3293C56.1061 58.7852 55.6344 59.1456 55.0089 59.1456ZM56.6429 59.082V55.3716H57.2578V59.082H56.6429ZM59.0599 59.1456C58.2754 59.1456 57.6712 58.5785 57.6712 57.7728C57.6712 56.9724 58.2807 56.3999 59.0599 56.3999C59.8391 56.3999 60.4487 56.9724 60.4487 57.7728C60.4487 58.5785 59.8391 59.1456 59.0599 59.1456ZM58.286 57.7728C58.286 58.2445 58.6094 58.5891 59.0599 58.5891C59.5052 58.5891 59.8338 58.2445 59.8338 57.7728C59.8338 57.301 59.5052 56.9565 59.0599 56.9565C58.6094 56.9565 58.286 57.301 58.286 57.7728ZM61.8765 59.1456C61.2934 59.1456 60.8163 58.8223 60.7527 58.393L61.2775 58.2551C61.3305 58.5043 61.5584 58.6792 61.8712 58.6792C62.1203 58.6792 62.2846 58.5626 62.2846 58.3823C62.2846 58.2286 62.1733 58.1332 61.8712 58.0484L61.5478 57.9583C61.0761 57.8205 60.8375 57.582 60.8375 57.2003C60.8375 56.7233 61.2086 56.3999 61.797 56.3999C62.3376 56.3999 62.7458 56.6915 62.8571 57.1367L62.327 57.2374C62.2528 57.0201 62.0514 56.8717 61.8023 56.8717C61.569 56.8664 61.4206 56.9936 61.4206 57.1632C61.4206 57.3169 61.5319 57.4123 61.8288 57.4865L62.1574 57.5714C62.6186 57.6986 62.8677 57.9265 62.8677 58.3293C62.8677 58.817 62.4648 59.1456 61.8765 59.1456ZM64.5597 59.1456C63.7752 59.1456 63.171 58.5785 63.171 57.7728C63.171 56.9671 63.7646 56.3999 64.5332 56.3999C65.2912 56.3999 65.8319 56.9141 65.8319 57.6986C65.8319 57.794 65.8213 57.8947 65.816 57.9424H63.7911C63.8336 58.3505 64.1463 58.6262 64.5597 58.6262C64.899 58.6262 65.1428 58.4354 65.2276 58.218L65.7789 58.3664C65.6411 58.8064 65.1746 59.1456 64.5597 59.1456ZM63.8124 57.4918H65.2382C65.1958 57.1367 64.899 56.9247 64.5385 56.9247C64.1834 56.9247 63.8972 57.1314 63.8124 57.4918ZM68.6447 59.1138C68.104 59.1138 67.7489 58.7799 67.7489 58.2657V56.9883H67.2506V56.4635H67.4626C67.6746 56.4635 67.7489 56.3363 67.7489 55.9759V55.7638H68.3637V56.4635H69.0369V56.9883H68.3637V58.2286C68.3637 58.4672 68.4962 58.605 68.7242 58.605C68.8461 58.605 68.968 58.5785 69.0687 58.5467L69.1535 59.029C68.9998 59.082 68.8249 59.1138 68.6447 59.1138ZM69.5137 59.082V55.3716H70.1286V56.7657C70.2929 56.5271 70.5526 56.3999 70.8813 56.3999C71.4643 56.3999 71.8725 56.8081 71.8725 57.3964V59.082H71.2576V57.5608C71.2576 57.1897 71.0456 56.9565 70.701 56.9565C70.3512 56.9565 70.1286 57.195 70.1286 57.5608V59.082H69.5137ZM72.3983 59.082V56.4635H73.0132V59.082H72.3983ZM72.2976 55.7214C72.2976 55.4988 72.4778 55.3133 72.7058 55.3133C72.939 55.3133 73.1192 55.4988 73.1192 55.7214C73.1192 55.9494 72.939 56.1349 72.7058 56.1349C72.4778 56.1349 72.2976 55.9494 72.2976 55.7214ZM74.5764 59.1456C73.9934 59.1456 73.5163 58.8223 73.4527 58.393L73.9775 58.2551C74.0305 58.5043 74.2584 58.6792 74.5711 58.6792C74.8203 58.6792 74.9846 58.5626 74.9846 58.3823C74.9846 58.2286 74.8733 58.1332 74.5711 58.0484L74.2478 57.9583C73.776 57.8205 73.5375 57.582 73.5375 57.2003C73.5375 56.7233 73.9085 56.3999 74.4969 56.3999C75.0376 56.3999 75.4457 56.6915 75.557 57.1367L75.027 57.2374C74.9528 57.0201 74.7513 56.8717 74.5022 56.8717C74.269 56.8664 74.1206 56.9936 74.1206 57.1632C74.1206 57.3169 74.2319 57.4123 74.5287 57.4865L74.8574 57.5714C75.3185 57.6986 75.5676 57.9265 75.5676 58.3293C75.5676 58.817 75.1648 59.1456 74.5764 59.1456ZM78.3825 59.1138C77.8418 59.1138 77.4867 58.7799 77.4867 58.2657V56.9883H76.9884V56.4635H77.2004C77.4125 56.4635 77.4867 56.3363 77.4867 55.9759V55.7638H78.1015V56.4635H78.7747V56.9883H78.1015V58.2286C78.1015 58.4672 78.2341 58.605 78.462 58.605C78.5839 58.605 78.7058 58.5785 78.8065 58.5467L78.8913 59.029C78.7376 59.082 78.5627 59.1138 78.3825 59.1138ZM80.0678 59.1456C79.5537 59.1456 79.1455 58.8594 79.1455 58.3717C79.1455 57.9318 79.4317 57.6615 79.9671 57.5767L80.8576 57.4388V57.3646C80.8576 57.0784 80.6403 56.9247 80.3169 56.9247C79.9989 56.9247 79.7604 57.0996 79.6438 57.3699L79.1667 57.1261C79.331 56.6808 79.7657 56.3999 80.3169 56.3999C81.006 56.3999 81.4725 56.8028 81.4725 57.3646V59.082H80.8629V58.8276C80.6827 59.029 80.4124 59.1456 80.0678 59.1456ZM79.7445 58.3399C79.7445 58.5626 79.93 58.6845 80.2056 58.6792C80.5926 58.6739 80.8576 58.4513 80.8576 58.0696V57.8788L80.0837 58.0007C79.877 58.0378 79.7445 58.1597 79.7445 58.3399ZM83.4859 59.1456C83.136 59.1456 82.8286 59.0237 82.606 58.7905V59.082H81.9911V55.3716H82.606V56.7604C82.818 56.5271 83.1254 56.3999 83.4859 56.3999C84.2438 56.3999 84.8004 56.9671 84.8004 57.7728C84.8004 58.5838 84.2438 59.1456 83.4859 59.1456ZM82.606 57.7728C82.606 58.2498 82.9452 58.5891 83.3957 58.5891C83.8463 58.5891 84.1855 58.2498 84.1855 57.7728C84.1855 57.2957 83.8463 56.9565 83.3957 56.9565C82.9452 56.9565 82.606 57.301 82.606 57.7728ZM85.3637 59.1138C85.1411 59.1138 84.9714 58.9389 84.9714 58.7216C84.9714 58.5096 85.1411 58.3293 85.3637 58.3293C85.5863 58.3293 85.7559 58.5096 85.7559 58.7216C85.7559 58.9389 85.5863 59.1138 85.3637 59.1138Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M40.2522 49.5012C38.9037 49.5012 38.0556 48.5937 37.9538 47.788L38.8613 47.5336C38.9631 47.9831 39.4295 48.5683 40.2437 48.5683C40.8458 48.5683 41.3038 48.2799 41.3038 47.7711C41.3038 47.3301 40.9307 47.0926 40.4133 46.9484L39.6246 46.7194C38.6917 46.448 38.1234 45.9307 38.1234 45.0826C38.1234 44.0309 38.9885 43.3609 40.108 43.3609C41.3802 43.3609 42.0756 44.0903 42.2282 44.879L41.3123 45.1335C41.219 44.7264 40.8543 44.2939 40.1504 44.2939C39.5652 44.2939 39.1581 44.5907 39.1581 45.0656C39.1581 45.5066 39.4804 45.7102 40.0317 45.8628L40.8204 46.0833C41.8381 46.3802 42.3385 46.9314 42.3385 47.7541C42.3385 48.8227 41.4141 49.5012 40.2522 49.5012ZM44.6365 49.5012C43.6951 49.5012 43.0421 48.8312 43.0421 47.805V45.2098H44.0259V47.6523C44.0259 48.263 44.3821 48.6107 44.9249 48.6107C45.4761 48.6107 45.8323 48.2036 45.8323 47.576V45.2098H46.8161V49.3994H45.8323V48.899C45.5609 49.2892 45.1539 49.5012 44.6365 49.5012ZM49.5742 49.5012C48.3105 49.5012 47.3946 48.5937 47.3946 47.3131C47.3946 46.024 48.319 45.108 49.5742 45.108C50.5749 45.108 51.3297 45.6847 51.5163 46.4226L50.6343 46.6601C50.5241 46.3208 50.1424 45.9985 49.5911 45.9985C48.8957 45.9985 48.3784 46.5074 48.3784 47.3131C48.3784 48.1103 48.8957 48.6107 49.5911 48.6107C50.1424 48.6107 50.5241 48.2884 50.6343 47.9576L51.5163 48.1951C51.3297 48.9245 50.5749 49.5012 49.5742 49.5012ZM54.0797 49.5012C52.816 49.5012 51.9001 48.5937 51.9001 47.3131C51.9001 46.024 52.8245 45.108 54.0797 45.108C55.0805 45.108 55.8353 45.6847 56.0219 46.4226L55.1398 46.6601C55.0296 46.3208 54.6479 45.9985 54.0967 45.9985C53.4012 45.9985 52.8839 46.5074 52.8839 47.3131C52.8839 48.1103 53.4012 48.6107 54.0967 48.6107C54.6479 48.6107 55.0296 48.2884 55.1398 47.9576L56.0219 48.1951C55.8353 48.9245 55.0805 49.5012 54.0797 49.5012ZM58.6276 49.5012C57.3725 49.5012 56.4056 48.5937 56.4056 47.3046C56.4056 46.0155 57.3555 45.108 58.5852 45.108C59.798 45.108 60.6631 45.9307 60.6631 47.1859C60.6631 47.3385 60.6461 47.4997 60.6376 47.576H57.3979C57.4657 48.229 57.9661 48.67 58.6276 48.67C59.1704 48.67 59.5606 48.3647 59.6962 48.017L60.5783 48.2545C60.3578 48.9584 59.6114 49.5012 58.6276 49.5012ZM57.4318 46.8551H59.7132C59.6454 46.2869 59.1704 45.9476 58.5937 45.9476C58.0255 45.9476 57.5675 46.2784 57.4318 46.8551ZM62.8588 49.5012C61.9259 49.5012 61.1626 48.9838 61.0608 48.2969L61.9004 48.0764C61.9853 48.475 62.3499 48.7549 62.8503 48.7549C63.2489 48.7549 63.5118 48.5683 63.5118 48.2799C63.5118 48.034 63.3337 47.8813 62.8503 47.7456L62.333 47.6014C61.5782 47.3809 61.1965 46.9993 61.1965 46.3887C61.1965 45.6254 61.7902 45.108 62.7316 45.108C63.5966 45.108 64.2497 45.5745 64.4278 46.2869L63.5797 46.448C63.4609 46.1003 63.1387 45.8628 62.7401 45.8628C62.3669 45.8544 62.1294 46.0579 62.1294 46.3293C62.1294 46.5752 62.3075 46.7279 62.7825 46.8466L63.3083 46.9823C64.0461 47.1859 64.4447 47.5506 64.4447 48.1951C64.4447 48.9754 63.8002 49.5012 62.8588 49.5012ZM66.6686 49.5012C65.7357 49.5012 64.9724 48.9838 64.8706 48.2969L65.7103 48.0764C65.7951 48.475 66.1598 48.7549 66.6601 48.7549C67.0587 48.7549 67.3217 48.5683 67.3217 48.2799C67.3217 48.034 67.1436 47.8813 66.6601 47.7456L66.1428 47.6014C65.388 47.3809 65.0063 46.9993 65.0063 46.3887C65.0063 45.6254 65.6 45.108 66.5414 45.108C67.4065 45.108 68.0595 45.5745 68.2376 46.2869L67.3895 46.448C67.2708 46.1003 66.9485 45.8628 66.5499 45.8628C66.1767 45.8544 65.9393 46.0579 65.9393 46.3293C65.9393 46.5752 66.1174 46.7279 66.5923 46.8466L67.1181 46.9823C67.856 47.1859 68.2546 47.5506 68.2546 48.1951C68.2546 48.9754 67.61 49.5012 66.6686 49.5012Z\"\n fill=\"black\"\n />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint0_linear_125_5849)\" />\n <circle cx=\"52.5332\" cy=\"52.5205\" r=\"51.9238\" fill=\"url(#paint1_linear_125_5849)\" />\n <path\n d=\"M29.7695 53.0065L44.5519 67.7889C44.5519 67.7889 64.5228 47.8179 77.3193 35.0215\"\n stroke=\"#FAFAFA\"\n strokeWidth=\"6.09\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_125_5849\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#56F68B\" />\n <stop offset=\"1\" stopColor=\"#3DCF6E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_125_5849\"\n x1=\"52.5332\"\n y1=\"0.59668\"\n x2=\"52.5332\"\n y2=\"104.444\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#8FCA94\" />\n <stop offset=\"1\" stopColor=\"#5D9461\" />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport NativeTokenIcon from \"../../shared/NativeTokenIcon\";\nimport { cn } from \"../../../lib/utils\";\n\ninterface WalletFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n value: number;\n}\n\nconst WalletFundSuccessView: React.FC<WalletFundSuccessViewProps> = ({ onEnd, onShowActivity, value }) => {\n const { user, nativeSymbol } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your account has been\\nsuccessfully funded!`}\n </span>\n\n <div\n className={cn(\n \"gw-my-10 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-2 gw-w-full gw-justify-between\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" // liquid glass shadow\n )}\n >\n <NativeTokenIcon className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-typography-body2\">\n <span>\n {value} {nativeSymbol}\n </span>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <span className=\"gw-break-all gw-typography-body2\">\n {truncateEthAddress(user!.evmWallet)}\n </span>\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletFundSuccessView);\n","import { Loader2 } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport USDIcon from \"../../assets/images/USDIcon.png\";\nimport { LinkIcon } from \"../../assets/svg/LinkIcon\";\nimport { useGlyphFunding } from \"../../hooks/useGlyphFunding\";\nimport { FundView, INTERNAL_GRADIENT_TYPE } from \"../../lib/constants\";\nimport { currencyToSymbol, formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport { cn } from \"../../lib/utils\";\nimport NativeTokenIcon from \"../shared/NativeTokenIcon\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\nimport WalletFundFailedView from \"./internal/WalletFundFailedView\";\nimport WalletFundPendingView from \"./internal/WalletFundPendingView\";\nimport WalletFundSuccessView from \"./internal/WalletFundSuccessView\";\n\nexport type WalletFundProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nconst MAX_DECIMALS = 2;\n\nexport function WalletFundView({ onBack, onEnd, onShowActivity, setGradientType }: WalletFundProps) {\n const QA = false;\n\n const {\n userCurrency,\n fundAmount,\n fundMinAmount,\n fundMaxAmount,\n fundIntermediaryToken,\n fundDone,\n fundError,\n fundAmountError,\n fundQuote,\n fundStatus,\n quoteLoading,\n doFunding,\n setFundAmount,\n isOnrampEnabled,\n onramppDisabledError,\n fundSymbol\n } = useGlyphFunding();\n\n const [view, setView] = useState<FundView>(FundView.BUY);\n\n const [fetchingPaymentLink, setFetchingPaymentLink] = useState<boolean>(false);\n\n const handleBuy = async () => {\n if (!isOnrampEnabled && !QA) return;\n setFetchingPaymentLink(true);\n doFunding(\n () => {\n setView(FundView.WAIT);\n setFetchingPaymentLink(false);\n },\n (error: string) => {\n toast.error(error);\n setFetchingPaymentLink(false);\n }\n );\n };\n\n useEffect(() => {\n if (fundDone) setView(FundView.END);\n }, [fundDone]);\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === FundView.END && fundStatus === \"SUCCESS\") setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n if (view === FundView.END && fundStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, fundStatus, view]);\n\n const validAmountEntered = fundAmount && !fundAmountError;\n\n return (\n <>\n {view === FundView.BUY && (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Fund Wallet\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-h-full gw-flex gw-flex-col gw-justify-center\">\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {validAmountEntered ? \"Pay\" : \"Enter Amount\"}\n </div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1\">\n <div\n className={`gw-w-full gw-text-center gw-border-b-2 gw-border-border focus-within:gw-border-foreground gw-pb-1 gw-flex gw-justify-between gw-items-center gw-typography-h3-nr`}\n >\n <span>{currencyToSymbol(userCurrency)}</span>\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n min={fundMinAmount ?? 0}\n max={fundMaxAmount ?? 999999}\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (fundAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n disabled={fetchingPaymentLink || (!isOnrampEnabled && !QA)}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={fundAmount}\n onChange={(e) =>\n setFundAmount((v: string) => {\n let value = formatInputNumber(e.target.value, MAX_DECIMALS);\n if (\n e.target.max &&\n parseFloat(value) > parseFloat(e.target.max)\n )\n value = v;\n\n return value;\n })\n }\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {userCurrency === \"USD\" ? (\n <img src={USDIcon} alt=\"coin\" className=\"gw-size-10 gw-rounded-full\" />\n ) : (\n <div className=\"gw-rounded-full gw-size-10 gw-inline-flex gw-justify-center gw-items-center gw-bg-primary gw-text-primary-foreground gw-typography-body2\">\n {userCurrency}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"gw-typography-caption\">\n <div className=\"gw-mt-2 gw-text-brand-gray-500 gw-text-center\">\n {fundAmountError ||\n (isOnrampEnabled &&\n `${formatCurrency(fundMinAmount ?? 0, userCurrency)} min - ${formatCurrency(fundMaxAmount ?? 999999, userCurrency)} max`)}\n </div>\n\n {!validAmountEntered &&\n (isOnrampEnabled ? (\n <div className=\"gw-mt-4 gw-flex gw-space-x-2 gw-text-brand-gray-500 gw-items-center gw-justify-center\">\n <span>You will receive {fundSymbol}</span>\n <NativeTokenIcon />\n </div>\n ) : (\n <div\n className=\"gw-mt-8 gw-text-brand-gray-600 gw-text-center gw-text-xs gw-px-4 gw-py-3 gw-rounded-xl gw-border\"\n style={{\n borderColor: \"#FFBD42\",\n backgroundColor: \"rgba(253, 215, 53, 0.08)\"\n }}\n >\n To fund your wallet, switch your network to{\" \"}\n <b className=\"gw-text-brand-gray-700\">ApeChain</b>. From Home, choose\n ApeChain in the top right. Remember, funds remain on{\" \"}\n <b className=\"gw-text-brand-gray-700\">ApeChain</b>.\n </div>\n ))}\n </div>\n </div>\n\n {validAmountEntered && (\n <div>\n <div className=\"gw-flex gw-flex-col gw-mt-5\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Receive</div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1\">\n <div className=\"gw-typography-h3-nr\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-20 gw-h-10\" />\n ) : (\n fundQuote?.out_tokens_amount\n )}\n </div>\n\n <NativeTokenIcon className=\"gw-size-10 gw-rounded-full\" />\n </div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500 gw-mt-1 gw-text-center gw-flex gw-items-center gw-justify-center gw-gap-0.5\">\n <span>1 {fundSymbol} = </span>\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-4 gw-inline-block\" />\n ) : (\n // TODO: Do the calculation before showing it in diff currency\n `${formatCurrency(fundQuote?.ape_to_currency, fundQuote?.currency)}`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-py-4 gw-border-b gw-border-muted\">\n <span className=\"gw-typography-caption\">How this transaction works</span>\n <TooltipElement\n stopPropagation\n description={\n <div className=\"gw-p-3 gw-max-w-xs\">\n <div className=\"gw-typography-body2 !gw-font-bold gw-text-center\">\n How This Transaction Works\n </div>\n <p className=\"gw-typography-caption gw-text-brand-gray-500 gw-mt-2\">\n Once you enter an amount, we&apos;ll take care of the rest. Your\n order is processed via Coinbase.\n </p>\n <div className=\"gw-mt-4 gw-space-y-3\">\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 1\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">\n Buy {fundIntermediaryToken}:\n </span>{\" \"}\n Your {userCurrency} is converted to{\" \"}\n {fundIntermediaryToken}\n </p>\n </div>\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 2\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">\n Swap to {fundSymbol}:\n </span>{\" \"}\n {fundIntermediaryToken} is exchanged for {fundSymbol} on\n current chain\n </p>\n </div>\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <div className=\"gw-size-6 gw-flex-shrink-0 gw-rounded-full gw-border gw-border-secondary gw-flex gw-items-center gw-justify-center gw-typography-body2 gw-text-secondary\">\n 3\n </div>\n <p className=\"gw-typography-caption\">\n <span className=\"gw-font-medium\">Receive Funds:</span>{\" \"}\n {fundSymbol} is sent to your wallet\n </p>\n </div>\n </div>\n </div>\n }\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Tx data */}\n <div className=\"gw-typography-body2 gw-mt-4\">\n <div className=\"gw-flex gw-justify-between gw-items-center\">\n <span>Transaction Time</span>\n <span className=\"gw-text-brand-gray-500\">1-5 mins</span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n `${formatCurrency(fundQuote?.estimated_fees_amount, fundQuote?.currency)}`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2\">\n <span>Total</span>\n <div className=\"gw-text-brand-gray-500\">\n {quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n `${formatCurrency(fundQuote?.in_amount, fundQuote?.currency)}`\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n }\n footer={\n <>\n <span\n className={cn(\n `gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-mb-2 ${fundError ? \"gw-text-destructive\" : \"gw-text-brand-gray-500\"}`\n )}\n >\n <span\n className={cn(\n \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-rounded-full\",\n fundError ? \"gw-bg-destructive-foreground/60\" : \"gw-bg-brand-white/60\"\n )}\n >\n {fundError\n ? fundError\n : !validAmountEntered\n ? `*You pay in ${currencyToSymbol(userCurrency)} (${userCurrency})`\n : \"*Your order will be fulfilled via Coinbase\"}\n </span>\n </span>\n\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full\"\n style={{\n backgroundColor: isOnrampEnabled ? undefined : \"#EAEAEA\",\n color: isOnrampEnabled ? undefined : \"#808080\"\n }}\n disabled={\n quoteLoading ||\n !!fundError ||\n fetchingPaymentLink ||\n (!isOnrampEnabled && !QA) ||\n !validAmountEntered\n }\n onClick={handleBuy}\n >\n {isOnrampEnabled || QA ? (\n <>\n {validAmountEntered && !quoteLoading ? (\n <>\n Continue to Coinbase <LinkIcon className=\"gw-size-4\" />\n </>\n ) : (\n \"Continue\"\n )}\n {((quoteLoading && validAmountEntered) || fetchingPaymentLink) && (\n <Loader2 className=\"gw-size-4 gw-animate-spin\" />\n )}\n </>\n ) : (\n onramppDisabledError || \"Continue\"\n )}\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === FundView.WAIT && (\n <WalletFundPendingView\n onBack={onBack}\n id={fundQuote?.id || \"\"}\n value={fundQuote?.out_tokens_amount || 0}\n />\n )}\n\n {view === FundView.END &&\n (fundStatus === \"SUCCESS\" ? (\n <WalletFundSuccessView\n value={fundQuote?.out_tokens_amount || 0}\n onEnd={onEnd}\n onShowActivity={onShowActivity}\n />\n ) : (\n <WalletFundFailedView id={fundQuote?.id || \"\"} onEnd={onEnd} onShowActivity={onShowActivity} />\n ))}\n </>\n );\n}\n","interface Props extends React.SVGProps<SVGSVGElement> {\n isActive: boolean;\n}\n\nfunction ActivityIcon(props: Props) {\n const { isActive, ...rest } = props;\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...rest}>\n <g clipPath=\"url(#clip0_665_3257)\">\n <path\n d=\"M10.3926 17.54C14.7882 17.54 18.3516 13.9767 18.3516 9.58105C18.3516 5.18543 14.7882 1.62207 10.3926 1.62207C5.99695 1.62207 2.43359 5.18543 2.43359 9.58105C2.43359 13.9767 5.99695 17.54 10.3926 17.54Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.3926 4.80566V9.58105L13.5762 11.1729\"\n className={isActive ? \"gw-stroke-popover\" : \"gw-stroke-current\"}\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_665_3257\">\n <rect width=\"19.1016\" height=\"19.1016\" fill=\"white\" transform=\"translate(0.841797 0.0302734)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default ActivityIcon;\n","function HomeIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"23\" height=\"21\" viewBox=\"0 0 23 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.3892 1.5525L2.16118 7.25004C1.89143 7.43683 1.73047 7.74406 1.73047 8.07217V18.2133C1.73047 19.2694 2.6134 20.1524 3.66956 20.1524H7.61845C8.17073 20.1524 8.61845 19.7046 8.61845 19.1524V14.491C8.61845 13.9387 9.06616 13.491 9.61844 13.491H13.4348C13.9871 13.491 14.4348 13.9387 14.4348 14.491V19.1524C14.4348 19.7046 14.8825 20.1524 15.4348 20.1524H19.3291C20.3853 20.1524 21.2682 19.2694 21.2682 18.2133V8.07021C21.2682 7.74319 21.1083 7.43683 20.84 7.24983L12.6715 1.55603C11.9861 1.07831 11.076 1.0769 10.3892 1.5525Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default HomeIcon;\n","function TokensIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"21\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_661_2577)\">\n <rect\n x=\"1.01807\"\n y=\"1.20703\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"12.1294\"\n y=\"1.20703\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"12.1294\"\n y=\"12.3184\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <rect\n x=\"1.01807\"\n y=\"12.3181\"\n width=\"7.38889\"\n height=\"7.38889\"\n rx=\"1.25\"\n fill=\"inherit\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_661_2577\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.268066 0.457031)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default TokensIcon;\n","const WalletsTabFilledIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"22\" height=\"18\" viewBox=\"0 0 22 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19.1504 0C20.669 0.000237059 21.9004 1.23136 21.9004 2.75V11.7832H21.8926V15.7539C21.8926 16.8585 20.9971 17.7539 19.8926 17.7539H2.00391C0.899349 17.7539 0.00392532 16.8585 0.00390625 15.7539V11.1855H0V2.75C1.28851e-07 1.23122 1.23122 0 2.75 0H19.1504ZM2.75 5.58594C2.05964 5.58594 1.5 6.14558 1.5 6.83594V8.07324H7.34863C7.85585 8.07324 8.34436 8.26589 8.71484 8.6123L9.65625 9.49219C10.425 10.2111 11.6189 10.2111 12.3877 9.49219L13.3291 8.6123C13.6996 8.26586 14.1881 8.07324 14.6953 8.07324H20.4004V6.83594C20.4004 6.14573 19.8405 5.58617 19.1504 5.58594H2.75ZM2.75 1.5C2.05964 1.5 1.5 2.05964 1.5 2.75V4.38867C1.87532 4.19658 2.29942 4.08594 2.75 4.08594H19.1504C19.6009 4.08601 20.0251 4.19653 20.4004 4.38867V2.75C20.4004 2.05979 19.8405 1.50024 19.1504 1.5H2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WalletsTabFilledIcon;\n","const WalletsTabOutlinedIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg width=\"22\" height=\"18\" viewBox=\"0 0 22 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19.1504 0C20.669 0.000237059 21.9004 1.23136 21.9004 2.75V11.7832H21.8926V15.7539C21.8926 16.8585 20.9971 17.7539 19.8926 17.7539H2.00391C0.899349 17.7539 0.00392532 16.8585 0.00390625 15.7539V11.1855H0V2.75C1.28851e-07 1.23122 1.23122 0 2.75 0H19.1504ZM1.50391 15.7539C1.50393 16.03 1.72778 16.2539 2.00391 16.2539H19.8926C20.1687 16.2539 20.3926 16.03 20.3926 15.7539V9.57324H14.6953C14.5685 9.57324 14.4461 9.6214 14.3535 9.70801L13.4121 10.5879C12.0667 11.8459 9.9772 11.8459 8.63184 10.5879L7.69043 9.70801C7.59781 9.6214 7.47544 9.57324 7.34863 9.57324H1.50391V15.7539ZM2.75 5.58594C2.05964 5.58594 1.5 6.14558 1.5 6.83594V8.07324H7.34863C7.85585 8.07324 8.34436 8.26589 8.71484 8.6123L9.65625 9.49219C10.425 10.2111 11.6189 10.2111 12.3877 9.49219L13.3291 8.6123C13.6996 8.26586 14.1881 8.07324 14.6953 8.07324H20.4004V6.83594C20.4004 6.14573 19.8405 5.58617 19.1504 5.58594H2.75ZM2.75 1.5C2.05964 1.5 1.5 2.05964 1.5 2.75V4.38867C1.87532 4.19658 2.29942 4.08594 2.75 4.08594H19.1504C19.6009 4.08601 20.0251 4.19653 20.4004 4.38867V2.75C20.4004 2.05979 19.8405 1.50024 19.1504 1.5H2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default WalletsTabOutlinedIcon;\n","import { memo } from \"react\";\nimport ActivityIcon from \"../../assets/svg/ActivityIcon\";\nimport HomeIcon from \"../../assets/svg/HomeIcon\";\nimport TokensIcon from \"../../assets/svg/TokensIcon\";\nimport WalletsTabFilledIcon from \"../../assets/svg/WalletsTabFilledIcon\";\nimport WalletsTabOutlinedIcon from \"../../assets/svg/WalletsTabOutlinedIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { WalletMainViewTab } from \"../../lib/constants\";\nimport { cn } from \"../../lib/utils\";\n\ninterface WalletViewFooterNavProps {\n tab: WalletMainViewTab;\n setTab: (tab: WalletMainViewTab) => void;\n}\n\nconst WalletViewFooterNav: React.FC<WalletViewFooterNavProps> = ({ tab, setTab }) => {\n const { user } = useGlyph();\n\n return (\n <>\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.HOME)}>\n <HomeIcon\n className={cn(\n tab === WalletMainViewTab.HOME ? \"gw-fill-secondary gw-text-secondary\" : \"gw-text-primary\",\n \"gw-size-5\"\n )}\n />\n <span className=\"gw-sr-only\">Home</span>\n </button>\n\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.TOKENS)}>\n <TokensIcon\n className={cn(\n tab === WalletMainViewTab.TOKENS || tab === WalletMainViewTab.NFTS\n ? \"gw-fill-secondary gw-text-secondary\"\n : \"gw-text-primary\",\n \"gw-size-5\"\n )}\n />\n <span className=\"gw-sr-only\">Tokens & NFTs</span>\n </button>\n\n {/* Replace the button below with discover once we reach that point */}\n {/* <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.NFTS)}>\n <NFTsIcon selected={tab === WalletMainViewTab.NFTS} />\n <span className=\"gw-sr-only\">NFTs</span>\n </button> */}\n\n {/* Only show Wallets tab button for Glyph users */}\n {user?.hasProfile && (\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.LINKED_ACCOUNTS)}>\n {tab === WalletMainViewTab.LINKED_ACCOUNTS ? (\n <WalletsTabFilledIcon className={\"gw-text-secondary gw-h-5\"} />\n ) : (\n <WalletsTabOutlinedIcon className={\"gw-text-primary gw-h-5\"} />\n )}\n <span className=\"gw-sr-only\">Linked Accounts</span>\n </button>\n )}\n\n <button className=\"tab\" onClick={() => setTab(WalletMainViewTab.ACTIVITY)}>\n <ActivityIcon\n isActive={tab === WalletMainViewTab.ACTIVITY}\n className={cn(\n tab === WalletMainViewTab.ACTIVITY ? \"gw-fill-secondary gw-text-secondary\" : \"gw-text-primary\",\n \"gw-size-6\"\n )}\n />\n <span className=\"gw-sr-only\">Activity</span>\n </button>\n </>\n );\n};\n\nexport default memo(WalletViewFooterNav);\n","export function TxSendIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.998047 0C0.445762 0 -0.00195312 0.447715 -0.00195312 1C-0.00195312 1.55228 0.445762 2 0.998047 2H8.61174L0.292089 10.2927C-0.0990687 10.6826 -0.100097 11.3157 0.289793 11.7069C0.679683 12.0981 1.31285 12.0991 1.704 11.7092L9.99805 3.44204V11C9.99805 11.5523 10.4458 12 10.998 12C11.5503 12 11.998 11.5523 11.998 11V1C11.998 0.447715 11.5503 0 10.998 0H0.998047Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","export function TxSwapIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"16\" viewBox=\"0 0 21 16\" fill=\"none\" {...props}>\n <path d=\"M5.85383 2.51924L5.83203 14.75\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10.9179 9.66607L5.83393 14.75L0.75 9.66607\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M14.801 12.9808L14.7793 0.75\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M19.8568 5.83393L14.7729 0.75L9.68896 5.83393\" stroke=\"#131313\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n","import { TxSendIcon } from \"../../assets/svg/TxSendIcon\";\nimport { TxSwapIcon } from \"../../assets/svg/TxSwapIcon\";\nimport { CHAIN_NAMES } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { chainIdToRelayChain, cn } from \"../../lib/utils\";\n\nexport interface ActivityRowProps {\n data: {\n type: string;\n type_text: string;\n status: string;\n value: string;\n amount: string;\n amount_currency: string;\n name_on_list: string | null;\n chain_id?: number; // Only pass chain_id if fetchForAllNetworks is true\n };\n}\n\nexport function ActivityRow({ data }: ActivityRowProps) {\n const chain = data?.chain_id ? chainIdToRelayChain(data.chain_id) : undefined;\n\n return (\n <div className=\"gw-flex gw-items-center gw-typography-body1 gw-flex-1 gw-space-x-3\">\n <span className=\"gw-relative gw-flex-shrink-0\">\n <span\n className={cn(\n \"gw-rounded-full gw-size-10 gw-flex-shrink-0 gw-flex gw-justify-center gw-items-center\",\n data.status === \"Confirmed\"\n ? data.type === \"swap\"\n ? \"gw-bg-brand-swapsuccess\"\n : \"gw-bg-brand-success\"\n : data.status === \"Failed\"\n ? \"gw-bg-destructive\"\n : \"gw-bg-brand-warning\"\n )}\n >\n {data.type === \"swap\" ? (\n <TxSwapIcon />\n ) : data.type === \"receive\" ? (\n <TxSendIcon className=\"gw-size-3 gw-rotate-180\" />\n ) : (\n <TxSendIcon />\n )}\n </span>\n\n {chain?.iconUrl && (\n <span\n className={cn(\n \"gw-absolute gw-bottom-0 gw-right-0 gw-translate-x-[10%] gw-translate-y-[10%] gw-size-5 gw-rounded-full gw-bg-background\"\n )}\n >\n <img\n src={chain?.iconUrl}\n alt={CHAIN_NAMES[chain?.id] || chain?.name}\n className=\"gw-rounded-full gw-size-full\"\n />\n </span>\n )}\n </span>\n <div className=\"gw-w-full gw-flex gw-justify-between gw-items-center gw-flex-1\">\n {/* Left side */}\n <div className=\"gw-max-w-[35%] gw-flex gw-flex-col gw-text-start\">\n <div className=\"gw-font-medium gw-capitalize\">{data.type_text || data.type}</div>\n <div\n className={cn(\n \"gw-typography-caption\",\n data.status === \"Confirmed\"\n ? \"gw-text-brand-success\"\n : data.status === \"Failed\"\n ? \"gw-text-destructive\"\n : \"gw-text-brand-warning\"\n )}\n >\n {data.status}\n </div>\n </div>\n {/* Right side */}\n <div className=\"gw-max-w-[55%] gw-flex gw-flex-col gw-items-end\">\n <div className=\"gw-font-medium\">{data.value}</div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500 gw-line-clamp-1\">{`${data.name_on_list !== null ? data.name_on_list.toUpperCase() : formatCurrency(data.amount, data.amount_currency)}`}</div>\n </div>\n </div>\n </div>\n );\n}\n","import { TxSendIcon } from \"../../assets/svg/TxSendIcon\";\nimport { buttonVariants } from \"../ui/button\";\n\nexport function LinkWithIcon({ text, url }: { text: string; url: string }) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonVariants({\n variant: \"link\",\n size: \"sm\",\n className: \"gw-py-0 gw-h-auto\",\n scale: false\n })}\n >\n <div className=\"gw-inline-flex gw-items-center gw-space-x-1 gw-text-foreground gw-typography-body2\">\n <span>{text}&nbsp;</span>\n <TxSendIcon className=\"!gw-size-2.5 gw-text-primary\" />\n </div>\n </a>\n );\n}\n","import { cn } from \"../../../lib/utils\";\nimport { Skeleton } from \"../../ui/skeleton\";\n\nexport function ActivityRowSkeleton() {\n return (\n <div className=\"gw-flex gw-items-center gw-typography-body1 gw-flex-1 gw-space-x-3 gw-py-3.5\">\n <div\n className={cn(\n \"gw-rounded-full gw-overflow-hidden gw-size-10 gw-flex-shrink-0 gw-flex gw-justify-center gw-items-center\"\n )}\n >\n <Skeleton className=\"gw-w-full gw-h-full gw-rounded-full\" />\n </div>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-flex-1\">\n <div className=\"gw-flex gw-flex-col gw-text-start gw-space-y-1\">\n <div className=\"gw-font-medium gw-capitalize\">\n <Skeleton className=\"gw-w-14 gw-h-4\" />\n </div>\n <div className={cn(\"gw-typography-caption\")}>\n <Skeleton className=\"gw-w-14 gw-h-3\" />\n </div>\n </div>\n <div className=\"gw-flex gw-flex-col gw-text-end gw-space-y-1\">\n <div className=\"gw-font-medium\">\n <Skeleton className=\"gw-w-10 gw-h-4\" />\n </div>\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">\n <Skeleton className=\"gw-w-10 gw-h-3\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n (props, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps;\n const multipleProps = accordionProps;\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n (props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n collapsible = false,\n ...accordionSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemOpen: setValue,\n onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n }\n );\n }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...accordionMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n const handleItemOpen = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleItemClose = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value,\n onItemOpen: handleItemOpen,\n onItemClose: handleItemClose,\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n }\n );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n if (triggerIndex === -1) return;\n event.preventDefault();\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n switch (event.key) {\n case \"Home\":\n nextIndex = homeIndex;\n break;\n case \"End\":\n nextIndex = endIndex;\n break;\n case \"ArrowRight\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case \"ArrowDown\":\n if (orientation === \"vertical\") {\n moveNext();\n }\n break;\n case \"ArrowLeft\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case \"ArrowUp\":\n if (orientation === \"vertical\") {\n movePrev();\n }\n break;\n }\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex].ref.current?.focus();\n });\n return /* @__PURE__ */ jsx(\n AccordionImplProvider,\n {\n scope: __scopeAccordion,\n disabled,\n direction: dir,\n orientation,\n children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...accordionProps,\n \"data-orientation\": orientation,\n ref: composedRefs,\n onKeyDown: disabled ? void 0 : handleKeyDown\n }\n ) })\n }\n );\n }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = value && valueContext.value.includes(value) || false;\n const disabled = accordionContext.disabled || props.disabled;\n return /* @__PURE__ */ jsx(\n AccordionItemProvider,\n {\n scope: __scopeAccordion,\n open,\n disabled,\n triggerId,\n children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Root,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(open),\n ...collapsibleScope,\n ...accordionItemProps,\n ref: forwardedRef,\n disabled,\n open,\n onOpenChange: (open2) => {\n if (open2) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }\n }\n )\n }\n );\n }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return /* @__PURE__ */ jsx(\n Primitive.h3,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(itemContext.open),\n \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n ...headerProps,\n ref: forwardedRef\n }\n );\n }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Trigger,\n {\n \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n \"data-orientation\": accordionContext.orientation,\n id: itemContext.triggerId,\n ...collapsibleScope,\n ...triggerProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Content,\n {\n role: \"region\",\n \"aria-labelledby\": itemContext.triggerId,\n \"data-orientation\": accordionContext.orientation,\n ...collapsibleScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n ...props.style\n }\n }\n );\n }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n Accordion,\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n AccordionTrigger,\n Content2 as Content,\n Header,\n Item,\n Root2 as Root,\n Trigger2 as Trigger,\n createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ComponentPropsWithoutRef, ComponentRef, forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Item>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />);\n\nconst AccordionTrigger = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"gw-flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\"gw-flex gw-flex-1 gw-items-center gw-justify-between gw-py-3 gw-transition-all\", className)}\n {...props}\n >\n {children}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\n\nconst AccordionContent = forwardRef<\n ComponentRef<typeof AccordionPrimitive.Content>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"gw-overflow-hidden gw-text-sm gw-transition-all data-[state=closed]:gw-animate-accordion-up data-[state=open]:gw-animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"gw-pb-2 gw-pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n","import { ArrowUpRight } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useChainId } from \"wagmi\";\nimport { useActivity } from \"../../hooks/useActivity\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { chainIdToRelayChain, cn } from \"../../lib/utils\";\nimport { ActivityRow } from \"../shared/ActivityRow\";\nimport CopyButton from \"../shared/CopyButton\";\nimport { LinkWithIcon } from \"../shared/LinkWithIcon\";\nimport { ActivityRowSkeleton } from \"../shared/skeletons/ActivityRowSkeleton\";\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"../ui/accordion\";\nimport TooltipElement from \"../ui/tooltip-element\";\nimport { WidgetDataError } from \"../WidgetDataState\";\n\nexport type WalletActivityTabProps = {\n expandFirst?: boolean;\n};\n\nexport function WalletActivityTab({ expandFirst = false }: WalletActivityTabProps) {\n const { user, fetchForAllNetworks } = useGlyph();\n const chainId = useChainId();\n const currentBlockExplorerUrl = fetchForAllNetworks ? null : chainIdToRelayChain(chainId)?.explorerUrl;\n const { transactionGroups, fetchTransactions, loadMore, hasMore, isLoading, isError, refreshKey } = useActivity();\n\n const observerTarget = useRef<HTMLDivElement>(null);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n const [expandedItemId, setExpandedItemId] = useState<string>(\"\");\n\n const totalTransactions = transactionGroups.reduce((count, group) => count + group.transactions.length, 0);\n\n const fetchCurrent = useRef(fetchTransactions);\n fetchCurrent.current = fetchTransactions;\n // Reload once per account/API/filter/chain lifetime, not each pagination update.\n useEffect(() => {\n void fetchCurrent.current(true);\n }, [refreshKey]);\n\n // open first item if required\n useEffect(() => {\n if (!expandFirst) return;\n\n setExpandedItemId(expandedItemId || transactionGroups?.[0]?.transactions?.[0]?.id || \"\");\n }, [expandedItemId, transactionGroups, expandFirst]);\n\n // handle infinite scrolling\n const handleScroll = useCallback(\n (entries: IntersectionObserverEntry[]) => {\n const [entry] = entries;\n if (entry.isIntersecting && hasMore && !isLoading) {\n loadMore();\n }\n },\n [hasMore, isLoading, loadMore]\n );\n\n useEffect(() => {\n const observer = new IntersectionObserver(handleScroll, {\n root: null,\n rootMargin: \"0px\",\n threshold: 1.0\n });\n\n const currentTarget = observerTarget.current;\n if (currentTarget) {\n observer.observe(currentTarget);\n }\n\n return () => {\n if (currentTarget) {\n observer.unobserve(currentTarget);\n }\n };\n }, [handleScroll]);\n\n // Detect when sticky element is stuck using a sentinel element\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // When sentinel is not intersecting (scrolled past), sticky element is stuck\n setIsStuck(!entry.isIntersecting);\n },\n {\n root: null,\n rootMargin: \"0px\",\n threshold: 0\n }\n );\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <div className=\"gw-pl-4 gw-pt-4 gw-flex gw-flex-col gw-h-full gw-relative\">\n {/* Sentinel element to detect when sticky is stuck */}\n <div ref={sentinelRef} className=\"gw-absolute gw-top-4\" />\n <a\n href={\n currentBlockExplorerUrl\n ? `${currentBlockExplorerUrl}/address/${user?.evmWallet}`\n : `https://blockscan.com/address/${user?.evmWallet}`\n }\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n \"gw-sticky gw-z-10 gw-top-4 gw-self-start gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/20 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid gw-rounded-full gw-typography-body2 gw-left-1/2 -gw-translate-x-1/2\"\n : \"gw-typography-body1 gw-left-0 gw-translate-x-0 gw-border-transparent gw-shadow-none\"\n )}\n >\n <span className=\"gw-flex gw-items-center gw-space-x-2\">\n My Activity <ArrowUpRight className={cn(\"gw-text-primary\", isStuck ? \"gw-size-4\" : \"gw-size-5\")} />\n </span>\n </a>\n\n <div className=\"gw-absolute gw-top-4 gw-right-4\">\n <TooltipElement\n description=\"Activity keeps track of your transactions and their status. Click any transaction to see details.\"\n stopPropagation\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n <div className=\"gw-grid gw-grid-cols-1 gw-overflow-auto gw-pr-4 gw-min-h-0\">\n {isError && totalTransactions === 0 ? (\n <WidgetDataError message=\"Activity is unavailable.\" onRetry={() => fetchTransactions(true)} />\n ) : isLoading && totalTransactions === 0 ? (\n // initial loading state\n new Array(3).fill(null).map((_, index) => {\n return (\n <div key={index}>\n <ActivityRowSkeleton />\n {index < 2 && <hr className=\"gw-border-muted\" />}\n </div>\n );\n })\n ) : totalTransactions > 0 ? (\n <>\n {transactionGroups.map((group, groupIndex) => (\n <div key={group.label || `group-${groupIndex}`}>\n {/* group label (may not be present) */}\n {group.label && (\n <div className=\"gw-text-brand-gray-500 gw-rounded-md gw-py-3 gw-typography-body2\">\n {group.label}\n </div>\n )}\n\n {/* group transactions */}\n <Accordion\n type=\"single\"\n collapsible\n value={expandedItemId}\n onValueChange={setExpandedItemId}\n >\n {group.transactions.map((t, index) => {\n return (\n <div key={t.id}>\n <AccordionItem value={t.id}>\n <AccordionTrigger>\n <ActivityRow\n data={{\n status: t.status,\n type: t.type,\n type_text: t.type_text,\n value: t.value,\n amount: t.amount,\n amount_currency: t.amount_currency,\n name_on_list: t.name_on_list,\n chain_id: fetchForAllNetworks ? t.chain_id : undefined // Do not show chain icon when a particular chain is selected\n }}\n />\n </AccordionTrigger>\n <AccordionContent>\n {t.detail_rows?.length ? (\n <div className=\"gw-w-[50%] gw-flex gw-flex-col gw-space-y-1 gw-px-3 gw-text-brand-gray-500\">\n {t.detail_rows?.map?.((row) => (\n <div className=\"gw-line-clamp-1 gw-truncate\">\n {row.toUpperCase()}\n </div>\n ))}\n </div>\n ) : null}\n {t.blockExplorerTxns?.length ? (\n <div className=\"gw-flex gw-flex-col gw-items-start gw-space-y-1 gw-mb-2\">\n {t.blockExplorerTxns?.map?.((tx) => (\n <LinkWithIcon\n key={tx.url}\n text={tx.text}\n url={tx.url}\n />\n ))}\n </div>\n ) : (\n <div className=\"gw-w-full gw-mb-2 gw-text-brand-gray-500 gw-typography-caption gw-text-center\">\n {t.status_text || \"No transaction data\"}\n </div>\n )}\n {t.allowIdCopy && (\n <span className=\"gw-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500 gw-w-full gw-justify-center\">\n <span>Transaction ID: </span>{\" \"}\n <CopyButton\n textToCopy={t?.id}\n text={t?.id.slice(0, 20) + \"...\"}\n />\n </span>\n )}\n </AccordionContent>\n </AccordionItem>\n {index < group.transactions.length - 1 && (\n <hr className=\"gw-border-muted\" />\n )}\n </div>\n );\n })}\n </Accordion>\n\n {/* divider between groups, except for the last group */}\n {groupIndex < transactionGroups.length - 1 && (\n <div className=\"gw-mb-2 gw-border-t gw-border-muted\"></div>\n )}\n </div>\n ))}\n\n {/* loading indicator w/ observer target */}\n {hasMore && (\n <div className=\"gw-py-2 gw-mb-4 gw-flex gw-justify-center\">\n {isLoading ? (\n <div className=\"gw-animate-pulse gw-flex gw-space-x-2 gw-items-center\">\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n <div className=\"gw-h-2 gw-w-2 gw-bg-primary gw-rounded-full\"></div>\n </div>\n ) : (\n <div ref={observerTarget} className=\"gw-h-4\"></div>\n )}\n </div>\n )}\n </>\n ) : (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-text-brand-gray-500 gw-typography-body2 gw-py-8\">\n No transactions\n </div>\n )}\n </div>\n </div>\n );\n}\n","export function PlusSign(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_685_2031)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.9216 1.04389C10.9216 0.536266 10.5101 0.124756 10.0025 0.124756C9.49487 0.124756 9.08336 0.536266 9.08336 1.04389V8.806H1.31952C0.811901 8.806 0.400391 9.21751 0.400391 9.72514C0.400391 10.2328 0.811901 10.6443 1.31952 10.6443H9.08336V18.4042C9.08336 18.9118 9.49487 19.3234 10.0025 19.3234C10.5101 19.3234 10.9216 18.9118 10.9216 18.4042V10.6443H18.6799C19.1875 10.6443 19.599 10.2328 19.599 9.72514C19.599 9.21752 19.1875 8.80601 18.6799 8.80601H10.9216V1.04389Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_685_2031\">\n <rect width=\"19.2\" height=\"19.2\" fill=\"white\" transform=\"translate(0.400391 0.124023)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","export function QRIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_685_1277)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.86887 4.35704C8.86887 6.69582 6.97292 8.59177 4.63414 8.59177C2.29537 8.59177 0.399414 6.69582 0.399414 4.35704C0.399414 2.01827 2.29537 0.122314 4.63414 0.122314C6.97292 0.122314 8.86887 2.01827 8.86887 4.35704ZM6.98266 4.35691C6.98266 5.65403 5.93113 6.70556 4.63401 6.70556C3.33688 6.70556 2.28535 5.65403 2.28535 4.35691C2.28535 3.05978 3.33688 2.00825 4.63401 2.00825C5.93113 2.00825 6.98266 3.05978 6.98266 4.35691ZM8.86887 15.0869C8.86887 17.4257 6.97292 19.3217 4.63414 19.3217C2.29537 19.3217 0.399414 17.4257 0.399414 15.0869C0.399414 12.7481 2.29537 10.8522 4.63414 10.8522C6.97292 10.8522 8.86887 12.7481 8.86887 15.0869ZM6.98266 15.0868C6.98266 16.3839 5.93113 17.4354 4.63401 17.4354C3.33688 17.4354 2.28535 16.3839 2.28535 15.0868C2.28535 13.7897 3.33688 12.7381 4.63401 12.7381C5.93113 12.7381 6.98266 13.7897 6.98266 15.0868ZM15.0338 8.59177C17.3725 8.59177 19.2685 6.69582 19.2685 4.35704C19.2685 2.01827 17.3725 0.122314 15.0338 0.122314C12.695 0.122314 10.799 2.01827 10.799 4.35704C10.799 6.69582 12.695 8.59177 15.0338 8.59177ZM15.0336 6.70556C16.3307 6.70556 17.3823 5.65403 17.3823 4.35691C17.3823 3.05978 16.3307 2.00825 15.0336 2.00825C13.7365 2.00825 12.685 3.05978 12.685 4.35691C12.685 5.65403 13.7365 6.70556 15.0336 6.70556ZM12.2106 13.6753C12.9902 13.6753 13.6222 13.0434 13.6222 12.2638C13.6222 11.4842 12.9902 10.8522 12.2106 10.8522C11.431 10.8522 10.799 11.4842 10.799 12.2638C10.799 13.0434 11.431 13.6753 12.2106 13.6753ZM19.6108 12.2638C19.6108 13.0434 18.9789 13.6753 18.1993 13.6753C17.4197 13.6753 16.7877 13.0434 16.7877 12.2638C16.7877 11.4842 17.4197 10.8522 18.1993 10.8522C18.9789 10.8522 19.6108 11.4842 19.6108 12.2638ZM15.2071 16.4996C15.9867 16.4996 16.6187 15.8676 16.6187 15.088C16.6187 14.3084 15.9867 13.6764 15.2071 13.6764C14.4275 13.6764 13.7955 14.3084 13.7955 15.088C13.7955 15.8676 14.4275 16.4996 15.2071 16.4996ZM13.6222 17.911C13.6222 18.6906 12.9902 19.3226 12.2106 19.3226C11.431 19.3226 10.799 18.6906 10.799 17.911C10.799 17.1314 11.431 16.4995 12.2106 16.4995C12.9902 16.4995 13.6222 17.1314 13.6222 17.911ZM18.1993 19.3226C18.9789 19.3226 19.6108 18.6906 19.6108 17.911C19.6108 17.1314 18.9789 16.4995 18.1993 16.4995C17.4197 16.4995 16.7877 17.1314 16.7877 17.911C16.7877 18.6906 17.4197 19.3226 18.1993 19.3226Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_685_1277\">\n <rect width=\"19.2101\" height=\"19.1992\" fill=\"white\" transform=\"translate(0.400391 0.123535)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import { ArrowUpDown, SendIcon } from \"lucide-react\";\nimport { PlusSign } from \"../../assets/svg/PlusSign\";\nimport { QRIcon } from \"../../assets/svg/QRIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { WidgetDataError } from \"../WidgetDataState\";\nimport { WalletView } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { cn, formatTokenCount } from \"../../lib/utils\";\nimport NativeTokenIcon from \"../shared/NativeTokenIcon\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\n\nexport type WalletHomeTabProps = {\n setWalletView: (view: WalletView) => void;\n};\n\nexport function WalletHomeTab({ setWalletView }: WalletHomeTabProps) {\n const { user, balances, hasBalances, isBalancesError, refreshBalances, fetchForAllNetworks } = useGlyph();\n\n // We can safely fetch the native balance here without chainId check because we only show this when a single chain is selected\n const nativeBalance = balances?.tokens?.find?.((balance) => balance.native);\n\n const allBalances = balances?.wallet_value;\n const tokens = balances?.tokens;\n\n return (\n <div className=\"gw-w-full gw-h-full gw-p-4 gw-flex gw-flex-col gw-justify-between gw-gap-10 gw-items-center\">\n {/* Balance */}\n <div\n className={cn(\n \"gw-flex gw-items-center gw-w-full gw-min-h-6\",\n fetchForAllNetworks ? \"gw-justify-end\" : \"gw-justify-between\"\n )}\n >\n {!fetchForAllNetworks ? (\n <>\n <span>My Balance</span>\n <div className=\"gw-flex gw-font-medium gw-items-center gw-gap-1\">\n {isBalancesError ? (\n <span className=\"gw-typography-body2 gw-text-brand-gray-600\">Unavailable</span>\n ) : !hasBalances || nativeBalance?.value === undefined ? (\n <Skeleton className=\"gw-w-20 gw-h-6\" />\n ) : (\n <>\n <NativeTokenIcon className=\"gw-size-5\" />\n <span>\n {formatTokenCount(\n nativeBalance?.valueInWei,\n nativeBalance?.decimals,\n nativeBalance?.displayDecimals\n )}{\" \"}\n <span className=\"gw-text-brand-gray-600 gw-typography-body2\">\n {nativeBalance?.symbol}\n </span>\n </span>\n </>\n )}\n </div>\n </>\n ) : (\n <TooltipElement\n description={`Portfolio value reflects fungible tokens held on supported networks only.`}\n stopPropagation={true}\n align=\"end\"\n side=\"left\"\n />\n )}\n </div>\n\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-col\">\n <span className=\"gw-typography-h2-nr\">\n {isBalancesError ? (\n <span className=\"gw-typography-body2 gw-text-brand-gray-600\">Unavailable</span>\n ) : !hasBalances || allBalances?.tokens === undefined ? (\n <Skeleton className=\"gw-w-20 gw-h-[3.75rem]\" />\n ) : (\n <>\n {formatCurrency(\n allBalances?.tokens,\n undefined,\n tokens?.some((t) => BigInt(t.valueInWei) !== 0n),\n \"decimal\"\n )}\n <span className=\"gw-text-foreground gw-typography-h6-nr gw-pl-0.5\">\n {allBalances?.currency || \"USD\"}\n </span>\n </>\n )}\n </span>\n <span className=\"gw-typography-subtitle1 !gw-font-normal gw-text-brand-gray-600 gw-mt-2\">\n Portfolio Value\n </span>\n {isBalancesError && (\n <WidgetDataError\n compact\n message=\"Balances are unavailable.\"\n onRetry={() => refreshBalances(true)}\n />\n )}\n </div>\n\n {/* Actions */}\n <div className=\"gw-flex gw-space-x-2 gw-w-fit gw-pb-2 gw-mb-4\">\n {/* Fund button */}\n <Button shadow variant=\"cube\" size=\"cube\" onClick={() => setWalletView(WalletView.FUND)}>\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <PlusSign />\n <span>Fund</span>\n </span>\n </Button>\n\n {/* Trade/Swap button */}\n <Button shadow variant=\"cube\" size=\"cube\" onClick={() => setWalletView(WalletView.SWAP)}>\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <ArrowUpDown />\n <span>Swap</span>\n </span>\n </Button>\n\n {/* Receive button */}\n <Button\n shadow\n variant=\"cube\"\n size=\"cube\"\n onClick={() => setWalletView(WalletView.RECEIVE)}\n disabled={!user?.evmWallet}\n >\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <QRIcon />\n <span>Receive</span>\n </span>\n </Button>\n\n {/* Send button */}\n <Button\n shadow\n variant=\"cube\"\n size=\"cube\"\n onClick={() => setWalletView(WalletView.SEND)}\n disabled={!user?.evmWallet}\n >\n <span className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-space-y-1 gw-mt-2\">\n <SendIcon />\n <span>Send</span>\n </span>\n </Button>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { PlusSign } from \"../../assets/svg/PlusSign\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport CopyButton from \"../shared/CopyButton\";\nimport { Button } from \"../ui/button\";\nimport TooltipElement from \"../ui/tooltip-element\";\n\nexport function WalletLinkedAccountsTab() {\n const { user, glyphUrl } = useGlyph();\n const profileUrl = new URL(\"/profile\", glyphUrl).toString();\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n const [isStuck, setIsStuck] = useState(false);\n\n // Detect when sticky element is stuck using a sentinel element\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n // When sentinel is not intersecting (scrolled past), sticky element is stuck\n setIsStuck(!entry.isIntersecting);\n },\n {\n root: null,\n rootMargin: \"0px\",\n threshold: 0\n }\n );\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <div className=\"gw-p-4 gw-flex gw-flex-col gw-justify-between gw-min-h-full gw-relative\">\n <div>\n {/* Sentinel element to detect when sticky is stuck */}\n <div ref={sentinelRef} className=\"gw-absolute gw-top-4\" />\n <div\n className={cn(\n \"gw-sticky gw-inline-block gw-z-10 gw-top-4 gw-transition-all gw-duration-300\",\n isStuck\n ? \"gw-px-2 gw-py-1 gw-bg-white/20 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid gw-rounded-full gw-typography-body2 gw-left-1/2 -gw-translate-x-1/2\"\n : \"gw-typography-body1 gw-left-0 gw-translate-x-0 gw-border-transparent gw-shadow-none\"\n )}\n >\n My Wallets\n </div>\n\n <div className=\"gw-absolute gw-top-4 gw-right-4\">\n <TooltipElement\n stopPropagation\n description=\"Your standard crypto wallet for storing assets, sending, and receiving funds.\"\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Show Glyph wallet */}\n {user?.hasProfile && (\n <div className=\"gw-flex gw-items-center gw-w-full gw-mt-3\">\n <div className=\"gw-flex gw-items-start\">\n <div className=\"gw-typography-body1\">\n <div className=\"gw-font-medium\">Main Wallet</div>\n <div className=\"gw-text-brand-gray-500 gw-typography-caption\">\n {truncateEthAddress(user.evmWallet)}\n </div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={user.evmWallet}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n )}\n {/* Show smart wallet */}\n {/* {user?.smartWallet && (\n <div className=\"gw-flex gw-items-center gw-w-full gw-mt-2\">\n <div className=\"gw-flex gw-items-center\">\n <GlyphIcon className=\"gw-size-8 gw-text-primary\" />\n <div className=\"gw-ml-4 gw-typography-body2\">\n <div>Smart Wallet</div>\n <div className=\"gw-text-brand-gray-500\">{truncateEthAddress(user.smartWallet)}</div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={user.smartWallet}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n )} */}\n\n <hr className=\"gw-my-5 gw-border-muted\" />\n\n <div className=\"gw-mb-6 gw-flex gw-items-center gw-justify-between\">\n <span>Linked Wallets</span>\n <TooltipElement\n stopPropagation\n description={\n \"Prove token ownership across multiple wallets, access gated content, and manage assets without transfers.\"\n }\n side=\"left\"\n align=\"center\"\n />\n </div>\n\n {/* Show linked wallets */}\n {user?.linkedWallets?.length ? (\n user?.linkedWallets?.map?.((wallet) => (\n <div key={wallet.address} className=\"gw-flex gw-items-center gw-w-full gw-mt-2\">\n <div className=\"gw-flex gw-items-center\">\n <div className=\"gw-flex gw-items-start\">\n <div className=\"gw-typography-body1\">\n <div className=\"gw-font-medium gw-capitalize\">\n {wallet.walletClientType?.split?.(\"_\")?.join?.(\" \") || \"External Wallet\"}\n </div>\n <div className=\"gw-text-brand-gray-500 gw-typography-caption\">\n {truncateEthAddress(wallet.address)}\n </div>\n </div>\n </div>\n </div>\n <CopyButton\n text=\"\"\n textToCopy={wallet.address}\n className=\"gw-ml-auto\"\n iconClassName=\"gw-size-5\"\n />\n </div>\n ))\n ) : (\n <div className=\"gw-flex gw-items-center gw-justify-center gw-w-full gw-text-center gw-my-8 gw-text-brand-gray-500 gw-typography-body2\">\n To link an existing wallet or\n <br />\n account, please go to the\n <br />\n Glyph Dashboard.\n </div>\n )}\n </div>\n\n <Button\n className=\"gw-w-full gw-mt-5\"\n onClick={() => {\n window.open(`${profileUrl}?linkAccounts=true`, \"_blank\");\n }}\n variant={\"link\"}\n >\n <PlusSign className=\"!gw-size-3 gw-mr-1\" />\n Link Wallet or Account\n </Button>\n </div>\n );\n}\n","export default function ExpandItemIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" {...props}>\n <path d=\"M9.02588 4.85156L5 0.825684L0.974121 4.85156\" stroke=\"#095546\" strokeWidth=\"1.34196\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n","function LinkedNFTChip(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" {...props}>\n <g>\n <circle cx=\"6.5\" cy=\"6.5\" r=\"6.5\" fill=\"black\" fillOpacity=\"0.5\" />\n <path\n transform=\"translate(2 2)\"\n d=\"M5.21106 3.78895C4.60357 3.18146 3.61865 3.18146 3.01117 3.78895L1.45561 5.3445C0.848129 5.95198 0.848129 6.93691 1.45561 7.54439C2.06309 8.15187 3.04802 8.15187 3.6555 7.54439L4.08389 7.116M3.78895 5.21106C4.39643 5.81854 5.38135 5.81854 5.98883 5.21106L7.54439 3.6555C8.15187 3.04802 8.15187 2.06309 7.54439 1.45561C6.93691 0.848129 5.95198 0.848129 5.3445 1.45561L4.91687 1.88324\"\n stroke=\"white\"\n strokeWidth=\"0.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </svg>\n );\n}\n\nexport default LinkedNFTChip;\n","export const NFTImgFail = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"66\" height=\"66\" viewBox=\"0 0 66 66\" fill=\"none\" {...props}>\n <path\n d=\"M0 5C0 2.23858 2.23858 0 5 0H61C63.7614 0 66 2.23858 66 5V61C66 63.7614 63.7614 66 61 66H5C2.23858 66 0 63.7614 0 61V5Z\"\n fill=\"#DFDFDF\" />\n <path\n d=\"M26.3147 21.6523C26.4077 21.7503 26.501 21.8483 26.594 21.9463C28.4087 23.8579 30.2236 25.77 32.0383 27.6816C31.3606 28.037 30.5969 28.2393 29.7883 28.2393C26.9975 28.239 24.7346 25.8572 24.7346 22.9199C24.7347 22.067 24.9267 21.2613 25.2659 20.5469C25.6156 20.9153 25.9651 21.284 26.3147 21.6523ZM29.7883 17.6016C32.5793 17.6016 34.8419 19.9826 34.842 22.9199C34.842 23.897 34.5904 24.8118 34.1536 25.5986C32.3451 23.6938 30.5371 21.7886 28.7288 19.8838C28.6356 19.7857 28.5426 19.687 28.4495 19.5889C28.0487 19.1667 27.6472 18.7453 27.2463 18.3232C27.9931 17.8648 28.8614 17.6016 29.7883 17.6016Z\"\n fill=\"#969E96\" />\n <g filter=\"url(#filter0_d_2977_3039)\">\n <path\n d=\"M43.5314 25.4015C44.1049 25.1215 44.8406 25.1888 45.458 25.333C46.1015 25.4833 46.7446 25.7483 47.2143 25.9973C47.4875 26.1423 47.7248 26.3783 47.9501 26.6657C48.1779 26.9563 48.4185 27.3328 48.6878 27.7959C49.225 28.7197 49.9199 30.0636 50.9025 31.9036C51.8101 33.6032 53.5769 36.111 54.5178 37.5396C55.2851 38.7046 55.9735 39.7613 56.4989 40.6429C57.0137 41.5066 57.4078 42.2604 57.5435 42.8018C57.7956 43.8087 57.5709 44.6716 57.4837 45.0031C57.3662 45.4495 57.0877 45.7825 56.7885 46.0241C56.3653 46.3658 55.8233 46.5391 55.2762 46.6513C54.7298 46.7633 54.0998 46.8281 53.4896 46.906C52.8697 46.9852 51.8968 47.0121 49.778 47.0593C47.6374 47.107 44.3463 47.0208 42.4956 47.015C40.6223 47.0092 40.7079 47.0188 39.9927 47.0203C39.7511 47.0208 38.8787 47.0594 33.8482 47.0331C33.2081 47.0298 32.5006 47.0242 31.7427 47.017C30.1433 45.0629 28.5446 43.1082 26.9452 41.154C30.7496 38.7451 34.5554 36.3369 38.3598 33.928L39.8208 33.003L38.6891 31.6812C38.5515 31.5206 38.4136 31.3602 38.276 31.1996C38.9175 30.3623 39.3449 29.6955 39.606 29.3208C40.6967 27.7562 41.4821 26.8659 42.1007 26.3195C42.7331 25.761 43.1835 25.5713 43.5314 25.4015ZM19.8279 29.915C20.8419 29.7909 22.0906 29.8957 23.2044 30.6189C24.4481 31.4267 25.0305 32.3473 25.65 33.0747C26.3784 33.9298 27.8879 35.2664 29.1087 36.2237C27.3748 37.3218 25.6415 38.4209 23.9076 39.5188L22.4789 40.4232L23.5558 41.7383C24.9822 43.4811 26.409 45.2237 27.8354 46.9666C23.2092 46.901 17.922 46.7974 14.4754 46.6802C11.9432 46.5941 10.663 46.5954 9.97801 46.5529C9.63098 46.5313 9.36454 46.4962 9.13394 46.4052C8.89311 46.3102 8.7273 46.1673 8.57653 46.0383C8.2984 45.7999 8.13482 45.4897 8.0309 45.2328C7.93208 44.9883 7.85902 44.7091 7.82351 44.5984L7.81762 44.5809L7.81367 44.5623C7.79586 44.4878 7.79188 44.4114 7.7908 44.3661C7.78949 44.3109 7.79165 44.2498 7.79433 44.1883C7.79975 44.0644 7.81134 43.918 7.82764 43.7732C7.84395 43.6285 7.86559 43.4777 7.89022 43.3444C7.90745 43.2512 7.93471 43.1428 7.96674 43.0454C7.97044 43.0292 7.97311 43.0178 7.97449 43.0131C7.98116 42.9909 7.98791 42.9731 7.99196 42.9633C8.00019 42.9433 8.00906 42.9267 8.01433 42.9164C8.02555 42.8944 8.03872 42.8687 8.05421 42.8421C8.08608 42.7873 8.13866 42.7019 8.22355 42.5673C8.39438 42.2965 8.70734 41.8129 9.27681 40.9508C10.2998 39.4022 12.2842 36.5449 13.438 34.9157C15.3246 32.2518 16.4351 31.3658 17.559 30.659C18.3142 30.1842 19.124 30.0012 19.8279 29.915Z\"\n fill=\"#969E96\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2977_3039\" x=\"3.79053\" y=\"24.207\" width=\"57.8689\" height=\"29.8672\"\n filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"3\" />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.258824 0 0 0 0 0.372549 0 0 0 0 0.247059 0 0 0 0.25 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2977_3039\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2977_3039\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n);\n","import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"@radix-ui/react-accordion\";\nimport { useState } from \"react\";\nimport ExpandItemIcon from \"../../assets/svg/ExpandItemIcon\";\nimport LinkedNFTChip from \"../../assets/svg/LinkedNFTChip\";\nimport { NFTImgFail } from \"../../assets/svg/NFTImgFail\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"../ui/button\";\nimport { WidgetDataError } from \"../WidgetDataState\";\n\ntype NFTImageProps = React.SVGProps<SVGSVGElement> & {\n alt: string;\n url?: string | null;\n title?: string;\n className?: string;\n};\n\nconst NFTImg = ({ url, alt, title, className, ...props }: NFTImageProps) => {\n const [imgErr, setImgErr] = useState(false);\n\n return (\n <>\n {!imgErr && url ? (\n <img\n src={url}\n alt={alt}\n title={title}\n onError={() => setImgErr(true)}\n className={cn(\"gw-object-cover gw-rounded-md gw-block\", className)}\n />\n ) : (\n <NFTImgFail style={{ width: \"100%\", height: \"100%\" }} {...props} />\n )}\n </>\n );\n};\n\nexport function WalletNFTsTab() {\n const { glyphUrl, balances, hasBalances, isBalancesError, refreshBalances } = useGlyph();\n const [expandedItemId, setExpandedItemId] = useState<string>(\"\");\n const nfts = balances?.nfts || [];\n // const totalValue = balances?.wallet_value?.nfts;\n\n const nftsURL = new URL(\"/nfts\", glyphUrl).toString();\n\n return (\n <div className=\"gw-pl-4 gw-py-4 gw-flex gw-flex-col gw-h-full gw-min-h-0\">\n {/* Fixed header */}\n <div className=\"gw-flex gw-mb-2 gw-flex-row gw-justify-between gw-items-center gw-w-full gw-flex-shrink-0 gw-pr-4\">\n <span>My NFTs</span>\n {/* {totalValue ? (\n <div className=\"gw-typography-body1\">\n <span className=\"amount gw-font-medium gw-text-brand-gray-600\">\n {formatCurrency(totalValue, balances?.wallet_value?.currency, nfts.length > 0)}\n </span>\n </div>\n ) : null} */}\n </div>\n\n {isBalancesError ? (\n <WidgetDataError message=\"Balances are unavailable.\" onRetry={() => refreshBalances(true)} />\n ) : hasBalances && nfts?.length ? (\n <div className=\"gw-flex gw-flex-col gw-flex-1 gw-min-h-0\">\n {/* Scrollable accordion area */}\n <div className=\"gw-flex-1 gw-min-h-0 gw-overflow-auto\">\n <Accordion\n className=\"gw-w-full\"\n type=\"single\"\n collapsible\n value={expandedItemId}\n onValueChange={setExpandedItemId}\n >\n {nfts.map((t, idx) => {\n return (\n <div key={idx.toString()}>\n <AccordionItem value={idx.toString()} className=\"gw-pr-4\">\n <AccordionTrigger asChild>\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-py-2 gw-cursor-pointer\">\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-min-w-0 gw-flex-1\">\n <div className=\"gw-flex-shrink-0\">\n <NFTImg\n url={t.contractImage || t.image}\n alt={t.name}\n className=\"gw-w-10 gw-h-10\" // for img\n height=\"40\" // for svg\n width=\"40\" // for svg\n />\n </div>\n <span className=\"gw-text-sm gw-line-clamp-1 gw-truncate gw-letter-spacing-0.12 gw-min-w-0 gw-max-w-[75%]\">\n {t.name?.toLocaleUpperCase?.() || t.symbol || \"\"}\n </span>\n </div>\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-text-end gw-flex-shrink-0\">\n <ExpandItemIcon\n className={`${expandedItemId === idx.toString() ? \"\" : \"gw-rotate-180\"}`}\n />\n </div>\n </div>\n </AccordionTrigger>\n <AccordionContent>\n <div className=\"gw-grid gw-grid-cols-4 gw-gap-4 gw-my-2\">\n {t.items.map((item) => (\n <div key={item.tokenId} className=\"gw-relative\">\n {item.fromLinked && (\n <div className=\"gw-absolute gw-top-1 gw-right-1 gw-z-10\">\n <LinkedNFTChip />\n </div>\n )}\n {item.fromDelegated && (\n <div className=\"gw-absolute gw-bottom-0 gw-left-0 gw-right-0 gw-z-10\">\n <div className=\"gw-bg-black gw-bg-opacity-50 gw-text-white gw-text-center gw-text-[10px] gw-py-0.5 gw-px-1\">\n Delegate\n </div>\n </div>\n )}\n <NFTImg\n url={item.tokenImage || item.image?.thumbnailUrl}\n alt={item.tokenId}\n className=\"gw-w-16 gw-h-16\" // for img\n height=\"64\" // for svg\n width=\"64\" // for svg\n title={item.tokenName || item.name || item.tokenId}\n />\n </div>\n ))}\n </div>\n </AccordionContent>\n </AccordionItem>\n </div>\n );\n })}\n </Accordion>\n </div>\n\n {/* Fixed footer */}\n <div className=\"gw-flex gw-justify-center gw-items-center gw-w-full gw-text-brand-gray-500 gw-typography-body2 gw-flex-shrink-0 gw-mt-2\">\n Need to transfer? Use\n <a\n href={nftsURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonVariants({\n variant: \"link-inline\",\n size: \"xs-inline\",\n scale: false\n })}\n >\n Glyph Dashboard\n </a>\n </div>\n </div>\n ) : (\n <div\n className={cn(\n \"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-2 gw-whitespace-pre-wrap gw-text-center\",\n hasBalances ? \"!gw-text-[13px]\" : \"\"\n )}\n >\n {hasBalances\n ? `No NFTs found.\\nIf you own NFTs, they may be on a different network.\\nCheck your network selection.`\n : \"Loading...\"}\n </div>\n )}\n </div>\n );\n}\n","import NoTokenIcon from \"../../../assets/svg/NoTokenIcon\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TokenAndChainIcon = ({\n token,\n chain,\n tokenClassName,\n chainClassName\n}: {\n token: {\n logoUrl: string | undefined;\n name: string | undefined;\n };\n tokenClassName?: string;\n chain?: {\n id: number;\n logoUrl: string | undefined | null;\n name: string;\n };\n chainClassName?: string;\n}) => {\n return (\n <span className=\"gw-relative gw-flex-shrink-0\">\n {token.logoUrl ? (\n <img\n src={token.logoUrl}\n alt={token.name}\n className={cn(\"gw-rounded-full gw-size-10\", tokenClassName)}\n />\n ) : (\n <NoTokenIcon className={cn(\"gw-size-10 gw-rounded-full\", tokenClassName)} />\n )}\n\n {chain?.logoUrl && (\n <span\n className={cn(\n \"gw-absolute gw-bottom-0 gw-right-0 gw-translate-x-[10%] gw-translate-y-[10%] gw-size-5 gw-rounded-full gw-bg-background\",\n chainClassName\n )}\n >\n <img\n src={chain.logoUrl}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-full\"\n />\n </span>\n )}\n </span>\n );\n};\n","import NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useBalances } from \"../../hooks/useBalances\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { chainIdToRelayChain, formatTokenCount } from \"../../lib/utils\";\nimport { TokenAndChainIcon } from \"./internal/TokenAndChainIcon\";\nimport { WidgetDataError } from \"../WidgetDataState\";\n\nexport function WalletTokensTab() {\n const { balances, hasBalances, isBalancesError, refreshBalances, fetchForAllNetworks } = useBalances();\n\n const tokens = balances?.tokens || [];\n const totalValue = balances?.wallet_value?.tokens;\n\n return (\n <div className=\"gw-pl-4 gw-py-4 gw-flex gw-flex-col gw-h-full gw-min-h-0\">\n {/* Balance */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-pr-4\">\n <span>My Tokens</span>\n <div className=\"gw-typography-body1\">\n <span className=\"amount gw-font-medium gw-text-brand-gray-600\">\n {/* If tokens are present and any of the token has valueInWei > 0, show <0.01 */}\n {isBalancesError\n ? \"Unavailable\"\n : !hasBalances || totalValue === undefined\n ? \"—\"\n : formatCurrency(\n totalValue,\n tokens[0]?.currency,\n tokens?.some((t) => BigInt(t.valueInWei) !== 0n)\n )}\n </span>\n </div>\n </div>\n\n {isBalancesError ? (\n <WidgetDataError message=\"Balances are unavailable.\" onRetry={() => refreshBalances(true)} />\n ) : hasBalances && tokens?.length ? (\n <div className=\"gw-grid gw-grid-cols-1 gw-mt-2 gw-max-h-100 gw-min-h-0 gw-overflow-auto gw-pr-4\">\n {tokens.map((t, index) => {\n if (t?.hide) return null;\n const TokenIcon = t.logo ? (\n <img src={t.logo} alt={t.symbol} className=\"gw-size-10 gw-rounded-full\" />\n ) : (\n <NoTokenIcon className=\"gw-size-10\" />\n );\n\n const chain = chainIdToRelayChain(t.chainId);\n\n return (\n <div key={`${t?.chainId}:${t?.address}_token_list`} className=\"gw-w-full\">\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-py-2\">\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n {fetchForAllNetworks ? (\n <TokenAndChainIcon\n token={{\n name: t?.name,\n logoUrl: t?.logo ?? undefined\n }}\n chain={{\n id: t?.chainId,\n name: chain?.name ?? \"\",\n logoUrl: chain?.iconUrl ?? undefined\n }}\n />\n ) : (\n TokenIcon\n )}\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-max-w-32 gw-truncate\">\n {t.symbol || t.name}\n </span>\n {Number.isFinite(t.priceChangePct) && t.priceChangePct !== 0 && (\n <span\n className={`gw-typography-caption \n ${t.priceChangePct >= 0 ? \"gw-text-brand-success\" : \"gw-text-destructive\"}`}\n >\n {t.priceChangePct >= 0 ? \"+\" : \"\"}\n {t.priceChangePct.toFixed(2)}%\n </span>\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-text-end\">\n <span className=\"gw-font-medium\">\n {/* If USD amount is 0, but token value is not 0, show <0.01 */}\n {formatCurrency(t.amount, t.currency, BigInt(t.valueInWei) !== 0n)}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500 gw-flex gw-items-center gw-justify-end gw-gap-0.5 gw-flex-wrap\">\n <span>\n {formatTokenCount(t.valueInWei, t.decimals, t.displayDecimals)}{\" \"}\n </span>\n <span className=\"gw-max-w-20 gw-truncate gw-inline-block gw-break-words\">\n {t.symbol}\n </span>\n </span>\n </div>\n </div>\n {index < tokens.length - 1 && <hr className=\"gw-my-2 gw-border-muted\" />}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n {hasBalances ? \"No tokens found\" : \"Loading...\"}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { WalletMainViewTab } from \"../../../lib/constants\";\nimport { cn } from \"../../../lib/utils\";\n\nexport function WalletTokenVSNftSwitcher({\n activeTab,\n setActiveTab\n}: {\n activeTab: WalletMainViewTab;\n setActiveTab: (tab: WalletMainViewTab) => void;\n}) {\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabChange = (tab: WalletMainViewTab) => {\n setIsAnimating(true);\n setActiveTab(tab);\n setTimeout(() => setIsAnimating(false), 300);\n };\n return (\n <div className=\"gw-mx-auto gw-w-fit gw-my-2 gw-sticky gw-top-4 gw-z-10\">\n <div className=\"gw-mx-auto gw-w-fit gw-rounded-full gw-bg-brand-bone gw-ring gw-ring-brand-clay\">\n <div className=\"gw-flex\">\n <div className=\"gw-flex-1 gw-px-2 gw-py-1 gw-relative gw-z-20 gw-min-w-[60px]\">\n <button\n onClick={() => handleTabChange(WalletMainViewTab.TOKENS)}\n className={cn(\n activeTab === WalletMainViewTab.TOKENS\n ? \"gw-text-foreground\"\n : \"gw-text-brand-gray-500\",\n \"gw-px-2 gw-w-full gw-text-center gw-justify-center gw-flex gw-items-center gw-transition-colors gw-delay-75 gw-duration-300\"\n )}\n >\n Tokens\n </button>\n </div>\n\n <div className=\"gw-flex-1 gw-px-2 gw-py-1 gw-relative gw-z-20 gw-min-w-[60px]\">\n <button\n onClick={() => handleTabChange(WalletMainViewTab.NFTS)}\n className={cn(\n activeTab === WalletMainViewTab.NFTS ? \"gw-text-foreground\" : \"gw-text-brand-gray-500\",\n \"gw-px-2 gw-w-full gw-text-center gw-justify-center gw-flex gw-items-center gw-transition-colors gw-delay-75 gw-duration-300\"\n )}\n >\n NFTs\n </button>\n </div>\n </div>\n </div>\n <div\n className={cn(\n \"gw-absolute gw-bottom-0 gw-left-0 gw-h-full gw-rounded-full gw-right-0 gw-w-1/2 gw-z-10 gw-transition-all gw-duration-300 gw-ease-in-out\",\n activeTab === WalletMainViewTab.NFTS ? \"gw-left-1/2\" : \"\",\n isAnimating ? \"gw-scale-110\" : \"\",\n \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-bg-brand-white/20 gw-shadow-liquidSm\"\n )}\n />\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport { INTERNAL_GRADIENT_TYPE, WalletMainViewTab, WalletView } from \"../../lib/constants\";\nimport WalletViewFooterNav from \"../shared/WalletViewFooterNav\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { WalletActivityTab } from \"./WalletActivityTab\";\nimport { WalletHomeTab } from \"./WalletHomeTab\";\nimport { WalletLinkedAccountsTab } from \"./WalletLinkedAccountsTab\";\nimport { WalletNFTsTab } from \"./WalletNFTsTab\";\nimport { WalletTokensTab } from \"./WalletTokensTab\";\nimport { WalletTokenVSNftSwitcher } from \"./internal/WalletTokenVsNftSwitcher\";\n\nexport type WalletMainProps = {\n setWalletView: (view: WalletView) => void;\n activeMainViewScreen: WalletMainViewTab;\n setActiveMainViewScreen: (screen: WalletMainViewTab) => void;\n expandFirstActivityRow?: boolean;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport function WalletMainView({\n setWalletView,\n activeMainViewScreen,\n setActiveMainViewScreen,\n expandFirstActivityRow = false,\n setGradientType\n}: WalletMainProps) {\n // Set the gradient type to primary when the main view is opened\n useEffect(() => {\n setGradientType(INTERNAL_GRADIENT_TYPE.PRIMARY);\n\n // Reset the gradient type when the main view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType]);\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n header={\n <WalletViewHeader isStickyHeader={false} onProfileClick={() => setWalletView(WalletView.PROFILE)} />\n }\n content={\n <>\n {/* Home Tab */}\n {activeMainViewScreen === WalletMainViewTab.HOME && <WalletHomeTab setWalletView={setWalletView} />}\n\n {[WalletMainViewTab.TOKENS, WalletMainViewTab.NFTS].includes(activeMainViewScreen) && (\n <div className=\"gw-flex gw-flex-col gw-h-full\">\n {/* Token vs NFT Switcher */}\n <WalletTokenVSNftSwitcher\n activeTab={activeMainViewScreen}\n setActiveTab={setActiveMainViewScreen}\n />\n {/* Tokens Tab */}\n {activeMainViewScreen === WalletMainViewTab.TOKENS && <WalletTokensTab />}\n {/* NFTs Tab */}\n {activeMainViewScreen === WalletMainViewTab.NFTS && <WalletNFTsTab />}\n </div>\n )}\n\n {/* Linked Accounts Tab */}\n {activeMainViewScreen === WalletMainViewTab.LINKED_ACCOUNTS && <WalletLinkedAccountsTab />}\n {/* Activity Tab */}\n {activeMainViewScreen === WalletMainViewTab.ACTIVITY && (\n <WalletActivityTab expandFirst={expandFirstActivityRow} />\n )}\n </>\n }\n footer={<WalletViewFooterNav tab={activeMainViewScreen} setTab={setActiveMainViewScreen} />}\n />\n );\n}\n","export default import.meta.ROLLUP_FILE_URL_C9$sJpBj;","function EditIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_385_15340)\">\n <path\n d=\"M6.40951 2.54541H2.51315C2.2179 2.54541 1.93474 2.6627 1.72596 2.87147C1.51719 3.08025 1.3999 3.36341 1.3999 3.65866V11.4514C1.3999 11.7466 1.51719 12.0298 1.72596 12.2386C1.93474 12.4473 2.2179 12.5646 2.51315 12.5646H10.3059C10.6011 12.5646 10.8843 12.4473 11.0931 12.2386C11.3018 12.0298 11.4191 11.7466 11.4191 11.4514V7.55502\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33587\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.5843 1.7101C10.8057 1.48866 11.1061 1.36426 11.4192 1.36426C11.7324 1.36426 12.0327 1.48866 12.2542 1.7101C12.4756 1.93154 12.6 2.23187 12.6 2.54503C12.6 2.8582 12.4756 3.15853 12.2542 3.37997L6.96624 8.66789L4.73975 9.22452L5.29637 6.99802L10.5843 1.7101Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33587\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_385_15340\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport default EditIcon;\n","import profileGradient from \"../../assets/images/profile-gradient.png\";\nimport EditIcon from \"../../assets/svg/EditIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { cn } from \"../../lib/utils\";\nimport UserAvatar from \"../shared/UserAvatar\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\n\nexport type WalletProfileProps = {\n onBack: () => void;\n};\n\nexport function WalletProfileView({ onBack }: WalletProfileProps) {\n const { user, logout, glyphUrl } = useGlyph();\n const editUrl = new URL(\"/profile/edit\", glyphUrl).toString();\n\n return (\n <WalletViewTemplate\n isStickyHeader\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Profile\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-w-full gw-flex gw-flex-col gw-h-full\">\n <div className=\"gw-flex gw-flex-col gw-relative gw-justify-center gw-items-center gw-p-4 gw-overflow-hidden gw-h-32\">\n <Button\n variant={\"tertiary\"}\n shadow\n onClick={() => {\n window.open(editUrl, \"_blank\");\n }}\n className=\"gw-absolute gw-group gw-rounded-full !gw-ring-0 gw-h-8 gw-px-2.5 gw-gap-0 gw-top-2 gw-right-2 gw-z-[1] gw-inline-flex gw-items-center\"\n >\n <span\n className={cn(\n `group-hover:gw-w-16 gw-w-0 gw-overflow-hidden gw-whitespace-nowrap gw-transition-all gw-duration-300 gw-text-xs`\n )}\n >\n Edit Profile\n </span>\n <EditIcon className=\"!gw-size-3\" />\n </Button>\n <img\n src={profileGradient}\n alt=\"profile-gradient\"\n className=\"gw-absolute gw-top-0 gw-left-0 gw-w-full gw-h-full gw-object-cover\"\n />\n </div>\n\n <div className=\"gw-relative gw-z-[1] gw-flex gw-flex-col gw-items-center gw-justify-center -gw-translate-y-1/2 gw-top-4 gw-typography-h6-nr\">\n <UserAvatar className=\"gw-size-28 gw-border-popover gw-border-4\" />\n <div className=\"gw-mt-4 gw-font-bold\">{user?.name}</div>\n </div>\n\n <div className=\"gw-p-4 gw-flex-1 gw-flex gw-flex-col gw-justify-end gw-items-center gw-w-full\">\n <div className=\"gw-flex gw-flex-col gw-space-y-3 gw-w-full\">\n <Button\n variant=\"tertiary\"\n className=\"gw-w-full\"\n onClick={() => {\n window.open(editUrl, \"_blank\");\n }}\n >\n Edit Profile on Glyph Dashboard\n </Button>\n\n <Button variant=\"outline\" className=\"gw-w-full\" onClick={logout}>\n Log Out\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n}\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","export default import.meta.ROLLUP_FILE_URL_CKQMVLPb;","import { QRCodeSVG } from \"qrcode.react\";\nimport { useEffect } from \"react\";\nimport { toast } from \"sonner\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport Icon from \"../../assets/images/icon.png\";\nimport { useBalances } from \"../../hooks/useBalances\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { chainIdToRelayChain } from \"../../lib/utils\";\nimport CopyButton from \"../shared/CopyButton\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { buttonVariants } from \"../ui/button\";\n\nconst BALANCE_REFRESH_INTERVAL_MS = 5000;\n\nexport type WalletReceiveProps = {\n onBack: () => void;\n};\n\nexport function WalletReceiveView({ onBack }: WalletReceiveProps) {\n const { ready, user } = useGlyph();\n const { refreshBalances, balances } = useBalances();\n\n useEffect(() => {\n if (!ready) return;\n\n const interval = setInterval(\n () =>\n refreshBalances(\n true,\n balances?.tokens.reduce(\n (acc, token) => ({\n ...acc,\n [`${token.chainId}:${token.address}`]: (amount: number) =>\n toast.success(\n `Received ${amount} ${token.symbol} on ${chainIdToRelayChain(token.chainId)?.displayName || token?.chainId}`\n )\n }),\n {}\n )\n ),\n BALANCE_REFRESH_INTERVAL_MS\n );\n return () => clearInterval(interval);\n }, [ready, refreshBalances, balances]);\n\n return (\n <WalletViewTemplate\n header={\n <WalletViewHeader\n fullScreenHeader={{\n title: \"Receive\",\n onBackClick: onBack\n }}\n isStickyHeader={true}\n />\n }\n isStickyHeader={true}\n content={\n <div className=\"gw-w-full gw-p-4 gw-flex gw-flex-col gw-items-center gw-justify-evenly gw-space-y-6 gw-h-full\">\n <div className=\"gw-bg-primary gw-rounded-3xl gw-p-2 gw-shadow-lg\">\n <QRCodeSVG\n value={user!.evmWallet!}\n width={180}\n height={180}\n className=\"gw-rounded-2xl gw-p-3 gw-bg-background\"\n imageSettings={{\n src: Icon,\n height: 24,\n width: 24,\n excavate: true\n }}\n />\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-center gw-space-y-2 gw-justify-center\">\n <h6>{user?.name}</h6>\n <span className=\"gw-text-brand-gray-500\">{truncateEthAddress(user!.evmWallet!)}</span>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-w-full\">\n <div className=\"gw-h-0 gw-border-b gw-w-full gw-flex-1 gw-border-brand-gray-500 gw-mr-4\" />\n <span className=\"gw-text-brand-gray-500 gw-typography-body2\">or</span>\n <div className=\"gw-h-0 gw-border-b gw-w-full gw-flex-1 gw-border-brand-gray-500 gw-ml-4\" />\n </div>\n\n <CopyButton\n text=\"Copy Wallet Address\"\n textToCopy={user?.evmWallet}\n className={buttonVariants({\n variant: \"default\",\n size: \"default\",\n className: \"gw-w-full\"\n })}\n iconClassName=\"gw-text-secondary-foreground\"\n />\n </div>\n }\n />\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"gw-fixed gw-inset-0 gw-z-50 gw-bg-black/40 data-[state=open]:gw-animate-in data-[state=closed]:gw-animate-out data-[state=closed]:gw-fade-out-0 data-[state=open]:gw-fade-in-0 gw-rounded-t-3xl md:gw-rounded-6xl\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n container?: HTMLElement | null;\n }\n>(({ className, children, container, ...props }, ref) => (\n <DialogPortal container={container}>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"gw-fixed gw-left-[50%] gw-top-[50%] gw-z-50 gw-grid gw-w-[calc(100%-1rem)] gw-max-h-[calc(100vh-2rem)] gw-overflow-auto sm:gw-max-w-lg gw-translate-x-[-50%] gw-translate-y-[-50%] gw-gap-4 gw-bg-popover/80 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-p-4 gw-shadow-liquid gw-duration-200 data-[state=open]:gw-animate-in data-[state=closed]:gw-animate-out data-[state=closed]:gw-fade-out-0 data-[state=open]:gw-fade-in-0 data-[state=closed]:gw-zoom-out-95 data-[state=open]:gw-zoom-in-95 data-[state=closed]:gw-slide-out-to-left-1/2 data-[state=closed]:gw-slide-out-to-top-[48%] data-[state=open]:gw-slide-in-from-left-1/2 data-[state=open]:gw-slide-in-from-top-[48%] gw-rounded-4xl\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"gw-absolute gw-right-4 gw-top-4 gw-rounded-sm gw-opacity-70 gw-ring-offset-background gw-transition-opacity hover:gw-opacity-100 focus:gw-outline-none focus:gw-ring-2 focus:gw-ring-ring focus:gw-ring-offset-2 disabled:gw-pointer-events-none data-[state=open]:gw-bg-accent data-[state=open]:gw-text-muted-foreground\">\n <X className=\"gw-h-4 gw-w-4\" />\n <span className=\"gw-sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"gw-flex gw-flex-col gw-space-y-1.5 gw-text-center\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"gw-flex gw-flex-col-reverse sm:gw-flex-row sm:gw-justify-end sm:gw-space-x-2\", className)}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"gw-typography-subtitle1 !gw-text-lg gw-font-semibold gw-leading-none gw-tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"gw-typography-body2 gw-text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n};\n","import { ChevronDown, FuelIcon } from \"lucide-react\";\nimport { memo, useEffect, useMemo, useRef, useState } from \"react\";\nimport { zeroAddress } from \"viem\";\nimport { useChainId, useSwitchChain } from \"wagmi\";\nimport { useBalances } from \"../../../hooks/useBalances\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { chainIdToRelayChain, cn, formatTokenCount } from \"../../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from \"../../ui/dialog\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport TooltipElement from \"../../ui/tooltip-element\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\nimport { WidgetDataError } from \"../../WidgetDataState\";\n\nconst SendFundChainAndTokenSelector = ({\n onTokenSelect,\n selectedToken\n}: {\n onTokenSelect: (token: GlyphWidgetTokenBalancesItem | undefined) => void;\n selectedToken: GlyphWidgetTokenBalancesItem | undefined;\n}) => {\n const [open, setOpen] = useState<boolean>(false);\n\n const chainId = useChainId();\n const { switchChainAsync } = useSwitchChain();\n\n const { balances, hasBalances, isBalancesError, refreshBalances, fetchForAllNetworks, setFetchForAllNetworks } =\n useBalances();\n const currentChainId = fetchForAllNetworks ? \"all\" : chainId;\n\n const selectedTokenChain = useMemo(() => {\n if (!selectedToken?.chainId) return null;\n return chainIdToRelayChain(selectedToken.chainId);\n }, [selectedToken?.chainId]);\n\n // const [searchTerm, setSearchTerm] = useState<string>(\"\");\n // const [debouncedSearchTerm, setDebouncedSearchTerm] = useState<string>(\"\");\n // const debouncedFunc = useMemo(\n // () =>\n // debounce(500, (value: string) => {\n // setDebouncedSearchTerm(value);\n // }),\n // []\n // );\n // const isTermAnAddress = isAddress(debouncedSearchTerm);\n\n const [currentChain] = useMemo(() => {\n if (currentChainId === \"all\") return [null];\n const chain = chainIdToRelayChain(currentChainId);\n return [chain];\n }, [currentChainId]);\n\n const collisionRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n collisionRef.current = document.querySelector(\".gw-wallet-container\");\n }, []);\n\n const handleTokenSelect = async (token: GlyphWidgetTokenBalancesItem) => {\n // setToken first and then switch chain\n onTokenSelect(token);\n\n if (chainId !== token?.chainId) {\n await switchChainAsync({ chainId: token.chainId });\n }\n setOpen(false);\n };\n\n return (\n <>\n <Dialog open={open} onOpenChange={setOpen} modal>\n <DialogTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n // TODO: Logic to open token selector\n }}\n className={cn(\n \"gw-rounded-full gw-p-1 gw-pr-2 gw-h-12 gw-w-auto gw-min-w-0 !gw-ring-0 gw-flex gw-items-center gw-space-x-1\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n {selectedTokenChain && selectedToken ? (\n <div className=\"gw-flex gw-items-center gw-gap-1.5\">\n <TokenAndChainIcon\n token={{\n name: selectedToken.name,\n logoUrl: selectedToken.logo ?? undefined\n }}\n chain={{\n id: selectedTokenChain.id,\n name: selectedTokenChain.name,\n logoUrl: selectedTokenChain.iconUrl\n }}\n />\n\n <span className=\"gw-flex gw-flex-col gw-items-start gw-justify-between gw-gap-1\">\n <span className=\"gw-typography-body1 !gw-leading-none !gw-font-bold gw-inline-block gw-pr-1\">\n {selectedToken.symbol}\n </span>\n <span className=\"gw-typography-caption !gw-leading-none gw-text-brand-gray-500\">\n {CHAIN_NAMES[selectedTokenChain.id] || selectedTokenChain.displayName}\n </span>\n </span>\n </div>\n ) : (\n <div className=\"gw-h-8 gw-rounded-full gw-typography-caption gw-flex gw-items-center gw-justify-center gw-text-brand-gray-500 gw-pl-3\">\n Select Token\n </div>\n )}\n <ChevronDown className=\"gw-size-4 gw-flex-shrink-0 gw-text-gray-500\" />\n </button>\n </DialogTrigger>\n <DialogContent container={collisionRef.current} className=\"gw-max-h-[calc(100%-1rem)]\">\n <DialogHeader>\n <DialogTitle>Select Token</DialogTitle>\n <DialogDescription className=\"gw-sr-only\">Select a token to transfer</DialogDescription>\n </DialogHeader>\n\n <div className=\"gw-flex gw-flex-col gw-gap-4\">\n {/* <Input\n type=\"text\"\n placeholder=\"Search token name or paste address\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n debouncedFunc(e.target.value);\n }}\n /> */}\n\n {/* Networks */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Select Network</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n <Button\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === \"all\" && \"gw-bg-muted/80 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setFetchForAllNetworks(true)}\n >\n <span className=\"gw-typography-caption\">All</span>\n </Button>\n {relayClient.chains.map((chain) => (\n <Button\n key={`${chain.id}_networks`}\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === chain.id &&\n \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={async () => {\n if (currentChainId === chain.id) return;\n // Reset the selected token\n onTokenSelect(undefined);\n\n // Switch chain first and then set fetchForAllNetworks to false - otherwise useEffect would fetch balances twice\n await switchChainAsync({\n chainId: chain.id\n });\n setFetchForAllNetworks(false);\n }}\n >\n {chain.iconUrl ? (\n <img\n src={chain.iconUrl || \"\"}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-8\"\n />\n ) : (\n <span className=\"gw-typography-caption\">\n {CHAIN_NAMES[chain.id] || chain.name}\n </span>\n )}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Token List */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">{\"Your tokens\"}</div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {isBalancesError ? (\n <WidgetDataError\n compact\n message=\"Balances are unavailable.\"\n onRetry={() => refreshBalances(true)}\n />\n ) : hasBalances && balances?.tokens.length ? (\n balances?.tokens?.map((token, index) => {\n const tokenChain = currentChain ?? chainIdToRelayChain(token?.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain?.id;\n return (\n <div\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleTokenSelect(token);\n }\n }}\n onClick={() => handleTokenSelect(token)}\n key={`${token.chainId}:${token.address}_token_list`}\n className=\"gw-w-full\"\n >\n <div\n className={cn(\n \"gw-flex gw-justify-between gw-items-center gw-w-full gw-p-2 gw-rounded-xl hover:gw-bg-gray-500/15\",\n {\n \"gw-bg-green-500/15 gw-shadow-liquidSm gw-backdrop-blur-sm gw-border gw-border-brand-white/20\":\n isTokenSelected\n }\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.logo ?? undefined\n }}\n chain={{\n id: tokenChain.id,\n name: tokenChain.name,\n logoUrl: tokenChain.iconUrl\n }}\n />\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-flex gw-gap-1 gw-items-center\">\n <span className=\"gw-font-medium\">{token.symbol}</span>\n {token.address === zeroAddress && (\n <TooltipElement\n side=\"bottom\"\n align=\"center\"\n stopPropagation\n description=\"Gas Token\"\n >\n <span className=\"gw-size-[18px] gw-bg-brand-success gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <FuelIcon />\n </span>\n </TooltipElement>\n )}\n </span>\n\n <span\n className={`gw-typography-caption gw-text-brand-gray-500 `}\n >\n {CHAIN_NAMES[tokenChain.id] || tokenChain.displayName}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-h-full gw-text-right\">\n <span className=\"gw-typography-caption\">\n {/* If USD amount is 0, but token value is not 0, show <0.01 */}\n {formatCurrency(\n token.amount,\n token.currency,\n BigInt(token.valueInWei) !== 0n\n )}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {formatTokenCount(\n token.valueInWei,\n token.decimals,\n token.displayDecimals\n )}{\" \"}\n {token.symbol}\n </span>\n </div>\n </div>\n {index < balances?.tokens.length - 1 && (\n <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />\n )}\n </div>\n );\n })\n ) : hasBalances ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n No tokens found\n </div>\n ) : (\n new Array(3).fill(0).map((_, index) => (\n <div key={index} className=\"gw-w-full\">\n <Skeleton className=\"gw-flex gw-items-center gw-justify-center gw-h-14\" />\n {index < 2 && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nexport default memo(SendFundChainAndTokenSelector);\n","import type { FunctionComponent } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputHelperProps {\n type?: \"error\" | \"helper\";\n text?: string;\n className?: string;\n}\n\nconst InputHelper: FunctionComponent<InputHelperProps> = ({ text, type, className }) => (\n <div className=\"gw-relative gw-w-full\">\n {text ? (\n <p\n className={cn(\n `gw-absolute gw-translate-y-1 gw-pr-2 gw-w-full gw-typography-caption`,\n type === \"error\" ? \"gw-text-destructive\" : \"gw-text-muted\",\n className\n )}\n >\n {text}\n </p>\n ) : null}\n </div>\n);\n\nexport default InputHelper;\n","import { forwardRef, InputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport InputHelper from \"./input-helper\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: {\n value: string;\n htmlFor: string;\n className?: string;\n floatingLabel?: boolean;\n };\n leadingIcon?: {\n element: ReactNode;\n className?: string;\n };\n trailingIcon?: {\n element: ReactNode;\n className?: string;\n };\n parentClassName?: string;\n bodyClassName?: string;\n supportingText?: {\n value: string;\n isError?: boolean;\n className?: string;\n };\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n supportingText,\n parentClassName,\n bodyClassName,\n leadingIcon,\n trailingIcon,\n\n // Input tag related\n className,\n type,\n placeholder,\n ...props\n },\n ref\n ) => {\n return (\n <div className={cn(\"gw-typography-body2 gw-pb-3 gw-w-full\", parentClassName)}>\n {label && !label.floatingLabel ? (\n <label\n className={cn(\n \"gw-text-brand-gray-500\",\n supportingText?.isError && \"gw-text-destructive\",\n label.className\n )}\n htmlFor={label.htmlFor}\n >\n {label.value}\n </label>\n ) : null}\n\n <div\n className={cn(\n `gw-relative gw-w-full gw-text-foreground gw-typography-body1 `,\n supportingText?.isError && \"gw-text-destructive\",\n !label?.floatingLabel && \"gw-mt-1\",\n bodyClassName\n )}\n >\n {leadingIcon ? (\n <div\n className={cn(\n `gw-absolute gw-inset-y-0 gw-z-[1] gw-left-0 gw-rounded-l-xl gw-flex gw-items-center gw-w-11 gw-pointer-events-none`,\n props.disabled && \"gw-opacity-50\",\n leadingIcon.className\n )}\n >\n {leadingIcon.element}\n </div>\n ) : null}\n\n <input\n className={cn(\n \"gw-peer gw-flex gw-w-full gw-rounded-full gw-outline-none gw-py-3 gw-px-5 gw-h-12 gw-transition-all file:gw-border-0 gw-placeholder-brand-gray-500 focus-visible:gw-outline-none focus-visible:gw-ring-secondary disabled:gw-cursor-not-allowed disabled:gw-opacity-50\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border-1 hover:gw-ring-2 focus:gw-ring-1 gw-ring-input gw-border-brand-white/20 gw-shadow-liquidSm\", // liquid glass shadow\n supportingText?.isError &&\n \"gw-ring-destructive/50 dark:gw-ring-destructive/50 focus-visible:gw-ring-destructive\",\n Boolean(leadingIcon) && \"gw-pl-11\",\n Boolean(trailingIcon) && \"gw-pr-11\",\n label?.floatingLabel &&\n (supportingText?.isError\n ? \"gw-placeholder-transparent focus:gw-placeholder-error/50\"\n : \"gw-placeholder-transparent focus:gw-placeholder-brand-gray-500\"),\n className\n )}\n // If passed separately will be overridden in props\n id={label?.htmlFor}\n // Don't allow \"e\" in field type number\n onKeyDown={(evt) => {\n if (type === \"number\" && evt.key === \"e\") {\n evt.preventDefault();\n }\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n // Blur when scroll happens [To not allow increment/decrement in number field on scroll inside field]\n placeholder={!label?.floatingLabel ? placeholder : placeholder || \" \"}\n ref={ref}\n type={type}\n {...props}\n />\n {label && label.floatingLabel ? (\n <label\n className={cn(\n `gw-absolute gw-cursor-text gw-duration-300 gw-text-brand-gray-500 peer-placeholder-shown:gw-text-input peer-focus:gw-text-foreground gw-transform gw-typography-caption gw--translate-y-1/2 gw-scale-90 gw-top-0 gw-z-[1] gw-bg-background peer-focus:gw-px-1.5 peer-placeholder-shown:gw-px-0 gw-px-1.5 gw-left-1.5 peer-focus:gw-left-1.5 peer-focus:gw-top-0 peer-focus:gw-scale-90 peer-focus:gw--translate-y-1/2 peer-placeholder-shown:gw-scale-100 peer-placeholder-shown:gw--translate-y-1/2 peer-placeholder-shown:gw-top-1/2 gw-pointer-events-none autofill:gw-bg-transparent`,\n leadingIcon && \"peer-placeholder-shown:gw-left-11\",\n trailingIcon && \"peer-placeholder-shown:gw-right-11\",\n props.disabled && \"gw-text-foreground/50 peer-placeholder-shown:gw-text-input/50\",\n supportingText?.isError && \"gw-text-destructive\",\n label.className\n )}\n htmlFor={label.htmlFor}\n >\n {label.value}\n </label>\n ) : null}\n\n {trailingIcon ? (\n <div\n className={cn(\n `gw-absolute gw-inset-y-0 gw-z-[1] gw-flex gw-items-center gw-w-11 gw-right-0 gw-rounded-r-xl gw-pointer-events-none`,\n props.disabled && \"gw-opacity-50\",\n trailingIcon.className\n )}\n >\n {trailingIcon.element}\n </div>\n ) : null}\n </div>\n\n {supportingText ? (\n <InputHelper\n className={supportingText?.className}\n text={supportingText?.value}\n type={supportingText?.isError ? \"error\" : \"helper\"}\n />\n ) : null}\n </div>\n );\n }\n);\n\nexport { Input };\n","import { memo, useEffect } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { checksumAddress, Hex, isAddress } from \"viem\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { SendView } from \"../../../lib/constants\";\nimport { cn, ethereumAvatar } from \"../../../lib/utils\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { Input } from \"../../ui/input\";\n\ninterface WalletSendFundEnterAddressViewProps {\n onBack: () => void;\n setView: (view: SendView) => void;\n setRecipientAddress: (address: string) => void;\n setRecipientAddressError: (error: string) => void;\n recipientAddress: string;\n recipientAddressError: string | null;\n}\n\nconst WalletSendFundEnterAddressView = ({\n onBack,\n setView,\n setRecipientAddress,\n setRecipientAddressError,\n recipientAddress,\n recipientAddressError\n}: WalletSendFundEnterAddressViewProps) => {\n const { user } = useGlyph();\n\n useEffect(() => {\n if (recipientAddressError) return;\n if (!recipientAddress) return;\n\n if (!isAddress(recipientAddress, { strict: false }))\n setRecipientAddressError(\"Please enter a valid recipient wallet address\");\n }, [recipientAddress, recipientAddressError, setRecipientAddressError]);\n\n return (\n <WalletViewTemplate\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Send Funds\",\n onBackClick: onBack\n }}\n />\n }\n isStickyHeader={true}\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full gw-flex gw-flex-col\">\n <div>\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">From</div>\n <div\n className={cn(\n \"gw-rounded-full gw-px-2.5 gw-py-2 gw-mt-3 gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\" // liquid glass shadow\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-4 gw-justify-between\">\n <UserAvatar className=\"gw-size-11\" />\n\n <div className=\"gw-flex gw-flex-col\">\n <div className=\"gw-mt-1.5 gw-typography-subtitle1 gw-text-left\">{user?.name}</div>\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {truncateEthAddress(user?.evmWallet || \"\")}\n </div>\n </div>\n\n <div />\n </div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-primary gw-my-6 gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-5 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-5\" />\n </div>\n\n <div>\n <Input\n label={{\n htmlFor: \"recipientAddress\",\n value: \"To\"\n }}\n leadingIcon={\n isAddress(recipientAddress)\n ? {\n element: (\n <UserAvatar\n className=\"gw-size-10 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(recipientAddress)}\n />\n ),\n className: \"gw-justify-center gw-w-14\"\n }\n : undefined\n }\n id=\"recipientAddress\"\n className={cn(\n \"gw-rounded-full gw-border gw-py-4 gw-h-auto gw-mt-3 gw-flex gw-items-center gw-space-x-4 gw-justify-between gw-w-full\",\n isAddress(recipientAddress) && \"gw-pl-14\"\n )}\n placeholder=\"Enter recipient wallet address\"\n value={recipientAddress}\n onChange={(e) => {\n setRecipientAddress(e.target.value);\n if (!e.target.value) return setRecipientAddressError(\"\");\n\n if (!isAddress(e.target.value, { strict: false }))\n return setRecipientAddressError(\"Please enter a valid wallet address\");\n\n if (\n user?.evmWallet &&\n checksumAddress(e.target.value as Hex) === checksumAddress(user?.evmWallet as Hex)\n )\n return setRecipientAddressError(\"You cannot send funds to your own wallet\");\n\n setRecipientAddressError(\"\");\n }}\n supportingText={{\n value: recipientAddressError || \"\",\n isError: !!recipientAddressError,\n className: \"gw-ml-2\"\n }}\n />\n </div>\n </div>\n }\n footer={\n <>\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full gw-shadow-2xl before:gw-backdrop-blur-sm\"\n disabled={!recipientAddress || !!recipientAddressError}\n onClick={() => {\n setRecipientAddress(checksumAddress(recipientAddress as Hex));\n setView(SendView.ENTER_AMOUNT);\n }}\n >\n Continue\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n );\n};\n\nexport default memo(WalletSendFundEnterAddressView);\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletSendFundFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n txHash: string | undefined;\n txBlockExplorerUrl: string | undefined;\n txBlockExplorerName: string | undefined;\n}\n\nconst WalletSendFundFailedView: React.FC<WalletSendFundFailedViewProps> = ({\n onEnd,\n onShowActivity,\n txHash,\n txBlockExplorerUrl,\n txBlockExplorerName\n}) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n <div className=\"gw-my-10 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txHash && txBlockExplorerUrl ? (\n <LinkWithIcon\n key={txHash}\n text={`View on ${txBlockExplorerName || \"block explorer\"}`}\n url={txBlockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundFailedView);\n","import { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { ethereumAvatar } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { SendFundQuote } from \"../WalletSendFundView\";\n\ninterface WalletSendFundPendingViewProps {\n onBack: () => void;\n txHash: string | undefined;\n txBlockExplorerUrl: string | undefined;\n txBlockExplorerName: string | undefined;\n quote: SendFundQuote;\n tokenSymbol: string;\n TokenIcon: React.JSX.Element;\n}\n\nconst WalletSendFundPendingView: React.FC<WalletSendFundPendingViewProps> = ({\n onBack,\n txHash,\n txBlockExplorerUrl,\n txBlockExplorerName,\n quote,\n tokenSymbol,\n TokenIcon\n}) => {\n const { user } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n <h6>In Progress</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">1 min</span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar className=\"gw-size-8\" />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">From</div>\n <div>{truncateEthAddress(user!.evmWallet)}</div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-gap-3 gw-items-center\">\n <div className=\"gw-my-5 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n\n <div className=\"gw-flex gw-items-center gw-justify-center gw-relative gw-z-[1]\">\n {TokenIcon}\n <div className=\"gw-typography-body2 gw-ml-2\">\n <span>{quote?.receivable_amount_in_token}</span>{\" \"}\n <span className=\"gw-text-brand-gray-500\">{tokenSymbol}</span>\n </div>\n </div>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-space-x-3 gw-justify-between gw-relative gw-z-[1]\">\n <UserAvatar\n className=\"gw-size-8\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(quote?.receiver_address)}\n />\n\n <div className=\"gw-flex gw-flex-col gw-typography-body2\">\n <div className=\"\">To</div>\n <div>{truncateEthAddress(quote?.receiver_address)}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n {txHash && txBlockExplorerUrl && (\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500\">\n <LinkWithIcon\n key={txHash}\n text={`View on ${txBlockExplorerName || \"block explorer\"}`}\n url={txBlockExplorerUrl}\n />\n </span>\n )}\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletSendFundPendingView);\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyph } from \"../../../hooks/useGlyph\";\nimport { cn, ethereumAvatar } from \"../../../lib/utils\";\nimport UserAvatar from \"../../shared/UserAvatar\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { SendFundQuote } from \"../WalletSendFundView\";\n\ninterface WalletSendFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n quote: SendFundQuote;\n tokenSymbol: string;\n}\n\nconst WalletSendFundSuccessView: React.FC<WalletSendFundSuccessViewProps> = ({\n onEnd,\n onShowActivity,\n quote,\n tokenSymbol\n}) => {\n const { user } = useGlyph();\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`${quote.receivable_amount_in_token} ${tokenSymbol} have been successfully\\nsent to ${truncateEthAddress(quote.receiver_address)}`}\n </span>\n\n <div\n className={cn(\n \"gw-my-10 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-2 gw-w-full gw-justify-between\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\" // liquid glass shadow\n )}\n >\n <div className=\"gw-flex gw-gap-2 gw-items-center\">\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">From</span>\n <span className=\"gw-break-all\">\n {user?.name || truncateEthAddress(user?.evmWallet || \"\")}\n </span>\n </div>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-min-w-24\">\n <UserAvatar\n className=\"gw-size-6 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(quote.receiver_address)}\n />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">To</span>\n <span className=\"gw-break-all\">\n {truncateEthAddress(quote.receiver_address)}\n </span>\n </div>\n </div>\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundSuccessView);\n","import { Loader2 } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { debounce } from \"throttle-debounce\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport {\n createPublicClient,\n encodeFunctionData,\n erc20Abi,\n fallback,\n formatUnits,\n Hex,\n http,\n parseEther,\n zeroAddress\n} from \"viem\";\nimport { useChainId, useChains } from \"wagmi\";\nimport { CaretDownIcon } from \"../../assets/svg/CaretDownIcon\";\nimport NoTokenIcon from \"../../assets/svg/NoTokenIcon\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { useGlyphApi } from \"../../hooks/useGlyphApi\";\nimport { INTERNAL_GRADIENT_TYPE, MAX_DECIMALS_FOR_CRYPTO, SendView } from \"../../lib/constants\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport {\n cn,\n createLogger,\n displayNumberPrecision,\n ethereumAvatar,\n formatTokenCount,\n tokenToBigIntWei\n} from \"../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../types\";\nimport UserAvatar from \"../shared/UserAvatar\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport SendFundChainAndTokenSelector from \"./internal/SendFundChainAndTokenSelector\";\nimport WalletSendFundEnterAddressView from \"./internal/WalletSendFundEnterAddressView\";\nimport WalletSendFundFailedView from \"./internal/WalletSendFundFailedView\";\nimport WalletSendFundPendingView from \"./internal/WalletSendFundPendingView\";\nimport WalletSendFundSuccessView from \"./internal/WalletSendFundSuccessView\";\n\nexport type WalletSendFundProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport type SendFundQuote = {\n tokenAddress: Hex;\n receivable_amount: bigint;\n receivable_amount_in_token: number;\n receivable_amount_in_currency: string;\n estimated_fees_amount: string;\n estimated_fees_amount_in_currency: string | undefined;\n currency: string;\n in_amount: string;\n receiver_address: Hex;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n gasPrice?: bigint;\n gasLimit: bigint;\n};\n\nconst SEND_STATUS_REFRESH_INTERNAL_MS = 10 * 1000; // 10 seconds\n// Stop polling for a quote after this many consecutive RPC failures (e.g. when the RPC is rate-limiting us),\n// otherwise the 5s interval keeps hammering the RPC forever and worsens the rate limiting.\nconst MAX_QUOTE_FETCH_RETRIES = 5;\nconst QUOTE_BUSY_ERROR = \"Network is busy. Please try again.\";\nconst MAX_BALANCE_ERROR = \"Not enough balance\";\nconst NO_TOKENS_ERROR = \"Balance not enough to transfer\";\n\nexport function WalletSendFundView({ onBack, onEnd, onShowActivity, setGradientType }: WalletSendFundProps) {\n const { user, sendTransaction, refreshBalances, hasBalances, balances } = useGlyph();\n const { glyphApiFetch } = useGlyphApi();\n const chainId = useChainId();\n const chains = useChains();\n\n const chain = useMemo(() => chains.find((c) => c.id === chainId), [chainId, chains]);\n\n const [recipientAddress, setRecipientAddress] = useState<string>(\"\");\n const [recipientAddressError, setRecipientAddressError] = useState<string | null>(null);\n\n const [view, setView] = useState<SendView>(SendView.ENTER_ADDRESS);\n\n const nativeToken = useMemo(\n () => balances?.tokens?.find((token) => token.native && token.chainId === chainId),\n [balances?.tokens, chainId]\n );\n const [token, setToken] = useState<GlyphWidgetTokenBalancesItem | undefined>();\n\n const publicClient = useMemo(() => {\n // Use the selected chain's RPC (which carries any consumer-supplied rpcUrls override), falling back\n // across all configured URLs. filter(Boolean) avoids fallback([])/http(undefined) when a chain has no\n // configured http url; http() with no chain is a no-op until a chain loads.\n const httpUrls = chain ? chain.rpcUrls.default.http.filter(Boolean) : [];\n return createPublicClient({\n chain,\n transport: httpUrls.length ? fallback(httpUrls.map((url) => http(url))) : http()\n });\n }, [chain]);\n\n useEffect(() => {\n if (!token) {\n setToken(nativeToken);\n }\n }, [nativeToken]);\n\n const [sendAmount, setSendAmount] = useState<string>(\"\");\n const [debouncedSendAmount, setDebouncedSendAmount] = useState<number>(Number(sendAmount));\n const [transferMax, setTransferMax] = useState<boolean>(false);\n\n const [quote, setQuote] = useState<SendFundQuote | null>(null);\n const [quoteLoading, setQuoteLoading] = useState<boolean>(false);\n // Counts consecutive failed quote fetches. A ref (not state) so bumping it doesn't retrigger the\n // quote effect and reset the polling interval. Reset to 0 on every successful fetch and effect re-run.\n const quoteFetchFailuresRef = useRef<number>(0);\n const [isSignaturePending, setIsSignaturePending] = useState<boolean>(false);\n\n const [isPending, setIsPending] = useState<boolean>(false);\n const [statusFetchCount, setStatusFetchCount] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const [maxValueError, setMaxValueError] = useState<boolean>(false);\n const [txHash, setTxHash] = useState<string>();\n\n const [txBlockExplorerUrl, setTxBlockExplorerUrl] = useState<string>();\n const [txBlockExplorerName, setTxBlockExplorerName] = useState<string>();\n const [txStatus, setTxStatus] = useState<\"SUCCESS\" | \"FAILED\" | \"PENDING\">(\"PENDING\");\n\n const logger = useMemo(() => createLogger(\"SendFundView\"), []);\n\n useEffect(() => {\n // Only set if no balance and no other error is set\n if (!Number(token?.value || \"0\") && !error) {\n setQuoteLoading(false);\n setError(NO_TOKENS_ERROR);\n } else if (token?.value && Number(token?.value) > 0 && error === NO_TOKENS_ERROR) {\n // Only unset the error if balance is there and error is set to NO_TOKENS_ERROR\n setQuoteLoading(false);\n setError(null);\n }\n }, [token?.value, error, setError, setQuoteLoading]);\n\n useEffect(() => {\n // Fresh failure budget each time the effect (re)runs, i.e. whenever inputs change.\n quoteFetchFailuresRef.current = 0;\n let interval: ReturnType<typeof setInterval> | undefined = undefined;\n\n // Count a failed quote fetch. Once we hit the retry cap, stop the polling loop and surface a\n // terminal error instead of hammering the (likely rate-limiting) RPC forever.\n const registerFailure = (err?: any, fallbackMessage: string = QUOTE_BUSY_ERROR) => {\n quoteFetchFailuresRef.current += 1;\n setQuoteLoading(false);\n if (quoteFetchFailuresRef.current >= MAX_QUOTE_FETCH_RETRIES) {\n logger.error(\"Giving up on Send quote after consecutive RPC failures\", err);\n setError(QUOTE_BUSY_ERROR);\n if (interval) clearInterval(interval);\n } else {\n setError(err?.shortMessage || fallbackMessage);\n }\n };\n\n const fetchQuote = async () => {\n // If on any other screen or signature is pending, don't fetch quote\n if (view !== SendView.ENTER_AMOUNT || isSignaturePending || maxValueError || !publicClient) return;\n\n if (\n token &&\n debouncedSendAmount &&\n recipientAddress &&\n token?.address &&\n (transferMax || debouncedSendAmount <= Number(token?.value || 0))\n ) {\n setQuote(null);\n setQuoteLoading(true);\n setError(null);\n let maxFeePerGas: bigint | undefined;\n let maxPriorityFeePerGas: bigint | undefined;\n let gasPrice: bigint | undefined;\n\n try {\n const fees = await publicClient.estimateFeesPerGas();\n maxFeePerGas = fees.maxFeePerGas;\n maxPriorityFeePerGas = fees.maxPriorityFeePerGas ?? fees.maxFeePerGas / 2n;\n } catch {\n try {\n gasPrice = await publicClient.getGasPrice();\n } catch (error: any) {\n registerFailure(error, \"Failed to estimate fees\");\n return;\n }\n }\n\n let gasUnits;\n\n try {\n const valueToSend =\n (transferMax || debouncedSendAmount === Number(token.value || 0)) && token.valueInWei\n ? BigInt(token.valueInWei || 0)\n : token?.address === zeroAddress\n ? parseEther(`${debouncedSendAmount}`)\n : tokenToBigIntWei(debouncedSendAmount, token.decimals || 18);\n\n if (token?.address === zeroAddress) {\n gasUnits = await publicClient.estimateGas({\n account: user?.evmWallet as Hex,\n to: recipientAddress as Hex,\n value: valueToSend\n });\n } else {\n gasUnits = await publicClient.estimateContractGas({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipientAddress as Hex, valueToSend],\n account: user?.evmWallet as Hex,\n address: token?.address as Hex\n });\n }\n } catch (error: any) {\n registerFailure(error, \"Failed to estimate gas\");\n return;\n }\n\n const feePerGas = maxFeePerGas ?? gasPrice;\n if (!feePerGas) {\n registerFailure(undefined, \"Failed to estimate fees\");\n return;\n }\n const gasCost = feePerGas * gasUnits;\n\n let valueToReturn: bigint;\n // If user is sending native token and has selected max amount, we need to subtract the gas cost from the total balance\n if (\n token?.address === zeroAddress &&\n (transferMax || debouncedSendAmount === Number(token.value || 0))\n ) {\n valueToReturn = BigInt(token.valueInWei || 0) - gasCost;\n } else {\n // If user is sending ERC20 token, we need to use the amount entered by the user (true for max amount as well)\n if (gasCost > BigInt(nativeToken?.valueInWei || 0)) {\n setError(\"Insufficient gas balance\");\n setQuoteLoading(false);\n return;\n }\n valueToReturn =\n transferMax || debouncedSendAmount === Number(token.value || 0)\n ? BigInt(token.valueInWei || 0)\n : tokenToBigIntWei(debouncedSendAmount, token.decimals || 18);\n }\n\n const receivableAmountInToken = displayNumberPrecision(\n +formatUnits(valueToReturn, token.decimals || 18),\n token.displayDecimals\n );\n\n setQuote({\n tokenAddress: token?.address,\n receiver_address: recipientAddress as Hex,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gasPrice,\n receivable_amount: valueToReturn,\n receivable_amount_in_token: receivableAmountInToken,\n receivable_amount_in_currency: formatCurrency(\n receivableAmountInToken * +(token.rateInCurrency || 0),\n user?.currency || \"USD\",\n valueToReturn !== 0n\n ),\n estimated_fees_amount: formatUnits(gasCost, nativeToken?.decimals || 18),\n estimated_fees_amount_in_currency: formatCurrency(\n +formatUnits(gasCost, nativeToken?.decimals || 18) * +(nativeToken?.rateInCurrency || 0),\n user?.currency || \"USD\",\n gasCost !== 0n\n ),\n currency: nativeToken?.currency || \"\",\n in_amount: debouncedSendAmount.toString(),\n gasLimit: gasUnits\n });\n\n // Successful fetch — reset the failure budget.\n quoteFetchFailuresRef.current = 0;\n setQuoteLoading(false);\n }\n };\n\n // Initial fetch\n fetchQuote();\n\n // Set up interval\n interval = setInterval(fetchQuote, 5000);\n\n // Cleanup\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [\n debouncedSendAmount,\n isSignaturePending,\n logger,\n maxValueError,\n nativeToken,\n publicClient,\n recipientAddress,\n token,\n transferMax,\n user,\n view\n ]);\n\n useEffect(() => {\n if (view === SendView.WAIT) setIsPending(true);\n }, [view]);\n\n useEffect(() => {\n if (!isPending) return setStatusFetchCount(0);\n }, [isPending]);\n\n const fetchSendStatus = useCallback(async () => {\n if (!glyphApiFetch) return toast.error(\"Glyph API not ready\");\n\n setStatusFetchCount((c) => c + 1);\n try {\n if (!txHash) throw new Error(\"Cannot fetch tx status for ID\"); // we know it's \"hash\" instead of \"ID\"\n\n const res = await glyphApiFetch(`/api/widget/transactions/${txHash}?chainId=${chainId}`);\n if (!res.ok) throw new Error(\"Cannot fetch tx status\");\n\n const data = await res.json();\n setTxStatus(data.status!);\n setTxBlockExplorerUrl(data.blockExplorerUrl);\n setTxBlockExplorerName(data.blockExplorerName);\n\n if (data.status === \"PENDING\") return;\n\n await refreshBalances(true);\n setIsPending(false);\n setView(SendView.END);\n } catch (e: any) {\n toast.error(e?.message);\n return;\n }\n }, [chainId, txHash, glyphApiFetch, refreshBalances]);\n\n // check tx status every `SEND_STATUS_REFRESH_INTERNAL_MS` miliseconds when tx is in progress\n useEffect(() => {\n if (!isPending) return;\n\n // fetch instantly the first time, then use the interval\n const interval = setInterval(() => fetchSendStatus(), statusFetchCount ? SEND_STATUS_REFRESH_INTERNAL_MS : 0);\n return () => clearInterval(interval);\n }, [isPending, statusFetchCount, fetchSendStatus]);\n\n const debouncedFunc = useMemo(\n () =>\n debounce(500, (value: string) => {\n setQuote(null);\n setDebouncedSendAmount(Number(value));\n }),\n []\n );\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === SendView.END && txStatus === \"SUCCESS\") setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n if (view === SendView.END && txStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, txStatus, view]);\n\n const validAmountEntered = debouncedSendAmount > 0 && debouncedSendAmount <= Number(token?.value || \"0\");\n\n const TokenIcon = token?.logo ? (\n <img src={token.logo} alt={token.symbol} className=\"gw-w-6 gw-h-6 gw-mr-1 gw-rounded-full\" />\n ) : (\n <NoTokenIcon />\n );\n\n const selectedTokenBalanceFormatted = token\n ? formatTokenCount(token?.valueInWei, token?.decimals, token?.displayDecimals)\n : undefined;\n const selectedTokenValueFormatted = token\n ? token?.rateInCurrency\n ? formatCurrency(\n parseFloat(formatUnits(BigInt(token?.valueInWei || 0), token?.decimals ?? 18)) *\n parseFloat(token?.rateInCurrency),\n token?.currency,\n BigInt(token?.valueInWei || 0) > 0n\n )\n : formatCurrency(token?.amount || 0, token?.currency, BigInt(token?.valueInWei || 0) !== 0n)\n : undefined;\n\n return (\n <>\n {view === SendView.ENTER_ADDRESS && (\n <WalletSendFundEnterAddressView\n onBack={onBack}\n setView={setView}\n setRecipientAddress={setRecipientAddress}\n setRecipientAddressError={setRecipientAddressError}\n recipientAddress={recipientAddress}\n recipientAddressError={recipientAddressError}\n />\n )}\n\n {view === SendView.ENTER_AMOUNT && (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Send Funds\",\n onBackClick: () => {\n setView(SendView.ENTER_ADDRESS);\n }\n }}\n />\n }\n content={\n <div\n className={cn(\n \"gw-px-4 gw-h-full gw-flex gw-flex-col gw-justify-between gw-items-center gw-gap-3\"\n )}\n >\n <div className=\"gw-w-full\">\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full\">\n <h6>{!validAmountEntered ? \"Enter Amount\" : \"Sending\"}</h6>\n\n <SendFundChainAndTokenSelector\n selectedToken={token}\n onTokenSelect={(token) => {\n // Reset amounts if token changes\n setSendAmount(\"\");\n setTransferMax(false);\n // Directly reset debounced amount to 0 (without delay)\n setDebouncedSendAmount(0);\n setError(null);\n setQuote(null);\n\n setToken(token);\n }}\n />\n </div>\n {/* Balance */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-typography-body2 gw-mt-2\">\n <div>Balance</div>\n {token && (\n <div className=\"gw-text-brand-gray-600\">\n {selectedTokenBalanceFormatted} {token?.symbol} (\n {selectedTokenValueFormatted})\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-w-full\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-flex-col\">\n <div className=\"gw-w-full gw-text-center gw-border-b-2 gw-border-border focus-within:gw-border-foreground gw-pb-1 gw-typography-h2-nr gw-flex gw-justify-between gw-items-center\">\n <div className=\"gw-flex gw-items-baseline gw-gap-2 gw-justify-center gw-flex-1\">\n <div className=\"gw-relative gw-inline-block gw-max-w-44\">\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <span\n aria-hidden\n className=\"gw-invisible gw-whitespace-pre gw-select-none gw-max-w-60\"\n >\n {sendAmount || \"0\"}\n </span>\n <input\n type=\"text\"\n max={token?.value || \"0\"}\n disabled={!Number(token?.value || \"0\")}\n // Don't allow \"e\" in field type number\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (sendAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n\n // check if this keystroke would make the value exceed the max\n const input = e.currentTarget as HTMLInputElement;\n const newValue = input.value + e.key;\n if (\n input.max &&\n !isNaN(parseFloat(newValue)) &&\n parseFloat(newValue) > parseFloat(input.max)\n ) {\n setError(MAX_BALANCE_ERROR);\n }\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={sendAmount}\n onChange={(e) => {\n // Reset transfer max if amount is changed\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n token?.displayDecimals ?? MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // check if input exceeds balance\n if (\n !isNaN(parseFloat(e.target.max)) &&\n parseFloat(value) > parseFloat(e.target.max)\n ) {\n // allow setting the wrong value only once\n if (maxValueError) return;\n setMaxValueError(true);\n } else {\n setError(null);\n setMaxValueError(false);\n }\n\n debouncedFunc(value);\n setSendAmount(value);\n setTransferMax(false);\n }}\n placeholder=\"0\"\n className={cn(\n \"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-absolute gw-inset-0 gw-w-full gw-max-w-44\",\n !Number(token?.value || \"0\") &&\n \"gw-opacity-50 gw-cursor-not-allowed\"\n )}\n />\n </div>\n </div>\n <span className=\"gw-text-input gw-typography-h4-nr\">\n {token?.symbol || \"\"}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-center gw-items-center gw-mt-4 gw-gap-4\">\n {token?.rateInCurrency && (\n <div className=\"gw-text-brand-gray-600\">\n {formatCurrency(\n +token?.rateInCurrency * +sendAmount,\n token?.currency,\n Number(sendAmount) !== 0\n )}\n </div>\n )}\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n disabled={!Number(token?.value || \"0\")}\n className=\"gw-py-1 gw-px-2 gw-h-auto gw-w-16\"\n onClick={() => {\n const valueToSet = transferMax ? \"\" : `${+(token?.value || 0) || \"\"}`;\n setSendAmount(valueToSet);\n debouncedFunc(valueToSet);\n setTransferMax((v) => !v);\n }}\n >\n <span className=\"gw-typography-overline\">\n {!transferMax ? \"Max\" : \"Clear\"}\n </span>\n </Button>\n </div>\n </div>\n </div>\n\n {validAmountEntered ? (\n <div\n className={cn(\n \"gw-typography-caption gw-mt-2 gw-mx-1 gw-w-full gw-rounded-xl gw-p-2\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-space-x-1\">\n <span>Transaction Time</span>\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n <span className=\"gw-text-brand-gray-500 gw-text-right\">{`<1 min`}</span>\n )}\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500 gw-text-right\">\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n `${formatTokenCount(tokenToBigIntWei(quote?.estimated_fees_amount || 0, nativeToken?.decimals || 18), nativeToken?.decimals || 18, nativeToken?.displayDecimals)} ${nativeToken?.symbol} (${quote?.estimated_fees_amount_in_currency})`\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Expected receivable amount</span>\n <div className=\"gw-text-brand-gray-500 gw-text-right\">\n {quoteLoading || !quote ? (\n <Skeleton className=\"gw-w-20 gw-h-4\" />\n ) : (\n `${quote?.receivable_amount_in_token} ${token?.symbol} (${quote?.receivable_amount_in_currency})`\n )}\n </div>\n </div>\n </div>\n ) : (\n <div />\n )}\n </div>\n }\n footer={\n <>\n <div className={cn(\"gw-text-destructive gw-typography-caption gw-text-center gw-min-h-4\")}>\n {error ? (\n <span className=\"gw-bg-destructive-foreground/60 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-rounded-full\">\n {error}\n </span>\n ) : null}\n </div>\n\n <div\n className={cn(\n \"gw-p-3 gw-rounded-full gw-flex gw-items-center gw-space-x-2 gw-w-full gw-mt-2 gw-justify-between\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-gap-2 gw-items-center\">\n <UserAvatar className=\"gw-size-6 gw-flex-shrink-0\" />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">From</span>\n <span className=\"gw-break-all\">\n {user?.name || truncateEthAddress(user?.evmWallet || \"\")}\n </span>\n </div>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-primary gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-min-w-24\">\n <UserAvatar\n className=\"gw-size-6 gw-flex-shrink-0\"\n overrideAlt=\"Recipient Wallet Address PFP\"\n overrideUrl={ethereumAvatar(recipientAddress)}\n />\n <div className=\"gw-flex gw-flex-col gw-typography-caption\">\n <span className=\"gw-text-brand-gray-500\">To</span>\n <span className=\"gw-break-all\">{truncateEthAddress(recipientAddress)}</span>\n </div>\n </div>\n </div>\n\n <Button\n variant=\"default\"\n className=\"gw-w-full gw-mt-2\"\n disabled={\n !hasBalances || // most likely means user just switched chains and balances haven't been loaded yet\n isSignaturePending ||\n quoteLoading ||\n !!error ||\n !quote ||\n !sendAmount ||\n +sendAmount <= 0 ||\n (token?.value ? +sendAmount > +token.value : false)\n }\n onClick={async () => {\n let receipt;\n setIsSignaturePending(true);\n setError(null);\n try {\n if (!quote?.receivable_amount) {\n throw new Error(\"No receivable amount\");\n }\n if (!publicClient) {\n throw new Error(\"Missing publicClient\");\n }\n\n let hash_: string | undefined;\n if (token?.address === zeroAddress) {\n receipt = await sendTransaction({\n transaction: {\n to: recipientAddress,\n value: quote?.receivable_amount,\n ...(quote?.gasPrice\n ? { type: 0, gasPrice: quote.gasPrice }\n : {\n maxFeePerGas: quote?.maxFeePerGas,\n maxPriorityFeePerGas: quote?.maxPriorityFeePerGas\n })\n }\n });\n hash_ = receipt;\n } else {\n const txData = await publicClient.simulateContract({\n abi: erc20Abi,\n functionName: \"transfer\",\n account: user?.evmWallet as Hex,\n address: token?.address as Hex,\n args: [recipientAddress as Hex, quote?.receivable_amount],\n chain,\n gas: quote?.gasLimit\n });\n try {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipientAddress as Hex, quote?.receivable_amount]\n });\n\n receipt = await sendTransaction({\n transaction: {\n to: token?.address,\n data,\n ...(quote?.gasPrice\n ? { type: 0, gasPrice: quote.gasPrice }\n : {\n maxFeePerGas: txData?.request?.maxFeePerGas,\n maxPriorityFeePerGas:\n txData?.request?.maxPriorityFeePerGas\n })\n }\n });\n hash_ = receipt;\n } catch (error) {\n logger.error(\"error sending txn - send tx failed\", error);\n throw error;\n }\n }\n logger.debug(\"using tx\", hash_);\n if (!glyphApiFetch) return toast.error(\"Glyph API not ready\");\n const res = await glyphApiFetch(`/api/widget/transactions/${hash_}`, {\n method: \"POST\",\n body: JSON.stringify({ chainId })\n });\n if (res.ok) {\n setTxHash(hash_);\n setError(null);\n setView(SendView.WAIT);\n await refreshBalances(true);\n } else setError(\"Failed to send transaction\");\n } catch (error) {\n logger.error(\"error sending txn\", error);\n setError(\"Request rejected or failed\");\n toast.error(\"Request rejected or failed\");\n } finally {\n setIsSignaturePending(false);\n }\n }}\n >\n Confirm\n {isSignaturePending && <Loader2 className=\"gw-size-4 gw-animate-spin\" />}\n </Button>\n </>\n }\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === SendView.WAIT && (\n <WalletSendFundPendingView\n onBack={onBack}\n txHash={txHash}\n txBlockExplorerUrl={txBlockExplorerUrl}\n txBlockExplorerName={txBlockExplorerName}\n quote={quote!}\n tokenSymbol={token?.symbol || \"\"}\n TokenIcon={TokenIcon}\n />\n )}\n\n {view === SendView.END &&\n (txStatus === \"SUCCESS\" ? (\n <WalletSendFundSuccessView\n onEnd={() =>\n refreshBalances(true)\n .catch()\n .finally(() => onEnd())\n }\n onShowActivity={() =>\n refreshBalances()\n .catch()\n .finally(() => onShowActivity())\n }\n quote={quote!}\n tokenSymbol={token?.symbol || \"\"}\n />\n ) : (\n <WalletSendFundFailedView\n txHash={txHash}\n txBlockExplorerUrl={txBlockExplorerUrl}\n txBlockExplorerName={txBlockExplorerName}\n onEnd={() =>\n refreshBalances(true)\n .catch()\n .finally(() => onEnd())\n }\n onShowActivity={() =>\n refreshBalances()\n .catch()\n .finally(() => onShowActivity())\n }\n />\n ))}\n </>\n );\n}\n","export const SWAP_ERROR_MESSAGES = {\n INSUFFICIENT_BALANCE: \"Insufficient balance\",\n INSUFFICIENT_GAS: \"Insufficient gas to execute tx\",\n FAILED_TO_MAX_LOW_GAS:\n \"Unable to set max amount. Balance too low for gas fees. Try entering a smaller amount manually.\",\n NO_ROUTES_FOUND:\n \"No swap routes available for this pair or amount. Try a different token or amount, or try again later.\",\n STATUS_CHECK_FAILED: \"Couldn't fetch swap status, check blockchain directly or contact support\",\n PRECHECK_FAILURE: \"Something went wrong during the swap precheck\",\n WALLET_NOT_READY: \"wallet not ready, please refresh and try again\",\n SOLANA_NOT_IMPLEMENTED: \"Solana wallet not implemented\",\n NO_GLYPHAPIFETCH: \"Wallet not authenticated properly, please refresh and try again\",\n NO_FINAL_QUOTE: \"Failed to lock in the quote, please try again\",\n SOMETHING_WENT_WRONG: \"Something went wrong, please try again\"\n};\n\nexport const reformatSwapError = (error: string) => {\n if (typeof error !== \"string\" || !error) return SWAP_ERROR_MESSAGES.SOMETHING_WENT_WRONG;\n\n try {\n // raw error sent by relay or blockchain\n if (\n error === SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS ||\n error.toLowerCase().includes(\"estimategas\") ||\n (error.toLowerCase().includes(\"gas\") && error.toLowerCase().includes(\"exceeds\"))\n ) {\n return SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS;\n }\n\n // Sent by relay\n if (error.toLowerCase().includes(\"no routes found\")) {\n return SWAP_ERROR_MESSAGES.NO_ROUTES_FOUND;\n }\n } catch {\n // ignore error\n }\n\n return error.length < 300 ? error : SWAP_ERROR_MESSAGES.SOMETHING_WENT_WRONG;\n};\n","import { configureViemChain } from \"@relayprotocol/relay-sdk\";\nimport { createPublicClient, extractChain, fallback, http, type PublicClient } from \"viem\";\nimport { relayClient } from \"./relay\";\nimport { mainnet } from \"viem/chains\";\n\n/**\n * Intended primarily for client-side code. Could be used as a fallback on server-side code, but bear in mind we could be rate-limited.\n */\nexport function createDefaultPublicClient(chainId: number): PublicClient {\n const relayChains = relayClient?.chains || [];\n\n const viemChains = relayChains.map((c) => configureViemChain(c as any).viemChain);\n\n // configureViemChain discards a RelayChain's httpRpcUrl for well-known chains and returns viem's bundled\n // chain, whose default RPC (e.g. eth.merkle.io for mainnet) can be unreliable. Read the relay chain's\n // httpRpcUrl directly so the consumer's rpcUrls override (which useGlyphConfigureDynamicChains injects onto\n // httpRpcUrl) — and otherwise the relay-provided RPC — take precedence over the viem default.\n const httpRpcUrl = relayChains.find((c: any) => c.id === chainId)?.httpRpcUrl;\n\n return createPublicClient({\n chain: extractChain({ chains: viemChains, id: chainId }),\n transport: httpRpcUrl\n ? http(httpRpcUrl)\n : chainId === mainnet.id\n ? fallback([http(\"https://ethereum-rpc.publicnode.com\"), http()])\n : http()\n });\n}\n","import { AdaptedWallet, LogLevel } from \"@relayprotocol/relay-sdk\";\nimport { useMemo } from \"react\";\nimport { useGlyph } from \"./useGlyph\";\n\nimport { Address, hexToBigInt } from \"viem\";\nimport { Config, useSwitchChain } from \"wagmi\";\nimport { getChainId, getPublicClient } from \"wagmi/actions\";\nimport { relayClient } from \"../lib/relay\";\nimport { createDefaultPublicClient } from \"../lib/rpcPublic\";\n\nexport const useGlyphRelayEvmAdapter = (config: Config | undefined): AdaptedWallet | null => {\n const { user, signMessage, signTypedData, sendTransaction } = useGlyph();\n\n const { switchChainAsync } = useSwitchChain();\n\n return useMemo(() => {\n if (!user?.evmWallet || !switchChainAsync || !config) {\n return null;\n }\n\n return {\n vmType: \"evm\",\n address: () => Promise.resolve(user?.evmWallet),\n getChainId: async () => {\n const chainId = getChainId(config);\n return chainId;\n },\n handleSignMessageStep: async (stepItem) => {\n const signData = stepItem.data?.sign;\n let signature: string | undefined;\n if (signData) {\n if (signData.signatureKind === \"eip191\") {\n relayClient.log([\"Execute Steps: Signing with eip191\"], LogLevel.Verbose);\n if (signData.message.match(/0x[0-9a-fA-F]{64}/)) {\n // If the message represents a hash, we need to convert it to raw bytes first\n signature = await signMessage({\n message: signData.message\n });\n } else {\n signature = await signMessage({\n message: signData.message\n });\n }\n } else if (signData.signatureKind === \"eip712\") {\n relayClient.log([\"Execute Steps: Signing with eip712\"], LogLevel.Verbose);\n signature = await signTypedData({\n data: {\n domain: signData.domain as any,\n types: signData.types as any,\n primaryType: signData.primaryType,\n message: signData.value\n }\n });\n }\n }\n return signature;\n },\n handleSendTransactionStep: async (chainId, stepItem) => {\n const stepData = stepItem.data;\n const res = await sendTransaction({\n transaction: {\n data: stepData.data,\n to: stepData.to,\n value: hexToBigInt((stepData.value as any) || 0),\n from: stepData.from,\n chainId: chainId\n }\n });\n return res;\n },\n handleConfirmTransactionStep: async (txHash, chainId, onReplaced, onCancelled) => {\n const firstPassAtPublicClient = getPublicClient(config, { chainId: chainId });\n const publicClient = firstPassAtPublicClient ?? createDefaultPublicClient(chainId);\n\n if (!publicClient) {\n console.error(\"Public client couldn't be initialized\");\n throw new Error(\"Couldn't fetch transaction status\");\n }\n\n\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: txHash as Address,\n onReplaced: (replacement) => {\n if (replacement.reason === \"cancelled\") {\n onCancelled();\n throw Error(\"Transaction cancelled\");\n }\n onReplaced(replacement.transaction.hash);\n }\n });\n\n if (receipt.status === \"reverted\") {\n throw new Error(`Execution reverted`);\n }\n\n\n return receipt;\n },\n switchChain: async (chainId) => {\n await switchChainAsync({ chainId });\n }\n };\n }, [switchChainAsync, sendTransaction, signMessage, signTypedData, user?.evmWallet, config]);\n};\n","import { Execute } from \"@relayprotocol/relay-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useChainId, useConfig } from \"wagmi\";\nimport { useGlyphSwap } from \"../context/GlyphSwapContext\";\nimport { SWAP_ERROR_MESSAGES } from \"../lib/customErrors\";\nimport { relayClient, SOLANA_RELAY_ID } from \"../lib/relay\";\nimport { useGlyphApi } from \"./useGlyphApi\";\nimport { useGlyphRelayEvmAdapter } from \"./useGlyphRelayEvmAdapter\";\n\nexport const PRECHECK_FAILURE_CODE = \"PRECHECK_FAILED\";\n\nexport const buildErrorPayloadWithCode = (code: string, message: string) => {\n return { code: code, message: message };\n};\n\nexport const useRelayExecute = () => {\n const chainId = useChainId();\n const { glyphApiFetch } = useGlyphApi();\n const { reportSwapFailed } = useGlyphSwap();\n\n const config = useConfig();\n const evmAdapter = useGlyphRelayEvmAdapter(config);\n\n return useMutation({\n mutationFn: async ({ qt, onExecutionStart }: { qt: Execute; onExecutionStart?: (quote: Execute) => void }) => {\n if (!config) {\n console.error(\"useConfig not ready\");\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.WALLET_NOT_READY);\n }\n if (!evmAdapter) {\n console.error(\"evmAdapter function not ready\");\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.WALLET_NOT_READY);\n }\n\n const quoteChainId = qt.details?.currencyIn?.currency?.chainId;\n if (quoteChainId === SOLANA_RELAY_ID) {\n // TODO: implement solana adapter\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.SOLANA_NOT_IMPLEMENTED);\n }\n\n if (!glyphApiFetch) {\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.NO_GLYPHAPIFETCH);\n }\n let parsedRes = null;\n\n // Handle error related to qupte generations differently than execution error. We want to show quote generation error right on the START screen for better UX\n try {\n const res = await glyphApiFetch(`/api/widget/swap/quote`, {\n method: \"POST\",\n body: JSON.stringify({ ...qt.request?.data })\n });\n if (!res.ok) throw { code: PRECHECK_FAILURE_CODE, message: SWAP_ERROR_MESSAGES.NO_FINAL_QUOTE };\n\n if (quoteChainId && quoteChainId !== chainId) {\n await evmAdapter.switchChain(quoteChainId);\n }\n parsedRes = await res.json();\n } catch (e) {\n console.error(e);\n throw buildErrorPayloadWithCode(PRECHECK_FAILURE_CODE, SWAP_ERROR_MESSAGES.NO_FINAL_QUOTE);\n }\n\n const { id: txnId, quote: finalQuote } = parsedRes;\n\n onExecutionStart?.(finalQuote);\n\n let result: any;\n try {\n const EXECUTE_TIMEOUT_MS = 180_000;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const resetTimeout = (reject: (reason?: any) => void) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n reject(new Error(\"Swap execution timed out. Check blockchain for transaction status.\"));\n }, EXECUTE_TIMEOUT_MS);\n };\n\n result = await new Promise((resolve, reject) => {\n resetTimeout(reject);\n relayClient.actions\n .execute({\n quote: finalQuote,\n wallet: evmAdapter,\n onProgress: () => {\n resetTimeout(reject);\n }\n })\n .then(resolve)\n .catch(reject)\n .finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n });\n });\n } catch (error) {\n await reportSwapFailed(txnId);\n throw error;\n }\n\n // Some relay-sdk flows resolve with a failure object instead of throwing.\n // Normalize that into an exception so the UI catch path runs.\n const resultStatus = (result as any)?.status ?? (result as any)?.state;\n const resultError = (result as any)?.error ?? (result as any)?.reason ?? (result as any)?.message;\n const failedStatuses = new Set([\"error\", \"failed\", \"failure\", \"reverted\"]);\n if (failedStatuses.has(String(resultStatus).toLowerCase()) || (result as any)?.ok === false) {\n await reportSwapFailed(txnId);\n throw new Error(typeof resultError === \"string\" ? resultError : \"Relay execution failed\");\n }\n\n const requestId = (finalQuote as any)?.steps?.[0]?.requestId as string | undefined;\n\n return { requestId, txnId, result };\n }\n });\n};\n","import { MAINNET_RELAY_API, paths } from \"@relayprotocol/relay-sdk\";\nimport { Dispatch, SetStateAction, useEffect, useRef, useState } from \"react\";\nimport { SwapView } from \"../lib/constants\";\nimport { useBalances } from \"./useBalances\";\n\ntype TxDetails = {\n hash: string;\n blockExplorerName?: string;\n blockExplorerUrl?: string;\n};\n\ntype UseRelayIntentStatusParams = {\n intentRequestId: string | null;\n setTxStatus: Dispatch<SetStateAction<\"SUCCESS\" | \"FAILED\" | \"PENDING\">>;\n setView: Dispatch<SetStateAction<SwapView>>;\n onError?: () => Promise<void>;\n};\n\nexport const useRelayIntentStatus = ({\n intentRequestId,\n setTxStatus,\n setView,\n onError\n}: UseRelayIntentStatusParams) => {\n const [txDetails, setTxDetails] = useState<TxDetails>();\n const [error, setError] = useState<string>(\"\");\n\n const { refreshBalances, isBalancesLoading } = useBalances();\n\n const latest = useRef({ onError, refreshBalances, isBalancesLoading });\n latest.current = { onError, refreshBalances, isBalancesLoading };\n\n useEffect(() => {\n if (!intentRequestId) return;\n\n let cancelled = false;\n const controller = new AbortController();\n let failures = 0;\n setError(\"\");\n setTxDetails({\n hash: intentRequestId,\n blockExplorerName: \"Relay Explorer\",\n blockExplorerUrl: `https://relay.link/transaction/${intentRequestId}`\n });\n const wait = (ms: number) =>\n new Promise<void>((resolve) => {\n const finish = () => {\n clearTimeout(timer);\n controller.signal.removeEventListener(\"abort\", finish);\n resolve();\n };\n const timer = setTimeout(finish, ms);\n controller.signal.addEventListener(\"abort\", finish, { once: true });\n if (controller.signal.aborted) finish();\n });\n\n const pollStatus = async () => {\n while (!cancelled) {\n try {\n const readController = new AbortController();\n const abortRead = () => readController.abort();\n controller.signal.addEventListener(\"abort\", abortRead, { once: true });\n const timeout = setTimeout(abortRead, 15000);\n let data: paths[\"/intents/status/v2\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\n try {\n const resp = await fetch(\n `${MAINNET_RELAY_API}/intents/status/v2?requestId=${encodeURIComponent(intentRequestId)}`,\n { signal: readController.signal }\n );\n if (!resp.ok) throw new Error(\"Failed to get execution status\");\n data = await resp.json();\n if (readController.signal.aborted)\n throw new DOMException(\"Status read cancelled\", \"AbortError\");\n } finally {\n clearTimeout(timeout);\n controller.signal.removeEventListener(\"abort\", abortRead);\n }\n if (cancelled) return;\n const status = data?.status;\n\n if (!status) {\n throw new Error(\"Missing execution status\");\n }\n\n failures = 0;\n setError(\"\");\n try {\n const relayTxDetails: TxDetails = {\n hash: intentRequestId,\n blockExplorerName: \"Relay Explorer\",\n blockExplorerUrl: `https://relay.link/transaction/${intentRequestId}`\n };\n // Using relay tx hash as the primary tx details\n setTxDetails(relayTxDetails);\n } catch (error) {\n console.error(\"Error getting tx hash:\", error);\n }\n\n if (status === \"success\") {\n if (!cancelled) {\n if (!latest.current.isBalancesLoading) {\n latest.current.refreshBalances?.();\n }\n setTxStatus(\"SUCCESS\");\n setView(SwapView.END);\n }\n return;\n }\n\n if (status === \"refund\" || status === \"failure\") {\n if (!cancelled) {\n if (!latest.current.isBalancesLoading) {\n latest.current.refreshBalances?.();\n }\n if (latest.current.onError) {\n try {\n await latest.current.onError();\n } catch {\n /* Settlement is authoritative. */\n }\n }\n if (cancelled) return;\n setTxStatus(\"FAILED\");\n setView(SwapView.END);\n if (status === \"refund\") {\n setError(\"Will be refunded back to you!\");\n } else {\n if (data.details) {\n setError(data?.details);\n }\n }\n }\n return;\n }\n } catch {\n if (cancelled) return;\n failures += 1;\n // A status-read outage does not mean a submitted transaction failed.\n setError(\"Swap status temporarily unavailable. Check Relay Explorer before taking another action.\");\n if (failures >= 6) return;\n }\n\n await wait(Math.min(5000 * 2 ** failures, 30000));\n }\n };\n\n pollStatus();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [intentRequestId, setTxStatus, setView]);\n\n return {\n error,\n txDetails\n };\n};\n","import { Execute } from \"@relayprotocol/relay-sdk\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { RelayAPIToken, useGlyphSwap } from \"../context/GlyphSwapContext\";\nimport { SOLANA_RELAY_ID } from \"../lib/relay\";\nimport { assertHasValue, chainIdToRelayChain, isNativeAndWrappedPair } from \"../lib/utils\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useGlyphApi } from \"./useGlyphApi\";\n\nconst QUOTE_REFETCH_INTERVAL = 30_000;\n\nexport const GAS_BUFFER = 115n; // 15% gas buffer for actual execution - this is unrelated to the \"max\" button feature\n\nexport const checkIfGasIsEnough = (\n gasCurrencyAddress: string,\n sourceToken: RelayAPIToken | undefined,\n quoteGasAmountInWei: number | string | undefined | null,\n sourceGasBalanceInWei: number | string | undefined | null,\n sellAmount: string | undefined | null // in wei\n) => {\n return (\n sourceGasBalanceInWei !== undefined &&\n sourceGasBalanceInWei !== null &&\n sourceToken &&\n (gasCurrencyAddress !== sourceToken?.address\n ? BigInt(sourceGasBalanceInWei) * 100n >= BigInt(quoteGasAmountInWei || 0) * GAS_BUFFER // If different token than gas token -> check if gas is at least 15% more than required\n : (BigInt(sourceGasBalanceInWei) - BigInt(sellAmount || \"0\")) * 100n >=\n BigInt(quoteGasAmountInWei || 0) * GAS_BUFFER)\n ); // If same token is being sold, reserve some for gas and require 15% buffer\n};\n\nexport const useRelayQuote = (enabled?: boolean) => {\n const swapState = useGlyphSwap();\n const { glyphApiFetch } = useGlyphApi();\n\n const { fromCurrency, toCurrency, tradeType, amount, topupGas, topupGasAmount } = swapState;\n const { user } = useGlyph();\n\n const fromChain = fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined;\n const isNativeFromCurrency = fromCurrency?.address === fromChain?.currency?.address;\n\n const evmWallet = user?.evmWallet;\n const solanaWallet = user?.solanaWallet;\n\n let amountIsValid = true;\n try {\n amountIsValid = BigInt(amount ?? \"0\") > 0n;\n } catch {\n amountIsValid = false;\n }\n\n const isQuotable =\n fromCurrency?.chainId === SOLANA_RELAY_ID\n ? !!solanaWallet\n : !!evmWallet &&\n !!fromCurrency &&\n !!toCurrency &&\n amountIsValid &&\n (enabled !== undefined ? enabled : true); // Only use this if enabled is passed as props\n\n const nativeAndWrappedPair = isNativeAndWrappedPair(fromCurrency, toCurrency);\n const operation = nativeAndWrappedPair ? (isNativeFromCurrency ? \"wrap\" : \"unwrap\") : \"swap\";\n\n const quoteQuery = useQuery({\n queryKey: [\"relayQuote\", evmWallet, solanaWallet, swapState],\n queryFn: async () => {\n assertHasValue(evmWallet);\n assertHasValue(solanaWallet);\n assertHasValue(fromCurrency);\n assertHasValue(toCurrency);\n assertHasValue(amount);\n\n if (!glyphApiFetch) throw new Error(\"Wallet not authenticated properly, please refresh and try again\");\n\n const fromWallet = fromCurrency.chainId === SOLANA_RELAY_ID ? solanaWallet : evmWallet;\n const toWallet = toCurrency.chainId === SOLANA_RELAY_ID ? solanaWallet : evmWallet;\n\n // Goes through the host app's own server rather than calling Relay's /quote directly --\n // this call can never safely carry a Relay API key since it runs in this\n // browser-bundled package, and Relay now rejects unauthenticated /quote requests. The\n // host app computes appFees itself server-side (same isNativeAndWrappedPair waiver),\n // so it isn't sent here; nativeAndWrappedPair below is only for this hook's own\n // appFeesWaived/operation return values, not for what's actually charged.\n const res = await glyphApiFetch(\"/api/widget/swap/quote/preview\", {\n method: \"POST\",\n body: JSON.stringify({\n originChainId: fromCurrency.chainId!,\n originCurrency: fromCurrency.address!,\n destinationChainId: toCurrency.chainId!,\n destinationCurrency: toCurrency.address!,\n tradeType,\n amount, // amount already in wei\n user: fromWallet,\n recipient: toWallet,\n topupGas,\n topupGasAmount\n })\n });\n if (!res.ok) {\n const body = await res.json().catch(() => null);\n throw new Error(body?.error || \"Failed to fetch quote\");\n }\n\n return res.json() as Promise<Execute>;\n },\n enabled: isQuotable,\n refetchInterval: QUOTE_REFETCH_INTERVAL,\n gcTime: 0,\n retry: 1\n });\n\n return { ...quoteQuery, appFeesWaived: nativeAndWrappedPair, operation };\n};\n","import { useGlyphApi } from \"./useGlyphApi\";\nimport { GlyphWidgetTokenBalancesItem } from \"../types\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { checksumAddress, Hex } from \"viem\";\n\nexport const useTokenBalance = (\n tokenAddress: string | undefined,\n chainId: number | undefined\n): {\n balance: string | undefined;\n isLoading: boolean;\n error: string | undefined;\n} => {\n const { balances } = useGlyph();\n const { glyphApiFetch } = useGlyphApi();\n\n // first try to find the token in the balances.tokens array\n const foundToken = tokenAddress && chainId\n ? balances?.tokens?.find?.(\n (token) =>\n token.chainId === chainId &&\n checksumAddress(token.address as Hex) === checksumAddress(tokenAddress as Hex)\n )\n : undefined;\n\n // ...otherwise, fetch from API\n const { data: fetchedValueInWei, isLoading, error } = useQuery({\n queryKey: [\"tokenBalance\", tokenAddress, chainId],\n queryFn: async () => {\n if (!tokenAddress || !chainId || !glyphApiFetch) {\n return undefined;\n }\n\n const response = await glyphApiFetch(`/api/widget/balances/${tokenAddress}?chainId=${chainId}`);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n const data = await response.json() as GlyphWidgetTokenBalancesItem;\n return data.valueInWei;\n },\n // there are rare instances where chainId is `0x0000000000000000000000000000000000000000`, so we protect ourselves against this\n enabled: !foundToken && !!tokenAddress && Number.isInteger(chainId) && Number(chainId) !== 0\n });\n\n return {\n balance: foundToken?.valueInWei ?? fetchedValueInWei ?? \"0\", // if no balance found, return 0 so query result is not undefined\n isLoading,\n error: error ? (error as Error).message : undefined\n };\n};\n","import { QueryClient } from \"@tanstack/react-query\";\nimport { PublicClient } from \"viem\";\nimport { fetchRelayRequests } from \"./relay\";\nimport { createDefaultPublicClient } from \"./rpcPublic\";\nimport { chainIdToRelayChain } from \"./utils\";\n\n// Taken from: https://github.com/relayprotocol/relay-kit/blob/main/packages/ui/src/constants/maxGasBuffer.ts#L3\nconst MINIMUM_GAS_PRICE_WEI = 100000000n; // 0.1 Gwei\nconst EVM_DEFAULT_FEE_WEI = 5000000000000000n; // Default fee in Wei (0.005 ETH) for EVM\nconst EVM_GAS_BUFFER_MULTIPLIER = 2n; // 2x buffer\nconst SOLANA_FEE_BUFFER_MULTIPLIER = 5n; // 5x buffer for Solana\nconst SOLANA_DEFAULT_FEE_LAMPORTS = 1000000n; // Default fee in lamports (0.001 SOL) for Solana\nconst ECLIPSE_FEE_BUFFER_MULTIPLIER = 200n; // 200x buffer for Eclipse\nconst ECLIPSE_DEFAULT_FEE_WEI = 50000000000000n; // Default fee in Wei (0.00005 ETH) for Eclipse\n\n// Create a QueryClient instance for fee buffer caching\n// Cache time: 5 minutes (300000ms) as per original implementation\nlet feeBufferQueryClient: QueryClient | null = null;\n\nconst getFeeBufferQueryClient = (): QueryClient => {\n if (!feeBufferQueryClient) {\n feeBufferQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 30 * 1000, // 30 seconds\n retry: 1\n }\n }\n });\n }\n return feeBufferQueryClient;\n};\n\n/**\n * Calculates the gas buffer needed for a native EVM token transfer.\n * This buffer is estimated based on gas price and a standard limit,\n * then multiplied by a safety factor.\n *\n * @param publicClient - A VIEM PublicClient connected to the EVM chain.\n * @param balance - The total native balance of the user (used for early exit).\n * @param gasLimit - Optional: The gas limit to use for estimation (defaults to 400000n).\n * @returns The calculated gas buffer amount as a bigint, or 0n if estimation fails or balance is zero.\n */\nexport const calculateEvmNativeGasBuffer = async (\n publicClient: PublicClient,\n balance: bigint,\n gasLimit: bigint = 400000n\n): Promise<bigint> => {\n if (!balance || balance <= 0n) {\n return 0n;\n }\n\n // Fixed fallback buffer: 0.005 ETH in Wei\n const defaultBuffer = EVM_DEFAULT_FEE_WEI;\n\n try {\n let feeData;\n try {\n feeData = await publicClient.estimateFeesPerGas();\n } catch (eip1559Error) {\n // Fallback to legacy gas price estimation\n try {\n const gasPrice = await publicClient.getGasPrice();\n feeData = {\n maxFeePerGas: gasPrice,\n gasPrice: gasPrice\n };\n } catch (legacyError) {\n // If both estimations fail, return fallback buffer\n console.error(\"Failed to estimate gas price:\", legacyError);\n return defaultBuffer;\n }\n }\n\n // Prefer EIP-1559 maxFeePerGas if available, otherwise use gasPrice\n let gasPriceToUse = feeData.maxFeePerGas ?? feeData.gasPrice;\n\n if (!gasPriceToUse || gasPriceToUse <= 0n) {\n console.error(\"Invalid gas price data received:\", feeData);\n return defaultBuffer;\n }\n\n if (gasPriceToUse < MINIMUM_GAS_PRICE_WEI) {\n gasPriceToUse = MINIMUM_GAS_PRICE_WEI;\n }\n\n const estimatedGasCost = gasPriceToUse * gasLimit;\n const buffer = estimatedGasCost * EVM_GAS_BUFFER_MULTIPLIER;\n\n // return the calculated buffer\n return buffer;\n } catch (error) {\n console.error(\"Error calculating EVM native gas buffer:\", error);\n return defaultBuffer;\n }\n};\n\n/**\n * Calculates the fee buffer needed for a native SVM (e.g., Solana) or Eclipse transaction.\n * Uses specific multipliers and default fees for each type.\n * Falls back to a default fee if API data is unavailable or invalid.\n *\n * @param chainId - The chain ID of the SVM or Eclipse network.\n * @returns The calculated fee buffer amount (in lamports for Solana, Wei for Eclipse) as a bigint, or a fallback buffer if estimation fails.\n */\nexport const calculateSvmNativeFeeBuffer = async (chainId: number): Promise<bigint> => {\n const isEclipseChain = chainId === 9286185;\n const multiplier = isEclipseChain ? ECLIPSE_FEE_BUFFER_MULTIPLIER : SOLANA_FEE_BUFFER_MULTIPLIER;\n\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER;\n\n try {\n const queryOptions = {\n limit: \"20\",\n originChainId: chainId.toString()\n } as const;\n\n const resp = await fetchRelayRequests(queryOptions);\n\n if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) {\n console.warn(\"No valid fees found in response. Using fallback buffer.\");\n return fallbackBuffer;\n }\n\n // Extract fees data from the response\n const fees: bigint[] = resp.requests\n .map((r: any) => {\n const feeStr = r?.data?.inTxs?.[0]?.fee;\n try {\n return BigInt(feeStr);\n } catch {\n return null;\n }\n })\n .filter((f: bigint | null): f is bigint => f !== null);\n\n if (fees.length === 0) {\n return fallbackBuffer;\n }\n\n // Find the maximum fee among the valid fees\n const maxFee = fees.reduce((max, current) => (current > max ? current : max), 0n);\n\n // Apply buffer multiplier to the maximum fee\n const buffer = maxFee * multiplier;\n\n return buffer;\n } catch (error) {\n console.error(\"Error calculating SVM native fee buffer:\", error);\n return fallbackBuffer;\n }\n};\n\n/**\n * Gets the fee buffer amount for a given chain and VM type.\n * Uses QueryClient for caching and deduplication of requests.\n *\n * @param vmType - The virtual machine type ('evm' or 'svm').\n * @param chainId - The chain ID.\n * @param balance - The current balance (required for EVM calculation).\n * @param publicClient - VIEM PublicClient (required for EVM calculation).\n * @param queryClient - Optional QueryClient instance. If not provided, a default one will be created.\n * @returns A promise that resolves to the fee buffer amount as a bigint.\n */\nexport const getFeeBufferAmount = async (chainId: number, balance: bigint): Promise<bigint> => {\n const client = getFeeBufferQueryClient();\n const chain = chainIdToRelayChain(chainId);\n const vmType = chain?.vmType;\n const queryKey = [\"feeBuffer\", vmType, chainId];\n const publicClient = createDefaultPublicClient(chainId);\n\n // Handle unsupported VM types\n if (vmType !== \"evm\" && vmType !== \"svm\") {\n console.warn(`Unsupported VM type encountered: ${vmType}. Returning default EVM buffer.`);\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n }\n\n return client.fetchQuery({\n queryKey,\n queryFn: async (): Promise<bigint> => {\n if (vmType === \"evm\") {\n if (!publicClient) {\n console.error(\"PublicClient is required for EVM fee buffer calculation.\");\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n }\n return calculateEvmNativeGasBuffer(publicClient, balance);\n } else if (vmType === \"svm\") {\n const isEclipseChain = chainId === 9286185;\n const fallbackBuffer = isEclipseChain\n ? ECLIPSE_DEFAULT_FEE_WEI * ECLIPSE_FEE_BUFFER_MULTIPLIER\n : SOLANA_DEFAULT_FEE_LAMPORTS * SOLANA_FEE_BUFFER_MULTIPLIER;\n try {\n return await calculateSvmNativeFeeBuffer(chainId!);\n } catch (error) {\n console.error(`Failed to calculate SVM fee buffer for chain ${chainId}:`, error);\n return fallbackBuffer;\n }\n }\n // This should never be reached due to the check above, but TypeScript needs it\n return EVM_DEFAULT_FEE_WEI * EVM_GAS_BUFFER_MULTIPLIER;\n },\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 30 * 1000 // 30 seconds\n });\n};\n","import { decodeGlyphBalances } from \"../lib/balancesImageTransport\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { fetchScopedGlyphData, shouldRetryGlyphData } from \"../context/glyphDataQuery\";\nimport { TOKEN_REFRESH_INTERVAL_MS } from \"../lib/constants\";\nimport { GlyphWidgetBalances } from \"../types\";\nimport { useGlyph } from \"./useGlyph\";\nimport { useGlyphReadScope } from \"./useGlyphReadScope\";\n\nexport function useBalancesForChain(chainId?: number | \"all\") {\n const { user } = useGlyph();\n const { scope, isCurrent } = useGlyphReadScope(user?.evmWallet);\n const client = useQueryClient();\n useEffect(\n () => () => {\n void client.cancelQueries({ queryKey: [\"glyphWidgetChainBalances\", scope.key] });\n },\n [client, scope]\n );\n const query = useQuery({\n queryKey: [\"glyphWidgetChainBalances\", scope.key, chainId],\n enabled: isCurrent() && !!chainId && !!user?.evmWallet,\n gcTime: 0,\n placeholderData: () => undefined,\n refetchInterval: TOKEN_REFRESH_INTERVAL_MS,\n queryFn: ({ signal }) =>\n fetchScopedGlyphData<GlyphWidgetBalances>(\n scope.apiFetch,\n `/api/widget/balances?chainId=${chainId}&nftImageEncoding=references-v1`,\n signal,\n isCurrent,\n scope.key,\n decodeGlyphBalances\n ),\n retry: (count, error) => isCurrent() && shouldRetryGlyphData(error, count, 3),\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000)\n });\n return {\n ...query,\n data: isCurrent() && !query.isError && query.data?.scope === scope.key ? query.data.value : null\n };\n}\n","import { MAINNET_RELAY_API, type paths } from \"@relayprotocol/relay-sdk\";\nimport { useQuery, type DefaultError, type QueryKey } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nexport type GetCurrenciesBody = NonNullable<\n paths[\"/currencies/v2\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"] & { referrer?: string };\nexport type GetCurrenciesResponse = paths[\"/currencies/v2\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"];\ntype QueryType = typeof useQuery<GetCurrenciesResponse, DefaultError, GetCurrenciesResponse, QueryKey>;\ntype QueryOptions = Parameters<QueryType>[\"0\"];\n\nexport const queryTokenList = async function (\n options?: GetCurrenciesBody,\n headers?: Record<string, string>\n): Promise<GetCurrenciesResponse> {\n const url = new URL(`${MAINNET_RELAY_API}/currencies/v2`);\n const res = await fetch(url.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: JSON.stringify(options)\n });\n\n if (!res.ok) {\n throw new Error(`Failed to fetch token list: ${res.status} ${res.statusText}`);\n }\n\n return (await res.json()) as GetCurrenciesResponse;\n};\n\nexport default function (options?: GetCurrenciesBody, queryOptions?: Partial<QueryOptions>) {\n const response = (useQuery as QueryType)({\n queryKey: [\"useTokenList\", options],\n queryFn: () => queryTokenList(options),\n enabled: options ? true : false,\n retry: false,\n ...queryOptions\n });\n\n return useMemo(() => {\n return {\n ...response,\n data: response.error ? undefined : response.data\n } as Omit<ReturnType<QueryType>, \"data\"> & {\n data?: GetCurrenciesResponse;\n };\n }, [response.data, response.error, response.isLoading]);\n}\n","import { useMemo } from \"react\";\nimport { RelayAPIToken } from \"../context/GlyphSwapContext\";\nimport { GlyphWidgetTokenBalancesItem } from \"../types\";\nimport { useBalancesForChain } from \"./useBalancesForChain\";\nimport useRelayTokenList from \"./useRelayTokenList\";\n\nexport const useRelayYourTokensList = (currentChainId: number | \"all\", chainIds: number[]) => {\n const { data: balances, isLoading: isBalancesLoading, error: balancesError } = useBalancesForChain(\"all\"); // fetch balance for all supported networks at once\n\n // Balances might contain native token in the array even if the balance is 0\n const nonZeroBalances = useMemo(\n () =>\n balances?.tokens?.filter(\n (t) =>\n t.valueInWei &&\n BigInt(t.valueInWei) > 0n &&\n (currentChainId === \"all\" || t.chainId === currentChainId)\n ),\n [balances?.tokens, currentChainId]\n );\n\n // Token balances that are supported by Relay\n const {\n data: yourTokenList,\n isLoading: isYourTokenListLoading,\n error: yourTokenListError\n } = useRelayTokenList(\n balances?.tokens?.length\n ? {\n depositAddressOnly: false, // for swap\n chainIds: chainIds, // fetch for all the supported chains at once\n defaultList: false,\n tokens: balances?.tokens?.map((token) => `${token.chainId}:${token.address}`) // fetch all the tokens having balance across all the supported chains at once\n }\n : undefined\n );\n\n return useMemo(() => {\n const relaySupportedTokensBalances = nonZeroBalances?.reduce(\n (acc, token) => {\n const relayToken = yourTokenList?.find(\n (t) => t.chainId === token.chainId && t.address?.toLowerCase() === token.address?.toLowerCase()\n );\n if (!relayToken) {\n return acc;\n }\n\n acc[`${token.chainId!}:${token.address!.toLowerCase()}`] = {\n ...token,\n relayToken: relayToken\n };\n return acc;\n },\n {} as Record<string, GlyphWidgetTokenBalancesItem & { relayToken: RelayAPIToken }>\n );\n return {\n isLoading: isBalancesLoading || isYourTokenListLoading,\n isError: !!balancesError || !!yourTokenListError,\n error: balancesError || yourTokenListError,\n nonZeroBalances,\n relaySupportedTokens: yourTokenList || [],\n relaySupportedTokensBalances,\n relaySupportedTokensBalancesLength: relaySupportedTokensBalances\n ? Object.keys(relaySupportedTokensBalances).length\n : 0\n };\n }, [nonZeroBalances, yourTokenList, isBalancesLoading, isYourTokenListLoading, balancesError, yourTokenListError]);\n};\n","import { useMemo } from \"react\";\nimport { RelayAPIToken } from \"../../../context/GlyphSwapContext\";\nimport { useRelayYourTokensList } from \"../../../hooks/useRelayYourTokensList\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { Button } from \"../../ui/button\";\n\nexport default function AddGasToSourceChainButton({\n sourceChainNativeSymbol,\n sourceChainName,\n addGasToSourceChain\n}: {\n sourceChainNativeSymbol?: string;\n sourceChainName?: string;\n addGasToSourceChain: (toCurrency: RelayAPIToken | undefined) => void;\n}) {\n const chains = relayClient.chains || [];\n const chainIds = useMemo(() => chains.map((chain) => chain.id), []);\n\n const { relaySupportedTokensBalances } = useRelayYourTokensList(\"all\", chainIds);\n\n return (\n <Button\n onClick={() => {\n addGasToSourceChain(Object.values(relaySupportedTokensBalances || {})?.[0]?.relayToken ?? undefined);\n }}\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-foreground !gw-text-background !gw-h-5\"\n >\n <span className=\"gw-typography-caption\">\n {sourceChainNativeSymbol && sourceChainName\n ? `Add ${sourceChainNativeSymbol}`\n : \"Add gas on source chain\"}\n </span>\n </Button>\n );\n}\n","import { RelayChain } from \"@relayprotocol/relay-sdk\";\nimport { AlertTriangle, ChevronDown, FuelIcon, Loader2 } from \"lucide-react\";\nimport { memo, useEffect, useMemo, useRef, useState } from \"react\";\nimport { debounce } from \"throttle-debounce\";\nimport truncateEthAddress from \"truncate-eth-address\";\nimport { isAddress, zeroAddress } from \"viem\";\nimport { RelayAPIToken } from \"../../../context/GlyphSwapContext\";\nimport useRelayTokenList from \"../../../hooks/useRelayTokenList\";\nimport { useRelayYourTokensList } from \"../../../hooks/useRelayYourTokensList\";\nimport { CHAIN_NAMES } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { relayClient } from \"../../../lib/relay\";\nimport { cn, formatTokenCount } from \"../../../lib/utils\";\nimport { GlyphWidgetTokenBalancesItem } from \"../../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from \"../../ui/dialog\";\nimport { Input } from \"../../ui/input\";\nimport { Skeleton } from \"../../ui/skeleton\";\nimport TooltipElement from \"../../ui/tooltip-element\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\n// The swap token selector component behaves a bit differently from the send token selector component\n// because this component is being used twice on the same screen - (to and from currency) and hence we cannot switch chain from each of them, so they have their own state of currentChainId and once user goes on to perform the transaction only then we change the chainId in wagmi, unlike the send token selector where we switch the chainId in wagmi as soon as the user selects a chain in the selector\nconst SwapChainAndTokenSelector = ({\n onTokenSelect,\n selectedToken,\n defaultChainId\n}: {\n onTokenSelect: (token: RelayAPIToken) => void;\n selectedToken: RelayAPIToken | undefined;\n defaultChainId?: number | undefined;\n}) => {\n const chains = relayClient.chains || [];\n const chainIds = useMemo(() => chains.map((chain) => chain.id), []);\n\n const [open, setOpen] = useState<boolean>(false);\n\n // Chain ID of the current network selected (network selector)\n const [currentChainId, setCurrentChainId] = useState<number | undefined>(defaultChainId);\n\n const selectedTokenChain = useMemo(() => {\n if (!selectedToken?.chainId) return null;\n return chains.find((chain) => chain.id === selectedToken.chainId);\n }, [selectedToken?.chainId]);\n\n const {\n relaySupportedTokensBalances,\n relaySupportedTokensBalancesLength,\n isLoading: isYourTokensLoading\n } = useRelayYourTokensList(currentChainId ?? \"all\", chainIds);\n\n const [searchTerm, setSearchTerm] = useState<string>(\"\");\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState<string>(\"\");\n const debouncedFunc = useMemo(\n () =>\n debounce(500, (value: string) => {\n setDebouncedSearchTerm(value);\n }),\n []\n );\n const isTermAnAddress = isAddress(debouncedSearchTerm);\n\n const [currentChain, featuredTokens] = useMemo(() => {\n if (!currentChainId) return [null, []];\n const chain = chains.find((chain) => chain.id === currentChainId);\n const featuredTokens = chain?.featuredTokens || [];\n return [chain, featuredTokens];\n }, [currentChainId]);\n\n const collisionRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n collisionRef.current = document.querySelector(\".gw-wallet-container\");\n }, []);\n\n const handleTokenSelect = (token: RelayAPIToken) => {\n onTokenSelect(token);\n setOpen(false);\n };\n\n const {\n data: tokenList,\n isLoading,\n isError\n } = useRelayTokenList(\n {\n limit: 12, // Same as Relay demo\n depositAddressOnly: false, // for swap\n chainIds: currentChainId ? [currentChainId] : chainIds,\n defaultList: debouncedSearchTerm === \"\",\n term: !isTermAnAddress ? debouncedSearchTerm : undefined,\n address: isTermAnAddress ? debouncedSearchTerm : undefined\n },\n {}\n );\n\n return (\n <>\n <Dialog open={open} onOpenChange={setOpen} modal>\n <DialogTrigger asChild>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setOpen(true);\n // TODO: Logic to open token selector\n }}\n className={cn(\n \"gw-rounded-full gw-p-1 gw-pr-2 gw-h-12 gw-w-auto gw-min-w-0 !gw-ring-0 gw-flex gw-items-center gw-space-x-1\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n {selectedTokenChain && selectedToken ? (\n <div className=\"gw-flex gw-items-center gw-gap-1.5\">\n <TokenAndChainIcon\n token={{\n name: selectedToken.name,\n logoUrl: selectedToken.metadata?.logoURI\n }}\n chain={{\n id: selectedTokenChain.id,\n name: selectedTokenChain.name,\n logoUrl: selectedTokenChain.iconUrl\n }}\n />\n\n <span className=\"gw-flex gw-flex-col gw-items-start gw-justify-between gw-gap-1\">\n <span className=\"gw-typography-body1 !gw-leading-none !gw-font-bold gw-inline-block gw-pr-1\">\n {selectedToken.symbol}\n </span>\n <span className=\"gw-typography-caption !gw-leading-none gw-text-brand-gray-500\">\n {CHAIN_NAMES[selectedTokenChain.id] || selectedTokenChain.displayName}\n </span>\n </span>\n </div>\n ) : (\n <div className=\"gw-h-8 gw-rounded-full gw-typography-caption gw-flex gw-items-center gw-justify-center gw-text-brand-gray-500 gw-pl-3\">\n Select Token\n </div>\n )}\n <ChevronDown className=\"gw-size-4 gw-flex-shrink-0 gw-text-gray-500\" />\n </button>\n </DialogTrigger>\n <DialogContent container={collisionRef.current} className=\"gw-max-h-[calc(100%-1rem)]\">\n <DialogHeader>\n <DialogTitle>Select Token</DialogTitle>\n <DialogDescription className=\"gw-sr-only\">Select a token to swap</DialogDescription>\n </DialogHeader>\n\n <div className=\"gw-flex gw-flex-col gw-gap-6\">\n <div className=\"gw-flex gw-relative\">\n <Input\n type=\"text\"\n placeholder=\"Search token name or paste address\"\n value={searchTerm}\n onChange={(e) => {\n setSearchTerm(e.target.value);\n debouncedFunc(e.target.value);\n }}\n parentClassName=\"gw-pb-0\"\n />\n\n {isYourTokensLoading ? (\n <div className=\"gw-flex gw-z-0 gw-w-full gw-absolute -gw-bottom-1.5 gw-translate-y-full gw-origin-top gw-justify-center gw-items-center gw-gap-1 gw-text-[10px] gw-text-brand-gray-600 !gw-leading-none\">\n <Loader2 className=\"gw-size-2.5 gw-animate-spin\" />\n <span>Retrieving tokens available in your wallet</span>\n </div>\n ) : null}\n </div>\n\n {/* Networks */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Select Network</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n <Button\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === undefined && \"gw-bg-muted/80 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setCurrentChainId(undefined)}\n >\n <span className=\"gw-typography-caption\">All</span>\n </Button>\n {chains.map((chain) => (\n <Button\n key={`${chain.id}_networks`}\n size={\"icon\"}\n variant={\"liquidGlass\"}\n className={cn(\n \"gw-h-10 gw-p-0.5\",\n currentChainId === chain.id &&\n \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n onClick={() => setCurrentChainId(chain.id)}\n >\n {chain.iconUrl ? (\n <img\n src={chain.iconUrl || \"\"}\n alt={CHAIN_NAMES[chain.id] || chain.name}\n className=\"gw-rounded-full gw-size-8\"\n />\n ) : (\n <span className=\"gw-typography-caption\">\n {CHAIN_NAMES[chain.id] || chain.name}\n </span>\n )}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Popular Tokens */}\n {currentChain && featuredTokens && !debouncedSearchTerm && (\n <div className=\"gw-flex gw-flex-col gw-gap-1.5\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Popular Tokens</div>\n <div className=\"gw-flex gw-gap-2 gw-items-center gw-flex-wrap\">\n {featuredTokens?.map((token) => {\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === currentChainId;\n return (\n <Button\n key={`${token.address}_popular_tokens`}\n variant={\"liquidGlass\"}\n size=\"sm\"\n className={cn(\n \"gw-px-1 gw-gap-1\",\n isTokenSelected && \"gw-bg-green-500/20 gw-ring-primary/50 gw-ring-1\"\n )}\n shadow\n // Since chainId is not available in featuredTokens list, we are using currentChainId of the network selector\n onClick={() => handleTokenSelect({ ...token, chainId: currentChainId })}\n >\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.metadata?.logoURI\n }}\n chain={{\n id: currentChain.id,\n name: currentChain.name,\n logoUrl: currentChain.iconUrl\n }}\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <span className=\"gw-typography-body2 !gw-font-medium gw-inline-block gw-pr-1\">\n {token.symbol}\n </span>\n </Button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Your Tokens List */}\n {!debouncedSearchTerm && !!relaySupportedTokensBalancesLength && (\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">Your Tokens</div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {Object.values(relaySupportedTokensBalances || {})?.map((token, index) => {\n const tokenChain =\n currentChain ?? chains.find((chain) => chain.id === token.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain.id;\n return (\n <TokenTile\n key={`${tokenChain.id}:${token.address}_token_list`}\n currentChainId={currentChainId}\n handleTokenSelect={handleTokenSelect}\n isTokenSelected={isTokenSelected}\n token={token?.relayToken}\n tokenChain={tokenChain}\n showDivider={index < relaySupportedTokensBalancesLength - 1}\n tokenBalance={token}\n />\n );\n })}\n </div>\n </div>\n )}\n\n {/* Token List */}\n <div className=\"gw-flex gw-flex-col gw-gap-2\">\n <div className=\"gw-typography-body2 gw-text-brand-gray-500\">\n {debouncedSearchTerm ? \"Search Results\" : \"Global 24H Volume\"}\n </div>\n <div className=\"gw-grid gw-grid-cols-1 gw-px-1 gw-py-2 gw-min-h-0 gw-overflow-auto\">\n {isLoading ? (\n new Array(12).fill(0).map((_, index) => (\n <div key={index} className=\"gw-w-full\">\n <Skeleton className=\"gw-flex gw-items-center gw-justify-center gw-h-14\" />\n {index < 11 && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n ))\n ) : isError ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-destructive gw-typography-body2 gw-pr-4\">\n <AlertTriangle className=\"gw-size-5 gw-mr-2\" /> Couldn't fetch the token list\n </div>\n ) : tokenList?.length === 0 ? (\n <div className=\"gw-flex gw-justify-center gw-items-center gw-flex-1 gw-text-brand-gray-500 gw-typography-body2 gw-pr-4\">\n No tokens found\n </div>\n ) : (\n tokenList?.map((token, index) => {\n const tokenChain =\n currentChain ?? chains.find((chain) => chain.id === token.chainId)!;\n\n const isTokenSelected =\n selectedToken?.address === token.address &&\n selectedToken?.chainId === tokenChain.id;\n return (\n <TokenTile\n key={`${tokenChain.id}:${token.address}_token_list`}\n currentChainId={currentChainId}\n handleTokenSelect={handleTokenSelect}\n isTokenSelected={isTokenSelected}\n token={token}\n tokenChain={tokenChain}\n showDivider={index < tokenList.length - 1}\n tokenBalance={\n relaySupportedTokensBalances?.[\n `${token.chainId}:${token.address?.toLowerCase()}`\n ]\n }\n />\n );\n })\n )}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nconst TokenTile = ({\n handleTokenSelect,\n token,\n tokenChain,\n currentChainId,\n isTokenSelected,\n showDivider,\n tokenBalance\n}: {\n handleTokenSelect: (token: RelayAPIToken) => void;\n token: RelayAPIToken;\n tokenChain: RelayChain;\n currentChainId: number | undefined;\n isTokenSelected: boolean;\n showDivider?: boolean;\n tokenBalance?: GlyphWidgetTokenBalancesItem;\n}) => {\n return (\n <div\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleTokenSelect(token);\n }\n }}\n onClick={() => handleTokenSelect(token)}\n className=\"gw-w-full\"\n >\n <div\n className={cn(\n \"gw-flex gw-justify-between gw-items-center gw-w-full gw-p-2 gw-rounded-xl hover:gw-bg-gray-500/15\",\n {\n \"gw-bg-green-500/15 gw-shadow-liquidSm gw-backdrop-blur-sm gw-border gw-border-brand-white/20\":\n isTokenSelected\n }\n )}\n >\n <div className=\"gw-flex gw-items-center gw-space-x-3\">\n <TokenAndChainIcon\n token={{\n name: token.name,\n logoUrl: token.metadata?.logoURI\n }}\n chain={{\n id: tokenChain.id,\n name: tokenChain.name,\n logoUrl: tokenChain.iconUrl\n }}\n />\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end\">\n <span className=\"gw-font-medium gw-flex gw-gap-1 gw-items-center\">\n <span className=\"gw-font-medium\">{token.symbol}</span>\n {token.metadata?.verified === false && (\n <TooltipElement side=\"bottom\" align=\"center\" stopPropagation description=\"Not verified\">\n <span className=\"gw-size-[18px] gw-bg-brand-warning gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <AlertTriangle />\n </span>\n </TooltipElement>\n )}\n {currentChainId && token.address === zeroAddress && (\n <TooltipElement side=\"bottom\" align=\"center\" stopPropagation description=\"Gas Token\">\n <span className=\"gw-size-[18px] gw-bg-brand-success gw-rounded-full gw-flex gw-items-center gw-justify-center gw-p-1 gw-text-background\">\n <FuelIcon />\n </span>\n </TooltipElement>\n )}\n </span>\n\n <span className={`gw-typography-caption gw-text-brand-gray-500 `}>\n {/* {CHAIN_NAMES[tokenChain.id] || tokenChain.displayName} */}\n {truncateEthAddress(token.address!)}\n </span>\n </div>\n </div>\n\n {tokenBalance && (\n <div className=\"gw-flex gw-flex-col gw-items-between gw-justify-end gw-h-full gw-text-end\">\n <span className=\"gw-min-h-5 gw-font-medium\">\n {formatCurrency(\n tokenBalance.amount,\n tokenBalance.currency,\n BigInt(tokenBalance.valueInWei) !== 0n\n )}\n </span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {formatTokenCount(\n tokenBalance.valueInWei,\n tokenBalance.decimals,\n tokenBalance.displayDecimals\n )}{\" \"}\n {token.symbol}\n </span>\n </div>\n )}\n </div>\n {showDivider && <hr className=\"gw-my-2 gw-border-muted gw-mx-2\" />}\n </div>\n );\n};\n\nexport default memo(SwapChainAndTokenSelector);\n","import { paths } from \"@relayprotocol/relay-sdk\";\nimport { CheckIcon, PlusIcon, X } from \"lucide-react\";\nimport { useTokenBalance } from \"../../../hooks/useTokenBalance\";\nimport { MAX_DECIMALS_FOR_CRYPTO } from \"../../../lib/constants\";\nimport { formatCurrency } from \"../../../lib/intl\";\nimport { displayNumberPrecision } from \"../../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport TooltipElement from \"../../ui/tooltip-element\";\n\nexport type TopUpDetails =\n | NonNullable<\n paths[\"/quote\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"][\"details\"]\n >[\"currencyGasTopup\"]\n | undefined;\n\ntype WalletSwapTopUpGasProps = {\n destinationChainId?: number;\n topUpGas: boolean;\n setTopUpGas: (value: boolean) => void;\n topUpDetails: TopUpDetails;\n tokenAddress: string;\n quoteReady?: boolean;\n};\n\nexport const WalletSwapTopUpGas = ({\n destinationChainId,\n topUpGas,\n setTopUpGas,\n topUpDetails,\n quoteReady,\n tokenAddress\n}: WalletSwapTopUpGasProps) => {\n const { balance } = useTokenBalance(tokenAddress, destinationChainId);\n\n const topupValue = displayNumberPrecision(\n parseFloat(topUpDetails?.amountFormatted || \"0\"),\n Math.min(topUpDetails?.currency?.decimals || MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n );\n const topupAmount = Number(topUpDetails?.amountUsd || \"0\");\n\n const topupCurrency = topUpDetails?.currency;\n\n if (balance === undefined || balance === null || BigInt(balance) > 0n || !quoteReady) {\n return null;\n }\n\n return (\n <>\n <Button\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-brand-success !gw-text-foreground !gw-h-5\"\n variant={\"default\"}\n onClick={() => setTopUpGas(!topUpGas)}\n >\n {!topUpGas && <PlusIcon className=\"!gw-size-3\" />}{\" \"}\n <span className=\"gw-typography-caption gw-inline-flex gw-gap-1 gw-items-center\">\n {!topUpGas ? (\n \"Add Gas\"\n ) : topUpDetails ? (\n <>\n <span>+{topupValue}</span>\n <span>({formatCurrency(topupAmount, \"USD\")})</span>\n {topupCurrency?.metadata?.logoURI && (\n <img\n src={topupCurrency?.metadata?.logoURI || \"\"}\n alt={topupCurrency?.name}\n className=\"gw-rounded-full gw-size-4\"\n />\n )}\n <span>{topupCurrency?.symbol}</span>\n <X className=\"!gw-size-3\" />\n </>\n ) : (\n <>\n <CheckIcon className=\"!gw-size-3\" />\n <span>Added Gas</span>\n </>\n )}\n </span>\n </Button>\n\n <TooltipElement\n description=\"No gas detected on the destination chain. A gas top-up is recommended which is reserved from your buy total, not charged extra.\"\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n triggerClassName=\"gw-ml-1\"\n />\n </>\n );\n};\n","import { X } from \"lucide-react\";\nimport { memo } from \"react\";\nimport { FailureIcon } from \"../../../assets/svg/FailureIcon\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\n\ninterface WalletTradeFailedViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n };\n reason?: string | null;\n}\n\nconst WalletTradeFailedView: React.FC<WalletTradeFailedViewProps> = ({ onEnd, onShowActivity, txDetails, reason }) => {\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <FailureIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr gw-text-center\">\n Transaction\n <br />\n failed.\n </span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {`Your transaction failed.\\nPlease try again.`}\n </span>\n\n {reason ? (\n <span className=\"gw-mt-3 gw-min-h-8 gw-typography-caption gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n Reason - <span className=\"first-letter:gw-uppercase\">{reason}</span>\n </span>\n ) : null}\n\n <div className=\"gw-my-6 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails?.hash}\n text={`View on ${txDetails?.blockExplorerName || \"block explorer\"}`}\n url={txDetails?.blockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Activity\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletTradeFailedView);\n","import { memo, useMemo } from \"react\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport LoadingCircleIcon from \"../../../assets/svg/LoadingCircleIcon\";\nimport { useGlyphSwap } from \"../../../context/GlyphSwapContext\";\nimport { chainIdToRelayChain } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport WalletViewHeader from \"../../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\ninterface WalletTradePendingViewProps {\n onBack: () => void;\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n estimatedTime?: number;\n };\n sellAmount: number;\n buyAmount: number;\n isTxApproved: boolean;\n statusError?: string;\n}\n\nconst WalletTradePendingView: React.FC<WalletTradePendingViewProps> = ({\n onBack,\n txDetails,\n sellAmount,\n buyAmount,\n isTxApproved,\n statusError\n}) => {\n const { fromCurrency, toCurrency } = useGlyphSwap();\n\n const fromChain = useMemo(\n () => (fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined),\n [fromCurrency?.chainId]\n );\n const toChain = useMemo(\n () => (toCurrency?.chainId ? chainIdToRelayChain(toCurrency?.chainId) : undefined),\n [toCurrency?.chainId]\n );\n\n const isGlyphDashboard = useMemo(() => {\n return [\"useglyph.io\", \"staging.useglyph.io\"].includes(window.location.hostname);\n }, []);\n\n return (\n <WalletViewTemplate\n isStickyHeader={true}\n header={\n <WalletViewHeader\n isStickyHeader={true}\n fullScreenHeader={{\n title: \"Transaction Status\",\n onCloseClick: onBack\n }}\n />\n }\n footerClassName=\"!gw-pt-2\"\n content={\n <div className=\"gw-p-4 gw-pt-0 gw-h-full\">\n {statusError && (\n <p role=\"status\" className=\"gw-mb-4 gw-typography-caption\">\n {statusError}\n </p>\n )}\n <h6>{!isGlyphDashboard && !isTxApproved ? \"Waiting For Approval\" : \"Finalizing Transaction\"}</h6>\n <div className=\"gw-mt-4 gw-typography-caption gw-flex gw-justify-between gw-items-center\">\n <span>Estimated wait time:</span>\n <span className=\"gw-text-brand-gray-500\">\n {/* Add 15 seconds buffer to fetch status */}\n {txDetails?.estimatedTime ? `${txDetails?.estimatedTime} secs` : \"<15 secs\"}\n </span>\n </div>\n\n <div className=\"gw-mt-4 gw-flex gw-justify-center gw-items-center\">\n <div className=\"gw-rounded-full gw-flex gw-flex-col gw-items-center gw-justify-center gw-p-10 gw-relative gw-size-64 gw-overflow-hidden gw-bg-brand-white\">\n <LoadingCircleIcon className=\"gw-absolute gw-inset-0 gw-animate-spin gw-size-64 gw-z-0\" />\n\n <div className=\"gw-flex gw-items-center gw-justify-between gw-relative gw-z-[1]\">\n <TokenAndChainIcon\n token={{\n name: fromCurrency?.name,\n logoUrl: fromCurrency?.metadata?.logoURI\n }}\n chain={\n fromChain\n ? {\n id: fromChain?.id,\n name: fromChain?.name,\n logoUrl: fromChain?.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <div className=\"gw-px-2 gw-flex gw-flex-col gw-gap-0.5\">\n <span className=\"gw-typography-h6\">{sellAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {fromCurrency?.symbol}\n </span>\n </div>\n </div>\n\n <div className=\"gw-flex gw-gap-3 gw-items-center\">\n <div className=\"gw-my-5 gw-flex gw-flex-col gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-[1]\">\n <CaretDownIcon className=\"gw-animate-pulse gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-300 gw-w-4\" />\n <CaretDownIcon className=\"gw-animate-pulse gw-delay-600 gw-w-4\" />\n </div>\n </div>\n\n <div className=\"gw-flex gw-items-center gw-justify-between gw-relative gw-z-[1]\">\n <TokenAndChainIcon\n token={{\n name: toCurrency?.name,\n logoUrl: toCurrency?.metadata?.logoURI\n }}\n chain={\n toChain\n ? {\n id: toChain.id,\n name: toChain.name,\n logoUrl: toChain.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n\n <div className=\"gw-px-2 gw-flex gw-flex-col gw-gap-0.5\">\n <span className=\"gw-typography-h6\">{buyAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {toCurrency?.symbol}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n footer={\n <>\n <span className=\"gw-inline-flex gw-items-center gw-space-x-2 gw-typography-caption gw-text-brand-gray-500 gw-text-center\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails?.hash}\n text={`View on ${txDetails?.blockExplorerName || \"block explorer\"}`}\n url={txDetails?.blockExplorerUrl}\n />\n ) : (\n <span>\n {!isGlyphDashboard && !isTxApproved ? (\n <span className=\"gw-text-foreground\">\n *Approvals open in a new window for your safety. Please approve each and return\n here.*\n </span>\n ) : (\n \"*Please do not close this tab.*\"\n )}\n </span>\n )}\n </span>\n <Button variant=\"tertiary\" className=\"gw-w-full gw-mt-4\" onClick={onBack}>\n Back to Home\n </Button>\n </>\n }\n footerCols={true}\n mainFooter={false}\n />\n );\n};\n\nexport default memo(WalletTradePendingView);\n","import { X } from \"lucide-react\";\nimport { memo, useMemo } from \"react\";\nimport { CaretDownIcon } from \"../../../assets/svg/CaretDownIcon\";\nimport { SuccessIcon } from \"../../../assets/svg/SuccessIcon\";\nimport { useGlyphSwap } from \"../../../context/GlyphSwapContext\";\nimport { chainIdToRelayChain, cn } from \"../../../lib/utils\";\nimport { LinkWithIcon } from \"../../shared/LinkWithIcon\";\nimport { WalletViewTemplate } from \"../../shared/WalletViewTemplate\";\nimport { Button } from \"../../ui/button\";\nimport { TokenAndChainIcon } from \"./TokenAndChainIcon\";\n\ninterface WalletSendFundSuccessViewProps {\n onEnd: () => void;\n onShowActivity: () => void;\n\n sellAmount: number;\n buyAmount: number;\n\n txDetails?: {\n hash?: string;\n blockExplorerUrl?: string;\n blockExplorerName?: string;\n };\n}\n\nconst WalletSendFundSuccessView: React.FC<WalletSendFundSuccessViewProps> = ({\n onEnd,\n onShowActivity,\n sellAmount,\n buyAmount,\n txDetails\n}) => {\n const { fromCurrency, toCurrency } = useGlyphSwap();\n\n const fromChain = useMemo(\n () => (fromCurrency?.chainId ? chainIdToRelayChain(fromCurrency?.chainId) : undefined),\n [fromCurrency?.chainId]\n );\n const toChain = useMemo(\n () => (toCurrency?.chainId ? chainIdToRelayChain(toCurrency?.chainId) : undefined),\n [toCurrency?.chainId]\n );\n\n return (\n <WalletViewTemplate\n isStickyHeader={false}\n content={\n <div className=\"gw-w-full gw-min-h-full gw-flex gw-flex-col gw-items-center gw-rounded-6xl gw-relative\">\n <div className=\"gw-flex gw-justify-end gw-w-full gw-p-4 gw-relative gw-z-10\">\n <div className=\"gw-size-12\">\n <button\n className=\"gw-size-full gw-inline-flex gw-justify-center gw-items-center\"\n onClick={onEnd}\n >\n <X className=\"gw-size-6\" />\n </button>\n </div>\n </div>\n\n <div className=\"gw-w-full gw-p-4 gw-relative gw-z-10 gw-flex-1 gw-flex-col gw-flex gw-justify-end\">\n <div className=\"gw-flex gw-flex-col gw-items-center gw-w-full\">\n <SuccessIcon className=\"gw-size-24\" />\n <span className=\"gw-mt-7 gw-typography-h4-nr\">Success</span>\n <span className=\"gw-mt-3 gw-text-center gw-whitespace-pre-wrap !gw-leading-tight\">\n {fromCurrency?.symbol &&\n toCurrency?.symbol &&\n `You have successfully swapped\\n${fromCurrency.symbol} for ${toCurrency.symbol}`}\n </span>\n\n <div\n className={cn(\n \"gw-my-6 gw-rounded-2xl gw-flex gw-p-4 gw-items-center gw-space-x-3 gw-w-full gw-justify-center\",\n \"gw-bg-brand-white/70 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquid\"\n )}\n >\n <TokenAndChainIcon\n token={{\n name: fromCurrency?.name,\n logoUrl: fromCurrency?.metadata?.logoURI\n }}\n chain={\n fromChain\n ? {\n id: fromChain?.id,\n name: fromChain?.name,\n logoUrl: fromChain?.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n <div className=\"gw-flex gw-flex-col gw-gap-0.5 gw-min-w-12\">\n <span className=\"gw-typography-body1 !gw-leading-none\">{sellAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {fromCurrency?.symbol}\n </span>\n </div>\n <div className=\"gw-flex gw-items-center gw-justify-center gw-text-brand-success gw-relative gw-z-10\">\n <CaretDownIcon className=\"gw-w-3 -gw-rotate-90 gw-opacity-50\" />\n <CaretDownIcon className=\"gw-w-3 -gw-ml-1 -gw-rotate-90\" />\n </div>\n <TokenAndChainIcon\n token={{\n name: toCurrency?.name,\n logoUrl: toCurrency?.metadata?.logoURI\n }}\n chain={\n toChain\n ? {\n id: toChain.id,\n name: toChain.name,\n logoUrl: toChain.iconUrl\n }\n : undefined\n }\n tokenClassName=\"gw-size-8\"\n chainClassName=\"gw-size-4\"\n />\n <div className=\"gw-flex gw-flex-col gw-gap-0.5 gw-min-w-12\">\n <span className=\"gw-typography-body1 !gw-leading-none\">{buyAmount}</span>\n <span className=\"gw-typography-caption gw-text-brand-gray-500\">\n {toCurrency?.symbol}\n </span>\n </div>\n </div>\n\n <div className=\"gw-my-1 gw-flex gw-p-4 gw-items-center gw-w-full gw-justify-center gw-space-x-2 gw-typography-caption\">\n {txDetails?.hash && txDetails?.blockExplorerUrl ? (\n <LinkWithIcon\n key={txDetails.hash}\n text={`View on ${txDetails.blockExplorerName || \"block explorer\"}`}\n url={txDetails.blockExplorerUrl}\n />\n ) : null}\n </div>\n\n <Button variant=\"tertiary\" className=\"gw-w-full\" onClick={onShowActivity}>\n View Transaction\n </Button>\n </div>\n </div>\n </div>\n }\n />\n );\n};\n\nexport default memo(WalletSendFundSuccessView);\n","import { ArrowUpDown, Loader2 } from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { debounce } from \"throttle-debounce\";\nimport { formatUnits, parseUnits, zeroAddress } from \"viem\";\nimport { useChainId } from \"wagmi\";\nimport { GlyphSwapContextData, RelayAPIToken, useGlyphSwap } from \"../../context/GlyphSwapContext\";\nimport { useGlyph } from \"../../hooks/useGlyph\";\nimport { buildErrorPayloadWithCode, PRECHECK_FAILURE_CODE, useRelayExecute } from \"../../hooks/useRelayExecute\";\nimport { useRelayIntentStatus } from \"../../hooks/useRelayIntentStatus\";\nimport { checkIfGasIsEnough, useRelayQuote } from \"../../hooks/useRelayQuote\";\nimport { useTokenBalance } from \"../../hooks/useTokenBalance\";\nimport { INTERNAL_GRADIENT_TYPE, MAX_DECIMALS_FOR_CRYPTO, RELAY_APP_FEE_BPS, SwapView } from \"../../lib/constants\";\nimport { reformatSwapError, SWAP_ERROR_MESSAGES } from \"../../lib/customErrors\";\nimport { formatCurrency } from \"../../lib/intl\";\nimport { formatInputNumber } from \"../../lib/numericInputs\";\nimport { getFeeBufferAmount } from \"../../lib/relayNativeMaxAmount\";\nimport { chainIdToRelayChain, cn, displayNumberPrecision, formatTokenCount, getRPCErrorString } from \"../../lib/utils\";\nimport WalletViewHeader from \"../shared/WalletViewHeader\";\nimport { WalletViewTemplate } from \"../shared/WalletViewTemplate\";\nimport { Button } from \"../ui/button\";\nimport { Skeleton } from \"../ui/skeleton\";\nimport TooltipElement from \"../ui/tooltip-element\";\nimport AddGasToSourceChainButton from \"./internal/AddGasToSourceChainButton\";\nimport SwapChainAndTokenSelector from \"./internal/SwapChainAndTokenSelector\";\nimport { WalletSwapTopUpGas } from \"./internal/WalletSwapTopUpGas\";\nimport WalletTradeFailedView from \"./internal/WalletTradeFailedView\";\nimport WalletTradePendingView from \"./internal/WalletTradePendingView\";\nimport WalletTradeSuccessView from \"./internal/WalletTradeSuccessView\";\n\nexport type WalletTradeProps = {\n onBack: () => void;\n onEnd: () => void;\n onShowActivity: () => void;\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n};\n\nexport function WalletTradeView({ onBack, onEnd, onShowActivity, setGradientType }: WalletTradeProps) {\n const { fetchForAllNetworks } = useGlyph();\n const chainId = useChainId();\n\n const [view, setView] = useState<SwapView>(SwapView.START);\n const [txStatus, setTxStatus] = useState<\"SUCCESS\" | \"FAILED\" | \"PENDING\">(\"PENDING\");\n const [intentRequestId, setIntentRequestId] = useState<string | null>(null);\n const [swapTxnId, setSwapTxnId] = useState<string | null>(null);\n\n const [isTxApproved, setIsTxApproved] = useState<boolean>(false);\n\n // Swap hooks\n const { update, reportSwapFailed, fromCurrency, toCurrency, tradeType, amount, topupGas } = useGlyphSwap();\n const { mutateAsync: executeSwap, isPending: executePending } = useRelayExecute();\n const {\n data: quote,\n isLoading: quoteLoading,\n error: quoteError,\n isEnabled: quoteEnabled,\n appFeesWaived,\n operation\n } = useRelayQuote(view === SwapView.START);\n const onError = useCallback(async () => {\n if (swapTxnId) await reportSwapFailed(swapTxnId);\n setSwapTxnId(null);\n }, [swapTxnId, setSwapTxnId, reportSwapFailed]);\n const { txDetails, error: swapError } = useRelayIntentStatus({\n intentRequestId,\n setTxStatus,\n setView,\n onError\n });\n\n const switchTokensHandler = () => {\n const prevFromCurrency = fromCurrency;\n const prevFromAmount = formatUnits(BigInt(amount), fromCurrency?.decimals || 18);\n const prevToCurrency = toCurrency;\n const prevToAmount = formatUnits(BigInt(amount), toCurrency?.decimals || 18);\n update({\n fromCurrency: prevToCurrency,\n toCurrency: prevFromCurrency,\n tradeType: tradeType === \"EXACT_INPUT\" ? \"EXACT_OUTPUT\" : \"EXACT_INPUT\"\n });\n\n if (tradeType === \"EXACT_INPUT\") {\n setBuyAmount(prevFromAmount);\n } else {\n setSellAmount(prevToAmount);\n }\n };\n\n // Update the amount and trade type with some debounce - such that quote is not fetched for every user interaction\n const debouncedAmountFunc = useMemo(\n () =>\n debounce(500, (value: bigint, newTradeType: GlyphSwapContextData[\"tradeType\"]) => {\n setExecuteError(\"\");\n update({\n amount: value.toString(),\n tradeType: newTradeType\n });\n }),\n [update] // safe to keep as a dep\n );\n\n const [executeError, setExecuteError] = useState<string>(\"\");\n\n const [swapFromAndToTokensAnimation, setSwapFromAndToTokensAnimation] = useState<boolean>(false);\n\n useEffect(() => {\n // Reset amount so that quote is not refilled on remount\n return () => {\n update({\n amount: \"\",\n topupGas: false,\n fromCurrency: undefined,\n toCurrency: undefined\n });\n };\n }, []);\n\n // Set the gradient type to primary when the success/failed view is opened\n useEffect(() => {\n if (view === SwapView.END && txStatus === \"SUCCESS\") {\n setGradientType(INTERNAL_GRADIENT_TYPE.SUCCESS);\n }\n if (view === SwapView.END && txStatus === \"FAILED\") setGradientType(INTERNAL_GRADIENT_TYPE.ERROR);\n // Reset the gradient type when the success/failed view is closed\n return () => {\n setGradientType(undefined);\n };\n }, [setGradientType, txStatus, view]);\n\n // Temporary variables\n const [sellAmount, setSellAmount] = useState<string>(\"\");\n const [buyAmount, setBuyAmount] = useState<string>(\"\");\n\n const [transferMaxLoading, setTransferMaxLoading] = useState<boolean>(false);\n const [lastFeeBuffer, setLastFeeBuffer] = useState<bigint>(0n);\n\n useEffect(() => {\n if (quote) {\n const quoteGasWithBuffer = (BigInt(quote?.fees?.gas?.amount || \"0\") * 120n) / 100n; // 5% more than the error check\n if (transferMaxLoading) {\n // If the last fee buffer is less than the quote gas, recalculate the fee buffer\n if (lastFeeBuffer < BigInt(quote?.fees?.gas?.amount || \"0\")) {\n const newFeeBuffer = quoteGasWithBuffer;\n setLastFeeBuffer(newFeeBuffer);\n const isNativeToken =\n fromCurrency?.address ===\n (chainIdToRelayChain(fromCurrency!.chainId!)!.currency?.address ?? zeroAddress);\n const valueToSet = isNativeToken ? maxSellAmount(newFeeBuffer) : maxSellAmount(0n);\n setSellAmount(valueToSet);\n debouncedAmountFunc(\n isNativeToken\n ? BigInt(sellTokenBalance ?? \"0\") > newFeeBuffer\n ? BigInt(sellTokenBalance ?? \"0\") - newFeeBuffer\n : 0n\n : BigInt(sellTokenBalance ?? \"0\"),\n \"EXACT_INPUT\"\n );\n setTransferMaxLoading(false);\n return;\n }\n // If the last fee buffer is greater than the quote gas, we are good to go and we can set the transfer max loading to false\n setTransferMaxLoading(false);\n }\n if (tradeType === \"EXACT_INPUT\" && quote.details?.currencyOut?.amount) {\n setBuyAmount(\n formatTokenCount(\n quote.details.currencyOut.amount,\n toCurrency?.decimals || 18,\n Math.min(toCurrency?.decimals ?? MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString()\n );\n } else if (tradeType === \"EXACT_OUTPUT\" && quote.details?.currencyIn?.amount) {\n setSellAmount(\n formatTokenCount(\n quote.details.currencyIn.amount,\n fromCurrency?.decimals || 18,\n Math.min(fromCurrency?.decimals ?? MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString()\n );\n }\n }\n }, [quote]);\n\n const {\n balance: sellTokenBalance,\n isLoading: sellTokenBalanceLoading,\n error: sellTokenBalanceError\n } = useTokenBalance(fromCurrency?.address, fromCurrency?.chainId);\n\n // Calculate max sell amount from balance\n const maxSellAmount = useCallback(\n (gasFee: bigint) => {\n if (sellTokenBalance !== undefined && fromCurrency?.decimals && BigInt(sellTokenBalance) > gasFee) {\n return displayNumberPrecision(\n parseFloat(formatUnits(BigInt(sellTokenBalance) - gasFee, fromCurrency.decimals)),\n Math.min(fromCurrency.decimals || MAX_DECIMALS_FOR_CRYPTO, MAX_DECIMALS_FOR_CRYPTO)\n ).toString();\n }\n return \"0\";\n },\n [sellTokenBalance, fromCurrency?.decimals]\n );\n\n const {\n balance: buyTokenBalance,\n isLoading: buyTokenBalanceLoading,\n error: buyTokenBalanceError\n } = useTokenBalance(toCurrency?.address, toCurrency?.chainId);\n\n const quoteGas = quote?.fees?.gas;\n\n // Source chain gas balance to determine if transaction can be executed\n const gasCurrencyAddress = quoteGas?.currency?.address || zeroAddress;\n const {\n balance: sourceGasBalance,\n isLoading: sourceGasBalanceLoading,\n error: sourceGasBalanceError\n } = useTokenBalance(gasCurrencyAddress, fromCurrency?.chainId);\n\n const sellAmountInWeiToUse =\n tradeType === \"EXACT_INPUT\" ? amount : parseUnits(sellAmount, fromCurrency?.decimals || 18);\n const insufficientBalanceError =\n fromCurrency?.decimals && sellAmount && sellTokenBalance !== undefined\n ? BigInt(sellTokenBalance) < BigInt(sellAmountInWeiToUse)\n ? SWAP_ERROR_MESSAGES.INSUFFICIENT_BALANCE\n : null\n : null;\n\n const hasSourceGas = checkIfGasIsEnough(\n gasCurrencyAddress,\n fromCurrency,\n quoteGas?.amount || \"0\",\n sourceGasBalance,\n sellAmountInWeiToUse.toString()\n );\n\n const gasUnavailableError =\n quote &&\n fromCurrency?.chainId &&\n !sourceGasBalanceLoading &&\n !hasSourceGas &&\n !transferMaxLoading &&\n buyAmount !== \"\"\n ? SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS\n : null;\n\n const blockingError =\n swapError || // Error from swap intent status\n executeError || // Error during execution\n (view === SwapView.START\n ? quoteError?.message ||\n sellTokenBalanceError ||\n buyTokenBalanceError ||\n sourceGasBalanceError ||\n insufficientBalanceError ||\n gasUnavailableError\n : undefined); // These errors are only relevant when on start screen\n\n const appFees = Number(quote?.fees?.app?.amountUsd || \"0\"); // It's absolute value\n\n const totalImpact = Math.abs(Number(quote?.details?.totalImpact?.usd || \"0\")); // It's negative already\n const networkFees = Math.abs(totalImpact - appFees);\n\n const currencyInUsd = quote?.details?.currencyIn?.amountUsd\n ? Number(quote?.details?.currencyIn?.amountUsd)\n : undefined;\n const currencyOutUsd = quote?.details?.currencyOut?.amountUsd\n ? Number(quote?.details?.currencyOut?.amountUsd)\n : undefined;\n\n const [isFromTokenNative, sourceChainNativeSymbol, sourceChainName] = useMemo(() => {\n if (!fromCurrency?.address || !fromCurrency?.chainId) return [false, undefined, undefined];\n const sourceChain = chainIdToRelayChain(fromCurrency.chainId!);\n const nativeAddress = sourceChain?.currency?.address ?? zeroAddress;\n return [\n fromCurrency.address.toLowerCase() === nativeAddress.toLowerCase(),\n // nativeAddress,\n sourceChain?.currency?.symbol ?? undefined,\n sourceChain?.displayName ?? undefined\n ];\n }, [fromCurrency?.address, fromCurrency?.chainId]); // if from token is native token, source chain native symbol and source chain name\n\n const [isToTokenNative, destinationChainNativeAddress] = useMemo(() => {\n if (!toCurrency?.address || !toCurrency?.chainId) return [false, undefined];\n const nativeAddress = chainIdToRelayChain(toCurrency.chainId!)!.currency?.address ?? zeroAddress;\n return [toCurrency.address.toLowerCase() === nativeAddress.toLowerCase(), nativeAddress];\n }, [toCurrency?.address, toCurrency?.chainId]); // if to token is native token and destination chain native address\n\n const addGasToSourceChain = useCallback(\n (fromCurrency: RelayAPIToken | undefined) => {\n if (!quoteGas) return;\n\n // Set the output currency to the gas currency needed and amount to 2x the gas amount needed\n const gasFromLastQuote = BigInt(quoteGas?.amount || \"0\");\n const gasToAdd = gasFromLastQuote * 2n;\n setSellAmount(\"\"); // Reset sell amount to 0\n setBuyAmount(formatUnits(gasToAdd, quoteGas?.currency?.decimals || 18));\n if (!fromCurrency) {\n toast.info(\"Please select the source token to proceed!\");\n }\n update({\n fromCurrency: fromCurrency,\n toCurrency: quoteGas?.currency,\n amount: gasToAdd.toString(),\n tradeType: \"EXACT_OUTPUT\"\n });\n },\n [quoteGas]\n );\n\n return (\n <>\n {view === SwapView.START && (\n <WalletViewTemplate\n isStickyHeader\n headerClassName=\"!gw-py-2\"\n footerClassName=\"gw-sticky gw-bottom-0 gw-z-10\"\n header={\n <WalletViewHeader\n isStickyHeader\n fullScreenHeader={{\n title: \"Swap\",\n onBackClick: onBack\n }}\n />\n }\n content={\n <div className=\"gw-px-4 gw-h-full gw-flex gw-flex-col gw-justify-start\">\n {/* From Token */}\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-border-b gw-border-muted gw-pb-6 gw-relative\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">Sell</div>\n\n {/* Sell Input */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-mb-1.5\">\n <div\n className={`gw-w-full gw-text-center gw-flex gw-justify-between gw-items-center gw-typography-h3-nr gw-gap-1`}\n >\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (sellAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={sellAmount}\n onChange={(e) => {\n setSellAmount(() => {\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n fromCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // If value is reset, reset the other value as well\n if (e.target.value === \"\") {\n setBuyAmount(\"\");\n }\n\n // If sell amount is manually changed - that means user want swap of type \"EXACT_INPUT\"\n debouncedAmountFunc(\n parseUnits(value, fromCurrency?.decimals || 18),\n \"EXACT_INPUT\"\n );\n\n return value;\n });\n }}\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {/* From Token selector */}\n {chainId && (\n <SwapChainAndTokenSelector\n selectedToken={fromCurrency}\n onTokenSelect={(t) => {\n update({\n fromCurrency: t\n });\n\n // If source token is changed and user entered the source amount manually, reset the sell amount and buy amount and amount.\n if (tradeType === \"EXACT_INPUT\") {\n setSellAmount(\"\");\n setBuyAmount(\"\");\n update({\n amount: \"\"\n });\n }\n\n // Sell token and buy token cannot be same - unset buy token if it is same\n if (\n toCurrency &&\n toCurrency.address === t.address &&\n toCurrency.chainId === t.chainId\n ) {\n setBuyAmount(\"\");\n update({\n amount: \"\",\n toCurrency: undefined\n });\n }\n }}\n defaultChainId={fetchForAllNetworks ? undefined : chainId}\n />\n )}\n </div>\n </div>\n\n {/* Value in USD and tokens available */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-text-brand-gray-500 gw-min-h-5\">\n {currencyInUsd === undefined ? (\n <div className=\"gw-h-5 gw-w-1\" />\n ) : (\n <div className=\"gw-typography-caption\">\n {currencyInUsd < 0.01\n ? \"<$0.01\"\n : `${formatCurrency(currencyInUsd || \"0\", \"USD\")}`}\n </div>\n )}\n <>\n {sellTokenBalanceLoading ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n <Skeleton className=\"gw-h-5 gw-w-10 gw-inline-block gw-ml-0.5\" />\n </div>\n ) : !!sellTokenBalance && fromCurrency?.decimals ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4 gw-gap-1\">\n {/* Max button - only show if the sell token balance is greater than 0 */}\n {BigInt(sellTokenBalance) > 0n && (\n <>\n <Button\n disabled={transferMaxLoading || !toCurrency}\n className=\"gw-w-fit !gw-gap-1 !gw-px-2 !gw-py-0.5 !gw-bg-brand-success !gw-text-foreground !gw-h-5\"\n onClick={async () => {\n setTransferMaxLoading(true);\n try {\n if (!fromCurrency) {\n return;\n }\n const feeGasBuffer = await getFeeBufferAmount(\n fromCurrency?.chainId as number,\n BigInt(sellTokenBalance)\n );\n const valueToSet = isFromTokenNative\n ? maxSellAmount(feeGasBuffer)\n : maxSellAmount(0n);\n // If the max sell amount is 0, throw an error as we don't have enough balance to cover the gas fee\n if (valueToSet === \"0\") {\n throw new Error(\n SWAP_ERROR_MESSAGES.FAILED_TO_MAX_LOW_GAS\n );\n }\n\n const newWeiValueForQuote = isFromTokenNative\n ? BigInt(sellTokenBalance) - feeGasBuffer\n : BigInt(sellTokenBalance);\n\n if (newWeiValueForQuote.toString() !== amount) {\n setLastFeeBuffer(feeGasBuffer);\n setSellAmount(valueToSet);\n setBuyAmount(\"\");\n debouncedAmountFunc(\n newWeiValueForQuote,\n \"EXACT_INPUT\"\n );\n } else {\n setTransferMaxLoading(false);\n }\n } catch (_e: any) {\n setExecuteError(_e?.message);\n setTransferMaxLoading(false);\n }\n }}\n >\n {transferMaxLoading && (\n <Loader2 className=\"!gw-size-3 gw-animate-spin\" />\n )}\n <span className=\"gw-typography-caption\">Max</span>\n </Button>\n {(!toCurrency || isFromTokenNative) && (\n <TooltipElement\n description={\n !toCurrency\n ? \"Select destination token to continue\"\n : \"This swap uses a native token, a small amount will be reserved to cover gas fees.\"\n }\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n />\n )}\n </>\n )}\n {displayNumberPrecision(\n parseFloat(\n formatUnits(BigInt(sellTokenBalance), fromCurrency?.decimals)\n ),\n Math.min(\n fromCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n )}{\" \"}\n {fromCurrency?.symbol}\n </div>\n ) : (\n <div className=\"gw-h-4 gw-w-1\" />\n )}\n </>\n </div>\n\n {/* Swap to and from tokens */}\n <Button\n className={cn(\n \"gw-absolute gw-z-[1] gw-bottom-0 gw-translate-y-1/2 gw-left-1/2 -gw-translate-x-1/2 gw-h-8 gw-w-8 gw-transition-transform gw-duration-300 gw-ease-in-out\",\n swapFromAndToTokensAnimation && \"gw-rotate-180\"\n )}\n variant={\"liquidGlass\"}\n size={\"icon\"}\n onClick={(e) => {\n e.stopPropagation();\n setSwapFromAndToTokensAnimation((v) => !v);\n switchTokensHandler();\n }}\n >\n <ArrowUpDown className=\"!gw-size-5 !gw-text-brand-gray-500\" />\n </Button>\n </div>\n\n {/* To Token */}\n <div\n className=\"gw-flex gw-flex-col gw-cursor-text gw-pt-4 gw-pb-4 gw-relative\"\n onClick={(e) => {\n const input = e.currentTarget.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n }}\n >\n <div className=\"gw-typography-caption gw-text-brand-gray-500\">Buy</div>\n\n {/*Buy Input */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-1 gw-mb-1.5\">\n <div\n className={`gw-w-full gw-text-center gw-flex gw-justify-between gw-items-center gw-typography-h3-nr gw-gap-1`}\n >\n <div className=\"gw-flex-1 gw-overflow-hidden\">\n <input\n type=\"text\"\n onKeyDown={(e) => {\n // allow backspace, left arrow, right arrow\n if (\n e.key === \"Backspace\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\"\n )\n return;\n\n // only allow digits and at most one decimal point\n if (!/[0-9.]$/.test(e.key)) e.preventDefault();\n if (buyAmount?.includes(\".\") && e.key.includes(\".\"))\n e.preventDefault();\n }}\n onWheelCapture={(e) => {\n e.currentTarget.blur();\n }}\n value={buyAmount}\n onChange={(e) =>\n setBuyAmount(() => {\n const value = formatInputNumber(\n e.target.value,\n Math.min(\n toCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n );\n\n // If value is reset, reset the other value as well\n if (e.target.value === \"\") {\n setSellAmount(\"\");\n }\n\n // If buy amount is manually changed - that means user want swap of type \"EXACT_OUTPUT\"\n debouncedAmountFunc(\n parseUnits(value, toCurrency?.decimals || 18),\n \"EXACT_OUTPUT\"\n );\n\n return value;\n })\n }\n placeholder=\"0\"\n className=\"gw-text-foreground gw-bg-transparent focus:gw-outline-none placeholder:gw-text-foreground gw-w-full disabled:gw-cursor-not-allowed\"\n />\n </div>\n\n {/* To Token selector */}\n {chainId && (\n <SwapChainAndTokenSelector\n selectedToken={toCurrency}\n onTokenSelect={(t) => {\n update({\n toCurrency: t\n });\n\n // If destination token is changed and user entered the destination amount manually, reset the sell amount and buy amount and amount.\n if (tradeType === \"EXACT_OUTPUT\") {\n setBuyAmount(\"\");\n\n // If the buy amount is not empty and the from currency is not undefined, set the amount to the sell amount and trade type to exact input for better user experience\n if (buyAmount && fromCurrency) {\n update({\n amount: parseUnits(\n sellAmount,\n fromCurrency?.decimals || 18\n ).toString(),\n tradeType: \"EXACT_INPUT\"\n });\n } else {\n update({\n amount: \"\"\n });\n }\n }\n\n // Buy token and sell token cannot be same - unset sell token if it is same\n if (\n fromCurrency &&\n fromCurrency.address === t.address &&\n fromCurrency.chainId === t.chainId\n ) {\n setSellAmount(\"\");\n setBuyAmount(\"\");\n update({\n amount: \"\",\n fromCurrency: undefined\n });\n }\n }}\n defaultChainId={fetchForAllNetworks ? undefined : chainId}\n />\n )}\n </div>\n </div>\n\n {/* Value in USD and tokens available */}\n <div className=\"gw-flex gw-justify-between gw-items-center gw-w-full gw-text-brand-gray-500\">\n {currencyOutUsd === undefined ? (\n <div className=\"gw-h-4 gw-w-1\" />\n ) : (\n <div className=\"gw-typography-caption\">\n {currencyOutUsd < 0.01\n ? \"<$0.01\"\n : `${formatCurrency(currencyOutUsd || \"0\", \"USD\")}`}\n </div>\n )}\n {\n <>\n {buyTokenBalanceLoading ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n <Skeleton className=\"gw-h-4 gw-w-10 gw-inline-block gw-ml-0.5\" />\n </div>\n ) : buyTokenBalance !== undefined && toCurrency?.decimals ? (\n <div className=\"gw-typography-caption gw-flex gw-items-center gw-mr-4\">\n {displayNumberPrecision(\n parseFloat(\n formatUnits(BigInt(buyTokenBalance), toCurrency?.decimals)\n ),\n Math.min(\n toCurrency?.decimals || MAX_DECIMALS_FOR_CRYPTO,\n MAX_DECIMALS_FOR_CRYPTO\n )\n )}{\" \"}\n {toCurrency?.symbol}\n </div>\n ) : (\n <div className=\"gw-h-4 gw-w-1\" />\n )}\n </>\n }\n </div>\n\n {/* Reserve height for the gas top up button */}\n <div className=\"gw-h-5 gw-mt-1 gw-flex gw-items-center\">\n {/* Only show if the current buy token is not the native token */}\n {!isToTokenNative && destinationChainNativeAddress ? (\n <WalletSwapTopUpGas\n destinationChainId={toCurrency?.chainId}\n topUpGas={topupGas}\n setTopUpGas={(v) => {\n update({\n topupGas: v\n });\n }}\n topUpDetails={quote?.details?.currencyGasTopup}\n quoteReady={!!quote}\n tokenAddress={destinationChainNativeAddress}\n />\n ) : null}\n </div>\n </div>\n\n {/* Tx data */}\n {quoteEnabled && (\n <div\n className={cn(\n \"gw-typography-body2 gw-mt-2 gw-w-full gw-rounded-xl gw-p-2\",\n \"gw-bg-brand-white/40 gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm\"\n )}\n >\n <div className=\"gw-flex gw-justify-between gw-items-center gw-space-x-1\">\n <span>Max Slippage</span>\n <span className=\"gw-text-brand-gray-500 gw-flex gw-items-center gw-gap-2\">\n <span className=\"gw-text-foreground gw-bg-muted gw-rounded-full gw-px-2 gw-py-0.5 gw-typography-caption\">\n Auto\n </span>\n <span>\n {/* If same chain, show origin slippage, else destination slippage */}\n {quote\n ? (fromCurrency?.chainId === toCurrency?.chainId\n ? quote?.details?.slippageTolerance?.origin?.percent\n : quote?.details?.slippageTolerance?.destination?.percent ||\n \"0\") + \"%\"\n : \"-\"}\n </span>\n </span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Transaction Time</span>\n <span className=\"gw-text-brand-gray-500\">\n {quote ? (quote?.details?.timeEstimate || \"<15\") + \"s\" : \"-\"}\n </span>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Fees {appFeesWaived ? \"\" : `(${RELAY_APP_FEE_BPS / 100}%)`}</span>\n <div className=\"gw-text-brand-gray-500\">\n {quote ? (\n appFeesWaived ? (\n \"0\"\n ) : appFees < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(appFees || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Network Fees</span>\n <div className=\"gw-text-brand-gray-500\">\n {quote ? (\n networkFees < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(networkFees || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n\n <div className=\"gw-flex gw-justify-between gw-items-center gw-mt-2 gw-space-x-1\">\n <span>Total</span>\n <div className=\"gw-text-foreground gw-font-medium\">\n {quote && currencyInUsd ? (\n currencyInUsd < 0.01 ? (\n \"<$0.01\"\n ) : (\n `${formatCurrency(currencyInUsd || \"0\", \"USD\")}`\n )\n ) : quoteLoading ? (\n <Skeleton className=\"gw-w-6 gw-h-3.5\" />\n ) : (\n \"-\"\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n }\n footer={\n <>\n <span\n className={cn(\n `gw-inline-flex gw-items-center gw-text-center gw-space-x-2 gw-mb-2 gw-typography-caption first-letter:gw-uppercase ${blockingError ? \"gw-text-destructive gw-bg-destructive-foreground/60\" : \"gw-text-brand-gray-500\"}`,\n blockingError\n ? \"gw-backdrop-blur-sm gw-border gw-border-brand-white/20 gw-shadow-liquidSm gw-px-1 gw-py-0.5 gw-rounded-full\"\n : \"\"\n )}\n >\n {(() => {\n if (blockingError) {\n const error = reformatSwapError(blockingError);\n if (error === SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS) {\n return (\n <div className=\"gw-flex gw-items-center gw-gap-1\">\n <span>{SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS}</span>\n <TooltipElement\n description={`You need to add some ${sourceChainNativeSymbol ?? \"gas\"} on the ${sourceChainName ?? \"source\"} chain to proceed with this transaction.`}\n stopPropagation\n side=\"bottom\"\n align=\"center\"\n triggerClassName=\"gw-text-destructive gw-size-4\"\n />\n {quoteGas ? (\n <AddGasToSourceChainButton\n sourceChainNativeSymbol={sourceChainNativeSymbol}\n sourceChainName={sourceChainName}\n addGasToSourceChain={addGasToSourceChain}\n />\n ) : null}\n </div>\n );\n }\n return error;\n }\n return null;\n })()}\n </span>\n <Button\n variant={\"tertiary\"}\n className=\"gw-w-full\"\n disabled={!!blockingError || !quote || !currencyInUsd || executePending}\n onClick={async () => {\n if (!quote || blockingError) return;\n\n try {\n const execResult = await executeSwap({\n qt: quote,\n onExecutionStart: (finalQuote) => {\n // Check if gas amount is enough according to the final quote generated by the backend\n const gasAmount = finalQuote?.fees?.gas?.amount;\n const hasEnoughGas = checkIfGasIsEnough(\n gasCurrencyAddress,\n fromCurrency,\n gasAmount || \"0\",\n sourceGasBalance,\n sellAmountInWeiToUse.toString()\n );\n\n if (!sourceGasBalanceLoading && !hasEnoughGas) {\n throw buildErrorPayloadWithCode(\n PRECHECK_FAILURE_CODE,\n SWAP_ERROR_MESSAGES.INSUFFICIENT_GAS\n );\n }\n\n // If everything goes well, set the transaction status to pending and show the wait view\n setTxStatus(\"PENDING\");\n setView(SwapView.WAIT);\n setIsTxApproved(false);\n }\n });\n setIsTxApproved(true);\n const requestId = execResult?.requestId;\n const txnId = execResult?.txnId ?? null;\n\n if (requestId && txnId) {\n setIntentRequestId(requestId);\n setSwapTxnId(txnId);\n } else {\n toast.error(SWAP_ERROR_MESSAGES.STATUS_CHECK_FAILED);\n }\n } catch (error) {\n if (\n typeof error === \"object\" &&\n (error as any)?.code === PRECHECK_FAILURE_CODE\n ) {\n console.error(\"Error executing swap - precheck:\", error);\n setExecuteError(\n (error as any)?.message || SWAP_ERROR_MESSAGES.PRECHECK_FAILURE\n );\n return;\n }\n console.error(\"Error executing swap:\", error);\n setExecuteError(getRPCErrorString(error));\n setTxStatus(\"FAILED\");\n setView(SwapView.END);\n }\n }}\n >\n {executePending\n ? \"Preparing transaction...\"\n : operation === \"wrap\"\n ? \"Wrap\"\n : operation === \"unwrap\"\n ? \"Unwrap\"\n : \"Swap\"}\n </Button>\n </>\n }\n mainFooter={false}\n footerCols={true}\n />\n )}\n\n {view === SwapView.WAIT && (\n <WalletTradePendingView\n statusError={swapError || undefined}\n onBack={onBack}\n txDetails={{ ...txDetails, estimatedTime: quote?.details?.timeEstimate }}\n sellAmount={Number(sellAmount)}\n buyAmount={Number(buyAmount)}\n isTxApproved={isTxApproved}\n />\n )}\n\n {view === SwapView.END &&\n (txStatus === \"SUCCESS\" ? (\n <WalletTradeSuccessView\n txDetails={txDetails}\n onEnd={() => onEnd()}\n onShowActivity={() => onShowActivity()}\n sellAmount={Number(sellAmount)}\n buyAmount={Number(buyAmount)}\n />\n ) : (\n <WalletTradeFailedView\n txDetails={txDetails}\n reason={blockingError ? reformatSwapError(blockingError) : null}\n onEnd={() => onEnd()}\n onShowActivity={() => onShowActivity()}\n />\n ))}\n </>\n );\n}\n","import { memo, useContext, useEffect, useState } from \"react\";\nimport { GlyphViewContext } from \"../../context/GlyphViewContext\";\nimport { INTERNAL_GRADIENT_TYPE, WalletMainViewTab, WalletView } from \"../../lib/constants\";\nimport { WalletFundView } from \"./WalletFundView\";\nimport { WalletMainView } from \"./WalletMainView\";\nimport { WalletProfileView } from \"./WalletProfileView\";\nimport { WalletReceiveView } from \"./WalletReceiveView\";\nimport { WalletSendFundView } from \"./WalletSendFundView\";\nimport { WalletTradeView } from \"./WalletTradeView\";\n\nexport const Wallet = memo(\n ({\n setGradientType\n }: {\n setGradientType: React.Dispatch<React.SetStateAction<INTERNAL_GRADIENT_TYPE | undefined>>;\n }) => {\n const viewCtx = useContext(GlyphViewContext);\n if (!viewCtx) throw new Error(\"GlyphWidgetWallet must be used within a GlyphViewProvider\");\n\n const { walletMainViewTab, setWalletMainViewTab, walletView, setWalletView } = viewCtx;\n\n const [expandFirstActivityRow, setExpandFirstActivityRow] = useState<boolean>(false);\n\n // reset `expandFirstActivityRow` only when Activity tab is closed\n useEffect(() => {\n if (walletView === WalletView.MAIN && walletMainViewTab === WalletMainViewTab.ACTIVITY) return;\n\n setExpandFirstActivityRow(false);\n }, [walletView, walletMainViewTab, setExpandFirstActivityRow]);\n\n return (\n <>\n {walletView === WalletView.MAIN && (\n <WalletMainView\n setGradientType={setGradientType}\n activeMainViewScreen={walletMainViewTab}\n setActiveMainViewScreen={setWalletMainViewTab}\n setWalletView={setWalletView}\n expandFirstActivityRow={expandFirstActivityRow}\n />\n )}\n\n {walletView === WalletView.RECEIVE && (\n <WalletReceiveView onBack={() => setWalletView(WalletView.MAIN)} />\n )}\n\n {walletView === WalletView.FUND && (\n <WalletFundView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n {walletView === WalletView.SEND && (\n <WalletSendFundView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n\n {walletView === WalletView.PROFILE && (\n <WalletProfileView onBack={() => setWalletView(WalletView.MAIN)} />\n )}\n\n {walletView === WalletView.SWAP && (\n <WalletTradeView\n onBack={() => setWalletView(WalletView.MAIN)}\n onEnd={() => setWalletView(WalletView.MAIN)}\n onShowActivity={() => {\n setWalletView(WalletView.MAIN);\n setWalletMainViewTab(WalletMainViewTab.ACTIVITY);\n setExpandFirstActivityRow(true);\n }}\n setGradientType={setGradientType}\n />\n )}\n </>\n );\n }\n);\n"],"names":["__iconNode","ArrowUpDown","createLucideIcon","ArrowUpRight","Check","Fuel","Plus","Send","TriangleAlert","X","USDIcon","LinkIcon","props","jsxs","jsx","limitDecimals","value","separator","maxDecimals","formattedValue","whole","decimal","formatInputNumber","NoTokenIcon","NativeTokenIcon","className","balances","useGlyph","chainId","useChainId","nativeBalance","balance","logoUrl","cn","dist","truncateRegex","truncateEthAddress","address","match","BackIcon","CopyIcon","isCopied","rest","CopyButton","text","textToCopy","textClassName","iconClassName","copied","setCopied","useState","copyToClipboard","CopyButton$1","memo","WalletViewHeader","fullScreenHeader","onProfileClick","isStickyHeader","user","headerRef","useRef","isStuck","setIsStuck","useEffect","headerElement","scrollContainer","contentArea","headerWrapper","initialHeaderOffset","checkStuck","isCurrentlyStuck","Fragment","UserAvatar","ChainSelector","WalletViewHeader$1","WalletViewTemplate","mainFooter","HelpIcon","TooltipElement","contentClassName","triggerClassName","description","children","side","align","defaultOpen","open","onOpenChange","stopPropagation","openInternal","setOpenInternal","Tooltip","TooltipTrigger","e","v","TooltipContent","FailureIcon","WalletFundFailedView","onEnd","onShowActivity","id","Button","WalletFundFailedView$1","CaretDownIcon","LoadingCircleIcon","WalletFundPendingView","onBack","nativeSymbol","WalletFundPendingView$1","SuccessIcon","WalletFundSuccessView","WalletFundSuccessView$1","MAX_DECIMALS","WalletFundView","setGradientType","userCurrency","fundAmount","fundMinAmount","fundMaxAmount","fundIntermediaryToken","fundDone","fundError","fundAmountError","fundQuote","fundStatus","quoteLoading","doFunding","setFundAmount","isOnrampEnabled","onramppDisabledError","fundSymbol","useGlyphFunding","view","setView","FundView","fetchingPaymentLink","setFetchingPaymentLink","handleBuy","error","toast","INTERNAL_GRADIENT_TYPE","validAmountEntered","input","currencyToSymbol","formatCurrency","Skeleton","Loader2","ActivityIcon","isActive","HomeIcon","TokensIcon","WalletsTabFilledIcon","WalletsTabOutlinedIcon","WalletViewFooterNav","tab","setTab","WalletMainViewTab","WalletViewFooterNav$1","TxSendIcon","TxSwapIcon","ActivityRow","data","chain","chainIdToRelayChain","CHAIN_NAMES","LinkWithIcon","url","buttonVariants","ActivityRowSkeleton","createCollection","name","PROVIDER_NAME","createCollectionContext","createCollectionScope","createContextScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","scope","ref","React","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","createSlot","CollectionSlot","forwardedRef","context","composedRefs","useComposedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","a","b","COLLAPSIBLE_NAME","createCollapsibleContext","createCollapsibleScope","CollapsibleProvider","useCollapsibleContext","Collapsible","__scopeCollapsible","openProp","disabled","collapsibleProps","setOpen","useControllableState","useId","prevOpen","Primitive","getState","TRIGGER_NAME","CollapsibleTrigger","triggerProps","composeEventHandlers","CONTENT_NAME","CollapsibleContent","forceMount","contentProps","Presence","present","CollapsibleContentImpl","isPresent","setIsPresent","heightRef","height","widthRef","width","isOpen","isMountAnimationPreventedRef","originalStylesRef","rAF","useLayoutEffect","node","rect","Root","Trigger","Content","DirectionContext","useDirection","localDir","globalDir","ACCORDION_NAME","ACCORDION_KEYS","Collection","createAccordionContext","useCollapsibleScope","Accordion","type","accordionProps","singleProps","multipleProps","AccordionImplMultiple","AccordionImplSingle","AccordionValueProvider","useAccordionValueContext","AccordionCollapsibleProvider","useAccordionCollapsibleContext","valueProp","defaultValue","onValueChange","collapsible","accordionSingleProps","setValue","AccordionImpl","accordionMultipleProps","handleItemOpen","itemValue","prevValue","handleItemClose","value2","AccordionImplProvider","useAccordionContext","__scopeAccordion","dir","orientation","accordionRef","getItems","isDirectionLTR","handleKeyDown","event","target","triggerCollection","item","triggerIndex","triggerCount","nextIndex","homeIndex","endIndex","moveNext","movePrev","clampedIndex","ITEM_NAME","AccordionItemProvider","useAccordionItemContext","AccordionItem","accordionItemProps","accordionContext","valueContext","collapsibleScope","triggerId","CollapsiblePrimitive.Root","open2","HEADER_NAME","AccordionHeader","headerProps","itemContext","AccordionTrigger","collapsibleContext","CollapsiblePrimitive.Trigger","AccordionContent","CollapsiblePrimitive.Content","Root2","Item","Header","Trigger2","Content2","AccordionPrimitive.Root","forwardRef","AccordionPrimitive.Item","AccordionPrimitive.Header","AccordionPrimitive.Trigger","AccordionPrimitive.Content","WalletActivityTab","expandFirst","fetchForAllNetworks","currentBlockExplorerUrl","transactionGroups","fetchTransactions","loadMore","hasMore","isLoading","isError","refreshKey","useActivity","observerTarget","sentinelRef","expandedItemId","setExpandedItemId","totalTransactions","count","group","fetchCurrent","handleScroll","useCallback","entries","entry","observer","currentTarget","sentinel","WidgetDataError","_","index","groupIndex","t","row","tx","PlusSign","QRIcon","WalletHomeTab","setWalletView","hasBalances","isBalancesError","refreshBalances","allBalances","tokens","formatTokenCount","WalletView","SendIcon","WalletLinkedAccountsTab","glyphUrl","profileUrl","wallet","ExpandItemIcon","LinkedNFTChip","NFTImgFail","NFTImg","alt","title","imgErr","setImgErr","WalletNFTsTab","nfts","nftsURL","idx","TokenAndChainIcon","token","tokenClassName","chainClassName","WalletTokensTab","useBalances","totalValue","TokenIcon","WalletTokenVSNftSwitcher","activeTab","setActiveTab","isAnimating","setIsAnimating","handleTabChange","WalletMainView","activeMainViewScreen","setActiveMainViewScreen","expandFirstActivityRow","profileGradient","EditIcon","WalletProfileView","logout","editUrl","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","__spreadValues","prop","__objRest","source","exclude","qrcodegen","qrcodegen2","_QrCode","version","errorCorrectionLevel","dataCodewords","msk","i","allCodewords","minPenalty","penalty","assert","ecl","segs","seg","minVersion","maxVersion","mask","boostEcl","dataUsedBits","dataCapacityBits2","usedBits","QrSegment","newEcl","bb","appendBits","dataCapacityBits","padByte","x","y","alignPatPos","numAlign","j","rem","bits","getBit","color","dy","dx","xx","yy","isDark","ver","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","blocks","rsDiv","k","dat","ecc","result","block","right","vert","invert","runColor","runX","runHistory","runY","dark","sum","total","step","pos","degree","root","divisor","factor","coef","z","n","core","currentRunColor","currentRunLength","val","len","cond","_QrSegment","mode","numChars","bitData","digits","temp","assignVal","ccbits","str","QrCode2","_Ecc","ordinal","formatBits","QrSegment2","_Mode","modeBits","numBitsCharCount","qrcodegen_default","ERROR_LEVEL_MAP","DEFAULT_SIZE","DEFAULT_LEVEL","DEFAULT_BGCOLOR","DEFAULT_FGCOLOR","DEFAULT_INCLUDEMARGIN","DEFAULT_MINVERSION","SPEC_MARGIN_SIZE","DEFAULT_MARGIN_SIZE","DEFAULT_IMG_SCALE","generatePath","modules","margin","ops","start","cell","excavateModules","excavation","getImageSettings","cells","size","imageSettings","numCells","defaultSize","scale","h","opacity","floorX","floorY","ceilW","ceilH","crossOrigin","getMarginSize","includeMargin","marginSize","useQRCode","level","boostLevel","qrcode","segments","accum","calculatedImageSettings","cells2","margin2","numCells2","calculatedImageSettings2","SUPPORTS_PATH2D","QRCodeCanvas","_a","bgColor","fgColor","_b","style","otherProps","imgSrc","_canvas","_image","setCanvasRef","isImgLoaded","setIsImageLoaded","canvas","ctx","cellsToDraw","image","haveImageToRender","pixelRatio","rdx","cdx","canvasStyle","img","QRCodeSVG","fgPath","Icon","BALANCE_REFRESH_INTERVAL_MS","WalletReceiveView","ready","interval","acc","amount","Dialog","DialogPrimitive.Root","DialogTrigger","DialogPrimitive.Trigger","DialogPortal","DialogPrimitive.Portal","DialogOverlay","DialogPrimitive.Overlay","DialogContent","container","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogTitle","DialogPrimitive.Title","DialogDescription","DialogPrimitive.Description","SendFundChainAndTokenSelector","onTokenSelect","selectedToken","switchChainAsync","useSwitchChain","setFetchForAllNetworks","currentChainId","selectedTokenChain","useMemo","currentChain","collisionRef","handleTokenSelect","ChevronDown","relayClient","tokenChain","isTokenSelected","zeroAddress","FuelIcon","SendFundChainAndTokenSelector$1","InputHelper","Input","label","supportingText","parentClassName","bodyClassName","leadingIcon","trailingIcon","placeholder","evt","WalletSendFundEnterAddressView","setRecipientAddress","setRecipientAddressError","recipientAddress","recipientAddressError","isAddress","ethereumAvatar","checksumAddress","SendView","WalletSendFundEnterAddressView$1","WalletSendFundFailedView","txHash","txBlockExplorerUrl","txBlockExplorerName","WalletSendFundFailedView$1","WalletSendFundPendingView","quote","tokenSymbol","WalletSendFundPendingView$1","WalletSendFundSuccessView","WalletSendFundSuccessView$2","SEND_STATUS_REFRESH_INTERNAL_MS","MAX_QUOTE_FETCH_RETRIES","QUOTE_BUSY_ERROR","MAX_BALANCE_ERROR","NO_TOKENS_ERROR","WalletSendFundView","sendTransaction","glyphApiFetch","useGlyphApi","chains","useChains","c","nativeToken","setToken","publicClient","httpUrls","createPublicClient","fallback","http","sendAmount","setSendAmount","debouncedSendAmount","setDebouncedSendAmount","transferMax","setTransferMax","setQuote","setQuoteLoading","quoteFetchFailuresRef","isSignaturePending","setIsSignaturePending","isPending","setIsPending","statusFetchCount","setStatusFetchCount","setError","maxValueError","setMaxValueError","setTxHash","setTxBlockExplorerUrl","setTxBlockExplorerName","txStatus","setTxStatus","logger","createLogger","registerFailure","err","fallbackMessage","fetchQuote","maxFeePerGas","maxPriorityFeePerGas","gasPrice","fees","gasUnits","valueToSend","parseEther","tokenToBigIntWei","erc20Abi","feePerGas","gasCost","valueToReturn","receivableAmountInToken","displayNumberPrecision","formatUnits","fetchSendStatus","res","debouncedFunc","debounce","selectedTokenBalanceFormatted","selectedTokenValueFormatted","newValue","MAX_DECIMALS_FOR_CRYPTO","valueToSet","receipt","hash_","txData","encodeFunctionData","SWAP_ERROR_MESSAGES","reformatSwapError","createDefaultPublicClient","relayChains","viemChains","configureViemChain","httpRpcUrl","extractChain","mainnet","useGlyphRelayEvmAdapter","config","signMessage","signTypedData","getChainId","stepItem","signData","signature","LogLevel","stepData","hexToBigInt","onReplaced","onCancelled","getPublicClient","replacement","PRECHECK_FAILURE_CODE","buildErrorPayloadWithCode","code","message","useRelayExecute","reportSwapFailed","useGlyphSwap","useConfig","evmAdapter","useMutation","qt","onExecutionStart","quoteChainId","SOLANA_RELAY_ID","parsedRes","txnId","finalQuote","timeoutId","resetTimeout","reject","resolve","resultStatus","resultError","useRelayIntentStatus","intentRequestId","onError","txDetails","setTxDetails","isBalancesLoading","latest","cancelled","controller","failures","wait","ms","finish","timer","readController","abortRead","timeout","resp","MAINNET_RELAY_API","status","relayTxDetails","SwapView","QUOTE_REFETCH_INTERVAL","GAS_BUFFER","checkIfGasIsEnough","gasCurrencyAddress","sourceToken","quoteGasAmountInWei","sourceGasBalanceInWei","sellAmount","useRelayQuote","enabled","swapState","fromCurrency","toCurrency","tradeType","topupGas","topupGasAmount","fromChain","isNativeFromCurrency","evmWallet","solanaWallet","amountIsValid","isQuotable","nativeAndWrappedPair","isNativeAndWrappedPair","operation","useQuery","assertHasValue","fromWallet","toWallet","body","useTokenBalance","tokenAddress","foundToken","fetchedValueInWei","response","MINIMUM_GAS_PRICE_WEI","EVM_DEFAULT_FEE_WEI","EVM_GAS_BUFFER_MULTIPLIER","SOLANA_FEE_BUFFER_MULTIPLIER","SOLANA_DEFAULT_FEE_LAMPORTS","ECLIPSE_FEE_BUFFER_MULTIPLIER","ECLIPSE_DEFAULT_FEE_WEI","feeBufferQueryClient","getFeeBufferQueryClient","QueryClient","calculateEvmNativeGasBuffer","gasLimit","defaultBuffer","feeData","legacyError","gasPriceToUse","calculateSvmNativeFeeBuffer","isEclipseChain","multiplier","fallbackBuffer","queryOptions","fetchRelayRequests","r","feeStr","f","max","current","getFeeBufferAmount","client","vmType","queryKey","useBalancesForChain","isCurrent","useGlyphReadScope","useQueryClient","query","TOKEN_REFRESH_INTERVAL_MS","signal","fetchScopedGlyphData","decodeGlyphBalances","shouldRetryGlyphData","attempt","queryTokenList","options","headers","useRelayTokenList","useRelayYourTokensList","chainIds","balancesError","nonZeroBalances","yourTokenList","isYourTokenListLoading","yourTokenListError","relaySupportedTokensBalances","relayToken","AddGasToSourceChainButton","sourceChainNativeSymbol","sourceChainName","addGasToSourceChain","SwapChainAndTokenSelector","defaultChainId","setCurrentChainId","relaySupportedTokensBalancesLength","isYourTokensLoading","searchTerm","setSearchTerm","debouncedSearchTerm","setDebouncedSearchTerm","isTermAnAddress","featuredTokens","tokenList","TokenTile","AlertTriangle","showDivider","tokenBalance","SwapChainAndTokenSelector$1","WalletSwapTopUpGas","destinationChainId","topUpGas","setTopUpGas","topUpDetails","quoteReady","topupValue","topupAmount","topupCurrency","PlusIcon","CheckIcon","WalletTradeFailedView","reason","WalletTradeFailedView$1","WalletTradePendingView","buyAmount","isTxApproved","statusError","toChain","isGlyphDashboard","WalletTradePendingView$1","WalletTradeSuccessView","WalletTradeView","setIntentRequestId","swapTxnId","setSwapTxnId","setIsTxApproved","update","executeSwap","executePending","quoteError","quoteEnabled","appFeesWaived","swapError","switchTokensHandler","prevFromCurrency","prevFromAmount","prevToCurrency","prevToAmount","setBuyAmount","setSellAmount","debouncedAmountFunc","newTradeType","setExecuteError","executeError","swapFromAndToTokensAnimation","setSwapFromAndToTokensAnimation","transferMaxLoading","setTransferMaxLoading","lastFeeBuffer","setLastFeeBuffer","quoteGasWithBuffer","newFeeBuffer","isNativeToken","maxSellAmount","sellTokenBalance","sellTokenBalanceLoading","sellTokenBalanceError","gasFee","buyTokenBalance","buyTokenBalanceLoading","buyTokenBalanceError","quoteGas","sourceGasBalance","sourceGasBalanceLoading","sourceGasBalanceError","sellAmountInWeiToUse","parseUnits","insufficientBalanceError","hasSourceGas","gasUnavailableError","blockingError","appFees","totalImpact","networkFees","currencyInUsd","currencyOutUsd","isFromTokenNative","sourceChain","nativeAddress","isToTokenNative","destinationChainNativeAddress","gasToAdd","feeGasBuffer","newWeiValueForQuote","_e","RELAY_APP_FEE_BPS","execResult","gasAmount","hasEnoughGas","requestId","getRPCErrorString","Wallet","viewCtx","useContext","GlyphViewContext","walletMainViewTab","setWalletMainViewTab","walletView","setExpandFirstActivityRow"],"mappings":";;;;;;;;;AASA,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,kBAAkB,KAAK,SAAQ,CAAE;AAAA,EAC/C,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,gBAAgB,KAAK,SAAQ,CAAE;AAAA,EAC7C,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAC1C,GACMC,KAAcC,GAAiB,iBAAiBF,EAAU;ACNhE,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAAA,EAC3C,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C,GACMG,KAAeD,GAAiB,kBAAkBF,EAAU;ACJlE,MAAMA,KAAa,CAAC,CAAC,QAAQ,EAAE,GAAG,mBAAmB,KAAK,SAAQ,CAAE,CAAC,GAC/DI,KAAQF,GAAiB,SAASF,EAAU;ACDlD,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AAAA,EACjE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,SAAQ,CAAE;AAAA,EAC/D,CAAC,QAAQ,EAAE,GAAG,6CAA6C,KAAK,SAAQ,CAAE;AAAA,EAC1E;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,GACMK,KAAOH,GAAiB,QAAQF,EAAU;ACZhD,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C,GACMM,KAAOJ,GAAiB,QAAQF,EAAU;ACJhD,MAAMA,KAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,8BAA8B,KAAK,SAAQ,CAAE;AAC7D,GACMO,KAAOL,GAAiB,QAAQF,EAAU;ACVhD,MAAMA,KAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C,GACMQ,KAAgBN,GAAiB,kBAAkBF,EAAU;ACXnE,MAAMA,KAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAAA,EAC3C,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C,GACMS,KAAIP,GAAiB,KAAKF,EAAU,GCb1CU,KAAe,IAAA,IAAA,sBAAA,YAAA,GAAA,EAAA;ACAR,SAASC,GAASC,GAAsC;AAC3D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAC,EAAC,KAAA,EAAE,UAAS,yBACR,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,UAAS;AAAA,UACT,UAAS;AAAA,UACT,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAET,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,UAAS;AAAA,UACT,UAAS;AAAA,UACT,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GACJ;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,mBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,WAAU,QAAO,WAAU,MAAK,SAAQ,WAAU,gCAA+B,GACjG,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACxBO,SAASC,GAAcC,GAAeC,GAAmBC,GAA6B;AACzF,MAAIC,IAAiBH;AAErB,MAAIG,EAAe,SAASF,CAAS,KAAK,CAACE,EAAe,SAASF,CAAS,GAAG;AAC3E,UAAM,CAACG,GAAOC,CAAO,IAAIF,EAAe,MAAMF,CAAS;AACvD,IAAII,EAAQ,SAASH,MACjBC,IAAiB,GAAGC,CAAK,GAAGH,CAAS,GAAGI,EAAQ,UAAU,GAAGH,CAAW,CAAC;AAAA,EAEjF;AAEA,SAAOC;AACX;AAEO,SAASG,GAAkBN,GAAeE,GAA6B;AAC1E,MAAIC,IAAiBH;AAGrB,SAAIG,EAAe,MAAM,SAAS,UAAoBA,EAAe,QAAQ,OAAO,GAAG,IACnFA,EAAe,MAAM,UAAU,UAAoBA,EAAe,QAAQ,OAAO,EAAE,IAGvFA,IAAiBJ,GAAcI,GAAgB,KAAKD,CAAW,GAC/DC,IAAiBJ,GAAcI,GAAgB,KAAKD,CAAW,GAExDC;AACX;ACzBA,SAAwBI,GAAYX,GAAsC;AACtE,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,OAAM,QAAO,OAAM,SAAQ,eAAc,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GACnG,UAAA;AAAA,IAAA,gBAAAE,EAAC,UAAA,EAAO,IAAG,QAAO,IAAG,QAAO,GAAE,QAAO,MAAK,UAAA,CAAU;AAAA,IACpD,gBAAAA,EAAC,OAAE,UAAS,0BAAyB,QAAO,8BACxC,UAAA,gBAAAA,EAAC,KAAA,EAAE,QAAO,8BACN,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA,GAEb,EAAA,CACJ;AAAA,sBACC,QAAA,EACG,UAAA;AAAA,MAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,IAAG;AAAA,UACH,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,2BAA0B;AAAA,UAE1B,UAAA;AAAA,YAAA,gBAAAC,EAAC,WAAA,EAAQ,cAAa,KAAI,QAAO,sBAAqB;AAAA,YACtD,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,IAAG;AAAA,gBACH,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAEX,gBAAAA,EAAC,YAAA,EAAS,IAAG,IAAA,CAAI;AAAA,YACjB,gBAAAA,EAAC,kBAAA,EAAe,cAAa,IAAA,CAAI;AAAA,YACjC,gBAAAA,EAAC,eAAA,EAAY,KAAI,aAAY,UAAS,OAAM;AAAA,YAC5C,gBAAAA,EAAC,iBAAA,EAAc,MAAK,UAAS,QAAO,8CAA6C;AAAA,8BAChF,WAAA,EAAQ,MAAK,UAAS,KAAI,sBAAqB,QAAO,iCAAgC;AAAA,YACvF,gBAAAA,EAAC,aAAQ,MAAK,UAAS,IAAG,iBAAgB,KAAI,iCAAgC,QAAO,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjG,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,IAAG;AAAA,UACH,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,2BAA0B;AAAA,UAE1B,UAAA;AAAA,YAAA,gBAAAC,EAAC,WAAA,EAAQ,cAAa,KAAI,QAAO,sBAAqB;AAAA,YACtD,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,IAAG;AAAA,gBACH,MAAK;AAAA,gBACL,QAAO;AAAA,gBACP,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAEX,gBAAAA,EAAC,YAAA,EAAS,IAAG,IAAA,CAAI;AAAA,YACjB,gBAAAA,EAAC,kBAAA,EAAe,cAAa,IAAA,CAAI;AAAA,YACjC,gBAAAA,EAAC,eAAA,EAAY,KAAI,aAAY,UAAS,OAAM;AAAA,YAC5C,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEV,WAAA,EAAQ,MAAK,UAAS,KAAI,sBAAqB,QAAO,iCAAgC;AAAA,YACvF,gBAAAA,EAAC,aAAQ,MAAK,UAAS,IAAG,iBAAgB,KAAI,iCAAgC,QAAO,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjG,gBAAAA,EAAC,YAAA,EAAS,IAAG,oBACT,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,QAAO;AAAA,UACP,MAAK;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA,EACd,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACpEA,SAAwBU,GAAgB,EAAE,WAAAC,KAAqC;AAC3E,QAAM,EAAE,UAAAC,EAAA,IAAaC,EAAA,GACfC,IAAUC,GAAA,GAEVC,IAAgBJ,GAAU,QAAQ,OAAO,CAACK,MAAYA,EAAQ,UAAUA,GAAS,YAAYH,CAAO,GACpGI,IAAUF,GAAe;AAE/B,SAAOE,IACH,gBAAAlB;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAKkB;AAAA,MACL,KAAKF,GAAe;AAAA,MACpB,WAAWG,EAAG,6CAA6CR,CAAS;AAAA,IAAA;AAAA,EAAA,IAGxE,gBAAAX,EAACS,IAAA,EAAY,WAAWU,EAAG,aAAaR,CAAS,GAAG;AAE5D;;;;;;;UCpBA,OAAO,eAAeS,IAAS,cAAc,EAAE,OAAO,IAAM;AAE5D,MAAIC,IAAgB,oDAMhBC,IAAqB,SAAUC,GAAS;AACxC,QAAIC,IAAQD,EAAQ,MAAMF,CAAa;AACvC,WAAKG,IAEEA,EAAM,CAAC,IAAI,MAAWA,EAAM,CAAC,IADzBD;AAAA,EAEf;AACA,SAAAH,GAAA,UAAkBE;;;;ACflB,SAASG,GAAS3B,GAAsC;AACpD,SACI,gBAAAE,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAC/F,UAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,iEAAgE,MAAK,gBAAe,EAAA,CAChG;AAER;ACFA,SAAS0B,GAAS5B,GAAc;AAC5B,QAAM,EAAE,UAAA6B,GAAU,GAAGC,EAAA,IAAS9B;AAC9B,SAAQ6B,IAgBJ,gBAAA3B,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAG4B,GACxE,UAAA,gBAAA5B;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA,GAEb,IApBA,gBAAAD,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAG6B,GACxE,UAAA;AAAA,IAAA,gBAAA5B;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,EAAA,CACJ;AASR;ACjBA,MAAM6B,KAAa,CAAC,EAAE,MAAAC,GAAM,YAAAC,GAAY,WAAApB,GAAW,eAAAqB,GAAe,eAAAC,QAAqC;AACnG,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAkB,EAAK;AAEnD,SACI,gBAAArC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,SAAS,MAAM;AACX,cAAMmC,IAASG,GAAgBN,KAAcD,CAAI;AACjD,QAAAK,EAAUD,CAAM,GAEhB,WAAW,MAAM;AACb,UAAAC,EAAU,EAAK;AAAA,QACnB,GAAG,GAAI;AAAA,MACX;AAAA,MACA,WAAWhB,EAAG,iFAAiFR,CAAS;AAAA,MAExG,UAAA;AAAA,QAAA,gBAAAX,EAAC,QAAA,EAAK,WAAWgC,GAAgB,UAAAF,GAAK;AAAA,QACtC,gBAAA9B,EAAC,QAAA,EACG,UAAA,gBAAAA,EAAC0B,IAAA,EAAS,UAAUQ,GAAQ,WAAWf,EAAG,+BAA+Bc,CAAa,EAAA,CAAG,EAAA,CAC7F;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ,GAEAK,KAAeC,GAAKV,EAAU,GCfxBW,KAAmB,CAAC,EAAE,kBAAAC,GAAkB,gBAAAC,GAAgB,gBAAAC,QAA4C;AACtG,QAAM,EAAE,MAAAC,EAAA,IAAS/B,EAAA,GAEXgC,IAAYC,GAAuB,IAAI,GACvC,CAACC,GAASC,CAAU,IAAIZ,EAAS,EAAK;AAG5C,SAAAa,EAAU,MAAM;AAGZ,QAFI,CAACN,KAED,CAACF,GAAkB,MAAO;AAE9B,UAAMS,IAAgBL,EAAU;AAChC,QAAI,CAACK,EAAe;AAGpB,UAAMC,IAAkBD,EAAc,QAAQ,iBAAiB,GACzDE,IAAcD,GAAiB,cAAc,oBAAoB;AACvE,QAAI,CAACA,KAAmB,CAACC,EAAa;AAGtC,UAAMC,IAAgBH,EAAc,QAAQ,mBAAmB,GACzDI,IAAsBD,IAAgBA,EAAc,YAAY,GAEhEE,IAAa,MAAM;AAIrB,YAAMC,IAHYL,EAAgB,YAGGG;AACrC,MAAAN,EAAWQ,CAAgB;AAAA,IAC/B;AAGA,WAAAD,EAAA,GAGAJ,EAAgB,iBAAiB,UAAUI,GAAY,EAAE,SAAS,IAAM,GAEjE,MAAM;AACT,MAAAJ,EAAgB,oBAAoB,UAAUI,CAAU;AAAA,IAC5D;AAAA,EACJ,GAAG,CAACd,GAAkB,OAAOE,CAAc,CAAC,GAErCF,KAAoBA,GAAkB,QACzC,gBAAAzC,EAAAyD,GAAA,EACI,4BAAC,OAAA,EAAI,KAAKZ,GAAW,WAAU,qEAC3B,UAAA;AAAA,IAAA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,cACV,UAAAyC,GAAkB,cACf,gBAAAzC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB,EAAG,6CAA6C;AAAA,QAC3D,SAASsB,GAAkB;AAAA,QAE3B,UAAA,gBAAAzC;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWmB;AAAA,cACP;AAAA,cACA4B,IACM,6HACA;AAAA,YAAA;AAAA,YAGV,UAAA,gBAAA/C;AAAA,cAACyB;AAAA,cAAA;AAAA,gBACG,WAAWN,EAAG,qBAAqB4B,IAAU,kBAAkB,eAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UAClF;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA,IAEJ,KAAA,CACR;AAAA,IACA,gBAAA/C;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,UACA4B,IACM,iJACA;AAAA,QAAA;AAAA,QAGT,UAAAN,EAAiB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEtB,gBAAAzC,EAAC,OAAA,EAAI,WAAU,cACV,aAAkB,eACf,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB,EAAG,6CAA6C;AAAA,QAC3D,SAASsB,GAAkB;AAAA,QAE3B,UAAA,gBAAAzC;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWmB;AAAA,cACP;AAAA,cACA4B,IACM,6HACA;AAAA,YAAA;AAAA,YAGV,UAAA,gBAAA/C,EAACL,MAAE,WAAWwB,EAAG,qBAAqB4B,IAAU,kBAAkB,eAAe,EAAA,CAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACxF;AAAA,IAAA,IAEJ,KAAA,CACR;AAAA,EAAA,EAAA,CACJ,GACJ,IAEA,gBAAA/C,EAAAyD,GAAA,EACI,UAAA,gBAAA1D,EAAC,OAAA,EAAI,WAAU,qEACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2DACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,UAAA,EAAO,SAAS0C,GAAgB,UAAU,CAACE,GAAM,YAC9C,UAAA,gBAAA5C,EAAC0D,IAAA,EAAW,WAAU,aAAA,CAAa,GACvC;AAAA,MAEA,gBAAA3D,EAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAA,EAAO,SAAS0C,GAAgB,UAAU,CAACE,GAAM,YAC9C,UAAA,gBAAA5C,EAAC,OAAA,EAAI,WAAU,kDAAkD,UAAA4C,GAAM,MAAK,GAChF;AAAA,0BACC,OAAA,EACG,UAAA,gBAAA5C;AAAA,UAAC6B;AAAAA,UAAA;AAAA,YACG,eAAc;AAAA,YACd,MAAMP,GAAmBsB,EAAM,SAAS;AAAA,YACxC,YAAYA,EAAM;AAAA,UAAA;AAAA,QAAA,EACtB,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,sBAGCe,IAAA,CAAA,CAAc;AAAA,EAAA,EAAA,CACnB,EAAA,CACJ;AAER,GAEAC,KAAerB,GAAKC,EAAgB;ACnI7B,SAASqB,GAAmB,EAAE,YAAAC,IAAa,IAAM,gBAAAnB,GAAgB,GAAG7C,KAA4B;AACnG,SACI,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWoB,EAAG,kBAAkB,oBAAoB;AAAA,MACpD,OAAO;AAAA,QACH,iBAAiB;AAAA,MAAA;AAAA,MAIpB,UAAA;AAAA,QAAArB,EAAM,UACH,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWmB;AAAA,cACP;AAAA,cACAwB,IAAiB,+BAA+B;AAAA,cAChD7C,EAAM;AAAA,YAAA;AAAA,YAGT,UAAAA,EAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAKf,gBAAAE,EAAC,OAAA,EAAI,WAAU,qBAAqB,YAAM,SAAQ;AAAA,QAGjDF,EAAM,UACH,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWmB;AAAA,cACP,GAAG2C,IAAa,8LAAwM,kBAAkB,IAAIhE,EAAM,aAAa,+CAA+C,4BAA4B;AAAA,cAC5UA,EAAM;AAAA,YAAA;AAAA,YAGT,UAAAA,EAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA;AAIhB;ACrDO,SAASiE,GAASjE,GAAsC;AAC3D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAE,EAAC,KAAA,EAAE,UAAS,wBACR,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA,GAEb;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,kBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,WAAU,gCAA+B,GACvF,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACXA,SAASgE,GAAe;AAAA,EACpB,kBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACJ,GAYiB;AACb,QAAM,CAACC,GAAcC,CAAe,IAAIxC,EAAkB,EAAK;AAC/D,SACI,gBAAArC;AAAA,IAAC8E;AAAA,IAAA;AAAA,MACG,aAAAN;AAAA,MACA,eAAe;AAAA,MACf,cAAcE,MAAiB,SAAYG,IAAkBH;AAAA,MAC7D,MAAMD,MAAS,SAAYG,IAAeH,MAAS,OAAO,SAAYA;AAAA,MAEtE,UAAA;AAAA,QAAA,gBAAAxE;AAAA,UAAC8E;AAAA,UAAA;AAAA,YACG,SAAO;AAAA,YACP,SAAS,CAACC,MAAM;AACZ,cAAIL,KACAK,EAAE,gBAAA,GAEFP,MAAS,UAAa,CAACC,KACvBG,EAAgB,CAACI,MAAM,CAACA,CAAC;AAAA,YAEjC;AAAA,YAEC,UAAAZ,KACG,gBAAApE,EAAC,OAAA,EACG,UAAA,gBAAAA,EAAC+D,IAAA,EAAS,WAAW5C,EAAG,oCAAoC+C,CAAgB,EAAA,CAAG,EAAA,CACnF;AAAA,UAAA;AAAA,QAAA;AAAA,QAGR,gBAAAlE,EAACiF,IAAA,EAAe,OAAAX,GAAc,WAAWnD,EAAG,eAAe8C,CAAgB,GAAG,MAAAI,GAC1E,UAAA,gBAAArE,EAAC,OAAA,EAAK,UAAAmE,EAAA,CAAY,EAAA,CACtB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;AC7DO,SAASe,GAAYpF,GAAsC;AAC9D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,OAAM,QAAO,OAAM,SAAQ,eAAc,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GACnG,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAA,EAAC,YAAO,IAAG,WAAU,IAAG,WAAU,GAAE,WAAU,MAAK,+BAAA,CAA+B;AAAA,IAClF,gBAAAA,EAAC,UAAK,GAAE,oCAAmC,QAAO,WAAU,aAAY,KAAI,eAAc,QAAA,CAAQ;AAAA,IAClG,gBAAAA,EAAC,UAAK,GAAE,oCAAmC,QAAO,WAAU,aAAY,KAAI,eAAc,QAAA,CAAQ;AAAA,sBACjG,QAAA,EACG,UAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,eAAc;AAAA,QAEd,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,UAAA,CAAU;AAAA,UAC1B,gBAAAA,EAAC,QAAA,EAAK,QAAO,KAAI,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EACzC,CACJ;AAAA,EAAA,GACJ;AAER;AChBA,MAAMmF,KAA4D,CAAC,EAAE,OAAAC,GAAO,gBAAAC,GAAgB,IAAAC,QAEpF,gBAAAtF;AAAA,EAAC6D;AAAA,EAAA;AAAA,IACG,gBAAgB;AAAA,IAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAASoF;AAAA,UAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA,GAEjC,EAAA,CACJ;AAAA,wBAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,QAAA,gBAAAC,EAACkF,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,QACpC,gBAAAnF,EAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA;AAAA,UAAA;AAAA,4BAExD,MAAA,EAAG;AAAA,UAAE;AAAA,QAAA,GAEV;AAAA,QACA,gBAAAC,EAAC,QAAA,EAAK,WAAU,mEACX,UAAA;AAAA,oBACL;AAAA,QAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,0GACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,UACtB,gBAAAA;AAAA,YAAC6B;AAAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,YAAYyD;AAAA,cACZ,MAAMA,EAAG,MAAM,GAAG,EAAE,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QAC5B,GACJ;AAAA,QAEA,gBAAAtF,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,gBAAA,CAE1E;AAAA,MAAA,EAAA,CACJ,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA;AAAA,GAMhBG,KAAejD,GAAK4C,EAAoB;AC9DjC,SAASM,EAAc3F,GAAsC;AAChE,SACI,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,SAAQ,YAAW,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAClF,UAAA,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,UAAS;AAAA,MACT,UAAS;AAAA,MACT,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA,GAEb;AAER;ACXA,SAAS0F,GAAkB5F,GAAsC;AAC7D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,OAAM,QAAO,OAAM,SAAQ,eAAc,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GACnG,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,sBAER,QAAA,EACG,UAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,eAAc;AAAA,QAEd,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,UAAA,CAAU;AAAA,4BACzB,QAAA,EAAK,QAAO,KAAI,WAAU,WAAU,aAAY,IAAA,CAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EACzD,CACJ;AAAA,EAAA,GACJ;AAER;ACJA,MAAM2F,KAA8D,CAAC,EAAE,QAAAC,GAAQ,IAAAN,GAAI,OAAApF,QAAY;AAC3F,QAAM,EAAE,MAAA0C,GAAM,cAAAiD,EAAA,IAAiBhF,EAAA;AAE/B,SACI,gBAAAb;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAc;AAAA,MACd,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,gBAAc;AAAA,UACd,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,cAAcoD;AAAA,UAAA;AAAA,QAClB;AAAA,MAAA;AAAA,MAGR,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,QAAG,UAAA,sBAAA,CAAmB;AAAA,QACvB,gBAAAD,EAAC,OAAA,EAAI,WAAU,4EACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,UAAA,uBAAA,CAAoB;AAAA,UAC1B,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,WAAA,CAAQ;AAAA,QAAA,GACrD;AAAA,0BAEC,OAAA,EAAI,WAAU,qDACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6IACX,UAAA;AAAA,UAAA,gBAAAC,EAAC0F,IAAA,EAAkB,WAAU,2DAAA,CAA2D;AAAA,UAExF,gBAAA3F,EAAC,OAAA,EAAI,WAAU,kEACX,UAAA;AAAA,YAAA,gBAAAC,EAACU,IAAA,EAAgB,WAAU,YAAA,CAAY;AAAA,YAEvC,gBAAAX,EAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,UAAM,UAAAE,EAAA,CAAM;AAAA,cAAO;AAAA,cAAC,gBAAAF,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA6F,EAAA,CAAa;AAAA,YAAA,EAAA,CAChF;AAAA,UAAA,GACJ;AAAA,UAEA,gBAAA9F,EAAC,OAAA,EAAI,WAAU,4GACX,UAAA;AAAA,YAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,0BAAA,CAA0B;AAAA,YACnD,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,YAChE,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,UAAA,GACpE;AAAA,UAEA,gBAAA1F,EAAC,OAAA,EAAI,WAAU,gFACX,UAAA;AAAA,YAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,YAAA,CAAY;AAAA,YAElC,gBAAA3D,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,IAAI,UAAA4C,GAAM,MAAK;AAAA,gCAC7B,OAAA,EAAI,WAAU,0BAA0B,UAAAtB,GAAmBsB,EAAM,SAAS,EAAA,CAAE;AAAA,YAAA,EAAA,CACjF;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,MAEJ,QACI,gBAAA7C,EAAA0D,GAAA,EACI,UAAA;AAAA,QAAA,gBAAA1D,EAAC,QAAA,EAAK,WAAU,4FACZ,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,UACtB,gBAAAA,EAAC6B,IAAA,EAAW,YAAYyD,GAAI,MAAMA,EAAG,MAAM,GAAG,EAAE,IAAI,MAAA,CAAO;AAAA,QAAA,GAC/D;AAAA,QACA,gBAAAtF,EAACuF,KAAO,SAAQ,YAAW,WAAU,qBAAoB,SAASK,GAAQ,UAAA,eAAA,CAE1E;AAAA,MAAA,GACJ;AAAA,MAEJ,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAAA,EAAA;AAGxB,GAEAE,KAAevD,GAAKoD,EAAqB;ACxFlC,SAASI,GAAYjG,GAAsC;AAC9D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,OAAM,QAAO,OAAM,SAAQ,eAAc,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GACnG,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAA,EAAC,YAAO,IAAG,WAAU,IAAG,WAAU,GAAE,WAAU,MAAK,+BAAA,CAA+B;AAAA,IAClF,gBAAAA,EAAC,YAAO,IAAG,WAAU,IAAG,WAAU,GAAE,WAAU,MAAK,+BAAA,CAA+B;AAAA,IAClF,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,MAAA;AAAA,IAAA;AAAA,sBAElB,QAAA,EACG,UAAA;AAAA,MAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,eAAc;AAAA,UAEd,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,UAAA,CAAU;AAAA,YAC1B,gBAAAA,EAAC,QAAA,EAAK,QAAO,KAAI,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEzC,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,eAAc;AAAA,UAEd,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,UAAA,CAAU;AAAA,YAC1B,gBAAAA,EAAC,QAAA,EAAK,QAAO,KAAI,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACzC,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;AC5BA,MAAMgG,KAA8D,CAAC,EAAE,OAAAZ,GAAO,gBAAAC,GAAgB,OAAAnF,QAAY;AACtG,QAAM,EAAE,MAAA0C,GAAM,cAAAiD,EAAA,IAAiBhF,EAAA;AAE/B,SACI,gBAAAb;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAU;AAAA,YACV,SAASoF;AAAA,YAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA,GAEjC,EAAA,CACJ;AAAA,0BAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,UAAA,gBAAAC,EAAC+F,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,UACpC,gBAAA/F,EAAC,QAAA,EAAK,WAAU,+BAA8B,UAAA,WAAO;AAAA,UACrD,gBAAAA,EAAC,QAAA,EAAK,WAAU,mEACX,UAAA;AAAA,uBACL;AAAA,UAEA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWoB;AAAA,gBACP;AAAA,gBACA;AAAA;AAAA,cAAA;AAAA,cAGJ,UAAA;AAAA,gBAAA,gBAAAnB,EAACU,IAAA,EAAgB,WAAU,6BAAA,CAA6B;AAAA,gBACxD,gBAAAV,EAAC,OAAA,EAAI,WAAU,uBACX,4BAAC,QAAA,EACI,UAAA;AAAA,kBAAAE;AAAA,kBAAM;AAAA,kBAAE2F;AAAA,gBAAA,EAAA,CACb,EAAA,CACJ;AAAA,gBACA,gBAAA9F,EAAC,OAAA,EAAI,WAAU,uFACX,UAAA;AAAA,kBAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,qCAAA,CAAqC;AAAA,kBAC9D,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,gCAAA,CAAgC;AAAA,gBAAA,GAC7D;AAAA,gBACA,gBAAAzF,EAAC0D,IAAA,EAAW,WAAU,6BAAA,CAA6B;AAAA,kCAClD,QAAA,EAAK,WAAU,oCACX,UAAApC,GAAmBsB,EAAM,SAAS,EAAA,CACvC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,gBAAA5C,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,mBAAA,CAE1E;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB,GAEAY,KAAe1D,GAAKyD,EAAqB,GCnDnCE,KAAe;AAEd,SAASC,GAAe,EAAE,QAAAP,GAAQ,OAAAR,GAAO,gBAAAC,GAAgB,iBAAAe,KAAoC;AAGhG,QAAM;AAAA,IACF,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,IACAC,GAAA,GAEE,CAACC,GAAMC,CAAO,IAAInF,EAAmBoF,GAAS,GAAG,GAEjD,CAACC,GAAqBC,CAAsB,IAAItF,EAAkB,EAAK,GAEvEuF,IAAY,YAAY;AAC1B,IAAKT,MACLQ,EAAuB,EAAI,GAC3BV;AAAA,MACI,MAAM;AACF,QAAAO,EAAQC,GAAS,IAAI,GACrBE,EAAuB,EAAK;AAAA,MAChC;AAAA,MACA,CAACE,MAAkB;AACf,QAAAC,GAAM,MAAMD,CAAK,GACjBF,EAAuB,EAAK;AAAA,MAChC;AAAA,IAAA;AAAA,EAER;AAEA,EAAAzE,EAAU,MAAM;AACZ,IAAIyD,KAAUa,EAAQC,GAAS,GAAG;AAAA,EACtC,GAAG,CAACd,CAAQ,CAAC,GAGbzD,EAAU,OACFqE,MAASE,GAAS,OAAOV,MAAe,aAAWV,EAAgB0B,GAAuB,OAAO,GACjGR,MAASE,GAAS,OAAOV,MAAe,YAAUV,EAAgB0B,GAAuB,KAAK,GAE3F,MAAM;AACT,IAAA1B,EAAgB,MAAS;AAAA,EAC7B,IACD,CAACA,GAAiBU,GAAYQ,CAAI,CAAC;AAEtC,QAAMS,IAAqBzB,KAAc,CAACM;AAE1C,SACI,gBAAA7G,EAAA0D,GAAA,EACK,UAAA;AAAA,IAAA6D,MAASE,GAAS,OACf,gBAAAxH;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACG,gBAAc;AAAA,QACd,QACI,gBAAA7D;AAAA,UAACwC;AAAAA,UAAA;AAAA,YACG,gBAAc;AAAA,YACd,kBAAkB;AAAA,cACd,OAAO;AAAA,cACP,aAAaoD;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,QAGR,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,SAAS,CAACgF,MAAM;AACZ,sBAAMiD,IAAQjD,EAAE,cAAc,cAAc,OAAO;AACnD,gBAAIiD,KACAA,EAAM,MAAA;AAAA,cAEd;AAAA,cAEA,UAAA;AAAA,gBAAA,gBAAAhI,EAAC,OAAA,EAAI,WAAU,8CACV,UAAA+H,IAAqB,QAAQ,gBAClC;AAAA,gBACA,gBAAA/H,EAAC,OAAA,EAAI,WAAU,sDACX,UAAA,gBAAAD;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,WAAW;AAAA,oBAEX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,QAAA,EAAM,UAAAiI,GAAiB5B,CAAY,EAAA,CAAE;AAAA,sBACtC,gBAAArG,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACG,MAAK;AAAA,0BACL,KAAKuG,KAAiB;AAAA,0BACtB,KAAKC,KAAiB;AAAA,0BACtB,WAAW,CAACzB,MAAM;AAEd,4BACIA,EAAE,QAAQ,eACVA,EAAE,QAAQ,eACVA,EAAE,QAAQ,iBAKT,UAAU,KAAKA,EAAE,GAAG,OAAK,eAAA,GAC1BuB,GAAY,SAAS,GAAG,KAAKvB,EAAE,IAAI,SAAS,GAAG,KAC/CA,EAAE,eAAA;AAAA,0BACV;AAAA,0BACA,UAAU0C,KAAwB,CAACP,KAAmB;AAAA,0BACtD,gBAAgB,CAACnC,MAAM;AACnB,4BAAAA,EAAE,cAAc,KAAA;AAAA,0BACpB;AAAA,0BACA,OAAOuB;AAAA,0BACP,UAAU,CAACvB,MACPkC,EAAc,CAACjC,MAAc;AACzB,gCAAI9E,IAAQM,GAAkBuE,EAAE,OAAO,OAAOmB,EAAY;AAC1D,mCACInB,EAAE,OAAO,OACT,WAAW7E,CAAK,IAAI,WAAW6E,EAAE,OAAO,GAAG,MAE3C7E,IAAQ8E,IAEL9E;AAAA,0BACX,CAAC;AAAA,0BAEL,aAAY;AAAA,0BACZ,WAAU;AAAA,wBAAA;AAAA,sBAAA,GAElB;AAAA,sBAECmG,MAAiB,QACd,gBAAArG,EAAC,OAAA,EAAI,KAAKJ,IAAS,KAAI,QAAO,WAAU,8BAA6B,IAErE,gBAAAI,EAAC,OAAA,EAAI,WAAU,4IACV,UAAAqG,EAAA,CACL;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA,GAGZ;AAAA,gBAEA,gBAAAtG,EAAC,OAAA,EAAI,WAAU,yBACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,SAAI,WAAU,iDACV,UAAA4G,KACIM,KACG,GAAGgB,EAAe3B,KAAiB,GAAGF,CAAY,CAAC,UAAU6B,EAAe1B,KAAiB,QAAQH,CAAY,CAAC,QAC9H;AAAA,kBAEC,CAAC0B,MACGb,IACG,gBAAAnH,EAAC,OAAA,EAAI,WAAU,yFACX,UAAA;AAAA,oBAAA,gBAAAA,EAAC,QAAA,EAAK,UAAA;AAAA,sBAAA;AAAA,sBAAkBqH;AAAA,oBAAA,GAAW;AAAA,sCAClC1G,IAAA,CAAA,CAAgB;AAAA,kBAAA,EAAA,CACrB,IAEA,gBAAAX;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,WAAU;AAAA,sBACV,OAAO;AAAA,wBACH,aAAa;AAAA,wBACb,iBAAiB;AAAA,sBAAA;AAAA,sBAExB,UAAA;AAAA,wBAAA;AAAA,wBAC+C;AAAA,wBAC5C,gBAAAC,EAAC,KAAA,EAAE,WAAU,0BAAyB,UAAA,YAAQ;AAAA,wBAAI;AAAA,wBACG;AAAA,wBACrD,gBAAAA,EAAC,KAAA,EAAE,WAAU,0BAAyB,UAAA,YAAQ;AAAA,wBAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACtD,EAAA,CAEZ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGH+H,uBACI,OAAA,EACG,UAAA;AAAA,YAAA,gBAAAhI,EAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,WAAO;AAAA,cACnE,gBAAAD,EAAC,OAAA,EAAI,WAAU,sDACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uBACV,UAAA+G,IACG,gBAAA/G,EAACmI,KAAS,WAAU,kBAAA,CAAkB,IAEtCtB,GAAW,kBAAA,CAEnB;AAAA,gBAEA,gBAAA7G,EAACU,IAAA,EAAgB,WAAU,6BAAA,CAA6B;AAAA,cAAA,GAC5D;AAAA,cACA,gBAAAX,EAAC,OAAA,EAAI,WAAU,4HACX,UAAA;AAAA,gBAAA,gBAAAA,EAAC,QAAA,EAAK,UAAA;AAAA,kBAAA;AAAA,kBAAGqH;AAAA,kBAAW;AAAA,gBAAA,GAAG;AAAA,gBACtBL,IACG,gBAAA/G,EAACmI,GAAA,EAAS,WAAU,gCAAA,CAAgC;AAAA;AAAA,kBAGpD,GAAGD,EAAerB,GAAW,iBAAiBA,GAAW,QAAQ,CAAC;AAAA;AAAA,cAAA,EAAA,CAE1E;AAAA,YAAA,GACJ;AAAA,YAEA,gBAAA9G,EAAC,OAAA,EAAI,WAAU,kEACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,8BAA0B;AAAA,cAClE,gBAAAA;AAAA,gBAACgE;AAAA,gBAAA;AAAA,kBACG,iBAAe;AAAA,kBACf,aACI,gBAAAjE,EAAC,OAAA,EAAI,WAAU,sBACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,oDAAmD,UAAA,8BAElE;AAAA,oBACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,wDAAuD,UAAA,gGAGpE;AAAA,oBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,sBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,wBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,4JAA2J,UAAA,KAE1K;AAAA,wBACA,gBAAAD,EAAC,KAAA,EAAE,WAAU,yBACT,UAAA;AAAA,0BAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA;AAAA,4BAAA;AAAA,4BACxB0G;AAAA,4BAAsB;AAAA,0BAAA,GAC/B;AAAA,0BAAQ;AAAA,0BAAI;AAAA,0BACNJ;AAAA,0BAAa;AAAA,0BAAiB;AAAA,0BACnCI;AAAA,wBAAA,EAAA,CACL;AAAA,sBAAA,GACJ;AAAA,sBACA,gBAAA1G,EAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,wBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,4JAA2J,UAAA,KAE1K;AAAA,wBACA,gBAAAD,EAAC,KAAA,EAAE,WAAU,yBACT,UAAA;AAAA,0BAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA;AAAA,4BAAA;AAAA,4BACpBqH;AAAA,4BAAW;AAAA,0BAAA,GACxB;AAAA,0BAAQ;AAAA,0BACPX;AAAA,0BAAsB;AAAA,0BAAmBW;AAAA,0BAAW;AAAA,wBAAA,EAAA,CAEzD;AAAA,sBAAA,GACJ;AAAA,sBACA,gBAAArH,EAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,wBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,4JAA2J,UAAA,KAE1K;AAAA,wBACA,gBAAAD,EAAC,KAAA,EAAE,WAAU,yBACT,UAAA;AAAA,0BAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA,kBAAc;AAAA,0BAAQ;AAAA,0BACtDoH;AAAA,0BAAW;AAAA,wBAAA,EAAA,CAChB;AAAA,sBAAA,EAAA,CACJ;AAAA,oBAAA,EAAA,CACJ;AAAA,kBAAA,GACJ;AAAA,kBAEJ,MAAK;AAAA,kBACL,OAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV,GACJ;AAAA,YAGA,gBAAArH,EAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,gBACtB,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,WAAA,CAAQ;AAAA,cAAA,GACrD;AAAA,cAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,sDACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,UAAK,UAAA,eAAA,CAAY;AAAA,kCACjB,OAAA,EAAI,WAAU,0BACV,UAAA+G,sBACIoB,GAAA,EAAS,WAAU,mBAAkB,IAEtC,GAAGD,EAAerB,GAAW,uBAAuBA,GAAW,QAAQ,CAAC,GAAA,CAEhF;AAAA,cAAA,GACJ;AAAA,cAEA,gBAAA9G,EAAC,OAAA,EAAI,WAAU,sDACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,UAAK,UAAA,QAAA,CAAK;AAAA,kCACV,OAAA,EAAI,WAAU,0BACV,UAAA+G,sBACIoB,GAAA,EAAS,WAAU,mBAAkB,IAEtC,GAAGD,EAAerB,GAAW,WAAWA,GAAW,QAAQ,CAAC,GAAA,CAEpE;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GAER;AAAA,QAEJ,QACI,gBAAA9G,EAAA0D,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAzD;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP,6EAA6EwF,IAAY,wBAAwB,wBAAwB;AAAA,cAAA;AAAA,cAG7I,UAAA,gBAAA3G;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAWmB;AAAA,oBACP;AAAA,oBACAwF,IAAY,oCAAoC;AAAA,kBAAA;AAAA,kBAGnD,UAAAA,MAEMoB,IAEC,+CADA,eAAeE,GAAiB5B,CAAY,CAAC,KAAKA,CAAY;AAAA,gBAC9D;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA;AAAA,UAGJ,gBAAArG;AAAA,YAACuF;AAAA,YAAA;AAAA,cACG,SAAS;AAAA,cACT,WAAU;AAAA,cACV,OAAO;AAAA,gBACH,iBAAiB2B,IAAkB,SAAY;AAAA,gBAC/C,OAAOA,IAAkB,SAAY;AAAA,cAAA;AAAA,cAEzC,UACIH,KACA,CAAC,CAACJ,KACFc,KACC,CAACP,KAAmB,MACrB,CAACa;AAAA,cAEL,SAASJ;AAAA,cAER,UAAAT,IACG,gBAAAnH,EAAA0D,GAAA,EACK,UAAA;AAAA,gBAAAsE,KAAsB,CAAChB,IACpB,gBAAAhH,EAAA0D,GAAA,EAAE,UAAA;AAAA,kBAAA;AAAA,kBACuB,gBAAAzD,EAACH,IAAA,EAAS,WAAU,YAAA,CAAY;AAAA,gBAAA,EAAA,CACzD,IAEA;AAAA,iBAEDkH,KAAgBgB,KAAuBN,MACtC,gBAAAzH,EAACoI,IAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,cAAA,EAAA,CAEvD,IAEAjB,KAAwB;AAAA,YAAA;AAAA,UAAA;AAAA,QAEhC,GACJ;AAAA,QAEJ,iBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAInBG,MAASE,GAAS,QACf,gBAAAxH;AAAA,MAAC2F;AAAAA,MAAA;AAAA,QACG,QAAAC;AAAA,QACA,IAAIiB,GAAW,MAAM;AAAA,QACrB,OAAOA,GAAW,qBAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,IAI9CS,MAASE,GAAS,QACdV,MAAe,YACZ,gBAAA9G;AAAA,MAACgG;AAAAA,MAAA;AAAA,QACG,OAAOa,GAAW,qBAAqB;AAAA,QACvC,OAAAzB;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAAA,sBAGHF,IAAA,EAAqB,IAAI0B,GAAW,MAAM,IAAI,OAAAzB,GAAc,gBAAAC,GAAgC;AAAA,EAAA,GAEzG;AAER;ACxYA,SAASgD,GAAavI,GAAc;AAChC,QAAM,EAAE,UAAAwI,GAAU,GAAG1G,EAAA,IAAS9B;AAC9B,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAG6B,GAC/F,UAAA;AAAA,IAAA,gBAAA7B,EAAC,KAAA,EAAE,UAAS,wBACR,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEnB,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,WAAWsI,IAAW,sBAAsB;AAAA,UAC5C,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,GACJ;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAtI,EAAC,YAAA,EAAS,IAAG,kBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,WAAU,QAAO,WAAU,MAAK,SAAQ,WAAU,iCAAgC,GAClG,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;AC/BA,SAASuI,GAASzI,GAAsC;AACpD,SACI,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAC/F,UAAA,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEvB;AAER;ACZA,SAASwI,GAAW1I,GAAsC;AACtD,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAC,EAAC,KAAA,EAAE,UAAS,wBACR,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhB,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhB,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhB,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB,GACJ;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,kBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,WAAU,gCAA+B,GACvF,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACpDA,MAAMyI,KAAuB,CAAC3I,MAEtB,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAC/F,UAAA,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,GAAE;AAAA,IACF,MAAK;AAAA,EAAA;AAAA,GAEb,GCPF0I,KAAyB,CAAC5I,MAExB,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAC/F,UAAA,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,GAAE;AAAA,IACF,MAAK;AAAA,EAAA;AAAA,GAEb,GCQF2I,KAA0D,CAAC,EAAE,KAAAC,GAAK,QAAAC,QAAa;AACjF,QAAM,EAAE,MAAAjG,EAAA,IAAS/B,EAAA;AAEjB,SACI,gBAAAd,EAAA0D,GAAA,EACI,UAAA;AAAA,IAAA,gBAAA1D,EAAC,UAAA,EAAO,WAAU,OAAM,SAAS,MAAM8I,EAAOC,EAAkB,IAAI,GAChE,UAAA;AAAA,MAAA,gBAAA9I;AAAA,QAACuI;AAAA,QAAA;AAAA,UACG,WAAWpH;AAAA,YACPyH,MAAQE,EAAkB,OAAO,wCAAwC;AAAA,YACzE;AAAA,UAAA;AAAA,QACJ;AAAA,MAAA;AAAA,MAEJ,gBAAA9I,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,OAAA,CAAI;AAAA,IAAA,GACrC;AAAA,IAEA,gBAAAD,EAAC,YAAO,WAAU,OAAM,SAAS,MAAM8I,EAAOC,EAAkB,MAAM,GAClE,UAAA;AAAA,MAAA,gBAAA9I;AAAA,QAACwI;AAAA,QAAA;AAAA,UACG,WAAWrH;AAAA,YACPyH,MAAQE,EAAkB,UAAUF,MAAQE,EAAkB,OACxD,wCACA;AAAA,YACN;AAAA,UAAA;AAAA,QACJ;AAAA,MAAA;AAAA,MAEJ,gBAAA9I,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,gBAAA,CAAa;AAAA,IAAA,GAC9C;AAAA,IASC4C,GAAM,cACH,gBAAA7C,EAAC,UAAA,EAAO,WAAU,OAAM,SAAS,MAAM8I,EAAOC,EAAkB,eAAe,GAC1E,UAAA;AAAA,MAAAF,MAAQE,EAAkB,kBACvB,gBAAA9I,EAACyI,IAAA,EAAqB,WAAW,4BAA4B,IAE7D,gBAAAzI,EAAC0I,IAAA,EAAuB,WAAW,yBAAA,CAA0B;AAAA,MAEjE,gBAAA1I,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,kBAAA,CAAe;AAAA,IAAA,GAChD;AAAA,IAGJ,gBAAAD,EAAC,YAAO,WAAU,OAAM,SAAS,MAAM8I,EAAOC,EAAkB,QAAQ,GACpE,UAAA;AAAA,MAAA,gBAAA9I;AAAA,QAACqI;AAAA,QAAA;AAAA,UACG,UAAUO,MAAQE,EAAkB;AAAA,UACpC,WAAW3H;AAAA,YACPyH,MAAQE,EAAkB,WAAW,wCAAwC;AAAA,YAC7E;AAAA,UAAA;AAAA,QACJ;AAAA,MAAA;AAAA,MAEJ,gBAAA9I,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,WAAA,CAAQ;AAAA,IAAA,EAAA,CACzC;AAAA,EAAA,GACJ;AAER,GAEA+I,KAAexG,GAAKoG,EAAmB;AC1EhC,SAASK,GAAWlJ,GAAsC;AAC7D,SACI,gBAAAE,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGF,GAC/F,UAAA,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,UAAS;AAAA,MACT,UAAS;AAAA,MACT,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA,GAEb;AAER;ACXO,SAASiJ,GAAWnJ,GAAsC;AAC7D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAQ,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,kCAAiC,QAAO,WAAU,aAAY,QAAO,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,IACzH,gBAAAA,EAAC,QAAA,EAAK,GAAE,+CAA8C,QAAO,WAAU,aAAY,QAAO,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,IACtI,gBAAAA,EAAC,QAAA,EAAK,GAAE,gCAA+B,QAAO,WAAU,aAAY,QAAO,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,IACvH,gBAAAA,EAAC,QAAA,EAAK,GAAE,iDAAgD,QAAO,WAAU,aAAY,QAAO,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,EAAA,GAC5I;AAER;ACUO,SAASkJ,GAAY,EAAE,MAAAC,KAA0B;AACpD,QAAMC,IAAQD,GAAM,WAAWE,GAAoBF,EAAK,QAAQ,IAAI;AAEpE,SACI,gBAAApJ,EAAC,OAAA,EAAI,WAAU,sEACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,gCACZ,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAWmB;AAAA,YACP;AAAA,YACAgI,EAAK,WAAW,cACVA,EAAK,SAAS,SACV,4BACA,wBACJA,EAAK,WAAW,WACd,sBACA;AAAA,UAAA;AAAA,UAGX,UAAAA,EAAK,SAAS,SACX,gBAAAnJ,EAACiJ,MAAW,IACZE,EAAK,SAAS,8BACbH,IAAA,EAAW,WAAU,0BAAA,CAA0B,sBAE/CA,IAAA,CAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,MAInBI,GAAO,WACJ,gBAAApJ;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAWmB;AAAA,YACP;AAAA,UAAA;AAAA,UAGJ,UAAA,gBAAAnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,KAAKoJ,GAAO;AAAA,cACZ,KAAKE,GAAYF,GAAO,EAAE,KAAKA,GAAO;AAAA,cACtC,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACJ,GAER;AAAA,IACA,gBAAArJ,EAAC,OAAA,EAAI,WAAU,kEAEX,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,gCAAgC,UAAAmJ,EAAK,aAAaA,EAAK,MAAK;AAAA,QAC3E,gBAAAnJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWmB;AAAA,cACP;AAAA,cACAgI,EAAK,WAAW,cACV,0BACAA,EAAK,WAAW,WACd,wBACA;AAAA,YAAA;AAAA,YAGX,UAAAA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACV,GACJ;AAAA,MAEA,gBAAApJ,EAAC,OAAA,EAAI,WAAU,mDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,kBAAkB,UAAAmJ,EAAK,OAAM;AAAA,0BAC3C,OAAA,EAAI,WAAU,gEAAgE,UAAA,GAAGA,EAAK,iBAAiB,OAAOA,EAAK,aAAa,YAAA,IAAgBjB,EAAeiB,EAAK,QAAQA,EAAK,eAAe,CAAC,GAAA,CAAG;AAAA,MAAA,EAAA,CACzM;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;AClFO,SAASI,GAAa,EAAE,MAAAzH,GAAM,KAAA0H,KAAsC;AACvE,SACI,gBAAAxJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAMwJ;AAAA,MACN,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,WAAWC,GAAe;AAAA,QACtB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,MAAA,CACV;AAAA,MAED,UAAA,gBAAA1J,EAAC,OAAA,EAAI,WAAU,sFACX,UAAA;AAAA,QAAA,gBAAAA,EAAC,QAAA,EAAM,UAAA;AAAA,UAAA+B;AAAA,UAAK;AAAA,QAAA,GAAM;AAAA,QAClB,gBAAA9B,EAACgJ,IAAA,EAAW,WAAU,+BAAA,CAA+B;AAAA,MAAA,EAAA,CACzD;AAAA,IAAA;AAAA,EAAA;AAGZ;ACnBO,SAASU,KAAsB;AAClC,SACI,gBAAA3J,EAAC,OAAA,EAAI,WAAU,gFACX,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,QAAA;AAAA,QAGJ,UAAA,gBAAAnB,EAACmI,GAAA,EAAS,WAAU,sCAAA,CAAsC;AAAA,MAAA;AAAA,IAAA;AAAA,IAE9D,gBAAApI,EAAC,OAAA,EAAI,WAAU,wDACX,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,gCACX,4BAACmI,GAAA,EAAS,WAAU,kBAAiB,EAAA,CACzC;AAAA,QACA,gBAAAnI,EAAC,OAAA,EAAI,WAAWmB,EAAG,uBAAuB,GACtC,UAAA,gBAAAnB,EAACmI,GAAA,EAAS,WAAU,iBAAA,CAAiB,EAAA,CACzC;AAAA,MAAA,GACJ;AAAA,MACA,gBAAApI,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,kBACX,4BAACmI,GAAA,EAAS,WAAU,kBAAiB,EAAA,CACzC;AAAA,QACA,gBAAAnI,EAAC,SAAI,WAAU,gDACX,4BAACmI,GAAA,EAAS,WAAU,kBAAiB,EAAA,CACzC;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACzBA,SAASwB,GAAiBC,GAAM;AAC9B,QAAMC,IAAgBD,IAAO,sBACvB,CAACE,GAAyBC,CAAqB,IAAIC,GAAmBH,CAAa,GACnF,CAACI,GAAwBC,CAAoB,IAAIJ;AAAA,IACrDD;AAAA,IACA,EAAE,eAAe,EAAE,SAAS,KAAI,GAAI,SAAyB,oBAAI,IAAG,EAAE;AAAA,EAC1E,GACQM,IAAqB,CAACrK,MAAU;AACpC,UAAM,EAAE,OAAAsK,GAAO,UAAAhG,EAAQ,IAAKtE,GACtBuK,IAAMC,EAAM,OAAO,IAAI,GACvBC,IAAUD,EAAM,OAAuB,oBAAI,IAAG,CAAE,EAAE;AACxD,WAAuB,gBAAAtK,EAAIiK,GAAwB,EAAE,OAAAG,GAAO,SAAAG,GAAS,eAAeF,GAAK,UAAAjG,GAAU;AAAA,EACrG;AACA,EAAA+F,EAAmB,cAAcN;AACjC,QAAMW,IAAuBZ,IAAO,kBAC9Ba,IAAqBC,GAAWF,CAAoB,GACpDG,IAAiBL,EAAM;AAAA,IAC3B,CAACxK,GAAO8K,MAAiB;AACvB,YAAM,EAAE,OAAAR,GAAO,UAAAhG,EAAQ,IAAKtE,GACtB+K,IAAUX,EAAqBM,GAAsBJ,CAAK,GAC1DU,IAAeC,GAAgBH,GAAcC,EAAQ,aAAa;AACxE,aAAuB,gBAAA7K,EAAIyK,GAAoB,EAAE,KAAKK,GAAc,UAAA1G,EAAQ,CAAE;AAAA,IAChF;AAAA,EACJ;AACE,EAAAuG,EAAe,cAAcH;AAC7B,QAAMQ,IAAiBpB,IAAO,sBACxBqB,IAAiB,8BACjBC,IAAyBR,GAAWM,CAAc,GAClDG,IAAqBb,EAAM;AAAA,IAC/B,CAACxK,GAAO8K,MAAiB;AACvB,YAAM,EAAE,OAAAR,GAAO,UAAAhG,GAAU,GAAGgH,EAAQ,IAAKtL,GACnCuK,IAAMC,EAAM,OAAO,IAAI,GACvBQ,IAAeC,GAAgBH,GAAcP,CAAG,GAChDQ,IAAUX,EAAqBc,GAAgBZ,CAAK;AAC1DE,aAAAA,EAAM,UAAU,OACdO,EAAQ,QAAQ,IAAIR,GAAK,EAAE,KAAAA,GAAK,GAAGe,GAAU,GACtC,MAAA;AAAM,QAAKP,EAAQ,QAAQ,OAAOR,CAAG;AAAA,QAC7C,GACsB,gBAAArK,EAAIkL,GAAwB,EAAO,CAACD,CAAc,GAAG,IAAM,KAAKH,GAAc,UAAA1G,GAAU;AAAA,IACjH;AAAA,EACJ;AACE,EAAA+G,EAAmB,cAAcH;AACjC,WAASK,EAAcjB,GAAO;AAC5B,UAAMS,IAAUX,EAAqBN,IAAO,sBAAsBQ,CAAK;AAWvE,WAViBE,EAAM,YAAY,MAAM;AACvC,YAAMgB,IAAiBT,EAAQ,cAAc;AAC7C,UAAI,CAACS,EAAgB,QAAO,CAAA;AAC5B,YAAMC,IAAe,MAAM,KAAKD,EAAe,iBAAiB,IAAIL,CAAc,GAAG,CAAC;AAKtF,aAJc,MAAM,KAAKJ,EAAQ,QAAQ,QAAQ,EACtB;AAAA,QACzB,CAACW,GAAGC,MAAMF,EAAa,QAAQC,EAAE,IAAI,OAAO,IAAID,EAAa,QAAQE,EAAE,IAAI,OAAO;AAAA,MAC1F;AAAA,IAEI,GAAG,CAACZ,EAAQ,eAAeA,EAAQ,OAAO,CAAC;AAAA,EAE7C;AACA,SAAO;AAAA,IACL,EAAE,UAAUV,GAAoB,MAAMQ,GAAgB,UAAUQ,EAAkB;AAAA,IAClFE;AAAA,IACAtB;AAAA,EACJ;AACA;ACxDA,IAAI2B,KAAmB,eACnB,CAACC,IAA0BC,EAAsB,IAAI5B,GAAmB0B,EAAgB,GACxF,CAACG,IAAqBC,EAAqB,IAAIH,GAAyBD,EAAgB,GACxFK,KAAczB,GAAM;AAAA,EACtB,CAACxK,GAAO8K,MAAiB;AACvB,UAAM;AAAA,MACJ,oBAAAoB;AAAA,MACA,MAAMC;AAAA,MACN,aAAA1H;AAAA,MACA,UAAA2H;AAAA,MACA,cAAAzH;AAAA,MACA,GAAG0H;AAAA,IACT,IAAQrM,GACE,CAAC0E,GAAM4H,CAAO,IAAIC,GAAqB;AAAA,MAC3C,MAAMJ;AAAA,MACN,aAAa1H,KAAe;AAAA,MAC5B,UAAUE;AAAA,MACV,QAAQiH;AAAA,IACd,CAAK;AACD,WAAuB,gBAAA1L;AAAA,MACrB6L;AAAA,MACA;AAAA,QACE,OAAOG;AAAA,QACP,UAAAE;AAAA,QACA,WAAWI,GAAK;AAAA,QAChB,MAAA9H;AAAA,QACA,cAAc8F,GAAM,YAAY,MAAM8B,EAAQ,CAACG,MAAa,CAACA,CAAQ,GAAG,CAACH,CAAO,CAAC;AAAA,QACjF,UAA0B,gBAAApM;AAAA,UACxBwM,GAAU;AAAA,UACV;AAAA,YACE,cAAcC,GAASjI,CAAI;AAAA,YAC3B,iBAAiB0H,IAAW,KAAK;AAAA,YACjC,GAAGC;AAAA,YACH,KAAKvB;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACAmB,GAAY,cAAcL;AAC1B,IAAIgB,KAAe,sBACfC,KAAqBrC,GAAM;AAAA,EAC7B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,oBAAAoB,GAAoB,GAAGY,EAAY,IAAK9M,GAC1C+K,IAAUiB,GAAsBY,IAAcV,CAAkB;AACtE,WAAuB,gBAAAhM;AAAA,MACrBwM,GAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,iBAAiB3B,EAAQ;AAAA,QACzB,iBAAiBA,EAAQ,QAAQ;AAAA,QACjC,cAAc4B,GAAS5B,EAAQ,IAAI;AAAA,QACnC,iBAAiBA,EAAQ,WAAW,KAAK;AAAA,QACzC,UAAUA,EAAQ;AAAA,QAClB,GAAG+B;AAAA,QACH,KAAKhC;AAAA,QACL,SAASiC,GAAqB/M,EAAM,SAAS+K,EAAQ,YAAY;AAAA,MACzE;AAAA,IACA;AAAA,EACE;AACF;AACA8B,GAAmB,cAAcD;AACjC,IAAII,KAAe,sBACfC,KAAqBzC,GAAM;AAAA,EAC7B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,YAAAoC,GAAY,GAAGC,EAAY,IAAKnN,GAClC+K,IAAUiB,GAAsBgB,IAAchN,EAAM,kBAAkB;AAC5E,WAAuB,gBAAAE,EAAIkN,IAAU,EAAE,SAASF,KAAcnC,EAAQ,MAAM,UAAU,CAAC,EAAE,SAAAsC,EAAO,MAAuB,gBAAAnN,EAAIoN,IAAwB,EAAE,GAAGH,GAAc,KAAKrC,GAAc,SAAAuC,EAAO,CAAE,GAAG;AAAA,EACvM;AACF;AACAJ,GAAmB,cAAcD;AACjC,IAAIM,KAAyB9C,GAAM,WAAW,CAACxK,GAAO8K,MAAiB;AACrE,QAAM,EAAE,oBAAAoB,GAAoB,SAAAmB,GAAS,UAAA/I,GAAU,GAAG6I,EAAY,IAAKnN,GAC7D+K,IAAUiB,GAAsBgB,IAAcd,CAAkB,GAChE,CAACqB,GAAWC,CAAY,IAAIhD,GAAM,SAAS6C,CAAO,GAClD9C,IAAMC,GAAM,OAAO,IAAI,GACvBQ,IAAeC,GAAgBH,GAAcP,CAAG,GAChDkD,IAAYjD,GAAM,OAAO,CAAC,GAC1BkD,IAASD,EAAU,SACnBE,IAAWnD,GAAM,OAAO,CAAC,GACzBoD,IAAQD,EAAS,SACjBE,IAAS9C,EAAQ,QAAQwC,GACzBO,IAA+BtD,GAAM,OAAOqD,CAAM,GAClDE,IAAoBvD,GAAM,OAAO,MAAM;AAC7C,SAAAA,GAAM,UAAU,MAAM;AACpB,UAAMwD,IAAM,sBAAsB,MAAMF,EAA6B,UAAU,EAAK;AACpF,WAAO,MAAM,qBAAqBE,CAAG;AAAA,EACvC,GAAG,CAAA,CAAE,GACLC,GAAgB,MAAM;AACpB,UAAMC,IAAO3D,EAAI;AACjB,QAAI2D,GAAM;AACR,MAAAH,EAAkB,UAAUA,EAAkB,WAAW;AAAA,QACvD,oBAAoBG,EAAK,MAAM;AAAA,QAC/B,eAAeA,EAAK,MAAM;AAAA,MAClC,GACMA,EAAK,MAAM,qBAAqB,MAChCA,EAAK,MAAM,gBAAgB;AAC3B,YAAMC,IAAOD,EAAK,sBAAqB;AACvC,MAAAT,EAAU,UAAUU,EAAK,QACzBR,EAAS,UAAUQ,EAAK,OACnBL,EAA6B,YAChCI,EAAK,MAAM,qBAAqBH,EAAkB,QAAQ,oBAC1DG,EAAK,MAAM,gBAAgBH,EAAkB,QAAQ,gBAEvDP,EAAaH,CAAO;AAAA,IACtB;AAAA,EACF,GAAG,CAACtC,EAAQ,MAAMsC,CAAO,CAAC,GACH,gBAAAnN;AAAA,IACrBwM,GAAU;AAAA,IACV;AAAA,MACE,cAAcC,GAAS5B,EAAQ,IAAI;AAAA,MACnC,iBAAiBA,EAAQ,WAAW,KAAK;AAAA,MACzC,IAAIA,EAAQ;AAAA,MACZ,QAAQ,CAAC8C;AAAA,MACT,GAAGV;AAAA,MACH,KAAKnC;AAAA,MACL,OAAO;AAAA,QACJ,sCAAuC0C,IAAS,GAAGA,CAAM,OAAO;AAAA,QAChE,qCAAsCE,IAAQ,GAAGA,CAAK,OAAO;AAAA,QAC9D,GAAG5N,EAAM;AAAA,MACjB;AAAA,MACM,UAAU6N,KAAUvJ;AAAA,IAC1B;AAAA,EACA;AACA,CAAC;AACD,SAASqI,GAASjI,GAAM;AACtB,SAAOA,IAAO,SAAS;AACzB;AACA,IAAI0J,KAAOnC,IACPoC,KAAUxB,IACVyB,KAAUrB,IC7IVsB,KAAmB/D,GAAM,cAAc,MAAM;AAKjD,SAASgE,GAAaC,GAAU;AAC9B,QAAMC,IAAYlE,GAAM,WAAW+D,EAAgB;AACnD,SAAOE,KAAYC,KAAa;AAClC;ACIA,IAAIC,KAAiB,aACjBC,KAAiB,CAAC,QAAQ,OAAO,aAAa,WAAW,aAAa,YAAY,GAClF,CAACC,IAAYtD,IAAetB,EAAqB,IAAIJ,GAAiB8E,EAAc,GACpF,CAACG,EAA4C,IAAI5E,GAAmByE,IAAgB;AAAA,EACtF1E;AAAA,EACA6B;AACF,CAAC,GACGiD,KAAsBjD,GAAsB,GAC5CkD,KAAYxE,EAAM;AAAA,EACpB,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,MAAAmE,GAAM,GAAGC,EAAc,IAAKlP,GAC9BmP,IAAcD,GACdE,IAAgBF;AACtB,WAAuB,gBAAAhP,EAAI2O,GAAW,UAAU,EAAE,OAAO7O,EAAM,kBAAkB,UAAUiP,MAAS,aAA6B,gBAAA/O,EAAImP,IAAuB,EAAE,GAAGD,GAAe,KAAKtE,EAAY,CAAE,IAAoB,gBAAA5K,EAAIoP,IAAqB,EAAE,GAAGH,GAAa,KAAKrE,EAAY,CAAE,EAAC,CAAE;AAAA,EAC1R;AACF;AACAkE,GAAU,cAAcL;AACxB,IAAI,CAACY,IAAwBC,EAAwB,IAAIV,GAAuBH,EAAc,GAC1F,CAACc,IAA8BC,EAA8B,IAAIZ;AAAA,EACnEH;AAAA,EACA,EAAE,aAAa,GAAK;AACtB,GACIW,KAAsB9E,EAAM;AAAA,EAC9B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM;AAAA,MACJ,OAAO6E;AAAA,MACP,cAAAC;AAAA,MACA,eAAAC,IAAgB,MAAM;AAAA,MACtB;AAAA,MACA,aAAAC,IAAc;AAAA,MACd,GAAGC;AAAA,IACT,IAAQ/P,GACE,CAACI,GAAO4P,CAAQ,IAAIzD,GAAqB;AAAA,MAC7C,MAAMoD;AAAA,MACN,aAAaC,KAAgB;AAAA,MAC7B,UAAUC;AAAA,MACV,QAAQlB;AAAA,IACd,CAAK;AACD,WAAuB,gBAAAzO;AAAA,MACrBqP;AAAA,MACA;AAAA,QACE,OAAOvP,EAAM;AAAA,QACb,OAAOwK,EAAM,QAAQ,MAAMpK,IAAQ,CAACA,CAAK,IAAI,CAAA,GAAI,CAACA,CAAK,CAAC;AAAA,QACxD,YAAY4P;AAAA,QACZ,aAAaxF,EAAM,YAAY,MAAMsF,KAAeE,EAAS,EAAE,GAAG,CAACF,GAAaE,CAAQ,CAAC;AAAA,QACzF,UAA0B,gBAAA9P,EAAIuP,IAA8B,EAAE,OAAOzP,EAAM,kBAAkB,aAAA8P,GAAa,UAA0B,gBAAA5P,EAAI+P,IAAe,EAAE,GAAGF,GAAsB,KAAKjF,EAAY,CAAE,EAAC,CAAE;AAAA,MAChN;AAAA,IACA;AAAA,EACE;AACF,GACIuE,KAAwB7E,EAAM,WAAW,CAACxK,GAAO8K,MAAiB;AACpE,QAAM;AAAA,IACJ,OAAO6E;AAAA,IACP,cAAAC;AAAA,IACA,eAAAC,IAAgB,MAAM;AAAA,IACtB;AAAA,IACA,GAAGK;AAAA,EACP,IAAMlQ,GACE,CAACI,GAAO4P,CAAQ,IAAIzD,GAAqB;AAAA,IAC7C,MAAMoD;AAAA,IACN,aAAaC,KAAgB,CAAA;AAAA,IAC7B,UAAUC;AAAA,IACV,QAAQlB;AAAA,EACZ,CAAG,GACKwB,IAAiB3F,EAAM;AAAA,IAC3B,CAAC4F,MAAcJ,EAAS,CAACK,IAAY,CAAA,MAAO,CAAC,GAAGA,GAAWD,CAAS,CAAC;AAAA,IACrE,CAACJ,CAAQ;AAAA,EACb,GACQM,IAAkB9F,EAAM;AAAA,IAC5B,CAAC4F,MAAcJ,EAAS,CAACK,IAAY,CAAA,MAAOA,EAAU,OAAO,CAACE,MAAWA,MAAWH,CAAS,CAAC;AAAA,IAC9F,CAACJ,CAAQ;AAAA,EACb;AACE,SAAuB,gBAAA9P;AAAA,IACrBqP;AAAA,IACA;AAAA,MACE,OAAOvP,EAAM;AAAA,MACb,OAAAI;AAAA,MACA,YAAY+P;AAAA,MACZ,aAAaG;AAAA,MACb,UAA0B,gBAAApQ,EAAIuP,IAA8B,EAAE,OAAOzP,EAAM,kBAAkB,aAAa,IAAM,UAA0B,gBAAAE,EAAI+P,IAAe,EAAE,GAAGC,GAAwB,KAAKpF,EAAY,CAAE,EAAC,CAAE;AAAA,IACtN;AAAA,EACA;AACA,CAAC,GACG,CAAC0F,IAAuBC,EAAmB,IAAI3B,GAAuBH,EAAc,GACpFsB,KAAgBzF,EAAM;AAAA,EACxB,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,kBAAA4F,GAAkB,UAAAtE,GAAU,KAAAuE,GAAK,aAAAC,IAAc,YAAY,GAAG1B,EAAc,IAAKlP,GACnF6Q,IAAerG,EAAM,OAAO,IAAI,GAChCQ,IAAeC,GAAgB4F,GAAc/F,CAAY,GACzDgG,IAAWvF,GAAcmF,CAAgB,GAEzCK,IADYvC,GAAamC,CAAG,MACG,OAC/BK,IAAgBjE,GAAqB/M,EAAM,WAAW,CAACiR,MAAU;AACrE,UAAI,CAACrC,GAAe,SAASqC,EAAM,GAAG,EAAG;AACzC,YAAMC,IAASD,EAAM,QACfE,IAAoBL,EAAQ,EAAG,OAAO,CAACM,MAAS,CAACA,EAAK,IAAI,SAAS,QAAQ,GAC3EC,IAAeF,EAAkB,UAAU,CAACC,MAASA,EAAK,IAAI,YAAYF,CAAM,GAChFI,IAAeH,EAAkB;AACvC,UAAIE,MAAiB,GAAI;AACzB,MAAAJ,EAAM,eAAc;AACpB,UAAIM,IAAYF;AAChB,YAAMG,IAAY,GACZC,IAAWH,IAAe,GAC1BI,IAAW,MAAM;AACrB,QAAAH,IAAYF,IAAe,GACvBE,IAAYE,MACdF,IAAYC;AAAA,MAEhB,GACMG,IAAW,MAAM;AACrB,QAAAJ,IAAYF,IAAe,GACvBE,IAAYC,MACdD,IAAYE;AAAA,MAEhB;AACA,cAAQR,EAAM,KAAG;AAAA,QACf,KAAK;AACH,UAAAM,IAAYC;AACZ;AAAA,QACF,KAAK;AACH,UAAAD,IAAYE;AACZ;AAAA,QACF,KAAK;AACH,UAAIb,MAAgB,iBACdG,IACFW,EAAQ,IAERC,EAAQ;AAGZ;AAAA,QACF,KAAK;AACH,UAAIf,MAAgB,cAClBc,EAAQ;AAEV;AAAA,QACF,KAAK;AACH,UAAId,MAAgB,iBACdG,IACFY,EAAQ,IAERD,EAAQ;AAGZ;AAAA,QACF,KAAK;AACH,UAAId,MAAgB,cAClBe,EAAQ;AAEV;AAAA,MACV;AACM,YAAMC,IAAeL,IAAYD;AACjC,MAAAH,EAAkBS,CAAY,EAAE,IAAI,SAAS,MAAK;AAAA,IACpD,CAAC;AACD,WAAuB,gBAAA1R;AAAA,MACrBsQ;AAAA,MACA;AAAA,QACE,OAAOE;AAAA,QACP,UAAAtE;AAAA,QACA,WAAWuE;AAAA,QACX,aAAAC;AAAA,QACA,UAA0B,gBAAA1Q,EAAI2O,GAAW,MAAM,EAAE,OAAO6B,GAAkB,UAA0B,gBAAAxQ;AAAA,UAClGwM,GAAU;AAAA,UACV;AAAA,YACE,GAAGwC;AAAA,YACH,oBAAoB0B;AAAA,YACpB,KAAK5F;AAAA,YACL,WAAWoB,IAAW,SAAS4E;AAAA,UAC3C;AAAA,QACA,EAAS,CAAE;AAAA,MACX;AAAA,IACA;AAAA,EACE;AACF,GACIa,KAAY,iBACZ,CAACC,IAAuBC,EAAuB,IAAIjD,GAAuB+C,EAAS,GACnFG,KAAgBxH,EAAM;AAAA,EACxB,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,kBAAA4F,GAAkB,OAAAtQ,GAAO,GAAG6R,EAAkB,IAAKjS,GACrDkS,IAAmBzB,GAAoBoB,IAAWnB,CAAgB,GAClEyB,IAAe3C,GAAyBqC,IAAWnB,CAAgB,GACnE0B,IAAmBrD,GAAoB2B,CAAgB,GACvD2B,IAAY7F,GAAK,GACjB9H,IAAOtE,KAAS+R,EAAa,MAAM,SAAS/R,CAAK,KAAK,IACtDgM,IAAW8F,EAAiB,YAAYlS,EAAM;AACpD,WAAuB,gBAAAE;AAAA,MACrB4R;AAAA,MACA;AAAA,QACE,OAAOpB;AAAA,QACP,MAAAhM;AAAA,QACA,UAAA0H;AAAA,QACA,WAAAiG;AAAA,QACA,UAA0B,gBAAAnS;AAAA,UACxBoS;AAAAA,UACA;AAAA,YACE,oBAAoBJ,EAAiB;AAAA,YACrC,cAAcvF,GAASjI,CAAI;AAAA,YAC3B,GAAG0N;AAAA,YACH,GAAGH;AAAA,YACH,KAAKnH;AAAA,YACL,UAAAsB;AAAA,YACA,MAAA1H;AAAA,YACA,cAAc,CAAC6N,MAAU;AACvB,cAAIA,IACFJ,EAAa,WAAW/R,CAAK,IAE7B+R,EAAa,YAAY/R,CAAK;AAAA,YAElC;AAAA,UACZ;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA4R,GAAc,cAAcH;AAC5B,IAAIW,KAAc,mBACdC,KAAkBjI,EAAM;AAAA,EAC1B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,kBAAA4F,GAAkB,GAAGgC,EAAW,IAAK1S,GACvCkS,IAAmBzB,GAAoB9B,IAAgB+B,CAAgB,GACvEiC,IAAcZ,GAAwBS,IAAa9B,CAAgB;AACzE,WAAuB,gBAAAxQ;AAAA,MACrBwM,GAAU;AAAA,MACV;AAAA,QACE,oBAAoBwF,EAAiB;AAAA,QACrC,cAAcvF,GAASgG,EAAY,IAAI;AAAA,QACvC,iBAAiBA,EAAY,WAAW,KAAK;AAAA,QAC7C,GAAGD;AAAA,QACH,KAAK5H;AAAA,MACb;AAAA,IACA;AAAA,EACE;AACF;AACA2H,GAAgB,cAAcD;AAC9B,IAAI5F,KAAe,oBACfgG,KAAmBpI,EAAM;AAAA,EAC3B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,kBAAA4F,GAAkB,GAAG5D,EAAY,IAAK9M,GACxCkS,IAAmBzB,GAAoB9B,IAAgB+B,CAAgB,GACvEiC,IAAcZ,GAAwBnF,IAAc8D,CAAgB,GACpEmC,IAAqBnD,GAA+B9C,IAAc8D,CAAgB,GAClF0B,IAAmBrD,GAAoB2B,CAAgB;AAC7D,WAAuB,gBAAAxQ,EAAI2O,GAAW,UAAU,EAAE,OAAO6B,GAAkB,UAA0B,gBAAAxQ;AAAA,MACnG4S;AAAAA,MACA;AAAA,QACE,iBAAiBH,EAAY,QAAQ,CAACE,EAAmB,eAAe;AAAA,QACxE,oBAAoBX,EAAiB;AAAA,QACrC,IAAIS,EAAY;AAAA,QAChB,GAAGP;AAAA,QACH,GAAGtF;AAAA,QACH,KAAKhC;AAAA,MACb;AAAA,IACA,GAAO;AAAA,EACL;AACF;AACA8H,GAAiB,cAAchG;AAC/B,IAAII,KAAe,oBACf+F,KAAmBvI,EAAM;AAAA,EAC3B,CAACxK,GAAO8K,MAAiB;AACvB,UAAM,EAAE,kBAAA4F,GAAkB,GAAGvD,EAAY,IAAKnN,GACxCkS,IAAmBzB,GAAoB9B,IAAgB+B,CAAgB,GACvEiC,IAAcZ,GAAwB/E,IAAc0D,CAAgB,GACpE0B,IAAmBrD,GAAoB2B,CAAgB;AAC7D,WAAuB,gBAAAxQ;AAAA,MACrB8S;AAAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,mBAAmBL,EAAY;AAAA,QAC/B,oBAAoBT,EAAiB;AAAA,QACrC,GAAGE;AAAA,QACH,GAAGjF;AAAA,QACH,KAAKrC;AAAA,QACL,OAAO;AAAA,UACJ,oCAAqC;AAAA,UACrC,mCAAoC;AAAA,UACrC,GAAG9K,EAAM;AAAA,QACnB;AAAA,MACA;AAAA,IACA;AAAA,EACE;AACF;AACA+S,GAAiB,cAAc/F;AAC/B,SAASL,GAASjI,GAAM;AACtB,SAAOA,IAAO,SAAS;AACzB;AACA,IAAIuO,KAAQjE,IACRkE,KAAOlB,IACPmB,KAASV,IACTW,KAAWR,IACXS,KAAWN;AC7Sf,MAAM/D,KAAYsE,IAEZtB,KAAgBuB,GAGpB,CAAC,EAAE,WAAA1S,GAAW,GAAGb,EAAA,GAASuK,MAAQ,gBAAArK,EAACsT,IAAA,EAAwB,KAAAjJ,GAAU,WAAWlJ,EAAGR,CAAS,GAAI,GAAGb,GAAO,CAAE,GAExG4S,KAAmBW,GAGvB,CAAC,EAAE,WAAA1S,GAAW,UAAAyD,GAAU,GAAGtE,EAAA,GAASuK,MAClC,gBAAArK,EAACuT,IAAA,EAA0B,WAAU,WACjC,UAAA,gBAAAvT;AAAA,EAACwT;AAAAA,EAAA;AAAA,IACG,KAAAnJ;AAAA,IACA,WAAWlJ,EAAG,kFAAkFR,CAAS;AAAA,IACxG,GAAGb;AAAA,IAEH,UAAAsE;AAAA,EAAA;AACL,EAAA,CACJ,CACH,GAEKyO,KAAmBQ,GAGvB,CAAC,EAAE,WAAA1S,GAAW,UAAAyD,GAAU,GAAGtE,EAAA,GAASuK,MAClC,gBAAArK;AAAA,EAACyT;AAAAA,EAAA;AAAA,IACG,KAAApJ;AAAA,IACA,WAAU;AAAA,IACT,GAAGvK;AAAA,IAEJ,4BAAC,OAAA,EAAI,WAAWqB,EAAG,mBAAmBR,CAAS,GAAI,UAAAyD,EAAA,CAAS;AAAA,EAAA;AAChE,CACH;ACnBM,SAASsP,GAAkB,EAAE,aAAAC,IAAc,MAAiC;AAC/E,QAAM,EAAE,MAAA/Q,GAAM,qBAAAgR,EAAA,IAAwB/S,EAAA,GAChCC,IAAUC,GAAA,GACV8S,IAA0BD,IAAsB,OAAOvK,GAAoBvI,CAAO,GAAG,aACrF,EAAE,mBAAAgT,GAAmB,mBAAAC,GAAmB,UAAAC,GAAU,SAAAC,GAAS,WAAAC,GAAW,SAAAC,GAAS,YAAAC,EAAA,IAAeC,GAAA,GAE9FC,IAAiBxR,GAAuB,IAAI,GAC5CyR,IAAczR,GAAuB,IAAI,GACzC,CAACC,GAASC,CAAU,IAAIZ,EAAS,EAAK,GACtC,CAACoS,GAAgBC,CAAiB,IAAIrS,EAAiB,EAAE,GAEzDsS,IAAoBZ,EAAkB,OAAO,CAACa,GAAOC,MAAUD,IAAQC,EAAM,aAAa,QAAQ,CAAC,GAEnGC,IAAe/R,GAAOiR,CAAiB;AAC7C,EAAAc,EAAa,UAAUd,GAEvB9Q,EAAU,MAAM;AACZ,IAAK4R,EAAa,QAAQ,EAAI;AAAA,EAClC,GAAG,CAACT,CAAU,CAAC,GAGfnR,EAAU,MAAM;AACZ,IAAK0Q,KAELc,EAAkBD,KAAkBV,IAAoB,CAAC,GAAG,eAAe,CAAC,GAAG,MAAM,EAAE;AAAA,EAC3F,GAAG,CAACU,GAAgBV,GAAmBH,CAAW,CAAC;AAGnD,QAAMmB,IAAeC;AAAA,IACjB,CAACC,MAAyC;AACtC,YAAM,CAACC,CAAK,IAAID;AAChB,MAAIC,EAAM,kBAAkBhB,KAAW,CAACC,KACpCF,EAAA;AAAA,IAER;AAAA,IACA,CAACC,GAASC,GAAWF,CAAQ;AAAA,EAAA;AAGjC,SAAA/Q,EAAU,MAAM;AACZ,UAAMiS,IAAW,IAAI,qBAAqBJ,GAAc;AAAA,MACpD,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAW;AAAA,IAAA,CACd,GAEKK,IAAgBb,EAAe;AACrC,WAAIa,KACAD,EAAS,QAAQC,CAAa,GAG3B,MAAM;AACT,MAAIA,KACAD,EAAS,UAAUC,CAAa;AAAA,IAExC;AAAA,EACJ,GAAG,CAACL,CAAY,CAAC,GAGjB7R,EAAU,MAAM;AACZ,UAAMmS,IAAWb,EAAY;AAC7B,QAAI,CAACa,EAAU;AAEf,UAAMF,IAAW,IAAI;AAAA,MACjB,CAAC,CAACD,CAAK,MAAM;AAET,QAAAjS,EAAW,CAACiS,EAAM,cAAc;AAAA,MACpC;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,IACf;AAGJ,WAAAC,EAAS,QAAQE,CAAQ,GAElB,MAAM;AACT,MAAAF,EAAS,WAAA;AAAA,IACb;AAAA,EACJ,GAAG,CAAA,CAAE,GAGD,gBAAAnV,EAAC,OAAA,EAAI,WAAU,6DAEX,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,KAAKuU,GAAa,WAAU,wBAAuB;AAAA,IACxD,gBAAAvU;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,MACI6T,IACM,GAAGA,CAAuB,YAAYjR,GAAM,SAAS,KACrD,iCAAiCA,GAAM,SAAS;AAAA,QAE1D,QAAO;AAAA,QACP,KAAI;AAAA,QACJ,WAAWzB;AAAA,UACP;AAAA,UACA4B,IACM,+KACA;AAAA,QAAA;AAAA,QAGV,UAAA,gBAAAhD,EAAC,QAAA,EAAK,WAAU,wCAAuC,UAAA;AAAA,UAAA;AAAA,UACvC,gBAAAC,EAACX,MAAa,WAAW8B,EAAG,mBAAmB4B,IAAU,cAAc,WAAW,EAAA,CAAG;AAAA,QAAA,EAAA,CACrG;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,gBAAA/C,EAAC,OAAA,EAAI,WAAU,mCACX,UAAA,gBAAAA;AAAA,MAACgE;AAAA,MAAA;AAAA,QACG,aAAY;AAAA,QACZ,iBAAe;AAAA,QACf,MAAK;AAAA,QACL,OAAM;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,sBAEC,OAAA,EAAI,WAAU,8DACV,UAAAmQ,KAAWO,MAAsB,IAC9B,gBAAA1U,EAACqV,IAAA,EAAgB,SAAQ,4BAA2B,SAAS,MAAMtB,EAAkB,EAAI,GAAG,IAC5FG,KAAaQ,MAAsB;AAAA;AAAA,MAEnC,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,CAACY,GAAGC,wBAEvB,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAvV,EAAC0J,IAAA,EAAoB;AAAA,QACpB6L,IAAQ,KAAK,gBAAAvV,EAAC,MAAA,EAAG,WAAU,kBAAA,CAAkB;AAAA,MAAA,EAAA,GAFxCuV,CAGV,CAEP;AAAA,QACDb,IAAoB,IACpB,gBAAA3U,EAAA0D,GAAA,EACK,UAAA;AAAA,MAAAqQ,EAAkB,IAAI,CAACc,GAAOY,wBAC1B,OAAA,EAEI,UAAA;AAAA,QAAAZ,EAAM,SACH,gBAAA5U,EAAC,OAAA,EAAI,WAAU,oEACV,YAAM,OACX;AAAA,QAIJ,gBAAAA;AAAA,UAAC8O;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,aAAW;AAAA,YACX,OAAO0F;AAAA,YACP,eAAeC;AAAA,YAEd,UAAAG,EAAM,aAAa,IAAI,CAACa,GAAGF,wBAEnB,OAAA,EACG,UAAA;AAAA,cAAA,gBAAAxV,EAAC+R,IAAA,EAAc,OAAO2D,EAAE,IACpB,UAAA;AAAA,gBAAA,gBAAAzV,EAAC0S,IAAA,EACG,UAAA,gBAAA1S;AAAA,kBAACkJ;AAAA,kBAAA;AAAA,oBACG,MAAM;AAAA,sBACF,QAAQuM,EAAE;AAAA,sBACV,MAAMA,EAAE;AAAA,sBACR,WAAWA,EAAE;AAAA,sBACb,OAAOA,EAAE;AAAA,sBACT,QAAQA,EAAE;AAAA,sBACV,iBAAiBA,EAAE;AAAA,sBACnB,cAAcA,EAAE;AAAA,sBAChB,UAAU7B,IAAsB6B,EAAE,WAAW;AAAA;AAAA,oBAAA;AAAA,kBACjD;AAAA,gBAAA,GAER;AAAA,kCACC5C,IAAA,EACI,UAAA;AAAA,kBAAA4C,EAAE,aAAa,SACZ,gBAAAzV,EAAC,OAAA,EAAI,WAAU,8EACV,UAAAyV,EAAE,aAAa,MAAM,CAACC,MACnB,gBAAA1V,EAAC,OAAA,EAAI,WAAU,+BACV,UAAA0V,EAAI,cAAY,CACrB,CACH,GACL,IACA;AAAA,kBACHD,EAAE,mBAAmB,SAClB,gBAAAzV,EAAC,OAAA,EAAI,WAAU,2DACV,UAAAyV,EAAE,mBAAmB,MAAM,CAACE,MACzB,gBAAA3V;AAAA,oBAACuJ;AAAA,oBAAA;AAAA,sBAEG,MAAMoM,EAAG;AAAA,sBACT,KAAKA,EAAG;AAAA,oBAAA;AAAA,oBAFHA,EAAG;AAAA,kBAAA,CAIf,GACL,IAEA,gBAAA3V,EAAC,SAAI,WAAU,iFACV,UAAAyV,EAAE,eAAe,sBAAA,CACtB;AAAA,kBAEHA,EAAE,eACC,gBAAA1V,EAAC,QAAA,EAAK,WAAU,iHACZ,UAAA;AAAA,oBAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,oBAAQ;AAAA,oBAC9B,gBAAAA;AAAA,sBAAC6B;AAAAA,sBAAA;AAAA,wBACG,YAAY4T,GAAG;AAAA,wBACf,MAAMA,GAAG,GAAG,MAAM,GAAG,EAAE,IAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/B,EAAA,CACJ;AAAA,gBAAA,EAAA,CAER;AAAA,cAAA,GACJ;AAAA,cACCF,IAAQX,EAAM,aAAa,SAAS,KACjC,gBAAA5U,EAAC,MAAA,EAAG,WAAU,kBAAA,CAAkB;AAAA,YAAA,EAAA,GArD9ByV,EAAE,EAuDZ,CAEP;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJD,IAAa1B,EAAkB,SAAS,KACrC,gBAAA9T,EAAC,OAAA,EAAI,WAAU,sCAAA,CAAsC;AAAA,MAAA,EAAA,GA/EnD4U,EAAM,SAAS,SAASY,CAAU,EAiF5C,CACH;AAAA,MAGAvB,uBACI,OAAA,EAAI,WAAU,6CACV,UAAAC,IACG,gBAAAnU,EAAC,OAAA,EAAI,WAAU,yDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAAA,CAA8C;AAAA,QAC7D,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CAAA,CAA8C;AAAA,QAC7D,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CAAA,CAA8C;AAAA,MAAA,GACjE,IAEA,gBAAAA,EAAC,OAAA,EAAI,KAAKsU,GAAgB,WAAU,UAAS,EAAA,CAErD;AAAA,IAAA,GAER,IAEA,gBAAAtU,EAAC,OAAA,EAAI,WAAU,gGAA+F,6BAE9G,EAAA,CAER;AAAA,EAAA,GACJ;AAER;AC/PO,SAAS4V,GAAS9V,GAAsC;AAC3D,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAE,EAAC,KAAA,EAAE,UAAS,wBACR,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA,GAEb;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,kBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,QAAO,QAAO,QAAO,MAAK,SAAQ,WAAU,gCAA+B,GAC3F,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;AClBO,SAAS6V,GAAO/V,GAAsC;AACzD,SACI,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GAC/F,UAAA;AAAA,IAAA,gBAAAE,EAAC,KAAA,EAAE,UAAS,wBACR,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IAAA,GAEb;AAAA,sBACC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,kBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,WAAU,QAAO,WAAU,MAAK,SAAQ,WAAU,gCAA+B,GACjG,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACDO,SAAS8V,GAAc,EAAE,eAAAC,KAAqC;AACjE,QAAM,EAAE,MAAAnT,GAAM,UAAAhC,GAAU,aAAAoV,GAAa,iBAAAC,GAAiB,iBAAAC,GAAiB,qBAAAtC,EAAA,IAAwB/S,EAAA,GAGzFG,IAAgBJ,GAAU,QAAQ,OAAO,CAACK,MAAYA,EAAQ,MAAM,GAEpEkV,IAAcvV,GAAU,cACxBwV,IAASxV,GAAU;AAEzB,SACI,gBAAAb,EAAC,OAAA,EAAI,WAAU,+FAEX,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,UACAyS,IAAsB,mBAAmB;AAAA,QAAA;AAAA,QAG5C,UAACA,IA0BE,gBAAA5T;AAAA,UAACgE;AAAA,UAAA;AAAA,YACG,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,OAAM;AAAA,YACN,MAAK;AAAA,UAAA;AAAA,QAAA,IA7BT,gBAAAjE,EAAA0D,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAzD,EAAC,UAAK,UAAA,aAAA,CAAU;AAAA,UAChB,gBAAAA,EAAC,SAAI,WAAU,mDACV,cACG,gBAAAA,EAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA,cAAA,CAAW,IACxE,CAACgW,KAAehV,GAAe,UAAU,2BACxCmH,GAAA,EAAS,WAAU,iBAAA,CAAiB,IAErC,gBAAApI,EAAA0D,GAAA,EACI,UAAA;AAAA,YAAA,gBAAAzD,EAACU,IAAA,EAAgB,WAAU,YAAA,CAAY;AAAA,8BACtC,QAAA,EACI,UAAA;AAAA,cAAA2V;AAAA,gBACGrV,GAAe;AAAA,gBACfA,GAAe;AAAA,gBACfA,GAAe;AAAA,cAAA;AAAA,cAChB;AAAA,cACH,gBAAAhB,EAAC,QAAA,EAAK,WAAU,8CACX,aAAe,OAAA,CACpB;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ,EAAA,CAER;AAAA,QAAA,EAAA,CACJ;AAAA,MAOA;AAAA,IAAA;AAAA,IAIR,gBAAAD,EAAC,OAAA,EAAI,WAAU,yDACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,uBACX,UAAAiW,sBACI,QAAA,EAAK,WAAU,8CAA6C,UAAA,cAAA,CAAW,IACxE,CAACD,KAAeG,GAAa,WAAW,SACxC,gBAAAnW,EAACmI,KAAS,WAAU,yBAAA,CAAyB,IAE7C,gBAAApI,EAAA0D,GAAA,EACK,UAAA;AAAA,QAAAyE;AAAA,UACGiO,GAAa;AAAA,UACb;AAAA,UACAC,GAAQ,KAAK,CAACX,MAAM,OAAOA,EAAE,UAAU,MAAM,EAAE;AAAA,UAC/C;AAAA,QAAA;AAAA,0BAEH,QAAA,EAAK,WAAU,oDACX,UAAAU,GAAa,YAAY,MAAA,CAC9B;AAAA,MAAA,EAAA,CACJ,EAAA,CAER;AAAA,MACA,gBAAAnW,EAAC,QAAA,EAAK,WAAU,0EAAyE,UAAA,mBAEzF;AAAA,MACCiW,KACG,gBAAAjW;AAAA,QAACqV;AAAA,QAAA;AAAA,UACG,SAAO;AAAA,UACP,SAAQ;AAAA,UACR,SAAS,MAAMa,EAAgB,EAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IACvC,GAER;AAAA,IAGA,gBAAAnW,EAAC,OAAA,EAAI,WAAU,iDAEX,UAAA;AAAA,MAAA,gBAAAC,EAACuF,KAAO,QAAM,IAAC,SAAQ,QAAO,MAAK,QAAO,SAAS,MAAMwQ,EAAcO,EAAW,IAAI,GAClF,UAAA,gBAAAvW,EAAC,QAAA,EAAK,WAAU,8EACZ,UAAA;AAAA,QAAA,gBAAAC,EAAC4V,IAAA,EAAS;AAAA,QACV,gBAAA5V,EAAC,UAAK,UAAA,OAAA,CAAI;AAAA,MAAA,EAAA,CACd,EAAA,CACJ;AAAA,wBAGCuF,GAAA,EAAO,QAAM,IAAC,SAAQ,QAAO,MAAK,QAAO,SAAS,MAAMwQ,EAAcO,EAAW,IAAI,GAClF,UAAA,gBAAAvW,EAAC,QAAA,EAAK,WAAU,8EACZ,UAAA;AAAA,QAAA,gBAAAC,EAACb,IAAA,EAAY;AAAA,QACb,gBAAAa,EAAC,UAAK,UAAA,OAAA,CAAI;AAAA,MAAA,EAAA,CACd,EAAA,CACJ;AAAA,MAGA,gBAAAA;AAAA,QAACuF;AAAA,QAAA;AAAA,UACG,QAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS,MAAMwQ,EAAcO,EAAW,OAAO;AAAA,UAC/C,UAAU,CAAC1T,GAAM;AAAA,UAEjB,UAAA,gBAAA7C,EAAC,QAAA,EAAK,WAAU,8EACZ,UAAA;AAAA,YAAA,gBAAAC,EAAC6V,IAAA,EAAO;AAAA,YACR,gBAAA7V,EAAC,UAAK,UAAA,UAAA,CAAO;AAAA,UAAA,EAAA,CACjB;AAAA,QAAA;AAAA,MAAA;AAAA,MAIJ,gBAAAA;AAAA,QAACuF;AAAA,QAAA;AAAA,UACG,QAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS,MAAMwQ,EAAcO,EAAW,IAAI;AAAA,UAC5C,UAAU,CAAC1T,GAAM;AAAA,UAEjB,UAAA,gBAAA7C,EAAC,QAAA,EAAK,WAAU,8EACZ,UAAA;AAAA,YAAA,gBAAAC,EAACuW,IAAA,EAAS;AAAA,YACV,gBAAAvW,EAAC,UAAK,UAAA,OAAA,CAAI;AAAA,UAAA,EAAA,CACd;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;AC7IO,SAASwW,KAA0B;AACtC,QAAM,EAAE,MAAA5T,GAAM,UAAA6T,EAAA,IAAa5V,EAAA,GACrB6V,IAAa,IAAI,IAAI,YAAYD,CAAQ,EAAE,SAAA,GAE3ClC,IAAczR,GAAuB,IAAI,GACzC,CAACC,GAASC,CAAU,IAAIZ,EAAS,EAAK;AAG5C,SAAAa,EAAU,MAAM;AACZ,UAAMmS,IAAWb,EAAY;AAC7B,QAAI,CAACa,EAAU;AAEf,UAAMF,IAAW,IAAI;AAAA,MACjB,CAAC,CAACD,CAAK,MAAM;AAET,QAAAjS,EAAW,CAACiS,EAAM,cAAc;AAAA,MACpC;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,IACf;AAGJ,WAAAC,EAAS,QAAQE,CAAQ,GAElB,MAAM;AACT,MAAAF,EAAS,WAAA;AAAA,IACb;AAAA,EACJ,GAAG,CAAA,CAAE,GAGD,gBAAAnV,EAAC,OAAA,EAAI,WAAU,2EACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAEG,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,KAAKuU,GAAa,WAAU,wBAAuB;AAAA,MACxD,gBAAAvU;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAWmB;AAAA,YACP;AAAA,YACA4B,IACM,+KACA;AAAA,UAAA;AAAA,UAEb,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAID,gBAAA/C,EAAC,OAAA,EAAI,WAAU,mCACX,UAAA,gBAAAA;AAAA,QAACgE;AAAA,QAAA;AAAA,UACG,iBAAe;AAAA,UACf,aAAY;AAAA,UACZ,MAAK;AAAA,UACL,OAAM;AAAA,QAAA;AAAA,MAAA,GAEd;AAAA,MAGCpB,GAAM,cACH,gBAAA7C,EAAC,OAAA,EAAI,WAAU,6CACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,0BACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,kBAAiB,UAAA,eAAW;AAAA,4BAC1C,OAAA,EAAI,WAAU,gDACV,UAAAsB,GAAmBsB,EAAK,SAAS,EAAA,CACtC;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,QACA,gBAAA5C;AAAA,UAAC6B;AAAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,YAAYe,EAAK;AAAA,YACjB,WAAU;AAAA,YACV,eAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAClB,GACJ;AAAA,MAqBJ,gBAAA5C,EAAC,MAAA,EAAG,WAAU,0BAAA,CAA0B;AAAA,MAExC,gBAAAD,EAAC,OAAA,EAAI,WAAU,sDACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAK,UAAA,iBAAA,CAAc;AAAA,QACpB,gBAAAA;AAAA,UAACgE;AAAA,UAAA;AAAA,YACG,iBAAe;AAAA,YACf,aACI;AAAA,YAEJ,MAAK;AAAA,YACL,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACV,GACJ;AAAA,MAGCpB,GAAM,eAAe,SAClBA,GAAM,eAAe,MAAM,CAAC+T,MACxB,gBAAA5W,EAAC,OAAA,EAAyB,WAAU,6CAChC,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,gCACV,UAAA2W,EAAO,kBAAkB,QAAQ,GAAG,GAAG,OAAO,GAAG,KAAK,kBAAA,CAC3D;AAAA,4BACC,OAAA,EAAI,WAAU,gDACV,UAAArV,GAAmBqV,EAAO,OAAO,EAAA,CACtC;AAAA,QAAA,EAAA,CACJ,GACJ,GACJ;AAAA,QACA,gBAAA3W;AAAA,UAAC6B;AAAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,YAAY8U,EAAO;AAAA,YACnB,WAAU;AAAA,YACV,eAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAClB,KAlBMA,EAAO,OAmBjB,CACH,IAED,gBAAA5W,EAAC,OAAA,EAAI,WAAU,yHAAwH,UAAA;AAAA,QAAA;AAAA,0BAElI,MAAA,EAAG;AAAA,QAAE;AAAA,0BAEL,MAAA,EAAG;AAAA,QAAE;AAAA,MAAA,EAAA,CAEV;AAAA,IAAA,GAER;AAAA,IAEA,gBAAAA;AAAA,MAACwF;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS,MAAM;AACX,iBAAO,KAAK,GAAGmR,CAAU,sBAAsB,QAAQ;AAAA,QAC3D;AAAA,QACA,SAAS;AAAA,QAET,UAAA;AAAA,UAAA,gBAAA1W,EAAC4V,IAAA,EAAS,WAAU,qBAAA,CAAqB;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAE/C,GACJ;AAER;ACpKA,SAAwBgB,GAAe9W,GAAsC;AACzE,SACI,gBAAAE,EAAC,OAAA,EAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,KAAI,SAAQ,YAAW,MAAK,QAAQ,GAAGF,GAC7F,UAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,gDAA+C,QAAO,WAAU,aAAY,WAAU,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC9I;AAER;ACNA,SAAS6W,GAAc/W,GAAsC;AACzD,SACI,gBAAAE,EAAC,OAAA,EAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAQ,GAAGF,GAC/F,4BAAC,KAAA,EACG,UAAA;AAAA,IAAA,gBAAAE,EAAC,UAAA,EAAO,IAAG,OAAM,IAAG,OAAM,GAAE,OAAM,MAAK,SAAQ,aAAY,MAAA,CAAM;AAAA,IACjE,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB,EAAA,CACJ,EAAA,CACJ;AAER;AChBO,MAAM8W,KAAa,CAAChX,MACvB,gBAAAC,EAAC,OAAA,EAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAQ,GAAGD,GAC/F,UAAA;AAAA,EAAA,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EACT,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EACT,gBAAAA,EAAC,KAAA,EAAE,QAAO,6BACN,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,GAAE;AAAA,MACF,MAAK;AAAA,IAAA;AAAA,EAAA,GACb;AAAA,oBACC,QAAA,EACG,UAAA,gBAAAD;AAAA,IAAC;AAAA,IAAA;AAAA,MAAO,IAAG;AAAA,MAAsB,GAAE;AAAA,MAAU,GAAE;AAAA,MAAS,OAAM;AAAA,MAAU,QAAO;AAAA,MAC3E,aAAY;AAAA,MAAiB,2BAA0B;AAAA,MACvD,UAAA;AAAA,QAAA,gBAAAC,EAAC,WAAA,EAAQ,cAAa,KAAI,QAAO,sBAAqB;AAAA,QACtD,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAAc,IAAG;AAAA,YAAc,MAAK;AAAA,YAAS,QAAO;AAAA,YACjD,QAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QACX,gBAAAA,EAAC,YAAA,EAAS,IAAG,IAAA,CAAI;AAAA,QACjB,gBAAAA,EAAC,kBAAA,EAAe,cAAa,IAAA,CAAI;AAAA,QACjC,gBAAAA,EAAC,eAAA,EAAY,KAAI,aAAY,UAAS,OAAM;AAAA,QAC5C,gBAAAA,EAAC,iBAAA,EAAc,MAAK,UAAS,QAAO,mEAAkE;AAAA,0BACrG,WAAA,EAAQ,MAAK,UAAS,KAAI,sBAAqB,QAAO,gCAA+B;AAAA,QACtF,gBAAAA,EAAC,aAAQ,MAAK,UAAS,IAAG,iBAAgB,KAAI,gCAA+B,QAAO,QAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,EAChG,CACJ;AAAA,GACJ,GCVE+W,KAAS,CAAC,EAAE,KAAAvN,GAAK,KAAAwN,GAAK,OAAAC,GAAO,WAAAtW,GAAW,GAAGb,QAA2B;AACxE,QAAM,CAACoX,GAAQC,CAAS,IAAI/U,EAAS,EAAK;AAE1C,SACI,gBAAApC,EAAAyD,GAAA,EACK,UAAA,CAACyT,KAAU1N,IACR,gBAAAxJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAKwJ;AAAA,MACL,KAAAwN;AAAA,MACA,OAAAC;AAAA,MACA,SAAS,MAAME,EAAU,EAAI;AAAA,MAC7B,WAAWhW,EAAG,0CAA0CR,CAAS;AAAA,IAAA;AAAA,EAAA,IAGrE,gBAAAX,EAAC8W,IAAA,EAAW,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA,GAAW,GAAGhX,EAAA,CAAO,EAAA,CAEzE;AAER;AAEO,SAASsX,KAAgB;AAC5B,QAAM,EAAE,UAAAX,GAAU,UAAA7V,GAAU,aAAAoV,GAAa,iBAAAC,GAAiB,iBAAAC,EAAA,IAAoBrV,EAAA,GACxE,CAAC2T,GAAgBC,CAAiB,IAAIrS,EAAiB,EAAE,GACzDiV,IAAOzW,GAAU,QAAQ,CAAA,GAGzB0W,IAAU,IAAI,IAAI,SAASb,CAAQ,EAAE,SAAA;AAE3C,SACI,gBAAA1W,EAAC,OAAA,EAAI,WAAU,4DAEX,UAAA;AAAA,IAAA,gBAAAC,EAAC,SAAI,WAAU,qGACX,UAAA,gBAAAA,EAAC,QAAA,EAAK,qBAAO,EAAA,CAQjB;AAAA,IAECiW,IACG,gBAAAjW,EAACqV,IAAA,EAAgB,SAAQ,6BAA4B,SAAS,MAAMa,EAAgB,EAAI,EAAA,CAAG,IAC3FF,KAAeqB,GAAM,SACrB,gBAAAtX,EAAC,OAAA,EAAI,WAAU,4CAEX,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,yCACX,UAAA,gBAAAA;AAAA,QAAC8O;AAAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,MAAK;AAAA,UACL,aAAW;AAAA,UACX,OAAO0F;AAAA,UACP,eAAeC;AAAA,UAEd,UAAA4C,EAAK,IAAI,CAAC5B,GAAG8B,MAEN,gBAAAvX,EAAC,SACG,UAAA,gBAAAD,EAAC+R,IAAA,EAAc,OAAOyF,EAAI,SAAA,GAAY,WAAU,WAC5C,UAAA;AAAA,YAAA,gBAAAvX,EAAC0S,MAAiB,SAAO,IACrB,UAAA,gBAAA3S,EAAC,OAAA,EAAI,WAAU,kFACX,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6DACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,oBACX,UAAA,gBAAAA;AAAA,kBAAC+W;AAAA,kBAAA;AAAA,oBACG,KAAKtB,EAAE,iBAAiBA,EAAE;AAAA,oBAC1B,KAAKA,EAAE;AAAA,oBACP,WAAU;AAAA,oBACV,QAAO;AAAA,oBACP,OAAM;AAAA,kBAAA;AAAA,gBAAA,GAEd;AAAA,gBACA,gBAAAzV,EAAC,QAAA,EAAK,WAAU,2FACX,UAAAyV,EAAE,MAAM,oBAAA,KAAyBA,EAAE,UAAU,GAAA,CAClD;AAAA,cAAA,GACJ;AAAA,cACA,gBAAAzV,EAAC,OAAA,EAAI,WAAU,oFACX,UAAA,gBAAAA;AAAA,gBAAC4W;AAAA,gBAAA;AAAA,kBACG,WAAW,GAAGpC,MAAmB+C,EAAI,SAAA,IAAa,KAAK,eAAe;AAAA,gBAAA;AAAA,cAAA,EAC1E,CACJ;AAAA,YAAA,EAAA,CACJ,EAAA,CACJ;AAAA,YACA,gBAAAvX,EAAC6S,IAAA,EACG,UAAA,gBAAA7S,EAAC,OAAA,EAAI,WAAU,2CACV,UAAAyV,EAAE,MAAM,IAAI,CAACvE,MACV,gBAAAnR,EAAC,OAAA,EAAuB,WAAU,eAC7B,UAAA;AAAA,cAAAmR,EAAK,cACF,gBAAAlR,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA,gBAAAA,EAAC6W,MAAc,EAAA,CACnB;AAAA,cAEH3F,EAAK,iBACF,gBAAAlR,EAAC,OAAA,EAAI,WAAU,wDACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8FAA6F,UAAA,WAAA,CAE5G,GACJ;AAAA,cAEJ,gBAAAA;AAAA,gBAAC+W;AAAA,gBAAA;AAAA,kBACG,KAAK7F,EAAK,cAAcA,EAAK,OAAO;AAAA,kBACpC,KAAKA,EAAK;AAAA,kBACV,WAAU;AAAA,kBACV,QAAO;AAAA,kBACP,OAAM;AAAA,kBACN,OAAOA,EAAK,aAAaA,EAAK,QAAQA,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC/C,EAAA,GApBMA,EAAK,OAqBf,CACH,EAAA,CACL,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ,EAAA,GArDMqG,EAAI,UAsDd,CAEP;AAAA,QAAA;AAAA,MAAA,GAET;AAAA,MAGA,gBAAAxX,EAAC,OAAA,EAAI,WAAU,2HAA0H,UAAA;AAAA,QAAA;AAAA,QAErI,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,MAAMsX;AAAA,YACN,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,WAAW7N,GAAe;AAAA,cACtB,SAAS;AAAA,cACT,MAAM;AAAA,cACN,OAAO;AAAA,YAAA,CACV;AAAA,YACJ,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ,IAEA,gBAAAzJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,UACA6U,IAAc,oBAAoB;AAAA,QAAA;AAAA,QAGrC,UAAAA,IACK;AAAA;AAAA,iCACA;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,GAER;AAER;ACjKO,MAAMwB,KAAoB,CAAC;AAAA,EAC9B,OAAAC;AAAA,EACA,OAAArO;AAAA,EACA,gBAAAsO;AAAA,EACA,gBAAAC;AACJ,MAcQ,gBAAA5X,EAAC,QAAA,EAAK,WAAU,gCACX,UAAA;AAAA,EAAA0X,EAAM,UACH,gBAAAzX;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAKyX,EAAM;AAAA,MACX,KAAKA,EAAM;AAAA,MACX,WAAWtW,EAAG,8BAA8BuW,CAAc;AAAA,IAAA;AAAA,EAAA,IAG9D,gBAAA1X,EAACS,IAAA,EAAY,WAAWU,EAAG,8BAA8BuW,CAAc,GAAG;AAAA,EAG7EtO,GAAO,WACJ,gBAAApJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWmB;AAAA,QACP;AAAA,QACAwW;AAAA,MAAA;AAAA,MAGJ,UAAA,gBAAA3X;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAKoJ,EAAM;AAAA,UACX,KAAKE,GAAYF,EAAM,EAAE,KAAKA,EAAM;AAAA,UACpC,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACd;AAAA,EAAA;AACJ,GAER;ACzCD,SAASwO,KAAkB;AAC9B,QAAM,EAAE,UAAAhX,GAAU,aAAAoV,GAAa,iBAAAC,GAAiB,iBAAAC,GAAiB,qBAAAtC,EAAA,IAAwBiE,GAAA,GAEnFzB,IAASxV,GAAU,UAAU,CAAA,GAC7BkX,IAAalX,GAAU,cAAc;AAE3C,SACI,gBAAAb,EAAC,OAAA,EAAI,WAAU,4DAEX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gEACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,UAAK,UAAA,YAAA,CAAS;AAAA,MACf,gBAAAA,EAAC,OAAA,EAAI,WAAU,uBACX,4BAAC,QAAA,EAAK,WAAU,gDAEX,UAAAiW,IACK,gBACA,CAACD,KAAe8B,MAAe,SAC7B,MACA5P;AAAA,QACI4P;AAAA,QACA1B,EAAO,CAAC,GAAG;AAAA,QACXA,GAAQ,KAAK,CAACX,MAAM,OAAOA,EAAE,UAAU,MAAM,EAAE;AAAA,MAAA,GAE/D,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,IAECQ,sBACIZ,IAAA,EAAgB,SAAQ,6BAA4B,SAAS,MAAMa,EAAgB,EAAI,EAAA,CAAG,IAC3FF,KAAeI,GAAQ,2BACtB,OAAA,EAAI,WAAU,mFACV,UAAAA,EAAO,IAAI,CAACX,GAAGF,MAAU;AACtB,UAAIE,GAAG,KAAM,QAAO;AACpB,YAAMsC,IAAYtC,EAAE,OAChB,gBAAAzV,EAAC,OAAA,EAAI,KAAKyV,EAAE,MAAM,KAAKA,EAAE,QAAQ,WAAU,8BAA6B,IAExE,gBAAAzV,EAACS,IAAA,EAAY,WAAU,cAAa,GAGlC2I,IAAQC,GAAoBoM,EAAE,OAAO;AAE3C,aACI,gBAAA1V,EAAC,OAAA,EAAmD,WAAU,aAC1D,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gEACX,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wCACV,UAAA;AAAA,YAAA6T,IACG,gBAAA5T;AAAA,cAACwX;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,kBACH,MAAM/B,GAAG;AAAA,kBACT,SAASA,GAAG,QAAQ;AAAA,gBAAA;AAAA,gBAExB,OAAO;AAAA,kBACH,IAAIA,GAAG;AAAA,kBACP,MAAMrM,GAAO,QAAQ;AAAA,kBACrB,SAASA,GAAO,WAAW;AAAA,gBAAA;AAAA,cAC/B;AAAA,YAAA,IAGJ2O;AAAA,YAEJ,gBAAAhY,EAAC,OAAA,EAAI,WAAU,uDACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,UAAK,WAAU,0CACX,UAAAyV,EAAE,UAAUA,EAAE,MACnB;AAAA,cACC,OAAO,SAASA,EAAE,cAAc,KAAKA,EAAE,mBAAmB,KACvD,gBAAA1V;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAW;AAAA,sDACT0V,EAAE,kBAAkB,IAAI,0BAA0B,qBAAqB;AAAA,kBAExE,UAAA;AAAA,oBAAAA,EAAE,kBAAkB,IAAI,MAAM;AAAA,oBAC9BA,EAAE,eAAe,QAAQ,CAAC;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACjC,EAAA,CAER;AAAA,UAAA,GACJ;AAAA,UAEA,gBAAA1V,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,kBAEX,UAAAkI,EAAeuN,EAAE,QAAQA,EAAE,UAAU,OAAOA,EAAE,UAAU,MAAM,EAAE,GACrE;AAAA,YACA,gBAAA1V,EAAC,QAAA,EAAK,WAAU,+GACZ,UAAA;AAAA,cAAA,gBAAAA,EAAC,QAAA,EACI,UAAA;AAAA,gBAAAsW,GAAiBZ,EAAE,YAAYA,EAAE,UAAUA,EAAE,eAAe;AAAA,gBAAG;AAAA,cAAA,GACpE;AAAA,cACA,gBAAAzV,EAAC,QAAA,EAAK,WAAU,0DACX,YAAE,OAAA,CACP;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,QACCuV,IAAQa,EAAO,SAAS,KAAK,gBAAApW,EAAC,MAAA,EAAG,WAAU,0BAAA,CAA0B;AAAA,MAAA,KAjDhE,GAAGyV,GAAG,OAAO,IAAIA,GAAG,OAAO,aAkDrC;AAAA,IAER,CAAC,GACL,IAEA,gBAAAzV,EAAC,SAAI,WAAU,0GACV,UAAAgW,IAAc,oBAAoB,aAAA,CACvC;AAAA,EAAA,GAER;AAER;AC1GO,SAASgC,GAAyB;AAAA,EACrC,WAAAC;AAAA,EACA,cAAAC;AACJ,GAGG;AACC,QAAM,CAACC,GAAaC,CAAc,IAAIhW,EAAS,EAAK,GAE9CiW,IAAkB,CAACzP,MAA2B;AAChD,IAAAwP,EAAe,EAAI,GACnBF,EAAatP,CAAG,GAChB,WAAW,MAAMwP,EAAe,EAAK,GAAG,GAAG;AAAA,EAC/C;AACA,SACI,gBAAArY,EAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,IAAA,gBAAAC,EAAC,SAAI,WAAU,mFACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,WACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,iEACX,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,SAAS,MAAMqY,EAAgBvP,EAAkB,MAAM;AAAA,UACvD,WAAW3H;AAAA,YACP8W,MAAcnP,EAAkB,SAC1B,uBACA;AAAA,YACN;AAAA,UAAA;AAAA,UAEP,UAAA;AAAA,QAAA;AAAA,MAAA,GAGL;AAAA,MAEA,gBAAA9I,EAAC,OAAA,EAAI,WAAU,iEACX,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,SAAS,MAAMqY,EAAgBvP,EAAkB,IAAI;AAAA,UACrD,WAAW3H;AAAA,YACP8W,MAAcnP,EAAkB,OAAO,uBAAuB;AAAA,YAC9D;AAAA,UAAA;AAAA,UAEP,UAAA;AAAA,QAAA;AAAA,MAAA,EAED,CACJ;AAAA,IAAA,EAAA,CACJ,EAAA,CACJ;AAAA,IACA,gBAAA9I;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,UACA8W,MAAcnP,EAAkB,OAAO,gBAAgB;AAAA,UACvDqP,IAAc,iBAAiB;AAAA,UAC/B;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EACJ,GACJ;AAER;ACvCO,SAASG,GAAe;AAAA,EAC3B,eAAAvC;AAAA,EACA,sBAAAwC;AAAA,EACA,yBAAAC;AAAA,EACA,wBAAAC,IAAyB;AAAA,EACzB,iBAAArS;AACJ,GAAoB;AAEhB,SAAAnD,EAAU,OACNmD,EAAgB0B,GAAuB,OAAO,GAGvC,MAAM;AACT,IAAA1B,EAAgB,MAAS;AAAA,EAC7B,IACD,CAACA,CAAe,CAAC,GAGhB,gBAAApG;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,QACI,gBAAA7D,EAACwC,IAAA,EAAiB,gBAAgB,IAAO,gBAAgB,MAAMuT,EAAcO,EAAW,OAAO,EAAA,CAAG;AAAA,MAEtG,SACI,gBAAAvW,EAAA0D,GAAA,EAEK,UAAA;AAAA,QAAA8U,MAAyBzP,EAAkB,QAAQ,gBAAA9I,EAAC8V,IAAA,EAAc,eAAAC,GAA8B;AAAA,QAEhG,CAACjN,EAAkB,QAAQA,EAAkB,IAAI,EAAE,SAASyP,CAAoB,KAC7E,gBAAAxY,EAAC,OAAA,EAAI,WAAU,iCAEX,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACgY;AAAA,YAAA;AAAA,cACG,WAAWO;AAAA,cACX,cAAcC;AAAA,YAAA;AAAA,UAAA;AAAA,UAGjBD,MAAyBzP,EAAkB,UAAU,gBAAA9I,EAAC4X,IAAA,CAAA,CAAgB;AAAA,UAEtEW,MAAyBzP,EAAkB,QAAQ,gBAAA9I,EAACoX,IAAA,CAAA,CAAc;AAAA,QAAA,GACvE;AAAA,QAIHmB,MAAyBzP,EAAkB,mBAAmB,gBAAA9I,EAACwW,IAAA,CAAA,CAAwB;AAAA,QAEvF+B,MAAyBzP,EAAkB,YACxC,gBAAA9I,EAAC0T,IAAA,EAAkB,aAAa+E,EAAA,CAAwB;AAAA,MAAA,GAEhE;AAAA,MAEJ,QAAQ,gBAAAzY,EAAC2I,IAAA,EAAoB,KAAK4P,GAAsB,QAAQC,EAAA,CAAyB;AAAA,IAAA;AAAA,EAAA;AAGrG;ACzEA,MAAAE,KAAe,IAAA,IAAA,+BAAA,YAAA,GAAA,EAAA;ACAf,SAASC,GAAS7Y,GAAsC;AACpD,SACI,gBAAAC,EAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAA8B,GAAGD,GACxE,UAAA;AAAA,IAAA,gBAAAC,EAAC,KAAA,EAAE,UAAS,yBACR,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEnB,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACnB,GACJ;AAAA,IACA,gBAAAA,EAAC,QAAA,EACG,UAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,mBACT,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC9C,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;ACbO,SAAS4Y,GAAkB,EAAE,QAAAhT,KAA8B;AAC9D,QAAM,EAAE,MAAAhD,GAAM,QAAAiW,GAAQ,UAAApC,EAAA,IAAa5V,EAAA,GAC7BiY,IAAU,IAAI,IAAI,iBAAiBrC,CAAQ,EAAE,SAAA;AAEnD,SACI,gBAAAzW;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAc;AAAA,MACd,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,gBAAc;AAAA,UACd,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,aAAaoD;AAAA,UAAA;AAAA,QACjB;AAAA,MAAA;AAAA,MAGR,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uGACX,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAACwF;AAAA,YAAA;AAAA,cACG,SAAS;AAAA,cACT,QAAM;AAAA,cACN,SAAS,MAAM;AACX,uBAAO,KAAKuT,GAAS,QAAQ;AAAA,cACjC;AAAA,cACA,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAA9Y;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,WAAWmB;AAAA,sBACP;AAAA,oBAAA;AAAA,oBAEP,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAAnB,EAAC2Y,IAAA,EAAS,WAAU,aAAA,CAAa;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAErC,gBAAA3Y;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,KAAK0Y;AAAA,cACL,KAAI;AAAA,cACJ,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,GACJ;AAAA,QAEA,gBAAA3Y,EAAC,OAAA,EAAI,WAAU,+HACX,UAAA;AAAA,UAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,2CAAA,CAA2C;AAAA,UACjE,gBAAA1D,EAAC,OAAA,EAAI,WAAU,wBAAwB,aAAM,KAAA,CAAK;AAAA,QAAA,GACtD;AAAA,0BAEC,OAAA,EAAI,WAAU,iFACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8CACX,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACuF;AAAA,YAAA;AAAA,cACG,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,SAAS,MAAM;AACX,uBAAO,KAAKuT,GAAS,QAAQ;AAAA,cACjC;AAAA,cACH,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAID,gBAAA9Y,EAACuF,KAAO,SAAQ,WAAU,WAAU,aAAY,SAASsT,GAAQ,UAAA,UAAA,CAEjE;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB;AClFA,IAAIE,KAAY,OAAO,gBACnBC,KAAsB,OAAO,uBAC7BC,KAAe,OAAO,UAAU,gBAChCC,KAAe,OAAO,UAAU,sBAChCC,KAAkB,CAACC,GAAKC,GAAKnZ,MAAUmZ,KAAOD,IAAML,GAAUK,GAAKC,GAAK,EAAE,YAAY,IAAM,cAAc,IAAM,UAAU,IAAM,OAAAnZ,EAAK,CAAE,IAAIkZ,EAAIC,CAAG,IAAInZ,GACtJoZ,KAAiB,CAAC9N,GAAGC,MAAM;AAC7B,WAAS8N,KAAQ9N,MAAMA,IAAI,CAAA;AACzB,IAAIwN,GAAa,KAAKxN,GAAG8N,CAAI,KAC3BJ,GAAgB3N,GAAG+N,GAAM9N,EAAE8N,CAAI,CAAC;AACpC,MAAIP;AACF,aAASO,KAAQP,GAAoBvN,CAAC;AACpC,MAAIyN,GAAa,KAAKzN,GAAG8N,CAAI,KAC3BJ,GAAgB3N,GAAG+N,GAAM9N,EAAE8N,CAAI,CAAC;AAEtC,SAAO/N;AACT,GACIgO,KAAY,CAACC,GAAQC,MAAY;AACnC,MAAI1I,IAAS,CAAA;AACb,WAASuI,KAAQE;AACf,IAAIR,GAAa,KAAKQ,GAAQF,CAAI,KAAKG,EAAQ,QAAQH,CAAI,IAAI,MAC7DvI,EAAOuI,CAAI,IAAIE,EAAOF,CAAI;AAC9B,MAAIE,KAAU,QAAQT;AACpB,aAASO,KAAQP,GAAoBS,CAAM;AACzC,MAAIC,EAAQ,QAAQH,CAAI,IAAI,KAAKL,GAAa,KAAKO,GAAQF,CAAI,MAC7DvI,EAAOuI,CAAI,IAAIE,EAAOF,CAAI;AAEhC,SAAOvI;AACT;AAWA,IAAI2I;AAAA,CACH,CAACC,MAAe;AACf,QAAMC,IAAU,MAAMA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM5B,YAAYC,GAASC,GAAsBC,GAAeC,GAAK;AAQ7D,UAPA,KAAK,UAAUH,GACf,KAAK,uBAAuBC,GAG5B,KAAK,UAAU,CAAA,GAEf,KAAK,aAAa,CAAA,GACdD,IAAUD,EAAQ,eAAeC,IAAUD,EAAQ;AACrD,cAAM,IAAI,WAAW,4BAA4B;AACnD,UAAII,IAAM,MAAMA,IAAM;AACpB,cAAM,IAAI,WAAW,yBAAyB;AAChD,WAAK,OAAOH,IAAU,IAAI;AAC1B,UAAIpE,IAAM,CAAA;AACV,eAASwE,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,QAAAxE,EAAI,KAAK,EAAK;AAChB,eAASwE,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,aAAK,QAAQ,KAAKxE,EAAI,MAAK,CAAE,GAC7B,KAAK,WAAW,KAAKA,EAAI,MAAK,CAAE;AAElC,WAAK,qBAAoB;AACzB,YAAMyE,IAAe,KAAK,oBAAoBH,CAAa;AAE3D,UADA,KAAK,cAAcG,CAAY,GAC3BF,KAAO,IAAI;AACb,YAAIG,IAAa;AACjB,iBAASF,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,eAAK,UAAUA,CAAC,GAChB,KAAK,eAAeA,CAAC;AACrB,gBAAMG,IAAU,KAAK,gBAAe;AACpC,UAAIA,IAAUD,MACZH,IAAMC,GACNE,IAAaC,IAEf,KAAK,UAAUH,CAAC;AAAA,QAClB;AAAA,MACF;AACA,MAAAI,EAAO,KAAKL,KAAOA,KAAO,CAAC,GAC3B,KAAK,OAAOA,GACZ,KAAK,UAAUA,CAAG,GAClB,KAAK,eAAeA,CAAG,GACvB,KAAK,aAAa,CAAA;AAAA,IACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,WAAWnY,GAAMyY,GAAK;AAC3B,YAAMC,IAAOZ,EAAW,UAAU,aAAa9X,CAAI;AACnD,aAAO+X,EAAQ,eAAeW,GAAMD,CAAG;AAAA,IACzC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,aAAapR,GAAMoR,GAAK;AAC7B,YAAME,IAAMb,EAAW,UAAU,UAAUzQ,CAAI;AAC/C,aAAO0Q,EAAQ,eAAe,CAACY,CAAG,GAAGF,CAAG;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,OAAO,eAAeC,GAAMD,GAAKG,IAAa,GAAGC,IAAa,IAAIC,IAAO,IAAIC,IAAW,IAAM;AAC5F,UAAI,EAAEhB,EAAQ,eAAea,KAAcA,KAAcC,KAAcA,KAAcd,EAAQ,gBAAgBe,IAAO,MAAMA,IAAO;AAC/H,cAAM,IAAI,WAAW,eAAe;AACtC,UAAId,GACAgB;AACJ,WAAKhB,IAAUY,KAAcZ,KAAW;AACtC,cAAMiB,IAAoBlB,EAAQ,oBAAoBC,GAASS,CAAG,IAAI,GAChES,IAAWC,EAAU,aAAaT,GAAMV,CAAO;AACrD,YAAIkB,KAAYD,GAAmB;AACjC,UAAAD,IAAeE;AACf;AAAA,QACF;AACA,YAAIlB,KAAWa;AACb,gBAAM,IAAI,WAAW,eAAe;AAAA,MACxC;AACA,iBAAWO,KAAU,CAACrB,EAAQ,IAAI,QAAQA,EAAQ,IAAI,UAAUA,EAAQ,IAAI,IAAI;AAC9E,QAAIgB,KAAYC,KAAgBjB,EAAQ,oBAAoBC,GAASoB,CAAM,IAAI,MAC7EX,IAAMW;AAEV,UAAIC,IAAK,CAAA;AACT,iBAAWV,KAAOD,GAAM;AACtB,QAAAY,EAAWX,EAAI,KAAK,UAAU,GAAGU,CAAE,GACnCC,EAAWX,EAAI,UAAUA,EAAI,KAAK,iBAAiBX,CAAO,GAAGqB,CAAE;AAC/D,mBAAW1P,KAAKgP,EAAI,QAAO;AACzB,UAAAU,EAAG,KAAK1P,CAAC;AAAA,MACb;AACA,MAAA6O,EAAOa,EAAG,UAAUL,CAAY;AAChC,YAAMO,IAAmBxB,EAAQ,oBAAoBC,GAASS,CAAG,IAAI;AACrE,MAAAD,EAAOa,EAAG,UAAUE,CAAgB,GACpCD,EAAW,GAAG,KAAK,IAAI,GAAGC,IAAmBF,EAAG,MAAM,GAAGA,CAAE,GAC3DC,EAAW,IAAI,IAAID,EAAG,SAAS,KAAK,GAAGA,CAAE,GACzCb,EAAOa,EAAG,SAAS,KAAK,CAAC;AACzB,eAASG,IAAU,KAAKH,EAAG,SAASE,GAAkBC,KAAW;AAC/D,QAAAF,EAAWE,GAAS,GAAGH,CAAE;AAC3B,UAAInB,IAAgB,CAAA;AACpB,aAAOA,EAAc,SAAS,IAAImB,EAAG;AACnC,QAAAnB,EAAc,KAAK,CAAC;AACtB,aAAAmB,EAAG,QAAQ,CAAC1P,GAAGyO,MAAMF,EAAcE,MAAM,CAAC,KAAKzO,KAAK,KAAKyO,IAAI,EAAE,GACxD,IAAIL,EAAQC,GAASS,GAAKP,GAAeY,CAAI;AAAA,IACtD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAUW,GAAGC,GAAG;AACd,aAAO,KAAKD,KAAKA,IAAI,KAAK,QAAQ,KAAKC,KAAKA,IAAI,KAAK,QAAQ,KAAK,QAAQA,CAAC,EAAED,CAAC;AAAA,IAChF;AAAA;AAAA,IAEA,aAAa;AACX,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA,IAGA,uBAAuB;AACrB,eAASrB,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,aAAK,kBAAkB,GAAGA,GAAGA,IAAI,KAAK,CAAC,GACvC,KAAK,kBAAkBA,GAAG,GAAGA,IAAI,KAAK,CAAC;AAEzC,WAAK,kBAAkB,GAAG,CAAC,GAC3B,KAAK,kBAAkB,KAAK,OAAO,GAAG,CAAC,GACvC,KAAK,kBAAkB,GAAG,KAAK,OAAO,CAAC;AACvC,YAAMuB,IAAc,KAAK,6BAA4B,GAC/CC,IAAWD,EAAY;AAC7B,eAASvB,IAAI,GAAGA,IAAIwB,GAAUxB;AAC5B,iBAASyB,IAAI,GAAGA,IAAID,GAAUC;AAC5B,UAAMzB,KAAK,KAAKyB,KAAK,KAAKzB,KAAK,KAAKyB,KAAKD,IAAW,KAAKxB,KAAKwB,IAAW,KAAKC,KAAK,KACjF,KAAK,qBAAqBF,EAAYvB,CAAC,GAAGuB,EAAYE,CAAC,CAAC;AAG9D,WAAK,eAAe,CAAC,GACrB,KAAK,YAAW;AAAA,IAClB;AAAA;AAAA;AAAA,IAGA,eAAef,GAAM;AACnB,YAAMzR,IAAO,KAAK,qBAAqB,cAAc,IAAIyR;AACzD,UAAIgB,IAAMzS;AACV,eAAS+Q,IAAI,GAAGA,IAAI,IAAIA;AACtB,QAAA0B,IAAMA,KAAO,KAAKA,MAAQ,KAAK;AACjC,YAAMC,KAAQ1S,KAAQ,KAAKyS,KAAO;AAClC,MAAAtB,EAAOuB,MAAS,MAAM,CAAC;AACvB,eAAS3B,IAAI,GAAGA,KAAK,GAAGA;AACtB,aAAK,kBAAkB,GAAGA,GAAG4B,EAAOD,GAAM3B,CAAC,CAAC;AAC9C,WAAK,kBAAkB,GAAG,GAAG4B,EAAOD,GAAM,CAAC,CAAC,GAC5C,KAAK,kBAAkB,GAAG,GAAGC,EAAOD,GAAM,CAAC,CAAC,GAC5C,KAAK,kBAAkB,GAAG,GAAGC,EAAOD,GAAM,CAAC,CAAC;AAC5C,eAAS3B,IAAI,GAAGA,IAAI,IAAIA;AACtB,aAAK,kBAAkB,KAAKA,GAAG,GAAG4B,EAAOD,GAAM3B,CAAC,CAAC;AACnD,eAASA,IAAI,GAAGA,IAAI,GAAGA;AACrB,aAAK,kBAAkB,KAAK,OAAO,IAAIA,GAAG,GAAG4B,EAAOD,GAAM3B,CAAC,CAAC;AAC9D,eAASA,IAAI,GAAGA,IAAI,IAAIA;AACtB,aAAK,kBAAkB,GAAG,KAAK,OAAO,KAAKA,GAAG4B,EAAOD,GAAM3B,CAAC,CAAC;AAC/D,WAAK,kBAAkB,GAAG,KAAK,OAAO,GAAG,EAAI;AAAA,IAC/C;AAAA;AAAA;AAAA,IAGA,cAAc;AACZ,UAAI,KAAK,UAAU;AACjB;AACF,UAAI0B,IAAM,KAAK;AACf,eAAS1B,IAAI,GAAGA,IAAI,IAAIA;AACtB,QAAA0B,IAAMA,KAAO,KAAKA,MAAQ,MAAM;AAClC,YAAMC,IAAO,KAAK,WAAW,KAAKD;AAClC,MAAAtB,EAAOuB,MAAS,MAAM,CAAC;AACvB,eAAS3B,IAAI,GAAGA,IAAI,IAAIA,KAAK;AAC3B,cAAM6B,IAAQD,EAAOD,GAAM3B,CAAC,GACtB1O,IAAI,KAAK,OAAO,KAAK0O,IAAI,GACzBzO,IAAI,KAAK,MAAMyO,IAAI,CAAC;AAC1B,aAAK,kBAAkB1O,GAAGC,GAAGsQ,CAAK,GAClC,KAAK,kBAAkBtQ,GAAGD,GAAGuQ,CAAK;AAAA,MACpC;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,kBAAkBR,GAAGC,GAAG;AACtB,eAASQ,IAAK,IAAIA,KAAM,GAAGA;AACzB,iBAASC,IAAK,IAAIA,KAAM,GAAGA,KAAM;AAC/B,gBAAM7a,IAAO,KAAK,IAAI,KAAK,IAAI6a,CAAE,GAAG,KAAK,IAAID,CAAE,CAAC,GAC1CE,IAAKX,IAAIU,GACTE,IAAKX,IAAIQ;AACf,UAAI,KAAKE,KAAMA,IAAK,KAAK,QAAQ,KAAKC,KAAMA,IAAK,KAAK,QACpD,KAAK,kBAAkBD,GAAIC,GAAI/a,KAAQ,KAAKA,KAAQ,CAAC;AAAA,QACzD;AAAA,IAEJ;AAAA;AAAA;AAAA,IAGA,qBAAqBma,GAAGC,GAAG;AACzB,eAASQ,IAAK,IAAIA,KAAM,GAAGA;AACzB,iBAASC,IAAK,IAAIA,KAAM,GAAGA;AACzB,eAAK,kBAAkBV,IAAIU,GAAIT,IAAIQ,GAAI,KAAK,IAAI,KAAK,IAAIC,CAAE,GAAG,KAAK,IAAID,CAAE,CAAC,KAAK,CAAC;AAAA,IAEtF;AAAA;AAAA;AAAA,IAGA,kBAAkBT,GAAGC,GAAGY,GAAQ;AAC9B,WAAK,QAAQZ,CAAC,EAAED,CAAC,IAAIa,GACrB,KAAK,WAAWZ,CAAC,EAAED,CAAC,IAAI;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA,IAIA,oBAAoBpS,GAAM;AACxB,YAAMkT,IAAM,KAAK,SACX9B,IAAM,KAAK;AACjB,UAAIpR,EAAK,UAAU0Q,EAAQ,oBAAoBwC,GAAK9B,CAAG;AACrD,cAAM,IAAI,WAAW,kBAAkB;AACzC,YAAM+B,IAAYzC,EAAQ,4BAA4BU,EAAI,OAAO,EAAE8B,CAAG,GAChEE,IAAc1C,EAAQ,wBAAwBU,EAAI,OAAO,EAAE8B,CAAG,GAC9DG,IAAe,KAAK,MAAM3C,EAAQ,qBAAqBwC,CAAG,IAAI,CAAC,GAC/DI,IAAiBH,IAAYE,IAAeF,GAC5CI,IAAgB,KAAK,MAAMF,IAAeF,CAAS;AACzD,UAAIK,IAAS,CAAA;AACb,YAAMC,IAAQ/C,EAAQ,0BAA0B0C,CAAW;AAC3D,eAASrC,IAAI,GAAG2C,IAAI,GAAG3C,IAAIoC,GAAWpC,KAAK;AACzC,YAAI4C,IAAM3T,EAAK,MAAM0T,GAAGA,IAAIH,IAAgBH,KAAerC,IAAIuC,IAAiB,IAAI,EAAE;AACtF,QAAAI,KAAKC,EAAI;AACT,cAAMC,IAAMlD,EAAQ,4BAA4BiD,GAAKF,CAAK;AAC1D,QAAI1C,IAAIuC,KACNK,EAAI,KAAK,CAAC,GACZH,EAAO,KAAKG,EAAI,OAAOC,CAAG,CAAC;AAAA,MAC7B;AACA,UAAIC,IAAS,CAAA;AACb,eAAS9C,IAAI,GAAGA,IAAIyC,EAAO,CAAC,EAAE,QAAQzC;AACpC,QAAAyC,EAAO,QAAQ,CAACM,GAAOtB,MAAM;AAC3B,WAAIzB,KAAKwC,IAAgBH,KAAeZ,KAAKc,MAC3CO,EAAO,KAAKC,EAAM/C,CAAC,CAAC;AAAA,QACxB,CAAC;AAEH,aAAAI,EAAO0C,EAAO,UAAUR,CAAY,GAC7BQ;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,cAAc7T,GAAM;AAClB,UAAIA,EAAK,UAAU,KAAK,MAAM0Q,EAAQ,qBAAqB,KAAK,OAAO,IAAI,CAAC;AAC1E,cAAM,IAAI,WAAW,kBAAkB;AACzC,UAAIK,IAAI;AACR,eAASgD,IAAQ,KAAK,OAAO,GAAGA,KAAS,GAAGA,KAAS,GAAG;AACtD,QAAIA,KAAS,MACXA,IAAQ;AACV,iBAASC,IAAO,GAAGA,IAAO,KAAK,MAAMA;AACnC,mBAASxB,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,kBAAMJ,IAAI2B,IAAQvB,GAEZH,KADU0B,IAAQ,IAAI,MAAM,IACf,KAAK,OAAO,IAAIC,IAAOA;AAC1C,YAAI,CAAC,KAAK,WAAW3B,CAAC,EAAED,CAAC,KAAKrB,IAAI/Q,EAAK,SAAS,MAC9C,KAAK,QAAQqS,CAAC,EAAED,CAAC,IAAIO,EAAO3S,EAAK+Q,MAAM,CAAC,GAAG,KAAKA,IAAI,EAAE,GACtDA;AAAA,UAEJ;AAAA,MAEJ;AACA,MAAAI,EAAOJ,KAAK/Q,EAAK,SAAS,CAAC;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAUyR,GAAM;AACd,UAAIA,IAAO,KAAKA,IAAO;AACrB,cAAM,IAAI,WAAW,yBAAyB;AAChD,eAASY,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,iBAASD,IAAI,GAAGA,IAAI,KAAK,MAAMA,KAAK;AAClC,cAAI6B;AACJ,kBAAQxC,GAAI;AAAA,YACV,KAAK;AACH,cAAAwC,KAAU7B,IAAIC,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACH,cAAA4B,IAAS5B,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACH,cAAA4B,IAAS7B,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACH,cAAA6B,KAAU7B,IAAIC,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACH,cAAA4B,KAAU,KAAK,MAAM7B,IAAI,CAAC,IAAI,KAAK,MAAMC,IAAI,CAAC,KAAK,KAAK;AACxD;AAAA,YACF,KAAK;AACH,cAAA4B,IAAS7B,IAAIC,IAAI,IAAID,IAAIC,IAAI,KAAK;AAClC;AAAA,YACF,KAAK;AACH,cAAA4B,KAAU7B,IAAIC,IAAI,IAAID,IAAIC,IAAI,KAAK,KAAK;AACxC;AAAA,YACF,KAAK;AACH,cAAA4B,MAAW7B,IAAIC,KAAK,IAAID,IAAIC,IAAI,KAAK,KAAK;AAC1C;AAAA,YACF;AACE,oBAAM,IAAI,MAAM,aAAa;AAAA,UAC3C;AACU,UAAI,CAAC,KAAK,WAAWA,CAAC,EAAED,CAAC,KAAK6B,MAC5B,KAAK,QAAQ5B,CAAC,EAAED,CAAC,IAAI,CAAC,KAAK,QAAQC,CAAC,EAAED,CAAC;AAAA,QAC3C;AAAA,IAEJ;AAAA;AAAA;AAAA,IAGA,kBAAkB;AAChB,UAAIyB,IAAS;AACb,eAASxB,IAAI,GAAGA,IAAI,KAAK,MAAMA,KAAK;AAClC,YAAI6B,IAAW,IACXC,IAAO,GACPC,IAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAShC,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,UAAI,KAAK,QAAQC,CAAC,EAAED,CAAC,KAAK8B,KACxBC,KACIA,KAAQ,IACVN,KAAUnD,EAAQ,aACXyD,IAAO,KACdN,QAEF,KAAK,wBAAwBM,GAAMC,CAAU,GACxCF,MACHL,KAAU,KAAK,2BAA2BO,CAAU,IAAI1D,EAAQ,aAClEwD,IAAW,KAAK,QAAQ7B,CAAC,EAAED,CAAC,GAC5B+B,IAAO;AAGX,QAAAN,KAAU,KAAK,+BAA+BK,GAAUC,GAAMC,CAAU,IAAI1D,EAAQ;AAAA,MACtF;AACA,eAAS0B,IAAI,GAAGA,IAAI,KAAK,MAAMA,KAAK;AAClC,YAAI8B,IAAW,IACXG,IAAO,GACPD,IAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAS/B,IAAI,GAAGA,IAAI,KAAK,MAAMA;AAC7B,UAAI,KAAK,QAAQA,CAAC,EAAED,CAAC,KAAK8B,KACxBG,KACIA,KAAQ,IACVR,KAAUnD,EAAQ,aACX2D,IAAO,KACdR,QAEF,KAAK,wBAAwBQ,GAAMD,CAAU,GACxCF,MACHL,KAAU,KAAK,2BAA2BO,CAAU,IAAI1D,EAAQ,aAClEwD,IAAW,KAAK,QAAQ7B,CAAC,EAAED,CAAC,GAC5BiC,IAAO;AAGX,QAAAR,KAAU,KAAK,+BAA+BK,GAAUG,GAAMD,CAAU,IAAI1D,EAAQ;AAAA,MACtF;AACA,eAAS2B,IAAI,GAAGA,IAAI,KAAK,OAAO,GAAGA;AACjC,iBAASD,IAAI,GAAGA,IAAI,KAAK,OAAO,GAAGA,KAAK;AACtC,gBAAMQ,IAAQ,KAAK,QAAQP,CAAC,EAAED,CAAC;AAC/B,UAAIQ,KAAS,KAAK,QAAQP,CAAC,EAAED,IAAI,CAAC,KAAKQ,KAAS,KAAK,QAAQP,IAAI,CAAC,EAAED,CAAC,KAAKQ,KAAS,KAAK,QAAQP,IAAI,CAAC,EAAED,IAAI,CAAC,MAC1GyB,KAAUnD,EAAQ;AAAA,QACtB;AAEF,UAAI4D,IAAO;AACX,iBAAW/H,KAAO,KAAK;AACrB,QAAA+H,IAAO/H,EAAI,OAAO,CAACgI,GAAK3B,MAAU2B,KAAO3B,IAAQ,IAAI,IAAI0B,CAAI;AAC/D,YAAME,IAAQ,KAAK,OAAO,KAAK,MACzBd,IAAI,KAAK,KAAK,KAAK,IAAIY,IAAO,KAAKE,IAAQ,EAAE,IAAIA,CAAK,IAAI;AAChE,aAAArD,EAAO,KAAKuC,KAAKA,KAAK,CAAC,GACvBG,KAAUH,IAAIhD,EAAQ,YACtBS,EAAO,KAAK0C,KAAUA,KAAU,OAAO,GAChCA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,+BAA+B;AAC7B,UAAI,KAAK,WAAW;AAClB,eAAO,CAAA;AACJ;AACH,cAAMtB,IAAW,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI,GAC1CkC,IAAO,KAAK,WAAW,KAAK,KAAK,KAAK,MAAM,KAAK,UAAU,IAAI,MAAMlC,IAAW,IAAI,EAAE,IAAI;AAChG,YAAIsB,IAAS,CAAC,CAAC;AACf,iBAASa,IAAM,KAAK,OAAO,GAAGb,EAAO,SAAStB,GAAUmC,KAAOD;AAC7D,UAAAZ,EAAO,OAAO,GAAG,GAAGa,CAAG;AACzB,eAAOb;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,qBAAqBX,GAAK;AAC/B,UAAIA,IAAMxC,EAAQ,eAAewC,IAAMxC,EAAQ;AAC7C,cAAM,IAAI,WAAW,6BAA6B;AACpD,UAAImD,KAAU,KAAKX,IAAM,OAAOA,IAAM;AACtC,UAAIA,KAAO,GAAG;AACZ,cAAMX,IAAW,KAAK,MAAMW,IAAM,CAAC,IAAI;AACvC,QAAAW,MAAW,KAAKtB,IAAW,MAAMA,IAAW,IACxCW,KAAO,MACTW,KAAU;AAAA,MACd;AACA,aAAA1C,EAAO,OAAO0C,KAAUA,KAAU,KAAK,GAChCA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,oBAAoBX,GAAK9B,GAAK;AACnC,aAAO,KAAK,MAAMV,EAAQ,qBAAqBwC,CAAG,IAAI,CAAC,IAAIxC,EAAQ,wBAAwBU,EAAI,OAAO,EAAE8B,CAAG,IAAIxC,EAAQ,4BAA4BU,EAAI,OAAO,EAAE8B,CAAG;AAAA,IACrK;AAAA;AAAA;AAAA,IAGA,OAAO,0BAA0ByB,GAAQ;AACvC,UAAIA,IAAS,KAAKA,IAAS;AACzB,cAAM,IAAI,WAAW,qBAAqB;AAC5C,UAAId,IAAS,CAAA;AACb,eAAS9C,IAAI,GAAGA,IAAI4D,IAAS,GAAG5D;AAC9B,QAAA8C,EAAO,KAAK,CAAC;AACf,MAAAA,EAAO,KAAK,CAAC;AACb,UAAIe,IAAO;AACX,eAAS7D,IAAI,GAAGA,IAAI4D,GAAQ5D,KAAK;AAC/B,iBAASyB,IAAI,GAAGA,IAAIqB,EAAO,QAAQrB;AACjC,UAAAqB,EAAOrB,CAAC,IAAI9B,EAAQ,oBAAoBmD,EAAOrB,CAAC,GAAGoC,CAAI,GACnDpC,IAAI,IAAIqB,EAAO,WACjBA,EAAOrB,CAAC,KAAKqB,EAAOrB,IAAI,CAAC;AAE7B,QAAAoC,IAAOlE,EAAQ,oBAAoBkE,GAAM,CAAC;AAAA,MAC5C;AACA,aAAOf;AAAA,IACT;AAAA;AAAA,IAEA,OAAO,4BAA4B7T,GAAM6U,GAAS;AAChD,UAAIhB,IAASgB,EAAQ,IAAI,CAAC1I,MAAM,CAAC;AACjC,iBAAW7J,KAAKtC,GAAM;AACpB,cAAM8U,IAASxS,IAAIuR,EAAO,MAAK;AAC/B,QAAAA,EAAO,KAAK,CAAC,GACbgB,EAAQ,QAAQ,CAACE,GAAMhE,MAAM8C,EAAO9C,CAAC,KAAKL,EAAQ,oBAAoBqE,GAAMD,CAAM,CAAC;AAAA,MACrF;AACA,aAAOjB;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,OAAO,oBAAoBzB,GAAGC,GAAG;AAC/B,UAAID,MAAM,KAAUC,MAAM;AACxB,cAAM,IAAI,WAAW,mBAAmB;AAC1C,UAAI2C,IAAI;AACR,eAASjE,IAAI,GAAGA,KAAK,GAAGA;AACtB,QAAAiE,IAAIA,KAAK,KAAKA,MAAM,KAAK,KACzBA,MAAM3C,MAAMtB,IAAI,KAAKqB;AAEvB,aAAAjB,EAAO6D,MAAM,KAAK,CAAC,GACZA;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,2BAA2BZ,GAAY;AACrC,YAAMa,IAAIb,EAAW,CAAC;AACtB,MAAAjD,EAAO8D,KAAK,KAAK,OAAO,CAAC;AACzB,YAAMC,IAAOD,IAAI,KAAKb,EAAW,CAAC,KAAKa,KAAKb,EAAW,CAAC,KAAKa,IAAI,KAAKb,EAAW,CAAC,KAAKa,KAAKb,EAAW,CAAC,KAAKa;AAC7G,cAAQC,KAAQd,EAAW,CAAC,KAAKa,IAAI,KAAKb,EAAW,CAAC,KAAKa,IAAI,IAAI,MAAMC,KAAQd,EAAW,CAAC,KAAKa,IAAI,KAAKb,EAAW,CAAC,KAAKa,IAAI,IAAI;AAAA,IACtI;AAAA;AAAA,IAEA,+BAA+BE,GAAiBC,GAAkBhB,GAAY;AAC5E,aAAIe,MACF,KAAK,wBAAwBC,GAAkBhB,CAAU,GACzDgB,IAAmB,IAErBA,KAAoB,KAAK,MACzB,KAAK,wBAAwBA,GAAkBhB,CAAU,GAClD,KAAK,2BAA2BA,CAAU;AAAA,IACnD;AAAA;AAAA,IAEA,wBAAwBgB,GAAkBhB,GAAY;AACpD,MAAIA,EAAW,CAAC,KAAK,MACnBgB,KAAoB,KAAK,OAC3BhB,EAAW,IAAG,GACdA,EAAW,QAAQgB,CAAgB;AAAA,IACrC;AAAA,EACJ;AAGE,EAAA1E,EAAQ,cAAc,GAEtBA,EAAQ,cAAc,IAEtBA,EAAQ,aAAa,GACrBA,EAAQ,aAAa,GACrBA,EAAQ,aAAa,IACrBA,EAAQ,aAAa,IACrBA,EAAQ,0BAA0B;AAAA;AAAA;AAAA,IAGhC,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAElK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAEvK,GACEA,EAAQ,8BAA8B;AAAA;AAAA;AAAA,IAGpC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAE5I,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAErJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAExJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAE7J,GAEED,EAAW,SAASC;AACpB,WAASuB,EAAWoD,GAAKC,GAAKtD,GAAI;AAChC,QAAIsD,IAAM,KAAKA,IAAM,MAAMD,MAAQC;AACjC,YAAM,IAAI,WAAW,oBAAoB;AAC3C,aAASvE,IAAIuE,IAAM,GAAGvE,KAAK,GAAGA;AAC5B,MAAAiB,EAAG,KAAKqD,MAAQtE,IAAI,CAAC;AAAA,EACzB;AACA,WAAS4B,EAAOP,GAAGrB,GAAG;AACpB,YAAQqB,MAAMrB,IAAI,MAAM;AAAA,EAC1B;AACA,WAASI,EAAOoE,GAAM;AACpB,QAAI,CAACA;AACH,YAAM,IAAI,MAAM,iBAAiB;AAAA,EACrC;AACA,QAAMC,IAAa,MAAMA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlC,YAAYC,GAAMC,GAAUC,GAAS;AAInC,UAHA,KAAK,OAAOF,GACZ,KAAK,WAAWC,GAChB,KAAK,UAAUC,GACXD,IAAW;AACb,cAAM,IAAI,WAAW,kBAAkB;AACzC,WAAK,UAAUC,EAAQ,MAAK;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,UAAU3V,GAAM;AACrB,UAAIgS,IAAK,CAAA;AACT,iBAAW1P,KAAKtC;AACd,QAAAiS,EAAW3P,GAAG,GAAG0P,CAAE;AACrB,aAAO,IAAIwD,EAAWA,EAAW,KAAK,MAAMxV,EAAK,QAAQgS,CAAE;AAAA,IAC7D;AAAA;AAAA,IAEA,OAAO,YAAY4D,GAAQ;AACzB,UAAI,CAACJ,EAAW,UAAUI,CAAM;AAC9B,cAAM,IAAI,WAAW,wCAAwC;AAC/D,UAAI5D,IAAK,CAAA;AACT,eAASjB,IAAI,GAAGA,IAAI6E,EAAO,UAAU;AACnC,cAAMX,IAAI,KAAK,IAAIW,EAAO,SAAS7E,GAAG,CAAC;AACvC,QAAAkB,EAAW,SAAS2D,EAAO,UAAU7E,GAAGA,IAAIkE,CAAC,GAAG,EAAE,GAAGA,IAAI,IAAI,GAAGjD,CAAE,GAClEjB,KAAKkE;AAAA,MACP;AACA,aAAO,IAAIO,EAAWA,EAAW,KAAK,SAASI,EAAO,QAAQ5D,CAAE;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,iBAAiBrZ,GAAM;AAC5B,UAAI,CAAC6c,EAAW,eAAe7c,CAAI;AACjC,cAAM,IAAI,WAAW,6DAA6D;AACpF,UAAIqZ,IAAK,CAAA,GACLjB;AACJ,WAAKA,IAAI,GAAGA,IAAI,KAAKpY,EAAK,QAAQoY,KAAK,GAAG;AACxC,YAAI8E,IAAOL,EAAW,qBAAqB,QAAQ7c,EAAK,OAAOoY,CAAC,CAAC,IAAI;AACrE,QAAA8E,KAAQL,EAAW,qBAAqB,QAAQ7c,EAAK,OAAOoY,IAAI,CAAC,CAAC,GAClEkB,EAAW4D,GAAM,IAAI7D,CAAE;AAAA,MACzB;AACA,aAAIjB,IAAIpY,EAAK,UACXsZ,EAAWuD,EAAW,qBAAqB,QAAQ7c,EAAK,OAAOoY,CAAC,CAAC,GAAG,GAAGiB,CAAE,GACpE,IAAIwD,EAAWA,EAAW,KAAK,cAAc7c,EAAK,QAAQqZ,CAAE;AAAA,IACrE;AAAA;AAAA;AAAA,IAGA,OAAO,aAAarZ,GAAM;AACxB,aAAIA,KAAQ,KACH,CAAA,IACA6c,EAAW,UAAU7c,CAAI,IACzB,CAAC6c,EAAW,YAAY7c,CAAI,CAAC,IAC7B6c,EAAW,eAAe7c,CAAI,IAC9B,CAAC6c,EAAW,iBAAiB7c,CAAI,CAAC,IAElC,CAAC6c,EAAW,UAAUA,EAAW,gBAAgB7c,CAAI,CAAC,CAAC;AAAA,IAClE;AAAA;AAAA;AAAA,IAGA,OAAO,QAAQmd,GAAW;AACxB,UAAI9D,IAAK,CAAA;AACT,UAAI8D,IAAY;AACd,cAAM,IAAI,WAAW,mCAAmC;AACrD,UAAIA,IAAY;AACnB,QAAA7D,EAAW6D,GAAW,GAAG9D,CAAE;AAAA,eACpB8D,IAAY;AACnB,QAAA7D,EAAW,GAAG,GAAGD,CAAE,GACnBC,EAAW6D,GAAW,IAAI9D,CAAE;AAAA,eACnB8D,IAAY;AACrB,QAAA7D,EAAW,GAAG,GAAGD,CAAE,GACnBC,EAAW6D,GAAW,IAAI9D,CAAE;AAAA;AAE5B,cAAM,IAAI,WAAW,mCAAmC;AAC1D,aAAO,IAAIwD,EAAWA,EAAW,KAAK,KAAK,GAAGxD,CAAE;AAAA,IAClD;AAAA;AAAA;AAAA,IAGA,OAAO,UAAUrZ,GAAM;AACrB,aAAO6c,EAAW,cAAc,KAAK7c,CAAI;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,eAAeA,GAAM;AAC1B,aAAO6c,EAAW,mBAAmB,KAAK7c,CAAI;AAAA,IAChD;AAAA;AAAA;AAAA,IAGA,UAAU;AACR,aAAO,KAAK,QAAQ,MAAK;AAAA,IAC3B;AAAA;AAAA;AAAA,IAGA,OAAO,aAAa0Y,GAAMV,GAAS;AACjC,UAAIkD,IAAS;AACb,iBAAWvC,KAAOD,GAAM;AACtB,cAAM0E,IAASzE,EAAI,KAAK,iBAAiBX,CAAO;AAChD,YAAIW,EAAI,YAAY,KAAKyE;AACvB,iBAAO;AACT,QAAAlC,KAAU,IAAIkC,IAASzE,EAAI,QAAQ;AAAA,MACrC;AACA,aAAOuC;AAAA,IACT;AAAA;AAAA,IAEA,OAAO,gBAAgBmC,GAAK;AAC1B,MAAAA,IAAM,UAAUA,CAAG;AACnB,UAAInC,IAAS,CAAA;AACb,eAAS9C,IAAI,GAAGA,IAAIiF,EAAI,QAAQjF;AAC9B,QAAIiF,EAAI,OAAOjF,CAAC,KAAK,MACnB8C,EAAO,KAAKmC,EAAI,WAAWjF,CAAC,CAAC,KAE7B8C,EAAO,KAAK,SAASmC,EAAI,UAAUjF,IAAI,GAAGA,IAAI,CAAC,GAAG,EAAE,CAAC,GACrDA,KAAK;AAGT,aAAO8C;AAAA,IACT;AAAA,EACJ;AAGE,EAAA2B,EAAW,gBAAgB,YAE3BA,EAAW,qBAAqB,yBAGhCA,EAAW,uBAAuB;AAClC,MAAI1D,IAAY0D;AAChB,EAAA/E,EAAW,YAAY+E;AACzB,GAAGhF,OAAcA,KAAY,CAAA,EAAG;AAAA,CAC/B,CAACC,MAAe;AAEf,GAAC,CAACwF,MAAY;AACZ,UAAMC,IAAO,MAAW;AAAA;AAAA;AAAA,MAGtB,YAAYC,GAASC,GAAY;AAC/B,aAAK,UAAUD,GACf,KAAK,aAAaC;AAAA,MACpB;AAAA,IACN;AAEI,IAAAF,EAAK,MAAM,IAAIA,EAAK,GAAG,CAAC,GAExBA,EAAK,SAAS,IAAIA,EAAK,GAAG,CAAC,GAE3BA,EAAK,WAAW,IAAIA,EAAK,GAAG,CAAC,GAE7BA,EAAK,OAAO,IAAIA,EAAK,GAAG,CAAC,GAEzBD,EAAQ,MAAMC;AAAA,EAChB,GAAYzF,EAAW,WAAWA,EAAW,SAAS,CAAA,EAAG;AAC3D,GAAGD,OAAcA,KAAY,CAAA,EAAG;AAAA,CAC/B,CAACC,MAAe;AAEf,GAAC,CAAC4F,MAAe;AACf,UAAMC,IAAQ,MAAY;AAAA;AAAA,MAExB,YAAYC,GAAUC,GAAkB;AACtC,aAAK,WAAWD,GAChB,KAAK,mBAAmBC;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA,MAIA,iBAAiBtD,GAAK;AACpB,eAAO,KAAK,iBAAiB,KAAK,OAAOA,IAAM,KAAK,EAAE,CAAC;AAAA,MACzD;AAAA,IACN;AAEI,IAAAoD,EAAM,UAAU,IAAIA,EAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GACzCA,EAAM,eAAe,IAAIA,EAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAC7CA,EAAM,OAAO,IAAIA,EAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GACrCA,EAAM,QAAQ,IAAIA,EAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GACtCA,EAAM,MAAM,IAAIA,EAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAElCD,EAAW,OAAOC;AAAA,EACpB,GAAe7F,EAAW,cAAcA,EAAW,YAAY,CAAA,EAAG;AACpE,GAAGD,OAAcA,KAAY,CAAA,EAAG;AAChC,IAAIiG,KAAoBjG;AAQxB,IAAIkG,KAAkB;AAAA,EACpB,GAAGD,GAAkB,OAAO,IAAI;AAAA,EAChC,GAAGA,GAAkB,OAAO,IAAI;AAAA,EAChC,GAAGA,GAAkB,OAAO,IAAI;AAAA,EAChC,GAAGA,GAAkB,OAAO,IAAI;AAClC,GACIE,KAAe,KACfC,KAAgB,KAChBC,KAAkB,WAClBC,KAAkB,WAClBC,KAAwB,IACxBC,KAAqB,GACrBC,KAAmB,GACnBC,KAAsB,GACtBC,KAAoB;AACxB,SAASC,GAAaC,GAASC,IAAS,GAAG;AACzC,QAAMC,IAAM,CAAA;AACZ,SAAAF,EAAQ,QAAQ,SAAS9K,GAAK8F,GAAG;AAC/B,QAAImF,IAAQ;AACZ,IAAAjL,EAAI,QAAQ,SAASkL,GAAMrF,GAAG;AAC5B,UAAI,CAACqF,KAAQD,MAAU,MAAM;AAC3B,QAAAD,EAAI;AAAA,UACF,IAAIC,IAAQF,CAAM,IAAIjF,IAAIiF,CAAM,IAAIlF,IAAIoF,CAAK,MAAMA,IAAQF,CAAM;AAAA,QAC3E,GACQE,IAAQ;AACR;AAAA,MACF;AACA,UAAIpF,MAAM7F,EAAI,SAAS,GAAG;AACxB,YAAI,CAACkL;AACH;AAEF,QAAID,MAAU,OACZD,EAAI,KAAK,IAAInF,IAAIkF,CAAM,IAAIjF,IAAIiF,CAAM,SAASlF,IAAIkF,CAAM,GAAG,IAE3DC,EAAI;AAAA,UACF,IAAIC,IAAQF,CAAM,IAAIjF,IAAIiF,CAAM,KAAKlF,IAAI,IAAIoF,CAAK,MAAMA,IAAQF,CAAM;AAAA,QAClF;AAEQ;AAAA,MACF;AACA,MAAIG,KAAQD,MAAU,SACpBA,IAAQpF;AAAA,IAEZ,CAAC;AAAA,EACH,CAAC,GACMmF,EAAI,KAAK,EAAE;AACpB;AACA,SAASG,GAAgBL,GAASM,GAAY;AAC5C,SAAON,EAAQ,MAAK,EAAG,IAAI,CAAC9K,GAAK8F,MAC3BA,IAAIsF,EAAW,KAAKtF,KAAKsF,EAAW,IAAIA,EAAW,IAC9CpL,IAEFA,EAAI,IAAI,CAACkL,GAAMrF,MAChBA,IAAIuF,EAAW,KAAKvF,KAAKuF,EAAW,IAAIA,EAAW,IAC9CF,IAEF,EACR,CACF;AACH;AACA,SAASG,GAAiBC,GAAOC,GAAMR,GAAQS,GAAe;AAC5D,MAAIA,KAAiB;AACnB,WAAO;AAET,QAAMC,IAAWH,EAAM,SAASP,IAAS,GACnCW,IAAc,KAAK,MAAMH,IAAOX,EAAiB,GACjDe,IAAQF,IAAWF,GACnB,KAAKC,EAAc,SAASE,KAAeC,GAC3CC,KAAKJ,EAAc,UAAUE,KAAeC,GAC5C9F,IAAI2F,EAAc,KAAK,OAAOF,EAAM,SAAS,IAAI,IAAI,IAAIE,EAAc,IAAIG,GAC3E7F,IAAI0F,EAAc,KAAK,OAAOF,EAAM,SAAS,IAAIM,IAAI,IAAIJ,EAAc,IAAIG,GAC3EE,IAAUL,EAAc,WAAW,OAAO,IAAIA,EAAc;AAClE,MAAIJ,IAAa;AACjB,MAAII,EAAc,UAAU;AAC1B,QAAIM,IAAS,KAAK,MAAMjG,CAAC,GACrBkG,IAAS,KAAK,MAAMjG,CAAC,GACrBkG,IAAQ,KAAK,KAAK,IAAInG,IAAIiG,CAAM,GAChCG,IAAQ,KAAK,KAAKL,IAAI9F,IAAIiG,CAAM;AACpC,IAAAX,IAAa,EAAE,GAAGU,GAAQ,GAAGC,GAAQ,GAAGC,GAAO,GAAGC,EAAK;AAAA,EACzD;AACA,QAAMC,IAAcV,EAAc;AAClC,SAAO,EAAE,GAAA3F,GAAG,GAAAC,GAAG,GAAA8F,GAAG,GAAG,YAAAR,GAAY,SAAAS,GAAS,aAAAK,EAAW;AACvD;AACA,SAASC,GAAcC,GAAeC,GAAY;AAChD,SAAIA,KAAc,OACT,KAAK,IAAI,KAAK,MAAMA,CAAU,GAAG,CAAC,IAEpCD,IAAgB1B,KAAmBC;AAC5C;AACA,SAAS2B,GAAU;AAAA,EACjB,OAAA9hB;AAAA,EACA,OAAA+hB;AAAA,EACA,YAAAvH;AAAA,EACA,eAAAoH;AAAA,EACA,YAAAC;AAAA,EACA,eAAAb;AAAA,EACA,MAAAD;AAAA,EACA,YAAAiB;AACF,GAAG;AACD,MAAIC,IAAS7X,EAAM,QAAQ,MAAM;AAE/B,UAAM8X,KADS,MAAM,QAAQliB,CAAK,IAAIA,IAAQ,CAACA,CAAK,GAC5B,OAAO,CAACmiB,GAAOrd,OACrCqd,EAAM,KAAK,GAAGzC,GAAkB,UAAU,aAAa5a,CAAC,CAAC,GAClDqd,IACN,CAAA,CAAE;AACL,WAAOzC,GAAkB,OAAO;AAAA,MAC9BwC;AAAA,MACAvC,GAAgBoC,CAAK;AAAA,MACrBvH;AAAA,MACA;AAAA,MACA;AAAA,MACAwH;AAAA,IACN;AAAA,EACE,GAAG,CAAChiB,GAAO+hB,GAAOvH,GAAYwH,CAAU,CAAC;AACzC,QAAM,EAAE,OAAAlB,GAAO,QAAAP,GAAQ,UAAAU,GAAU,yBAAAmB,MAA4BhY,EAAM,QAAQ,MAAM;AAC/E,QAAIiY,IAASJ,EAAO,WAAU;AAC9B,UAAMK,IAAUX,GAAcC,GAAeC,CAAU,GACjDU,IAAYF,EAAO,SAASC,IAAU,GACtCE,IAA2B3B;AAAA,MAC/BwB;AAAA,MACAtB;AAAA,MACAuB;AAAA,MACAtB;AAAA,IACN;AACI,WAAO;AAAA,MACL,OAAOqB;AAAA,MACP,QAAQC;AAAA,MACR,UAAUC;AAAA,MACV,yBAAyBC;AAAA,IAC/B;AAAA,EACE,GAAG,CAACP,GAAQlB,GAAMC,GAAeY,GAAeC,CAAU,CAAC;AAC3D,SAAO;AAAA,IACL,QAAAI;AAAA,IACA,QAAA1B;AAAA,IACA,OAAAO;AAAA,IACA,UAAAG;AAAA,IACA,yBAAAmB;AAAA,EACJ;AACA;AACA,IAAIK,MAAkB,WAAW;AAC/B,MAAI;AACF,QAAI,OAAM,EAAG,QAAQ,IAAI,OAAM,CAAE;AAAA,EACnC,QAAY;AACV,WAAO;AAAA,EACT;AACA,SAAO;AACT,GAAC,GACGC,KAAetY,EAAM;AAAA,EACvB,SAAuBxK,GAAO8K,GAAc;AAC1C,UAAMiY,IAAK/iB,GAAO;AAAA,MAChB,OAAAI;AAAA,MACA,MAAA+gB,IAAOnB;AAAA,MACP,OAAAmC,IAAQlC;AAAA,MACR,SAAA+C,IAAU9C;AAAA,MACV,SAAA+C,IAAU9C;AAAA,MACV,eAAA6B,IAAgB5B;AAAA,MAChB,YAAAxF,IAAayF;AAAA,MACb,YAAA+B;AAAA,MACA,YAAAH;AAAA,MACA,eAAAb;AAAA,IACN,IAAQ2B,GAYEG,IAZexJ,GAAUqJ,GAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACsB,EAAE,OAAAI,MAAUD,GAAIE,IAAa1J,GAAUwJ,GAAI,CAAC,OAAO,CAAC,GACrEG,IAA0CjC,GAAc,KACxDkC,IAAU9Y,EAAM,OAAO,IAAI,GAC3B+Y,IAAS/Y,EAAM,OAAO,IAAI,GAC1BgZ,IAAehZ,EAAM;AAAA,MACzB,CAAC0D,MAAS;AACR,QAAAoV,EAAQ,UAAUpV,GACd,OAAOpD,KAAiB,aAC1BA,EAAaoD,CAAI,IACRpD,MACTA,EAAa,UAAUoD;AAAA,MAE3B;AAAA,MACA,CAACpD,CAAY;AAAA,IACnB,GACU,CAAC2Y,GAAaC,CAAgB,IAAIlZ,EAAM,SAAS,EAAK,GACtD,EAAE,QAAAmW,GAAQ,OAAAO,GAAO,UAAAG,GAAU,yBAAAmB,EAAuB,IAAKN,GAAU;AAAA,MACrE,OAAA9hB;AAAA,MACA,OAAA+hB;AAAA,MACA,YAAAvH;AAAA,MACA,YAAAwH;AAAA,MACA,eAAAJ;AAAA,MACA,YAAAC;AAAA,MACA,eAAAb;AAAA,MACA,MAAAD;AAAA,IACN,CAAK;AACD3W,IAAAA,EAAM,UAAU,MAAM;AACpB,UAAI8Y,EAAQ,WAAW,MAAM;AAC3B,cAAMK,IAASL,EAAQ,SACjBM,KAAMD,EAAO,WAAW,IAAI;AAClC,YAAI,CAACC;AACH;AAEF,YAAIC,KAAc3C;AAClB,cAAM4C,KAAQP,EAAO,SACfQ,KAAoBvB,KAA2B,QAAQsB,OAAU,QAAQA,GAAM,YAAYA,GAAM,kBAAkB,KAAKA,GAAM,iBAAiB;AACrJ,QAAIC,MACEvB,EAAwB,cAAc,SACxCqB,KAAc9C;AAAA,UACZG;AAAA,UACAsB,EAAwB;AAAA,QACtC;AAGQ,cAAMwB,KAAa,OAAO,oBAAoB;AAC9C,QAAAL,EAAO,SAASA,EAAO,QAAQxC,IAAO6C;AACtC,cAAMzC,KAAQJ,IAAOE,IAAW2C;AAChC,QAAAJ,GAAI,MAAMrC,IAAOA,EAAK,GACtBqC,GAAI,YAAYZ,GAChBY,GAAI,SAAS,GAAG,GAAGvC,GAAUA,CAAQ,GACrCuC,GAAI,YAAYX,GACZJ,KACFe,GAAI,KAAK,IAAI,OAAOnD,GAAaoD,IAAalD,CAAM,CAAC,CAAC,IAEtDO,EAAM,QAAQ,SAAStL,IAAKqO,IAAK;AAC/B,UAAArO,GAAI,QAAQ,SAASkL,IAAMoD,IAAK;AAC9B,YAAIpD,MACF8C,GAAI,SAASM,KAAMvD,GAAQsD,KAAMtD,GAAQ,GAAG,CAAC;AAAA,UAEjD,CAAC;AAAA,QACH,CAAC,GAEC6B,MACFoB,GAAI,cAAcpB,EAAwB,UAExCuB,MACFH,GAAI;AAAA,UACFE;AAAA,UACAtB,EAAwB,IAAI7B;AAAA,UAC5B6B,EAAwB,IAAI7B;AAAA,UAC5B6B,EAAwB;AAAA,UACxBA,EAAwB;AAAA,QACpC;AAAA,MAEM;AAAA,IACF,CAAC,GACDhY,EAAM,UAAU,MAAM;AACpB,MAAAkZ,EAAiB,EAAK;AAAA,IACxB,GAAG,CAACL,CAAM,CAAC;AACX,UAAMc,IAAc3K,GAAe,EAAE,QAAQ2H,GAAM,OAAOA,EAAI,GAAIgC,CAAK;AACvE,QAAIiB,IAAM;AACV,WAAIf,KAAU,SACZe,IAAsB5Z,gBAAAA,EAAM;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,KAAK6Y;AAAA,QACL,KAAKA;AAAA,QACL,OAAO,EAAE,SAAS,OAAM;AAAA,QACxB,QAAQ,MAAM;AACZ,UAAAK,EAAiB,EAAI;AAAA,QACvB;AAAA,QACA,KAAKH;AAAA,QACL,aAAwDf,GAAwB;AAAA,MAC1F;AAAA,IACA,IAE2BhY,gBAAAA,EAAM,cAAcA,EAAM,UAAU,MAAsBA,gBAAAA,EAAM;AAAA,MACrF;AAAA,MACAgP,GAAe;AAAA,QACb,OAAO2K;AAAA,QACP,QAAQhD;AAAA,QACR,OAAOA;AAAA,QACP,KAAKqC;AAAA,QACL,MAAM;AAAA,MACd,GAASJ,CAAU;AAAA,IACnB,GAAOgB,CAAG;AAAA,EACR;AACF;AACAtB,GAAa,cAAc;AAC3B,IAAIuB,KAAY7Z,EAAM;AAAA,EACpB,SAAoBxK,GAAO8K,GAAc;AACvC,UAAMiY,IAAK/iB,GAAO;AAAA,MAChB,OAAAI;AAAA,MACA,MAAA+gB,IAAOnB;AAAA,MACP,OAAAmC,IAAQlC;AAAA,MACR,SAAA+C,IAAU9C;AAAA,MACV,SAAA+C,IAAU9C;AAAA,MACV,eAAA6B,IAAgB5B;AAAA,MAChB,YAAAxF,IAAayF;AAAA,MACb,YAAA+B;AAAA,MACA,OAAAjL;AAAA,MACA,YAAA8K;AAAA,MACA,eAAAb;AAAA,IACN,IAAQ2B,GAAIK,IAAa1J,GAAUqJ,GAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACK,EAAE,QAAApC,GAAQ,OAAAO,GAAO,UAAAG,GAAU,yBAAAmB,EAAuB,IAAKN,GAAU;AAAA,MACrE,OAAA9hB;AAAA,MACA,OAAA+hB;AAAA,MACA,YAAAvH;AAAA,MACA,YAAAwH;AAAA,MACA,eAAAJ;AAAA,MACA,YAAAC;AAAA,MACA,eAAAb;AAAA,MACA,MAAAD;AAAA,IACN,CAAK;AACD,QAAI0C,IAAc3C,GACd4C,IAAQ;AACZ,IAAI1C,KAAiB,QAAQoB,KAA2B,SAClDA,EAAwB,cAAc,SACxCqB,IAAc9C;AAAA,MACZG;AAAA,MACAsB,EAAwB;AAAA,IAClC,IAEMsB,IAAwBtZ,gBAAAA,EAAM;AAAA,MAC5B;AAAA,MACA;AAAA,QACE,MAAM4W,EAAc;AAAA,QACpB,QAAQoB,EAAwB;AAAA,QAChC,OAAOA,EAAwB;AAAA,QAC/B,GAAGA,EAAwB,IAAI7B;AAAA,QAC/B,GAAG6B,EAAwB,IAAI7B;AAAA,QAC/B,qBAAqB;AAAA,QACrB,SAAS6B,EAAwB;AAAA,QACjC,aAAaA,EAAwB;AAAA,MAC/C;AAAA,IACA;AAEI,UAAM8B,IAAS7D,GAAaoD,GAAalD,CAAM;AAC/C,WAAuBnW,gBAAAA,EAAM;AAAA,MAC3B;AAAA,MACAgP,GAAe;AAAA,QACb,QAAQ2H;AAAA,QACR,OAAOA;AAAA,QACP,SAAS,OAAOE,CAAQ,IAAIA,CAAQ;AAAA,QACpC,KAAKvW;AAAA,QACL,MAAM;AAAA,MACd,GAASsY,CAAU;AAAA,MACb,CAAC,CAACjM,KAAyB3M,gBAAAA,EAAM,cAAc,SAAS,MAAM2M,CAAK;AAAA,MACnD3M,gBAAAA,EAAM;AAAA,QACpB;AAAA,QACA;AAAA,UACE,MAAMwY;AAAA,UACN,GAAG,SAAS3B,CAAQ,IAAIA,CAAQ;AAAA,UAChC,gBAAgB;AAAA,QAC1B;AAAA,MACA;AAAA,MACsB7W,gBAAAA,EAAM,cAAc,QAAQ,EAAE,MAAMyY,GAAS,GAAGqB,GAAQ,gBAAgB,cAAc;AAAA,MACtGR;AAAA,IACN;AAAA,EACE;AACF;AACAO,GAAU,cAAc;AC5mCxB,MAAAE,KAAe,IAAA,IAAA,mBAAA,YAAA,GAAA,EAAA,MCaTC,KAA8B;AAM7B,SAASC,GAAkB,EAAE,QAAA3e,KAA8B;AAC9D,QAAM,EAAE,OAAA4e,GAAO,MAAA5hB,EAAA,IAAS/B,EAAA,GAClB,EAAE,iBAAAqV,GAAiB,UAAAtV,EAAA,IAAaiX,GAAA;AAEtC,SAAA5U,EAAU,MAAM;AACZ,QAAI,CAACuhB,EAAO;AAEZ,UAAMC,IAAW;AAAA,MACb,MACIvO;AAAA,QACI;AAAA,QACAtV,GAAU,OAAO;AAAA,UACb,CAAC8jB,GAAKjN,OAAW;AAAA,YACb,GAAGiN;AAAA,YACH,CAAC,GAAGjN,EAAM,OAAO,IAAIA,EAAM,OAAO,EAAE,GAAG,CAACkN,MACpC9c,GAAM;AAAA,cACF,YAAY8c,CAAM,IAAIlN,EAAM,MAAM,OAAOpO,GAAoBoO,EAAM,OAAO,GAAG,eAAeA,GAAO,OAAO;AAAA,YAAA;AAAA,UAC9G;AAAA,UAER,CAAA;AAAA,QAAC;AAAA,MACL;AAAA,MAER6M;AAAA,IAAA;AAEJ,WAAO,MAAM,cAAcG,CAAQ;AAAA,EACvC,GAAG,CAACD,GAAOtO,GAAiBtV,CAAQ,CAAC,GAGjC,gBAAAZ;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,aAAaoD;AAAA,UAAA;AAAA,UAEjB,gBAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,MAGxB,gBAAgB;AAAA,MAChB,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,iGACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,oDACX,UAAA,gBAAAA;AAAA,UAACmkB;AAAA,UAAA;AAAA,YACG,OAAOvhB,EAAM;AAAA,YACb,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,WAAU;AAAA,YACV,eAAe;AAAA,cACX,KAAKyhB;AAAA,cACL,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,UAAU;AAAA,YAAA;AAAA,UACd;AAAA,QAAA,GAER;AAAA,QAEA,gBAAAtkB,EAAC,OAAA,EAAI,WAAU,sEACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAI,aAAM,KAAA,CAAK;AAAA,4BACf,QAAA,EAAK,WAAU,0BAA0B,UAAAsB,GAAmBsB,EAAM,SAAU,EAAA,CAAE;AAAA,QAAA,GACnF;AAAA,QAEA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0EAAA,CAA0E;AAAA,UACzF,gBAAAA,EAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA,MAAE;AAAA,UAC/D,gBAAAA,EAAC,OAAA,EAAI,WAAU,0EAAA,CAA0E;AAAA,QAAA,GAC7F;AAAA,QAEA,gBAAAA;AAAA,UAAC6B;AAAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,YAAYe,GAAM;AAAA,YAClB,WAAW6G,GAAe;AAAA,cACtB,SAAS;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,YAAA,CACd;AAAA,YACD,eAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAClB,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB;AC/FA,MAAMmb,KAASC,IAETC,KAAgBC,IAEhBC,KAAeC,IAIfC,KAAgB5a,GAAM,WAG1B,CAAC,EAAE,WAAA3J,GAAW,GAAGb,EAAA,GAASuK,MACxB,gBAAArK;AAAA,EAACmlB;AAAAA,EAAA;AAAA,IACG,KAAA9a;AAAA,IACA,WAAWlJ;AAAA,MACP;AAAA,MACAR;AAAA,IAAA;AAAA,IAEH,GAAGb;AAAA,EAAA;AACR,CACH;AACDolB,GAAc,cAAcC,GAAwB;AAEpD,MAAMC,KAAgB9a,GAAM,WAK1B,CAAC,EAAE,WAAA3J,GAAW,UAAAyD,GAAU,WAAAihB,GAAW,GAAGvlB,EAAA,GAASuK,MAC7C,gBAAAtK,EAACilB,MAAa,WAAAK,GACV,UAAA;AAAA,EAAA,gBAAArlB,EAACklB,IAAA,EAAc;AAAA,EACf,gBAAAnlB;AAAA,IAACulB;AAAAA,IAAA;AAAA,MACG,KAAAjb;AAAA,MACA,WAAWlJ;AAAA,QACP;AAAA,QACAR;AAAA,MAAA;AAAA,MAEH,GAAGb;AAAA,MAEH,UAAA;AAAA,QAAAsE;AAAA,QACD,gBAAArE,EAACwlB,IAAA,EAAsB,WAAU,8TAC7B,UAAA;AAAA,UAAA,gBAAAvlB,EAACL,IAAA,EAAE,WAAU,gBAAA,CAAgB;AAAA,UAC7B,gBAAAK,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACtC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AACJ,EAAA,CACJ,CACH;AACDolB,GAAc,cAAcE,GAAwB;AAEpD,MAAME,KAAe,CAAC,EAAE,WAAA7kB,GAAW,GAAGb,EAAA,MAClC,gBAAAE,EAAC,OAAA,EAAI,WAAWmB,EAAG,qDAAqDR,CAAS,GAAI,GAAGb,EAAA,CAAO;AAEnG0lB,GAAa,cAAc;AAU3B,MAAMC,KAAcnb,GAAM,WAGxB,CAAC,EAAE,WAAA3J,GAAW,GAAGb,EAAA,GAASuK,MACxB,gBAAArK;AAAA,EAAC0lB;AAAAA,EAAA;AAAA,IACG,KAAArb;AAAA,IACA,WAAWlJ;AAAA,MACP;AAAA,MACAR;AAAA,IAAA;AAAA,IAEH,GAAGb;AAAA,EAAA;AACR,CACH;AACD2lB,GAAY,cAAcC,GAAsB;AAEhD,MAAMC,KAAoBrb,GAAM,WAG9B,CAAC,EAAE,WAAA3J,GAAW,GAAGb,EAAA,GAASuK,MACxB,gBAAArK;AAAA,EAAC4lB;AAAAA,EAAA;AAAA,IACG,KAAAvb;AAAA,IACA,WAAWlJ,EAAG,gDAAgDR,CAAS;AAAA,IACtE,GAAGb;AAAA,EAAA;AACR,CACH;AACD6lB,GAAkB,cAAcC,GAA4B;AC3E5D,MAAMC,KAAgC,CAAC;AAAA,EACnC,eAAAC;AAAA,EACA,eAAAC;AACJ,MAGM;AACF,QAAM,CAACvhB,GAAM4H,CAAO,IAAIhK,EAAkB,EAAK,GAEzCtB,IAAUC,GAAA,GACV,EAAE,kBAAAilB,EAAA,IAAqBC,GAAA,GAEvB,EAAE,UAAArlB,GAAU,aAAAoV,GAAa,iBAAAC,GAAiB,iBAAAC,GAAiB,qBAAAtC,GAAqB,wBAAAsS,EAAA,IAClFrO,GAAA,GACEsO,IAAiBvS,IAAsB,QAAQ9S,GAE/CslB,IAAqBC,EAAQ,MAC1BN,GAAe,UACb1c,GAAoB0c,EAAc,OAAO,IADZ,MAErC,CAACA,GAAe,OAAO,CAAC,GAarB,CAACO,CAAY,IAAID,EAAQ,MACvBF,MAAmB,QAAc,CAAC,IAAI,IAEnC,CADO9c,GAAoB8c,CAAc,CACnC,GACd,CAACA,CAAc,CAAC,GAEbI,IAAezjB,GAAuB,IAAI;AAEhD,EAAAG,EAAU,MAAM;AACZ,IAAAsjB,EAAa,UAAU,SAAS,cAAc,sBAAsB;AAAA,EACxE,GAAG,CAAA,CAAE;AAEL,QAAMC,IAAoB,OAAO/O,MAAwC;AAErE,IAAAqO,EAAcrO,CAAK,GAEf3W,MAAY2W,GAAO,WACnB,MAAMuO,EAAiB,EAAE,SAASvO,EAAM,SAAS,GAErDrL,EAAQ,EAAK;AAAA,EACjB;AAEA,gCAEQ,UAAA,gBAAArM,EAAC6kB,IAAA,EAAO,MAAApgB,GAAY,cAAc4H,GAAS,OAAK,IAC5C,UAAA;AAAA,IAAA,gBAAApM,EAAC8kB,IAAA,EAAc,SAAO,IAClB,UAAA,gBAAA/kB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,SAAS,CAACgF,MAAM;AACZ,UAAAA,EAAE,gBAAA,GACFqH,EAAQ,EAAI;AAAA,QAEhB;AAAA,QACA,WAAWjL;AAAA,UACP;AAAA,UACA;AAAA,QAAA;AAAA,QAGH,UAAA;AAAA,UAAAilB,KAAsBL,IACnB,gBAAAhmB,EAAC,OAAA,EAAI,WAAU,sCACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACwX;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,kBACH,MAAMuO,EAAc;AAAA,kBACpB,SAASA,EAAc,QAAQ;AAAA,gBAAA;AAAA,gBAEnC,OAAO;AAAA,kBACH,IAAIK,EAAmB;AAAA,kBACvB,MAAMA,EAAmB;AAAA,kBACzB,SAASA,EAAmB;AAAA,gBAAA;AAAA,cAChC;AAAA,YAAA;AAAA,YAGJ,gBAAArmB,EAAC,QAAA,EAAK,WAAU,kEACZ,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,8EACX,UAAA+lB,EAAc,QACnB;AAAA,cACA,gBAAA/lB,EAAC,UAAK,WAAU,iEACX,aAAYomB,EAAmB,EAAE,KAAKA,EAAmB,YAAA,CAC9D;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ,IAEA,gBAAApmB,EAAC,OAAA,EAAI,WAAU,yHAAwH,UAAA,gBAEvI;AAAA,UAEJ,gBAAAA,EAACymB,IAAA,EAAY,WAAU,8CAAA,CAA8C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAE7E;AAAA,sBACCrB,IAAA,EAAc,WAAWmB,EAAa,SAAS,WAAU,8BACtD,UAAA;AAAA,MAAA,gBAAAxmB,EAACylB,IAAA,EACG,UAAA;AAAA,QAAA,gBAAAxlB,EAACylB,MAAY,UAAA,eAAA,CAAY;AAAA,QACzB,gBAAAzlB,EAAC2lB,IAAA,EAAkB,WAAU,cAAa,UAAA,6BAAA,CAA0B;AAAA,MAAA,GACxE;AAAA,MAEA,gBAAA5lB,EAAC,OAAA,EAAI,WAAU,gCAYX,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,kBAAc;AAAA,UAC1E,gBAAAD,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACuF;AAAA,cAAA;AAAA,gBACG,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWpE;AAAA,kBACP;AAAA,kBACAglB,MAAmB,SAAS;AAAA,gBAAA;AAAA,gBAEhC,QAAM;AAAA,gBACN,SAAS,MAAMD,EAAuB,EAAI;AAAA,gBAE1C,UAAA,gBAAAlmB,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,MAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YAE9C0mB,GAAY,OAAO,IAAI,CAACtd,MACrB,gBAAApJ;AAAA,cAACuF;AAAA,cAAA;AAAA,gBAEG,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWpE;AAAA,kBACP;AAAA,kBACAglB,MAAmB/c,EAAM,MACrB;AAAA,gBAAA;AAAA,gBAER,QAAM;AAAA,gBACN,SAAS,YAAY;AACjB,kBAAI+c,MAAmB/c,EAAM,OAE7B0c,EAAc,MAAS,GAGvB,MAAME,EAAiB;AAAA,oBACnB,SAAS5c,EAAM;AAAA,kBAAA,CAClB,GACD8c,EAAuB,EAAK;AAAA,gBAChC;AAAA,gBAEC,YAAM,UACH,gBAAAlmB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,KAAKoJ,EAAM,WAAW;AAAA,oBACtB,KAAKE,GAAYF,EAAM,EAAE,KAAKA,EAAM;AAAA,oBACpC,WAAU;AAAA,kBAAA;AAAA,gBAAA,IAGd,gBAAApJ,EAAC,QAAA,EAAK,WAAU,yBACX,aAAYoJ,EAAM,EAAE,KAAKA,EAAM,KAAA,CACpC;AAAA,cAAA;AAAA,cA9BC,GAAGA,EAAM,EAAE;AAAA,YAAA,CAiCvB;AAAA,UAAA,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAGA,gBAAArJ,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA8C,UAAA,eAAc;AAAA,UAC3E,gBAAAA,EAAC,OAAA,EAAI,WAAU,sEACV,UAAAiW,IACG,gBAAAjW;AAAA,YAACqV;AAAA,YAAA;AAAA,cACG,SAAO;AAAA,cACP,SAAQ;AAAA,cACR,SAAS,MAAMa,EAAgB,EAAI;AAAA,YAAA;AAAA,UAAA,IAEvCF,KAAepV,GAAU,OAAO,SAChCA,GAAU,QAAQ,IAAI,CAAC6W,GAAOlC,MAAU;AACpC,kBAAMoR,IAAaL,KAAgBjd,GAAoBoO,GAAO,OAAO,GAE/DmP,IACFb,GAAe,YAAYtO,EAAM,WACjCsO,GAAe,YAAYY,GAAY;AAC3C,mBACI,gBAAA5mB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,UAAU;AAAA,gBACV,MAAK;AAAA,gBACL,WAAW,CAACgF,MAAM;AACd,kBAAIA,EAAE,QAAQ,WACVyhB,EAAkB/O,CAAK;AAAA,gBAE/B;AAAA,gBACA,SAAS,MAAM+O,EAAkB/O,CAAK;AAAA,gBAEtC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAA1X;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,WAAWoB;AAAA,wBACP;AAAA,wBACA;AAAA,0BACI,gGACIylB;AAAA,wBAAA;AAAA,sBACR;AAAA,sBAGJ,UAAA;AAAA,wBAAA,gBAAA7mB,EAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,0BAAA,gBAAAC;AAAA,4BAACwX;AAAA,4BAAA;AAAA,8BACG,OAAO;AAAA,gCACH,MAAMC,EAAM;AAAA,gCACZ,SAASA,EAAM,QAAQ;AAAA,8BAAA;AAAA,8BAE3B,OAAO;AAAA,gCACH,IAAIkP,EAAW;AAAA,gCACf,MAAMA,EAAW;AAAA,gCACjB,SAASA,EAAW;AAAA,8BAAA;AAAA,4BACxB;AAAA,0BAAA;AAAA,0BAEJ,gBAAA5mB,EAAC,OAAA,EAAI,WAAU,uDACX,UAAA;AAAA,4BAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,mDACZ,UAAA;AAAA,8BAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAyX,EAAM,QAAO;AAAA,8BAC9CA,EAAM,YAAYoP,MACf,gBAAA7mB;AAAA,gCAACgE;AAAA,gCAAA;AAAA,kCACG,MAAK;AAAA,kCACL,OAAM;AAAA,kCACN,iBAAe;AAAA,kCACf,aAAY;AAAA,kCAEZ,4BAAC,QAAA,EAAK,WAAU,0HACZ,UAAA,gBAAAhE,EAAC8mB,MAAS,EAAA,CACd;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACJ,GAER;AAAA,4BAEA,gBAAA9mB;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACG,WAAW;AAAA,gCAEV,UAAAsJ,GAAYqd,EAAW,EAAE,KAAKA,EAAW;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAC9C,EAAA,CACJ;AAAA,wBAAA,GACJ;AAAA,wBAEA,gBAAA5mB,EAAC,OAAA,EAAI,WAAU,+EACX,UAAA;AAAA,0BAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,yBAEX,UAAAkI;AAAA,4BACGuP,EAAM;AAAA,4BACNA,EAAM;AAAA,4BACN,OAAOA,EAAM,UAAU,MAAM;AAAA,0BAAA,GAErC;AAAA,0BACA,gBAAA1X,EAAC,QAAA,EAAK,WAAU,gDACX,UAAA;AAAA,4BAAAsW;AAAA,8BACGoB,EAAM;AAAA,8BACNA,EAAM;AAAA,8BACNA,EAAM;AAAA,4BAAA;AAAA,4BACP;AAAA,4BACFA,EAAM;AAAA,0BAAA,EAAA,CACX;AAAA,wBAAA,EAAA,CACJ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEHlC,IAAQ3U,GAAU,OAAO,SAAS,KAC/B,gBAAAZ,EAAC,MAAA,EAAG,WAAU,kCAAA,CAAkC;AAAA,gBAAA;AAAA,cAAA;AAAA,cArE/C,GAAGyX,EAAM,OAAO,IAAIA,EAAM,OAAO;AAAA,YAAA;AAAA,UAyElD,CAAC,IACDzB,IACA,gBAAAhW,EAAC,SAAI,WAAU,0GAAyG,UAAA,mBAExH,IAEA,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAACsV,GAAGC,MACzB,gBAAAxV,EAAC,OAAA,EAAgB,WAAU,aACvB,UAAA;AAAA,YAAA,gBAAAC,EAACmI,GAAA,EAAS,WAAU,oDAAA,CAAoD;AAAA,YACvEoN,IAAQ,KAAK,gBAAAvV,EAAC,MAAA,EAAG,WAAU,kCAAA,CAAkC;AAAA,UAAA,EAAA,GAFxDuV,CAGV,CACH,EAAA,CAET;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ;AAER,GAEAwR,KAAexkB,GAAKsjB,EAA6B,GC9S3CmB,KAAmD,CAAC,EAAE,MAAAllB,GAAM,MAAAiN,GAAM,WAAApO,EAAA,MACpE,gBAAAX,EAAC,OAAA,EAAI,WAAU,yBACV,UAAA8B,IACG,gBAAA9B;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,WAAWmB;AAAA,MACP;AAAA,MACA4N,MAAS,UAAU,wBAAwB;AAAA,MAC3CpO;AAAA,IAAA;AAAA,IAGH,UAAAmB;AAAA,EAAA;AACL,IACA,KAAA,CACR,GCMEmlB,KAAQ5T;AAAA,EACV,CACI;AAAA,IACI,OAAA6T;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA;AAAA,IAGA,WAAA5mB;AAAA,IACA,MAAAoO;AAAA,IACA,aAAAyY;AAAA,IACA,GAAG1nB;AAAA,EAAA,GAEPuK,wBAGK,OAAA,EAAI,WAAWlJ,EAAG,yCAAyCimB,CAAe,GACtE,UAAA;AAAA,IAAAF,KAAS,CAACA,EAAM,gBACb,gBAAAlnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWmB;AAAA,UACP;AAAA,UACAgmB,GAAgB,WAAW;AAAA,UAC3BD,EAAM;AAAA,QAAA;AAAA,QAEV,SAASA,EAAM;AAAA,QAEd,UAAAA,EAAM;AAAA,MAAA;AAAA,IAAA,IAEX;AAAA,IAEJ,gBAAAnnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAWoB;AAAA,UACP;AAAA,UACAgmB,GAAgB,WAAW;AAAA,UAC3B,CAACD,GAAO,iBAAiB;AAAA,UACzBG;AAAA,QAAA;AAAA,QAGH,UAAA;AAAA,UAAAC,IACG,gBAAAtnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP;AAAA,gBACArB,EAAM,YAAY;AAAA,gBAClBwnB,EAAY;AAAA,cAAA;AAAA,cAGf,UAAAA,EAAY;AAAA,YAAA;AAAA,UAAA,IAEjB;AAAA,UAEJ,gBAAAtnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP;AAAA,gBACA;AAAA;AAAA,gBACAgmB,GAAgB,WACZ;AAAA,gBACJ,EAAQG,KAAgB;AAAA,gBACxB,EAAQC,KAAiB;AAAA,gBACzBL,GAAO,kBACFC,GAAgB,UACX,6DACA;AAAA,gBACVxmB;AAAA,cAAA;AAAA,cAGJ,IAAIumB,GAAO;AAAA,cAEX,WAAW,CAACO,MAAQ;AAChB,gBAAI1Y,MAAS,YAAY0Y,EAAI,QAAQ,OACjCA,EAAI,eAAA;AAAA,cAEZ;AAAA,cACA,gBAAgB,CAAC1iB,MAAM;AACnB,gBAAAA,EAAE,cAAc,KAAA;AAAA,cACpB;AAAA,cAEA,aAAcmiB,GAAO,gBAA8BM,KAAe,MAA7BA;AAAA,cACrC,KAAAnd;AAAA,cACA,MAAA0E;AAAA,cACC,GAAGjP;AAAA,YAAA;AAAA,UAAA;AAAA,UAEPonB,KAASA,EAAM,gBACZ,gBAAAlnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP;AAAA,gBACAmmB,KAAe;AAAA,gBACfC,KAAgB;AAAA,gBAChBznB,EAAM,YAAY;AAAA,gBAClBqnB,GAAgB,WAAW;AAAA,gBAC3BD,EAAM;AAAA,cAAA;AAAA,cAEV,SAASA,EAAM;AAAA,cAEd,UAAAA,EAAM;AAAA,YAAA;AAAA,UAAA,IAEX;AAAA,UAEHK,IACG,gBAAAvnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP;AAAA,gBACArB,EAAM,YAAY;AAAA,gBAClBynB,EAAa;AAAA,cAAA;AAAA,cAGhB,UAAAA,EAAa;AAAA,YAAA;AAAA,UAAA,IAElB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGPJ,IACG,gBAAAnnB;AAAA,MAACgnB;AAAA,MAAA;AAAA,QACG,WAAWG,GAAgB;AAAA,QAC3B,MAAMA,GAAgB;AAAA,QACtB,MAAMA,GAAgB,UAAU,UAAU;AAAA,MAAA;AAAA,IAAA,IAE9C;AAAA,EAAA,GACR;AAGZ,GCjIMO,KAAiC,CAAC;AAAA,EACpC,QAAA9hB;AAAA,EACA,SAAA2B;AAAA,EACA,qBAAAogB;AAAA,EACA,0BAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,uBAAAC;AACJ,MAA2C;AACvC,QAAM,EAAE,MAAAllB,EAAA,IAAS/B,EAAA;AAEjB,SAAAoC,EAAU,MAAM;AACZ,IAAI6kB,KACCD,MAEAE,GAAUF,GAAkB,EAAE,QAAQ,IAAO,KAC9CD,EAAyB,+CAA+C;AAAA,EAChF,GAAG,CAACC,GAAkBC,GAAuBF,CAAwB,CAAC,GAGlE,gBAAA5nB;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,aAAaoD;AAAA,UAAA;AAAA,QACjB;AAAA,MAAA;AAAA,MAGR,gBAAgB;AAAA,MAChB,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EACG,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,QAAI;AAAA,UAChE,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP;AAAA,gBACA;AAAA;AAAA,cAAA;AAAA,cAGJ,UAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,2DACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,aAAA,CAAa;AAAA,gBAEnC,gBAAA3D,EAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,kDAAkD,UAAA4C,GAAM,MAAK;AAAA,kBAC5E,gBAAA5C,EAAC,SAAI,WAAU,8CACV,aAAmB4C,GAAM,aAAa,EAAE,EAAA,CAC7C;AAAA,gBAAA,GACJ;AAAA,kCAEC,OAAA,CAAA,CAAI;AAAA,cAAA,EAAA,CACT;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ,GACJ;AAAA,QAEA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,qGACX,UAAA;AAAA,UAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,uBAAA,CAAuB;AAAA,UAChD,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,SAAA,CAAS;AAAA,QAAA,GACtC;AAAA,0BAEC,OAAA,EACG,UAAA,gBAAAzF;AAAA,UAACinB;AAAA,UAAA;AAAA,YACG,OAAO;AAAA,cACH,SAAS;AAAA,cACT,OAAO;AAAA,YAAA;AAAA,YAEX,aACIc,GAAUF,CAAgB,IACpB;AAAA,cACI,SACI,gBAAA7nB;AAAA,gBAAC0D;AAAA,gBAAA;AAAA,kBACG,WAAU;AAAA,kBACV,aAAY;AAAA,kBACZ,aAAaskB,GAAeH,CAAgB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGpD,WAAW;AAAA,YAAA,IAEf;AAAA,YAEV,IAAG;AAAA,YACH,WAAW1mB;AAAA,cACP;AAAA,cACA4mB,GAAUF,CAAgB,KAAK;AAAA,YAAA;AAAA,YAEnC,aAAY;AAAA,YACZ,OAAOA;AAAA,YACP,UAAU,CAAC9iB,MAAM;AAEb,kBADA4iB,EAAoB5iB,EAAE,OAAO,KAAK,GAC9B,CAACA,EAAE,OAAO,MAAO,QAAO6iB,EAAyB,EAAE;AAEvD,kBAAI,CAACG,GAAUhjB,EAAE,OAAO,OAAO,EAAE,QAAQ,IAAO;AAC5C,uBAAO6iB,EAAyB,qCAAqC;AAEzE,kBACIhlB,GAAM,aACNqlB,GAAgBljB,EAAE,OAAO,KAAY,MAAMkjB,GAAgBrlB,GAAM,SAAgB;AAEjF,uBAAOglB,EAAyB,0CAA0C;AAE9E,cAAAA,EAAyB,EAAE;AAAA,YAC/B;AAAA,YACA,gBAAgB;AAAA,cACZ,OAAOE,KAAyB;AAAA,cAChC,SAAS,CAAC,CAACA;AAAA,cACX,WAAW;AAAA,YAAA;AAAA,UACf;AAAA,QAAA,EACJ,CACJ;AAAA,MAAA,GACJ;AAAA,MAEJ,QACI,gBAAA9nB,EAAAyD,GAAA,EACI,UAAA,gBAAAzD;AAAA,QAACuF;AAAA,QAAA;AAAA,UACG,SAAS;AAAA,UACT,WAAU;AAAA,UACV,UAAU,CAACsiB,KAAoB,CAAC,CAACC;AAAA,UACjC,SAAS,MAAM;AACX,YAAAH,EAAoBM,GAAgBJ,CAAuB,CAAC,GAC5DtgB,EAAQ2gB,GAAS,YAAY;AAAA,UACjC;AAAA,UACH,UAAA;AAAA,QAAA;AAAA,MAAA,GAGL;AAAA,MAEJ,iBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAAA,EAAA;AAGxB,GAEAC,KAAe5lB,GAAKmlB,EAA8B,GC5I5CU,KAAoE,CAAC;AAAA,EACvE,OAAAhjB;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAgjB;AAAA,EACA,oBAAAC;AAAA,EACA,qBAAAC;AACJ,MAEQ,gBAAAvoB;AAAA,EAAC6D;AAAA,EAAA;AAAA,IACG,gBAAgB;AAAA,IAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAASoF;AAAA,UAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA,GAEjC,EAAA,CACJ;AAAA,wBAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,QAAA,gBAAAC,EAACkF,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,QACpC,gBAAAnF,EAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA;AAAA,UAAA;AAAA,4BAExD,MAAA,EAAG;AAAA,UAAE;AAAA,QAAA,GAEV;AAAA,QACA,gBAAAC,EAAC,QAAA,EAAK,WAAU,mEACX,UAAA;AAAA,oBACL;AAAA,QAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0GACV,eAAUsoB,IACP,gBAAAtoB;AAAA,UAACuJ;AAAA,UAAA;AAAA,YAEG,MAAM,WAAWgf,KAAuB,gBAAgB;AAAA,YACxD,KAAKD;AAAA,UAAA;AAAA,UAFAD;AAAA,QAAA,IAIT,KAAA,CACR;AAAA,QAEA,gBAAAroB,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,gBAAA,CAE1E;AAAA,MAAA,EAAA,CACJ,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA;AAAA,GAMhBmjB,KAAejmB,GAAK6lB,EAAwB,GChDtCK,KAAsE,CAAC;AAAA,EACzE,QAAA7iB;AAAA,EACA,QAAAyiB;AAAA,EACA,oBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,OAAAG;AAAA,EACA,aAAAC;AAAA,EACA,WAAA5Q;AACJ,MAAM;AACF,QAAM,EAAE,MAAAnV,EAAA,IAAS/B,EAAA;AAEjB,SACI,gBAAAb;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,cAAcoD;AAAA,UAAA;AAAA,QAClB;AAAA,MAAA;AAAA,MAGR,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,QAAG,UAAA,cAAA,CAAW;AAAA,QACf,gBAAAD,EAAC,OAAA,EAAI,WAAU,4EACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,UAAA,uBAAA,CAAoB;AAAA,UAC1B,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,QAAA,CAAK;AAAA,QAAA,GAClD;AAAA,0BAEC,OAAA,EAAI,WAAU,qDACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6IACX,UAAA;AAAA,UAAA,gBAAAC,EAAC0F,IAAA,EAAkB,WAAU,2DAAA,CAA2D;AAAA,UAExF,gBAAA3F,EAAC,OAAA,EAAI,WAAU,gFACX,UAAA;AAAA,YAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,YAAA,CAAY;AAAA,YAElC,gBAAA3D,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,IAAG,UAAA,QAAI;AAAA,cACtB,gBAAAA,EAAC,OAAA,EAAK,UAAAsB,GAAmBsB,EAAM,SAAS,EAAA,CAAE;AAAA,YAAA,EAAA,CAC9C;AAAA,UAAA,GACJ;AAAA,UAEA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4GACX,UAAA;AAAA,cAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,0BAAA,CAA0B;AAAA,cACnD,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,cAChE,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,YAAA,GACpE;AAAA,YAEA,gBAAA1F,EAAC,OAAA,EAAI,WAAU,kEACV,UAAA;AAAA,cAAAgY;AAAA,cACD,gBAAAhY,EAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,gBAAA,gBAAAC,EAAC,QAAA,EAAM,aAAO,2BAAA,CAA2B;AAAA,gBAAQ;AAAA,gBACjD,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA2oB,EAAA,CAAY;AAAA,cAAA,EAAA,CAC1D;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UAEA,gBAAA5oB,EAAC,OAAA,EAAI,WAAU,gFACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC0D;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,aAAY;AAAA,gBACZ,aAAaskB,GAAeU,GAAO,gBAAgB;AAAA,cAAA;AAAA,YAAA;AAAA,YAGvD,gBAAA3oB,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,IAAG,UAAA,MAAE;AAAA,cACpB,gBAAAA,EAAC,OAAA,EAAK,UAAAsB,GAAmBonB,GAAO,gBAAgB,EAAA,CAAE;AAAA,YAAA,EAAA,CACtD;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,MAEJ,QACI,gBAAA3oB,EAAA0D,GAAA,EACK,UAAA;AAAA,QAAA4kB,KAAUC,KACP,gBAAAtoB,EAAC,QAAA,EAAK,WAAU,4FACZ,UAAA,gBAAAA;AAAA,UAACuJ;AAAA,UAAA;AAAA,YAEG,MAAM,WAAWgf,KAAuB,gBAAgB;AAAA,YACxD,KAAKD;AAAA,UAAA;AAAA,UAFAD;AAAA,QAAA,GAIb;AAAA,QAEJ,gBAAAroB,EAACuF,KAAO,SAAQ,YAAW,WAAU,qBAAoB,SAASK,GAAQ,UAAA,eAAA,CAE1E;AAAA,MAAA,GACJ;AAAA,MAEJ,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAAA,EAAA;AAGxB,GAEAgjB,KAAermB,GAAKkmB,EAAyB,GCtGvCI,KAAsE,CAAC;AAAA,EACzE,OAAAzjB;AAAA,EACA,gBAAAC;AAAA,EACA,OAAAqjB;AAAA,EACA,aAAAC;AACJ,MAAM;AACF,QAAM,EAAE,MAAA/lB,EAAA,IAAS/B,EAAA;AAEjB,SACI,gBAAAb;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAU;AAAA,YACV,SAASoF;AAAA,YAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA,GAEjC,EAAA,CACJ;AAAA,0BAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,UAAA,gBAAAC,EAAC+F,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,UACpC,gBAAA/F,EAAC,QAAA,EAAK,WAAU,+BAA8B,UAAA,WAAO;AAAA,UACrD,gBAAAA,EAAC,UAAK,WAAU,mEACX,aAAG0oB,EAAM,0BAA0B,IAAIC,CAAW;AAAA,UAAoCrnB,GAAmBonB,EAAM,gBAAgB,CAAC,GAAA,CACrI;AAAA,UAEA,gBAAA3oB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWoB;AAAA,gBACP;AAAA,gBACA;AAAA;AAAA,cAAA;AAAA,cAGJ,UAAA;AAAA,gBAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,6BAAA,CAA6B;AAAA,kBACnD,gBAAA3D,EAAC,OAAA,EAAI,WAAU,6CACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,QAAI;AAAA,oBAC7C,gBAAAA,EAAC,QAAA,EAAK,WAAU,gBACX,UAAA4C,GAAM,QAAQtB,GAAmBsB,GAAM,aAAa,EAAE,EAAA,CAC3D;AAAA,kBAAA,EAAA,CACJ;AAAA,gBAAA,GACJ;AAAA,gBACA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,uFACX,UAAA;AAAA,kBAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,qCAAA,CAAqC;AAAA,kBAC9D,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,gCAAA,CAAgC;AAAA,gBAAA,GAC7D;AAAA,gBACA,gBAAA1F,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC0D;AAAA,oBAAA;AAAA,sBACG,WAAU;AAAA,sBACV,aAAY;AAAA,sBACZ,aAAaskB,GAAeU,EAAM,gBAAgB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEtD,gBAAA3oB,EAAC,OAAA,EAAI,WAAU,6CACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,MAAE;AAAA,sCAC1C,QAAA,EAAK,WAAU,gBACX,UAAAsB,GAAmBonB,EAAM,gBAAgB,EAAA,CAC9C;AAAA,kBAAA,EAAA,CACJ;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,gBAAA1oB,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,mBAAA,CAE1E;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB,GAEAyjB,KAAevmB,GAAKsmB,EAAyB,GC7BvCE,KAAkC,KAAK,KAGvCC,KAA0B,GAC1BC,KAAmB,sCACnBC,KAAoB,sBACpBC,KAAkB;AAEjB,SAASC,GAAmB,EAAE,QAAAxjB,GAAQ,OAAAR,GAAO,gBAAAC,GAAgB,iBAAAe,KAAwC;AACxG,QAAM,EAAE,MAAAxD,GAAM,iBAAAymB,GAAiB,iBAAAnT,GAAiB,aAAAF,GAAa,UAAApV,EAAA,IAAaC,EAAA,GACpE,EAAE,eAAAyoB,EAAA,IAAkBC,GAAA,GACpBzoB,IAAUC,GAAA,GACVyoB,IAASC,GAAA,GAETrgB,IAAQid,EAAQ,MAAMmD,EAAO,KAAK,CAACE,MAAMA,EAAE,OAAO5oB,CAAO,GAAG,CAACA,GAAS0oB,CAAM,CAAC,GAE7E,CAAC3B,GAAkBF,CAAmB,IAAIvlB,EAAiB,EAAE,GAC7D,CAAC0lB,GAAuBF,CAAwB,IAAIxlB,EAAwB,IAAI,GAEhF,CAACkF,GAAMC,CAAO,IAAInF,EAAmB8lB,GAAS,aAAa,GAE3DyB,IAActD;AAAA,IAChB,MAAMzlB,GAAU,QAAQ,KAAK,CAAC6W,MAAUA,EAAM,UAAUA,EAAM,YAAY3W,CAAO;AAAA,IACjF,CAACF,GAAU,QAAQE,CAAO;AAAA,EAAA,GAExB,CAAC2W,GAAOmS,CAAQ,IAAIxnB,EAAA,GAEpBynB,IAAexD,EAAQ,MAAM;AAI/B,UAAMyD,IAAW1gB,IAAQA,EAAM,QAAQ,QAAQ,KAAK,OAAO,OAAO,IAAI,CAAA;AACtE,WAAO2gB,GAAmB;AAAA,MACtB,OAAA3gB;AAAA,MACA,WAAW0gB,EAAS,SAASE,GAASF,EAAS,IAAI,CAACtgB,MAAQygB,GAAKzgB,CAAG,CAAC,CAAC,IAAIygB,GAAA;AAAA,IAAK,CAClF;AAAA,EACL,GAAG,CAAC7gB,CAAK,CAAC;AAEV,EAAAnG,EAAU,MAAM;AACZ,IAAKwU,KACDmS,EAASD,CAAW;AAAA,EAE5B,GAAG,CAACA,CAAW,CAAC;AAEhB,QAAM,CAACO,GAAYC,CAAa,IAAI/nB,EAAiB,EAAE,GACjD,CAACgoB,GAAqBC,CAAsB,IAAIjoB,EAAiB,OAAO8nB,CAAU,CAAC,GACnF,CAACI,GAAaC,CAAc,IAAInoB,EAAkB,EAAK,GAEvD,CAACsmB,GAAO8B,CAAQ,IAAIpoB,EAA+B,IAAI,GACvD,CAAC2E,IAAc0jB,EAAe,IAAIroB,EAAkB,EAAK,GAGzDsoB,KAAwB5nB,GAAe,CAAC,GACxC,CAAC6nB,IAAoBC,EAAqB,IAAIxoB,EAAkB,EAAK,GAErE,CAACyoB,IAAWC,EAAY,IAAI1oB,EAAkB,EAAK,GACnD,CAAC2oB,IAAkBC,EAAmB,IAAI5oB,EAAiB,CAAC,GAC5D,CAACwF,IAAOqjB,CAAQ,IAAI7oB,EAAwB,IAAI,GAChD,CAAC8oB,IAAeC,EAAgB,IAAI/oB,EAAkB,EAAK,GAC3D,CAACimB,IAAQ+C,EAAS,IAAIhpB,EAAA,GAEtB,CAACkmB,IAAoB+C,EAAqB,IAAIjpB,EAAA,GAC9C,CAACmmB,IAAqB+C,EAAsB,IAAIlpB,EAAA,GAChD,CAACmpB,IAAUC,EAAW,IAAIppB,EAA2C,SAAS,GAE9EqpB,KAASpF,EAAQ,MAAMqF,GAAa,cAAc,GAAG,CAAA,CAAE;AAE7D,EAAAzoB,EAAU,MAAM;AAEZ,IAAI,CAAC,OAAOwU,GAAO,SAAS,GAAG,KAAK,CAAC7P,MACjC6iB,GAAgB,EAAK,GACrBQ,EAAS9B,EAAe,KACjB1R,GAAO,SAAS,OAAOA,GAAO,KAAK,IAAI,KAAK7P,OAAUuhB,OAE7DsB,GAAgB,EAAK,GACrBQ,EAAS,IAAI;AAAA,EAErB,GAAG,CAACxT,GAAO,OAAO7P,IAAOqjB,GAAUR,EAAe,CAAC,GAEnDxnB,EAAU,MAAM;AAEZ,IAAAynB,GAAsB,UAAU;AAChC,QAAIjG;AAIJ,UAAMkH,IAAkB,CAACC,IAAWC,KAA0B5C,OAAqB;AAC/E,MAAAyB,GAAsB,WAAW,GACjCD,GAAgB,EAAK,GACjBC,GAAsB,WAAW1B,MACjCyC,GAAO,MAAM,0DAA0DG,EAAG,GAC1EX,EAAShC,EAAgB,GACrBxE,mBAAwBA,CAAQ,KAEpCwG,EAASW,IAAK,gBAAgBC,EAAe;AAAA,IAErD,GAEMC,KAAa,YAAY;AAE3B,UAAI,EAAAxkB,MAAS4gB,GAAS,gBAAgByC,MAAsBO,MAAiB,CAACrB,MAG1EpS,KACA2S,KACAvC,KACApQ,GAAO,YACN6S,KAAeF,KAAuB,OAAO3S,GAAO,SAAS,CAAC,IACjE;AACE,QAAA+S,EAAS,IAAI,GACbC,GAAgB,EAAI,GACpBQ,EAAS,IAAI;AACb,YAAIc,IACAC,IACAC;AAEJ,YAAI;AACA,gBAAMC,KAAO,MAAMrC,EAAa,mBAAA;AAChC,UAAAkC,KAAeG,GAAK,cACpBF,KAAuBE,GAAK,wBAAwBA,GAAK,eAAe;AAAA,QAC5E,QAAQ;AACJ,cAAI;AACA,YAAAD,KAAW,MAAMpC,EAAa,YAAA;AAAA,UAClC,SAASjiB,IAAY;AACjB,YAAA+jB,EAAgB/jB,IAAO,yBAAyB;AAChD;AAAA,UACJ;AAAA,QACJ;AAEA,YAAIukB;AAEJ,YAAI;AACA,gBAAMC,MACD9B,KAAeF,MAAwB,OAAO3S,EAAM,SAAS,CAAC,MAAMA,EAAM,aACrE,OAAOA,EAAM,cAAc,CAAC,IAC5BA,GAAO,YAAYoP,KACjBwF,GAAW,GAAGjC,CAAmB,EAAE,IACnCkC,GAAiBlC,GAAqB3S,EAAM,YAAY,EAAE;AAEtE,UAAIA,GAAO,YAAYoP,KACnBsF,KAAW,MAAMtC,EAAa,YAAY;AAAA,YACtC,SAASjnB,GAAM;AAAA,YACf,IAAIilB;AAAA,YACJ,OAAOuE;AAAA,UAAA,CACV,IAEDD,KAAW,MAAMtC,EAAa,oBAAoB;AAAA,YAC9C,KAAK0C;AAAA,YACL,cAAc;AAAA,YACd,MAAM,CAAC1E,GAAyBuE,EAAW;AAAA,YAC3C,SAASxpB,GAAM;AAAA,YACf,SAAS6U,GAAO;AAAA,UAAA,CACnB;AAAA,QAET,SAAS7P,IAAY;AACjB,UAAA+jB,EAAgB/jB,IAAO,wBAAwB;AAC/C;AAAA,QACJ;AAEA,cAAM4kB,KAAYT,MAAgBE;AAClC,YAAI,CAACO,IAAW;AACZ,UAAAb,EAAgB,QAAW,yBAAyB;AACpD;AAAA,QACJ;AACA,cAAMc,KAAUD,KAAYL;AAE5B,YAAIO;AAEJ,YACIjV,GAAO,YAAYoP,OAClByD,KAAeF,MAAwB,OAAO3S,EAAM,SAAS,CAAC;AAE/D,UAAAiV,KAAgB,OAAOjV,EAAM,cAAc,CAAC,IAAIgV;AAAA,aAC7C;AAEH,cAAIA,KAAU,OAAO9C,GAAa,cAAc,CAAC,GAAG;AAChD,YAAAsB,EAAS,0BAA0B,GACnCR,GAAgB,EAAK;AACrB;AAAA,UACJ;AACA,UAAAiC,KACIpC,KAAeF,MAAwB,OAAO3S,EAAM,SAAS,CAAC,IACxD,OAAOA,EAAM,cAAc,CAAC,IAC5B6U,GAAiBlC,GAAqB3S,EAAM,YAAY,EAAE;AAAA,QACxE;AAEA,cAAMkV,KAA0BC;AAAA,UAC5B,CAACC,GAAYH,IAAejV,EAAM,YAAY,EAAE;AAAA,UAChDA,EAAM;AAAA,QAAA;AAGV,QAAA+S,EAAS;AAAA,UACL,cAAc/S,GAAO;AAAA,UACrB,kBAAkBoQ;AAAA,UAClB,sBAAAmE;AAAA,UACA,cAAAD;AAAA,UACA,UAAAE;AAAA,UACA,mBAAmBS;AAAA,UACnB,4BAA4BC;AAAA,UAC5B,+BAA+BzkB;AAAA,YAC3BykB,KAA0B,EAAElV,EAAM,kBAAkB;AAAA,YACpD7U,GAAM,YAAY;AAAA,YAClB8pB,OAAkB;AAAA,UAAA;AAAA,UAEtB,uBAAuBG,GAAYJ,IAAS9C,GAAa,YAAY,EAAE;AAAA,UACvE,mCAAmCzhB;AAAA,YAC/B,CAAC2kB,GAAYJ,IAAS9C,GAAa,YAAY,EAAE,IAAI,EAAEA,GAAa,kBAAkB;AAAA,YACtF/mB,GAAM,YAAY;AAAA,YAClB6pB,OAAY;AAAA,UAAA;AAAA,UAEhB,UAAU9C,GAAa,YAAY;AAAA,UACnC,WAAWS,EAAoB,SAAA;AAAA,UAC/B,UAAU+B;AAAA,QAAA,CACb,GAGDzB,GAAsB,UAAU,GAChCD,GAAgB,EAAK;AAAA,MACzB;AAAA,IACJ;AAGA,WAAAqB,GAAA,GAGArH,IAAW,YAAYqH,IAAY,GAAI,GAGhC,MAAM;AACT,MAAIrH,mBAAwBA,CAAQ;AAAA,IACxC;AAAA,EACJ,GAAG;AAAA,IACC2F;AAAA,IACAO;AAAA,IACAc;AAAA,IACAP;AAAA,IACAvB;AAAA,IACAE;AAAA,IACAhC;AAAA,IACApQ;AAAA,IACA6S;AAAA,IACA1nB;AAAA,IACA0E;AAAA,EAAA,CACH,GAEDrE,EAAU,MAAM;AACZ,IAAIqE,MAAS4gB,GAAS,QAAM4C,GAAa,EAAI;AAAA,EACjD,GAAG,CAACxjB,CAAI,CAAC,GAETrE,EAAU,MAAM;AACZ,QAAI,CAAC4nB,GAAW,QAAOG,GAAoB,CAAC;AAAA,EAChD,GAAG,CAACH,EAAS,CAAC;AAEd,QAAMiC,KAAkB/X,GAAY,YAAY;AAC5C,QAAI,CAACuU,EAAe,QAAOzhB,GAAM,MAAM,qBAAqB;AAE5D,IAAAmjB,GAAoB,CAACtB,MAAMA,IAAI,CAAC;AAChC,QAAI;AACA,UAAI,CAACrB,GAAQ,OAAM,IAAI,MAAM,+BAA+B;AAE5D,YAAM0E,IAAM,MAAMzD,EAAc,4BAA4BjB,EAAM,YAAYvnB,CAAO,EAAE;AACvF,UAAI,CAACisB,EAAI,GAAI,OAAM,IAAI,MAAM,wBAAwB;AAErD,YAAM5jB,IAAO,MAAM4jB,EAAI,KAAA;AAKvB,UAJAvB,GAAYriB,EAAK,MAAO,GACxBkiB,GAAsBliB,EAAK,gBAAgB,GAC3CmiB,GAAuBniB,EAAK,iBAAiB,GAEzCA,EAAK,WAAW,UAAW;AAE/B,YAAM+M,EAAgB,EAAI,GAC1B4U,GAAa,EAAK,GAClBvjB,EAAQ2gB,GAAS,GAAG;AAAA,IACxB,SAASnjB,GAAQ;AACb,MAAA8C,GAAM,MAAM9C,GAAG,OAAO;AACtB;AAAA,IACJ;AAAA,EACJ,GAAG,CAACjE,GAASunB,IAAQiB,GAAepT,CAAe,CAAC;AAGpD,EAAAjT,EAAU,MAAM;AACZ,QAAI,CAAC4nB,GAAW;AAGhB,UAAMpG,IAAW,YAAY,MAAMqI,MAAmB/B,KAAmBhC,KAAkC,CAAC;AAC5G,WAAO,MAAM,cAActE,CAAQ;AAAA,EACvC,GAAG,CAACoG,IAAWE,IAAkB+B,EAAe,CAAC;AAEjD,QAAME,KAAgB3G;AAAA,IAClB,MACI4G,GAAS,KAAK,CAAC/sB,MAAkB;AAC7B,MAAAsqB,EAAS,IAAI,GACbH,EAAuB,OAAOnqB,CAAK,CAAC;AAAA,IACxC,CAAC;AAAA,IACL,CAAA;AAAA,EAAC;AAIL,EAAA+C,EAAU,OACFqE,MAAS4gB,GAAS,OAAOqD,OAAa,aAAWnlB,EAAgB0B,GAAuB,OAAO,GAC/FR,MAAS4gB,GAAS,OAAOqD,OAAa,YAAUnlB,EAAgB0B,GAAuB,KAAK,GAEzF,MAAM;AACT,IAAA1B,EAAgB,MAAS;AAAA,EAC7B,IACD,CAACA,GAAiBmlB,IAAUjkB,CAAI,CAAC;AAEpC,QAAMS,KAAqBqiB,IAAsB,KAAKA,KAAuB,OAAO3S,GAAO,SAAS,GAAG,GAEjGM,KAAYN,GAAO,OACrB,gBAAAzX,EAAC,SAAI,KAAKyX,EAAM,MAAM,KAAKA,EAAM,QAAQ,WAAU,wCAAA,CAAwC,sBAE1FhX,IAAA,EAAY,GAGXysB,KAAgCzV,IAChCpB,GAAiBoB,GAAO,YAAYA,GAAO,UAAUA,GAAO,eAAe,IAC3E,QACA0V,KAA8B1V,IAC9BA,GAAO,iBACHvP;AAAA,IACI,WAAW2kB,GAAY,OAAOpV,GAAO,cAAc,CAAC,GAAGA,GAAO,YAAY,EAAE,CAAC,IACzE,WAAWA,GAAO,cAAc;AAAA,IACpCA,GAAO;AAAA,IACP,OAAOA,GAAO,cAAc,CAAC,IAAI;AAAA,EAAA,IAErCvP,EAAeuP,GAAO,UAAU,GAAGA,GAAO,UAAU,OAAOA,GAAO,cAAc,CAAC,MAAM,EAAE,IAC7F;AAEN,SACI,gBAAA1X,EAAA0D,GAAA,EACK,UAAA;AAAA,IAAA6D,MAAS4gB,GAAS,iBACf,gBAAAloB;AAAA,MAAC0nB;AAAAA,MAAA;AAAA,QACG,QAAA9hB;AAAA,QACA,SAAA2B;AAAA,QACA,qBAAAogB;AAAA,QACA,0BAAAC;AAAA,QACA,kBAAAC;AAAA,QACA,uBAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIPxgB,MAAS4gB,GAAS,gBACf,gBAAAloB;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACG,gBAAgB;AAAA,QAChB,QACI,gBAAA7D;AAAA,UAACwC;AAAAA,UAAA;AAAA,YACG,gBAAgB;AAAA,YAChB,kBAAkB;AAAA,cACd,OAAO;AAAA,cACP,aAAa,MAAM;AACf,gBAAA+E,EAAQ2gB,GAAS,aAAa;AAAA,cAClC;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,QAGR,SACI,gBAAAnoB;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWoB;AAAA,cACP;AAAA,YAAA;AAAA,YAGJ,UAAA;AAAA,cAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wDACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,MAAA,EAAI,UAAC+H,KAAsC,YAAjB,gBAA2B;AAAA,kBAEtD,gBAAA/H;AAAA,oBAAC6lB;AAAAA,oBAAA;AAAA,sBACG,eAAepO;AAAA,sBACf,eAAe,CAACA,MAAU;AAEtB,wBAAA0S,EAAc,EAAE,GAChBI,EAAe,EAAK,GAEpBF,EAAuB,CAAC,GACxBY,EAAS,IAAI,GACbT,EAAS,IAAI,GAEbZ,EAASnS,CAAK;AAAA,sBAClB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACJ,GACJ;AAAA,gBAEA,gBAAA1X,EAAC,OAAA,EAAI,WAAU,oFACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,SAAI,UAAA,UAAA,CAAO;AAAA,kBACXyX,KACG,gBAAA1X,EAAC,OAAA,EAAI,WAAU,0BACV,UAAA;AAAA,oBAAAmtB;AAAA,oBAA8B;AAAA,oBAAEzV,GAAO;AAAA,oBAAO;AAAA,oBAC9C0V;AAAA,oBAA4B;AAAA,kBAAA,EAAA,CACjC;AAAA,gBAAA,EAAA,CAER;AAAA,cAAA,GACJ;AAAA,cAEA,gBAAAntB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAU;AAAA,kBACV,SAAS,CAAC+E,MAAM;AACZ,0BAAMiD,IAAQjD,EAAE,cAAc,cAAc,OAAO;AACnD,oBAAIiD,KACAA,EAAM,MAAA;AAAA,kBAEd;AAAA,kBAEA,UAAA,gBAAAjI,EAAC,OAAA,EAAI,WAAU,kEACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,SAAI,WAAU,oKACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,kEACX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,SAAI,WAAU,2CACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,wBAAA,gBAAAC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACG,eAAW;AAAA,4BACX,WAAU;AAAA,4BAET,UAAAkqB,KAAc;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEnB,gBAAAlqB;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACG,MAAK;AAAA,4BACL,KAAKyX,GAAO,SAAS;AAAA,4BACrB,UAAU,CAAC,OAAOA,GAAO,SAAS,GAAG;AAAA,4BAErC,WAAW,CAAC1S,MAAM;AAEd,kCACIA,EAAE,QAAQ,eACVA,EAAE,QAAQ,eACVA,EAAE,QAAQ;AAEV;AAGJ,8BAAK,UAAU,KAAKA,EAAE,GAAG,OAAK,eAAA,GAC1BmlB,GAAY,SAAS,GAAG,KAAKnlB,EAAE,IAAI,SAAS,GAAG,KAC/CA,EAAE,eAAA;AAGN,oCAAMiD,IAAQjD,EAAE,eACVqoB,KAAWplB,EAAM,QAAQjD,EAAE;AACjC,8BACIiD,EAAM,OACN,CAAC,MAAM,WAAWolB,EAAQ,CAAC,KAC3B,WAAWA,EAAQ,IAAI,WAAWplB,EAAM,GAAG,KAE3CijB,EAAS/B,EAAiB;AAAA,4BAElC;AAAA,4BACA,gBAAgB,CAACnkB,MAAM;AACnB,8BAAAA,EAAE,cAAc,KAAA;AAAA,4BACpB;AAAA,4BACA,OAAOmlB;AAAA,4BACP,UAAU,CAACnlB,MAAM;AAEb,oCAAM7E,IAAQM;AAAA,gCACVuE,EAAE,OAAO;AAAA,gCACT,KAAK;AAAA,kCACD0S,GAAO,mBAAmB4V;AAAA,kCAC1BA;AAAA,gCAAA;AAAA,8BACJ;AAIJ,kCACI,CAAC,MAAM,WAAWtoB,EAAE,OAAO,GAAG,CAAC,KAC/B,WAAW7E,CAAK,IAAI,WAAW6E,EAAE,OAAO,GAAG,GAC7C;AAEE,oCAAImmB,GAAe;AACnB,gCAAAC,GAAiB,EAAI;AAAA,8BACzB;AACI,gCAAAF,EAAS,IAAI,GACbE,GAAiB,EAAK;AAG1B,8BAAA6B,GAAc9sB,CAAK,GACnBiqB,EAAcjqB,CAAK,GACnBqqB,EAAe,EAAK;AAAA,4BACxB;AAAA,4BACA,aAAY;AAAA,4BACZ,WAAWppB;AAAA,8BACP;AAAA,8BACA,CAAC,OAAOsW,GAAO,SAAS,GAAG,KACvB;AAAA,4BAAA;AAAA,0BACR;AAAA,wBAAA;AAAA,sBACJ,EAAA,CACJ,EAAA,CACJ;AAAA,wCACC,QAAA,EAAK,WAAU,qCACX,UAAAA,GAAO,UAAU,GAAA,CACtB;AAAA,oBAAA,EAAA,CACJ,EAAA,CACJ;AAAA,oBAEA,gBAAA1X,EAAC,OAAA,EAAI,WAAU,8DACV,UAAA;AAAA,sBAAA0X,GAAO,kBACJ,gBAAAzX,EAAC,OAAA,EAAI,WAAU,0BACV,UAAAkI;AAAA,wBACG,CAACuP,GAAO,iBAAiB,CAACyS;AAAA,wBAC1BzS,GAAO;AAAA,wBACP,OAAOyS,CAAU,MAAM;AAAA,sBAAA,GAE/B;AAAA,sBAEJ,gBAAAlqB;AAAA,wBAACuF;AAAA,wBAAA;AAAA,0BACG,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,UAAU,CAAC,OAAOkS,GAAO,SAAS,GAAG;AAAA,0BACrC,WAAU;AAAA,0BACV,SAAS,MAAM;AACX,kCAAM6V,IAAahD,IAAc,KAAK,GAAG,EAAE7S,GAAO,SAAS,MAAM,EAAE;AACnE,4BAAA0S,EAAcmD,CAAU,GACxBN,GAAcM,CAAU,GACxB/C,EAAe,CAACvlB,MAAM,CAACA,CAAC;AAAA,0BAC5B;AAAA,0BAEA,4BAAC,QAAA,EAAK,WAAU,0BACX,UAACslB,IAAsB,UAAR,MAAQ,CAC5B;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACJ,EAAA,CACJ;AAAA,kBAAA,EAAA,CACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGHviB,KACG,gBAAAhI;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAWoB;AAAA,oBACP;AAAA,oBACA;AAAA,kBAAA;AAAA,kBAGJ,UAAA;AAAA,oBAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,2DACX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,sBACrB+G,MAAgB,CAAC2hB,IACd,gBAAA1oB,EAACmI,GAAA,EAAS,WAAU,iBAAA,CAAiB,IAErC,gBAAAnI,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAA,SAAA,CAAS;AAAA,oBAAA,GAEzE;AAAA,oBAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,UAAK,UAAA,eAAA,CAAY;AAAA,sBAClB,gBAAAA,EAAC,OAAA,EAAI,WAAU,wCACV,gBAAgB,CAAC0oB,IACd,gBAAA1oB,EAACmI,GAAA,EAAS,WAAU,iBAAA,CAAiB,IAErC,GAAGkO,GAAiBiW,GAAiB5D,GAAO,yBAAyB,GAAGiB,GAAa,YAAY,EAAE,GAAGA,GAAa,YAAY,IAAIA,GAAa,eAAe,CAAC,IAAIA,GAAa,MAAM,KAAKjB,GAAO,iCAAiC,IAAA,CAE5O;AAAA,oBAAA,GACJ;AAAA,oBAEA,gBAAA3oB,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,UAAK,UAAA,6BAAA,CAA0B;AAAA,sBAChC,gBAAAA,EAAC,SAAI,WAAU,wCACV,gBAAgB,CAAC0oB,sBACbvgB,GAAA,EAAS,WAAU,kBAAiB,IAErC,GAAGugB,GAAO,0BAA0B,IAAIjR,GAAO,MAAM,KAAKiR,GAAO,6BAA6B,IAAA,CAEtG;AAAA,oBAAA,EAAA,CACJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,sBAGH,OAAA,CAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAIjB,QACI,gBAAA3oB,EAAA0D,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAzD,EAAC,OAAA,EAAI,WAAWmB,EAAG,qEAAqE,GACnF,UAAAyG,KACG,gBAAA5H,EAAC,QAAA,EAAK,WAAU,qIACX,UAAA4H,GAAA,CACL,IACA,MACR;AAAA,UAEA,gBAAA7H;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWoB;AAAA,gBACP;AAAA,gBACA;AAAA,cAAA;AAAA,cAGJ,UAAA;AAAA,gBAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC0D,IAAA,EAAW,WAAU,6BAAA,CAA6B;AAAA,kBACnD,gBAAA3D,EAAC,OAAA,EAAI,WAAU,6CACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,QAAI;AAAA,oBAC7C,gBAAAA,EAAC,QAAA,EAAK,WAAU,gBACX,UAAA4C,GAAM,QAAQtB,GAAmBsB,GAAM,aAAa,EAAE,EAAA,CAC3D;AAAA,kBAAA,EAAA,CACJ;AAAA,gBAAA,GACJ;AAAA,gBACA,gBAAA7C,EAAC,OAAA,EAAI,WAAU,iFACX,UAAA;AAAA,kBAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,qCAAA,CAAqC;AAAA,kBAC9D,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,gCAAA,CAAgC;AAAA,gBAAA,GAC7D;AAAA,gBACA,gBAAA1F,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC0D;AAAA,oBAAA;AAAA,sBACG,WAAU;AAAA,sBACV,aAAY;AAAA,sBACZ,aAAaskB,GAAeH,CAAgB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEhD,gBAAA9nB,EAAC,OAAA,EAAI,WAAU,6CACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,MAAE;AAAA,sCAC1C,QAAA,EAAK,WAAU,gBAAgB,UAAAsB,GAAmBumB,CAAgB,EAAA,CAAE;AAAA,kBAAA,EAAA,CACzE;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,gBAAA9nB;AAAA,YAACwF;AAAA,YAAA;AAAA,cACG,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,UACI,CAACyQ;AAAA,cACD2U,MACA5jB,MACA,CAAC,CAACa,MACF,CAAC8gB,KACD,CAACwB,KACD,CAACA,KAAc,MACdzS,GAAO,QAAQ,CAACyS,IAAa,CAACzS,EAAM,QAAQ;AAAA,cAEjD,SAAS,YAAY;AACjB,oBAAI8V;AACJ,gBAAA3C,GAAsB,EAAI,GAC1BK,EAAS,IAAI;AACb,oBAAI;AACA,sBAAI,CAACvC,GAAO;AACR,0BAAM,IAAI,MAAM,sBAAsB;AAE1C,sBAAI,CAACmB;AACD,0BAAM,IAAI,MAAM,sBAAsB;AAG1C,sBAAI2D;AACJ,sBAAI/V,GAAO,YAAYoP;AACnB,oBAAA0G,IAAU,MAAMlE,EAAgB;AAAA,sBAC5B,aAAa;AAAA,wBACT,IAAIxB;AAAA,wBACJ,OAAOa,GAAO;AAAA,wBACd,GAAIA,GAAO,WACL,EAAE,MAAM,GAAG,UAAUA,EAAM,aAC3B;AAAA,0BACI,cAAcA,GAAO;AAAA,0BACrB,sBAAsBA,GAAO;AAAA,wBAAA;AAAA,sBACjC;AAAA,oBACV,CACH,GACD8E,IAAQD;AAAA,uBACL;AACH,0BAAME,KAAS,MAAM5D,EAAa,iBAAiB;AAAA,sBAC/C,KAAK0C;AAAA,sBACL,cAAc;AAAA,sBACd,SAAS3pB,GAAM;AAAA,sBACf,SAAS6U,GAAO;AAAA,sBAChB,MAAM,CAACoQ,GAAyBa,GAAO,iBAAiB;AAAA,sBACxD,OAAAtf;AAAA,sBACA,KAAKsf,GAAO;AAAA,oBAAA,CACf;AACD,wBAAI;AACA,4BAAMvf,KAAOukB,GAAmB;AAAA,wBAC5B,KAAKnB;AAAA,wBACL,cAAc;AAAA,wBACd,MAAM,CAAC1E,GAAyBa,GAAO,iBAAiB;AAAA,sBAAA,CAC3D;AAED,sBAAA6E,IAAU,MAAMlE,EAAgB;AAAA,wBAC5B,aAAa;AAAA,0BACT,IAAI5R,GAAO;AAAA,0BACX,MAAAtO;AAAA,0BACA,GAAIuf,GAAO,WACL,EAAE,MAAM,GAAG,UAAUA,EAAM,aAC3B;AAAA,4BACI,cAAc+E,IAAQ,SAAS;AAAA,4BAC/B,sBACIA,IAAQ,SAAS;AAAA,0BAAA;AAAA,wBACzB;AAAA,sBACV,CACH,GACDD,IAAQD;AAAA,oBACZ,SAAS3lB,IAAO;AACZ,4BAAA6jB,GAAO,MAAM,sCAAsC7jB,EAAK,GAClDA;AAAAA,oBACV;AAAA,kBACJ;AAEA,sBADA6jB,GAAO,MAAM,YAAY+B,CAAK,GAC1B,CAAClE,EAAe,QAAOzhB,GAAM,MAAM,qBAAqB;AAK5D,mBAJY,MAAMyhB,EAAc,4BAA4BkE,CAAK,IAAI;AAAA,oBACjE,QAAQ;AAAA,oBACR,MAAM,KAAK,UAAU,EAAE,SAAA1sB,GAAS;AAAA,kBAAA,CACnC,GACO,MACJsqB,GAAUoC,CAAK,GACfvC,EAAS,IAAI,GACb1jB,EAAQ2gB,GAAS,IAAI,GACrB,MAAMhS,EAAgB,EAAI,OACd,4BAA4B;AAAA,gBAChD,SAAStO,GAAO;AACZ,kBAAA6jB,GAAO,MAAM,qBAAqB7jB,CAAK,GACvCqjB,EAAS,4BAA4B,GACrCpjB,GAAM,MAAM,4BAA4B;AAAA,gBAC5C,UAAA;AACI,kBAAA+iB,GAAsB,EAAK;AAAA,gBAC/B;AAAA,cACJ;AAAA,cACH,UAAA;AAAA,gBAAA;AAAA,gBAEID,MAAsB,gBAAA3qB,EAACoI,IAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1E,GACJ;AAAA,QAEJ,iBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAInBd,MAAS4gB,GAAS,QACf,gBAAAloB;AAAA,MAACyoB;AAAAA,MAAA;AAAA,QACG,QAAA7iB;AAAA,QACA,QAAAyiB;AAAA,QACA,oBAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,OAAAG;AAAA,QACA,aAAajR,GAAO,UAAU;AAAA,QAC9B,WAAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAIPzQ,MAAS4gB,GAAS,QACdqD,OAAa,YACV,gBAAAvrB;AAAA,MAAC6oB;AAAAA,MAAA;AAAA,QACG,OAAO,MACH3S,EAAgB,EAAI,EACf,QACA,QAAQ,MAAM9Q,GAAO;AAAA,QAE9B,gBAAgB,MACZ8Q,IACK,QACA,QAAQ,MAAM7Q,GAAgB;AAAA,QAEvC,OAAAqjB;AAAA,QACA,aAAajR,GAAO,UAAU;AAAA,MAAA;AAAA,IAAA,IAGlC,gBAAAzX;AAAA,MAACooB;AAAAA,MAAA;AAAA,QACG,QAAAC;AAAA,QACA,oBAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,OAAO,MACHrS,EAAgB,EAAI,EACf,QACA,QAAQ,MAAM9Q,GAAO;AAAA,QAE9B,gBAAgB,MACZ8Q,EAAA,EACK,QACA,QAAQ,MAAM7Q,EAAA,CAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,EAE3C,GAEZ;AAER;AC1zBO,MAAMsoB,IAAsB;AAAA,EAC/B,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,uBACI;AAAA,EACJ,iBACI;AAAA,EACJ,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,sBAAsB;AAC1B,GAEaC,KAAoB,CAAChmB,MAAkB;AAChD,MAAI,OAAOA,KAAU,YAAY,CAACA,UAAc+lB,EAAoB;AAEpE,MAAI;AAEA,QACI/lB,MAAU+lB,EAAoB,oBAC9B/lB,EAAM,cAAc,SAAS,aAAa,KACzCA,EAAM,cAAc,SAAS,KAAK,KAAKA,EAAM,cAAc,SAAS,SAAS;AAE9E,aAAO+lB,EAAoB;AAI/B,QAAI/lB,EAAM,YAAA,EAAc,SAAS,iBAAiB;AAC9C,aAAO+lB,EAAoB;AAAA,EAEnC,QAAQ;AAAA,EAER;AAEA,SAAO/lB,EAAM,SAAS,MAAMA,IAAQ+lB,EAAoB;AAC5D;AC9BO,SAASE,GAA0B/sB,GAA+B;AACrE,QAAMgtB,IAAcpH,IAAa,UAAU,CAAA,GAErCqH,IAAaD,EAAY,IAAI,CAAC,MAAME,GAAmB,CAAQ,EAAE,SAAS,GAM1EC,IAAaH,EAAY,KAAK,CAAC,MAAW,EAAE,OAAOhtB,CAAO,GAAG;AAEnE,SAAOipB,GAAmB;AAAA,IACtB,OAAOmE,GAAa,EAAE,QAAQH,GAAY,IAAIjtB,GAAS;AAAA,IACvD,WAAWmtB,IACLhE,GAAKgE,CAAU,IACfntB,MAAYqtB,GAAQ,KAClBnE,GAAS,CAACC,GAAK,qCAAqC,GAAGA,IAAM,CAAC,IAC9DA,GAAA;AAAA,EAAK,CAChB;AACL;ACjBO,MAAMmE,KAA0B,CAACC,MAAqD;AACzF,QAAM,EAAE,MAAAzrB,GAAM,aAAA0rB,GAAa,eAAAC,GAAe,iBAAAlF,EAAA,IAAoBxoB,EAAA,GAExD,EAAE,kBAAAmlB,EAAA,IAAqBC,GAAA;AAE7B,SAAOI,EAAQ,MACP,CAACzjB,GAAM,aAAa,CAACojB,KAAoB,CAACqI,IACnC,OAGJ;AAAA,IACH,QAAQ;AAAA,IACR,SAAS,MAAM,QAAQ,QAAQzrB,GAAM,SAAS;AAAA,IAC9C,YAAY,YACQ4rB,GAAWH,CAAM;AAAA,IAGrC,uBAAuB,OAAOI,MAAa;AACvC,YAAMC,IAAWD,EAAS,MAAM;AAChC,UAAIE;AACJ,aAAID,MACIA,EAAS,kBAAkB,YAC3BhI,GAAY,IAAI,CAAC,oCAAoC,GAAGkI,GAAS,OAAO,GACpEF,EAAS,QAAQ,MAAM,mBAAmB,IAE1CC,IAAY,MAAML,EAAY;AAAA,QAC1B,SAASI,EAAS;AAAA,MAAA,CACrB,IAEDC,IAAY,MAAML,EAAY;AAAA,QAC1B,SAASI,EAAS;AAAA,MAAA,CACrB,KAEEA,EAAS,kBAAkB,aAClChI,GAAY,IAAI,CAAC,oCAAoC,GAAGkI,GAAS,OAAO,GACxED,IAAY,MAAMJ,EAAc;AAAA,QAC5B,MAAM;AAAA,UACF,QAAQG,EAAS;AAAA,UACjB,OAAOA,EAAS;AAAA,UAChB,aAAaA,EAAS;AAAA,UACtB,SAASA,EAAS;AAAA,QAAA;AAAA,MACtB,CACH,KAGFC;AAAA,IACX;AAAA,IACA,2BAA2B,OAAO7tB,GAAS2tB,MAAa;AACpD,YAAMI,IAAWJ,EAAS;AAU1B,aATY,MAAMpF,EAAgB;AAAA,QAC9B,aAAa;AAAA,UACT,MAAMwF,EAAS;AAAA,UACf,IAAIA,EAAS;AAAA,UACb,OAAOC,GAAaD,EAAS,SAAiB,CAAC;AAAA,UAC/C,MAAMA,EAAS;AAAA,UACf,SAAA/tB;AAAA,QAAA;AAAA,MACJ,CACH;AAAA,IAEL;AAAA,IACA,8BAA8B,OAAOunB,GAAQvnB,GAASiuB,GAAYC,MAAgB;AAE9E,YAAMnF,IAD0BoF,GAAgBZ,GAAQ,EAAE,SAAAvtB,GAAkB,KAC5B+sB,GAA0B/sB,CAAO;AAEjF,UAAI,CAAC+oB;AACD,sBAAQ,MAAM,uCAAuC,GAC/C,IAAI,MAAM,mCAAmC;AAIvD,YAAM0D,IAAU,MAAM1D,EAAa,0BAA0B;AAAA,QACzD,MAAMxB;AAAA,QACN,YAAY,CAAC6G,MAAgB;AACzB,cAAIA,EAAY,WAAW;AACvB,kBAAAF,EAAA,GACM,MAAM,uBAAuB;AAEvC,UAAAD,EAAWG,EAAY,YAAY,IAAI;AAAA,QAC3C;AAAA,MAAA,CACH;AAED,UAAI3B,EAAQ,WAAW;AACnB,cAAM,IAAI,MAAM,oBAAoB;AAIxC,aAAOA;AAAA,IACX;AAAA,IACA,aAAa,OAAOzsB,MAAY;AAC5B,YAAMklB,EAAiB,EAAE,SAAAllB,GAAS;AAAA,IACtC;AAAA,EAAA,GAEL,CAACklB,GAAkBqD,GAAiBiF,GAAaC,GAAe3rB,GAAM,WAAWyrB,CAAM,CAAC;AAC/F,GC9Fac,KAAwB,mBAExBC,KAA4B,CAACC,GAAcC,OAC7C,EAAE,MAAAD,GAAY,SAAAC,EAAA,IAGZC,KAAkB,MAAM;AACjC,QAAMzuB,IAAUC,GAAA,GACV,EAAE,eAAAuoB,EAAA,IAAkBC,GAAA,GACpB,EAAE,kBAAAiG,EAAA,IAAqBC,GAAA,GAEvBpB,IAASqB,GAAA,GACTC,IAAavB,GAAwBC,CAAM;AAEjD,SAAOuB,GAAY;AAAA,IACf,YAAY,OAAO,EAAE,IAAAC,GAAI,kBAAAC,QAAqF;AAC1G,UAAI,CAACzB;AACD,sBAAQ,MAAM,qBAAqB,GAC7Be,GAA0BD,IAAuBxB,EAAoB,gBAAgB;AAE/F,UAAI,CAACgC;AACD,sBAAQ,MAAM,+BAA+B,GACvCP,GAA0BD,IAAuBxB,EAAoB,gBAAgB;AAG/F,YAAMoC,IAAeF,EAAG,SAAS,YAAY,UAAU;AACvD,UAAIE,MAAiBC;AAEjB,cAAMZ,GAA0BD,IAAuBxB,EAAoB,sBAAsB;AAGrG,UAAI,CAACrE;AACD,cAAM8F,GAA0BD,IAAuBxB,EAAoB,gBAAgB;AAE/F,UAAIsC,IAAY;AAGhB,UAAI;AACA,cAAMlD,IAAM,MAAMzD,EAAc,0BAA0B;AAAA,UACtD,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,EAAE,GAAGuG,EAAG,SAAS,MAAM;AAAA,QAAA,CAC/C;AACD,YAAI,CAAC9C,EAAI,GAAI,OAAM,EAAE,MAAMoC,IAAuB,SAASxB,EAAoB,eAAA;AAE/E,QAAIoC,KAAgBA,MAAiBjvB,KACjC,MAAM6uB,EAAW,YAAYI,CAAY,GAE7CE,IAAY,MAAMlD,EAAI,KAAA;AAAA,MAC1B,SAAShoB,GAAG;AACR,sBAAQ,MAAMA,CAAC,GACTqqB,GAA0BD,IAAuBxB,EAAoB,cAAc;AAAA,MAC7F;AAEA,YAAM,EAAE,IAAIuC,GAAO,OAAOC,MAAeF;AAEzC,MAAAH,IAAmBK,CAAU;AAE7B,UAAInT;AACJ,UAAI;AAEA,YAAIoT;AACJ,cAAMC,IAAe,CAACC,MAAmC;AACrD,UAAIF,kBAAwBA,CAAS,GACrCA,IAAY,WAAW,MAAM;AACzB,YAAAE,EAAO,IAAI,MAAM,oEAAoE,CAAC;AAAA,UAC1F,GAAG,IAAkB;AAAA,QACzB;AAEA,QAAAtT,IAAS,MAAM,IAAI,QAAQ,CAACuT,GAASD,MAAW;AAC5C,UAAAD,EAAaC,CAAM,GACnB5J,GAAY,QACP,QAAQ;AAAA,YACL,OAAOyJ;AAAA,YACP,QAAQR;AAAA,YACR,YAAY,MAAM;AACd,cAAAU,EAAaC,CAAM;AAAA,YACvB;AAAA,UAAA,CACH,EACA,KAAKC,CAAO,EACZ,MAAMD,CAAM,EACZ,QAAQ,MAAM;AACX,YAAIF,kBAAwBA,CAAS;AAAA,UACzC,CAAC;AAAA,QACT,CAAC;AAAA,MACL,SAASxoB,GAAO;AACZ,oBAAM4nB,EAAiBU,CAAK,GACtBtoB;AAAA,MACV;AAIA,YAAM4oB,IAAgBxT,GAAgB,UAAWA,GAAgB,OAC3DyT,IAAezT,GAAgB,SAAUA,GAAgB,UAAWA,GAAgB;AAE1F,+BAD2B,IAAI,CAAC,SAAS,UAAU,WAAW,UAAU,CAAC,GACtD,IAAI,OAAOwT,CAAY,EAAE,aAAa,KAAMxT,GAAgB,OAAO;AAClF,oBAAMwS,EAAiBU,CAAK,GACtB,IAAI,MAAM,OAAOO,KAAgB,WAAWA,IAAc,wBAAwB;AAK5F,aAAO,EAAE,WAFUN,GAAoB,QAAQ,CAAC,GAAG,WAE/B,OAAAD,GAAO,QAAAlT,EAAA;AAAA,IAC/B;AAAA,EAAA,CACH;AACL,GC/Fa0T,KAAuB,CAAC;AAAA,EACjC,iBAAAC;AAAA,EACA,aAAAnF;AAAA,EACA,SAAAjkB;AAAA,EACA,SAAAqpB;AACJ,MAAkC;AAC9B,QAAM,CAACC,GAAWC,CAAY,IAAI1uB,EAAA,GAC5B,CAACwF,GAAOqjB,CAAQ,IAAI7oB,EAAiB,EAAE,GAEvC,EAAE,iBAAA8T,GAAiB,mBAAA6a,EAAA,IAAsBlZ,GAAA,GAEzCmZ,IAASluB,GAAO,EAAE,SAAA8tB,GAAS,iBAAA1a,GAAiB,mBAAA6a,GAAmB;AACrE,SAAAC,EAAO,UAAU,EAAE,SAAAJ,GAAS,iBAAA1a,GAAiB,mBAAA6a,EAAA,GAE7C9tB,EAAU,MAAM;AACZ,QAAI,CAAC0tB,EAAiB;AAEtB,QAAIM,IAAY;AAChB,UAAMC,IAAa,IAAI,gBAAA;AACvB,QAAIC,IAAW;AACf,IAAAlG,EAAS,EAAE,GACX6F,EAAa;AAAA,MACT,MAAMH;AAAA,MACN,mBAAmB;AAAA,MACnB,kBAAkB,kCAAkCA,CAAe;AAAA,IAAA,CACtE;AACD,UAAMS,IAAO,CAACC,MACV,IAAI,QAAc,CAACd,MAAY;AAC3B,YAAMe,IAAS,MAAM;AACjB,qBAAaC,CAAK,GAClBL,EAAW,OAAO,oBAAoB,SAASI,CAAM,GACrDf,EAAA;AAAA,MACJ,GACMgB,IAAQ,WAAWD,GAAQD,CAAE;AACnC,MAAAH,EAAW,OAAO,iBAAiB,SAASI,GAAQ,EAAE,MAAM,IAAM,GAC9DJ,EAAW,OAAO,WAASI,EAAA;AAAA,IACnC,CAAC;AA4FL,YA1FmB,YAAY;AAC3B,aAAO,CAACL,KAAW;AACf,YAAI;AACA,gBAAMO,IAAiB,IAAI,gBAAA,GACrBC,IAAY,MAAMD,EAAe,MAAA;AACvC,UAAAN,EAAW,OAAO,iBAAiB,SAASO,GAAW,EAAE,MAAM,IAAM;AACrE,gBAAMC,IAAU,WAAWD,GAAW,IAAK;AAC3C,cAAItoB;AACJ,cAAI;AACA,kBAAMwoB,IAAO,MAAM;AAAA,cACf,GAAGC,EAAiB,gCAAgC,mBAAmBjB,CAAe,CAAC;AAAA,cACvF,EAAE,QAAQa,EAAe,OAAA;AAAA,YAAO;AAEpC,gBAAI,CAACG,EAAK,GAAI,OAAM,IAAI,MAAM,gCAAgC;AAE9D,gBADAxoB,IAAO,MAAMwoB,EAAK,KAAA,GACdH,EAAe,OAAO;AACtB,oBAAM,IAAI,aAAa,yBAAyB,YAAY;AAAA,UACpE,UAAA;AACI,yBAAaE,CAAO,GACpBR,EAAW,OAAO,oBAAoB,SAASO,CAAS;AAAA,UAC5D;AACA,cAAIR,EAAW;AACf,gBAAMY,IAAS1oB,GAAM;AAErB,cAAI,CAAC0oB;AACD,kBAAM,IAAI,MAAM,0BAA0B;AAG9C,UAAAV,IAAW,GACXlG,EAAS,EAAE;AACX,cAAI;AACA,kBAAM6G,IAA4B;AAAA,cAC9B,MAAMnB;AAAA,cACN,mBAAmB;AAAA,cACnB,kBAAkB,kCAAkCA,CAAe;AAAA,YAAA;AAGvE,YAAAG,EAAagB,CAAc;AAAA,UAC/B,SAASlqB,GAAO;AACZ,oBAAQ,MAAM,0BAA0BA,CAAK;AAAA,UACjD;AAEA,cAAIiqB,MAAW,WAAW;AACtB,YAAKZ,MACID,EAAO,QAAQ,qBAChBA,EAAO,QAAQ,kBAAA,GAEnBxF,EAAY,SAAS,GACrBjkB,EAAQwqB,GAAS,GAAG;AAExB;AAAA,UACJ;AAEA,cAAIF,MAAW,YAAYA,MAAW,WAAW;AAC7C,gBAAI,CAACZ,GAAW;AAIZ,kBAHKD,EAAO,QAAQ,qBAChBA,EAAO,QAAQ,kBAAA,GAEfA,EAAO,QAAQ;AACf,oBAAI;AACA,wBAAMA,EAAO,QAAQ,QAAA;AAAA,gBACzB,QAAQ;AAAA,gBAER;AAEJ,kBAAIC,EAAW;AACf,cAAAzF,EAAY,QAAQ,GACpBjkB,EAAQwqB,GAAS,GAAG,GAChBF,MAAW,WACX5G,EAAS,+BAA+B,IAEpC9hB,EAAK,WACL8hB,EAAS9hB,GAAM,OAAO;AAAA,YAGlC;AACA;AAAA,UACJ;AAAA,QACJ,QAAQ;AAKJ,cAJI8nB,MACJE,KAAY,GAEZlG,EAAS,yFAAyF,GAC9FkG,KAAY,GAAG;AAAA,QACvB;AAEA,cAAMC,EAAK,KAAK,IAAI,MAAO,KAAKD,GAAU,GAAK,CAAC;AAAA,MACpD;AAAA,IACJ,GAEA,GAEO,MAAM;AACT,MAAAF,IAAY,IACZC,EAAW,MAAA;AAAA,IACf;AAAA,EACJ,GAAG,CAACP,GAAiBnF,GAAajkB,CAAO,CAAC,GAEnC;AAAA,IACH,OAAAK;AAAA,IACA,WAAAipB;AAAA,EAAA;AAER,GCtJMmB,KAAyB,KAElBC,KAAa,MAEbC,KAAqB,CAC9BC,GACAC,GACAC,GACAC,GACAC,MAIID,KAA0B,QAC1BF,MACCD,MAAuBC,GAAa,UAC/B,OAAOE,CAAqB,IAAI,QAAQ,OAAOD,KAAuB,CAAC,IAAIJ,MAC1E,OAAOK,CAAqB,IAAI,OAAOC,KAAc,GAAG,KAAK,QAC9D,OAAOF,KAAuB,CAAC,IAAIJ,KAIpCO,KAAgB,CAACC,MAAsB;AAChD,QAAMC,IAAYjD,GAAA,GACZ,EAAE,eAAAnG,EAAA,IAAkBC,GAAA,GAEpB,EAAE,cAAAoJ,GAAc,YAAAC,GAAY,WAAAC,GAAW,QAAAlO,GAAQ,UAAAmO,GAAU,gBAAAC,MAAmBL,GAC5E,EAAE,MAAA9vB,EAAA,IAAS/B,EAAA,GAEXmyB,IAAYL,GAAc,UAAUtpB,GAAoBspB,GAAc,OAAO,IAAI,QACjFM,IAAuBN,GAAc,YAAYK,GAAW,UAAU,SAEtEE,IAAYtwB,GAAM,WAClBuwB,IAAevwB,GAAM;AAE3B,MAAIwwB,IAAgB;AACpB,MAAI;AACA,IAAAA,IAAgB,OAAOzO,KAAU,GAAG,IAAI;AAAA,EAC5C,QAAQ;AACJ,IAAAyO,IAAgB;AAAA,EACpB;AAEA,QAAMC,IACFV,GAAc,YAAY3C,KACpB,CAAC,CAACmD,IACF,CAAC,CAACD,KACF,CAAC,CAACP,KACF,CAAC,CAACC,KACFQ,MACCX,MAAY,SAAYA,IAAU,KAEvCa,IAAuBC,GAAuBZ,GAAcC,CAAU,GACtEY,IAAYF,IAAwBL,IAAuB,SAAS,WAAY;AAkDtF,SAAO,EAAE,GAhDUQ,GAAS;AAAA,IACxB,UAAU,CAAC,cAAcP,GAAWC,GAAcT,CAAS;AAAA,IAC3D,SAAS,YAAY;AAOjB,UANAgB,GAAeR,CAAS,GACxBQ,GAAeP,CAAY,GAC3BO,GAAef,CAAY,GAC3Be,GAAed,CAAU,GACzBc,GAAe/O,CAAM,GAEjB,CAAC2E,EAAe,OAAM,IAAI,MAAM,iEAAiE;AAErG,YAAMqK,IAAahB,EAAa,YAAY3C,KAAkBmD,IAAeD,GACvEU,IAAWhB,EAAW,YAAY5C,KAAkBmD,IAAeD,GAQnEnG,IAAM,MAAMzD,EAAc,kCAAkC;AAAA,QAC9D,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACjB,eAAeqJ,EAAa;AAAA,UAC5B,gBAAgBA,EAAa;AAAA,UAC7B,oBAAoBC,EAAW;AAAA,UAC/B,qBAAqBA,EAAW;AAAA,UAChC,WAAAC;AAAA,UACA,QAAAlO;AAAA;AAAA,UACA,MAAMgP;AAAA,UACN,WAAWC;AAAA,UACX,UAAAd;AAAA,UACA,gBAAAC;AAAA,QAAA,CACH;AAAA,MAAA,CACJ;AACD,UAAI,CAAChG,EAAI,IAAI;AACT,cAAM8G,IAAO,MAAM9G,EAAI,OAAO,MAAM,MAAM,IAAI;AAC9C,cAAM,IAAI,MAAM8G,GAAM,SAAS,uBAAuB;AAAA,MAC1D;AAEA,aAAO9G,EAAI,KAAA;AAAA,IACf;AAAA,IACA,SAASsG;AAAA,IACT,iBAAiBrB;AAAA,IACjB,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,CACV,GAEuB,eAAesB,GAAsB,WAAAE,EAAA;AACjE,GCzGaM,KAAkB,CAC3BC,GACAjzB,MAKC;AACD,QAAM,EAAE,UAAAF,EAAA,IAAaC,EAAA,GACf,EAAE,eAAAyoB,EAAA,IAAkBC,GAAA,GAGpByK,IAAaD,KAAgBjzB,IAC7BF,GAAU,QAAQ;AAAA,IAChB,CAAC6W,MACGA,EAAM,YAAY3W,KAClBmnB,GAAgBxQ,EAAM,OAAc,MAAMwQ,GAAgB8L,CAAmB;AAAA,EAAA,IAEnF,QAGA,EAAE,MAAME,GAAmB,WAAA/f,GAAW,OAAAtM,EAAA,IAAU6rB,GAAS;AAAA,IAC3D,UAAU,CAAC,gBAAgBM,GAAcjzB,CAAO;AAAA,IAChD,SAAS,YAAY;AACjB,UAAI,CAACizB,KAAgB,CAACjzB,KAAW,CAACwoB;AAC9B;AAGJ,YAAM4K,IAAW,MAAM5K,EAAc,wBAAwByK,CAAY,YAAYjzB,CAAO,EAAE;AAC9F,UAAI,CAACozB,EAAS;AACV,cAAM,IAAI,MAAMA,EAAS,UAAU;AAGvC,cADa,MAAMA,EAAS,KAAA,GAChB;AAAA,IAChB;AAAA;AAAA,IAEA,SAAS,CAACF,KAAc,CAAC,CAACD,KAAgB,OAAO,UAAUjzB,CAAO,KAAK,OAAOA,CAAO,MAAM;AAAA,EAAA,CAC9F;AAED,SAAO;AAAA,IACH,SAASkzB,GAAY,cAAcC,KAAqB;AAAA;AAAA,IACxD,WAAA/f;AAAA,IACA,OAAOtM,IAASA,EAAgB,UAAU;AAAA,EAAA;AAElD,GC3CMusB,KAAwB,YACxBC,KAAsB,mBACtBC,KAA4B,IAC5BC,KAA+B,IAC/BC,KAA8B,UAC9BC,KAAgC,MAChCC,KAA0B;AAIhC,IAAIC,KAA2C;AAE/C,MAAMC,KAA0B,OACvBD,OACDA,KAAuB,IAAIE,GAAY;AAAA,EACnC,gBAAgB;AAAA,IACZ,SAAS;AAAA,MACL,WAAW,KAAK;AAAA;AAAA,MAChB,QAAQ,KAAK;AAAA;AAAA,MACb,OAAO;AAAA,IAAA;AAAA,EACX;AACJ,CACH,IAEEF,KAaEG,KAA8B,OACvChL,GACA5oB,GACA6zB,IAAmB,YACD;AAClB,MAAI,CAAC7zB,KAAWA,KAAW;AACvB,WAAO;AAIX,QAAM8zB,IAAgBX;AAEtB,MAAI;AACA,QAAIY;AACJ,QAAI;AACA,MAAAA,IAAU,MAAMnL,EAAa,mBAAA;AAAA,IACjC,QAAuB;AAEnB,UAAI;AACA,cAAMoC,IAAW,MAAMpC,EAAa,YAAA;AACpC,QAAAmL,IAAU;AAAA,UACN,cAAc/I;AAAA,UACd,UAAAA;AAAA,QAAA;AAAA,MAER,SAASgJ,GAAa;AAElB,uBAAQ,MAAM,iCAAiCA,CAAW,GACnDF;AAAA,MACX;AAAA,IACJ;AAGA,QAAIG,IAAgBF,EAAQ,gBAAgBA,EAAQ;AAEpD,WAAI,CAACE,KAAiBA,KAAiB,MACnC,QAAQ,MAAM,oCAAoCF,CAAO,GAClDD,MAGPG,IAAgBf,OAChBe,IAAgBf,KAGKe,IAAgBJ,IACPT;AAAA,EAItC,SAASzsB,GAAO;AACZ,mBAAQ,MAAM,4CAA4CA,CAAK,GACxDmtB;AAAA,EACX;AACJ,GAUaI,KAA8B,OAAOr0B,MAAqC;AACnF,QAAMs0B,IAAiBt0B,MAAY,SAC7Bu0B,IAAaD,IAAiBZ,KAAgCF,IAE9DgB,IAAiBF,IACjBX,KAA0BD,KAC1BD,KAA8BD;AAEpC,MAAI;AACA,UAAMiB,IAAe;AAAA,MACjB,OAAO;AAAA,MACP,eAAez0B,EAAQ,SAAA;AAAA,IAAS,GAG9B6wB,IAAO,MAAM6D,GAAmBD,CAAY;AAElD,QAAI,CAAC5D,KAAQ,CAAC,MAAM,QAAQA,EAAK,QAAQ,KAAKA,EAAK,SAAS,WAAW;AACnE,qBAAQ,KAAK,yDAAyD,GAC/D2D;AAIX,UAAMpJ,IAAiByF,EAAK,SACvB,IAAI,CAAC8D,MAAW;AACb,YAAMC,IAASD,GAAG,MAAM,QAAQ,CAAC,GAAG;AACpC,UAAI;AACA,eAAO,OAAOC,CAAM;AAAA,MACxB,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ,CAAC,EACA,OAAO,CAACC,MAAkCA,MAAM,IAAI;AAEzD,WAAIzJ,EAAK,WAAW,IACToJ,IAIIpJ,EAAK,OAAO,CAAC0J,GAAKC,MAAaA,IAAUD,IAAMC,IAAUD,GAAM,EAAE,IAGxDP;AAAA,EAG5B,SAASztB,GAAO;AACZ,mBAAQ,MAAM,4CAA4CA,CAAK,GACxD0tB;AAAA,EACX;AACJ,GAaaQ,KAAqB,OAAOh1B,GAAiBG,MAAqC;AAC3F,QAAM80B,IAASpB,GAAA,GAETqB,IADQ3sB,GAAoBvI,CAAO,GACnB,QAChBm1B,IAAW,CAAC,aAAaD,GAAQl1B,CAAO,GACxC+oB,IAAegE,GAA0B/sB,CAAO;AAGtD,SAAIk1B,MAAW,SAASA,MAAW,SAC/B,QAAQ,KAAK,oCAAoCA,CAAM,iCAAiC,GACjF5B,KAAsBC,MAG1B0B,EAAO,WAAW;AAAA,IACrB,UAAAE;AAAA,IACA,SAAS,YAA6B;AAClC,UAAID,MAAW;AACX,eAAKnM,IAIEgL,GAA4BhL,GAAc5oB,CAAO,KAHpD,QAAQ,MAAM,0DAA0D,GACjEmzB,KAAsBC;AAGrC,UAAW2B,MAAW,OAAO;AAEzB,cAAMV,IADiBx0B,MAAY,UAE7B2zB,KAA0BD,KAC1BD,KAA8BD;AACpC,YAAI;AACA,iBAAO,MAAMa,GAA4Br0B,CAAQ;AAAA,QACrD,SAAS8G,GAAO;AACZ,yBAAQ,MAAM,gDAAgD9G,CAAO,KAAK8G,CAAK,GACxE0tB;AAAA,QACX;AAAA,MACJ;AAEA,aAAOlB,KAAsBC;AAAA,IACjC;AAAA,IACA,WAAW,KAAK;AAAA;AAAA,IAChB,QAAQ,KAAK;AAAA;AAAA,EAAA,CAChB;AACL;ACtMO,SAAS6B,GAAoBp1B,GAA0B;AAC1D,QAAM,EAAE,MAAA8B,EAAA,IAAS/B,EAAA,GACX,EAAE,OAAAuJ,GAAO,WAAA+rB,EAAA,IAAcC,GAAkBxzB,GAAM,SAAS,GACxDmzB,IAASM,GAAA;AACf,EAAApzB;AAAA,IACI,MAAM,MAAM;AACR,MAAK8yB,EAAO,cAAc,EAAE,UAAU,CAAC,4BAA4B3rB,EAAM,GAAG,GAAG;AAAA,IACnF;AAAA,IACA,CAAC2rB,GAAQ3rB,CAAK;AAAA,EAAA;AAElB,QAAMksB,IAAQ7C,GAAS;AAAA,IACnB,UAAU,CAAC,4BAA4BrpB,EAAM,KAAKtJ,CAAO;AAAA,IACzD,SAASq1B,OAAe,MAAa,CAAC,CAACvzB,GAAM;AAAA,IAC7C,QAAQ;AAAA,IACR,iBAAiB,MAAA;AAAA;AAAA,IACjB,iBAAiB2zB;AAAA,IACjB,SAAS,CAAC,EAAE,QAAAC,EAAA,MACRC;AAAA,MACIrsB,EAAM;AAAA,MACN,gCAAgCtJ,CAAO;AAAA,MACvC01B;AAAA,MACAL;AAAA,MACA/rB,EAAM;AAAA,MACNssB;AAAA,IAAA;AAAA,IAER,OAAO,CAAC/hB,GAAO/M,MAAUuuB,OAAeQ,GAAqB/uB,GAAO+M,GAAO,CAAC;AAAA,IAC5E,YAAY,CAACiiB,MAAY,KAAK,IAAI,MAAO,KAAKA,GAAS,GAAK;AAAA,EAAA,CAC/D;AACD,SAAO;AAAA,IACH,GAAGN;AAAA,IACH,MAAMH,EAAA,KAAe,CAACG,EAAM,WAAWA,EAAM,MAAM,UAAUlsB,EAAM,MAAMksB,EAAM,KAAK,QAAQ;AAAA,EAAA;AAEpG;AC9BO,MAAMO,KAAiB,eAC1BC,GACAC,GAC8B;AAC9B,QAAMvtB,IAAM,IAAI,IAAI,GAAGooB,EAAiB,gBAAgB,GAClD7E,IAAM,MAAM,MAAMvjB,EAAI,MAAM;AAAA,IAC9B,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,MAChB,GAAGutB;AAAA,IAAA;AAAA,IAEP,MAAM,KAAK,UAAUD,CAAO;AAAA,EAAA,CAC/B;AAED,MAAI,CAAC/J,EAAI;AACL,UAAM,IAAI,MAAM,+BAA+BA,EAAI,MAAM,IAAIA,EAAI,UAAU,EAAE;AAGjF,SAAQ,MAAMA,EAAI,KAAA;AACtB;AAEA,SAAAiK,GAAyBF,GAA6BvB,GAAsC;AACxF,QAAMrB,IAAYT,GAAuB;AAAA,IACrC,UAAU,CAAC,gBAAgBqD,CAAO;AAAA,IAClC,SAAS,MAAMD,GAAeC,CAAO;AAAA,IACrC,SAAS,EAAAA;AAAA,IACT,OAAO;AAAA,IACP,GAAGvB;AAAA,EAAA,CACN;AAED,SAAOlP,EAAQ,OACJ;AAAA,IACH,GAAG6N;AAAA,IACH,MAAMA,EAAS,QAAQ,SAAYA,EAAS;AAAA,EAAA,IAIjD,CAACA,EAAS,MAAMA,EAAS,OAAOA,EAAS,SAAS,CAAC;AAC1D;AC3CO,MAAM+C,KAAyB,CAAC9Q,GAAgC+Q,MAAuB;AAC1F,QAAM,EAAE,MAAMt2B,GAAU,WAAWmwB,GAAmB,OAAOoG,EAAA,IAAkBjB,GAAoB,KAAK,GAGlGkB,IAAkB/Q;AAAA,IACpB,MACIzlB,GAAU,QAAQ;AAAA,MACd,CAAC6U,MACGA,EAAE,cACF,OAAOA,EAAE,UAAU,IAAI,OACtB0Q,MAAmB,SAAS1Q,EAAE,YAAY0Q;AAAA,IAAA;AAAA,IAEvD,CAACvlB,GAAU,QAAQulB,CAAc;AAAA,EAAA,GAI/B;AAAA,IACF,MAAMkR;AAAA,IACN,WAAWC;AAAA,IACX,OAAOC;AAAA,EAAA,IACPP;AAAA,IACAp2B,GAAU,QAAQ,SACZ;AAAA,MACI,oBAAoB;AAAA;AAAA,MACpB,UAAAs2B;AAAA;AAAA,MACA,aAAa;AAAA,MACb,QAAQt2B,GAAU,QAAQ,IAAI,CAAC6W,MAAU,GAAGA,EAAM,OAAO,IAAIA,EAAM,OAAO,EAAE;AAAA;AAAA,IAAA,IAEhF;AAAA,EAAA;AAGV,SAAO4O,EAAQ,MAAM;AACjB,UAAMmR,IAA+BJ,GAAiB;AAAA,MAClD,CAAC1S,GAAKjN,MAAU;AACZ,cAAMggB,IAAaJ,GAAe;AAAA,UAC9B,CAAC5hB,MAAMA,EAAE,YAAYgC,EAAM,WAAWhC,EAAE,SAAS,YAAA,MAAkBgC,EAAM,SAAS,YAAA;AAAA,QAAY;AAElG,eAAKggB,MAIL/S,EAAI,GAAGjN,EAAM,OAAQ,IAAIA,EAAM,QAAS,aAAa,EAAE,IAAI;AAAA,UACvD,GAAGA;AAAA,UACH,YAAAggB;AAAA,QAAA,IAEG/S;AAAA,MACX;AAAA,MACA,CAAA;AAAA,IAAC;AAEL,WAAO;AAAA,MACH,WAAWqM,KAAqBuG;AAAA,MAChC,SAAS,CAAC,CAACH,KAAiB,CAAC,CAACI;AAAA,MAC9B,OAAOJ,KAAiBI;AAAA,MACxB,iBAAAH;AAAA,MACA,sBAAsBC,KAAiB,CAAA;AAAA,MACvC,8BAAAG;AAAA,MACA,oCAAoCA,IAC9B,OAAO,KAAKA,CAA4B,EAAE,SAC1C;AAAA,IAAA;AAAA,EAEd,GAAG,CAACJ,GAAiBC,GAAetG,GAAmBuG,GAAwBH,GAAeI,CAAkB,CAAC;AACrH;AC7DA,SAAwBG,GAA0B;AAAA,EAC9C,yBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,qBAAAC;AACJ,GAIG;AACC,QAAMrO,IAAS9C,GAAY,UAAU,CAAA,GAC/BwQ,IAAW7Q,EAAQ,MAAMmD,EAAO,IAAI,CAACpgB,MAAUA,EAAM,EAAE,GAAG,EAAE,GAE5D,EAAE,8BAAAouB,EAAA,IAAiCP,GAAuB,OAAOC,CAAQ;AAE/E,SACI,gBAAAl3B;AAAA,IAACuF;AAAA,IAAA;AAAA,MACG,SAAS,MAAM;AACX,QAAAsyB,EAAoB,OAAO,OAAOL,KAAgC,CAAA,CAAE,IAAI,CAAC,GAAG,cAAc,MAAS;AAAA,MACvG;AAAA,MACA,WAAU;AAAA,MAEV,UAAA,gBAAAx3B,EAAC,UAAK,WAAU,yBACX,eAA2B43B,IACtB,OAAOD,CAAuB,KAC9B,0BAAA,CACV;AAAA,IAAA;AAAA,EAAA;AAGZ;ACXA,MAAMG,KAA4B,CAAC;AAAA,EAC/B,eAAAhS;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAgS;AACJ,MAIM;AACF,QAAMvO,IAAS9C,GAAY,UAAU,CAAA,GAC/BwQ,IAAW7Q,EAAQ,MAAMmD,EAAO,IAAI,CAACpgB,MAAUA,EAAM,EAAE,GAAG,EAAE,GAE5D,CAAC5E,GAAM4H,CAAO,IAAIhK,EAAkB,EAAK,GAGzC,CAAC+jB,GAAgB6R,CAAiB,IAAI51B,EAA6B21B,CAAc,GAEjF3R,IAAqBC,EAAQ,MAC1BN,GAAe,UACbyD,EAAO,KAAK,CAACpgB,MAAUA,EAAM,OAAO2c,EAAc,OAAO,IAD5B,MAErC,CAACA,GAAe,OAAO,CAAC,GAErB;AAAA,IACF,8BAAAyR;AAAA,IACA,oCAAAS;AAAA,IACA,WAAWC;AAAA,EAAA,IACXjB,GAAuB9Q,KAAkB,OAAO+Q,CAAQ,GAEtD,CAACiB,GAAYC,CAAa,IAAIh2B,EAAiB,EAAE,GACjD,CAACi2B,GAAqBC,CAAsB,IAAIl2B,EAAiB,EAAE,GACnE4qB,IAAgB3G;AAAA,IAClB,MACI4G,GAAS,KAAK,CAAC/sB,MAAkB;AAC7B,MAAAo4B,EAAuBp4B,CAAK;AAAA,IAChC,CAAC;AAAA,IACL,CAAA;AAAA,EAAC,GAECq4B,IAAkBxQ,GAAUsQ,CAAmB,GAE/C,CAAC/R,GAAckS,CAAc,IAAInS,EAAQ,MAAM;AACjD,QAAI,CAACF,EAAgB,QAAO,CAAC,MAAM,CAAA,CAAE;AACrC,UAAM/c,IAAQogB,EAAO,KAAK,CAACpgB,MAAUA,EAAM,OAAO+c,CAAc,GAC1DqS,IAAiBpvB,GAAO,kBAAkB,CAAA;AAChD,WAAO,CAACA,GAAOovB,CAAc;AAAA,EACjC,GAAG,CAACrS,CAAc,CAAC,GAEbI,IAAezjB,GAAuB,IAAI;AAEhD,EAAAG,EAAU,MAAM;AACZ,IAAAsjB,EAAa,UAAU,SAAS,cAAc,sBAAsB;AAAA,EACxE,GAAG,CAAA,CAAE;AAEL,QAAMC,IAAoB,CAAC/O,MAAyB;AAChD,IAAAqO,EAAcrO,CAAK,GACnBrL,EAAQ,EAAK;AAAA,EACjB,GAEM;AAAA,IACF,MAAMqsB;AAAA,IACN,WAAAvkB;AAAA,IACA,SAAAC;AAAA,EAAA,IACA6iB;AAAA,IACA;AAAA,MACI,OAAO;AAAA;AAAA,MACP,oBAAoB;AAAA;AAAA,MACpB,UAAU7Q,IAAiB,CAACA,CAAc,IAAI+Q;AAAA,MAC9C,aAAamB,MAAwB;AAAA,MACrC,MAAOE,IAAwC,SAAtBF;AAAA,MACzB,SAASE,IAAkBF,IAAsB;AAAA,IAAA;AAAA,IAErD,CAAA;AAAA,EAAC;AAGL,gCAEQ,UAAA,gBAAAt4B,EAAC6kB,IAAA,EAAO,MAAApgB,GAAY,cAAc4H,GAAS,OAAK,IAC5C,UAAA;AAAA,IAAA,gBAAApM,EAAC8kB,IAAA,EAAc,SAAO,IAClB,UAAA,gBAAA/kB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,SAAS,CAACgF,MAAM;AACZ,UAAAA,EAAE,gBAAA,GACFqH,EAAQ,EAAI;AAAA,QAEhB;AAAA,QACA,WAAWjL;AAAA,UACP;AAAA,UACA;AAAA,QAAA;AAAA,QAGH,UAAA;AAAA,UAAAilB,KAAsBL,IACnB,gBAAAhmB,EAAC,OAAA,EAAI,WAAU,sCACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACwX;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,kBACH,MAAMuO,EAAc;AAAA,kBACpB,SAASA,EAAc,UAAU;AAAA,gBAAA;AAAA,gBAErC,OAAO;AAAA,kBACH,IAAIK,EAAmB;AAAA,kBACvB,MAAMA,EAAmB;AAAA,kBACzB,SAASA,EAAmB;AAAA,gBAAA;AAAA,cAChC;AAAA,YAAA;AAAA,YAGJ,gBAAArmB,EAAC,QAAA,EAAK,WAAU,kEACZ,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,8EACX,UAAA+lB,EAAc,QACnB;AAAA,cACA,gBAAA/lB,EAAC,UAAK,WAAU,iEACX,aAAYomB,EAAmB,EAAE,KAAKA,EAAmB,YAAA,CAC9D;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ,IAEA,gBAAApmB,EAAC,OAAA,EAAI,WAAU,yHAAwH,UAAA,gBAEvI;AAAA,UAEJ,gBAAAA,EAACymB,IAAA,EAAY,WAAU,8CAAA,CAA8C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAE7E;AAAA,sBACCrB,IAAA,EAAc,WAAWmB,EAAa,SAAS,WAAU,8BACtD,UAAA;AAAA,MAAA,gBAAAxmB,EAACylB,IAAA,EACG,UAAA;AAAA,QAAA,gBAAAxlB,EAACylB,MAAY,UAAA,eAAA,CAAY;AAAA,QACzB,gBAAAzlB,EAAC2lB,IAAA,EAAkB,WAAU,cAAa,UAAA,yBAAA,CAAsB;AAAA,MAAA,GACpE;AAAA,MAEA,gBAAA5lB,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACinB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,OAAOkR;AAAA,cACP,UAAU,CAACpzB,MAAM;AACb,gBAAAqzB,EAAcrzB,EAAE,OAAO,KAAK,GAC5BioB,EAAcjoB,EAAE,OAAO,KAAK;AAAA,cAChC;AAAA,cACA,iBAAgB;AAAA,YAAA;AAAA,UAAA;AAAA,UAGnBmzB,IACG,gBAAAn4B,EAAC,OAAA,EAAI,WAAU,2LACX,UAAA;AAAA,YAAA,gBAAAC,EAACoI,IAAA,EAAQ,WAAU,8BAAA,CAA8B;AAAA,YACjD,gBAAApI,EAAC,UAAK,UAAA,6CAAA,CAA0C;AAAA,UAAA,EAAA,CACpD,IACA;AAAA,QAAA,GACR;AAAA,QAGA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,kBAAc;AAAA,UAC1E,gBAAAD,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACuF;AAAA,cAAA;AAAA,gBACG,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWpE;AAAA,kBACP;AAAA,kBACAglB,MAAmB,UAAa;AAAA,gBAAA;AAAA,gBAEpC,QAAM;AAAA,gBACN,SAAS,MAAM6R,EAAkB,MAAS;AAAA,gBAE1C,UAAA,gBAAAh4B,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,MAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YAE9CwpB,EAAO,IAAI,CAACpgB,MACT,gBAAApJ;AAAA,cAACuF;AAAA,cAAA;AAAA,gBAEG,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWpE;AAAA,kBACP;AAAA,kBACAglB,MAAmB/c,EAAM,MACrB;AAAA,gBAAA;AAAA,gBAER,QAAM;AAAA,gBACN,SAAS,MAAM4uB,EAAkB5uB,EAAM,EAAE;AAAA,gBAExC,YAAM,UACH,gBAAApJ;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,KAAKoJ,EAAM,WAAW;AAAA,oBACtB,KAAKE,GAAYF,EAAM,EAAE,KAAKA,EAAM;AAAA,oBACpC,WAAU;AAAA,kBAAA;AAAA,gBAAA,IAGd,gBAAApJ,EAAC,QAAA,EAAK,WAAU,yBACX,aAAYoJ,EAAM,EAAE,KAAKA,EAAM,KAAA,CACpC;AAAA,cAAA;AAAA,cApBC,GAAGA,EAAM,EAAE;AAAA,YAAA,CAuBvB;AAAA,UAAA,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAGCkd,KAAgBkS,KAAkB,CAACH,KAChC,gBAAAt4B,EAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,kBAAc;AAAA,4BACzE,OAAA,EAAI,WAAU,iDACV,UAAAw4B,GAAgB,IAAI,CAAC/gB,MAAU;AAC5B,kBAAMmP,IACFb,GAAe,YAAYtO,EAAM,WACjCsO,GAAe,YAAYI;AAC/B,mBACI,gBAAApmB;AAAA,cAACwF;AAAA,cAAA;AAAA,gBAEG,SAAS;AAAA,gBACT,MAAK;AAAA,gBACL,WAAWpE;AAAA,kBACP;AAAA,kBACAylB,KAAmB;AAAA,gBAAA;AAAA,gBAEvB,QAAM;AAAA,gBAEN,SAAS,MAAMJ,EAAkB,EAAE,GAAG/O,GAAO,SAAS0O,GAAgB;AAAA,gBAEtE,UAAA;AAAA,kBAAA,gBAAAnmB;AAAA,oBAACwX;AAAA,oBAAA;AAAA,sBACG,OAAO;AAAA,wBACH,MAAMC,EAAM;AAAA,wBACZ,SAASA,EAAM,UAAU;AAAA,sBAAA;AAAA,sBAE7B,OAAO;AAAA,wBACH,IAAI6O,EAAa;AAAA,wBACjB,MAAMA,EAAa;AAAA,wBACnB,SAASA,EAAa;AAAA,sBAAA;AAAA,sBAE1B,gBAAe;AAAA,sBACf,gBAAe;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGnB,gBAAAtmB,EAAC,QAAA,EAAK,WAAU,+DACX,YAAM,OAAA,CACX;AAAA,gBAAA;AAAA,cAAA;AAAA,cA3BK,GAAGyX,EAAM,OAAO;AAAA,YAAA;AAAA,UA8BjC,CAAC,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAIH,CAAC4gB,KAAuB,CAAC,CAACJ,KACvB,gBAAAl4B,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CAA6C,UAAA,eAAW;AAAA,UACvE,gBAAAA,EAAC,OAAA,EAAI,WAAU,sEACV,UAAA,OAAO,OAAOw3B,KAAgC,CAAA,CAAE,GAAG,IAAI,CAAC/f,GAAOlC,MAAU;AACtE,kBAAMoR,IACFL,KAAgBkD,EAAO,KAAK,CAACpgB,MAAUA,EAAM,OAAOqO,EAAM,OAAO,GAE/DmP,IACFb,GAAe,YAAYtO,EAAM,WACjCsO,GAAe,YAAYY,EAAW;AAC1C,mBACI,gBAAA3mB;AAAA,cAAC04B;AAAA,cAAA;AAAA,gBAEG,gBAAAvS;AAAA,gBACA,mBAAAK;AAAA,gBACA,iBAAAI;AAAA,gBACA,OAAOnP,GAAO;AAAA,gBACd,YAAAkP;AAAA,gBACA,aAAapR,IAAQ0iB,IAAqC;AAAA,gBAC1D,cAAcxgB;AAAA,cAAA;AAAA,cAPT,GAAGkP,EAAW,EAAE,IAAIlP,EAAM,OAAO;AAAA,YAAA;AAAA,UAUlD,CAAC,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAIJ,gBAAA1X,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8CACV,UAAAq4B,IAAsB,mBAAmB,qBAC9C;AAAA,4BACC,OAAA,EAAI,WAAU,sEACV,UAAAnkB,IACG,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAACoB,GAAGC,MAC1B,gBAAAxV,EAAC,OAAA,EAAgB,WAAU,aACvB,UAAA;AAAA,YAAA,gBAAAC,EAACmI,GAAA,EAAS,WAAU,oDAAA,CAAoD;AAAA,YACvEoN,IAAQ,MAAM,gBAAAvV,EAAC,MAAA,EAAG,WAAU,kCAAA,CAAkC;AAAA,UAAA,KAFzDuV,CAGV,CACH,IACDpB,IACA,gBAAApU,EAAC,OAAA,EAAI,WAAU,uGACX,UAAA;AAAA,YAAA,gBAAAC,EAAC24B,IAAA,EAAc,WAAU,oBAAA,CAAoB;AAAA,YAAE;AAAA,UAAA,EAAA,CACnD,IACAF,GAAW,WAAW,sBACrB,OAAA,EAAI,WAAU,0GAAyG,UAAA,kBAAA,CAExH,IAEAA,GAAW,IAAI,CAAChhB,GAAOlC,MAAU;AAC7B,kBAAMoR,IACFL,KAAgBkD,EAAO,KAAK,CAACpgB,MAAUA,EAAM,OAAOqO,EAAM,OAAO,GAE/DmP,IACFb,GAAe,YAAYtO,EAAM,WACjCsO,GAAe,YAAYY,EAAW;AAC1C,mBACI,gBAAA3mB;AAAA,cAAC04B;AAAA,cAAA;AAAA,gBAEG,gBAAAvS;AAAA,gBACA,mBAAAK;AAAA,gBACA,iBAAAI;AAAA,gBACA,OAAAnP;AAAA,gBACA,YAAAkP;AAAA,gBACA,aAAapR,IAAQkjB,EAAU,SAAS;AAAA,gBACxC,cACIjB,IACI,GAAG/f,EAAM,OAAO,IAAIA,EAAM,SAAS,YAAA,CAAa,EACpD;AAAA,cAAA;AAAA,cAVC,GAAGkP,EAAW,EAAE,IAAIlP,EAAM,OAAO;AAAA,YAAA;AAAA,UAclD,CAAC,EAAA,CAET;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ;AAER,GAEMihB,KAAY,CAAC;AAAA,EACf,mBAAAlS;AAAA,EACA,OAAA/O;AAAA,EACA,YAAAkP;AAAA,EACA,gBAAAR;AAAA,EACA,iBAAAS;AAAA,EACA,aAAAgS;AAAA,EACA,cAAAC;AACJ,MAUQ,gBAAA94B;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,UAAU;AAAA,IACV,MAAK;AAAA,IACL,WAAW,CAACgF,MAAM;AACd,MAAIA,EAAE,QAAQ,WACVyhB,EAAkB/O,CAAK;AAAA,IAE/B;AAAA,IACA,SAAS,MAAM+O,EAAkB/O,CAAK;AAAA,IACtC,WAAU;AAAA,IAEV,UAAA;AAAA,MAAA,gBAAA1X;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAWoB;AAAA,YACP;AAAA,YACA;AAAA,cACI,gGACIylB;AAAA,YAAA;AAAA,UACR;AAAA,UAGJ,UAAA;AAAA,YAAA,gBAAA7mB,EAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAACwX;AAAA,gBAAA;AAAA,kBACG,OAAO;AAAA,oBACH,MAAMC,EAAM;AAAA,oBACZ,SAASA,EAAM,UAAU;AAAA,kBAAA;AAAA,kBAE7B,OAAO;AAAA,oBACH,IAAIkP,EAAW;AAAA,oBACf,MAAMA,EAAW;AAAA,oBACjB,SAASA,EAAW;AAAA,kBAAA;AAAA,gBACxB;AAAA,cAAA;AAAA,cAEJ,gBAAA5mB,EAAC,OAAA,EAAI,WAAU,uDACX,UAAA;AAAA,gBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,mDACZ,UAAA;AAAA,kBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAyX,EAAM,QAAO;AAAA,kBAC9CA,EAAM,UAAU,aAAa,wBACzBzT,IAAA,EAAe,MAAK,UAAS,OAAM,UAAS,iBAAe,IAAC,aAAY,gBACrE,UAAA,gBAAAhE,EAAC,QAAA,EAAK,WAAU,0HACZ,UAAA,gBAAAA,EAAC24B,IAAA,EAAc,EAAA,CACnB,EAAA,CACJ;AAAA,kBAEHxS,KAAkB1O,EAAM,YAAYoP,wBAChC7iB,IAAA,EAAe,MAAK,UAAS,OAAM,UAAS,iBAAe,IAAC,aAAY,aACrE,UAAA,gBAAAhE,EAAC,QAAA,EAAK,WAAU,0HACZ,UAAA,gBAAAA,EAAC8mB,IAAA,CAAA,CAAS,EAAA,CACd,EAAA,CACJ;AAAA,gBAAA,GAER;AAAA,kCAEC,QAAA,EAAK,WAAW,oDAEZ,UAAAxlB,GAAmBmW,EAAM,OAAQ,EAAA,CACtC;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,GACJ;AAAA,YAECohB,KACG,gBAAA94B,EAAC,OAAA,EAAI,WAAU,6EACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,6BACX,UAAAkI;AAAA,gBACG2wB,EAAa;AAAA,gBACbA,EAAa;AAAA,gBACb,OAAOA,EAAa,UAAU,MAAM;AAAA,cAAA,GAE5C;AAAA,cACA,gBAAA94B,EAAC,QAAA,EAAK,WAAU,gDACX,UAAA;AAAA,gBAAAsW;AAAA,kBACGwiB,EAAa;AAAA,kBACbA,EAAa;AAAA,kBACbA,EAAa;AAAA,gBAAA;AAAA,gBACd;AAAA,gBACFphB,EAAM;AAAA,cAAA,EAAA,CACX;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGPmhB,KAAe,gBAAA54B,EAAC,MAAA,EAAG,WAAU,kCAAA,CAAkC;AAAA,IAAA;AAAA,EAAA;AAAA,GAK5E84B,KAAev2B,GAAKu1B,EAAyB,GCtahCiB,KAAqB,CAAC;AAAA,EAC/B,oBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAArF;AACJ,MAA+B;AAC3B,QAAM,EAAE,SAAA9yB,EAAA,IAAY6yB,GAAgBC,GAAciF,CAAkB,GAE9DK,IAAazM;AAAA,IACf,WAAWuM,GAAc,mBAAmB,GAAG;AAAA,IAC/C,KAAK,IAAIA,GAAc,UAAU,YAAY9L,IAAyBA,EAAuB;AAAA,EAAA,GAE3FiM,IAAc,OAAOH,GAAc,aAAa,GAAG,GAEnDI,IAAgBJ,GAAc;AAEpC,SAA6Bl4B,KAAY,QAAQ,OAAOA,CAAO,IAAI,MAAM,CAACm4B,IAC/D,OAIP,gBAAAr5B,EAAA0D,GAAA,EACI,UAAA;AAAA,IAAA,gBAAA1D;AAAA,MAACwF;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS,MAAM2zB,EAAY,CAACD,CAAQ;AAAA,QAEnC,UAAA;AAAA,UAAA,CAACA,KAAY,gBAAAj5B,EAACw5B,IAAA,EAAS,WAAU,aAAA,CAAa;AAAA,UAAI;AAAA,UACnD,gBAAAx5B,EAAC,UAAK,WAAU,iEACX,UAACi5B,IAEEE,IACA,gBAAAp5B,EAAA0D,GAAA,EACI,UAAA;AAAA,YAAA,gBAAA1D,EAAC,QAAA,EAAK,UAAA;AAAA,cAAA;AAAA,cAAEs5B;AAAA,YAAA,GAAW;AAAA,8BAClB,QAAA,EAAK,UAAA;AAAA,cAAA;AAAA,cAAEnxB,EAAeoxB,GAAa,KAAK;AAAA,cAAE;AAAA,YAAA,GAAC;AAAA,YAC3CC,GAAe,UAAU,WACtB,gBAAAv5B;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,KAAKu5B,GAAe,UAAU,WAAW;AAAA,gBACzC,KAAKA,GAAe;AAAA,gBACpB,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGlB,gBAAAv5B,EAAC,QAAA,EAAM,UAAAu5B,GAAe,OAAA,CAAO;AAAA,YAC7B,gBAAAv5B,EAACL,IAAA,EAAE,WAAU,aAAA,CAAa;AAAA,UAAA,EAAA,CAC9B,IAEA,gBAAAI,EAAA0D,GAAA,EACI,UAAA;AAAA,YAAA,gBAAAzD,EAACy5B,IAAA,EAAU,WAAU,aAAA,CAAa;AAAA,YAClC,gBAAAz5B,EAAC,UAAK,UAAA,YAAA,CAAS;AAAA,UAAA,EAAA,CACnB,IAnBA,UAmBA,CAER;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,gBAAAA;AAAA,MAACgE;AAAA,MAAA;AAAA,QACG,aAAY;AAAA,QACZ,iBAAe;AAAA,QACf,MAAK;AAAA,QACL,OAAM;AAAA,QACN,kBAAiB;AAAA,MAAA;AAAA,IAAA;AAAA,EACrB,GACJ;AAER,GCvEM01B,KAA8D,CAAC,EAAE,OAAAt0B,GAAO,gBAAAC,GAAgB,WAAAwrB,GAAW,QAAA8I,QAEjG,gBAAA35B;AAAA,EAAC6D;AAAA,EAAA;AAAA,IACG,gBAAgB;AAAA,IAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAASoF;AAAA,UAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA,GAEjC,EAAA,CACJ;AAAA,wBAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,QAAA,gBAAAC,EAACkF,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,QACpC,gBAAAnF,EAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA;AAAA,UAAA;AAAA,4BAExD,MAAA,EAAG;AAAA,UAAE;AAAA,QAAA,GAEV;AAAA,QACA,gBAAAC,EAAC,QAAA,EAAK,WAAU,mEACX,UAAA;AAAA,oBACL;AAAA,QAEC25B,IACG,gBAAA55B,EAAC,QAAA,EAAK,WAAU,oGAAmG,UAAA;AAAA,UAAA;AAAA,UACtG,gBAAAC,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA25B,EAAA,CAAO;AAAA,QAAA,EAAA,CACjE,IACA;AAAA,0BAEH,OAAA,EAAI,WAAU,yGACV,UAAA9I,GAAW,QAAQA,GAAW,mBAC3B,gBAAA7wB;AAAA,UAACuJ;AAAA,UAAA;AAAA,YAEG,MAAM,WAAWsnB,GAAW,qBAAqB,gBAAgB;AAAA,YACjE,KAAKA,GAAW;AAAA,UAAA;AAAA,UAFXA,GAAW;AAAA,QAAA,IAIpB,KAAA,CACR;AAAA,QAEA,gBAAA7wB,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,gBAAA,CAE1E;AAAA,MAAA,EAAA,CACJ,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA;AAAA,GAMhBu0B,KAAer3B,GAAKm3B,EAAqB,GCjDnCG,KAAgE,CAAC;AAAA,EACnE,QAAAj0B;AAAA,EACA,WAAAirB;AAAA,EACA,YAAA0B;AAAA,EACA,WAAAuH;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AACJ,MAAM;AACF,QAAM,EAAE,cAAArH,GAAc,YAAAC,EAAA,IAAenD,GAAA,GAE/BuD,IAAY3M;AAAA,IACd,MAAOsM,GAAc,UAAUtpB,GAAoBspB,GAAc,OAAO,IAAI;AAAA,IAC5E,CAACA,GAAc,OAAO;AAAA,EAAA,GAEpBsH,IAAU5T;AAAA,IACZ,MAAOuM,GAAY,UAAUvpB,GAAoBupB,GAAY,OAAO,IAAI;AAAA,IACxE,CAACA,GAAY,OAAO;AAAA,EAAA,GAGlBsH,IAAmB7T,EAAQ,MACtB,CAAC,eAAe,qBAAqB,EAAE,SAAS,OAAO,SAAS,QAAQ,GAChF,CAAA,CAAE;AAEL,SACI,gBAAArmB;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,QACI,gBAAA7D;AAAA,QAACwC;AAAAA,QAAA;AAAA,UACG,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,YACd,OAAO;AAAA,YACP,cAAcoD;AAAA,UAAA;AAAA,QAClB;AAAA,MAAA;AAAA,MAGR,iBAAgB;AAAA,MAChB,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,4BACV,UAAA;AAAA,QAAAi6B,uBACI,KAAA,EAAE,MAAK,UAAS,WAAU,iCACtB,UAAAA,GACL;AAAA,0BAEH,MAAA,EAAI,UAAA,CAACE,KAAoB,CAACH,IAAe,yBAAyB,0BAAyB;AAAA,QAC5F,gBAAAh6B,EAAC,OAAA,EAAI,WAAU,4EACX,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,UAAA,uBAAA,CAAoB;AAAA,UAC1B,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BAEX,UAAA6wB,GAAW,gBAAgB,GAAGA,GAAW,aAAa,UAAU,WAAA,CACrE;AAAA,QAAA,GACJ;AAAA,0BAEC,OAAA,EAAI,WAAU,qDACX,UAAA,gBAAA9wB,EAAC,OAAA,EAAI,WAAU,6IACX,UAAA;AAAA,UAAA,gBAAAC,EAAC0F,IAAA,EAAkB,WAAU,2DAAA,CAA2D;AAAA,UAExF,gBAAA3F,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACwX;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,kBACH,MAAMmb,GAAc;AAAA,kBACpB,SAASA,GAAc,UAAU;AAAA,gBAAA;AAAA,gBAErC,OACIK,IACM;AAAA,kBACI,IAAIA,GAAW;AAAA,kBACf,MAAMA,GAAW;AAAA,kBACjB,SAASA,GAAW;AAAA,gBAAA,IAExB;AAAA,gBAEV,gBAAe;AAAA,gBACf,gBAAe;AAAA,cAAA;AAAA,YAAA;AAAA,YAGnB,gBAAAjzB,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,oBAAoB,UAAAuyB,GAAW;AAAA,cAC/C,gBAAAvyB,EAAC,QAAA,EAAK,WAAU,gDACX,aAAc,OAAA,CACnB;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,4BAEC,OAAA,EAAI,WAAU,oCACX,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,4GACX,UAAA;AAAA,YAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,0BAAA,CAA0B;AAAA,YACnD,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,YAChE,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,uCAAA,CAAuC;AAAA,UAAA,EAAA,CACpE,EAAA,CACJ;AAAA,UAEA,gBAAA1F,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACwX;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,kBACH,MAAMob,GAAY;AAAA,kBAClB,SAASA,GAAY,UAAU;AAAA,gBAAA;AAAA,gBAEnC,OACIqH,IACM;AAAA,kBACI,IAAIA,EAAQ;AAAA,kBACZ,MAAMA,EAAQ;AAAA,kBACd,SAASA,EAAQ;AAAA,gBAAA,IAErB;AAAA,gBAEV,gBAAe;AAAA,gBACf,gBAAe;AAAA,cAAA;AAAA,YAAA;AAAA,YAGnB,gBAAAl6B,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA85B,GAAU;AAAA,cAC9C,gBAAA95B,EAAC,QAAA,EAAK,WAAU,gDACX,aAAY,OAAA,CACjB;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,MAEJ,QACI,gBAAAD,EAAA0D,GAAA,EACI,UAAA;AAAA,QAAA,gBAAAzD,EAAC,UAAK,WAAU,2GACX,UAAA6wB,GAAW,QAAQA,GAAW,mBAC3B,gBAAA7wB;AAAA,UAACuJ;AAAA,UAAA;AAAA,YAEG,MAAM,WAAWsnB,GAAW,qBAAqB,gBAAgB;AAAA,YACjE,KAAKA,GAAW;AAAA,UAAA;AAAA,UAFXA,GAAW;AAAA,QAAA,IAKpB,gBAAA7wB,EAAC,QAAA,EACI,UAAA,CAACk6B,KAAoB,CAACH,IACnB,gBAAA/5B,EAAC,QAAA,EAAK,WAAU,sBAAqB,UAAA,yFAAA,CAGrC,IAEA,mCAER,GAER;AAAA,QACA,gBAAAA,EAACuF,KAAO,SAAQ,YAAW,WAAU,qBAAoB,SAASK,GAAQ,UAAA,eAAA,CAE1E;AAAA,MAAA,GACJ;AAAA,MAEJ,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAAA,EAAA;AAGxB,GAEAu0B,KAAe53B,GAAKs3B,EAAsB,GC1JpChR,KAAsE,CAAC;AAAA,EACzE,OAAAzjB;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAktB;AAAA,EACA,WAAAuH;AAAA,EACA,WAAAjJ;AACJ,MAAM;AACF,QAAM,EAAE,cAAA8B,GAAc,YAAAC,EAAA,IAAenD,GAAA,GAE/BuD,IAAY3M;AAAA,IACd,MAAOsM,GAAc,UAAUtpB,GAAoBspB,GAAc,OAAO,IAAI;AAAA,IAC5E,CAACA,GAAc,OAAO;AAAA,EAAA,GAEpBsH,IAAU5T;AAAA,IACZ,MAAOuM,GAAY,UAAUvpB,GAAoBupB,GAAY,OAAO,IAAI;AAAA,IACxE,CAACA,GAAY,OAAO;AAAA,EAAA;AAGxB,SACI,gBAAA5yB;AAAA,IAAC6D;AAAA,IAAA;AAAA,MACG,gBAAgB;AAAA,MAChB,SACI,gBAAA9D,EAAC,OAAA,EAAI,WAAU,0FACX,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,+DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAU;AAAA,YACV,SAASoF;AAAA,YAET,UAAA,gBAAApF,EAACL,IAAA,EAAE,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA,GAEjC,EAAA,CACJ;AAAA,0BAEC,OAAA,EAAI,WAAU,qFACX,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACX,UAAA;AAAA,UAAA,gBAAAC,EAAC+F,IAAA,EAAY,WAAU,aAAA,CAAa;AAAA,UACpC,gBAAA/F,EAAC,QAAA,EAAK,WAAU,+BAA8B,UAAA,WAAO;AAAA,4BACpD,QAAA,EAAK,WAAU,mEACX,UAAA2yB,GAAc,UACXC,GAAY,UACZ;AAAA,EAAkCD,EAAa,MAAM,QAAQC,EAAW,MAAM,GAAA,CACtF;AAAA,UAEA,gBAAA7yB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWoB;AAAA,gBACP;AAAA,gBACA;AAAA,cAAA;AAAA,cAGJ,UAAA;AAAA,gBAAA,gBAAAnB;AAAA,kBAACwX;AAAA,kBAAA;AAAA,oBACG,OAAO;AAAA,sBACH,MAAMmb,GAAc;AAAA,sBACpB,SAASA,GAAc,UAAU;AAAA,oBAAA;AAAA,oBAErC,OACIK,IACM;AAAA,sBACI,IAAIA,GAAW;AAAA,sBACf,MAAMA,GAAW;AAAA,sBACjB,SAASA,GAAW;AAAA,oBAAA,IAExB;AAAA,oBAEV,gBAAe;AAAA,oBACf,gBAAe;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEnB,gBAAAjzB,EAAC,OAAA,EAAI,WAAU,8CACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAAuyB,GAAW;AAAA,kBACnE,gBAAAvyB,EAAC,QAAA,EAAK,WAAU,gDACX,aAAc,OAAA,CACnB;AAAA,gBAAA,GACJ;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,uFACX,UAAA;AAAA,kBAAA,gBAAAC,EAACyF,GAAA,EAAc,WAAU,qCAAA,CAAqC;AAAA,kBAC9D,gBAAAzF,EAACyF,GAAA,EAAc,WAAU,gCAAA,CAAgC;AAAA,gBAAA,GAC7D;AAAA,gBACA,gBAAAzF;AAAA,kBAACwX;AAAA,kBAAA;AAAA,oBACG,OAAO;AAAA,sBACH,MAAMob,GAAY;AAAA,sBAClB,SAASA,GAAY,UAAU;AAAA,oBAAA;AAAA,oBAEnC,OACIqH,IACM;AAAA,sBACI,IAAIA,EAAQ;AAAA,sBACZ,MAAMA,EAAQ;AAAA,sBACd,SAASA,EAAQ;AAAA,oBAAA,IAErB;AAAA,oBAEV,gBAAe;AAAA,oBACf,gBAAe;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEnB,gBAAAl6B,EAAC,OAAA,EAAI,WAAU,8CACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAA85B,GAAU;AAAA,kBAClE,gBAAA95B,EAAC,QAAA,EAAK,WAAU,gDACX,aAAY,OAAA,CACjB;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,4BAGH,OAAA,EAAI,WAAU,yGACV,UAAA6wB,GAAW,QAAQA,GAAW,mBAC3B,gBAAA7wB;AAAA,YAACuJ;AAAA,YAAA;AAAA,cAEG,MAAM,WAAWsnB,EAAU,qBAAqB,gBAAgB;AAAA,cAChE,KAAKA,EAAU;AAAA,YAAA;AAAA,YAFVA,EAAU;AAAA,UAAA,IAInB,KAAA,CACR;AAAA,UAEA,gBAAA7wB,EAACuF,KAAO,SAAQ,YAAW,WAAU,aAAY,SAASF,GAAgB,UAAA,mBAAA,CAE1E;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA;AAIhB,GAEA+0B,KAAe73B,GAAKsmB,EAAyB;AC/GtC,SAASwR,GAAgB,EAAE,QAAAz0B,GAAQ,OAAAR,GAAO,gBAAAC,GAAgB,iBAAAe,KAAqC;AAClG,QAAM,EAAE,qBAAAwN,EAAA,IAAwB/S,EAAA,GAC1BC,IAAUC,GAAA,GAEV,CAACuG,GAAMC,CAAO,IAAInF,EAAmB2vB,GAAS,KAAK,GACnD,CAACxG,GAAUC,CAAW,IAAIppB,EAA2C,SAAS,GAC9E,CAACuuB,GAAiB2J,CAAkB,IAAIl4B,EAAwB,IAAI,GACpE,CAACm4B,GAAWC,CAAY,IAAIp4B,EAAwB,IAAI,GAExD,CAAC23B,GAAcU,CAAe,IAAIr4B,EAAkB,EAAK,GAGzD,EAAE,QAAAs4B,GAAQ,kBAAAlL,GAAkB,cAAAmD,GAAc,YAAAC,GAAY,WAAAC,GAAW,QAAAlO,GAAQ,UAAAmO,EAAA,IAAarD,GAAA,GACtF,EAAE,aAAakL,GAAa,WAAWC,EAAA,IAAmBrL,GAAA,GAC1D;AAAA,IACF,MAAM7G;AAAA,IACN,WAAW3hB;AAAA,IACX,OAAO8zB;AAAA,IACP,WAAWC;AAAA,IACX,eAAAC;AAAA,IACA,WAAAvH;AAAA,EAAA,IACAhB,GAAclrB,MAASyqB,GAAS,KAAK,GACnCnB,KAAU7b,GAAY,YAAY;AACpC,IAAIwlB,KAAW,MAAM/K,EAAiB+K,CAAS,GAC/CC,EAAa,IAAI;AAAA,EACrB,GAAG,CAACD,GAAWC,GAAchL,CAAgB,CAAC,GACxC,EAAE,WAAAqB,IAAW,OAAOmK,GAAA,IAActK,GAAqB;AAAA,IACzD,iBAAAC;AAAA,IACA,aAAAnF;AAAA,IACA,SAAAjkB;AAAA,IACA,SAAAqpB;AAAA,EAAA,CACH,GAEKqK,KAAsB,MAAM;AAC9B,UAAMC,IAAmBvI,GACnBwI,IAAiBtO,GAAY,OAAOlI,CAAM,GAAGgO,GAAc,YAAY,EAAE,GACzEyI,KAAiBxI,GACjByI,KAAexO,GAAY,OAAOlI,CAAM,GAAGiO,GAAY,YAAY,EAAE;AAC3E,IAAA8H,EAAO;AAAA,MACH,cAAcU;AAAA,MACd,YAAYF;AAAA,MACZ,WAAWrI,MAAc,gBAAgB,iBAAiB;AAAA,IAAA,CAC7D,GAEGA,MAAc,gBACdyI,GAAaH,CAAc,IAE3BI,EAAcF,EAAY;AAAA,EAElC,GAGMG,KAAsBnV;AAAA,IACxB,MACI4G,GAAS,KAAK,CAAC/sB,GAAeu7B,MAAoD;AAC9E,MAAAC,GAAgB,EAAE,GAClBhB,EAAO;AAAA,QACH,QAAQx6B,EAAM,SAAA;AAAA,QACd,WAAWu7B;AAAA,MAAA,CACd;AAAA,IACL,CAAC;AAAA,IACL,CAACf,CAAM;AAAA;AAAA,EAAA,GAGL,CAACiB,IAAcD,EAAe,IAAIt5B,EAAiB,EAAE,GAErD,CAACw5B,IAA8BC,EAA+B,IAAIz5B,EAAkB,EAAK;AAE/F,EAAAa,EAAU,MAEC,MAAM;AACT,IAAAy3B,EAAO;AAAA,MACH,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL,GACD,CAAA,CAAE,GAGLz3B,EAAU,OACFqE,MAASyqB,GAAS,OAAOxG,MAAa,aACtCnlB,EAAgB0B,GAAuB,OAAO,GAE9CR,MAASyqB,GAAS,OAAOxG,MAAa,YAAUnlB,EAAgB0B,GAAuB,KAAK,GAEzF,MAAM;AACT,IAAA1B,EAAgB,MAAS;AAAA,EAC7B,IACD,CAACA,GAAiBmlB,GAAUjkB,CAAI,CAAC;AAGpC,QAAM,CAACirB,IAAYgJ,CAAa,IAAIn5B,EAAiB,EAAE,GACjD,CAAC03B,IAAWwB,EAAY,IAAIl5B,EAAiB,EAAE,GAE/C,CAAC05B,IAAoBC,EAAqB,IAAI35B,EAAkB,EAAK,GACrE,CAAC45B,IAAeC,EAAgB,IAAI75B,EAAiB,EAAE;AAE7D,EAAAa,EAAU,MAAM;AACZ,QAAIylB,GAAO;AACP,YAAMwT,IAAsB,OAAOxT,GAAO,MAAM,KAAK,UAAU,GAAG,IAAI,OAAQ;AAC9E,UAAIoT,IAAoB;AAEpB,YAAIE,KAAgB,OAAOtT,GAAO,MAAM,KAAK,UAAU,GAAG,GAAG;AACzD,gBAAMyT,IAAeD;AACrB,UAAAD,GAAiBE,CAAY;AAC7B,gBAAMC,KACFzJ,GAAc,aACbtpB,GAAoBspB,EAAc,OAAQ,EAAG,UAAU,WAAW9L,KACjEyG,KAA6B+O,GAAhBD,KAA8BD,IAA8B,EAAlB;AAC7D,UAAAZ,EAAcjO,EAAU,GACxBkO;AAAA,YACIY,KACM,OAAOE,MAAoB,GAAG,IAAIH,IAC9B,OAAOG,MAAoB,GAAG,IAAIH,IAClC,KACJ,OAAOG,MAAoB,GAAG;AAAA,YACpC;AAAA,UAAA,GAEJP,GAAsB,EAAK;AAC3B;AAAA,QACJ;AAEA,QAAAA,GAAsB,EAAK;AAAA,MAC/B;AACA,MAAIlJ,MAAc,iBAAiBnK,EAAM,SAAS,aAAa,SAC3D4S;AAAA,QACIjlB;AAAA,UACIqS,EAAM,QAAQ,YAAY;AAAA,UAC1BkK,GAAY,YAAY;AAAA,UACxB,KAAK,IAAIA,GAAY,YAAYvF,IAAyBA,EAAuB;AAAA,QAAA,EACnF,SAAA;AAAA,MAAS,IAERwF,MAAc,kBAAkBnK,EAAM,SAAS,YAAY,UAClE6S;AAAA,QACIllB;AAAA,UACIqS,EAAM,QAAQ,WAAW;AAAA,UACzBiK,GAAc,YAAY;AAAA,UAC1B,KAAK,IAAIA,GAAc,YAAYtF,IAAyBA,EAAuB;AAAA,QAAA,EACrF,SAAA;AAAA,MAAS;AAAA,IAGvB;AAAA,EACJ,GAAG,CAAC3E,CAAK,CAAC;AAEV,QAAM;AAAA,IACF,SAAS4T;AAAA,IACT,WAAWC;AAAA,IACX,OAAOC;AAAA,EAAA,IACP1I,GAAgBnB,GAAc,SAASA,GAAc,OAAO,GAG1D0J,KAAgBtnB;AAAA,IAClB,CAAC0nB,MACOH,OAAqB,UAAa3J,GAAc,YAAY,OAAO2J,EAAgB,IAAIG,IAChF7P;AAAA,MACH,WAAWC,GAAY,OAAOyP,EAAgB,IAAIG,GAAQ9J,EAAa,QAAQ,CAAC;AAAA,MAChF,KAAK,IAAIA,EAAa,YAAYtF,IAAyBA,EAAuB;AAAA,IAAA,EACpF,SAAA,IAEC;AAAA,IAEX,CAACiP,IAAkB3J,GAAc,QAAQ;AAAA,EAAA,GAGvC;AAAA,IACF,SAAS+J;AAAA,IACT,WAAWC;AAAA,IACX,OAAOC;AAAA,EAAA,IACP9I,GAAgBlB,GAAY,SAASA,GAAY,OAAO,GAEtDiK,KAAWnU,GAAO,MAAM,KAGxByJ,KAAqB0K,IAAU,UAAU,WAAWhW,IACpD;AAAA,IACF,SAASiW;AAAA,IACT,WAAWC;AAAA,IACX,OAAOC;AAAA,EAAA,IACPlJ,GAAgB3B,IAAoBQ,GAAc,OAAO,GAEvDsK,IACFpK,MAAc,gBAAgBlO,IAASuY,GAAW3K,IAAYI,GAAc,YAAY,EAAE,GACxFwK,KACFxK,GAAc,YAAYJ,MAAc+J,OAAqB,UACvD,OAAOA,EAAgB,IAAI,OAAOW,CAAoB,IAClDtP,EAAoB,uBAExB,MAEJyP,KAAelL;AAAA,IACjBC;AAAA,IACAQ;AAAA,IACAkK,IAAU,UAAU;AAAA,IACpBC;AAAA,IACAG,EAAqB,SAAA;AAAA,EAAS,GAG5BI,KACF3U,KACAiK,GAAc,WACd,CAACoK,MACD,CAACK,MACD,CAACtB,MACDhC,OAAc,KACRnM,EAAoB,mBACpB,MAEJ2P,KACFtC;AAAA,EACAW;AAAA,GACCr0B,MAASyqB,GAAS,QACb8I,GAAY,WACZ2B,MACAI,MACAI,KACAG,MACAE,KACA,SAEJE,KAAU,OAAO7U,GAAO,MAAM,KAAK,aAAa,GAAG,GAEnD8U,KAAc,KAAK,IAAI,OAAO9U,GAAO,SAAS,aAAa,OAAO,GAAG,CAAC,GACtE+U,KAAc,KAAK,IAAID,KAAcD,EAAO,GAE5CG,KAAgBhV,GAAO,SAAS,YAAY,YAC5C,OAAOA,GAAO,SAAS,YAAY,SAAS,IAC5C,QACAiV,KAAiBjV,GAAO,SAAS,aAAa,YAC9C,OAAOA,GAAO,SAAS,aAAa,SAAS,IAC7C,QAEA,CAACkV,IAAmBjG,IAAyBC,EAAe,IAAIvR,EAAQ,MAAM;AAChF,QAAI,CAACsM,GAAc,WAAW,CAACA,GAAc,QAAS,QAAO,CAAC,IAAO,QAAW,MAAS;AACzF,UAAMkL,IAAcx0B,GAAoBspB,EAAa,OAAQ,GACvDmL,IAAgBD,GAAa,UAAU,WAAWhX;AACxD,WAAO;AAAA,MACH8L,EAAa,QAAQ,kBAAkBmL,EAAc,YAAA;AAAA;AAAA,MAErDD,GAAa,UAAU,UAAU;AAAA,MACjCA,GAAa,eAAe;AAAA,IAAA;AAAA,EAEpC,GAAG,CAAClL,GAAc,SAASA,GAAc,OAAO,CAAC,GAE3C,CAACoL,IAAiBC,EAA6B,IAAI3X,EAAQ,MAAM;AACnE,QAAI,CAACuM,GAAY,WAAW,CAACA,GAAY,QAAS,QAAO,CAAC,IAAO,MAAS;AAC1E,UAAMkL,IAAgBz0B,GAAoBupB,EAAW,OAAQ,EAAG,UAAU,WAAW/L;AACrF,WAAO,CAAC+L,EAAW,QAAQ,YAAA,MAAkBkL,EAAc,YAAA,GAAeA,CAAa;AAAA,EAC3F,GAAG,CAAClL,GAAY,SAASA,GAAY,OAAO,CAAC,GAEvCiF,KAAsB9iB;AAAA,IACxB,CAAC4d,MAA4C;AACzC,UAAI,CAACkK,GAAU;AAIf,YAAMoB,KADmB,OAAOpB,IAAU,UAAU,GAAG,IACnB;AACpC,MAAAtB,EAAc,EAAE,GAChBD,GAAazO,GAAYoR,IAAUpB,IAAU,UAAU,YAAY,EAAE,CAAC,GACjElK,KACD9qB,GAAM,KAAK,4CAA4C,GAE3D6yB,EAAO;AAAA,QACH,cAAc/H;AAAAA,QACd,YAAYkK,IAAU;AAAA,QACtB,QAAQoB,GAAS,SAAA;AAAA,QACjB,WAAW;AAAA,MAAA,CACd;AAAA,IACL;AAAA,IACA,CAACpB,EAAQ;AAAA,EAAA;AAGb,SACI,gBAAA98B,EAAA0D,GAAA,EACK,UAAA;AAAA,IAAA6D,MAASyqB,GAAS,SACf,gBAAA/xB;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACG,gBAAc;AAAA,QACd,iBAAgB;AAAA,QAChB,iBAAgB;AAAA,QAChB,QACI,gBAAA7D;AAAA,UAACwC;AAAAA,UAAA;AAAA,YACG,gBAAc;AAAA,YACd,kBAAkB;AAAA,cACd,OAAO;AAAA,cACP,aAAaoD;AAAA,YAAA;AAAA,UACjB;AAAA,QAAA;AAAA,QAGR,SACI,gBAAA7F,EAAC,OAAA,EAAI,WAAU,0DAEX,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,SAAS,CAACgF,MAAM;AACZ,sBAAMiD,IAAQjD,EAAE,cAAc,cAAc,OAAO;AACnD,gBAAIiD,KACAA,EAAM,MAAA;AAAA,cAEd;AAAA,cAEA,UAAA;AAAA,gBAAA,gBAAAhI,EAAC,OAAA,EAAI,WAAU,gDAA+C,UAAA,QAAI;AAAA,gBAGlE,gBAAAA,EAAC,OAAA,EAAI,WAAU,gEACX,UAAA,gBAAAD;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,WAAW;AAAA,oBAEX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACG,MAAK;AAAA,0BACL,WAAW,CAAC+E,MAAM;AAEd,4BACIA,EAAE,QAAQ,eACVA,EAAE,QAAQ,eACVA,EAAE,QAAQ,iBAKT,UAAU,KAAKA,EAAE,GAAG,OAAK,eAAA,GAC1BwtB,IAAY,SAAS,GAAG,KAAKxtB,EAAE,IAAI,SAAS,GAAG,KAC/CA,EAAE,eAAA;AAAA,0BACV;AAAA,0BACA,gBAAgB,CAACA,MAAM;AACnB,4BAAAA,EAAE,cAAc,KAAA;AAAA,0BACpB;AAAA,0BACA,OAAOwtB;AAAA,0BACP,UAAU,CAACxtB,MAAM;AACb,4BAAAw2B,EAAc,MAAM;AAChB,oCAAMr7B,IAAQM;AAAA,gCACVuE,EAAE,OAAO;AAAA,gCACT,KAAK;AAAA,kCACD4tB,GAAc,YAAYtF;AAAA,kCAC1BA;AAAA,gCAAA;AAAA,8BACJ;AAIJ,qCAAItoB,EAAE,OAAO,UAAU,MACnBu2B,GAAa,EAAE,GAInBE;AAAA,gCACI0B,GAAWh9B,GAAOyyB,GAAc,YAAY,EAAE;AAAA,gCAC9C;AAAA,8BAAA,GAGGzyB;AAAA,4BACX,CAAC;AAAA,0BACL;AAAA,0BACA,aAAY;AAAA,0BACZ,WAAU;AAAA,wBAAA;AAAA,sBAAA,GAElB;AAAA,sBAGCY,KACG,gBAAAd;AAAA,wBAAC83B;AAAAA,wBAAA;AAAA,0BACG,eAAenF;AAAA,0BACf,eAAe,CAACld,MAAM;AAClB,4BAAAilB,EAAO;AAAA,8BACH,cAAcjlB;AAAA,4BAAA,CACjB,GAGGod,MAAc,kBACd0I,EAAc,EAAE,GAChBD,GAAa,EAAE,GACfZ,EAAO;AAAA,8BACH,QAAQ;AAAA,4BAAA,CACX,IAKD9H,KACAA,EAAW,YAAYnd,EAAE,WACzBmd,EAAW,YAAYnd,EAAE,YAEzB6lB,GAAa,EAAE,GACfZ,EAAO;AAAA,8BACH,QAAQ;AAAA,8BACR,YAAY;AAAA,4BAAA,CACf;AAAA,0BAET;AAAA,0BACA,gBAAgB9mB,IAAsB,SAAY9S;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACtD;AAAA,kBAAA;AAAA,gBAAA,GAGZ;AAAA,gBAGA,gBAAAf,EAAC,OAAA,EAAI,WAAU,0FACV,UAAA;AAAA,kBAAA29B,OAAkB,SACf,gBAAA19B,EAAC,OAAA,EAAI,WAAU,gBAAA,CAAgB,sBAE9B,OAAA,EAAI,WAAU,yBACV,UAAA09B,KAAgB,OACX,WACA,GAAGx1B,EAAew1B,MAAiB,KAAK,KAAK,CAAC,GAAA,CACxD;AAAA,kBAEJ,gBAAA19B,EAAAyD,GAAA,EACK,eACG,gBAAAzD,EAAC,OAAA,EAAI,WAAU,yDACX,UAAA,gBAAAA,EAACmI,KAAS,WAAU,2CAAA,CAA2C,GACnE,IACEm0B,MAAoB3J,GAAc,WACpC,gBAAA5yB,EAAC,OAAA,EAAI,WAAU,kEAEV,UAAA;AAAA,oBAAA,OAAOu8B,EAAgB,IAAI,MACxB,gBAAAv8B,EAAA0D,GAAA,EACI,UAAA;AAAA,sBAAA,gBAAA1D;AAAA,wBAACwF;AAAA,wBAAA;AAAA,0BACG,UAAUu2B,MAAsB,CAAClJ;AAAA,0BACjC,WAAU;AAAA,0BACV,SAAS,YAAY;AACjB,4BAAAmJ,GAAsB,EAAI;AAC1B,gCAAI;AACA,kCAAI,CAACpJ;AACD;AAEJ,oCAAMuL,IAAe,MAAMpI;AAAA,gCACvBnD,GAAc;AAAA,gCACd,OAAO2J,EAAgB;AAAA,8BAAA,GAErBhP,IACA+O,GADauB,KACCM,IACA,EADY;AAGhC,kCAAI5Q,MAAe;AACf,sCAAM,IAAI;AAAA,kCACNK,EAAoB;AAAA,gCAAA;AAI5B,oCAAMwQ,KAAsBP,KACtB,OAAOtB,EAAgB,IAAI4B,IAC3B,OAAO5B,EAAgB;AAE7B,8BAAI6B,GAAoB,SAAA,MAAexZ,KACnCsX,GAAiBiC,CAAY,GAC7B3C,EAAcjO,CAAU,GACxBgO,GAAa,EAAE,GACfE;AAAA,gCACI2C;AAAA,gCACA;AAAA,8BAAA,KAGJpC,GAAsB,EAAK;AAAA,4BAEnC,SAASqC,GAAS;AACd,8BAAA1C,GAAgB0C,GAAI,OAAO,GAC3BrC,GAAsB,EAAK;AAAA,4BAC/B;AAAA,0BACJ;AAAA,0BAEC,UAAA;AAAA,4BAAAD,MACG,gBAAA97B,EAACoI,IAAA,EAAQ,WAAU,6BAAA,CAA6B;AAAA,4BAEpD,gBAAApI,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,MAAA,CAAG;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,uBAE7C,CAAC4yB,KAAcgL,OACb,gBAAA59B;AAAA,wBAACgE;AAAA,wBAAA;AAAA,0BACG,aACK4uB,IAEK,sFADA;AAAA,0BAGV,iBAAe;AAAA,0BACf,MAAK;AAAA,0BACL,OAAM;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACV,GAER;AAAA,oBAEHhG;AAAA,sBACG;AAAA,wBACIC,GAAY,OAAOyP,EAAgB,GAAG3J,GAAc,QAAQ;AAAA,sBAAA;AAAA,sBAEhE,KAAK;AAAA,wBACDA,GAAc,YAAYtF;AAAA,wBAC1BA;AAAA,sBAAA;AAAA,oBACJ;AAAA,oBACD;AAAA,oBACFsF,GAAc;AAAA,kBAAA,EAAA,CACnB,IAEA,gBAAA3yB,EAAC,OAAA,EAAI,WAAU,iBAAgB,EAAA,CAEvC;AAAA,gBAAA,GACJ;AAAA,gBAGA,gBAAAA;AAAA,kBAACuF;AAAA,kBAAA;AAAA,oBACG,WAAWpE;AAAA,sBACP;AAAA,sBACAy6B,MAAgC;AAAA,oBAAA;AAAA,oBAEpC,SAAS;AAAA,oBACT,MAAM;AAAA,oBACN,SAAS,CAAC72B,MAAM;AACZ,sBAAAA,EAAE,gBAAA,GACF82B,GAAgC,CAAC72B,MAAM,CAACA,CAAC,GACzCi2B,GAAA;AAAA,oBACJ;AAAA,oBAEA,UAAA,gBAAAj7B,EAACb,IAAA,EAAY,WAAU,qCAAA,CAAqC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAChE;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,gBAAAY;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,SAAS,CAACgF,MAAM;AACZ,sBAAMiD,IAAQjD,EAAE,cAAc,cAAc,OAAO;AACnD,gBAAIiD,KACAA,EAAM,MAAA;AAAA,cAEd;AAAA,cAEA,UAAA;AAAA,gBAAA,gBAAAhI,EAAC,OAAA,EAAI,WAAU,gDAA+C,UAAA,OAAG;AAAA,gBAGjE,gBAAAA,EAAC,OAAA,EAAI,WAAU,gEACX,UAAA,gBAAAD;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,WAAW;AAAA,oBAEX,UAAA;AAAA,sBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,gCACX,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACG,MAAK;AAAA,0BACL,WAAW,CAAC+E,MAAM;AAEd,4BACIA,EAAE,QAAQ,eACVA,EAAE,QAAQ,eACVA,EAAE,QAAQ,iBAKT,UAAU,KAAKA,EAAE,GAAG,OAAK,eAAA,GAC1B+0B,IAAW,SAAS,GAAG,KAAK/0B,EAAE,IAAI,SAAS,GAAG,KAC9CA,EAAE,eAAA;AAAA,0BACV;AAAA,0BACA,gBAAgB,CAACA,MAAM;AACnB,4BAAAA,EAAE,cAAc,KAAA;AAAA,0BACpB;AAAA,0BACA,OAAO+0B;AAAA,0BACP,UAAU,CAAC/0B,MACPu2B,GAAa,MAAM;AACf,kCAAMp7B,IAAQM;AAAA,8BACVuE,EAAE,OAAO;AAAA,8BACT,KAAK;AAAA,gCACD6tB,GAAY,YAAYvF;AAAA,gCACxBA;AAAA,8BAAA;AAAA,4BACJ;AAIJ,mCAAItoB,EAAE,OAAO,UAAU,MACnBw2B,EAAc,EAAE,GAIpBC;AAAA,8BACI0B,GAAWh9B,GAAO0yB,GAAY,YAAY,EAAE;AAAA,8BAC5C;AAAA,4BAAA,GAGG1yB;AAAA,0BACX,CAAC;AAAA,0BAEL,aAAY;AAAA,0BACZ,WAAU;AAAA,wBAAA;AAAA,sBAAA,GAElB;AAAA,sBAGCY,KACG,gBAAAd;AAAA,wBAAC83B;AAAAA,wBAAA;AAAA,0BACG,eAAelF;AAAA,0BACf,eAAe,CAACnd,MAAM;AAClB,4BAAAilB,EAAO;AAAA,8BACH,YAAYjlB;AAAA,4BAAA,CACf,GAGGod,MAAc,mBACdyI,GAAa,EAAE,GAIXZ,EADAZ,MAAanH,IACN;AAAA,8BACH,QAAQuK;AAAA,gCACJ3K;AAAA,gCACAI,GAAc,YAAY;AAAA,8BAAA,EAC5B,SAAA;AAAA,8BACF,WAAW;AAAA,4BAAA,IAGR;AAAA,8BACH,QAAQ;AAAA,4BAAA,CAHX,IAULA,KACAA,EAAa,YAAYld,EAAE,WAC3Bkd,EAAa,YAAYld,EAAE,YAE3B8lB,EAAc,EAAE,GAChBD,GAAa,EAAE,GACfZ,EAAO;AAAA,8BACH,QAAQ;AAAA,8BACR,cAAc;AAAA,4BAAA,CACjB;AAAA,0BAET;AAAA,0BACA,gBAAgB9mB,IAAsB,SAAY9S;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACtD;AAAA,kBAAA;AAAA,gBAAA,GAGZ;AAAA,gBAGA,gBAAAf,EAAC,OAAA,EAAI,WAAU,+EACV,UAAA;AAAA,kBAAA49B,OAAmB,SAChB,gBAAA39B,EAAC,OAAA,EAAI,WAAU,gBAAA,CAAgB,sBAE9B,OAAA,EAAI,WAAU,yBACV,UAAA29B,KAAiB,OACZ,WACA,GAAGz1B,EAAey1B,MAAkB,KAAK,KAAK,CAAC,GAAA,CACzD;AAAA,yCAIK,UAAAhB,KACG,gBAAA38B,EAAC,SAAI,WAAU,yDACX,4BAACmI,GAAA,EAAS,WAAU,4CAA2C,EAAA,CACnE,IACAu0B,OAAoB,UAAa9J,GAAY,WAC7C,gBAAA7yB,EAAC,OAAA,EAAI,WAAU,yDACV,UAAA;AAAA,oBAAA6sB;AAAA,sBACG;AAAA,wBACIC,GAAY,OAAO6P,EAAe,GAAG9J,GAAY,QAAQ;AAAA,sBAAA;AAAA,sBAE7D,KAAK;AAAA,wBACDA,GAAY,YAAYvF;AAAA,wBACxBA;AAAA,sBAAA;AAAA,oBACJ;AAAA,oBACD;AAAA,oBACFuF,GAAY;AAAA,kBAAA,EAAA,CACjB,IAEA,gBAAA5yB,EAAC,OAAA,EAAI,WAAU,iBAAgB,EAAA,CAEvC;AAAA,gBAAA,GAER;AAAA,kCAGC,OAAA,EAAI,WAAU,0CAEV,UAAA,CAAC+9B,MAAmBC,KACjB,gBAAAh+B;AAAA,kBAAC+4B;AAAA,kBAAA;AAAA,oBACG,oBAAoBnG,GAAY;AAAA,oBAChC,UAAUE;AAAA,oBACV,aAAa,CAAC9tB,MAAM;AAChB,sBAAA01B,EAAO;AAAA,wBACH,UAAU11B;AAAA,sBAAA,CACb;AAAA,oBACL;AAAA,oBACA,cAAc0jB,GAAO,SAAS;AAAA,oBAC9B,YAAY,CAAC,CAACA;AAAA,oBACd,cAAcsV;AAAA,kBAAA;AAAA,gBAAA,IAElB,KAAA,CACR;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIHlD,KACG,gBAAA/6B;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWoB;AAAA,gBACP;AAAA,gBACA;AAAA,cAAA;AAAA,cAGJ,UAAA;AAAA,gBAAA,gBAAApB,EAAC,OAAA,EAAI,WAAU,2DACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,UAAA,eAAA,CAAY;AAAA,kBAClB,gBAAAD,EAAC,QAAA,EAAK,WAAU,2DACZ,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,0FAAyF,UAAA,QAEzG;AAAA,sCACC,QAAA,EAEI,UAAA0oB,KACMiK,GAAc,YAAYC,GAAY,UACjClK,GAAO,SAAS,mBAAmB,QAAQ,UAC3CA,GAAO,SAAS,mBAAmB,aAAa,WAChD,OAAO,MACb,IAAA,CACV;AAAA,kBAAA,EAAA,CACJ;AAAA,gBAAA,GACJ;AAAA,gBAEA,gBAAA3oB,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,kBACtB,gBAAAA,EAAC,QAAA,EAAK,WAAU,0BACX,UAAA0oB,KAASA,GAAO,SAAS,gBAAgB,SAAS,MAAM,IAAA,CAC7D;AAAA,gBAAA,GACJ;AAAA,gBAEA,gBAAA3oB,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,kBAAA,gBAAAA,EAAC,QAAA,EAAK,UAAA;AAAA,oBAAA;AAAA,oBAAMg7B,IAAgB,KAAK,IAAIsD,KAAoB,GAAG;AAAA,kBAAA,GAAK;AAAA,kBACjE,gBAAAr+B,EAAC,SAAI,WAAU,0BACV,cACG+6B,IACI,MACAwC,KAAU,OACV,WAEA,GAAGr1B,EAAeq1B,MAAW,KAAK,KAAK,CAAC,KAE5Cx2B,sBACCoB,GAAA,EAAS,WAAU,kBAAA,CAAkB,IAEtC,IAAA,CAER;AAAA,gBAAA,GACJ;AAAA,gBAEA,gBAAApI,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,UAAA,eAAA,CAAY;AAAA,kBAClB,gBAAAA,EAAC,SAAI,WAAU,0BACV,cACGy9B,KAAc,OACV,WAEA,GAAGv1B,EAAeu1B,MAAe,KAAK,KAAK,CAAC,KAEhD12B,sBACCoB,GAAA,EAAS,WAAU,kBAAA,CAAkB,IAEtC,IAAA,CAER;AAAA,gBAAA,GACJ;AAAA,gBAEA,gBAAApI,EAAC,OAAA,EAAI,WAAU,mEACX,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,UAAA,QAAA,CAAK;AAAA,kBACX,gBAAAA,EAAC,SAAI,WAAU,qCACV,eAAS09B,KACNA,KAAgB,OACZ,WAEA,GAAGx1B,EAAew1B,MAAiB,KAAK,KAAK,CAAC,KAElD32B,sBACCoB,GAAA,EAAS,WAAU,kBAAA,CAAkB,IAEtC,IAAA,CAER;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ,GAER;AAAA,QAEJ,QACI,gBAAApI,EAAA0D,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAzD;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWmB;AAAA,gBACP,sHAAsHm8B,KAAgB,wDAAwD,wBAAwB;AAAA,gBACtNA,KACM,gHACA;AAAA,cAAA;AAAA,cAGR,WAAA,MAAM;AACJ,oBAAIA,IAAe;AACf,wBAAM11B,IAAQgmB,GAAkB0P,EAAa;AAC7C,yBAAI11B,MAAU+lB,EAAoB,mBAE1B,gBAAA5tB,EAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAM,YAAoB,iBAAA,CAAiB;AAAA,oBAC5C,gBAAAA;AAAA,sBAACgE;AAAA,sBAAA;AAAA,wBACG,aAAa,wBAAwB2zB,MAA2B,KAAK,WAAWC,MAAmB,QAAQ;AAAA,wBAC3G,iBAAe;AAAA,wBACf,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,kBAAiB;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEpBiF,KACG,gBAAA78B;AAAA,sBAAC03B;AAAA,sBAAA;AAAA,wBACG,yBAAAC;AAAA,wBACA,iBAAAC;AAAA,wBACA,qBAAAC;AAAA,sBAAA;AAAA,oBAAA,IAEJ;AAAA,kBAAA,GACR,IAGDjwB;AAAA,gBACX;AACA,uBAAO;AAAA,cACX,GAAA;AAAA,YAAG;AAAA,UAAA;AAAA,UAEP,gBAAA5H;AAAA,YAACuF;AAAA,YAAA;AAAA,cACG,SAAS;AAAA,cACT,WAAU;AAAA,cACV,UAAU,CAAC,CAAC+3B,MAAiB,CAAC5U,KAAS,CAACgV,MAAiB9C;AAAA,cACzD,SAAS,YAAY;AACjB,oBAAI,GAAClS,KAAS4U;AAEd,sBAAI;AACA,0BAAMgB,IAAa,MAAM3D,EAAY;AAAA,sBACjC,IAAIjS;AAAA,sBACJ,kBAAkB,CAACyH,OAAe;AAE9B,8BAAMoO,KAAYpO,IAAY,MAAM,KAAK,QACnCqO,KAAetM;AAAA,0BACjBC;AAAA,0BACAQ;AAAA,0BACA4L,MAAa;AAAA,0BACbzB;AAAA,0BACAG,EAAqB,SAAA;AAAA,wBAAS;AAGlC,4BAAI,CAACF,MAA2B,CAACyB;AAC7B,gCAAMpP;AAAA,4BACFD;AAAA,4BACAxB,EAAoB;AAAA,0BAAA;AAK5B,wBAAAnC,EAAY,SAAS,GACrBjkB,EAAQwqB,GAAS,IAAI,GACrB0I,EAAgB,EAAK;AAAA,sBACzB;AAAA,oBAAA,CACH;AACD,oBAAAA,EAAgB,EAAI;AACpB,0BAAMgE,IAAYH,GAAY,WACxBpO,KAAQoO,GAAY,SAAS;AAEnC,oBAAIG,KAAavO,MACboK,EAAmBmE,CAAS,GAC5BjE,EAAatK,EAAK,KAElBroB,GAAM,MAAM8lB,EAAoB,mBAAmB;AAAA,kBAE3D,SAAS/lB,GAAO;AACZ,wBACI,OAAOA,KAAU,YAChBA,GAAe,SAASunB,IAC3B;AACE,8BAAQ,MAAM,oCAAoCvnB,CAAK,GACvD8zB;AAAA,wBACK9zB,GAAe,WAAW+lB,EAAoB;AAAA,sBAAA;AAEnD;AAAA,oBACJ;AACA,4BAAQ,MAAM,yBAAyB/lB,CAAK,GAC5C8zB,GAAgBgD,GAAkB92B,CAAK,CAAC,GACxC4jB,EAAY,QAAQ,GACpBjkB,EAAQwqB,GAAS,GAAG;AAAA,kBACxB;AAAA,cACJ;AAAA,cAEC,cACK,6BACAyB,MAAc,SACZ,SACAA,MAAc,WACZ,WACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,GACJ;AAAA,QAEJ,YAAY;AAAA,QACZ,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAInBlsB,MAASyqB,GAAS,QACf,gBAAA/xB;AAAA,MAAC65B;AAAAA,MAAA;AAAA,QACG,aAAamB,MAAa;AAAA,QAC1B,QAAAp1B;AAAA,QACA,WAAW,EAAE,GAAGirB,IAAW,eAAenI,GAAO,SAAS,aAAA;AAAA,QAC1D,YAAY,OAAO6J,EAAU;AAAA,QAC7B,WAAW,OAAOuH,EAAS;AAAA,QAC3B,cAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIPzyB,MAASyqB,GAAS,QACdxG,MAAa,YACV,gBAAAvrB;AAAA,MAACo6B;AAAA,MAAA;AAAA,QACG,WAAAvJ;AAAA,QACA,OAAO,MAAMzrB,EAAA;AAAA,QACb,gBAAgB,MAAMC,EAAA;AAAA,QACtB,YAAY,OAAOktB,EAAU;AAAA,QAC7B,WAAW,OAAOuH,EAAS;AAAA,MAAA;AAAA,IAAA,IAG/B,gBAAA95B;AAAA,MAAC05B;AAAAA,MAAA;AAAA,QACG,WAAA7I;AAAA,QACA,QAAQyM,KAAgB1P,GAAkB0P,EAAa,IAAI;AAAA,QAC3D,OAAO,MAAMl4B,EAAA;AAAA,QACb,gBAAgB,MAAMC,EAAA;AAAA,MAAe;AAAA,IAAA;AAAA,EACzC,GAEZ;AAER;ACr7BO,MAAMs5B,KAASp8B;AAAA,EAClB,CAAC;AAAA,IACG,iBAAA6D;AAAA,EAAA,MAGE;AACF,UAAMw4B,IAAUC,GAAWC,EAAgB;AAC3C,QAAI,CAACF,EAAS,OAAM,IAAI,MAAM,2DAA2D;AAEzF,UAAM,EAAE,mBAAAG,GAAmB,sBAAAC,GAAsB,YAAAC,GAAY,eAAAlpB,MAAkB6oB,GAEzE,CAACnmB,GAAwBymB,CAAyB,IAAI98B,EAAkB,EAAK;AAGnF,WAAAa,EAAU,MAAM;AACZ,MAAIg8B,MAAe3oB,EAAW,QAAQyoB,MAAsBj2B,EAAkB,YAE9Eo2B,EAA0B,EAAK;AAAA,IACnC,GAAG,CAACD,GAAYF,GAAmBG,CAAyB,CAAC,GAGzD,gBAAAn/B,EAAA0D,GAAA,EACK,UAAA;AAAA,MAAAw7B,MAAe3oB,EAAW,QACvB,gBAAAtW;AAAA,QAACsY;AAAA,QAAA;AAAA,UACG,iBAAAlS;AAAA,UACA,sBAAsB24B;AAAA,UACtB,yBAAyBC;AAAA,UACzB,eAAAjpB;AAAA,UACA,wBAAA0C;AAAA,QAAA;AAAA,MAAA;AAAA,MAIPwmB,MAAe3oB,EAAW,WACvB,gBAAAtW,EAACukB,IAAA,EAAkB,QAAQ,MAAMxO,EAAcO,EAAW,IAAI,EAAA,CAAG;AAAA,MAGpE2oB,MAAe3oB,EAAW,QACvB,gBAAAtW;AAAA,QAACmG;AAAA,QAAA;AAAA,UACG,QAAQ,MAAM4P,EAAcO,EAAW,IAAI;AAAA,UAC3C,OAAO,MAAMP,EAAcO,EAAW,IAAI;AAAA,UAC1C,gBAAgB,MAAM;AAClB,YAAAP,EAAcO,EAAW,IAAI,GAC7B0oB,EAAqBl2B,EAAkB,QAAQ,GAC/Co2B,EAA0B,EAAI;AAAA,UAClC;AAAA,UACA,iBAAA94B;AAAA,QAAA;AAAA,MAAA;AAAA,MAGP64B,MAAe3oB,EAAW,QACvB,gBAAAtW;AAAA,QAACopB;AAAA,QAAA;AAAA,UACG,QAAQ,MAAMrT,EAAcO,EAAW,IAAI;AAAA,UAC3C,OAAO,MAAMP,EAAcO,EAAW,IAAI;AAAA,UAC1C,gBAAgB,MAAM;AAClB,YAAAP,EAAcO,EAAW,IAAI,GAC7B0oB,EAAqBl2B,EAAkB,QAAQ,GAC/Co2B,EAA0B,EAAI;AAAA,UAClC;AAAA,UACA,iBAAA94B;AAAA,QAAA;AAAA,MAAA;AAAA,MAIP64B,MAAe3oB,EAAW,WACvB,gBAAAtW,EAAC4Y,IAAA,EAAkB,QAAQ,MAAM7C,EAAcO,EAAW,IAAI,EAAA,CAAG;AAAA,MAGpE2oB,MAAe3oB,EAAW,QACvB,gBAAAtW;AAAA,QAACq6B;AAAA,QAAA;AAAA,UACG,QAAQ,MAAMtkB,EAAcO,EAAW,IAAI;AAAA,UAC3C,OAAO,MAAMP,EAAcO,EAAW,IAAI;AAAA,UAC1C,gBAAgB,MAAM;AAClB,YAAAP,EAAcO,EAAW,IAAI,GAC7B0oB,EAAqBl2B,EAAkB,QAAQ,GAC/Co2B,EAA0B,EAAI;AAAA,UAClC;AAAA,UACA,iBAAA94B;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,GAER;AAAA,EAER;AACJ;","x_google_ignoreList":[0,1,2,3,4,5,6,7,13,40,41,42,43,61]}