From d5506060e9897d3afc55e2669e335827e1c89034 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 10:05:42 -0400 Subject: [PATCH 001/110] feat: zk-auth --- zk-auth/.env.example | 7 + zk-auth/.gitignore | 2 + zk-auth/LICENSE.md | 201 +++++++++++++ zk-auth/README.md | 13 + zk-auth/bun.lockb | Bin 0 -> 518620 bytes zk-auth/next-env.d.ts | 5 + zk-auth/next.config.js | 8 + zk-auth/package.json | 40 +++ zk-auth/postcss.config.cjs | 1 + zk-auth/public/bonsai-logo-dark.svg | 1 + zk-auth/public/bonsai-logo-light.svg | 1 + zk-auth/public/google.svg | 1 + zk-auth/public/loading.gif | Bin 0 -> 18308 bytes zk-auth/src/app/_components/prove-button.tsx | 182 ++++++++++++ .../src/app/_components/sign-in-button.tsx | 37 +++ zk-auth/src/app/_components/snark-table.tsx | 63 +++++ zk-auth/src/app/_components/stark-table.tsx | 78 ++++++ zk-auth/src/app/_components/user-infos.tsx | 28 ++ zk-auth/src/app/_lib/bonsai-proving.ts | 264 ++++++++++++++++++ zk-auth/src/app/_utils/do-snark-proving.ts | 65 +++++ zk-auth/src/app/_utils/do-stark-proving.ts | 82 ++++++ .../src/app/api/bonsai/snark-proving/route.ts | 17 ++ .../src/app/api/bonsai/snark-status/route.ts | 21 ++ .../src/app/api/bonsai/stark-proving/route.ts | 17 ++ .../src/app/api/bonsai/stark-status/route.ts | 21 ++ zk-auth/src/app/layout.tsx | 14 + zk-auth/src/app/page.tsx | 63 +++++ zk-auth/src/app/providers.tsx | 31 ++ zk-auth/src/env.js | 47 ++++ zk-auth/src/wagmi.ts | 18 ++ zk-auth/tailwind.config.ts | 18 ++ zk-auth/tsconfig.json | 13 + zk-auth/tsconfig.tsbuildinfo | 1 + 33 files changed, 1360 insertions(+) create mode 100644 zk-auth/.env.example create mode 100644 zk-auth/.gitignore create mode 100644 zk-auth/LICENSE.md create mode 100644 zk-auth/README.md create mode 100755 zk-auth/bun.lockb create mode 100644 zk-auth/next-env.d.ts create mode 100644 zk-auth/next.config.js create mode 100644 zk-auth/package.json create mode 100644 zk-auth/postcss.config.cjs create mode 100644 zk-auth/public/bonsai-logo-dark.svg create mode 100644 zk-auth/public/bonsai-logo-light.svg create mode 100644 zk-auth/public/google.svg create mode 100644 zk-auth/public/loading.gif create mode 100644 zk-auth/src/app/_components/prove-button.tsx create mode 100644 zk-auth/src/app/_components/sign-in-button.tsx create mode 100644 zk-auth/src/app/_components/snark-table.tsx create mode 100644 zk-auth/src/app/_components/stark-table.tsx create mode 100644 zk-auth/src/app/_components/user-infos.tsx create mode 100644 zk-auth/src/app/_lib/bonsai-proving.ts create mode 100644 zk-auth/src/app/_utils/do-snark-proving.ts create mode 100644 zk-auth/src/app/_utils/do-stark-proving.ts create mode 100644 zk-auth/src/app/api/bonsai/snark-proving/route.ts create mode 100644 zk-auth/src/app/api/bonsai/snark-status/route.ts create mode 100644 zk-auth/src/app/api/bonsai/stark-proving/route.ts create mode 100644 zk-auth/src/app/api/bonsai/stark-status/route.ts create mode 100644 zk-auth/src/app/layout.tsx create mode 100644 zk-auth/src/app/page.tsx create mode 100644 zk-auth/src/app/providers.tsx create mode 100644 zk-auth/src/env.js create mode 100644 zk-auth/src/wagmi.ts create mode 100644 zk-auth/tailwind.config.ts create mode 100644 zk-auth/tsconfig.json create mode 100644 zk-auth/tsconfig.tsbuildinfo diff --git a/zk-auth/.env.example b/zk-auth/.env.example new file mode 100644 index 0000000..3286098 --- /dev/null +++ b/zk-auth/.env.example @@ -0,0 +1,7 @@ +# Public +NEXT_PUBLIC_GOOGLE_CLIENT_ID=381952934096-ahvjn5cj420qiosnjl2g4o2olpbuopf9.apps.googleusercontent.com +NEXT_PUBLIC_VERCEL_BRANCH_URL=localhost + +# Private +BONSAI_API_KEY= +IMAGE_ID= 32 diff --git a/zk-auth/.gitignore b/zk-auth/.gitignore new file mode 100644 index 0000000..c8a7336 --- /dev/null +++ b/zk-auth/.gitignore @@ -0,0 +1,2 @@ +.vercel +.env*.local diff --git a/zk-auth/LICENSE.md b/zk-auth/LICENSE.md new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/zk-auth/LICENSE.md @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/zk-auth/README.md b/zk-auth/README.md new file mode 100644 index 0000000..d30e151 --- /dev/null +++ b/zk-auth/README.md @@ -0,0 +1,13 @@ +# zk-auth + +## Getting Started 🚀 + +> [!IMPORTANT] +> Create an `.env` file at the root of the project and fill its contents (see `.env.example`) + +Then run: + +```sh +bun install # installs all dependencies +bun run dev # runs the app +``` diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..12f974e1508da6ac5d446986726341a7453aaa43 GIT binary patch literal 518620 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 +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js new file mode 100644 index 0000000..1695eb1 --- /dev/null +++ b/zk-auth/next.config.js @@ -0,0 +1,8 @@ +import "./src/env.js"; + +import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; +import deepmerge from "deepmerge"; + +const config = deepmerge(nextConfigBase, {}); + +export default config; diff --git a/zk-auth/package.json b/zk-auth/package.json new file mode 100644 index 0000000..d89f356 --- /dev/null +++ b/zk-auth/package.json @@ -0,0 +1,40 @@ +{ + "name": "zk-socials", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "build": "next build", + "dev": "next dev --turbo", + "start": "next start", + "test": "bun test spec" + }, + "dependencies": { + "@react-oauth/google": "0.12.1", + "@risc0/ui": "0.0.166", + "@t3-oss/env-nextjs": "0.11.1", + "@tanstack/react-query": "5.56.2", + "axios": "1.7.7", + "deepmerge": "4.3.1", + "encoding": "0.1.13", + "jwt-decode": "3.1.2", + "lucide-react": "0.441.0", + "next": "15.0.0-rc.0", + "next-themes": "0.3.0", + "react": "19.0.0-rc-f2df5694-20240916", + "react-dom": "19.0.0-rc-f2df5694-20240916", + "sharp": "0.33.5", + "string-ts": "2.2.0", + "typescript": "5.6.2", + "viem": "2.21.7", + "wagmi": "2.12.12", + "zod": "3.23.8" + }, + "devDependencies": { + "@types/node": "22.5.5", + "@types/react": "18.3.6", + "@types/react-dom": "18.3.0", + "@types/uuid": "9.0.8", + "pino-pretty": "11.2.2" + } +} diff --git a/zk-auth/postcss.config.cjs b/zk-auth/postcss.config.cjs new file mode 100644 index 0000000..522f38a --- /dev/null +++ b/zk-auth/postcss.config.cjs @@ -0,0 +1 @@ +module.exports = require("@risc0/ui/config/postcss.config.base.cjs"); diff --git a/zk-auth/public/bonsai-logo-dark.svg b/zk-auth/public/bonsai-logo-dark.svg new file mode 100644 index 0000000..44f94bb --- /dev/null +++ b/zk-auth/public/bonsai-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/public/bonsai-logo-light.svg b/zk-auth/public/bonsai-logo-light.svg new file mode 100644 index 0000000..b557f8b --- /dev/null +++ b/zk-auth/public/bonsai-logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/public/google.svg b/zk-auth/public/google.svg new file mode 100644 index 0000000..c0669b3 --- /dev/null +++ b/zk-auth/public/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/public/loading.gif b/zk-auth/public/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e920a2fba83ba1176ffee918fbeb349084a67717 GIT binary patch literal 18308 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 literal 0 HcmV?d00001 diff --git a/zk-auth/src/app/_components/prove-button.tsx b/zk-auth/src/app/_components/prove-button.tsx new file mode 100644 index 0000000..53ff96e --- /dev/null +++ b/zk-auth/src/app/_components/prove-button.tsx @@ -0,0 +1,182 @@ +"use client"; + +import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { Loader } from "@risc0/ui/loader"; +import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; +import { useTheme } from "next-themes"; +import Image from "next/image"; +import { useState, useTransition } from "react"; +import type { + SnarkSessionStatusRes, + StarkSessionStatusRes, +} from "../_actions/bonsai-proving"; +import { doSnarkProving } from "../_utils/do-snark-proving"; +import { doStarkProving } from "../_utils/do-stark-proving"; +import { UserInfos } from "./user-infos"; + +export function ProveButton() { + const { resolvedTheme } = useTheme(); + const [isPending, startTransition] = useTransition(); + const [_starkResults, setStarkResults] = useLocalStorage( + "stark-results", + undefined, + ); + const [_snarkResults, setSnarkResults] = useLocalStorage( + "snark-results", + undefined, + ); + const [googleUserInfos] = useLocalStorage("google-infos", undefined); + const [googleUserToken] = useLocalStorage( + "google-token", + undefined, + ); + const [error, setError] = useState(); + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + const [snarkPollingResults, setSnarkPollingResults] = + useState(); + const [starkPollingResults, setStarkPollingResults] = + useState(); + + // this function takes care of creating the STARK session, which then returns a UUID + // we then use this UUID to create a SNARK session + // lastly, we get all the results from the STARK and SNARK sessions + // this gets around Vercel's time limit for serverless functions + function handleClick() { + if (!googleUserToken) { + console.error("JWT not found"); + return; + } + + startTransition(async () => { + try { + const { starkUuid, starkStatus } = await doStarkProving({ + iss: googleUserInfos ? "Google" : "test", + setStarkPollingResults, + token: googleUserToken ?? "", + }); + const { snarkStatus } = await doSnarkProving({ + setSnarkPollingResults, + starkUuid, + }); + + setStarkResults(starkStatus); + setSnarkResults(snarkStatus); + } catch (error) { + console.error("Error proving:", error); + setError(error); + } + }); + } + + return address ? ( + <> + {isPending ? ( + + ) : ( + <> +

+ You are about to prove that address{" "} + {address} owns the following social + account: +

+ + {googleUserInfos && ( + + )} + + )} + +
+ + + {starkPollingResults && starkPollingResults.length > 0 && ( + + + STARK Results{" "} + + ({starkPollingResults.at(-1)?.status}) + + + {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( + +
+
+ {starkPollingResults.map((result, index) => ( + + {result.state} + + ))} +
+ +
+
+ )} +
+ )} + + {snarkPollingResults && ( + + + SNARK Results{" "} + + ({snarkPollingResults.status}) + + + +
+ This will take ~2 minutes{" "} + +
+
+
+ )} + + {error && ( + + + Error {error.status} + {error.message} + + )} +
+ + ) : null; +} diff --git a/zk-auth/src/app/_components/sign-in-button.tsx b/zk-auth/src/app/_components/sign-in-button.tsx new file mode 100644 index 0000000..3e39dcf --- /dev/null +++ b/zk-auth/src/app/_components/sign-in-button.tsx @@ -0,0 +1,37 @@ +"use client"; + +import { GoogleLogin } from "@react-oauth/google"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import jwtDecode from "jwt-decode"; +import { useEffect } from "react"; + +export function SignInButton() { + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage< + any | undefined + >("google-infos", undefined); + const [googleUserToken, setGoogleUserToken] = useLocalStorage< + string | undefined + >("google-token", undefined); + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + + useEffect(() => { + if (!googleUserToken || googleUserInfos) { + return; + } + + setGoogleUserInfos(jwtDecode(googleUserToken)); + }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + + return ( + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + ); +} diff --git a/zk-auth/src/app/_components/snark-table.tsx b/zk-auth/src/app/_components/snark-table.tsx new file mode 100644 index 0000000..b7d3a8b --- /dev/null +++ b/zk-auth/src/app/_components/snark-table.tsx @@ -0,0 +1,63 @@ +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@risc0/ui/table"; +import { DownloadIcon } from "lucide-react"; +import { capitalize, toLowerCase } from "string-ts"; + +function DownloadButton({ snarkData }) { + const handleDownload = () => { + const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(snarkData.output))}`; + const downloadAnchorNode = document.createElement("a"); + downloadAnchorNode.setAttribute("href", dataStr); + downloadAnchorNode.setAttribute( + "download", + `snark_data_${new Date().toLocaleDateString()}.json`, + ); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); + }; + + return ( + + ); +} + +export function SnarkTable({ snarkData }) { + return ( + + + + Status + Output + + + + + + + {capitalize(toLowerCase(snarkData.status))} + + + + + + + +
+ ); +} diff --git a/zk-auth/src/app/_components/stark-table.tsx b/zk-auth/src/app/_components/stark-table.tsx new file mode 100644 index 0000000..4e9f11d --- /dev/null +++ b/zk-auth/src/app/_components/stark-table.tsx @@ -0,0 +1,78 @@ +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@risc0/ui/table"; +import { DownloadIcon } from "lucide-react"; +import Link from "next/link"; +import { capitalize, toLowerCase } from "string-ts"; + +export function StarkTable({ starkData }) { + const isSuccess = starkData.status === "SUCCEEDED"; + + return ( + + + + Status + {!isSuccess && ( + Error Message + )} + Stats + Elapsed Time + {isSuccess && ( + Receipt URL + )} + + + + + + + {capitalize(toLowerCase(starkData.status))} + + + {!isSuccess && {starkData.error_msg ?? "-"}} + +
+ + Segments:{" "} + {starkData.stats?.segments} + + + Cycles:{" "} + {starkData.stats?.cycles} + + + Total Cycles:{" "} + {starkData.stats?.total_cycles} + +
+
+ + {starkData.elapsed_time}s + + {isSuccess && ( + + + + + + )} +
+
+
+ ); +} diff --git a/zk-auth/src/app/_components/user-infos.tsx b/zk-auth/src/app/_components/user-infos.tsx new file mode 100644 index 0000000..5d1d802 --- /dev/null +++ b/zk-auth/src/app/_components/user-infos.tsx @@ -0,0 +1,28 @@ +import { Alert, AlertDescription } from "@risc0/ui/alert"; +import Image from "next/image"; + +export function UserInfos({ userInfos, type }: { userInfos; type: "google" }) { + return ( + + +

+ {userInfos.name} +

+

+ {userInfos.email} +

+

+ {type === "google" && ( + <> + Google{" "} + Google + + )} +

+
+
+ ); +} diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts new file mode 100644 index 0000000..833f144 --- /dev/null +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -0,0 +1,264 @@ +import env from "~/env"; +import axios, { type AxiosInstance, type AxiosResponse } from "axios"; + +type StarkSessionStats = { + segments: number; + total_cycles: number; + cycles: number; +}; + +type ProofReq = { + img: string; + input: string; + assumptions: string[]; +}; + +type SnarkSessionReceipt = { + snark: any; + post_state_digest: number[]; + journal: number[]; +}; + +type StarkSessionStatusRes = { + status: string; + receipt_url?: string; + error_msg?: string; + state?: string; + elapsed_time?: number; + stats?: StarkSessionStats; +}; + +type SnarkSessionStatusRes = { + status: string; + output?: SnarkSessionReceipt; + error_msg?: string; +}; + +type UploadRes = { + url: string; + uuid: string; +}; + +type CreateStarkSessionRes = { + uuid: string; +}; + +type CreateSnarkSessionRes = { + uuid: string; +}; + +type SnarkSessionReq = { + session_id: string; +}; + +class StarkSession { + constructor(public uuid: string) {} + + async status(client: Client): Promise { + const url = `sessions/status/${this.uuid}`; + const res = await client.getData(url); + return res; + } + + async logs(client: Client): Promise { + const url = `sessions/logs/${this.uuid}`; + const res = await client.getData(url); + return res; + } +} + +class SnarkSession { + constructor(public uuid: string) {} + + async status(client: Client): Promise { + const url = `snark/status/${this.uuid}`; + const res = await client.getData(url); + return res; + } +} + +class SdkErr extends Error { + constructor(message: string) { + super(message); + this.name = "SdkErr"; + } +} + +class InternalServerErr extends SdkErr { + constructor(body: string) { + super(`server error \`${body}\``); + this.name = "InternalServerErr"; + } +} + +class Client { + private client: AxiosInstance; + + constructor( + public url: string, + apiKey: string, + version: string, + ) { + const headers = { + accept: "application/json", + "Content-Type": "application/json", + "x-api-key": apiKey, + "x-risc0-version": version, + }; + this.client = axios.create({ + baseURL: url, + headers, + }); + } + + private handleError(res: AxiosResponse): void { + if (!res.status.toString().startsWith("2")) { + throw new InternalServerErr(res.data); + } + } + + async putData(url: string, body: T): Promise { + const res = await this.client.put(url, body); + this.handleError(res); + } + + async postData(url: string, body: T): Promise { + const res = await this.client.post(url, body); + this.handleError(res); + return res.data as R; + } + + async getData(url: string): Promise { + const res = await this.client.get(url); + this.handleError(res); + return res.data as T; + } + + private async getUploadUrl(route: string): Promise { + const url = `${route}/upload`; + const res = await this.getData(url); + return res; + } + + async uploadInput(buf: Buffer): Promise { + const uploadData = await this.getUploadUrl("inputs"); + await this.putData(uploadData.url, buf); + return uploadData.uuid; + } + + async createStarkSession( + imageId: string, + inputId: string, + assumptions: string[], + ): Promise { + const req: ProofReq = { + img: imageId, + input: inputId, + assumptions, + }; + + const url = "sessions/create"; + const res = await this.postData(url, req); + return new StarkSession(res.uuid); + } + + async createSnarkSession(sessionId: string): Promise { + const snarkReq: SnarkSessionReq = { session_id: sessionId }; + + const url = "snark/create"; + const res = await this.postData( + url, + snarkReq, + ); + return new SnarkSession(res.uuid); + } +} + +async function getGoogleCerts(): Promise { + const response = await axios.get( + "https://www.googleapis.com/oauth2/v3/certs", + ); + const certs = response.data; + return JSON.stringify(certs); +} + +function encodeString(value: string) { + const encoder = new TextEncoder(); + return encoder.encode(value); +} + +// STARK +export async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "test"; token: string }) { + const apiKey = env.BONSAI_API_KEY; + const version = "1.0.5"; + const url = "https://api.staging.bonsai.xyz"; + const client = new Client(url, apiKey, version); + + // TODO: Add others, if applicable + let jwks = ""; + + if (iss === "Google") { + jwks = await getGoogleCerts(); + } + + const inputData = Buffer.from( + encodeString( + JSON.stringify({ + iss, + jwks, + jwt: token, + }), + ), + ); + + const inputId = await client.uploadInput(inputData); + const imageId = env.IMAGE_ID; + const assumptions: string[] = []; + const starkSession = await client.createStarkSession( + imageId, + inputId, + assumptions, + ); + + return starkSession.uuid; +} + +// STARK STATUS +export async function getBonsaiStarkStatus({ uuid }: { uuid: string }) { + const apiKey = env.BONSAI_API_KEY; + const version = "1.0.5"; + const url = "https://api.staging.bonsai.xyz"; + const client = new Client(url, apiKey, version); + + const starkSession = new StarkSession(uuid); + const starkStatus = await starkSession.status(client); + + return starkStatus; +} + +// SNARK +export async function bonsaiSnarkProving({ uuid }: { uuid: string }) { + const apiKey = env.BONSAI_API_KEY; + const version = "1.0.5"; + const url = "https://api.staging.bonsai.xyz"; + const client = new Client(url, apiKey, version); + const snarkSession = await client.createSnarkSession(uuid); + + return snarkSession.uuid; +} + +// SNARK STATUS +export async function getBonsaiSnarkStatus({ uuid }: { uuid: string }) { + const apiKey = env.BONSAI_API_KEY; + const version = "1.0.5"; + const url = "https://api.staging.bonsai.xyz"; + const client = new Client(url, apiKey, version); + + const snarkSession = new SnarkSession(uuid); + const snarkStatus = await snarkSession.status(client); + + return snarkStatus; +} diff --git a/zk-auth/src/app/_utils/do-snark-proving.ts b/zk-auth/src/app/_utils/do-snark-proving.ts new file mode 100644 index 0000000..d047fac --- /dev/null +++ b/zk-auth/src/app/_utils/do-snark-proving.ts @@ -0,0 +1,65 @@ +import { sleep } from "@risc0/ui/utils/sleep"; +import type { Dispatch, SetStateAction } from "react"; + +type SnarkSessionStatusRes = { + status: string; + // Add other properties as needed +}; + +async function bonsaiSnarkProving(uuid: string): Promise { + const response = await fetch("/api/bonsai/snark-proving", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ uuid }), + }); + + if (!response.ok) { + throw new Error("Failed to start SNARK proving"); + } + + const data = await response.json(); + + return data.uuid; +} + +async function getBonsaiSnarkStatus( + uuid: string, +): Promise { + const response = await fetch(`/api/bonsai/snark-status?uuid=${uuid}`); + + if (!response.ok) { + throw new Error("Failed to get SNARK status"); + } + + return response.json(); +} + +export async function doSnarkProving({ + starkUuid, + setSnarkPollingResults, +}: { + starkUuid: string; + setSnarkPollingResults: Dispatch< + SetStateAction + >; +}) { + const snarkUuid = await bonsaiSnarkProving(starkUuid); + + if (!snarkUuid) { + throw new Error("SNARK UUID not found"); + } + + let snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + + setSnarkPollingResults(snarkStatus); + + // Poll until the session is not RUNNING + while (snarkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + + setSnarkPollingResults(snarkStatus); + } + + return { snarkStatus }; +} diff --git a/zk-auth/src/app/_utils/do-stark-proving.ts b/zk-auth/src/app/_utils/do-stark-proving.ts new file mode 100644 index 0000000..14f7b99 --- /dev/null +++ b/zk-auth/src/app/_utils/do-stark-proving.ts @@ -0,0 +1,82 @@ +import { sleep } from "@risc0/ui/utils/sleep"; +import isEqual from "lodash-es/isEqual"; +import type { Dispatch, SetStateAction } from "react"; + +type StarkSessionStatusRes = { + status: string; + // Add other properties as needed +}; + +async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "test"; token: string }): Promise { + const response = await fetch("/api/bonsai/stark-proving", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ iss, token }), + }); + if (!response.ok) { + throw new Error("Failed to start STARK proving"); + } + + const data = await response.json(); + + return data.uuid; +} + +async function getBonsaiStarkStatus( + uuid: string, +): Promise { + const response = await fetch(`/api/bonsai/stark-status?uuid=${uuid}`); + + if (!response.ok) { + throw new Error("Failed to get STARK status"); + } + + return response.json(); +} + +export async function doStarkProving({ + iss, + token, + setStarkPollingResults, +}: { + iss: "Google" | "test"; + token: string; + setStarkPollingResults: Dispatch< + SetStateAction + >; +}) { + const starkUuid = await bonsaiStarkProving({ iss, token }); + + if (!starkUuid) { + throw new Error("STARK UUID not found"); + } + + // STARK + let starkStatus = await getBonsaiStarkStatus(starkUuid); + + setStarkPollingResults([starkStatus]); + + // Poll until the session is not RUNNING + while (starkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + starkStatus = await getBonsaiStarkStatus(starkUuid); + + setStarkPollingResults((prevResults) => { + const lastStarkStatus = prevResults?.at(-1); + + if (!isEqual(lastStarkStatus, starkStatus)) { + return [...(prevResults ?? []), starkStatus]; + } + + return prevResults; + }); + } + + return { + starkUuid, + starkStatus, + }; +} diff --git a/zk-auth/src/app/api/bonsai/snark-proving/route.ts b/zk-auth/src/app/api/bonsai/snark-proving/route.ts new file mode 100644 index 0000000..554c133 --- /dev/null +++ b/zk-auth/src/app/api/bonsai/snark-proving/route.ts @@ -0,0 +1,17 @@ +import { NextRequest, NextResponse } from "next/server"; +import { bonsaiSnarkProving } from "~/app/_lib/bonsai-proving"; + +export async function POST(request: NextRequest) { + const { uuid } = await request.json(); + + try { + const snarkUuid = await bonsaiSnarkProving({ uuid }); + + return NextResponse.json({ uuid: snarkUuid }); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/zk-auth/src/app/api/bonsai/snark-status/route.ts b/zk-auth/src/app/api/bonsai/snark-status/route.ts new file mode 100644 index 0000000..b59bad2 --- /dev/null +++ b/zk-auth/src/app/api/bonsai/snark-status/route.ts @@ -0,0 +1,21 @@ +import { NextRequest, NextResponse } from "next/server"; +import { getBonsaiSnarkStatus } from "~/app/_lib/bonsai-proving"; + +export async function GET(request: NextRequest) { + const uuid = request.nextUrl.searchParams.get("uuid"); + + if (!uuid) { + return NextResponse.json({ error: "Invalid UUID" }, { status: 400 }); + } + + try { + const status = await getBonsaiSnarkStatus({ uuid }); + + return NextResponse.json(status); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/zk-auth/src/app/api/bonsai/stark-proving/route.ts b/zk-auth/src/app/api/bonsai/stark-proving/route.ts new file mode 100644 index 0000000..0e00b26 --- /dev/null +++ b/zk-auth/src/app/api/bonsai/stark-proving/route.ts @@ -0,0 +1,17 @@ +import { NextRequest, NextResponse } from "next/server"; +import { bonsaiStarkProving } from "~/app/_lib/bonsai-proving"; + +export async function POST(request: NextRequest) { + const { iss, token } = await request.json(); + + try { + const uuid = await bonsaiStarkProving({ iss, token }); + + return NextResponse.json({ uuid }); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/zk-auth/src/app/api/bonsai/stark-status/route.ts b/zk-auth/src/app/api/bonsai/stark-status/route.ts new file mode 100644 index 0000000..9d73b20 --- /dev/null +++ b/zk-auth/src/app/api/bonsai/stark-status/route.ts @@ -0,0 +1,21 @@ +import { NextRequest, NextResponse } from "next/server"; +import { getBonsaiStarkStatus } from "~/app/_lib/bonsai-proving"; + +export async function GET(request: NextRequest) { + const uuid = request.nextUrl.searchParams.get("uuid"); + + if (!uuid) { + return NextResponse.json({ error: "Invalid UUID" }, { status: 400 }); + } + + try { + const status = await getBonsaiStarkStatus({ uuid }); + + return NextResponse.json(status); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); + } +} diff --git a/zk-auth/src/app/layout.tsx b/zk-auth/src/app/layout.tsx new file mode 100644 index 0000000..ee6992a --- /dev/null +++ b/zk-auth/src/app/layout.tsx @@ -0,0 +1,14 @@ +import "@risc0/ui/styles/globals.css"; + +import type { PropsWithChildren } from "react"; +import { Providers } from "./providers"; + +export default function RootLayout({ children }: PropsWithChildren) { + return ( + + + {children} + + + ); +} diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx new file mode 100644 index 0000000..87e1ac6 --- /dev/null +++ b/zk-auth/src/app/page.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { useEffect, useState } from "react"; +import { ProveButton } from "./_components/prove-button"; +import { SignInButton } from "./_components/sign-in-button"; +import { SnarkTable } from "./_components/snark-table"; +import { StarkTable } from "./_components/stark-table"; + +export default function AppPage() { + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + const [googleUserToken] = useLocalStorage("google-token", null); + const [currentStep, setCurrentStep] = useState(1); + const [starkResults] = useLocalStorage( + "stark-results", + undefined, + ); + const [snarkResults] = useLocalStorage( + "snark-results", + undefined, + ); + + useEffect(() => { + if (!googleUserToken) { + setCurrentStep(2); + return; + } + + if (starkResults || snarkResults) { + setCurrentStep(4); + return; + } + + setCurrentStep(3); + }, [address, googleUserToken, starkResults, snarkResults]); + + return currentStep === 2 ? ( + + ) : currentStep === 3 ? ( + + ) : ( + <> + {starkResults && ( + + STARK Results + + + + + )} + + {snarkResults && ( + + SNARK Results + + + + + )} + + ); +} diff --git a/zk-auth/src/app/providers.tsx b/zk-auth/src/app/providers.tsx new file mode 100644 index 0000000..c36ddf5 --- /dev/null +++ b/zk-auth/src/app/providers.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { GoogleOAuthProvider } from "@react-oauth/google"; +import { TooltipProvider } from "@risc0/ui/tooltip"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ThemeProvider } from "next-themes"; +import { WagmiProvider } from "wagmi"; +import env from "~/env"; +import { config } from "~/wagmi"; + +const queryClient = new QueryClient(); + +export function Providers({ children }) { + return ( + + + + + {children} + + + + + ); +} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js new file mode 100644 index 0000000..144a58a --- /dev/null +++ b/zk-auth/src/env.js @@ -0,0 +1,47 @@ +import { createEnv } from "@t3-oss/env-nextjs"; +import { vercel } from "@t3-oss/env-nextjs/presets"; +import { z } from "zod"; + +const env = createEnv({ + extends: [vercel()], + + /** + * Specify server-side environment variables schema here. + */ + server: { + BONSAI_API_KEY: z.string(), + IMAGE_ID: z.string(), + NODE_ENV: z.enum(["development", "test", "production"]).default("development"), + }, + + /** + * Specify client-side environment variables schema here. + * To expose them to the client, prefix them with `NEXT_PUBLIC_`. + */ + client: { + NEXT_PUBLIC_GOOGLE_CLIENT_ID: z.string(), + NEXT_PUBLIC_VERCEL_BRANCH_URL: z.string(), + }, + + /** + * You can't destruct `process.env` as a regular object in the Next.js edge runtimes + * (e.g. middlewares) or client-side so we need to destruct manually. + */ + runtimeEnv: { + // Client-side environment variables + NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID, + NEXT_PUBLIC_VERCEL_BRANCH_URL: process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL, + + // Server-side environment variables + BONSAI_API_KEY: process.env.BONSAI_API_KEY, + IMAGE_ID: process.env.IMAGE_ID, + NODE_ENV: process.env.NODE_ENV, + }, + /** + * Makes it so that empty strings are treated as undefined. + * `SOME_VAR: z.string()` and `SOME_VAR=''` will throw an error. + */ + emptyStringAsUndefined: true, +}); + +export default env; diff --git a/zk-auth/src/wagmi.ts b/zk-auth/src/wagmi.ts new file mode 100644 index 0000000..f0c6672 --- /dev/null +++ b/zk-auth/src/wagmi.ts @@ -0,0 +1,18 @@ +import { http, createConfig } from "wagmi"; +import { mainnet } from "wagmi/chains"; +import { injected } from "wagmi/connectors"; + +export const config = createConfig({ + chains: [mainnet], + connectors: [injected()], + ssr: true, + transports: { + [mainnet.id]: http(), + }, +}); + +declare module "wagmi" { + interface Register { + config: typeof config; + } +} diff --git a/zk-auth/tailwind.config.ts b/zk-auth/tailwind.config.ts new file mode 100644 index 0000000..cf3dba9 --- /dev/null +++ b/zk-auth/tailwind.config.ts @@ -0,0 +1,18 @@ +import tailwindConfig from "@risc0/ui/config/tailwind.config.base"; +import deepmerge from "deepmerge"; +import type { Config } from "tailwindcss"; + +const config = deepmerge(tailwindConfig, { + theme: { + fontFamily: { + sans: ["system-ui"], + }, + }, +}) satisfies Config; + +config.content = [ + "./node_modules/@risc0/ui/**/*.{ts,tsx}", + "./src/**/*.{js,jsx,ts,tsx,mdx}", +]; + +export default config; diff --git a/zk-auth/tsconfig.json b/zk-auth/tsconfig.json new file mode 100644 index 0000000..4d92b15 --- /dev/null +++ b/zk-auth/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@risc0/ui/config/tsconfig.base.json", + "compilerOptions": { + /* Path Aliases */ + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "types": ["node"] + }, + "include": [".next/types/**/*.ts", "**/*.ts", "**/*.tsx", "next-env.d.ts"], + "exclude": ["node_modules"] +} diff --git a/zk-auth/tsconfig.tsbuildinfo b/zk-auth/tsconfig.tsbuildinfo new file mode 100644 index 0000000..5f73d82 --- /dev/null +++ b/zk-auth/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/querystring/decode.d.ts","./node_modules/querystring/encode.d.ts","./node_modules/querystring/index.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage-instance.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage-instance.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage-instance.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/search-params.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefix.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/future/normalizers/request/action.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/client/components/draft-mode.d.ts","./node_modules/next/dist/client/components/headers.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/previous-map.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/input.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/declaration.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/root.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/warning.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/lazy-result.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/no-work-result.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/processor.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/result.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/document.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/rule.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/node.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/comment.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/container.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/at-rule.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/list.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/postcss.d.ts","./node_modules/tailwindcss/node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./node_modules/tailwindcss-animate/index.d.ts","./node_modules/@risc0/ui/config/tailwind.config.ts","./node_modules/deepmerge/index.d.ts","./tailwind.config.ts","./node_modules/abitype/dist/types/register.d.ts","./node_modules/abitype/dist/types/types.d.ts","./node_modules/abitype/dist/types/abi.d.ts","./node_modules/abitype/dist/types/errors.d.ts","./node_modules/abitype/dist/types/narrow.d.ts","./node_modules/abitype/dist/types/utils.d.ts","./node_modules/abitype/dist/types/human-readable/types/signatures.d.ts","./node_modules/abitype/dist/types/human-readable/formatabiparameter.d.ts","./node_modules/abitype/dist/types/human-readable/formatabiparameters.d.ts","./node_modules/abitype/dist/types/human-readable/formatabiitem.d.ts","./node_modules/abitype/dist/types/human-readable/formatabi.d.ts","./node_modules/abitype/dist/types/human-readable/types/utils.d.ts","./node_modules/abitype/dist/types/human-readable/types/structs.d.ts","./node_modules/abitype/dist/types/human-readable/parseabi.d.ts","./node_modules/abitype/dist/types/human-readable/parseabiitem.d.ts","./node_modules/abitype/dist/types/human-readable/parseabiparameter.d.ts","./node_modules/abitype/dist/types/human-readable/parseabiparameters.d.ts","./node_modules/abitype/dist/types/human-readable/errors/abiitem.d.ts","./node_modules/abitype/dist/types/human-readable/errors/abiparameter.d.ts","./node_modules/abitype/dist/types/human-readable/errors/signature.d.ts","./node_modules/abitype/dist/types/human-readable/errors/splitparameters.d.ts","./node_modules/abitype/dist/types/human-readable/errors/struct.d.ts","./node_modules/abitype/dist/types/exports/index.d.ts","./node_modules/@scure/bip32/lib/index.d.ts","./node_modules/viem/_types/errors/utils.d.ts","./node_modules/viem/_types/types/utils.d.ts","./node_modules/viem/_types/types/misc.d.ts","./node_modules/viem/_types/errors/base.d.ts","./node_modules/viem/_types/errors/abi.d.ts","./node_modules/viem/_types/errors/address.d.ts","./node_modules/viem/_types/utils/lru.d.ts","./node_modules/viem/_types/utils/address/isaddress.d.ts","./node_modules/viem/_types/utils/data/concat.d.ts","./node_modules/viem/_types/errors/data.d.ts","./node_modules/viem/_types/utils/data/pad.d.ts","./node_modules/viem/_types/errors/encoding.d.ts","./node_modules/viem/_types/utils/data/ishex.d.ts","./node_modules/viem/_types/utils/data/size.d.ts","./node_modules/viem/_types/utils/data/trim.d.ts","./node_modules/viem/_types/utils/encoding/tobytes.d.ts","./node_modules/viem/_types/utils/encoding/fromhex.d.ts","./node_modules/viem/_types/utils/encoding/tohex.d.ts","./node_modules/viem/_types/utils/abi/encodepacked.d.ts","./node_modules/viem/_types/utils/hash/keccak256.d.ts","./node_modules/viem/_types/experimental/eip3074/utils/toauthmessage.d.ts","./node_modules/viem/_types/types/eip4844.d.ts","./node_modules/viem/_types/types/fee.d.ts","./node_modules/viem/_types/types/account.d.ts","./node_modules/viem/_types/types/kzg.d.ts","./node_modules/viem/_types/types/contract.d.ts","./node_modules/viem/_types/types/log.d.ts","./node_modules/viem/_types/types/transaction.d.ts","./node_modules/viem/_types/types/typeddata.d.ts","./node_modules/viem/_types/accounts/utils/parseaccount.d.ts","./node_modules/viem/_types/utils/blob/blobstocommitments.d.ts","./node_modules/viem/_types/utils/blob/blobstoproofs.d.ts","./node_modules/viem/_types/utils/hash/sha256.d.ts","./node_modules/viem/_types/utils/blob/commitmenttoversionedhash.d.ts","./node_modules/viem/_types/utils/blob/commitmentstoversionedhashes.d.ts","./node_modules/viem/_types/errors/blob.d.ts","./node_modules/viem/_types/utils/blob/toblobs.d.ts","./node_modules/viem/_types/utils/blob/toblobsidecars.d.ts","./node_modules/viem/_types/errors/cursor.d.ts","./node_modules/viem/_types/utils/cursor.d.ts","./node_modules/viem/_types/utils/encoding/torlp.d.ts","./node_modules/viem/_types/types/withdrawal.d.ts","./node_modules/viem/_types/types/block.d.ts","./node_modules/viem/_types/types/proof.d.ts","./node_modules/viem/_types/types/rpc.d.ts","./node_modules/viem/_types/types/eip1193.d.ts","./node_modules/viem/_types/clients/transports/createtransport.d.ts","./node_modules/viem/_types/utils/data/slice.d.ts","./node_modules/viem/_types/utils/hash/hashsignature.d.ts","./node_modules/viem/_types/utils/hash/normalizesignature.d.ts","./node_modules/viem/_types/utils/hash/tosignature.d.ts","./node_modules/viem/_types/utils/hash/tosignaturehash.d.ts","./node_modules/viem/_types/utils/hash/tofunctionselector.d.ts","./node_modules/viem/_types/utils/address/getaddress.d.ts","./node_modules/viem/_types/utils/encoding/frombytes.d.ts","./node_modules/viem/_types/utils/abi/decodeabiparameters.d.ts","./node_modules/viem/_types/utils/abi/formatabiitem.d.ts","./node_modules/viem/_types/utils/abi/decodeerrorresult.d.ts","./node_modules/viem/_types/errors/contract.d.ts","./node_modules/viem/_types/types/stateoverride.d.ts","./node_modules/viem/_types/errors/stateoverride.d.ts","./node_modules/viem/_types/utils/abi/getabiitem.d.ts","./node_modules/viem/_types/utils/abi/decodefunctionresult.d.ts","./node_modules/viem/_types/utils/abi/encodeabiparameters.d.ts","./node_modules/viem/_types/utils/abi/encodefunctiondata.d.ts","./node_modules/viem/_types/errors/request.d.ts","./node_modules/viem/_types/errors/rpc.d.ts","./node_modules/viem/_types/utils/promise/createbatchscheduler.d.ts","./node_modules/viem/_types/utils/promise/withretry.d.ts","./node_modules/viem/_types/utils/rpc/socket.d.ts","./node_modules/viem/_types/utils/buildrequest.d.ts","./node_modules/viem/_types/utils/chain/getchaincontractaddress.d.ts","./node_modules/viem/_types/errors/node.d.ts","./node_modules/viem/_types/utils/errors/getnodeerror.d.ts","./node_modules/viem/_types/utils/errors/getcallerror.d.ts","./node_modules/viem/_types/utils/formatters/formatter.d.ts","./node_modules/viem/_types/utils/kzg/definekzg.d.ts","./node_modules/viem/_types/utils/formatters/transactionrequest.d.ts","./node_modules/viem/_types/utils/transaction/assertrequest.d.ts","./node_modules/viem/_types/actions/public/call.d.ts","./node_modules/viem/_types/utils/ccip.d.ts","./node_modules/viem/_types/utils/ens/encodedlabeltolabelhash.d.ts","./node_modules/viem/_types/utils/ens/namehash.d.ts","./node_modules/viem/_types/utils/ens/encodelabelhash.d.ts","./node_modules/viem/_types/utils/ens/labelhash.d.ts","./node_modules/viem/_types/utils/ens/packettobytes.d.ts","./node_modules/viem/_types/utils/errors/getcontracterror.d.ts","./node_modules/viem/_types/actions/public/readcontract.d.ts","./node_modules/viem/_types/actions/ens/getensaddress.d.ts","./node_modules/viem/_types/types/ens.d.ts","./node_modules/viem/_types/errors/ens.d.ts","./node_modules/viem/_types/utils/ens/avatar/utils.d.ts","./node_modules/viem/_types/utils/ens/avatar/parseavatarrecord.d.ts","./node_modules/viem/_types/actions/ens/getenstext.d.ts","./node_modules/viem/_types/actions/ens/getensavatar.d.ts","./node_modules/viem/_types/actions/ens/getensname.d.ts","./node_modules/viem/_types/actions/ens/getensresolver.d.ts","./node_modules/viem/_types/types/filter.d.ts","./node_modules/viem/_types/actions/public/createblockfilter.d.ts","./node_modules/viem/_types/errors/log.d.ts","./node_modules/viem/_types/utils/hash/toeventselector.d.ts","./node_modules/viem/_types/utils/abi/encodeeventtopics.d.ts","./node_modules/viem/_types/actions/public/createcontracteventfilter.d.ts","./node_modules/viem/_types/actions/public/createeventfilter.d.ts","./node_modules/viem/_types/actions/public/creatependingtransactionfilter.d.ts","./node_modules/viem/_types/errors/estimategas.d.ts","./node_modules/viem/_types/utils/errors/getestimategaserror.d.ts","./node_modules/viem/_types/actions/public/estimategas.d.ts","./node_modules/viem/_types/actions/public/estimatecontractgas.d.ts","./node_modules/viem/_types/errors/fee.d.ts","./node_modules/viem/_types/errors/block.d.ts","./node_modules/viem/_types/utils/formatters/transaction.d.ts","./node_modules/viem/_types/utils/formatters/block.d.ts","./node_modules/viem/_types/actions/public/getblock.d.ts","./node_modules/viem/_types/actions/public/gettransactioncount.d.ts","./node_modules/viem/_types/errors/account.d.ts","./node_modules/viem/_types/actions/wallet/preparetransactionrequest.d.ts","./node_modules/viem/_types/actions/public/getgasprice.d.ts","./node_modules/viem/_types/actions/public/estimatemaxpriorityfeepergas.d.ts","./node_modules/viem/_types/actions/public/getbalance.d.ts","./node_modules/viem/_types/actions/public/getblobbasefee.d.ts","./node_modules/viem/_types/actions/public/getblocknumber.d.ts","./node_modules/viem/_types/actions/public/getblocktransactioncount.d.ts","./node_modules/viem/_types/actions/public/getbytecode.d.ts","./node_modules/viem/_types/actions/public/getchainid.d.ts","./node_modules/viem/_types/utils/abi/decodeeventlog.d.ts","./node_modules/viem/_types/utils/formatters/log.d.ts","./node_modules/viem/_types/actions/public/getlogs.d.ts","./node_modules/viem/_types/actions/public/getcontractevents.d.ts","./node_modules/viem/_types/utils/formatters/feehistory.d.ts","./node_modules/viem/_types/actions/public/getfeehistory.d.ts","./node_modules/viem/_types/actions/public/getfilterchanges.d.ts","./node_modules/viem/_types/actions/public/getfilterlogs.d.ts","./node_modules/viem/_types/utils/formatters/proof.d.ts","./node_modules/viem/_types/actions/public/getproof.d.ts","./node_modules/viem/_types/actions/public/getstorageat.d.ts","./node_modules/viem/_types/actions/public/gettransaction.d.ts","./node_modules/viem/_types/utils/formatters/transactionreceipt.d.ts","./node_modules/viem/_types/actions/public/gettransactionconfirmations.d.ts","./node_modules/viem/_types/actions/public/gettransactionreceipt.d.ts","./node_modules/viem/_types/types/multicall.d.ts","./node_modules/viem/_types/actions/public/multicall.d.ts","./node_modules/viem/_types/actions/wallet/writecontract.d.ts","./node_modules/viem/_types/actions/public/simulatecontract.d.ts","./node_modules/viem/_types/actions/public/uninstallfilter.d.ts","./node_modules/viem/_types/utils/signature/hashmessage.d.ts","./node_modules/viem/_types/utils/abi/encodedeploydata.d.ts","./node_modules/viem/_types/utils/data/isbytesequal.d.ts","./node_modules/viem/_types/actions/public/verifyhash.d.ts","./node_modules/viem/_types/actions/public/verifymessage.d.ts","./node_modules/viem/_types/utils/typeddata.d.ts","./node_modules/viem/_types/utils/signature/hashtypeddata.d.ts","./node_modules/viem/_types/actions/public/verifytypeddata.d.ts","./node_modules/viem/_types/utils/observe.d.ts","./node_modules/viem/_types/clients/transports/fallback.d.ts","./node_modules/viem/_types/types/transport.d.ts","./node_modules/viem/_types/utils/poll.d.ts","./node_modules/viem/_types/actions/public/watchblocknumber.d.ts","./node_modules/viem/_types/actions/public/waitfortransactionreceipt.d.ts","./node_modules/viem/_types/utils/stringify.d.ts","./node_modules/viem/_types/actions/public/watchblocks.d.ts","./node_modules/viem/_types/actions/public/watchcontractevent.d.ts","./node_modules/viem/_types/actions/public/watchevent.d.ts","./node_modules/viem/_types/actions/public/watchpendingtransactions.d.ts","./node_modules/viem/_types/actions/wallet/sendrawtransaction.d.ts","./node_modules/viem/_types/clients/decorators/public.d.ts","./node_modules/viem/_types/actions/wallet/addchain.d.ts","./node_modules/viem/_types/actions/wallet/deploycontract.d.ts","./node_modules/viem/_types/actions/wallet/getaddresses.d.ts","./node_modules/viem/_types/actions/wallet/getpermissions.d.ts","./node_modules/viem/_types/actions/wallet/requestaddresses.d.ts","./node_modules/viem/_types/actions/wallet/requestpermissions.d.ts","./node_modules/viem/_types/utils/signature/signaturetohex.d.ts","./node_modules/viem/_types/accounts/utils/sign.d.ts","./node_modules/viem/_types/accounts/utils/signmessage.d.ts","./node_modules/viem/_types/actions/wallet/signmessage.d.ts","./node_modules/viem/_types/utils/chain/assertcurrentchain.d.ts","./node_modules/viem/_types/actions/wallet/signtransaction.d.ts","./node_modules/viem/_types/accounts/utils/signtypeddata.d.ts","./node_modules/viem/_types/actions/wallet/signtypeddata.d.ts","./node_modules/viem/_types/actions/wallet/switchchain.d.ts","./node_modules/viem/_types/actions/wallet/watchasset.d.ts","./node_modules/viem/_types/clients/decorators/wallet.d.ts","./node_modules/viem/_types/clients/createclient.d.ts","./node_modules/viem/_types/actions/public/estimatefeespergas.d.ts","./node_modules/viem/_types/types/chain.d.ts","./node_modules/viem/_types/errors/chain.d.ts","./node_modules/viem/_types/utils/transaction/asserttransaction.d.ts","./node_modules/viem/_types/utils/transaction/serializeaccesslist.d.ts","./node_modules/viem/_types/utils/transaction/serializetransaction.d.ts","./node_modules/viem/_types/accounts/utils/signtransaction.d.ts","./node_modules/viem/_types/utils/errors/gettransactionerror.d.ts","./node_modules/viem/_types/actions/wallet/sendtransaction.d.ts","./node_modules/viem/_types/errors/transaction.d.ts","./node_modules/viem/_types/utils/transaction/gettransactiontype.d.ts","./node_modules/viem/_types/accounts/types.d.ts","./node_modules/viem/_types/actions/getcontract.d.ts","./node_modules/viem/_types/actions/test/dumpstate.d.ts","./node_modules/viem/_types/actions/test/getautomine.d.ts","./node_modules/viem/_types/actions/test/gettxpoolcontent.d.ts","./node_modules/viem/_types/actions/test/gettxpoolstatus.d.ts","./node_modules/viem/_types/actions/test/impersonateaccount.d.ts","./node_modules/viem/_types/actions/test/increasetime.d.ts","./node_modules/viem/_types/actions/test/inspecttxpool.d.ts","./node_modules/viem/_types/actions/test/loadstate.d.ts","./node_modules/viem/_types/actions/test/mine.d.ts","./node_modules/viem/_types/actions/test/reset.d.ts","./node_modules/viem/_types/actions/test/revert.d.ts","./node_modules/viem/_types/actions/test/sendunsignedtransaction.d.ts","./node_modules/viem/_types/actions/test/setbalance.d.ts","./node_modules/viem/_types/actions/test/setblockgaslimit.d.ts","./node_modules/viem/_types/actions/test/setblocktimestampinterval.d.ts","./node_modules/viem/_types/actions/test/setcode.d.ts","./node_modules/viem/_types/actions/test/setcoinbase.d.ts","./node_modules/viem/_types/actions/test/setintervalmining.d.ts","./node_modules/viem/_types/actions/test/setmingasprice.d.ts","./node_modules/viem/_types/actions/test/setnextblockbasefeepergas.d.ts","./node_modules/viem/_types/actions/test/setnextblocktimestamp.d.ts","./node_modules/viem/_types/actions/test/setnonce.d.ts","./node_modules/viem/_types/actions/test/setstorageat.d.ts","./node_modules/viem/_types/actions/test/stopimpersonatingaccount.d.ts","./node_modules/viem/_types/clients/decorators/test.d.ts","./node_modules/viem/_types/clients/createtestclient.d.ts","./node_modules/viem/_types/actions/test/droptransaction.d.ts","./node_modules/viem/_types/actions/test/snapshot.d.ts","./node_modules/viem/_types/actions/test/removeblocktimestampinterval.d.ts","./node_modules/viem/_types/actions/test/setautomine.d.ts","./node_modules/viem/_types/actions/test/setloggingenabled.d.ts","./node_modules/viem/_types/actions/test/setrpcurl.d.ts","./node_modules/viem/_types/clients/transports/custom.d.ts","./node_modules/viem/_types/errors/transport.d.ts","./node_modules/viem/_types/utils/promise/withtimeout.d.ts","./node_modules/viem/_types/utils/rpc/http.d.ts","./node_modules/viem/_types/clients/transports/http.d.ts","./node_modules/viem/_types/clients/createpublicclient.d.ts","./node_modules/viem/_types/clients/createwalletclient.d.ts","./node_modules/viem/_types/utils/rpc/websocket.d.ts","./node_modules/viem/_types/clients/transports/websocket.d.ts","./node_modules/viem/_types/constants/abis.d.ts","./node_modules/viem/_types/constants/address.d.ts","./node_modules/viem/_types/constants/unit.d.ts","./node_modules/viem/_types/constants/number.d.ts","./node_modules/viem/_types/constants/bytes.d.ts","./node_modules/viem/_types/constants/strings.d.ts","./node_modules/viem/_types/utils/abi/decodedeploydata.d.ts","./node_modules/viem/_types/utils/abi/decodefunctiondata.d.ts","./node_modules/viem/_types/utils/abi/encodeerrorresult.d.ts","./node_modules/viem/_types/utils/abi/prepareencodefunctiondata.d.ts","./node_modules/viem/_types/utils/abi/encodefunctionresult.d.ts","./node_modules/viem/_types/utils/abi/parseeventlogs.d.ts","./node_modules/viem/_types/utils/data/isbytes.d.ts","./node_modules/viem/_types/utils/address/getcontractaddress.d.ts","./node_modules/viem/_types/utils/transaction/getserializedtransactiontype.d.ts","./node_modules/viem/_types/utils/signature/compactsignaturetosignature.d.ts","./node_modules/viem/_types/utils/signature/hextocompactsignature.d.ts","./node_modules/viem/_types/utils/signature/hextosignature.d.ts","./node_modules/viem/_types/utils/signature/recoveraddress.d.ts","./node_modules/viem/_types/utils/signature/recovermessageaddress.d.ts","./node_modules/viem/_types/utils/signature/recoverpublickey.d.ts","./node_modules/viem/_types/utils/signature/recovertransactionaddress.d.ts","./node_modules/viem/_types/utils/signature/recovertypeddataaddress.d.ts","./node_modules/viem/_types/utils/signature/signaturetocompactsignature.d.ts","./node_modules/viem/_types/utils/signature/compactsignaturetohex.d.ts","./node_modules/viem/_types/utils/address/isaddressequal.d.ts","./node_modules/viem/_types/utils/signature/verifymessage.d.ts","./node_modules/viem/_types/utils/signature/verifytypeddata.d.ts","./node_modules/viem/_types/utils/blob/sidecarstoversionedhashes.d.ts","./node_modules/viem/_types/utils/blob/fromblobs.d.ts","./node_modules/viem/_types/utils/kzg/setupkzg.d.ts","./node_modules/viem/_types/utils/chain/definechain.d.ts","./node_modules/viem/_types/utils/chain/extractchain.d.ts","./node_modules/viem/_types/utils/unit/formatunits.d.ts","./node_modules/viem/_types/utils/unit/formatether.d.ts","./node_modules/viem/_types/utils/unit/formatgwei.d.ts","./node_modules/viem/_types/utils/encoding/fromrlp.d.ts","./node_modules/viem/_types/utils/hash/toeventsignature.d.ts","./node_modules/viem/_types/utils/hash/tofunctionsignature.d.ts","./node_modules/viem/_types/utils/hash/toeventhash.d.ts","./node_modules/viem/_types/utils/hash/tofunctionhash.d.ts","./node_modules/viem/_types/utils/hash/ishash.d.ts","./node_modules/viem/_types/utils/hash/ripemd160.d.ts","./node_modules/viem/_types/utils/unit/parseunits.d.ts","./node_modules/viem/_types/utils/unit/parseether.d.ts","./node_modules/viem/_types/utils/unit/parsegwei.d.ts","./node_modules/viem/_types/utils/transaction/parsetransaction.d.ts","./node_modules/viem/_types/index.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/types.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/config.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/abi.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/errors.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/narrow.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/utils.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/types/signatures.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/formatabiparameter.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/formatabiparameters.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/formatabiitem.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/formatabi.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/types/utils.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/types/structs.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/parseabi.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/parseabiitem.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/parseabiparameter.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/parseabiparameters.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/errors/abiitem.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/errors/abiparameter.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/errors/signature.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/errors/splitparameters.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/human-readable/errors/struct.d.ts","./node_modules/mipd/node_modules/viem/node_modules/abitype/dist/types/index.d.ts","./node_modules/mipd/node_modules/viem/_types/types/misc.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/utils.d.ts","./node_modules/mipd/node_modules/viem/_types/types/withdrawal.d.ts","./node_modules/mipd/node_modules/viem/_types/types/block.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/parseaccount.d.ts","./node_modules/mipd/node_modules/viem/_types/types/utils.d.ts","./node_modules/mipd/node_modules/viem/_types/types/account.d.ts","./node_modules/mipd/node_modules/viem/_types/types/fee.d.ts","./node_modules/mipd/node_modules/viem/_types/types/contract.d.ts","./node_modules/mipd/node_modules/viem/_types/types/log.d.ts","./node_modules/mipd/node_modules/viem/_types/types/proof.d.ts","./node_modules/mipd/node_modules/viem/_types/types/rpc.d.ts","./node_modules/mipd/node_modules/viem/_types/types/eip1193.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/transports/createtransport.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/base.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/abi.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/ishex.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/data.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/pad.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/encoding.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/size.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/trim.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/fromhex.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/tohex.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/tobytes.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/keccak256.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/address/isaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/address/getaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/slice.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/address.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/concat.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodeabiparameters.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodeabiparameters.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/normalizesignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/getfunctionsignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/getfunctionselector.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/getabiitem.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodefunctionresult.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/formatabiitem.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodefunctiondata.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/chain.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/chain/getchaincontractaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/encodedlabeltolabelhash.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/namehash.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/encodelabelhash.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/labelhash.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/packettobytes.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/request.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/rpc.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/promise/createbatchscheduler.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/promise/withretry.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/promise/withtimeout.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/rpc.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/buildrequest.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/transaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/gettransactiontype.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/cursor.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/cursor.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/torlp.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/node.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/asserttransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/serializeaccesslist.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/serializetransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/sign.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/signtransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/chain/assertcurrentchain.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/errors/gettransactionerror.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/formatter.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/transactionrequest.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/assertrequest.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getchainid.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/estimategas.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/errors/getestimategaserror.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/estimategas.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/block.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/block.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getblock.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/gettransactioncount.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/account.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/preparetransactionrequest.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/sendrawtransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/sendtransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/errors/getnodeerror.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/errors/getcallerror.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/call.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodeerrorresult.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/contract.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/errors/getcontracterror.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/readcontract.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/ens/getensaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/types/ens.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/ens.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/avatar/utils.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ens/avatar/parseavatarrecord.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/ens/getenstext.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/ens/getensavatar.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/ens/getensname.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/ens/getensresolver.d.ts","./node_modules/mipd/node_modules/viem/_types/types/filter.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/createblockfilter.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/log.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/geteventselector.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodeeventtopics.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/createcontracteventfilter.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/createeventfilter.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/creatependingtransactionfilter.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/estimatecontractgas.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/fee.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getgasprice.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/estimatemaxpriorityfeepergas.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getbalance.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getblocknumber.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getblocktransactioncount.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getbytecode.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodeeventlog.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/log.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getlogs.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getcontractevents.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/feehistory.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getfeehistory.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getfilterchanges.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getfilterlogs.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/proof.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getproof.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/getstorageat.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/gettransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/transactionreceipt.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/gettransactionconfirmations.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/gettransactionreceipt.d.ts","./node_modules/mipd/node_modules/viem/_types/types/multicall.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/multicall.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/writecontract.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/simulatecontract.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/uninstallfilter.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/hashmessage.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodedeploydata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/isbytesequal.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/verifyhash.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/verifymessage.d.ts","./node_modules/mipd/node_modules/viem/_types/types/typeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/typeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/hashtypeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/verifytypeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/observe.d.ts","./node_modules/mipd/node_modules/viem/_types/types/transport.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/poll.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/watchblocknumber.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/waitfortransactionreceipt.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/stringify.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/watchblocks.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/watchcontractevent.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/watchevent.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/watchpendingtransactions.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/decorators/public.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/addchain.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/deploycontract.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/getaddresses.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/getpermissions.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/requestaddresses.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/requestpermissions.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/signaturetohex.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/signmessage.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/signmessage.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/signtransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/signtypeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/signtypeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/switchchain.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/wallet/watchasset.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/decorators/wallet.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/createclient.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/public/estimatefeespergas.d.ts","./node_modules/mipd/node_modules/viem/_types/types/chain.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/transaction.d.ts","./node_modules/mipd/node_modules/viem/_types/types/transaction.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/types.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/getcontract.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/dumpstate.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/getautomine.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/gettxpoolcontent.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/gettxpoolstatus.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/impersonateaccount.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/increasetime.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/inspecttxpool.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/loadstate.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/mine.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/reset.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/revert.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/sendunsignedtransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setbalance.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setblockgaslimit.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setblocktimestampinterval.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setcode.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setcoinbase.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setintervalmining.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setmingasprice.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setnextblockbasefeepergas.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setnextblocktimestamp.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setnonce.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/setstorageat.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/stopimpersonatingaccount.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/decorators/test.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/createtestclient.d.ts","./node_modules/mipd/node_modules/viem/_types/actions/test/droptransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/transports/custom.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/transports/fallback.d.ts","./node_modules/mipd/node_modules/viem/_types/errors/transport.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/transports/http.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/createpublicclient.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/createwalletclient.d.ts","./node_modules/mipd/node_modules/viem/_types/clients/transports/websocket.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/abis.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/address.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/unit.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/number.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/bytes.d.ts","./node_modules/mipd/node_modules/viem/_types/constants/strings.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodedeploydata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/decodefunctiondata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodeerrorresult.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodefunctionresult.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/data/isbytes.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/address/getcontractaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/getserializedtransactiontype.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/compactsignaturetosignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/hextocompactsignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/hextosignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/recoveraddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/recovermessageaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/recoverpublickey.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/recovertypeddataaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/ccip.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/chain/definechain.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/chain/extractchain.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/regex.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/encodepacked.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/abi/formatabiitemwithargs.d.ts","./node_modules/mipd/node_modules/viem/_types/accounts/utils/publickeytoaddress.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/address/isaddressequal.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/contract/extractfunctionparts.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/formatters/extract.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/frombytes.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/encoding/fromrlp.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/ishash.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/sha256.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/ripemd160.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/verifymessage.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/verifytypeddata.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/transaction/parsetransaction.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/formatunits.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/formatether.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/formatgwei.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/parseunits.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/parseether.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/unit/parsegwei.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/index.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/signaturetocompactsignature.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/signature/compactsignaturetohex.d.ts","./node_modules/mipd/node_modules/viem/_types/utils/hash/geteventsignature.d.ts","./node_modules/mipd/node_modules/viem/_types/index.d.ts","./node_modules/mipd/dist/types/register.d.ts","./node_modules/mipd/dist/types/types.d.ts","./node_modules/mipd/dist/types/store.d.ts","./node_modules/mipd/dist/types/utils.d.ts","./node_modules/mipd/dist/types/index.d.ts","./node_modules/zustand/vanilla.d.ts","./node_modules/@wagmi/core/dist/types/createemitter.d.ts","./node_modules/@wagmi/core/dist/types/types/utils.d.ts","./node_modules/@wagmi/core/dist/types/createstorage.d.ts","./node_modules/@wagmi/core/dist/types/connectors/createconnector.d.ts","./node_modules/@wagmi/core/dist/types/createconfig.d.ts","./node_modules/@wagmi/core/dist/types/types/properties.d.ts","./node_modules/@wagmi/core/dist/types/actions/call.d.ts","./node_modules/@wagmi/core/dist/types/errors/base.d.ts","./node_modules/@wagmi/core/dist/types/errors/config.d.ts","./node_modules/@wagmi/core/dist/types/actions/connect.d.ts","./node_modules/@wagmi/core/dist/types/actions/disconnect.d.ts","./node_modules/viem/_types/actions/index.d.ts","./node_modules/@wagmi/core/dist/types/types/chain.d.ts","./node_modules/@wagmi/core/dist/types/actions/getconnectorclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/estimategas.d.ts","./node_modules/@wagmi/core/dist/types/types/unit.d.ts","./node_modules/@wagmi/core/dist/types/actions/estimatefeespergas.d.ts","./node_modules/@wagmi/core/dist/types/actions/estimatemaxpriorityfeepergas.d.ts","./node_modules/@wagmi/core/dist/types/actions/getaccount.d.ts","./node_modules/@wagmi/core/dist/types/actions/getbalance.d.ts","./node_modules/@wagmi/core/dist/types/actions/getblock.d.ts","./node_modules/@wagmi/core/dist/types/actions/getblocknumber.d.ts","./node_modules/@wagmi/core/dist/types/actions/getblocktransactioncount.d.ts","./node_modules/@wagmi/core/dist/types/actions/getbytecode.d.ts","./node_modules/@wagmi/core/dist/types/actions/getchainid.d.ts","./node_modules/@wagmi/core/dist/types/actions/getchains.d.ts","./node_modules/@wagmi/core/dist/types/actions/getclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/getconnections.d.ts","./node_modules/@wagmi/core/dist/types/actions/getconnectors.d.ts","./node_modules/@wagmi/core/dist/types/actions/getensaddress.d.ts","./node_modules/@wagmi/core/dist/types/actions/getensavatar.d.ts","./node_modules/@wagmi/core/dist/types/actions/getensname.d.ts","./node_modules/@wagmi/core/dist/types/actions/getensresolver.d.ts","./node_modules/@wagmi/core/dist/types/actions/getenstext.d.ts","./node_modules/@wagmi/core/dist/types/actions/getfeehistory.d.ts","./node_modules/@wagmi/core/dist/types/actions/getgasprice.d.ts","./node_modules/@wagmi/core/dist/types/actions/getproof.d.ts","./node_modules/@wagmi/core/dist/types/actions/getpublicclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/getstorageat.d.ts","./node_modules/@wagmi/core/dist/types/actions/multicall.d.ts","./node_modules/@wagmi/core/dist/types/actions/readcontract.d.ts","./node_modules/@wagmi/core/dist/types/actions/readcontracts.d.ts","./node_modules/@wagmi/core/dist/types/actions/gettoken.d.ts","./node_modules/@wagmi/core/dist/types/actions/gettransaction.d.ts","./node_modules/@wagmi/core/dist/types/actions/gettransactionconfirmations.d.ts","./node_modules/@wagmi/core/dist/types/actions/gettransactioncount.d.ts","./node_modules/@wagmi/core/dist/types/actions/gettransactionreceipt.d.ts","./node_modules/@wagmi/core/dist/types/actions/getwalletclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/preparetransactionrequest.d.ts","./node_modules/@wagmi/core/dist/types/actions/reconnect.d.ts","./node_modules/@wagmi/core/dist/types/actions/sendtransaction.d.ts","./node_modules/@wagmi/core/dist/types/actions/signmessage.d.ts","./node_modules/@wagmi/core/dist/types/actions/signtypeddata.d.ts","./node_modules/@wagmi/core/dist/types/actions/simulatecontract.d.ts","./node_modules/@wagmi/core/dist/types/actions/switchaccount.d.ts","./node_modules/@wagmi/core/dist/types/errors/connector.d.ts","./node_modules/@wagmi/core/dist/types/actions/switchchain.d.ts","./node_modules/@wagmi/core/dist/types/actions/verifymessage.d.ts","./node_modules/@wagmi/core/dist/types/actions/verifytypeddata.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchaccount.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchblocks.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchblocknumber.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchchainid.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchconnections.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchconnectors.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchcontractevent.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchpendingtransactions.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchpublicclient.d.ts","./node_modules/@wagmi/core/dist/types/actions/waitfortransactionreceipt.d.ts","./node_modules/@wagmi/core/dist/types/actions/writecontract.d.ts","./node_modules/@wagmi/core/dist/types/connectors/injected.d.ts","./node_modules/@wagmi/core/dist/types/connectors/mock.d.ts","./node_modules/@wagmi/core/dist/types/hydrate.d.ts","./node_modules/@wagmi/core/dist/types/transports/connector.d.ts","./node_modules/@wagmi/core/dist/types/transports/fallback.d.ts","./node_modules/@wagmi/core/dist/types/types/register.d.ts","./node_modules/@wagmi/core/dist/types/utils/cookie.d.ts","./node_modules/@wagmi/core/dist/types/utils/deepequal.d.ts","./node_modules/@wagmi/core/dist/types/utils/deserialize.d.ts","./node_modules/@wagmi/core/dist/types/utils/normalizechainid.d.ts","./node_modules/@wagmi/core/dist/types/utils/serialize.d.ts","./node_modules/@wagmi/core/dist/types/version.d.ts","./node_modules/@wagmi/core/dist/types/exports/index.d.ts","./node_modules/wagmi/dist/types/hydrate.d.ts","./node_modules/wagmi/dist/types/context.d.ts","./node_modules/wagmi/dist/types/errors/base.d.ts","./node_modules/wagmi/dist/types/errors/context.d.ts","./node_modules/@tanstack/query-core/build/modern/removable.d.ts","./node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","./node_modules/@tanstack/query-core/build/modern/types-pcqm32iv.d.ts","./node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","./node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","./node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","./node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","./node_modules/@tanstack/query-core/build/modern/hydration.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/types.d.ts","./node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/usequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","./node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","./node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","./node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","./node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","./node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","./node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","./node_modules/@tanstack/react-query/build/modern/isrestoring.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./node_modules/@wagmi/core/dist/types/actions/watchchains.d.ts","./node_modules/@wagmi/core/dist/types/utils/uid.d.ts","./node_modules/@wagmi/core/dist/types/exports/internal.d.ts","./node_modules/wagmi/dist/types/utils/query.d.ts","./node_modules/wagmi/dist/types/types/properties.d.ts","./node_modules/wagmi/dist/types/hooks/useaccount.d.ts","./node_modules/wagmi/dist/types/hooks/useaccounteffect.d.ts","./node_modules/@wagmi/core/dist/types/query/call.d.ts","./node_modules/@wagmi/core/dist/types/query/types.d.ts","./node_modules/@wagmi/core/dist/types/query/connect.d.ts","./node_modules/@wagmi/core/dist/types/query/disconnect.d.ts","./node_modules/@wagmi/core/dist/types/query/estimatefeespergas.d.ts","./node_modules/@wagmi/core/dist/types/query/estimategas.d.ts","./node_modules/@wagmi/core/dist/types/query/estimatemaxpriorityfeepergas.d.ts","./node_modules/@wagmi/core/dist/types/query/getbalance.d.ts","./node_modules/@wagmi/core/dist/types/query/getblock.d.ts","./node_modules/@wagmi/core/dist/types/query/getblocknumber.d.ts","./node_modules/@wagmi/core/dist/types/query/getblocktransactioncount.d.ts","./node_modules/@wagmi/core/dist/types/query/getbytecode.d.ts","./node_modules/@wagmi/core/dist/types/query/getconnectorclient.d.ts","./node_modules/@wagmi/core/dist/types/query/getensaddress.d.ts","./node_modules/@wagmi/core/dist/types/query/getensavatar.d.ts","./node_modules/@wagmi/core/dist/types/query/getensname.d.ts","./node_modules/@wagmi/core/dist/types/query/getensresolver.d.ts","./node_modules/@wagmi/core/dist/types/query/getenstext.d.ts","./node_modules/@wagmi/core/dist/types/query/getfeehistory.d.ts","./node_modules/@wagmi/core/dist/types/query/getgasprice.d.ts","./node_modules/@wagmi/core/dist/types/query/getproof.d.ts","./node_modules/@wagmi/core/dist/types/query/getstorageat.d.ts","./node_modules/@wagmi/core/dist/types/query/gettoken.d.ts","./node_modules/@wagmi/core/dist/types/query/gettransaction.d.ts","./node_modules/@wagmi/core/dist/types/query/gettransactionconfirmations.d.ts","./node_modules/@wagmi/core/dist/types/query/gettransactioncount.d.ts","./node_modules/@wagmi/core/dist/types/query/gettransactionreceipt.d.ts","./node_modules/@wagmi/core/dist/types/query/getwalletclient.d.ts","./node_modules/@wagmi/core/dist/types/query/infinitereadcontracts.d.ts","./node_modules/@wagmi/core/dist/types/query/preparetransactionrequest.d.ts","./node_modules/@wagmi/core/dist/types/query/readcontract.d.ts","./node_modules/@wagmi/core/dist/types/query/readcontracts.d.ts","./node_modules/@wagmi/core/dist/types/query/reconnect.d.ts","./node_modules/@wagmi/core/dist/types/query/sendtransaction.d.ts","./node_modules/@wagmi/core/dist/types/query/signmessage.d.ts","./node_modules/@wagmi/core/dist/types/query/signtypeddata.d.ts","./node_modules/@wagmi/core/dist/types/query/switchaccount.d.ts","./node_modules/@wagmi/core/dist/types/query/simulatecontract.d.ts","./node_modules/@wagmi/core/dist/types/query/switchchain.d.ts","./node_modules/@wagmi/core/dist/types/query/verifymessage.d.ts","./node_modules/@wagmi/core/dist/types/query/verifytypeddata.d.ts","./node_modules/@wagmi/core/dist/types/query/waitfortransactionreceipt.d.ts","./node_modules/@wagmi/core/dist/types/query/writecontract.d.ts","./node_modules/@wagmi/core/dist/types/query/utils.d.ts","./node_modules/@wagmi/core/dist/types/exports/query.d.ts","./node_modules/wagmi/dist/types/hooks/usebalance.d.ts","./node_modules/wagmi/dist/types/hooks/usewatchblocks.d.ts","./node_modules/wagmi/dist/types/hooks/useblock.d.ts","./node_modules/wagmi/dist/types/hooks/usewatchblocknumber.d.ts","./node_modules/wagmi/dist/types/hooks/useblocknumber.d.ts","./node_modules/wagmi/dist/types/hooks/useblocktransactioncount.d.ts","./node_modules/wagmi/dist/types/hooks/usebytecode.d.ts","./node_modules/wagmi/dist/types/hooks/usecall.d.ts","./node_modules/wagmi/dist/types/hooks/usechainid.d.ts","./node_modules/wagmi/dist/types/hooks/usechains.d.ts","./node_modules/wagmi/dist/types/hooks/useclient.d.ts","./node_modules/wagmi/dist/types/hooks/useconfig.d.ts","./node_modules/wagmi/dist/types/hooks/useconnect.d.ts","./node_modules/wagmi/dist/types/hooks/useconnections.d.ts","./node_modules/wagmi/dist/types/hooks/useconnectors.d.ts","./node_modules/wagmi/dist/types/hooks/useconnectorclient.d.ts","./node_modules/wagmi/dist/types/hooks/usedisconnect.d.ts","./node_modules/wagmi/dist/types/hooks/useensaddress.d.ts","./node_modules/wagmi/dist/types/hooks/useensavatar.d.ts","./node_modules/wagmi/dist/types/hooks/useensname.d.ts","./node_modules/wagmi/dist/types/hooks/useensresolver.d.ts","./node_modules/wagmi/dist/types/hooks/useenstext.d.ts","./node_modules/wagmi/dist/types/hooks/useestimatefeespergas.d.ts","./node_modules/wagmi/dist/types/hooks/useestimategas.d.ts","./node_modules/wagmi/dist/types/hooks/useestimatemaxpriorityfeepergas.d.ts","./node_modules/wagmi/dist/types/hooks/usefeehistory.d.ts","./node_modules/wagmi/dist/types/hooks/usegasprice.d.ts","./node_modules/wagmi/dist/types/exports/query.d.ts","./node_modules/wagmi/dist/types/hooks/useinfinitereadcontracts.d.ts","./node_modules/wagmi/dist/types/hooks/usepreparetransactionrequest.d.ts","./node_modules/wagmi/dist/types/hooks/useproof.d.ts","./node_modules/wagmi/dist/types/hooks/usepublicclient.d.ts","./node_modules/wagmi/dist/types/hooks/usereadcontract.d.ts","./node_modules/wagmi/dist/types/hooks/usereadcontracts.d.ts","./node_modules/wagmi/dist/types/hooks/usereconnect.d.ts","./node_modules/wagmi/dist/types/hooks/usesendtransaction.d.ts","./node_modules/wagmi/dist/types/hooks/usesignmessage.d.ts","./node_modules/wagmi/dist/types/hooks/usesigntypeddata.d.ts","./node_modules/wagmi/dist/types/hooks/usesimulatecontract.d.ts","./node_modules/wagmi/dist/types/hooks/usestorageat.d.ts","./node_modules/wagmi/dist/types/hooks/useswitchaccount.d.ts","./node_modules/wagmi/dist/types/hooks/useswitchchain.d.ts","./node_modules/wagmi/dist/types/hooks/usetoken.d.ts","./node_modules/wagmi/dist/types/hooks/usetransaction.d.ts","./node_modules/wagmi/dist/types/hooks/usetransactionconfirmations.d.ts","./node_modules/wagmi/dist/types/hooks/usetransactioncount.d.ts","./node_modules/wagmi/dist/types/hooks/usetransactionreceipt.d.ts","./node_modules/wagmi/dist/types/hooks/useverifymessage.d.ts","./node_modules/wagmi/dist/types/hooks/useverifytypeddata.d.ts","./node_modules/wagmi/dist/types/hooks/usewalletclient.d.ts","./node_modules/wagmi/dist/types/hooks/usewaitfortransactionreceipt.d.ts","./node_modules/wagmi/dist/types/hooks/usewatchcontractevent.d.ts","./node_modules/wagmi/dist/types/hooks/usewatchpendingtransactions.d.ts","./node_modules/wagmi/dist/types/hooks/usewritecontract.d.ts","./node_modules/wagmi/dist/types/version.d.ts","./node_modules/wagmi/dist/types/exports/index.d.ts","./node_modules/viem/_types/chains/definitions/acala.d.ts","./node_modules/viem/_types/chains/definitions/ancient8.d.ts","./node_modules/viem/_types/chains/definitions/ancient8sepolia.d.ts","./node_modules/viem/_types/chains/definitions/anvil.d.ts","./node_modules/viem/_types/chains/definitions/apextestnet.d.ts","./node_modules/viem/_types/chains/definitions/arbitrum.d.ts","./node_modules/viem/_types/chains/definitions/arbitrumgoerli.d.ts","./node_modules/viem/_types/chains/definitions/arbitrumnova.d.ts","./node_modules/viem/_types/chains/definitions/astar.d.ts","./node_modules/viem/_types/chains/definitions/astarzkevm.d.ts","./node_modules/viem/_types/chains/definitions/astarzkyoto.d.ts","./node_modules/viem/_types/chains/definitions/arbitrumsepolia.d.ts","./node_modules/viem/_types/chains/definitions/areonnetwork.d.ts","./node_modules/viem/_types/chains/definitions/areonnetworktestnet.d.ts","./node_modules/viem/_types/chains/definitions/aurora.d.ts","./node_modules/viem/_types/chains/definitions/auroratestnet.d.ts","./node_modules/viem/_types/chains/definitions/auroria.d.ts","./node_modules/viem/_types/chains/definitions/avalanche.d.ts","./node_modules/viem/_types/chains/definitions/avalanchefuji.d.ts","./node_modules/viem/_types/chains/definitions/bahamut.d.ts","./node_modules/viem/_types/chains/definitions/base.d.ts","./node_modules/viem/_types/chains/definitions/basegoerli.d.ts","./node_modules/viem/_types/chains/definitions/basesepolia.d.ts","./node_modules/viem/_types/chains/definitions/beam.d.ts","./node_modules/viem/_types/chains/definitions/beamtestnet.d.ts","./node_modules/viem/_types/chains/definitions/bearnetworkchainmainnet.d.ts","./node_modules/viem/_types/chains/definitions/bearnetworkchaintestnet.d.ts","./node_modules/viem/_types/chains/definitions/berachaintestnet.d.ts","./node_modules/viem/_types/chains/definitions/bevmmainnet.d.ts","./node_modules/viem/_types/chains/definitions/bittorrent.d.ts","./node_modules/viem/_types/chains/definitions/bittorrenttestnet.d.ts","./node_modules/viem/_types/chains/definitions/blast.d.ts","./node_modules/viem/_types/chains/definitions/blastsepolia.d.ts","./node_modules/viem/_types/chains/definitions/boba.d.ts","./node_modules/viem/_types/chains/definitions/bronos.d.ts","./node_modules/viem/_types/chains/definitions/bronostestnet.d.ts","./node_modules/viem/_types/chains/definitions/bsc.d.ts","./node_modules/viem/_types/chains/definitions/bsctestnet.d.ts","./node_modules/viem/_types/chains/definitions/bscgreenfield.d.ts","./node_modules/viem/_types/chains/definitions/bxn.d.ts","./node_modules/viem/_types/chains/definitions/bxntestnet.d.ts","./node_modules/viem/_types/chains/definitions/canto.d.ts","./node_modules/viem/_types/celo/types.d.ts","./node_modules/viem/_types/celo/serializers.d.ts","./node_modules/viem/_types/chains/definitions/celo.d.ts","./node_modules/viem/_types/chains/definitions/celoalfajores.d.ts","./node_modules/viem/_types/chains/definitions/chiliz.d.ts","./node_modules/viem/_types/chains/definitions/classic.d.ts","./node_modules/viem/_types/chains/definitions/confluxespace.d.ts","./node_modules/viem/_types/chains/definitions/confluxespacetestnet.d.ts","./node_modules/viem/_types/chains/definitions/coredao.d.ts","./node_modules/viem/_types/chains/definitions/cronos.d.ts","./node_modules/viem/_types/chains/definitions/cronostestnet.d.ts","./node_modules/viem/_types/chains/definitions/crossbell.d.ts","./node_modules/viem/_types/chains/definitions/cyber.d.ts","./node_modules/viem/_types/chains/definitions/cybertestnet.d.ts","./node_modules/viem/_types/chains/definitions/darwinia.d.ts","./node_modules/viem/_types/chains/definitions/defichainevm.d.ts","./node_modules/viem/_types/chains/definitions/defichainevmtestnet.d.ts","./node_modules/viem/_types/chains/definitions/degen.d.ts","./node_modules/viem/_types/chains/definitions/dfk.d.ts","./node_modules/viem/_types/chains/definitions/dogechain.d.ts","./node_modules/viem/_types/chains/definitions/dreyerxmainnet.d.ts","./node_modules/viem/_types/chains/definitions/edgeless.d.ts","./node_modules/viem/_types/chains/definitions/edgelesstestnet.d.ts","./node_modules/viem/_types/chains/definitions/edgeware.d.ts","./node_modules/viem/_types/chains/definitions/edgewaretestnet.d.ts","./node_modules/viem/_types/chains/definitions/eon.d.ts","./node_modules/viem/_types/chains/definitions/eos.d.ts","./node_modules/viem/_types/chains/definitions/eostestnet.d.ts","./node_modules/viem/_types/chains/definitions/etherlinktestnet.d.ts","./node_modules/viem/_types/chains/definitions/evmos.d.ts","./node_modules/viem/_types/chains/definitions/evmostestnet.d.ts","./node_modules/viem/_types/chains/definitions/ekta.d.ts","./node_modules/viem/_types/chains/definitions/ektatestnet.d.ts","./node_modules/viem/_types/chains/definitions/fantom.d.ts","./node_modules/viem/_types/chains/definitions/fantomsonictestnet.d.ts","./node_modules/viem/_types/chains/definitions/fantomtestnet.d.ts","./node_modules/viem/_types/chains/definitions/fibo.d.ts","./node_modules/viem/_types/chains/definitions/filecoin.d.ts","./node_modules/viem/_types/chains/definitions/filecoincalibration.d.ts","./node_modules/viem/_types/chains/definitions/filecoinhyperspace.d.ts","./node_modules/viem/_types/chains/definitions/flare.d.ts","./node_modules/viem/_types/chains/definitions/flaretestnet.d.ts","./node_modules/viem/_types/chains/definitions/flowpreviewnet.d.ts","./node_modules/viem/_types/chains/definitions/flowmainnet.d.ts","./node_modules/viem/_types/chains/definitions/flowtestnet.d.ts","./node_modules/viem/_types/chains/definitions/foundry.d.ts","./node_modules/viem/_types/chains/definitions/fraxtal.d.ts","./node_modules/viem/_types/chains/definitions/fraxtaltestnet.d.ts","./node_modules/viem/_types/chains/definitions/fuse.d.ts","./node_modules/viem/_types/chains/definitions/fusesparknet.d.ts","./node_modules/viem/_types/chains/definitions/iotex.d.ts","./node_modules/viem/_types/chains/definitions/iotextestnet.d.ts","./node_modules/viem/_types/chains/definitions/jbc.d.ts","./node_modules/viem/_types/chains/definitions/karura.d.ts","./node_modules/viem/_types/chains/definitions/gobi.d.ts","./node_modules/viem/_types/chains/definitions/goerli.d.ts","./node_modules/viem/_types/chains/definitions/gnosis.d.ts","./node_modules/viem/_types/chains/definitions/gnosischiado.d.ts","./node_modules/viem/_types/chains/definitions/hardhat.d.ts","./node_modules/viem/_types/chains/definitions/harmonyone.d.ts","./node_modules/viem/_types/chains/definitions/haqqmainnet.d.ts","./node_modules/viem/_types/chains/definitions/haqqtestedge2.d.ts","./node_modules/viem/_types/chains/definitions/hedera.d.ts","./node_modules/viem/_types/chains/definitions/hederatestnet.d.ts","./node_modules/viem/_types/chains/definitions/hederapreviewnet.d.ts","./node_modules/viem/_types/chains/definitions/holesky.d.ts","./node_modules/viem/_types/chains/definitions/immutablezkevm.d.ts","./node_modules/viem/_types/chains/definitions/immutablezkevmtestnet.d.ts","./node_modules/viem/_types/chains/definitions/kakarotsepolia.d.ts","./node_modules/viem/_types/chains/definitions/kava.d.ts","./node_modules/viem/_types/chains/definitions/kavatestnet.d.ts","./node_modules/viem/_types/chains/definitions/kcc.d.ts","./node_modules/viem/_types/chains/definitions/klaytn.d.ts","./node_modules/viem/_types/chains/definitions/klaytnbaobab.d.ts","./node_modules/viem/_types/chains/definitions/kroma.d.ts","./node_modules/viem/_types/chains/definitions/kromasepolia.d.ts","./node_modules/viem/_types/chains/definitions/lightlinkpegasus.d.ts","./node_modules/viem/_types/chains/definitions/lightlinkphoenix.d.ts","./node_modules/viem/_types/chains/definitions/linea.d.ts","./node_modules/viem/_types/chains/definitions/lineagoerli.d.ts","./node_modules/viem/_types/chains/definitions/lineasepolia.d.ts","./node_modules/viem/_types/chains/definitions/lineatestnet.d.ts","./node_modules/viem/_types/chains/definitions/lisksepolia.d.ts","./node_modules/viem/_types/chains/definitions/localhost.d.ts","./node_modules/viem/_types/chains/definitions/lukso.d.ts","./node_modules/viem/_types/chains/definitions/luksotestnet.d.ts","./node_modules/viem/_types/chains/definitions/mainnet.d.ts","./node_modules/viem/_types/chains/definitions/mandala.d.ts","./node_modules/viem/_types/chains/definitions/manta.d.ts","./node_modules/viem/_types/chains/definitions/mantasepoliatestnet.d.ts","./node_modules/viem/_types/chains/definitions/mantatestnet.d.ts","./node_modules/viem/_types/chains/definitions/mantle.d.ts","./node_modules/viem/_types/chains/definitions/mantlesepoliatestnet.d.ts","./node_modules/viem/_types/chains/definitions/mantletestnet.d.ts","./node_modules/viem/_types/chains/definitions/merlin.d.ts","./node_modules/viem/_types/chains/definitions/metachain.d.ts","./node_modules/viem/_types/chains/definitions/metachainistanbul.d.ts","./node_modules/viem/_types/chains/definitions/meter.d.ts","./node_modules/viem/_types/chains/definitions/metertestnet.d.ts","./node_modules/viem/_types/chains/definitions/metis.d.ts","./node_modules/viem/_types/chains/definitions/metisgoerli.d.ts","./node_modules/viem/_types/chains/definitions/mev.d.ts","./node_modules/viem/_types/chains/definitions/mevtestnet.d.ts","./node_modules/viem/_types/chains/definitions/mintsepoliatestnet.d.ts","./node_modules/viem/_types/chains/definitions/mode.d.ts","./node_modules/viem/_types/chains/definitions/modetestnet.d.ts","./node_modules/viem/_types/chains/definitions/moonbasealpha.d.ts","./node_modules/viem/_types/chains/definitions/moonbeam.d.ts","./node_modules/viem/_types/chains/definitions/moonbeamdev.d.ts","./node_modules/viem/_types/chains/definitions/moonriver.d.ts","./node_modules/viem/_types/chains/definitions/morphsepolia.d.ts","./node_modules/viem/_types/chains/definitions/neondevnet.d.ts","./node_modules/viem/_types/chains/definitions/neonmainnet.d.ts","./node_modules/viem/_types/chains/definitions/nexi.d.ts","./node_modules/viem/_types/chains/definitions/nexilix.d.ts","./node_modules/viem/_types/chains/definitions/oasys.d.ts","./node_modules/viem/_types/chains/definitions/oasistestnet.d.ts","./node_modules/viem/_types/chains/definitions/okc.d.ts","./node_modules/viem/_types/chains/definitions/optimism.d.ts","./node_modules/viem/_types/chains/definitions/optimismgoerli.d.ts","./node_modules/viem/_types/chains/definitions/optimismsepolia.d.ts","./node_modules/viem/_types/chains/definitions/opbnb.d.ts","./node_modules/viem/_types/chains/definitions/opbnbtestnet.d.ts","./node_modules/viem/_types/chains/definitions/oortmainnetdev.d.ts","./node_modules/viem/_types/chains/definitions/palm.d.ts","./node_modules/viem/_types/chains/definitions/palmtestnet.d.ts","./node_modules/viem/_types/zksync/types/fee.d.ts","./node_modules/viem/_types/zksync/types/log.d.ts","./node_modules/viem/_types/zksync/types/transaction.d.ts","./node_modules/viem/_types/zksync/types/eip712.d.ts","./node_modules/viem/_types/zksync/types/chain.d.ts","./node_modules/viem/_types/zksync/actions/sendtransaction.d.ts","./node_modules/viem/_types/zksync/actions/sendeip712transaction.d.ts","./node_modules/viem/_types/zksync/actions/signeip712transaction.d.ts","./node_modules/viem/_types/zksync/actions/signtransaction.d.ts","./node_modules/viem/_types/zksync/types/contract.d.ts","./node_modules/viem/_types/zksync/actions/deploycontract.d.ts","./node_modules/viem/_types/zksync/serializers.d.ts","./node_modules/viem/_types/chains/definitions/zksync.d.ts","./node_modules/viem/_types/chains/definitions/zksynctestnet.d.ts","./node_modules/viem/_types/chains/definitions/zksyncsepoliatestnet.d.ts","./node_modules/viem/_types/zksync/chains.d.ts","./node_modules/viem/_types/zksync/chainconfig.d.ts","./node_modules/viem/_types/zksync/decorators/eip712.d.ts","./node_modules/viem/_types/zksync/types/block.d.ts","./node_modules/viem/_types/zksync/index.d.ts","./node_modules/viem/_types/chains/definitions/playfialbireo.d.ts","./node_modules/viem/_types/chains/definitions/pgn.d.ts","./node_modules/viem/_types/chains/definitions/pgntestnet.d.ts","./node_modules/viem/_types/chains/definitions/phoenix.d.ts","./node_modules/viem/_types/chains/definitions/plinga.d.ts","./node_modules/viem/_types/chains/definitions/plumetestnet.d.ts","./node_modules/viem/_types/chains/definitions/polygon.d.ts","./node_modules/viem/_types/chains/definitions/polygonamoy.d.ts","./node_modules/viem/_types/chains/definitions/polygonmumbai.d.ts","./node_modules/viem/_types/chains/definitions/polygonzkevm.d.ts","./node_modules/viem/_types/chains/definitions/polygonzkevmcardona.d.ts","./node_modules/viem/_types/chains/definitions/polygonzkevmtestnet.d.ts","./node_modules/viem/_types/chains/definitions/pulsechain.d.ts","./node_modules/viem/_types/chains/definitions/pulsechainv4.d.ts","./node_modules/viem/_types/chains/definitions/qmainnet.d.ts","./node_modules/viem/_types/chains/definitions/qtestnet.d.ts","./node_modules/viem/_types/chains/definitions/reyanetwork.d.ts","./node_modules/viem/_types/chains/definitions/rollux.d.ts","./node_modules/viem/_types/chains/definitions/rolluxtestnet.d.ts","./node_modules/viem/_types/chains/definitions/ronin.d.ts","./node_modules/viem/_types/chains/definitions/rootstock.d.ts","./node_modules/viem/_types/chains/definitions/rss3.d.ts","./node_modules/viem/_types/chains/definitions/rss3sepolia.d.ts","./node_modules/viem/_types/chains/definitions/saigon.d.ts","./node_modules/viem/_types/chains/definitions/sapphire.d.ts","./node_modules/viem/_types/chains/definitions/sapphiretestnet.d.ts","./node_modules/viem/_types/chains/definitions/scroll.d.ts","./node_modules/viem/_types/chains/definitions/scrollsepolia.d.ts","./node_modules/viem/_types/chains/definitions/scrolltestnet.d.ts","./node_modules/viem/_types/chains/definitions/seidevnet.d.ts","./node_modules/viem/_types/chains/definitions/sepolia.d.ts","./node_modules/viem/_types/chains/definitions/shimmer.d.ts","./node_modules/viem/_types/chains/definitions/shimmertestnet.d.ts","./node_modules/viem/_types/chains/definitions/skale/brawl.d.ts","./node_modules/viem/_types/chains/definitions/skale/calypso.d.ts","./node_modules/viem/_types/chains/definitions/skale/calypsotestnet.d.ts","./node_modules/viem/_types/chains/definitions/skale/cryptoblades.d.ts","./node_modules/viem/_types/chains/definitions/skale/cryptocolosseum.d.ts","./node_modules/viem/_types/chains/definitions/skale/europa.d.ts","./node_modules/viem/_types/chains/definitions/skale/europatestnet.d.ts","./node_modules/viem/_types/chains/definitions/skale/exorde.d.ts","./node_modules/viem/_types/chains/definitions/skale/humanprotocol.d.ts","./node_modules/viem/_types/chains/definitions/skale/nebula.d.ts","./node_modules/viem/_types/chains/definitions/skale/nebulatestnet.d.ts","./node_modules/viem/_types/chains/definitions/skale/razor.d.ts","./node_modules/viem/_types/chains/definitions/skale/titan.d.ts","./node_modules/viem/_types/chains/definitions/skale/titantestnet.d.ts","./node_modules/viem/_types/chains/definitions/songbird.d.ts","./node_modules/viem/_types/chains/definitions/songbirdtestnet.d.ts","./node_modules/viem/_types/chains/definitions/spicy.d.ts","./node_modules/viem/_types/chains/definitions/shardeumsphinx.d.ts","./node_modules/viem/_types/chains/definitions/shibarium.d.ts","./node_modules/viem/_types/chains/definitions/stratis.d.ts","./node_modules/viem/_types/chains/definitions/syscoin.d.ts","./node_modules/viem/_types/chains/definitions/syscointestnet.d.ts","./node_modules/viem/_types/chains/definitions/taraxa.d.ts","./node_modules/viem/_types/chains/definitions/taikohekla.d.ts","./node_modules/viem/_types/chains/definitions/taikojolnir.d.ts","./node_modules/viem/_types/chains/definitions/taikokatla.d.ts","./node_modules/viem/_types/chains/definitions/taikotestnetsepolia.d.ts","./node_modules/viem/_types/chains/definitions/taraxatestnet.d.ts","./node_modules/viem/_types/chains/definitions/telos.d.ts","./node_modules/viem/_types/chains/definitions/telostestnet.d.ts","./node_modules/viem/_types/chains/definitions/tenet.d.ts","./node_modules/viem/_types/chains/definitions/thundertestnet.d.ts","./node_modules/viem/_types/chains/definitions/vechain.d.ts","./node_modules/viem/_types/chains/definitions/wanchain.d.ts","./node_modules/viem/_types/chains/definitions/wanchaintestnet.d.ts","./node_modules/viem/_types/chains/definitions/wemix.d.ts","./node_modules/viem/_types/chains/definitions/wemixtestnet.d.ts","./node_modules/viem/_types/chains/definitions/xlayertestnet.d.ts","./node_modules/viem/_types/chains/definitions/xlayer.d.ts","./node_modules/viem/_types/chains/definitions/xdc.d.ts","./node_modules/viem/_types/chains/definitions/xdctestnet.d.ts","./node_modules/viem/_types/chains/definitions/yooldoverse.d.ts","./node_modules/viem/_types/chains/definitions/yooldoversetestnet.d.ts","./node_modules/viem/_types/chains/definitions/zetachain.d.ts","./node_modules/viem/_types/chains/definitions/zetachainathenstestnet.d.ts","./node_modules/viem/_types/chains/definitions/zhejiang.d.ts","./node_modules/viem/_types/chains/definitions/zilliqa.d.ts","./node_modules/viem/_types/chains/definitions/zilliqatestnet.d.ts","./node_modules/viem/_types/chains/definitions/zkfair.d.ts","./node_modules/viem/_types/chains/definitions/zkfairtestnet.d.ts","./node_modules/viem/_types/chains/definitions/zksyncinmemorynode.d.ts","./node_modules/viem/_types/chains/definitions/zksynclocalnode.d.ts","./node_modules/viem/_types/chains/definitions/zora.d.ts","./node_modules/viem/_types/chains/definitions/zorasepolia.d.ts","./node_modules/viem/_types/chains/definitions/zoratestnet.d.ts","./node_modules/viem/_types/op-stack/types/transaction.d.ts","./node_modules/viem/_types/op-stack/types/block.d.ts","./node_modules/viem/_types/op-stack/serializers.d.ts","./node_modules/viem/_types/chains/index.d.ts","./node_modules/wagmi/dist/types/exports/chains.d.ts","./node_modules/@coinbase/wallet-sdk/dist/assets/wallet-logo.d.ts","./node_modules/eventemitter3/index.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/type.d.ts","./node_modules/@coinbase/wallet-sdk/dist/lib/scopedlocalstorage.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/error/constants.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/error/errors.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/error/utils.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/error/serialize.d.ts","./node_modules/@coinbase/wallet-sdk/dist/core/error/index.d.ts","./node_modules/@coinbase/wallet-sdk/dist/provider/jsonrpc.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/session.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/ethereumtransactionparams.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/web3method.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/web3request.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/web3response.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/relayabstract.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/relayeventmanager.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/servermessage.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/connection/walletlinkwebsocket.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/walletlink/type/walletlinkeventdata.d.ts","./node_modules/@coinbase/wallet-sdk/dist/provider/diagnosticlogger.d.ts","./node_modules/@coinbase/wallet-sdk/dist/provider/web3provider.d.ts","./node_modules/@coinbase/wallet-sdk/dist/provider/coinbasewalletprovider.d.ts","./node_modules/@coinbase/wallet-sdk/dist/relay/relayui.d.ts","./node_modules/@coinbase/wallet-sdk/dist/coinbasewalletsdk.d.ts","./node_modules/@coinbase/wallet-sdk/dist/index.d.ts","./node_modules/@wagmi/connectors/dist/types/coinbasewallet.d.ts","./node_modules/superstruct/dist/error.d.ts","./node_modules/superstruct/dist/utils.d.ts","./node_modules/superstruct/dist/struct.d.ts","./node_modules/superstruct/dist/structs/coercions.d.ts","./node_modules/superstruct/dist/structs/refinements.d.ts","./node_modules/superstruct/dist/structs/types.d.ts","./node_modules/superstruct/dist/structs/utilities.d.ts","./node_modules/superstruct/dist/index.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/assert.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/base64.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/hex.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/bytes.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/caip-types.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/checksum.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/coercers.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/collections.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/encryption-types.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/errors.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/json.d.ts","./node_modules/@ethereumjs/common/dist/enums.d.ts","./node_modules/@ethereumjs/common/dist/types.d.ts","./node_modules/@ethereumjs/util/dist/constants.d.ts","./node_modules/@ethereumjs/util/dist/units.d.ts","./node_modules/@ethereumjs/util/dist/address.d.ts","./node_modules/@ethereumjs/util/dist/bytes.d.ts","./node_modules/@ethereumjs/util/dist/types.d.ts","./node_modules/@ethereumjs/util/dist/account.d.ts","./node_modules/@ethereumjs/util/dist/withdrawal.d.ts","./node_modules/@ethereumjs/util/dist/signature.d.ts","./node_modules/@ethereumjs/util/dist/encoding.d.ts","./node_modules/@ethereumjs/util/dist/asynceventemitter.d.ts","./node_modules/@ethereumjs/util/dist/internal.d.ts","./node_modules/@ethereumjs/util/dist/lock.d.ts","./node_modules/@ethereumjs/util/dist/provider.d.ts","./node_modules/@ethereumjs/util/dist/index.d.ts","./node_modules/@ethereumjs/common/dist/common.d.ts","./node_modules/@ethereumjs/common/dist/utils.d.ts","./node_modules/@ethereumjs/common/dist/index.d.ts","./node_modules/@ethereumjs/tx/dist/eip2930transaction.d.ts","./node_modules/@ethereumjs/tx/dist/legacytransaction.d.ts","./node_modules/@ethereumjs/tx/dist/types.d.ts","./node_modules/@ethereumjs/tx/dist/basetransaction.d.ts","./node_modules/@ethereumjs/tx/dist/eip1559transaction.d.ts","./node_modules/@ethereumjs/tx/dist/transactionfactory.d.ts","./node_modules/@ethereumjs/tx/dist/index.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/keyring.d.ts","./node_modules/@types/ms/index.d.ts","./node_modules/@types/debug/index.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/logging.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/misc.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/number.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/opaque.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/promise.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/time.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/transaction-types.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/versions.d.ts","./node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils/dist/types/index.d.ts","./node_modules/@metamask/safe-event-emitter/dist/esm/index.d.ts","./node_modules/@metamask/json-rpc-engine/dist/jsonrpcengine.d.ts","./node_modules/@metamask/json-rpc-engine/dist/createasyncmiddleware.d.ts","./node_modules/@metamask/json-rpc-engine/dist/createscaffoldmiddleware.d.ts","./node_modules/@metamask/json-rpc-engine/dist/getuniqueid.d.ts","./node_modules/@metamask/json-rpc-engine/dist/idremapmiddleware.d.ts","./node_modules/@metamask/json-rpc-engine/dist/mergemiddleware.d.ts","./node_modules/@metamask/json-rpc-engine/dist/index.d.ts","./node_modules/@metamask/providers/node_modules/@metamask/utils/dist/types/index.d.ts","./node_modules/@metamask/providers/dist/types/utils.d.ts","./node_modules/@metamask/providers/dist/types/baseprovider.d.ts","./node_modules/@metamask/providers/dist/types/eip6963.d.ts","./node_modules/@metamask/providers/dist/types/streamprovider.d.ts","./node_modules/@metamask/providers/dist/types/extension-provider/createexternalextensionprovider.d.ts","./node_modules/@metamask/providers/dist/types/metamaskinpageprovider.d.ts","./node_modules/@metamask/providers/dist/types/initializeinpageprovider.d.ts","./node_modules/@metamask/providers/dist/types/shimweb3.d.ts","./node_modules/@metamask/providers/dist/types/index.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/communicationlayerpreference.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/originatorinfo.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/trackingevent.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/analytics.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/ecies.d.ts","./node_modules/eventemitter2/eventemitter2.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/autoconnectoptions.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/channelconfig.d.ts","./node_modules/@socket.io/component-emitter/lib/esm/index.d.ts","./node_modules/engine.io-parser/build/esm/commons.d.ts","./node_modules/engine.io-parser/build/esm/encodepacket.d.ts","./node_modules/engine.io-parser/build/esm/decodepacket.d.ts","./node_modules/engine.io-parser/build/esm/index.d.ts","./node_modules/engine.io-client/build/esm/transport.d.ts","./node_modules/engine.io-client/build/esm/socket.d.ts","./node_modules/engine.io-client/build/esm/transports/polling.d.ts","./node_modules/engine.io-client/build/esm/transports/websocket.d.ts","./node_modules/engine.io-client/build/esm/transports/webtransport.d.ts","./node_modules/engine.io-client/build/esm/transports/index.d.ts","./node_modules/engine.io-client/build/esm/util.d.ts","./node_modules/engine.io-client/build/esm/contrib/parseuri.d.ts","./node_modules/engine.io-client/build/esm/transports/websocket-constructor.d.ts","./node_modules/engine.io-client/build/esm/index.d.ts","./node_modules/socket.io-parser/build/esm/index.d.ts","./node_modules/socket.io-client/build/esm/socket.d.ts","./node_modules/socket.io-client/build/esm/manager.d.ts","./node_modules/socket.io-client/build/esm/index.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/keyexchangemessagetype.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/messagetype.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/walletinfo.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/communicationlayermessage.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/keyinfo.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/loggingoptions.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/keyexchange.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/channel.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/connecttochanneloptions.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/disconnectoptions.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/socketservice.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/communicationlayer.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/connectionstatus.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/dappmetadata.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/platformtype.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/servicestatus.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/storagemanager.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/remotecommunication.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/config.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/autoconnecttype.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/types/eventtype.d.ts","./node_modules/@metamask/sdk-communication-layer/dist/browser/es/src/index.d.ts","./node_modules/react-native/types/modules/batchedbridge.d.ts","./node_modules/react-native/types/modules/codegen.d.ts","./node_modules/react-native/types/modules/devtools.d.ts","./node_modules/react-native/types/modules/globals.d.ts","./node_modules/react-native/types/modules/launchscreen.d.ts","./node_modules/react-native/types/private/utilities.d.ts","./node_modules/react-native/types/public/insets.d.ts","./node_modules/react-native/types/public/reactnativetypes.d.ts","./node_modules/react-native/libraries/types/coreeventtypes.d.ts","./node_modules/react-native/types/public/reactnativerenderer.d.ts","./node_modules/react-native/libraries/components/touchable/touchable.d.ts","./node_modules/react-native/libraries/components/view/viewaccessibility.d.ts","./node_modules/react-native/libraries/components/view/viewproptypes.d.ts","./node_modules/react-native/libraries/components/refreshcontrol/refreshcontrol.d.ts","./node_modules/react-native/libraries/components/scrollview/scrollview.d.ts","./node_modules/react-native/libraries/components/view/view.d.ts","./node_modules/react-native/libraries/image/imageresizemode.d.ts","./node_modules/react-native/libraries/image/imagesource.d.ts","./node_modules/react-native/libraries/image/image.d.ts","./node_modules/@react-native/virtualized-lists/lists/virtualizedlist.d.ts","./node_modules/@react-native/virtualized-lists/index.d.ts","./node_modules/react-native/libraries/lists/flatlist.d.ts","./node_modules/react-native/libraries/reactnative/rendererproxy.d.ts","./node_modules/react-native/libraries/lists/sectionlist.d.ts","./node_modules/react-native/libraries/text/text.d.ts","./node_modules/react-native/libraries/animated/animated.d.ts","./node_modules/react-native/libraries/stylesheet/stylesheettypes.d.ts","./node_modules/react-native/libraries/stylesheet/stylesheet.d.ts","./node_modules/react-native/libraries/stylesheet/processcolor.d.ts","./node_modules/react-native/libraries/actionsheetios/actionsheetios.d.ts","./node_modules/react-native/libraries/alert/alert.d.ts","./node_modules/react-native/libraries/animated/easing.d.ts","./node_modules/react-native/libraries/animated/useanimatedvalue.d.ts","./node_modules/react-native/libraries/vendor/emitter/eventemitter.d.ts","./node_modules/react-native/libraries/eventemitter/rctdeviceeventemitter.d.ts","./node_modules/react-native/libraries/eventemitter/rctnativeappeventemitter.d.ts","./node_modules/react-native/libraries/appstate/appstate.d.ts","./node_modules/react-native/libraries/batchedbridge/nativemodules.d.ts","./node_modules/react-native/libraries/components/accessibilityinfo/accessibilityinfo.d.ts","./node_modules/react-native/libraries/components/activityindicator/activityindicator.d.ts","./node_modules/react-native/libraries/components/clipboard/clipboard.d.ts","./node_modules/react-native/libraries/components/drawerandroid/drawerlayoutandroid.d.ts","./node_modules/react-native/libraries/eventemitter/nativeeventemitter.d.ts","./node_modules/react-native/libraries/components/keyboard/keyboard.d.ts","./node_modules/react-native/types/private/timermixin.d.ts","./node_modules/react-native/libraries/components/keyboard/keyboardavoidingview.d.ts","./node_modules/react-native/libraries/components/pressable/pressable.d.ts","./node_modules/react-native/libraries/components/progressbarandroid/progressbarandroid.d.ts","./node_modules/react-native/libraries/components/safeareaview/safeareaview.d.ts","./node_modules/react-native/libraries/components/statusbar/statusbar.d.ts","./node_modules/react-native/libraries/components/switch/switch.d.ts","./node_modules/react-native/libraries/components/textinput/inputaccessoryview.d.ts","./node_modules/react-native/libraries/components/textinput/textinput.d.ts","./node_modules/react-native/libraries/components/toastandroid/toastandroid.d.ts","./node_modules/react-native/libraries/components/touchable/touchablewithoutfeedback.d.ts","./node_modules/react-native/libraries/components/touchable/touchablehighlight.d.ts","./node_modules/react-native/libraries/components/touchable/touchableopacity.d.ts","./node_modules/react-native/libraries/components/touchable/touchablenativefeedback.d.ts","./node_modules/react-native/libraries/components/button.d.ts","./node_modules/react-native/libraries/core/registercallablemodule.d.ts","./node_modules/react-native/libraries/devtoolssettings/devtoolssettingsmanager.d.ts","./node_modules/react-native/libraries/interaction/interactionmanager.d.ts","./node_modules/react-native/libraries/interaction/panresponder.d.ts","./node_modules/react-native/libraries/layoutanimation/layoutanimation.d.ts","./node_modules/react-native/libraries/linking/linking.d.ts","./node_modules/react-native/libraries/logbox/logbox.d.ts","./node_modules/react-native/libraries/modal/modal.d.ts","./node_modules/react-native/libraries/performance/systrace.d.ts","./node_modules/react-native/libraries/permissionsandroid/permissionsandroid.d.ts","./node_modules/react-native/libraries/pushnotificationios/pushnotificationios.d.ts","./node_modules/react-native/libraries/utilities/iperformancelogger.d.ts","./node_modules/react-native/libraries/reactnative/appregistry.d.ts","./node_modules/react-native/libraries/reactnative/i18nmanager.d.ts","./node_modules/react-native/libraries/reactnative/roottag.d.ts","./node_modules/react-native/libraries/reactnative/uimanager.d.ts","./node_modules/react-native/libraries/reactnative/requirenativecomponent.d.ts","./node_modules/react-native/libraries/settings/settings.d.ts","./node_modules/react-native/libraries/share/share.d.ts","./node_modules/react-native/libraries/stylesheet/platformcolorvaluetypesios.d.ts","./node_modules/react-native/libraries/stylesheet/platformcolorvaluetypes.d.ts","./node_modules/react-native/libraries/turbomodule/rctexport.d.ts","./node_modules/react-native/libraries/turbomodule/turbomoduleregistry.d.ts","./node_modules/react-native/libraries/utilities/appearance.d.ts","./node_modules/react-native/libraries/utilities/backhandler.d.ts","./node_modules/react-native/libraries/utilities/devsettings.d.ts","./node_modules/react-native/libraries/utilities/dimensions.d.ts","./node_modules/react-native/libraries/utilities/pixelratio.d.ts","./node_modules/react-native/libraries/utilities/platform.d.ts","./node_modules/react-native/libraries/vibration/vibration.d.ts","./node_modules/react-native/libraries/yellowbox/yellowboxdeprecated.d.ts","./node_modules/react-native/libraries/vendor/core/errorutils.d.ts","./node_modules/react-native/types/public/deprecatedpropertiesalias.d.ts","./node_modules/react-native/types/index.d.ts","./node_modules/react-native-webview/lib/webviewtypes.d.ts","./node_modules/react-native-webview/index.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/provider/sdkprovider.d.ts","./node_modules/i18next/index.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/services/providerservice.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/types/wakelockstatus.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/platform/wakelockmanager.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/platform/platfformmanager.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/platform/metamaskinstaller.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/services/analytics.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/services/metamasksdk/initializermanager/setupreadonlyrpcproviders.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/types/sdkloggingoptions.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/services/remoteconnection/remoteconnection.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/services/remoteconnection/index.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/types/sdkuioptions.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/sdk.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/types/providerupdatetype.d.ts","./node_modules/@metamask/sdk/dist/browser/es/src/index.d.ts","./node_modules/@wagmi/connectors/dist/types/metamask.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/common.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/human-description.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/transactions.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/safe-info.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/chains.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/safe-apps.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/decoded-data.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/master-copies.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/safe-messages.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/delegates.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/notifications.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/emails.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/relay.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/recovery.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/types/api.d.ts","./node_modules/@safe-global/safe-gateway-typescript-sdk/dist/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/sdk.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/eth/constants.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/rpc.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/gateway.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/communication/methods.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/permissions.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/messaging.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/types/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/txs/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/eth/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/safe/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/wallet/index.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/sdk.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/communication/messageformatter.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/utils.d.ts","./node_modules/@safe-global/safe-apps-sdk/dist/src/index.d.ts","./node_modules/@safe-global/safe-apps-provider/dist/types.d.ts","./node_modules/@safe-global/safe-apps-provider/dist/provider.d.ts","./node_modules/@safe-global/safe-apps-provider/dist/index.d.ts","./node_modules/@wagmi/connectors/dist/types/safe.d.ts","./node_modules/@walletconnect/keyvaluestorage/dist/types/shared/types.d.ts","./node_modules/@walletconnect/keyvaluestorage/dist/types/shared/utils.d.ts","./node_modules/@walletconnect/keyvaluestorage/dist/types/shared/index.d.ts","./node_modules/@walletconnect/keyvaluestorage/dist/types/node-js/index.d.ts","./node_modules/@walletconnect/keyvaluestorage/dist/types/index.d.ts","./node_modules/@walletconnect/events/dist/cjs/events.d.ts","./node_modules/@walletconnect/events/dist/cjs/index.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/types/heartbeat.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/types/index.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/heartbeat.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/constants/heartbeat.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/constants/index.d.ts","./node_modules/@walletconnect/heartbeat/dist/cjs/index.d.ts","./node_modules/@walletconnect/jsonrpc-types/dist/cjs/jsonrpc.d.ts","./node_modules/@walletconnect/jsonrpc-types/dist/cjs/misc.d.ts","./node_modules/@walletconnect/jsonrpc-types/dist/cjs/provider.d.ts","./node_modules/@walletconnect/jsonrpc-types/dist/cjs/validator.d.ts","./node_modules/@walletconnect/jsonrpc-types/dist/cjs/index.d.ts","./node_modules/pino-abstract-transport/index.d.ts","./node_modules/colorette/index.d.ts","./node_modules/pino-pretty/index.d.ts","./node_modules/pino-std-serializers/index.d.ts","./node_modules/pino/node_modules/sonic-boom/types/index.d.ts","./node_modules/pino/pino.d.ts","./node_modules/@walletconnect/logger/dist/types/constants.d.ts","./node_modules/@walletconnect/logger/dist/types/linkedlist.d.ts","./node_modules/@walletconnect/logger/dist/types/clientchunklogger.d.ts","./node_modules/@walletconnect/logger/dist/types/serverchunklogger.d.ts","./node_modules/@walletconnect/logger/dist/types/basechunklogger.d.ts","./node_modules/@walletconnect/logger/dist/types/utils.d.ts","./node_modules/@walletconnect/logger/dist/types/index.d.ts","./node_modules/@walletconnect/types/dist/types/core/keychain.d.ts","./node_modules/@walletconnect/types/dist/types/core/crypto.d.ts","./node_modules/@walletconnect/types/dist/types/core/messages.d.ts","./node_modules/@walletconnect/types/dist/types/core/publisher.d.ts","./node_modules/@walletconnect/types/dist/types/core/subscriber.d.ts","./node_modules/@walletconnect/types/dist/types/core/relayer.d.ts","./node_modules/@walletconnect/types/dist/types/core/history.d.ts","./node_modules/@walletconnect/types/dist/types/core/expirer.d.ts","./node_modules/@walletconnect/types/dist/types/core/store.d.ts","./node_modules/@walletconnect/types/dist/types/core/pairing.d.ts","./node_modules/@walletconnect/types/dist/types/core/verify.d.ts","./node_modules/@walletconnect/types/dist/types/core/echo.d.ts","./node_modules/@walletconnect/types/dist/types/core/core.d.ts","./node_modules/@walletconnect/types/dist/types/core/index.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/proposal.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/session.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/jsonrpc.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/pendingrequest.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/engine.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/client.d.ts","./node_modules/@walletconnect/types/dist/types/sign-client/index.d.ts","./node_modules/@walletconnect/types/dist/types/index.d.ts","./node_modules/@walletconnect/ethereum-provider/dist/types/types.d.ts","./node_modules/@walletconnect/sign-client/dist/types/client.d.ts","./node_modules/@walletconnect/core/dist/types/core.d.ts","./node_modules/@walletconnect/core/dist/types/constants/core.d.ts","./node_modules/@walletconnect/core/dist/types/constants/crypto.d.ts","./node_modules/@walletconnect/core/dist/types/constants/keychain.d.ts","./node_modules/@walletconnect/core/dist/types/constants/messages.d.ts","./node_modules/@walletconnect/core/dist/types/constants/publisher.d.ts","./node_modules/@walletconnect/core/dist/types/constants/relayer.d.ts","./node_modules/@walletconnect/core/dist/types/constants/store.d.ts","./node_modules/@walletconnect/core/dist/types/constants/subscriber.d.ts","./node_modules/@walletconnect/core/dist/types/constants/pairing.d.ts","./node_modules/@walletconnect/core/dist/types/constants/history.d.ts","./node_modules/@walletconnect/core/dist/types/constants/expirer.d.ts","./node_modules/@walletconnect/core/dist/types/constants/verify.d.ts","./node_modules/@walletconnect/core/dist/types/constants/echo.d.ts","./node_modules/@walletconnect/core/dist/types/constants/index.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/crypto.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/messages.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/constants.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/types.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/error.d.ts","./node_modules/@walletconnect/environment/dist/cjs/crypto.d.ts","./node_modules/@walletconnect/environment/dist/cjs/env.d.ts","./node_modules/@walletconnect/environment/dist/cjs/index.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/env.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/format.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/routing.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/url.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/validators.d.ts","./node_modules/@walletconnect/jsonrpc-utils/dist/cjs/index.d.ts","./node_modules/@walletconnect/relay-api/dist/types/types.d.ts","./node_modules/@walletconnect/relay-api/dist/types/parsers.d.ts","./node_modules/@walletconnect/relay-api/dist/types/jsonrpc.d.ts","./node_modules/@walletconnect/relay-api/dist/types/validators.d.ts","./node_modules/@walletconnect/relay-api/dist/types/index.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/relayer.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/store.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/topicmap.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/subscriber.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/keychain.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/pairing.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/history.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/expirer.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/verify.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/echo.d.ts","./node_modules/@walletconnect/core/dist/types/controllers/index.d.ts","./node_modules/@walletconnect/core/dist/types/index.d.ts","./node_modules/@walletconnect/sign-client/dist/types/controllers/session.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/client.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/history.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/proposal.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/session.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/engine.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/pendingrequest.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/verify.d.ts","./node_modules/@walletconnect/sign-client/dist/types/constants/index.d.ts","./node_modules/@walletconnect/sign-client/dist/types/index.d.ts","./node_modules/@walletconnect/jsonrpc-provider/dist/cjs/provider.d.ts","./node_modules/@walletconnect/jsonrpc-provider/dist/cjs/index.d.ts","./node_modules/@walletconnect/universal-provider/dist/types/types/misc.d.ts","./node_modules/@walletconnect/universal-provider/dist/types/types/providers.d.ts","./node_modules/@walletconnect/universal-provider/dist/types/types/index.d.ts","./node_modules/@walletconnect/universal-provider/dist/types/universalprovider.d.ts","./node_modules/@walletconnect/universal-provider/dist/types/index.d.ts","./node_modules/@walletconnect/ethereum-provider/dist/types/ethereumprovider.d.ts","./node_modules/@walletconnect/ethereum-provider/dist/types/constants/rpc.d.ts","./node_modules/@walletconnect/ethereum-provider/dist/types/index.d.ts","./node_modules/@wagmi/connectors/dist/types/walletconnect.d.ts","./node_modules/@wagmi/connectors/dist/types/version.d.ts","./node_modules/@wagmi/connectors/dist/types/exports/index.d.ts","./node_modules/wagmi/dist/types/exports/connectors.d.ts","./src/wagmi.ts","./node_modules/@risc0/ui/utils/sleep.ts","./node_modules/axios/index.d.ts","./node_modules/zod/lib/helpers/typealiases.d.ts","./node_modules/zod/lib/helpers/util.d.ts","./node_modules/zod/lib/zoderror.d.ts","./node_modules/zod/lib/locales/en.d.ts","./node_modules/zod/lib/errors.d.ts","./node_modules/zod/lib/helpers/parseutil.d.ts","./node_modules/zod/lib/helpers/enumutil.d.ts","./node_modules/zod/lib/helpers/errorutil.d.ts","./node_modules/zod/lib/helpers/partialutil.d.ts","./node_modules/zod/lib/types.d.ts","./node_modules/zod/lib/external.d.ts","./node_modules/zod/lib/index.d.ts","./node_modules/zod/index.d.ts","./node_modules/@t3-oss/env-core/dist/index.d.ts","./node_modules/@t3-oss/env-nextjs/dist/index.d.ts","./node_modules/@t3-oss/env-core/dist/presets.d.ts","./node_modules/@t3-oss/env-nextjs/dist/presets.d.ts","./src/env.js","./src/app/(demo)/_actions/bonsai-proving.ts","./node_modules/pg-protocol/dist/messages.d.ts","./node_modules/pg-protocol/dist/serializer.d.ts","./node_modules/pg-protocol/dist/parser.d.ts","./node_modules/pg-protocol/dist/index.d.ts","./node_modules/pg-types/index.d.ts","./node_modules/@types/pg/index.d.ts","./node_modules/@neondatabase/serverless/index.d.mts","./node_modules/@vercel/postgres/dist/index.d.ts","./node_modules/@vercel/postgres/dist/index-node.d.ts","./src/app/(demo)/_actions/check-user-validity.ts","./src/app/(demo)/_hooks/use-event-listener.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/@types/lodash-es/add.d.ts","./node_modules/@types/lodash-es/after.d.ts","./node_modules/@types/lodash-es/ary.d.ts","./node_modules/@types/lodash-es/assign.d.ts","./node_modules/@types/lodash-es/assignin.d.ts","./node_modules/@types/lodash-es/assigninwith.d.ts","./node_modules/@types/lodash-es/assignwith.d.ts","./node_modules/@types/lodash-es/at.d.ts","./node_modules/@types/lodash-es/attempt.d.ts","./node_modules/@types/lodash-es/before.d.ts","./node_modules/@types/lodash-es/bind.d.ts","./node_modules/@types/lodash-es/bindall.d.ts","./node_modules/@types/lodash-es/bindkey.d.ts","./node_modules/@types/lodash-es/camelcase.d.ts","./node_modules/@types/lodash-es/capitalize.d.ts","./node_modules/@types/lodash-es/castarray.d.ts","./node_modules/@types/lodash-es/ceil.d.ts","./node_modules/@types/lodash-es/chain.d.ts","./node_modules/@types/lodash-es/chunk.d.ts","./node_modules/@types/lodash-es/clamp.d.ts","./node_modules/@types/lodash-es/clone.d.ts","./node_modules/@types/lodash-es/clonedeep.d.ts","./node_modules/@types/lodash-es/clonedeepwith.d.ts","./node_modules/@types/lodash-es/clonewith.d.ts","./node_modules/@types/lodash-es/compact.d.ts","./node_modules/@types/lodash-es/concat.d.ts","./node_modules/@types/lodash-es/cond.d.ts","./node_modules/@types/lodash-es/conforms.d.ts","./node_modules/@types/lodash-es/conformsto.d.ts","./node_modules/@types/lodash-es/constant.d.ts","./node_modules/@types/lodash-es/countby.d.ts","./node_modules/@types/lodash-es/create.d.ts","./node_modules/@types/lodash-es/curry.d.ts","./node_modules/@types/lodash-es/curryright.d.ts","./node_modules/@types/lodash-es/debounce.d.ts","./node_modules/@types/lodash-es/deburr.d.ts","./node_modules/@types/lodash-es/defaults.d.ts","./node_modules/@types/lodash-es/defaultsdeep.d.ts","./node_modules/@types/lodash-es/defaultto.d.ts","./node_modules/@types/lodash-es/defer.d.ts","./node_modules/@types/lodash-es/delay.d.ts","./node_modules/@types/lodash-es/difference.d.ts","./node_modules/@types/lodash-es/differenceby.d.ts","./node_modules/@types/lodash-es/differencewith.d.ts","./node_modules/@types/lodash-es/divide.d.ts","./node_modules/@types/lodash-es/drop.d.ts","./node_modules/@types/lodash-es/dropright.d.ts","./node_modules/@types/lodash-es/droprightwhile.d.ts","./node_modules/@types/lodash-es/dropwhile.d.ts","./node_modules/@types/lodash-es/each.d.ts","./node_modules/@types/lodash-es/eachright.d.ts","./node_modules/@types/lodash-es/endswith.d.ts","./node_modules/@types/lodash-es/entries.d.ts","./node_modules/@types/lodash-es/entriesin.d.ts","./node_modules/@types/lodash-es/eq.d.ts","./node_modules/@types/lodash-es/escape.d.ts","./node_modules/@types/lodash-es/escaperegexp.d.ts","./node_modules/@types/lodash-es/every.d.ts","./node_modules/@types/lodash-es/extend.d.ts","./node_modules/@types/lodash-es/extendwith.d.ts","./node_modules/@types/lodash-es/fill.d.ts","./node_modules/@types/lodash-es/filter.d.ts","./node_modules/@types/lodash-es/find.d.ts","./node_modules/@types/lodash-es/findindex.d.ts","./node_modules/@types/lodash-es/findkey.d.ts","./node_modules/@types/lodash-es/findlast.d.ts","./node_modules/@types/lodash-es/findlastindex.d.ts","./node_modules/@types/lodash-es/findlastkey.d.ts","./node_modules/@types/lodash-es/first.d.ts","./node_modules/@types/lodash-es/flatmap.d.ts","./node_modules/@types/lodash-es/flatmapdeep.d.ts","./node_modules/@types/lodash-es/flatmapdepth.d.ts","./node_modules/@types/lodash-es/flatten.d.ts","./node_modules/@types/lodash-es/flattendeep.d.ts","./node_modules/@types/lodash-es/flattendepth.d.ts","./node_modules/@types/lodash-es/flip.d.ts","./node_modules/@types/lodash-es/floor.d.ts","./node_modules/@types/lodash-es/flow.d.ts","./node_modules/@types/lodash-es/flowright.d.ts","./node_modules/@types/lodash-es/foreach.d.ts","./node_modules/@types/lodash-es/foreachright.d.ts","./node_modules/@types/lodash-es/forin.d.ts","./node_modules/@types/lodash-es/forinright.d.ts","./node_modules/@types/lodash-es/forown.d.ts","./node_modules/@types/lodash-es/forownright.d.ts","./node_modules/@types/lodash-es/frompairs.d.ts","./node_modules/@types/lodash-es/functions.d.ts","./node_modules/@types/lodash-es/functionsin.d.ts","./node_modules/@types/lodash-es/get.d.ts","./node_modules/@types/lodash-es/groupby.d.ts","./node_modules/@types/lodash-es/gt.d.ts","./node_modules/@types/lodash-es/gte.d.ts","./node_modules/@types/lodash-es/has.d.ts","./node_modules/@types/lodash-es/hasin.d.ts","./node_modules/@types/lodash-es/head.d.ts","./node_modules/@types/lodash-es/identity.d.ts","./node_modules/@types/lodash-es/includes.d.ts","./node_modules/@types/lodash-es/indexof.d.ts","./node_modules/@types/lodash-es/initial.d.ts","./node_modules/@types/lodash-es/inrange.d.ts","./node_modules/@types/lodash-es/intersection.d.ts","./node_modules/@types/lodash-es/intersectionby.d.ts","./node_modules/@types/lodash-es/intersectionwith.d.ts","./node_modules/@types/lodash-es/invert.d.ts","./node_modules/@types/lodash-es/invertby.d.ts","./node_modules/@types/lodash-es/invoke.d.ts","./node_modules/@types/lodash-es/invokemap.d.ts","./node_modules/@types/lodash-es/isarguments.d.ts","./node_modules/@types/lodash-es/isarray.d.ts","./node_modules/@types/lodash-es/isarraybuffer.d.ts","./node_modules/@types/lodash-es/isarraylike.d.ts","./node_modules/@types/lodash-es/isarraylikeobject.d.ts","./node_modules/@types/lodash-es/isboolean.d.ts","./node_modules/@types/lodash-es/isbuffer.d.ts","./node_modules/@types/lodash-es/isdate.d.ts","./node_modules/@types/lodash-es/iselement.d.ts","./node_modules/@types/lodash-es/isempty.d.ts","./node_modules/@types/lodash-es/isequal.d.ts","./node_modules/@types/lodash-es/isequalwith.d.ts","./node_modules/@types/lodash-es/iserror.d.ts","./node_modules/@types/lodash-es/isfinite.d.ts","./node_modules/@types/lodash-es/isfunction.d.ts","./node_modules/@types/lodash-es/isinteger.d.ts","./node_modules/@types/lodash-es/islength.d.ts","./node_modules/@types/lodash-es/ismap.d.ts","./node_modules/@types/lodash-es/ismatch.d.ts","./node_modules/@types/lodash-es/ismatchwith.d.ts","./node_modules/@types/lodash-es/isnan.d.ts","./node_modules/@types/lodash-es/isnative.d.ts","./node_modules/@types/lodash-es/isnil.d.ts","./node_modules/@types/lodash-es/isnull.d.ts","./node_modules/@types/lodash-es/isnumber.d.ts","./node_modules/@types/lodash-es/isobject.d.ts","./node_modules/@types/lodash-es/isobjectlike.d.ts","./node_modules/@types/lodash-es/isplainobject.d.ts","./node_modules/@types/lodash-es/isregexp.d.ts","./node_modules/@types/lodash-es/issafeinteger.d.ts","./node_modules/@types/lodash-es/isset.d.ts","./node_modules/@types/lodash-es/isstring.d.ts","./node_modules/@types/lodash-es/issymbol.d.ts","./node_modules/@types/lodash-es/istypedarray.d.ts","./node_modules/@types/lodash-es/isundefined.d.ts","./node_modules/@types/lodash-es/isweakmap.d.ts","./node_modules/@types/lodash-es/isweakset.d.ts","./node_modules/@types/lodash-es/iteratee.d.ts","./node_modules/@types/lodash-es/join.d.ts","./node_modules/@types/lodash-es/kebabcase.d.ts","./node_modules/@types/lodash-es/keyby.d.ts","./node_modules/@types/lodash-es/keys.d.ts","./node_modules/@types/lodash-es/keysin.d.ts","./node_modules/@types/lodash-es/last.d.ts","./node_modules/@types/lodash-es/lastindexof.d.ts","./node_modules/@types/lodash-es/lowercase.d.ts","./node_modules/@types/lodash-es/lowerfirst.d.ts","./node_modules/@types/lodash-es/lt.d.ts","./node_modules/@types/lodash-es/lte.d.ts","./node_modules/@types/lodash-es/map.d.ts","./node_modules/@types/lodash-es/mapkeys.d.ts","./node_modules/@types/lodash-es/mapvalues.d.ts","./node_modules/@types/lodash-es/matches.d.ts","./node_modules/@types/lodash-es/matchesproperty.d.ts","./node_modules/@types/lodash-es/max.d.ts","./node_modules/@types/lodash-es/maxby.d.ts","./node_modules/@types/lodash-es/mean.d.ts","./node_modules/@types/lodash-es/meanby.d.ts","./node_modules/@types/lodash-es/memoize.d.ts","./node_modules/@types/lodash-es/merge.d.ts","./node_modules/@types/lodash-es/mergewith.d.ts","./node_modules/@types/lodash-es/method.d.ts","./node_modules/@types/lodash-es/methodof.d.ts","./node_modules/@types/lodash-es/min.d.ts","./node_modules/@types/lodash-es/minby.d.ts","./node_modules/@types/lodash-es/mixin.d.ts","./node_modules/@types/lodash-es/multiply.d.ts","./node_modules/@types/lodash-es/negate.d.ts","./node_modules/@types/lodash-es/noop.d.ts","./node_modules/@types/lodash-es/now.d.ts","./node_modules/@types/lodash-es/nth.d.ts","./node_modules/@types/lodash-es/ntharg.d.ts","./node_modules/@types/lodash-es/omit.d.ts","./node_modules/@types/lodash-es/omitby.d.ts","./node_modules/@types/lodash-es/once.d.ts","./node_modules/@types/lodash-es/orderby.d.ts","./node_modules/@types/lodash-es/over.d.ts","./node_modules/@types/lodash-es/overargs.d.ts","./node_modules/@types/lodash-es/overevery.d.ts","./node_modules/@types/lodash-es/oversome.d.ts","./node_modules/@types/lodash-es/pad.d.ts","./node_modules/@types/lodash-es/padend.d.ts","./node_modules/@types/lodash-es/padstart.d.ts","./node_modules/@types/lodash-es/parseint.d.ts","./node_modules/@types/lodash-es/partial.d.ts","./node_modules/@types/lodash-es/partialright.d.ts","./node_modules/@types/lodash-es/partition.d.ts","./node_modules/@types/lodash-es/pick.d.ts","./node_modules/@types/lodash-es/pickby.d.ts","./node_modules/@types/lodash-es/property.d.ts","./node_modules/@types/lodash-es/propertyof.d.ts","./node_modules/@types/lodash-es/pull.d.ts","./node_modules/@types/lodash-es/pullall.d.ts","./node_modules/@types/lodash-es/pullallby.d.ts","./node_modules/@types/lodash-es/pullallwith.d.ts","./node_modules/@types/lodash-es/pullat.d.ts","./node_modules/@types/lodash-es/random.d.ts","./node_modules/@types/lodash-es/range.d.ts","./node_modules/@types/lodash-es/rangeright.d.ts","./node_modules/@types/lodash-es/rearg.d.ts","./node_modules/@types/lodash-es/reduce.d.ts","./node_modules/@types/lodash-es/reduceright.d.ts","./node_modules/@types/lodash-es/reject.d.ts","./node_modules/@types/lodash-es/remove.d.ts","./node_modules/@types/lodash-es/repeat.d.ts","./node_modules/@types/lodash-es/replace.d.ts","./node_modules/@types/lodash-es/rest.d.ts","./node_modules/@types/lodash-es/result.d.ts","./node_modules/@types/lodash-es/reverse.d.ts","./node_modules/@types/lodash-es/round.d.ts","./node_modules/@types/lodash-es/sample.d.ts","./node_modules/@types/lodash-es/samplesize.d.ts","./node_modules/@types/lodash-es/set.d.ts","./node_modules/@types/lodash-es/setwith.d.ts","./node_modules/@types/lodash-es/shuffle.d.ts","./node_modules/@types/lodash-es/size.d.ts","./node_modules/@types/lodash-es/slice.d.ts","./node_modules/@types/lodash-es/snakecase.d.ts","./node_modules/@types/lodash-es/some.d.ts","./node_modules/@types/lodash-es/sortby.d.ts","./node_modules/@types/lodash-es/sortedindex.d.ts","./node_modules/@types/lodash-es/sortedindexby.d.ts","./node_modules/@types/lodash-es/sortedindexof.d.ts","./node_modules/@types/lodash-es/sortedlastindex.d.ts","./node_modules/@types/lodash-es/sortedlastindexby.d.ts","./node_modules/@types/lodash-es/sortedlastindexof.d.ts","./node_modules/@types/lodash-es/sorteduniq.d.ts","./node_modules/@types/lodash-es/sorteduniqby.d.ts","./node_modules/@types/lodash-es/split.d.ts","./node_modules/@types/lodash-es/spread.d.ts","./node_modules/@types/lodash-es/startcase.d.ts","./node_modules/@types/lodash-es/startswith.d.ts","./node_modules/@types/lodash-es/stubarray.d.ts","./node_modules/@types/lodash-es/stubfalse.d.ts","./node_modules/@types/lodash-es/stubobject.d.ts","./node_modules/@types/lodash-es/stubstring.d.ts","./node_modules/@types/lodash-es/stubtrue.d.ts","./node_modules/@types/lodash-es/subtract.d.ts","./node_modules/@types/lodash-es/sum.d.ts","./node_modules/@types/lodash-es/sumby.d.ts","./node_modules/@types/lodash-es/tail.d.ts","./node_modules/@types/lodash-es/take.d.ts","./node_modules/@types/lodash-es/takeright.d.ts","./node_modules/@types/lodash-es/takerightwhile.d.ts","./node_modules/@types/lodash-es/takewhile.d.ts","./node_modules/@types/lodash-es/tap.d.ts","./node_modules/@types/lodash-es/template.d.ts","./node_modules/@types/lodash-es/templatesettings.d.ts","./node_modules/@types/lodash-es/throttle.d.ts","./node_modules/@types/lodash-es/thru.d.ts","./node_modules/@types/lodash-es/times.d.ts","./node_modules/@types/lodash-es/toarray.d.ts","./node_modules/@types/lodash-es/tofinite.d.ts","./node_modules/@types/lodash-es/tointeger.d.ts","./node_modules/@types/lodash-es/tolength.d.ts","./node_modules/@types/lodash-es/tolower.d.ts","./node_modules/@types/lodash-es/tonumber.d.ts","./node_modules/@types/lodash-es/topairs.d.ts","./node_modules/@types/lodash-es/topairsin.d.ts","./node_modules/@types/lodash-es/topath.d.ts","./node_modules/@types/lodash-es/toplainobject.d.ts","./node_modules/@types/lodash-es/tosafeinteger.d.ts","./node_modules/@types/lodash-es/tostring.d.ts","./node_modules/@types/lodash-es/toupper.d.ts","./node_modules/@types/lodash-es/transform.d.ts","./node_modules/@types/lodash-es/trim.d.ts","./node_modules/@types/lodash-es/trimend.d.ts","./node_modules/@types/lodash-es/trimstart.d.ts","./node_modules/@types/lodash-es/truncate.d.ts","./node_modules/@types/lodash-es/unary.d.ts","./node_modules/@types/lodash-es/unescape.d.ts","./node_modules/@types/lodash-es/union.d.ts","./node_modules/@types/lodash-es/unionby.d.ts","./node_modules/@types/lodash-es/unionwith.d.ts","./node_modules/@types/lodash-es/uniq.d.ts","./node_modules/@types/lodash-es/uniqby.d.ts","./node_modules/@types/lodash-es/uniqueid.d.ts","./node_modules/@types/lodash-es/uniqwith.d.ts","./node_modules/@types/lodash-es/unset.d.ts","./node_modules/@types/lodash-es/unzip.d.ts","./node_modules/@types/lodash-es/unzipwith.d.ts","./node_modules/@types/lodash-es/update.d.ts","./node_modules/@types/lodash-es/updatewith.d.ts","./node_modules/@types/lodash-es/uppercase.d.ts","./node_modules/@types/lodash-es/upperfirst.d.ts","./node_modules/@types/lodash-es/values.d.ts","./node_modules/@types/lodash-es/valuesin.d.ts","./node_modules/@types/lodash-es/without.d.ts","./node_modules/@types/lodash-es/words.d.ts","./node_modules/@types/lodash-es/wrap.d.ts","./node_modules/@types/lodash-es/xor.d.ts","./node_modules/@types/lodash-es/xorby.d.ts","./node_modules/@types/lodash-es/xorwith.d.ts","./node_modules/@types/lodash-es/zip.d.ts","./node_modules/@types/lodash-es/zipobject.d.ts","./node_modules/@types/lodash-es/zipobjectdeep.d.ts","./node_modules/@types/lodash-es/zipwith.d.ts","./node_modules/@types/lodash-es/index.d.ts","./src/app/(demo)/_utils/parse-json.ts","./src/app/(demo)/_hooks/use-local-storage.ts","./src/app/(demo)/_utils/calculate-completion-percentage.ts","./src/app/(demo)/_utils/generate-random-string.ts","./node_modules/string-ts/dist/index.d.ts","./src/app/(demo)/_utils/get-avatar-initials.ts","./src/types/facebook.ts","./src/types/google.ts","./node_modules/class-variance-authority/node_modules/clsx/clsx.d.mts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./node_modules/@risc0/ui/cn.ts","./node_modules/@risc0/ui/alert.tsx","./node_modules/@radix-ui/react-slot/dist/index.d.mts","./node_modules/@risc0/ui/node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/@risc0/ui/button.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./src/app/error.tsx","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./node_modules/@react-oauth/google/dist/index.d.ts","./node_modules/next-themes/dist/types.d.ts","./node_modules/next-themes/dist/index.d.ts","./src/client/providers/providers.tsx","./src/app/layout.tsx","./node_modules/@risc0/ui/badge.tsx","./node_modules/@risc0/ui/card.tsx","./src/app/not-found.tsx","./node_modules/@radix-ui/react-primitive/dist/index.d.mts","./node_modules/@radix-ui/react-separator/dist/index.d.mts","./node_modules/@risc0/ui/separator.tsx","./node_modules/@types/prismjs/index.d.ts","./node_modules/prism-react-renderer/dist/index.d.ts","./src/app/(demo)/_components/code-preview.tsx","./src/app/(demo)/_components/footer.tsx","./node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","./node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","./node_modules/@radix-ui/react-arrow/dist/index.d.mts","./node_modules/@radix-ui/rect/dist/index.d.mts","./node_modules/@radix-ui/react-context/dist/index.d.mts","./node_modules/@radix-ui/react-popper/dist/index.d.mts","./node_modules/@radix-ui/react-portal/dist/index.d.mts","./node_modules/@radix-ui/react-roving-focus/dist/index.d.mts","./node_modules/@radix-ui/react-menu/dist/index.d.mts","./node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts","./node_modules/@risc0/ui/dropdown-menu.tsx","./src/client/theme/theme-toggle.tsx","./src/app/(demo)/_components/header.tsx","./src/app/(demo)/_components/sign-out-button.tsx","./src/app/(demo)/layout.tsx","./node_modules/@radix-ui/react-progress/dist/index.d.mts","./node_modules/@risc0/ui/progress.tsx","./node_modules/@risc0/ui/skeleton.tsx","./node_modules/react-confetti/dist/types/rect.d.ts","./node_modules/react-confetti/dist/types/particle.d.ts","./node_modules/react-confetti/dist/types/particlegenerator.d.ts","./node_modules/react-confetti/dist/types/confetti.d.ts","./node_modules/react-confetti/dist/types/reactconfetti.d.ts","./node_modules/react-use/lib/usewindowsize.d.ts","./src/app/(demo)/_components/confetti.tsx","./src/app/(demo)/_components/connect-wallet-button.tsx","./node_modules/@risc0/ui/loader.tsx","./node_modules/@radix-ui/react-avatar/dist/index.d.mts","./node_modules/@risc0/ui/avatar.tsx","./src/app/(demo)/_components/user-infos.tsx","./src/app/(demo)/_components/prove-button.tsx","./node_modules/jwt-decode/index.d.ts","./node_modules/react-use/lib/factory/creatememo.d.ts","./node_modules/react-use/lib/factory/createreducercontext.d.ts","./node_modules/react-use/lib/factory/createreducer.d.ts","./node_modules/react-use/lib/factory/createstatecontext.d.ts","./node_modules/react-use/lib/misc/types.d.ts","./node_modules/react-use/lib/useasyncfn.d.ts","./node_modules/react-use/lib/useasync.d.ts","./node_modules/react-use/lib/useasyncretry.d.ts","./node_modules/react-use/lib/factory/createhtmlmediahook.d.ts","./node_modules/react-use/lib/useaudio.d.ts","./node_modules/react-use/lib/usebattery.d.ts","./node_modules/react-use/lib/usebeforeunload.d.ts","./node_modules/react-use/lib/usetoggle.d.ts","./node_modules/react-use/lib/useboolean.d.ts","./node_modules/react-use/lib/useclickaway.d.ts","./node_modules/@types/js-cookie/index.d.ts","./node_modules/react-use/lib/usecookie.d.ts","./node_modules/react-use/lib/usecopytoclipboard.d.ts","./node_modules/react-use/lib/misc/hookstate.d.ts","./node_modules/react-use/lib/usecounter.d.ts","./node_modules/react-use/lib/usecss.d.ts","./node_modules/react-use/lib/usecustomcompareeffect.d.ts","./node_modules/react-use/lib/usedebounce.d.ts","./node_modules/react-use/lib/usedeepcompareeffect.d.ts","./node_modules/react-use/lib/usedefault.d.ts","./node_modules/react-use/lib/usedrop.d.ts","./node_modules/react-use/lib/usedroparea.d.ts","./node_modules/react-use/lib/useeffectonce.d.ts","./node_modules/react-use/lib/useensuredforwardedref.d.ts","./node_modules/react-use/lib/useevent.d.ts","./node_modules/react-use/lib/useerror.d.ts","./node_modules/react-use/lib/usefavicon.d.ts","./node_modules/react-use/lib/usefullscreen.d.ts","./node_modules/react-use/lib/usegeolocation.d.ts","./node_modules/react-use/lib/usegetset.d.ts","./node_modules/react-use/lib/usegetsetstate.d.ts","./node_modules/react-use/lib/useharmonicintervalfn.d.ts","./node_modules/react-use/lib/usehover.d.ts","./node_modules/react-use/lib/usehoverdirty.d.ts","./node_modules/react-use/lib/useidle.d.ts","./node_modules/react-use/lib/useintersection.d.ts","./node_modules/react-use/lib/useinterval.d.ts","./node_modules/react-use/lib/useisomorphiclayouteffect.d.ts","./node_modules/react-use/lib/usekey.d.ts","./node_modules/react-use/lib/factory/createbreakpoint.d.ts","./node_modules/react-use/lib/usekeypress.d.ts","./node_modules/react-use/lib/usekeypressevent.d.ts","./node_modules/react-use/lib/uselatest.d.ts","./node_modules/react-use/lib/uselifecycles.d.ts","./node_modules/react-use/lib/uselist.d.ts","./node_modules/react-use/lib/uselocalstorage.d.ts","./node_modules/react-use/lib/uselocation.d.ts","./node_modules/react-use/lib/uselockbodyscroll.d.ts","./node_modules/react-use/lib/uselogger.d.ts","./node_modules/react-use/lib/uselongpress.d.ts","./node_modules/react-use/lib/usemap.d.ts","./node_modules/react-use/lib/usemedia.d.ts","./node_modules/react-use/lib/usemediadevices.d.ts","./node_modules/react-use/lib/usemediatedstate.d.ts","./node_modules/react-use/lib/usemethods.d.ts","./node_modules/react-use/lib/usemotion.d.ts","./node_modules/react-use/lib/usemount.d.ts","./node_modules/react-use/lib/usemountedstate.d.ts","./node_modules/react-use/lib/usemouse.d.ts","./node_modules/react-use/lib/usemousehovered.d.ts","./node_modules/react-use/lib/usemousewheel.d.ts","./node_modules/react-use/lib/usenetworkstate.d.ts","./node_modules/react-use/lib/usenumber.d.ts","./node_modules/react-use/lib/useobservable.d.ts","./node_modules/react-use/lib/useorientation.d.ts","./node_modules/react-use/lib/usepageleave.d.ts","./node_modules/react-use/lib/usepermission.d.ts","./node_modules/react-use/lib/useprevious.d.ts","./node_modules/react-use/lib/usepreviousdistinct.d.ts","./node_modules/react-use/lib/usepromise.d.ts","./node_modules/react-use/lib/usequeue.d.ts","./node_modules/react-use/lib/useraf.d.ts","./node_modules/react-use/lib/userafloop.d.ts","./node_modules/react-use/lib/userafstate.d.ts","./node_modules/react-use/lib/usesearchparam.d.ts","./node_modules/react-use/lib/usescratch.d.ts","./node_modules/react-use/lib/usescroll.d.ts","./node_modules/react-use/lib/usescrolling.d.ts","./node_modules/react-use/lib/usesessionstorage.d.ts","./node_modules/react-use/lib/usesetstate.d.ts","./node_modules/react-use/lib/useshallowcompareeffect.d.ts","./node_modules/react-use/lib/usesize.d.ts","./node_modules/react-use/lib/useslider.d.ts","./node_modules/react-use/lib/usespeech.d.ts","./node_modules/react-use/lib/usestarttyping.d.ts","./node_modules/react-use/lib/usestatewithhistory.d.ts","./node_modules/react-use/lib/usestatelist.d.ts","./node_modules/react-use/lib/usethrottle.d.ts","./node_modules/react-use/lib/usethrottlefn.d.ts","./node_modules/react-use/lib/usetimeout.d.ts","./node_modules/react-use/lib/usetimeoutfn.d.ts","./node_modules/react-use/lib/usetitle.d.ts","./node_modules/react-use/lib/usetween.d.ts","./node_modules/react-use/lib/useunmount.d.ts","./node_modules/react-use/lib/useunmountpromise.d.ts","./node_modules/react-use/lib/useupdate.d.ts","./node_modules/react-use/lib/useupdateeffect.d.ts","./node_modules/react-use/lib/useupsert.d.ts","./node_modules/react-use/lib/usevibrate.d.ts","./node_modules/react-use/lib/usevideo.d.ts","./node_modules/react-use/lib/usestatevalidator.d.ts","./node_modules/react-use/lib/usescrollbarwidth.d.ts","./node_modules/react-use/lib/usemultistatevalidator.d.ts","./node_modules/react-use/lib/usewindowscroll.d.ts","./node_modules/react-use/lib/usemeasure.d.ts","./node_modules/react-use/lib/usepinchzoom.d.ts","./node_modules/react-use/lib/userenderscount.d.ts","./node_modules/react-use/lib/usefirstmountstate.d.ts","./node_modules/react-use/lib/useset.d.ts","./node_modules/react-use/lib/factory/createglobalstate.d.ts","./node_modules/react-use/lib/usehash.d.ts","./node_modules/react-use/lib/index.d.ts","./src/app/(demo)/_components/sign-in-button.tsx","./node_modules/@risc0/ui/table.tsx","./src/app/(demo)/_components/snark-table.tsx","./node_modules/micro-memoize/index.d.ts","./node_modules/moize/index.d.ts","./node_modules/@poppinss/intl-formatter/build/index.d.ts","./src/app/(demo)/_components/stark-table.tsx","./src/app/(demo)/page.tsx","./next.config.js","./node_modules/@types/har-format/index.d.ts","./node_modules/@types/chrome/har-format/index.d.ts","./node_modules/@types/filewriter/index.d.ts","./node_modules/@types/filesystem/index.d.ts","./node_modules/@types/chrome/index.d.ts","./node_modules/@types/dom-screen-wake-lock/index.d.ts","./node_modules/@types/eslint/helpers.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/eslint/index.d.ts","./node_modules/@types/eslint-scope/index.d.ts","./node_modules/@types/istanbul-lib-coverage/index.d.ts","./node_modules/@types/istanbul-lib-report/index.d.ts","./node_modules/@types/istanbul-reports/index.d.ts","./node_modules/@jest/expect-utils/build/index.d.ts","./node_modules/chalk/index.d.ts","./node_modules/@sinclair/typebox/typebox.d.ts","./node_modules/@jest/schemas/build/index.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/jest-diff/build/index.d.ts","./node_modules/jest-matcher-utils/build/index.d.ts","./node_modules/expect/build/index.d.ts","./node_modules/@types/jest/index.d.ts","./node_modules/@types/node-forge/index.d.ts","./node_modules/@types/parse-json/index.d.ts","./node_modules/@types/secp256k1/index.d.ts","./node_modules/@types/stack-utils/index.d.ts","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/yargs-parser/index.d.ts","./node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29",{"version":"55461596dc873b866911ef4e640fae4c39da7ac1fbc7ef5e649cb2f2fb42c349","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","247a952efd811d780e5630f8cfd76f495196f5fa74f6f0fee39ac8ba4a3c9800",{"version":"52620068b4e2ff1c611c28affbd88dbf26c812265931cf5c10cad70f634425c6","affectsGlobalScope":true},"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","acdc9fb9638a235a69bd270003d8db4d6153ada2b7ccbea741ade36b295e431e","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","d69a3298a197fe5d59edba0ec23b4abf2c8e7b8c6718eac97833633cd664e4c9",{"version":"a9544f6f8af0d046565e8dde585502698ebc99eef28b715bad7c2bded62e4a32","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"8b809082dfeffc8cc4f3b9c59f55c0ff52ba12f5ae0766cb5c35deee83b8552e","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","d4f9d3ae2fe1ae199e1c832cca2c44f45e0b305dfa2808afdd51249b6f4a5163","7525257b4aa35efc7a1bbc00f205a9a96c4e4ab791da90db41b77938c4e0c18e","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9c611eff81287837680c1f4496daf9e737d6f3a1ff17752207814b8f8e1265af","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","b5d4e3e524f2eead4519c8e819eaf7fa44a27c22418eff1b7b2d0ebc5fdc510d","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","9bd8e5984676cf28ebffcc65620b4ab5cb38ab2ec0aac0825df8568856895653","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","5e8dc64e7e68b2b3ea52ed685cf85239e0d5fb9df31aabc94370c6bc7e19077b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"46755a4afc53df75f0bfce72259fb971daac826b0cdd8c4eaccad2755a817403","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7fa32887f8a97909fca35ebba3740f8caf8df146618d8fff957a3f89f67a2f6a","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","21c56c6e8eeacef15f63f373a29fab6a2b36e4705be7a528aae8c51469e2737b",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","ad7e61eca7f2f8bf47e72695f9f6663b75e41d87ef49abdb17c0cb843862f8aa","ecba2e44af95b0599c269a92628cec22e752868bce37396740deb51a5c547a26","46a9fb41a8f3bc7539eeebc15a6e04b9e55d7537a081615ad3614220d34c3e0f","3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","98817124fd6c4f60e0b935978c207309459fb71ab112cf514f26f333bf30830e","deb8906bb643183920e3330a64770d20ef3cbc312daff81d7346bf54008cbb00","2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","196c960b12253fde69b204aa4fbf69470b26daf7a430855d7f94107a16495ab0","528637e771ee2e808390d46a591eaef375fa4b9c99b03749e22b1d2e868b1b7c","bf24f6d35f7318e246010ffe9924395893c4e96d34324cde77151a73f078b9ad","7def6038fabdee91aaa8c3a2e566838c5a9ff810cd491c54e221232a02c27d7d","10595c7ff5094dd5b6a959ccb1c00e6a06441b4e10a87bc09c15f23755d34439","9620c1ff645afb4a9ab4044c85c26676f0a93e8c0e4b593aea03a89ccb47b6d0","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","a9af0e608929aaf9ce96bd7a7b99c9360636c31d73670e4af09a09950df97841","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","9a2d4c5e310ee7f9172b628268cd6e932981fe03186e3554b47ed22fce866e69","b5c8a3617dd5e521804da070e6a5536176fd3ce3daaabbfb8cbeb591cd74e929","a088a5a0925203c3f40fbe85303c036302995320534f56918649652fe9693c58","f5f541902bf7ae0512a177295de9b6bcd6809ea38307a2c0a18bfca72212f368","e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","fc3e1c87b39e5ba1142f27ec089d1966da168c04a859a4f6aab64dceae162c2b","4a56e937686fcfed5f21ddd8b00c55396f37f10e600e49afefc7a5c00bf7043e","61888522cec948102eba94d831c873200aa97d00d8989fdfd2a3e0ee75ec65a2","4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","59bf32919de37809e101acffc120596a9e45fdbab1a99de5087f31fdc36e2f11","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","3851964af390ed7017175e72a90677135db00ac8999c0900902f275b570d7fd5","c40c848daad198266370c1c72a7a8c3d18d2f50727c7859fcfefd3ff69a7f288","39cd0b3f4b6917088b8c8395b55e401fe90affaa46732e588fe6c372fdbdb4e9","973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","c2fdfa0e9daf264fa06d0f9151092dc46a96ff14d7ded96ac7e2b8deb2e23f0f","70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","95db1100953ad2dc64c77a39a6810cd638c235f6f0042ed348cd4b4760f6f56d","ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","c3d1f923a1edc3ba4f447306c308014bd1bc040b474d82e928588244a139f3ea","f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","721d531422fb22b69fe68f96f0911753072eaf798b1ab95f4113023533a98d33","65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027",{"version":"566e5fb812082f8cf929c6727d40924843246cf19ee4e8b9437a6315c4792b03","affectsGlobalScope":true},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true},"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369",{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true},"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b",{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true},"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","68a06fb972b2c7e671bf090dc5a5328d22ba07d771376c3d9acd9e7ed786a9db","ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","cf6731b0200beda07b99a6f2ac79f4a4055552f6a2d68a5423e19bcb52514f81","e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","5f58e28cd22e8fc1ac1b3bc6b431869f1e7d0b39e2c21fbf79b9fa5195a85980","e1fc1a1045db5aa09366be2b330e4ce391550041fc3e925f60998ca0b647aa97","308904b1885bcbe78df2f4cfc63e0e5e11b94646b0ef725391f39737392812f9","43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","31fb49ef3aa3d76f0beb644984e01eab0ea222372ea9b49bb6533be5722d756c","33cd131e1461157e3e06b06916b5176e7a8ec3fce15a5cfe145e56de744e07d2","889ef863f90f4917221703781d9723278db4122d75596b01c429f7c363562b86","3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","d11308de5a36c7015bb73adb5ad1c1bdaac2baede4cc831a05cf85efa3cc7f2f","38e4684c22ed9319beda6765bab332c724103d3a966c2e5e1c5a49cf7007845f",{"version":"f9812cfc220ecf7557183379531fa409acd249b9e5b9a145d0d52b76c20862de","affectsGlobalScope":true},"c319c94f913d536e7c91320cc3d6522031600c12254489ee52da9122378a47ed","2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","913ddbba170240070bd5921b8f33ea780021bdf42fbdfcd4fcb2691b1884ddde","74c105214ddd747037d2a75da6588ec8aa1882f914e1f8a312c528f86feca2b9","5fe23bd829e6be57d41929ac374ee9551ccc3c44cee893167b7b5b77be708014","4d85f80132e24d9a5b5c5e0734e4ecd6878d8c657cc990ecc70845ef384ca96f","438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","cf185cc4a9a6d397f416dd28cca95c227b29f0f27b160060a95c0e5e36cda865","0086f3e4ad898fd7ca56bb223098acfacf3fa065595182aaf0f6c4a6a95e6fbd","efaa078e392f9abda3ee8ade3f3762ab77f9c50b184e6883063a911742a4c96a","54a8bb487e1dc04591a280e7a673cdfb272c83f61e28d8a64cf1ac2e63c35c51","021a9498000497497fd693dd315325484c58a71b5929e2bbb91f419b04b24cea","9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","c2ec0092f35b1b6f2f44644061e31e5708371f7989c32d3f9a36922df589a27b","17a2ba3940a23419ed8f6ec43034009ad91150cfbe9407bad4bf99949e58d40c","8f900658599ba4952c6dcc5d5d6e91a3f0884a6b77326760001d235282b0f476","2c2ba3c5a73a5120f2cdb2c4408deb9c72ee436179cb5b6dcf561e4a6d5af2ae","512fc15cca3a35b8dbbf6e23fe9d07e6f87ad03c895acffd3087ce09f352aad0","9a0946d15a005832e432ea0cd4da71b57797efb25b755cc07f32274296d62355","a52ff6c0a149e9f370372fc3c715d7f2beee1f3bab7980e271a7ab7d313ec677","fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","5a591598dbc4343474472a77e0d4be360afa4292fdf153438f21597d08160ef2","f0cc89db1a41ecc9a03cb5e5b75e65ff134179f919764df50e32144a5dd6aba0","b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","4e4475fba4ed93a72f167b061cd94a2e171b82695c56de9899275e880e06ba41","97c5f5d580ab2e4decd0a3135204050f9b97cd7908c5a8fbc041eadede79b2fa","c99a3a5f2215d5b9d735aa04cec6e61ed079d8c0263248e298ffe4604d4d0624","49b2375c586882c3ac7f57eba86680ff9742a8d8cb2fe25fe54d1b9673690d41","802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","ab3140ffeb8e9c31116d874743137b5b8abe3fdd7dc61e57f9a4af4626801637","3ecfccf916fea7c6c34394413b55eb70e817a73e39b4417d6573e523784e3f8e","18a5fea1117c267f886d552d1e80f87752aa4658ece29b5f9bafdd9794218743","6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","14e5cdec6f8ae82dfd0694e64903a0a54abdfe37e1d966de3d4128362acbf35f","bbc183d2d69f4b59fd4dd8799ffdf4eb91173d1c4ad71cce91a3811c021bf80c","7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","8dbc4134a4b3623fc476be5f36de35c40f2768e2e3d9ed437e0d5f1c4cd850f6","cec2bfc35d76ec2eca3810105673d03bbfec12e2d0764b1562fb458affb5c44c","98fd1ae034dd463dfa706f4d7ef22370263e94c86f6fd39ba303509ca623c657","8f88c6be9803fe5aaa80b00b27f230c824d4b8a33856b865bea5793cb52bb797","f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","90a6fdb4314d40d7f5ca44e848e29ee644e3c6eb2b061bacea6eede45998f3c4","01e3448513550b2d02738c1784cbf088dedb722515982c0b517b08684ee5d6e3","5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","26ae699ed15376676fbfb1ad0d58f38352d549b36e6b7fe8bec21323e1ab9a5e","efb712a45a93ae155f8112597c8f9f738a12c7a97fdfd2bcbc9d4b406b108b9f","01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","351475f9c874c62f9b45b1f0dc7e2704e80dfd5f1af83a3a9f841f9dfe5b2912","ac457ad39e531b7649e7b40ee5847606eac64e236efd76c5d12db95bf4eacd17","187a6fdbdecb972510b7555f3caacb44b58415da8d5825d03a583c4b73fde4cf","d4c3250105a612202289b3a266bb7e323db144f6b9414f9dea85c531c098b811","f77b1a41f9ea3bb4c7a7189c247cfc506c840e0ae05166b9b7182fd91a902ed1","741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","f8acecec1114f11690956e007d920044799aefeb3cece9e7f4b1f8a1d542b2c9","131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","e1437c5f191edb7a494f7bbbc033b97d72d42e054d521402ee194ac5b6b7bf49",{"version":"5fdef5744873e05227f69d0523dadbb241aa2d8b6dd2e6fabad614961b6fbf63","affectsGlobalScope":true},"3cac971310eebb9df8f1d37a106906be30d20760359c7e776ce37ec7e7212781","19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","8d72be8d2b2270cece15f39baf3aa34afd30b7fdb906b8222b15c0663288b5c2","616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","3b0b1d352b8d2e47f1c4df4fb0678702aee071155b12ef0185fce9eb4fa4af1e","77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","a344403e7a7384e0e7093942533d309194ad0a53eca2a3100c0b0ab4d3932773","b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","bb18bf4a61a17b4a6199eb3938ecfa4a59eb7c40843ad4a82b975ab6f7e3d925","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","e9b6fc05f536dfddcdc65dbcf04e09391b1c968ab967382e48924f5cb90d88e1","a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","2b664c3cc544d0e35276e1fb2d4989f7d4b4027ffc64da34ec83a6ccf2e5c528","a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","3cd8f0464e0939b47bfccbb9bb474a6d87d57210e304029cd8eb59c63a81935d","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","3026abd48e5e312f2328629ede6e0f770d21c3cd32cee705c450e589d015ee09","8b140b398a6afbd17cc97c38aea5274b2f7f39b1ae5b62952cfe65bf493e3e75","7663d2c19ce5ef8288c790edba3d45af54e58c84f1b37b1249f6d49d962f3d91","30112425b2cf042fca1c79c19e35f88f44bfb2e97454527528cd639dd1a460ca","00bd6ebe607246b45296aa2b805bd6a58c859acecda154bfa91f5334d7c175c6","ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","504f37ba38bfea8394ec4f397c9a2ade7c78055e41ef5a600073b515c4fd0fc9","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","87ac2fb61e629e777f4d161dff534c2023ee15afd9cb3b1589b9b1f014e75c58","13c8b4348db91e2f7d694adc17e7438e6776bc506d5c8f5de9ad9989707fa3fe","3c1051617aa50b38e9efaabce25e10a5dd9b1f42e372ef0e8a674076a68742ed","07a3e20cdcb0f1182f452c0410606711fbea922ca76929a41aacb01104bc0d27","1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","4cd4b6b1279e9d744a3825cbd7757bbefe7f0708f3f1069179ad535f19e8ed2c","5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","b95a6f019095dd1d48fd04965b50dfd63e5743a6e75478343c46d2582a5132bf","c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","b97cb5616d2ab82a98ec9ada7b9e9cabb1f5da880ec50ea2b8dc5baa4cbf3c16",{"version":"d23df9ff06ae8bf1dcb7cc933e97ae7da418ac77749fecee758bb43a8d69f840","affectsGlobalScope":true},{"version":"040c71dde2c406f869ad2f41e8d4ce579cc60c8dbe5aa0dd8962ac943b846572","affectsGlobalScope":true},"54f6cab7c6ca8402a6d32b9f1dd03e7fae142fed1a594c22313f2f23431f73f0","97aeb764d7abf52656d5dab4dcb084862fd4bd4405b16e1dc194a2fe8bbaa5dc","adb17fea4d847e1267ae1241fa1ac3917c7e332999ebdab388a24d82d4f58240","5dbf2a502a7fcd85bfe753b585cfc6c9f60294570ee6a18084e574cf93be3fa0","bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","1133d8eea528e9b1906e3de927c0a6f5872483da2ef1cfd37df9be38efb59810","4cf99fea6c6aad1e23ae5cb599bdb275052560268a9d1b66f92f2cf1275ee6ff","b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","9269d492817e359123ac64c8205e5d05dab63d71a3a7a229e68b5d9a0e8150bf","858d0d831826c6eb563df02f7db71c90e26deadd0938652096bea3cc14899700","8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","18c04c22baee54d13b505fa6e8bcd4223f8ba32beee80ec70e6cac972d1cc9a6","5e92a2e8ba5cbcdfd9e51428f94f7bd0ab6e45c9805b1c9552b64abaffad3ce3","44fe135be91bc8edc495350f79cd7a2e5a8b7a7108b10b2599a321b9248657dc","1d51250438f2071d2803053d9aec7973ef22dfffd80685a9ec5fb3fa082f4347","7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","b9261ac3e9944d3d72c5ee4cf888ad35d9743a5563405c6963c4e43ee3708ca4","c84fd54e8400def0d1ef1569cafd02e9f39a622df9fa69b57ccc82128856b916","c7a38c1ef8d6ae4bf252be67bd9a8b012b2cdea65bd6225a3d1a726c4f0d52b6","e773630f8772a06e82d97046fc92da59ada8414c61689894fff0155dd08f102c","edf7cf322a3f3e6ebca77217a96ed4480f5a7d8d0084f8b82f1c281c92780f3a","e97321edbef59b6f68839bcdfd5ae1949fe80d554d2546e35484a8d044a04444","96aed8ec4d342ec6ac69f0dcdfb064fd17b10cb13825580451c2cebbd556e965","106e607866d6c3e9a497a696ac949c3e2ec46b6e7dda35aabe76100bf740833b","28ffc4e76ad54f4b34933d78ff3f95b763accf074e8630a6d926f3fd5bbd8908","304af95fcace2300674c969700b39bc0ee05be536880daa844c64dc8f90ef482","3d65182eff7bbb16de1a69e17651c51083f740af11a1a92359be6dab939e8bcf","670ddaf1f1b881abaa1cc28236430d86b691affbeaefd66b3ee1db31fdfb8dba","77926a706478940016e826b162f95f8e4077b1ad3184b2592dc03bd8b33e0384","b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","8e59152220eb6d209371f0c6c4347a2350d8a6be6f4821bb2de8263519c89a8f","c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","9688c89e52b4dc1fb91afed9017d78610f3363bef61904c6c17e49afb969fe7a","8e37346c06e9be8259f31603bcdce21692c2d9de3cc631e8616eddb1e67a349d","146ba4b99c5feb82663e17a671bf9f53bb39c704cd76345d6c5a801c26372f44",{"version":"b120ed4f9a22ae1bedfa51c1e32b91b4d62cc0f4153f8ea94e4effef131f1c91","signature":"adf6fe412c16e9e45ea754c7ab9531a5239193d224e7d0d429084a47035f085a"},"e445925e0fd83eb686ed51fb51938e41a1989c972c2b987a04d258b2af504861","1a726b2c0314984bab9e7382180edc5f872319b4e3d5c6aff08d110879a09f48","be8e983df34b389c930466fb29ad63fc3ead5c329a0858ea7c0243de191a2d72","63634c0855e639ea7f609613d799bbb0dc774ec9f3242bc272c5567dc5ccd485","b1ab57574d7e456b1e6b54fc9d130e49c491c66b74aa4bf59541b11f3d93a592","fab164d6d6ed0a34f26ea0df13452cd1f32eaf2c91edf0d1e9ffb42e2effdeae","f92d63831e5b8ad4363867601c7391199a62c9c15e6a0d8b6495d3050b9cf056","17fd55c3a4308d80ebeeeae1ee0e6d00a774529f9e8d1bcd1ff36af7b2d0c22b","89c66198a7db1a95a5a1120573334d9963eed7678e51b6b84eee0e0ae612c5f6","7e7f1c8a81e97afd21ffbbed1d06139bd0070059f1073a6067b668d31d6b317d","12add8b9d557be5e629d76ab6ec73ecc4ea2e0c77df1c47ec1da89cab2be5dbd","e78dc861b240b78ecfd349c43e29ca4c4e85ac024d6734e97f65f1f84a4c4d65","cb14ca1f254df0344f717d3e5a832736377410cfd786a0ba59aba8e76849197d","f5742eccfdeaa904e6e7618b9cacb5b4669465718fcb10cb45d0cd071fc0ec84","e54fbc8f58130c95e75dc512fccd01d3df18ab6db1f1075f5210e084590b2961","1a2108b91af6f1ca36724cc5bd6938a654fff4810edcab5663ad952b677862fb","a69bf85101e61d32dbeb1d9bfe8f9f733494af634df01d3c1bc54c6649d928d9","d364c8df7d52199f5d011b4ded96f36dd114b984f5ee2e50ffe7d30ac1ab4bba","408f9eb3c7a3533bf5f07e0cde110a5ee0702864795ee6727792520fe60320b6","ba79eb15c36ff23e352ef608ceb7f9f0f278b15ad42512c05eedbe78f228e0e4","4cd233c6af471432253a67ae4f3b43c85e58a71418d98c3e162a1dac975c68f6","aa77c7d8ddc961e8192bcaa92da140e1205f8aee78bfadead5f52b8844d7d05c","37e37d3a525a207efab5458069fd9a27a174d2dc3af729702c81729ca03a349f","e34b123b5031f7625e989c64cbaffa0e83b4f24c5b828bdbcad8e4c62730d9cb","d59a6f62f52d41368b371ff1dcdacef0fbc0cc1cf723acec3a2d303d4b2a7bb9","e81ce9f6be8f155e1ff89b8f4651614838d53a8559bf67d6a92145fe71451178","48c022acf7a664fc81a3296858f08e2f70fdd57404f2ccc88bb951dc94311939","1c71022b316d12a24e7042e51b9f525ecb3ab111e7087611303e3dfcfcf22428","dc87f663539a32b07441a67a297014015afd404aa48e557b2e6af1c0644c1494","7d2a91972cf0b99c270664c74021d9533b1f229719e0e5b3939d5430eaa976a1","72bfff3c2e5d04586176ce37855637826e76b8b4422cbb842740b1d49a138432","8b77e66e13173c937057d49d3a4e5809749e1a419acf1260ce85e02a6d1ce7f3","8b7e0ff30162a768576a794a0c578f956532bc7218760973ec60f0f224b4bfa0","a3c31ebd8cf594b895fb29574920a0b7e14d66efc41dfe1bb5ad5314a23a565a","ddc39b9c961b8f60e24ffd5b5d2694aeb3a22ab919d759af9edd99f348119ceb","11a2fc001a1001badd5299db7b34f4abb97de1f42d9acdba386e54d36125d8cc","f4377e81d50af3f689cc5dd2005be3b79dfbbcb3f5a0301c843e8daf1cc9ddda","e2ef2006aa0a9b806063cb510989bafad85e71f21cd7e25783b8876203594dc7","67b359bc54fd9ab018ddda5811b1a1371da9f2ed5ed4bcda3ee4710c34a3a170","0f9bfdd25e2e13e6adf81d98a2909fe1a7ade6cdcd380bc7c9a259effaf3c295","aee3294985929388ce1df1149772c2c52400701f98fd61494391f157ae629e77","dfa51ff1c0469326f58a48a5b912cf7b793b1bc227942a25828e7c43cc42773f","cba42369d4619e16ededa913a20727307f0017ea58a6ef628eddddb38a63bb0b","52365986f0e040b736ea703bd39392172b0eb7062467362e2ecba42bc690703e","78b8b30380a91a6fdeb0eda8b56b28186a6b26dabce9fa2b18f552f4cf942f87","007dfb1f314277f6e211fec9c5f62fd182e3bb76f1fe1f165228a259ae0b91b8","4e2f8436dfbb28bb7bb1a79cad02e9c209fb00edd955e73a06da0d7e6afcbc8f","03d662d47b7f9d9bd15d490e5d0b512d981b81c2d1810d761103a791fb03490e","ba7b9073eb954fcca955f2499bc69b65af893bf15776be19b73e2d3c14098936","9675dbe94ec2f7cc7c25af1a7cd45054af9e08e70802808b62e2b67fa9b84b7e","de1658bb847172b0af0ae080174513af21425364af9603d043482d492aef3186","40a8f35cd291f61c85d9f6f94fbc44f8631fe74b6367f6b90d19701cef941d18","02d8819525347740d730f97c29f6bf105f54e0c8ec63823e1ce28ee2e4bf254f","f5861a6a8acf7e0415a30f9ce7151110206a412f849ca3a343b2f19db12f08e4","0d7db9b74a017be10aa36509dd2ae4499260381aabc6772feef677fa16f3a1f4","e59ef219cec3c3faab54d5cb12222a04d3e095c84abf94088920c1584832ce43","262a347fdadbfb51267a6a63093a35f2239e3fb8ddfd1cb9bfcb64e966fa15a4","99ea681335aa97ba7618ac3db69a2e2da87da7faf8a39f822030ec4db96ca023","d7169a2b449d5b8e309edd84624649d04b746be48fe93b2e69bb7a85653b1e97","1bdf28ec59ec9b10a947ea6ccd8413bb4bada0497d0fdf1f6c02efc29e143fd3","d70f271fc658d63008e8e5a56482b970dbf68e86de852ab200cbe9f6cbff87a9","d0e0354d3d4ac41cb7a67c10ca59652f8cba9eeb0929fcc878e492691f73d02a","d5442a1d527f1068e221e7dde37d15b71f792aea7d79929f61dba9c22dbed20c","b504376c32d2d5ca0709e88a8273ad493f895a74efc37ce306ac667dcff66d24","2748451f1cb5d1594fec48577685ef0cdefea02fea292873b9ab74aa47ff57ad","b9c9c9352d6606fe440735ccad134563017fc5aff8dcd418c58f778437339f06","1ea3444088a0239eff0235b7092b522ffe45f44a05c90a3f73f06c8712624870","789ba065ef896ad4913de65b32ce431c3ea8a116fd91457f97881ae8334788cf","b062b7f88e6dd4e055ec4d05670186ad530f797994de856cc9bfe25f14cd4c11","a90552f1df30087059d73ca2b0429980b967706653871ef7c50eeec78e6b55e4","d0c159d304bf4fa619aef88442903507033f2828e71444247a54092806314143","8dca0dfcdcc95af084dec1ab5c33ae65df4d4c548c88dd191d24b17c2b2ffd7c","a582c8844a6809984a681db3997068d5d8144bee3f889c5240c559c5502c165a","f90a1a591ac90d16708ae3be46b141abf6969520b1618d0bb7fe5c07831d7552","ede7ecc62da0236596749292448b282d9c5e846c95e107d6e87720204b792250","557981373fbd676739d62fb4aa7b601a639bfb39f7b563ab2c9a2350aa5d7298","078045f76bc547eeae562dde79c81e2565be6fecbdbbc4bfbd03fd16cfcad523","d723851e858c08e13076ab7795db9a555b11021bd80b204ffb70b66128d49f6c","114bcf10cd1c7a7769b2f8a762e4c8ae10ff07502cb28ad983ba2ea36e645198","f9dc63ebfbea835824cfe09c1c7965bc735a9425180479a74c510b607cb042e7","131906682a56016d19849546fc5f9e0076b4e35bc2c5af362d79a50998215d4d","05b2d05d9566a3454c37340c68041dce2604b7917ae6bdde8c41348a586c2e2d","a5f126464b0ba4238320299ec5f54c0381cbc089dd00bd768dbd85bc009f8c7e","48ff4dab14889a41f5b0b94aacb853b96f8778888167625a42ba7a45250a15b7","de99e780712ef38ff02a4f319c02b3c44e412b9ac59c90d102b07b7fa194321a","e3a0cc9f92c78efef219cf40fb7f8965499a45ab7aee28b46daa2bc9792d0944","8a59602dc83ec951feaf5cb7125393d3ebe38914c921e07ca0383a63857435d8","ba9e34993320b955c8353e41ee7a2726256ff595c0588d7973df21db09f92289","14e3d141c66a44d32beff51678ba0abd236e18c520b12678a73936e78955cae2","fb91c18b518f80275dd38a88987e27af901f5466ba5e10f8ae97c855cae5686b","77bdbaa60f9c09cacefc2b4d66a4947b338d26445f4e6f44ce99c393f5afa66a","3f8a3ef1f98ff6ae80d447f36c32d83ab1b5fc54be1b1f653d6b2039b15c4a28","6b7de806897d8442574ecf803ce30853158684b55569ae3e6be1c1b9267069d8","fdf5f54d0094325e7d6ec70ad24811c3f46e3816c4c839a3674085267865b951","eb88e1cdc8a3f764ba80cdcffba821cd7292556dfcaf6c7985634b8016b4a399","bcc4218ae8d2f99608412f5917a663c7c764da0dd63be12d01ec49bf0148fe70","51da4ebc5fa566e81460e1dbdb0438ac591745bc960921d6188133df610aa131","e6f70e3c94d2b1d7c5112ad6df2dd7c2ae5dc81bc89510bbdd4478614cf80594","4136928c1cc5825cd17ecce5ae4a1671cf0047679e452d4886cfb33e74fed5c7","bb31efb4010197b69a52a016d828d48570c923bece4bfbb8147a08182ec0ccea","e67731d353b0f48ec4c7b1cee2358e2b7b6ea56c86775f2f3c07029b73b8bf06","33307f3355cba6295a0c7e649fd8386f3af94ca48f1f498b7ef35ec9d487e0c9","639e7fd024205c3c4af58bb193c1d7790618fcb8b70e9b15068c647ab729ee3a","94ae6d32b6f29fa31c4d85576671127fb24e2071032cf699597a63db2b17c2d0","ae4ecf681962b3196089304a9879433cf5f096fbfe6587c05218322506ceb39a","f5dcef5516ecd8836256359ed4b9c6bb8c73fcce697d1c343b11ee8e7fd15a8a","e55a68bbc963c9520f0492892d642fa145d34a351d483cd144a11e3346c18cfb","da14f80dc904a20fe5a98009f117d8f977ad6d50fdab685e75d6b38322ea56cb","ca90e5e191954b9b8c43ed5d5bc787107c071315c4acaae515e7d918e8814e15","8ef0c5c7cba59cbccd0ac5e17ec42dc4a8250cd267f9cdb08a4dcb1a099068ad","63ed74c721b55f614bef2b233b03c7e56377b0e38ea16f1dc3fc57a06ce2ca8e","6bb69b99541614e7a35e4188f15676f3d99e7dc7bb0b063cde4ddb58e8b3bb69","fa38196f1b83a928d4ecb8a22c01a6695cbb0e4b200fbc2900d9fd25ff30a604","1f142b1a6a8b7b29da43a88c8a5f6bbad28f7cf1b67457596ab6d71bed584e8a","64191887cce455c7a33e6aedb861f133a5ee37d7b3539cc865893a442150ebdb","1da519c09135b1e1a875121f45f1e35fe94f406180e18bc0f9d49f786c5f69e9","b0884addb79507ecf15221794b6d4d0edcf914d1ba1b7bd44446b7f1fe1c6df5","f4b5a20f252a7da624aefda4c2b9ad2a654b37a95aefe755ae25373a07f397a3","6e5c043e2848b98d5bf4409b2554139e92c1d0b986dae41815a3ec1f35da3251","d0952846062dee6ccee5bd9039c44fc97ca64ac088a7bf1ca4bac3466acb148d","2551f07cc76e42872cef2981cd36a7ccc3965b15f2e6029fb31ec96218a63444","a2238a784eb5ed32dbe062ee9fec52c62039ccfb612ab91ab7a70e935bd743d3","0242617a0ca16cdfa6fcbbfd1d2ebbc2de1a674a0dd534cac88b04ef6b1d9fc4","458b06caf4fe713468ab73f26b21d201d2f31fd6dcd86fe3af6da656e003b92f","498b8e59b7659c0ce11ce3323bd0d23c923e21c7290e5bd96ce0f3ca639fb4fe","59733f6275a05a9e847cc171df19efeb315ed1e48a4eb827adeb009f9abaf59f","657fb3c1533f8f2732f0c0bcf70445ff133660a8804a27df00cab5deb4dc931f","3245ebb01b22503b1702494bc6d6a89fd03e296a105e51c6412dcf3988d5ef66","558e5d5e8359f47f7750db037105de483b58ac8b2e6a53a4905e200d6d662426","b671aba1c5ebdc31185c56a733d0766af92027a0c02b783eaac7cf0f68aae40f","146e5c86d78b4a7ff6dcaf9835b3a6a639dd414d21a30c69df5183bca5596d15","89cffc4677f2efb56ec4085ea1c6022bc6f67438305eaef813b2e48b88948edb","3f2a3b143fafe71c581c13fc479dba5b0b7ff34993f87b9085d87575b53fc993","2e0bf302697c27360a0e02489e4086149eba7e6e1d292140d9fcec0fa7d1c130","6806a8f9b9262f3383ee54ea3afc3758fa42bac784508ebe23944b5f95d21d1b","798274d7d7f9c24c87135abda18002051780430c7a073609bccfaa46c04d70d6","b997d28f044c3f26fcd64e042d0ecb79ba5437a97ebf4bbfb78bfc76b1a7913a","ebfb70362439daf995cdc182861f2a43893c5f001d27d3a7d75f29577d5b32c0","265f98f1798cfb9064ca2ea60039fa0a0aa7e8795e84d204da1ca3ed5a35c26f","38ea47f31a7f49087f0c46e10efc1ca61fd0ea64f952d5f1fb6abf78066b917e","b95cb3b09a81a874e366c4e3c4e509d24cb70d370751ef61adfc2f0579164672","1b4f81a0a3b12ac745cfa0b4f7284d1598b3bf77f0e4055f4bccde31fd271f1c","1a176b3032ec0fab791c658844c3c1d3df8fbe985b194858c8b31d736781942a","fb30f8a186fe4300690213d536f4f176baa88b990647e798ccbf9325a6ab904e","f597800b0301f41012f08c23f280e9c91e33bcad06aa965f1a03188f787d8496","ff787719862aea0ef42285526e17b66c8025b6ec93cab22e659cc234249a5306","7d1c2e2c0784dcafd6d705233b51d0d7a6686a63a42e3956c782341416cb2985","989b6e55d84d718a0f94688d1d851b1f096005fd4067d51b1abbf0e9ef7ff923","16481071673dfbc333ef3e49e950b734f9f2b2a7febb9de0ab12afa818508cd4","981af6a24b8e1531dd933ff6df096a7a50dfd79f24c5e5be1134b684465a807d","d3b51ab522194f5ffd145f57fc2b2017e35d11593a8a5468fd3da7767dba0d57","5839eaa3667a99a1bcd0931011b77d2a769716de478259e446da1b6a5d31e1b6","b0bdd8c96fd293bd615f6278679edebf2c34c28083c3dd0e3e0a86338502bc75","367ef08f1d0de5ec4d4786cb8a1b8a17abf395bb0c5f8d151ec10fb66a2ce50e","5f32b553d3edb41069f26303f7c2a0bcc099d71131e5a6e50457427376fc3abc","954344c53a5c77f0893be3ffa33e7afb7535b5306324ce5eb0716dce336a9cfe","d1dc53242486f67bf1b21f09bf14ab1fdb5d6ed69ecfbedfdcc3483420553378","4ea2003d86a9c68928ef069ce548c3e6ae35cbcb34184a71f1c566dde2160cf8","bc2e41a30f3c889d2090f5f3fff22c0afe02d0aea801bfbb0eb944d100ba4740","af415838f54d096a6aeb5ff900376c238bc29e052e7b402eb01f12c0bc88851a","45a85426a534e585855e77321b0e825631bd01e78e484092dd9f17cc686f22a1","d634f163e9656e77ee3d7cc951ae008b18ee52f19e4f5ebfd3ea9af944a0d439","b5e5777be11316af51e21b9ef8a67f9db0a4cc1cf466f049558fc18f723f8f0a","b8cdf49676dc1daa92c941bb2a369e83c44f269cb2569a033c824ed28b4629ff","d32021e805cf7d44e3b616acf4a4be17c4f7304f7460dd6790251b7713bb2661","2b881659708008e1c27269e1eb8dc476af0c2ab2f1fbf50f6e5f8cb6758d8b1f","6b45ff7423d3055b5698034d4d3c7935869191da8c427026df3a9fafa1ca5abe","4e674ca19508130b054da8d8c0f180321f5cdc5dff0578168d6ef2ae1a562bf2","0458207418024b0dc2ba21237624a667aefa5dc5d2a6dcca8412ca0f034acf84","1cdd01aa05004d8d0b73275ba4f394e7fe4a05bbf03c617a827db97b13976de6","b63cd2f955dff89ce61181943de6cb8490b7e2a810724820cc9d6a24abdd3d58","e6a983cd47050921af05988b1d868cae48d23652ebedb6967d04fb139cb4fdfb","d02a3804492bc097b5a4f50be35ac8ebe2bdbcdfa8e9d12224c1f752139aa635","d021f9ed05541879a64a24c5d47c941929069325ca6860b41cecda85d304017c","165caf761f2660733f0937f73dac461f48ab2f916a36355621e9b54ccd09affc","d6df5e5751065412406c2cbe82e789c6e7b5c5a08f0b360c5b885125675dbf8e","58ed0a6574485bcf18d4d775084258ed49f7b92ac9f8735488d19ab14bc6db88","74493d5a649feac02677519ba00d4c55b067be5b039924a6cde3cb97bfbcddec","0aa1ac9acab2bc96a8b979a42095a7262b6d0a5606719782ef48fe57c7c911ff","fb18dfd145c45b4d7351df0c28ff928d2b1853ba2f229dcdf415147bd4aeefdc","fafcbbf841b79d844085151eaf9e7604eb2525afa643703313b0a90157d21732","0dec6421ca6c43248380dc050b147bd6d5b7560c5f73d130798c012f18fed9b2","2e9e3156a2eb8042af3099cc9dbcb8a9c070ee09611281a7ef04e19363208f35","204ef1918267feb2040caad874caebd9bbf4f018367517750eeae16d880b0698","81de5a1ba1264fe9b3611ae17cfd2ed66442807aa309672b2af6a8cc6b73f78b","c4117a326ced8cc18ed60273de14f4c5e78a53cf2c59092f6278a8afca8d9ced","60266052b7b75e0cd05ac8358888c299382db2700d9e32831f9a0e771be9130b","7f8aea1ea572ae30f5bf272e51e596455c314ef1d6dcc6de4866c447c211a411","8d739a4a3b3afb1809d4169313943c4ea1bdbaca81e2a9090668977bb576c399","3c468225033c4739d7d6f8db8b73037d8a83998702fd2a74f4e8cfb4481a9630","1d8abcd0e86e7161c41961aaaccc6b7736f4d967755f72562d22fa4fe2cdc5d1","b1ae559a876cc54bbf319cccb4de11341916f78d58b2a9a5fc605d9f73b5111e","327bd64d00f77cddf09dc714ff99e50dee0f1daf9cc42a161e6f431967e784be","194ef24b89f71f57cea2c9aeaf9d7e95b68bd9356f432fa0bc1f52a13ac0173d","03a5c9f608043f8284d2aee7b8e592cf67deaafe8e61e3bbc8743856a1c22379","db8dbc0366bc37b9248edbe95563c735a64ee088b1b9852878007c965b1c8fa3","573ade8743bfa15bb221abb19b3f4e8020f36fd30cc9194d8fe22e4c9d28f776","3e0e8e0746be5d4383bdb76c1839c9c9fcc3eba9a46faefba6d7f7f02a03232f","5870bda2dbe5343202e00b07d1fdda410138f01ac7383bf589552adb018f5350","b3b6a9ad94202db0532deeb98a5537e5e071fe4456e260d86b54c5a610206c67","1c7dde9d6e45e71504fd8ba6a9c29db164e7a8040bc1782c2a80a3098d0a86c8","a1db108ada140d6a6fe10ef81f73caa7e98e69c9c54295c2d29a52e235b1cf5c","695892d33e640a0e97d5bdb7056b9aff75c8efdba2516fcdd99571f03c5463c2","93b5f429a4c8b814fba594b36200c069a52dfd688e291a655be6a5e2ca0aae4d","db83bffab4b2111ddfdb7ae0d966acb5f43ffb52bfd88913c2b0a64dccefb778","13fe1c28d73d9999d577a7aeb74c01d74e828f4decf007c683d646f439b38a3b","b4472f5fd0f9126d6e31ffbbf39caa7052a3544d99a38696a467ac7eba0aafc2","b56c1388d639d5340a671b05d97699f2aeba57ee6daf9f0e2fca2d8c20a96314","e8957ac616d196b7b30ec28059ea6975a83bdc8c36a576357bb7e268b335e15c","2c42908ad383ac664cfa8f2a1f225d4271c01bd29f98ad89d16b8e5da67d9cd0","7a2a5bd1aa0e02669fd92be8fb0dfbc8d9f53e663e737b649a35b598ac966a44","e90c29fa1237855da188129b9de446585fe8a94fea12e6bd6625217f95c11787","bc0df2ff2619a2c3bbcc8a8c88b91a5f626c5fb16c7ece9dee298c3885c4cc3f","4e035dbcc3086ab4591700ef6884cc0d1e3b890286886c292fa6a74488259304","62c9a85d5dc9da38e54f1d802b7b62b82170f3a4571e3c992f1db09f60dce051","cba008b7f9f3e3d610f95b7eb3dcd664a4b8786bd7c5cf48530e6acd036ec501","b088128c5d4dfb1f631748cd1bfcb851a4353c6194a0987d4045ba8ca21d529f","45838ed95cd44a5c26676b86701e25b5b9476ac4dd8e409ffb2c5c2d914d3415","3b779284bd374b128d63e3683e277f1213a02c3db376ce9a6e799915dae0ba8a","fedcfc7153dc392b7718f0ba2493b3fcb42c6933a1e1ea607c96598bbbe4f845","016b362c5eac3b7b50092ef6d91de958e5969fe49e3a1895f89a4e4e5e52bac7","6c001c24121698daddb92a89be73d5dc1c609c802f0632b6980d0ba242052755","71f4c174a3cb45ac502cae970df6583e54023f7cbf4d4a61fc6380cdbc4b84f6","8b3ad2f91aa958cd0002ed7a5e0d21b7e1aa9b89e0dc09b007db80b917c7fcf8","83b70f5af2f91cdd41de414ff1525daaa3a340b7f2543000a78b03375de5c8d1","4fc769ebb3f66e3563d4f32a275f0a3a8d73f0ca9d92eb54c35b89e02d62a228","e5d4145dde23f54fb2094948be8f1dfea78d0311ff7dd4162f6eed2754464903","f367d161fddcc21773c0ee482a7d6e36636262a18218564495ea71e58c9f3726","576974bcccfca88086ea2ccf6314a0bfcc7c53bca41f936578d67c08d4106af5","f2110740f07903d703a287e731d9a620fa1950ea561b311e3a737d4ecde0ef9e","16adcb77d3a37fd2d795e10ee7348ed4d63b9fb8a366424c058464e3baed00c1","4e6877f1d84c2fb6a238e710c1312cc4c6f163b2beb9680ef5c3f03f40b6a6ed","349e5efa10816ef7850034f61d9154762887694a225a0e55c2fef16dbf13cd51","63b51b357fd6fc54a7275b6e35ded46d2905de6fde71640e8760c6fbaefef658","ae2ebc6348191392502c7d0f2a9af7d8792478cf666c36ab32823f3475f2adc4","cb90c9b9a98da562cb80e080104df0951c0594ac720a0f94dbbd0aa40e40c0af","8a934941c373215a11514d35b86eb937374a7522bf687ea30ab7125ab5db68d7","97d06780fd17e57c2318ea990180006717cde80a4c8f609bb16ca02932c2a2b6","072f0812286f563febc5a47e2a2d7e4921e1491018180c7087132fcf947c0c88","662dd05fa195a43480ad3f5481dca3fc832a03834caf3e7ced4dffe2962b7669","67b7b30a7212a96842eb4507a3bfcae342ccff738077efa07f64ad1264f1e3d2","26f0d4ee4506cb192b08ea69190a3d2700b9e7d2d279cf4f0b9eefd99148a08e","c9e7a7dee15579295eb362b2d607a5875e1a579b63204d529b5d3fa56fd0a0ca","8d846c2c8c9ee88751b262da9f3c15cfc4c580bd83d70a1341ba330f260b82bb","d5ce86e1489e2818a06869733186c88368424e8cc8bfa6a3f7e1643acbeb8a1b","a09abc1573501ffe5912f0df8061599ecc77f0b7176b56898940e602ec4d2c5a","90805f9a9d127d00f13f1a1760bae9d4b12f186a6baa9046aa4ef56f5e65c302","9622bc0e09b0b17f33ba668c3735cc4c8944ce31570c25765926f030aa07102a","2d0c96ac42ed9a55c08c4248962a658c668abec3041b16d1bb09260d4db97457","5f16a4cd457642bb969bc08cccb878dfc0f4710a49071cfea8a5e3fe3868deda","a34c35fa22c0a239de442a33d211ba5647d5003523d95cb7308f7881caccd3f6","81d1b275416ac184f33884a9df96a208ad3d8156ca20d8af09c488314f698da8","320b8f4b2c9a0e18fd4dddbcb2d27419b9d8473e11f6f207142b4321a2a87e49","5e840e3cec27b382972cbcbdc4fed63acf47d342a9ba4e556fb1b8d73f168164","86b7e0f835e2d550541c27e03abf5270a42f5876e1e915568289142b317a0ffd","6f4f5fa4f5ca493ff51d1dcefc8daa2fa7c66310a2ce4b031aa6ccdcbb8769ac","ff880b9eecf2e8c256238b351fed6c9c564ad5df1855b2aa5c328bde58a30b40","bfecc43946d35f9b6dc8b0bac722f3603c1a2a7d9dbeaabe0a0e31ef99972d43","52cb5d5beedcff01d5b851653cfdbe9a8e8e953a8462a357e71d93eee3ed760b","ba6d810e67aef7d6ed15cdd8223d5a207a111077c88d99ce7af5fe959a079803","f987eff1de08d6fb57b24ff89751bfb006ca652b68d4c2fd948f96ad052aaed6","081d80042c1055759a17dd51e9113ea204597da04232113cad32252f4a47e1e1","8dca685094a6d7a0611c514253def271daa4f026519241c24113d504033412de","c9aae0fa87ddc03601e3bb1d7d7a32ba337219039b30c9e9c86ade440c44641d","9334b283bedfcd488ccb33b3e942905c86fa163e919653a5379eb8f28a2d5f7d","f3f62eb4cf38d86cc7f56d0879b49656a21f2eef4fd0acef3936889327d7f256","593ed707d6accf3621ec6c362b9db321ecc611253ae6c373a8b137ed2c97f15c","683734687779547527b05fdcef60947f6fc51758185d788531e9ac7bde84fd6f","1df375435c44c94f1bce343de4ff81b8c82e644d6b33a801bc6cf4beceb76b71","54c9acb7dfd2ddbeb99eaf23386f278f4c7dbaa8303e636daccf961b08036eec","76755db046290dad61362d95c03b440a0feaf507edfb5744304c7f98c81faccc","0590c956dd4a2dac90b3fd04150cb9880e2c841286b011fec53623d0e47d708a","7150b4a18287da2e25c68a12bd0cff78f6141a2425a27431a10cd4a91cb9626b","37cb746941c787283cc81c372ac56b9d1b7cf50d62376aa68ab6a80a4db55828","78b758d401e53f5319bc143ebdc7714ebe0f1e94fc3906d5e93816e5736bf299","ce50872ae30242ed1ce2ddb9d9226c85f17098e901bc456cfc365887ab553127","4f36fdf826fa2c2624974331c90656dfe3ea4c18ed7e420dcaa728429a8d7d69","67d637a46bf2eea2894924b06d73cd52c9c3833256809ea09e89282141106cfc","d31a29e9b2c8128a689105215a89de535bf63144d42b584fe4150d1c8dce12a3","610242715bfb54d836e3fd9db9042001ca28fdb0838ecb86b43bb99376b639f4","0b59bc43ab08b3bb00a8a4978683c872fe4c6c3206bc68316ff7a3cbe70d75b0","1fab3bc9db401033ed6ef6dca9114b3a0a875b475b6c1b2ce52efddf3c4fa130","269b37626ed3fc5d6aff2b3103bfecdb86ab69e5fe28933b63a17ac83a547ede","fda3e69c4cc007f8a8048a1368313373629e59b4f53d9d4ed960454b0f763e18","98fe9a0d3adc98c4aadc97a5bcb8c9589525e16e82e6714333e0315d1ff40a12","941c51312144ba38e2d86c081d212bc1f22f64eeb1dc342a1c7aeaaece7a7770","74b07a1218970c15bfe478dd16276745d0b0721189a31f6453ab5ee176693179","4f66c595621f6dd5c693d12c122def1c9eac9c48ace86deeb7c1a0fe54d63c61","1686e8b2a3bca066aafbb9bea2ac249e7205af7e6b878955741c66b3a4eaba63","f974c4abba2e7ae62cc358c6c1589df489406ef517a48355cbcc5f09cf11d8a8","33cb723eea3ced280f163fa717045e233b801081a64509d4d59b47620fde9ef5","8c357660e14e4ae047c44211f7d024d48eacf3d5ad6ac805095a436a4d3e268c","e2eccdc38e22cc3882939c7fca91570a8379112c03f6206986e0bd78afeed21c","58a60f1ff614a331f5de62b4a629b5f41066430f7b72f65ec27f0cf841403c9e","5bc082704f82c799759f9c6b84bd23dcb4df0cb141889116e29bdf2769c12596","e8ac4073fe7b469e55e1fc7b1540363d5a99b507839135fc97cfe5f2d0e36595","0f45169be3f2e0eb418bb1d5d480aa8fca7375af0b6e51dfccc3afbf77d9ef12","25699fd6154aa1d8ad42dd7739ebe65e15277c0f44d15ce6826cc43bde4ea5bf","b22349e111e9c584e9a0a1cca564f8c8e7406ffecaa454508fc34d365808fc4a","802353808bbaf39f8ce455fc7c459d39f13a2fefcf6f18a78c9ea0c61be089eb","a057b62631a72f836a8faa37332f03324b9610bf1bd7781fd6f93be063cd10f5","76c5f9421476e8762a83f970028b5b7e9ac13fade254d40c04c188f87be8fd7b","6378e4cad97066c62bf7bdd7fb6e2310f6a43cdf7aba950a2d37b4b0772c0554","e88588861f78985ee212de6a72e45b445e5e04286b4ce1eb1d28d72bb781e269","7da9909a1c3eed728b11012b8032c4b1316e50912572f6408e8ab5e2b55706ff","3d594041401ac69433c4a2ee492d356db4706adddd4f8201e7e5f542e58173b2","806aa43416ea1f5265e1cf94168fd4902348762aa8114dc53c131cff9f87b5ec","f27757e22127417f5daddd0ad4be81d5a743c95576d8c957ce39ef02a6cc1ec0","600b257ff8a4e6a5f072278d9c8420bd43dbec3183ee164e7bf2ec29bbc84f44","3393267ef00640c2d431da63c86f160b8fdec77888ea036ce2a5fef3f4498297","1a726b2c0314984bab9e7382180edc5f872319b4e3d5c6aff08d110879a09f48","951764544f3d43eb6840981ab6a38ea614b0d02ba85e93ac098e33cc9cbcd16d","ce0fa2aa08100b77cb6463bff955bb3346b1c349fc8aba5480c3b99218be32f2","63634c0855e639ea7f609613d799bbb0dc774ec9f3242bc272c5567dc5ccd485","b1ab57574d7e456b1e6b54fc9d130e49c491c66b74aa4bf59541b11f3d93a592","b8ac292b9cb293ff00cd2a93c2a16003bafe80ee072c12855e663ec3727638ec","0bfb3aa49673701e21ecd4696499c29fe2dea5e0bc641767885e45200263e662","17fd55c3a4308d80ebeeeae1ee0e6d00a774529f9e8d1bcd1ff36af7b2d0c22b","89c66198a7db1a95a5a1120573334d9963eed7678e51b6b84eee0e0ae612c5f6","7e7f1c8a81e97afd21ffbbed1d06139bd0070059f1073a6067b668d31d6b317d","12add8b9d557be5e629d76ab6ec73ecc4ea2e0c77df1c47ec1da89cab2be5dbd","b66f64931b7d840839788ad332760b38ffde975a5193405b5f61c59a0c79229b","cb14ca1f254df0344f717d3e5a832736377410cfd786a0ba59aba8e76849197d","f5742eccfdeaa904e6e7618b9cacb5b4669465718fcb10cb45d0cd071fc0ec84","e54fbc8f58130c95e75dc512fccd01d3df18ab6db1f1075f5210e084590b2961","1a2108b91af6f1ca36724cc5bd6938a654fff4810edcab5663ad952b677862fb","a69bf85101e61d32dbeb1d9bfe8f9f733494af634df01d3c1bc54c6649d928d9","d364c8df7d52199f5d011b4ded96f36dd114b984f5ee2e50ffe7d30ac1ab4bba","408f9eb3c7a3533bf5f07e0cde110a5ee0702864795ee6727792520fe60320b6","ba79eb15c36ff23e352ef608ceb7f9f0f278b15ad42512c05eedbe78f228e0e4","4cd233c6af471432253a67ae4f3b43c85e58a71418d98c3e162a1dac975c68f6","aa77c7d8ddc961e8192bcaa92da140e1205f8aee78bfadead5f52b8844d7d05c","c9b67818d4e8e06001a874c985698957f3994fff1ff440da69590f7b19855653","492ba56ba785e26d4174aa0814f3eae8bd43f5db0e959c3814b81c27de8ebe7b","d59a6f62f52d41368b371ff1dcdacef0fbc0cc1cf723acec3a2d303d4b2a7bb9","b9c9c9352d6606fe440735ccad134563017fc5aff8dcd418c58f778437339f06","bf9c796cfc71ab05f093a2e44bef05744b95dbb7b1301944c7c63e76f2aa454d","f5861a6a8acf7e0415a30f9ce7151110206a412f849ca3a343b2f19db12f08e4","f34d7445193463dd25a1a0bafb6ad4a22086e9ff2148a3261cacd1094f600f15","a336c530b4d9bf1ea6bc282ba3adb1346ddab58cae11aebd3a888af82ad2db0d","b4d31f42f67b81c98e9ddb3e93998d8672618f8f4855d5005a5b0bcda0931754","de7efced9de20c2a619c746b245bb67277d4e6b863d7b82499252e63b87ac5d6","de1658bb847172b0af0ae080174513af21425364af9603d043482d492aef3186","789ba065ef896ad4913de65b32ce431c3ea8a116fd91457f97881ae8334788cf","635b18d159fca7fce6c5b72c803936f98d2c601a3f3fac92f59546dd7a0ef4a1","de362d06dcf4b82f6b46470aa3c5fa818cc4f0e2123efaeb77dce4b26a3b016e","27f3e83ef49a9f7fc46fdb0108bb7e497404504566a4941ba1a5e0cdbb87c22c","718f62a13fd49c830f2b1af32765d45d9b04e6f4daedcfb767954e7ec04eb0dd","73f4279c9cee64013cd9f6c9dc9b4a5c1f2d4b1dba25d3742474604aa21637f3","c87650ca7da75935a4e22450176a4d0fc3a403408ff2f4c6a50e0c90e0def293","be7f2bf604358013f9673f1a9895d61e8a390055384fb01790753dedb8c675f3","3ab38741b93ce1923bad57ba5dcb08f19b000d274cdfbe9a8cf8d89244d3808f","0b700c867077f8a61ab44ec820a05b95e684d62c3b83cb62005ccae09386f268","e2ef2006aa0a9b806063cb510989bafad85e71f21cd7e25783b8876203594dc7","f048e90bfe89c38dc88f924e9ec9a6d53726854167eca9913955de233b97dffd","fdb6bbe4590da8ed274902d92048d23196f94df793c5eacaa48073ef194c4e89","2a41d2c8b7857948c9d936068d79b2ec4d362b25f9bcc049829490db4db46197","b0c106ffd4e8c637913d42fe28c38f48da4c41a85844d02b87e931b966173fc3","9a946a50355712225a26cc12086d2e77823845fc43e780491bbb6521dacc13e2","eb7ff1c0d3b221bc7e22de582f7ebb29c725b17758243696d372dcfd9a13e6ed","3ad5c6991cfbc3c5bcbac2d3514c2aa2391b2ec084676982af7d7e5e823eec3d","05a313a45b5202b3bfc4893624db4846ba26aff3232ec346d00d5361a177348b","7d2a91972cf0b99c270664c74021d9533b1f229719e0e5b3939d5430eaa976a1","8b7e0ff30162a768576a794a0c578f956532bc7218760973ec60f0f224b4bfa0","65ddf54794a527381ff3df745fcec555e8a44c087a95bf84d5aa8678a7c4e7dd","7cbd94e55b5e14d9b19d5cb3b51d037aacda750413e29132948b0299268d7f0a","f90a1a591ac90d16708ae3be46b141abf6969520b1618d0bb7fe5c07831d7552","e5a11e4a961240c0a5f53511fd8bda4cc0121cfdf9a3c0bf705f0a98e74164f7","55d74ca878aa5c855ddba6683a55ceebee15777b500bd464d3d33881daebe0c9","ee84f2ba98354ca8da7c32e7e3da0ccbfe355e30601a072fdf0fe87845f733f4","fdec670e55fdf71d92be123d969b5d51aab966630fe818ce6b8c8281134eae9f","57c159d2873a6e8e68fa618dd7d82a490289840e9bb47add50c580cdbedaa15f","2d023ee8ca07b13e3951926661aeeff6bf3de0b83bd7843e73a8d26377c52cd0","28fbcf8b756b1589d2c463d9dc007d94f88f5fe5bca57799c2b10ccf44b1f5e7","e28f096586da33e868c3c75ff8850012facd70e38373a0df2d9ea7fbdee02ea2","f5dcef5516ecd8836256359ed4b9c6bb8c73fcce697d1c343b11ee8e7fd15a8a","521f23deb595bc7e4f4dd08e1ac7b613929ae4b058676f5d0afd2b852b964d4c","da14f80dc904a20fe5a98009f117d8f977ad6d50fdab685e75d6b38322ea56cb","075a13e6ceaeda190a17b5fa3346fbb0ff37bd906e2d7d9be57759829e6f814d","8ef0c5c7cba59cbccd0ac5e17ec42dc4a8250cd267f9cdb08a4dcb1a099068ad","8d50936dcf360fad24f6ed9e805006d27ca10a398a90c06796fd8c557c8e8539","e2e21d204aa6d823d479ffc0707e553817d429a6ba3826b1dcc26456ed4cbef1","a77b515c54d7c21646c1f31b95d2a560615e6b537f0bd6f2ec3b2ab894c33adc","cff3bfd84e924edabf2690510d1b8e193ecf36a9a985b62c12867009bb96fb1b","51946210f9c2700e674efd6f4333f4172468b60082f0a9ee8e400ddf489fca2a","17aaf5062d32079229ce217e565337e384a998d13a555155582a118355431cdc","c66bfdca5f0e7f221d24b18fd313a4b6995c8f2996a070dbebb67e28a3af9091","ef936ed7bf7d952a527ad9440642a14454503b5d5494a79435d8cd095f7a5e03","616c52821cd52b95d3ae7e3e87fe36b08708ff20d37b10b9d1734082ad8c4169","d5d84ada14a6cd0c1b07106bc937ee366a7a221cdda1cc854e8c513cba7ab9fa","d247762374e48f9d05044a20491ff8225f865b6bd7d8def4525956cea2ebde6b","ed4ca8cebc11eae43d59bbabc7197e744ffa8bfe7d250658c1a4f8826fbd852b","31089f10a8f4502e592de315cd2c888d685b98de4181345bf015e7864ae04ee0","6dba8cb48098dd34e52371fc9c7e5199a0ce28e767379ee54252b81e9d00cd15","f09dd8bd82c6c638046f50558a5cd3453c3c6372d8baa7666cb57c8befa45092","d6cdb12ef785dd916c6a7463c7b0257a1dc76e25bfeef57428ca33324aab823b","3e0e8e0746be5d4383bdb76c1839c9c9fcc3eba9a46faefba6d7f7f02a03232f","789084703960dbf43ebe33245a8faf8c02831ce9eaa453b920c1eef1ddb0ec65","96cf61e315a825686b391b68554b66766eec43b6bb3d2defe7cda2c9ada95000","c0096cfc422850bab0ad68a3c4df1ecdf83bf7f2cc3bd85753400d6442a2270b","bb31efb4010197b69a52a016d828d48570c923bece4bfbb8147a08182ec0ccea","063669d9b811d0e2ada3511206b0d6f4600dd53518aca45fdc00665b59c87362","7af68feaa800008b2e44eb44e988fd238414ad3bf255435473a40aef9c46328b","c04f0c4f54581ff75a08825e7295b4bcf7ce19e3bb7a803e4cc40496e5cfbd94","feb374bb0abf80f1b7d9dae485d5a1c073271018063d530f73272b10f417dc33","a6a0a8cb14f5e00b30f819dd76ae0ccc78b019333a447fff75f81896c4f5a8fa","2d735227068a3e63a34cb3ae1ba0a27e7273667f0d5028f9e2db185baf358fed","0ab956d759d136c75c08f26b160fe8977ec798ad40c110ae6b5f5ad516dda81a","9d095831fdda7353e53052d5e40848ad63ac9cccb68f650c0f465e6a7eefdef1","51f9a140c8bccf044097668ab108b97714bca401cfde85b0955148179fc6cee9","5e1e33efd83a97cb72552cc6ffe9c78a5e56bc7b6a6eaed97126b4c86994088a","467b19ebfdc3da3b02ff1dabf4d0991a2b542cdcc9c1954d2bd10849f1ef8ee4","4ea43040f67b08452e0dacf3062a0977c4e64506711fbc58857b630f1ad316fb","531cb0fe87bbb443f74fd8f9e24adfe10821ca2266917b094565129354bd42e4","0d4bbf4faebf8b48198dfde41de33c559db5ed4e6010ad2967a0394a58c203b1","bcb7b47e94f9494fd4e0d93d6135d3346cce4ffa30dbe5d5f649a792aee627af","247b2c66da6ccd1caafdf302427c0b4608ff36e456994311c8a314db30b4344b","21db9d33a64dfdd166b53f2e4564e71c69e2d14e3d38626abf45ac7a41e6c459","f8be384eacc8a6fcdb22c6214e7857d3cc3fb797a1b55e48152a2ad15dc607a2","48b1691e2db1910b1dcd646901600e6016f9f948c15e4b55fd1a3651883c2a6a","57ca7815a918eb340d9ad2a1e7715d1f89e5589a3ce2718ad4b525a331cc3064","86136f9629dd8c2599a9d7fdba401f2d8ff976f017d8ea5d6b4a1adcaa6d08f5","fd3b0702f6fb408ac6509f3689e15275a5f31544fd1013cebb0d8127765c1cd1","5272b4c204a4801c4a1cf805db9ad0938ef09a5627ee4c891ce6e45af22c772f","64191887cce455c7a33e6aedb861f133a5ee37d7b3539cc865893a442150ebdb","1da519c09135b1e1a875121f45f1e35fe94f406180e18bc0f9d49f786c5f69e9","7b618af857f4b90e3a2bc68410a18ad384cb4342d4b2ff977858b04c3f7ba8e9","67313705f044be0b2a99ed856e05fe83fa00fe4cd5bb1e5ec0ef141e78995a63","0fe93ea5a9bb7af8b0ce5cc5aec43f42a3f3922f5641fedaedc9f49a170a0140","07386ab968ac9a92a178b47422ba3c3ad5a9e2430800a4071cf91b1105007900","998118b4728956ef68d053e37e40db95ee933759cea331ad1ace7029ea862084","80b94dd6aeee643d3f9346c2eaed7dbf45a694168dcdc8bdc7f585005b852bb9","c3ffeb73b096ab7e484ce6050213db425673e1f7b79adf7d76f6ca574ddb247e","458b06caf4fe713468ab73f26b21d201d2f31fd6dcd86fe3af6da656e003b92f","f792b2a69f99f5bddabaac81741e380c804f8b301c4bd0543d298f041aa87547","90aa10201861c88ce7b01ad58effc95acbd91c55105d6d072672cede19df3622","1f26b88450c5e8aac4dac146cea713ef7b7ce52e39f5103212968bb45e4cc276","e3bbaa70e21414524de98ddf987b3826f8077e9111283232fa23462380cd09ba","b3101596bc64fa6957b980725ecf061dbacda4e514129af410e98dd8c7e40221","af70ff642ddaa09d16311437c372018a7bba970be500102194bc6fc5415a9539","2e0bf302697c27360a0e02489e4086149eba7e6e1d292140d9fcec0fa7d1c130","e52ed9c4b083bd9522413100d0621da3a3b71bfeafec2c69776b6bc2445029d7","8c067986e808dddeefb5916b2e52a694995a10daf5e4ebe45dc0c416e5ee10d5","a0e53ef2a6683de1e4b3cb9927c01dc568a4c7e237fc89833ef01acdbb44cb89","2c5621ab7971bb954862f72b3ce7552f63d0f00df1f4574b684d7972afe71734","dcd9e53171b39cb69fc7e8875c7269ebf8fdcf3201b18663faa0127893c0290b","ee98870f2ee2f66e52dd58eaf6b25e68e59f80437bea1bfde8bc28a3e5888ddc","712dbdb7b6626ff82dc8d9bc58131babbe2baf0177703f36a5d76c53841491de","13c709eaff81d9deaba3143f5c9d5b4d43cd7babe50fa17715b02c0b8a446a03","7b23521783692630f3761e241552fb695d4ac61c36c0a43f01dac5ab1f067efd","8997acd9d4032e2cb789112205487ccd45fb26202c81304ba1b88cedee1d3693","367ef08f1d0de5ec4d4786cb8a1b8a17abf395bb0c5f8d151ec10fb66a2ce50e","0426de683e6b5b58fb3f655ca09b33680dc27ce78ed1ea969e83e121607e7072","5a7b68d3d543b9e3dec0025649bc3c5ba1b19b64365e7785c846dcc4da307687","c645103bc22c2eaf3ef552361cd525fe4bc405cb9108e0e21b0ec5196ffb0555","c7320482b019b1d4c8c705cb4f760c34b4ce255ea3483417d52271a1853fc72b","ccb60244f4b42519e23e025fc8ba0ee1bf2dd7cf210d8a48fc1a24c9460bb535","10d806f0c1d7986cd2e382940b50c0e86c6bcbd97bf381f5175c1ab807aeffaf","1bef98f8eef7ab27ce0c2c946f31d4f38f8ee1a6aa6f749f38d3ff172a89942b","a081267acc19894581c05d45ee18487b0eefdb6fcf9008559daee0a2158dc7fd","6b72cd9fa878597006ddf78939b241684feea16a7313e9bb8f8077d6285a4362","22e5f0ebf13b46b00907da6df4eb5c17add816a918dc4defc843657406d5bcaf","f48d3e5df2ac804b4b2d6efd4964f7eb62d39a7c1cb22ad7212adb9e0e1a37c1","c313f58e4a2c0de24750849c22f95c1d719464ae92866960083eca49550d78db","326488dffba7e0be90af0b01f87ee6e7baf1367c6f3851a68f3244787923d793","3a2fd74980fb6b1929d628c3eede88f256ec17adce5a66e7121a2e0e33e99a28","afdb540e2c725788f4b5de7abbbf10fd05d2f6c35ae284b250b92b730c515918","859c3b678667f926284147ead301da042bcd8219647af3592b03390119c2adc8","dbfd1f576b80a5b59432c235addb24704cdc775dbefebcc2ca1ab6c8972db374","e6a983cd47050921af05988b1d868cae48d23652ebedb6967d04fb139cb4fdfb","511c9d0e7885fcccb553b74106f49251131f279340bc5506500bc33af8e00c3f","4c123e553eb5254bdd78d773d269664eae0478805bfe46790a9e9a85a0e99666","8a09ee2c20b393ae32de0f031967bfe56f84e0cb91c6ee2f8655c92cb7fc2af1","1d5444beeb63effd659725977211e3a7a0ad496e83327af4c6c77aa81db295b3","1d7a2b7d3164124383d689356abadb88bed7a39970f19085406a350760153074","60a312e7ca663714e9643646384a9f7905c51861a722abfcde5a5ba665388187","74493d5a649feac02677519ba00d4c55b067be5b039924a6cde3cb97bfbcddec","772f94a36fdce5cb4cf6f620b72295103cc7b45f6b0817a340096ad3090191ff","75773baab8bc9d7eb71cc5a8ecf1e2283236b5edbf3dc6db6ab4c4a7801f3b25","ec1962f165389bc3d185af0ca0c057f0e837ce51b8b34647e7458546a7aed013","b0fe51c98466115ff40ab96615db2f50292760b2abb40e94c8e7bfa037c6e6d4","204ef1918267feb2040caad874caebd9bbf4f018367517750eeae16d880b0698","4ea10af53e63c9543cf72cfef7450529caef6c208e992fe9a4624fe5b13f1e72","9a7adac5f8c80d4166f853ca78c325a2bbefa2ed4a0fa101ba00bdc5e10af11a","6e175b3fac4c77c0a4df8f85eaed180823a2605d87a9d17bce79e7865a2fd1dc","9f6dd3a0d97c65dd0b5a7c905f663cc979fb42e4e3d5c70f65531790d1f98667","7f8d2ff8fd9b2817191d16067300c8bf08bb2c10ac5a4b8448768de61bf76ac2","e14e43dbb1fac01065aa9916d4062917b4744935766363f7c17f5f45158aba06","4b18046681b14e3be3d4d5850a4b317360574c6875f9227f83eddfeb442de57f","96e7b72d0a2c400aa16d3f9c133a3fb98b11a6d200b0c973450b397c8d288895","0d1ce2812c91f12321faf6f96cb3cd14475cf97629d7ede0fe33e4f5ba0578c9","59372bc0bd7b5001cbe20820b0a68000586a40b7c4fd678ceebfd176f4211336","309e3f6a2b608d54f88bf5b4212cf58f5caf215529054b1a64152620b885cc60","5499acd369fc36bfdfe77bf06dd0e87f0b196959f589b5724672ac6bb3a5765f","5870bda2dbe5343202e00b07d1fdda410138f01ac7383bf589552adb018f5350","bebc808f496bdbb3a8a3bf59a805c5dcab6cb937fcbf723d21efa327905c5935","010f9bdfaa8f2f6bbc26600f656b2e698e00634335c6baca6ef5a8267cf33021","fb3427c36745bcaa0d8448b3d221a8b917582740c257a4f0da53f75283997069","e9547670c0bdb549a1932b96df08f4c4a07a4c7eb0609d63d4ec4db9cfe75c7b","a588af0c12e8ee8af0223753384af638aa9a93dad625fe0645a7f06a9a12a423","6dd6a9e0ec4c115a9b8f5ead2eaa6a17b111b6865a106bfb2dad420a3cd4db0c","e36d80778e4d38c929393c3870d7d53dfef6120322d29d1ba01a29d81d6f382a","2030c9beec79ce797dcff17bc17850337c9266e2e040880a50734e65ee6189a6","7d6d84c4d0e47a202e1058e974df9116489f21d94bd3aa84549bdd4cd5806007","0f4490e615f8d93bd5d1b619c4e2ff1030b97bedb2df85140bab3f65c8afd635","f86841315f68259209f30b4a24e5d28445b7d8cc28fe74f34df52652caf43956","36176cdbc03d6e64e9f1b74df5cad1aeaf465c5d8f0f23c51d1477bdcb831dad","4ecaeb0a9cb05d30d8974cd621e036e5055b5a6b4740b257866beba2d236843e","71ab2eb8b8bc47d78f1cec24713f90d7604d24387b6e118e9deccf9de9f9c5a0","c8f243b4490656266fdb91ca729e5c859dd049e8c8a7128ece82bb29708f3770","cc6e88c41cdc59493a8807ec012930e901c1b92c666fc0287b3c670038a63b92","3742996f9a34597ce61987196ee593ae69b97e5f4b25e06c3e647b89ef5f7360","21f3f1905c6045a6132b39d15cf4789cf2a773821e9ea6d73f8a002eaa65e98f","5aefb62526444d37e177f0781142238d1b09deee6037c057654dbc15192e401d","75d1a0cc5dddb0a802e19f5c93ef5f60513a85c58ebafd683ecfea3716ccd9fb","4bc24cda2393c31d56b72c9dd21fe6c99b2c294ebf6686913214641082887a02","2e59594e9e437afc629a5e293d89a8149f2befc74de81bca7d48226f0a2a130f","b6462ba4b4034c8db360138ab8d69f66cc2dbe019fed38365d8fbf07250d67c1","a9537295b8ca05595508cc3730f9acc871a6406c1173c5177e05226438f02e41","ce1ee98b2a3becc08fb92f379e5621dc318f844c6aeb28629d03da26b2303b62","d76b81b066be352869a3e20d299e5139b592d9257dbd27bd0a267ce8f3d88a24","cb77847fe71ead1be59d0fa9e06fc25b9b964e2da16887a34007742e7a9459a4","d4f7b283a6853f9c8032d478e592f82b228c06665f80e8d719c58883e81e1103","207d08569e41d3a30e2dc8b05ff391afad13c82842ed6904d5e37a268149daea","8af0d57b0eacfa48e05cc23e3a8c25d053f2c1b8cd3e0a13a4d9203c9f02cff3","2a2e7b5e2beea358885c3582c8f46366989dd8d59c0bbd361bc48887139dcd15","fb14487d9a395176b5bee1913bedbda5dbb36e1385d73102e521f9f2b2447af1","40d7b54dfe092decba2808767b5a49a0e369fbbea97a89500a281bc3aec8cf29","e65a64ac39a0cacf09a05851df05547279d8b76c3afba9dff63fa78dee9a9507","7f3f400937c13b4107bc655712e88c06294e995208a8917ccd75fae6a2c2cb00","8b21ac1befca0a29cfeee1e6a693382407e8460ccbf9a897038d86fbad39224c","d31604a6a8eabb3ada011f31c8381d96b57a6f9fb1b6b19174e8a1548aed1132","845701b9bd851082bd05e1e00f4244787fbe08972c2d896ff86fb0a6035bb4ba","58f62ca2fccbdceb42f56c3dd427862c41f0700b9842abe9a008034d570970fb","cb093dd0fff8fbad10ca33be44e8c2f5bfaa3d53083208a76460f97dbe7585c5","772e89442f7c8046352f4ce30319b58f4e606fbf5b41b227ce8cedd3ec4ec021","8ada49673b8b7b3ae3fe8ec663805748789b7472bf8d7fe7c3c544a5cbe30da3","5d14418d2e9093057d4e87c9219e18eb894c96d321472321c34be4a64dbe20aa","86b7e0f835e2d550541c27e03abf5270a42f5876e1e915568289142b317a0ffd","0c5c448a1d0dfade19ec1c22a63a49d282f7d591eb423a2e306be347264f434e","b8cd9ed7db37002ec36d56c3e9e9b77223df3227d01aa1742624da4e2b58e171","7920e2b7d2f445eb60ee688f7da6b9f2b8088deca083a292178114dea7c8d257","ee0a36d648f209987fd9960605c610a6d0d9b24d721af628633b8b4c63f90441","ddc52f478692a1c31dc82957ef95abdba4a3ac5b63bbd5eb98af47f8f77d9af6","c9aae0fa87ddc03601e3bb1d7d7a32ba337219039b30c9e9c86ade440c44641d","9334b283bedfcd488ccb33b3e942905c86fa163e919653a5379eb8f28a2d5f7d","f3f62eb4cf38d86cc7f56d0879b49656a21f2eef4fd0acef3936889327d7f256","593ed707d6accf3621ec6c362b9db321ecc611253ae6c373a8b137ed2c97f15c","683734687779547527b05fdcef60947f6fc51758185d788531e9ac7bde84fd6f","d8a79f0855be22cf36e103f1f3b4fc583b54c19a7624d848eb8042914a5b98b6","14d657d8fad578dacd4053fc7c4564327a510697a9fd650b9359d6af75b2f900","84b608a5e7ba74791e165b6f3e56d8a48adfbe0e98138db1f90e4d8b29aeef84","91e21e589b908900588428cee64a590c0df44391e7db09400a9ed9fe805117c3","78b758d401e53f5319bc143ebdc7714ebe0f1e94fc3906d5e93816e5736bf299","9ba510c0afe860d8d38c83ede10c158a014c27f88c6a9e4cabfe74f45b7bcef4","c85e9c74ba3d5c8ce3ea3d4876ccea6f79d1788f5dcf6185e437a69df45aa64c","67d637a46bf2eea2894924b06d73cd52c9c3833256809ea09e89282141106cfc","d31a29e9b2c8128a689105215a89de535bf63144d42b584fe4150d1c8dce12a3","44f33fcb0aac04100bab0495294596c1cee5746ab26661ed8b4ba358a527cb2a","d7d86ae21fd05854dad2c48582776d3d750574fd2c06e218efbeba9527e337df","78fc27f67ff8ee863aa814a15e9a13905e433a9ccc583b3ff8e56291fb456326","7db2188acc8d89ae0f588444a699337e188d8066971c882dda8a9c63dd95e84a","850d34c4e4b0189eca4c26b569afe6b93e06b2cce427c8e586de2d4fcb97b727","8d497ae08df50c61462e70743df1f5e5aeb2669814c217b5e8de2b9f69b27691","3aa16d38782fad96696312c8b9295647670d4c34e445e3924f9f514fe85d2998","5bc082704f82c799759f9c6b84bd23dcb4df0cb141889116e29bdf2769c12596","67854325113331bf374a49bed5892005e1dbe9aacddd0ddcc3c99aab9326e818","cba42369d4619e16ededa913a20727307f0017ea58a6ef628eddddb38a63bb0b","b25537ee9b1b3b4ae8bceac1522417089fc411aa9d1a6679487129ac787d22b2","3493d3ac411c6977f391ab438a9940c3a8e06dc04b7e2d84e0571a30aa224314","4f66c595621f6dd5c693d12c122def1c9eac9c48ace86deeb7c1a0fe54d63c61","3e02c557071f2e4ff7590c62eaa02eb6e7a8b34a72632424b3b607af45eb0966","21d83ea0baf7e36d3a5ee8a321d886c483af1968c673b16a80fd6aa912180103","4d061f660d2d4baa758159e85771e93aec21e853baf561beb121c471e02c17f6","b22349e111e9c584e9a0a1cca564f8c8e7406ffecaa454508fc34d365808fc4a","e88588861f78985ee212de6a72e45b445e5e04286b4ce1eb1d28d72bb781e269","166e4d2f40a057748ff884bd3db43013caed0d97769b2b326503798784bd657d","78d9b73e31933b4e5c3aa6586b0ba24c790f0c679d632197187bc16f910fc7e1","69e2583d5f1cda9f42abd0a8335f0c6d43aba7ccb723bb6e7f3a3739c78f2de8","62fbe837bf8635f20756a88c2fc50391c36aa443a8d72f49d707c62f6d7c4bab","25995259f1e915be818b462be638c6e2374a2ef0143277225d4e3806f46a8118","207a987306fc0727049373fdfe8a766b430a40daf8c9f11b4b6efa5c3498bf9b","8674a9bfc44e59c96f735cfe1572f70484cc48f086624d28631a57088205e48f","f3fb73321ff570d9c03247efe77b1ab70bbe0754512b9a54ef497aee4e84ffc8","30c118e8ee38d85428d6fa644d7a793ed4617ef8b18544dbafd1a86d08dafd33","7e70ea07fc8083a9a0085106a344c5e43f1c86b0118acd849159fdfa04086f98","dc044137e2fa706b31a096f5077005eaf3c538450d82fba151a9700698f358c9","66445aadc019799517e2a7f672e1ed229ab2de8a9bc7a4425095c018a75c52e4","400e5c94125c4c6aeb94b1e5446d0e75eff51fcea67485f0d31549901f15c7f3","74b07a1218970c15bfe478dd16276745d0b0721189a31f6453ab5ee176693179","8f12f5a5b0e6a6401308051d4f57ff68e7435e051b5f8fc671990843e38e69c7","9a8bd863a46da9f43ad070a5a27bd0a40850631f99f1409ba1ea86a3c6c113b4","0c3760145d2b665ea36eabb8d7162763ab093f0424fbc73aa2aa4b6b5c1dd9f0","36514b9d6235dc5a4b193534e1fe684598a639f67192e3a49153515cbc801137","0ad8461b1910fb07d9eaf7420e27303d2edf93ee9649dc804bb4d801d849ab9f","d647b6fed9a8b3182d671d3be443093fd79fc59d5f5cdf44ec207de86e1952aa","6dca2876dc41d61f89e8330c156a75ea6bd3171e9c7ace061f3fd4884f43ae84","44d3810b6d2227703f3dafbc353a6b80913d1681c52e3eaab04a38ebf7eb8553","0f4a2d6bc0ef8d88c96bc873847e758c10cfb67e9171b3e101f40119433249c8","9d7d11e287b081860b7808ab7682b6f7044dcf7d6087bb50725556b5e43dc85d","c7909c9a840961d69fd2514aaeb04eb7e1fa90b49d178369234ff99bc7ae27a6","e8103d79b5d6c375b60e306a520a5cbe698de192d75516f678335946b113251c","276732698244f4f209a3b03fca067c79ec3b1b0685d52d9c0e9874a4299cfb61","3b21780cc1a4c040eda8cb7845b7b0ce402d5e2713ac6168eb8feecb0c97556e","1fa9e656f89e0f2ab9bcbb4618132707133feb3602114c950ad89ef73c165027","313392dfbb1dcb2d10d4affcf54a065eb6b17ccc6717f029bd9fad6091dc9dbe","03a9018bb7bd81ea1988e39653c6377a83107e0be253644c0225867fa208361e","d4f80760f89fd3059822d035e82b8d0cc67d50e9b5702515489a52549da25199","3374afd97c5ded3fe6a41642680aee7a4640a656e7ce6bccefb55e4ccccb7cbf","39b808d7496b0d5a49375f1fe7b99a82d1c4ea5b9995a63393d46b270b5f420d","d48861bfc1a4c30a2df3187fe5ef00ed1b4ff4a75285e33e85425b21322a2d21","69b718b2e32a6a00475934dd65f287c03e106786856468374a0b9040307d32d9","d312579f2b4f5fccacecc36f1dead089669d1bf13f311815d86178a5c05f1f88","1dd406069f82a68c74d888ed189109bafc9c37a05f2013d368ee4f47e4f26285","a49e9336ec0d7b6403821b24e317aa9f7bc895a4ca389da651dab50b83fdb665","a22ceb0a3e06042b97892a14b67ffe00804a579bba6f3db53132100ca9f84535","70c769c86fd759fe9ef56555eaa437134713cf4112d6198ac52f1bf11ba96784","d222848dc7025a1b8f9a61510c3c9c4e7eea58282949adb4913d1e348b242939","418f3639caee452dab9e8408e205555b565db0f1e7ac9aea928904cce70cc1e5","4d59a526bb12fb32a77362ab0acf28810f0792f0ae268402a67a8a8cfac7b3dc","392be2a05eae0e32da6964be2187629fa583e8b510da796540edbbf1bf7e8e04","beb69dd98b6da76af50994b1e1f9bd17cfd42b5d38eff2334291398d41544ae8","25739d2906a529b99a08fe326336333b72a1eb81b3177506ebbef455a1c89147","e7c7524dde3a5ba3d7acff85a7eeeca9952659f274b9fec18eae7ffccf5abb36","a3c35d5bf59dae9cf2a2bb3e12f97bb1be8b1dcbbe6ec63fe42c0b5ce1f06444","802b49126ab09fa554e69b7dacc30af5efacd73218132ccfca5c2a48b90e4823","2ea4dcba48ac6edd5a22ffc18a79c48cc87abaa63bae38f265537b3f454e45c8","9a6761df52e2766a7299241916636b0e52edd92ba1f3bd8b4f168855c01c8f12","9a538110372bdf558e29dd7e04572abc722c9cc24881c325752c0bc7a862805b","0dd2376a473d02e744688de6bab88ba9197a0fb461e481aba37107978cb31b71","42d3eef29c158b33ef006712d3cf315d0508e9e3b3bfa669fefbdc0b3936828a","7c932fad06372b77845cf061156e7c1859d72d4b9307ca01e2f0da270acf3764","fab113f2e7eb6e5fdba608274091af843a1b2db4a9d4489da0a9f6043f0025a7","970050c149f896566b4b3efa6a2ece24b79b38b5297dc816c5561f6103db2283","5ce32ef9695727ad4b94c835d20f423901ebf8e6651a97e7e38c330c6da5098c","109d623b29757a8d2a3e8c33da5b7860655b843ce44760f4d6a12b49e7ab8a3b","a372d5f73f3621d38d59ca9c5181e10974865504787de3f2759b234983623bae","7702a38af57c0eaee643d90b8e44195ee902cc2bbd1f10c783a5410b0707e13b","05a33cee388b853d95b0c1807e9a2e038c324717f86b3c381623f8510d9b4515","b4f575877e06d394efc07f6a6a06cfe5f5bb3f5678fa1019f6db60007495a8e9","95991e4d3f5be4db7f3295d2a3915126ea9c87cfd73fece4071ebbcc049ed944","304ef1c5556d8fd61e434e82b82d75580486dcb6990dcfbe3ef09097c0b11196","bb935a566a98082e85d431d06d29b80e2eb87c02715935d399172ecc60e499ba","f477e46e803d9c207e7cb7181a20daf0bed50f6e046dcd41cf5673b80482bd51","93b43b29b2b8ef98559a115b35754886b94a384bd7d8a1cfd2b4543e4c5b98f5","3f2c76a79abcfb07070c6faf4928615ed05b756a9041bbb139f488d33e19303b","c6e076bb8f764047bf797a465371184e21ec893f364183ff4ea6c278ff508674","918ad5500c141967301378047eaefdee6cc27bfcc5d176b09ea6c5b4f2011ff5","146789c70dfae438806e43eecb3f4e65f6c30a329fadf4ce7382ebe5a69d2ba4","f7144f81b7aee35190394c5c8767a563cc1f1543049525a9465bca9a7a64bbad","d7abf8b3cf37b12e08f040922fb0f8a05156765f14aa47c38666801585454370","a7db9094fbed6c29c941d84488644e09ca3cb8605699e4e98762cf3860bdc6ca","7ea9ffc4978dfafe98abdb2787725b06dd4c28efc54ff0ccb0fba09e9a2b3630","47cad7cd9585773a187af8148cd203adb20a4e73a4fa0da62a56563139d93fcd","33c4229bca22ad860045fc54a04d4e85ad64ae4c1f31665cb6fb32fdd3c62894","7bd71c41027709ee2facb0bd1c884da8d2132dbbfc3cff0c7eaf7e378b4b76ee","f0c5c39d9faf5fd7566810e7d13c02a510e6bd4c845146d20e160893646f7aa4","6b4ca1a679a574010cf53d29c4425ce9df0b58dfcf93e40e6fce89abe004a81d","9901842dd345d22bfaa251f619dba71423b46d50b4dcf04e9b428c3ef52ca543","c93da4869087e11e0de8bdb1ca7539418d7cee99cef370ce561db3d4e47e532a","220f571a276a1f9baf8a36c53851b57b16d12e32adf2169c9150fd50a7526ea6","fefb50fe0d4d6b6e4bcbc4cfeaa8b65d442c1945b7bf1f827f27f0a260d47021","1f16068b1f3165887bd1bf7d8272ea9c018c8569ca269d0301644537d9355063","993c284e3d1c56829301daf9eb94fd0e25d7207fc4de0facf5b438fd276feed9","3d36e5b16a6e32eb11055a5b64bd1519560ad5f478f7d40160f6892bd96d0390","6b1d5d02996c41decbddaa8011fe7376484af1adef7b3338793937ce2b228734","934dbb447b29f93aa1d9adc4c49fdd14ea634ce011e78648f5a0ef571ae6c138","10e0383c6a19cefee5ef2f980ddd93f07e9a62aebf05481681484dc8f751fe78","0932c8214f6dbabced6c48bd1e91fb0116ee5e6873bd8a47be8359dc74f662c9","c3a0f8fd737b20fcc6942389d2db4f9dc5b6788d79817e5270a41d06142cd75a","3ca3869668475a0b8ad403b595182031cfbe95308e985359111786d7c8e16fa4","89dec148610b76fac04d51f4b0f5b977fa160c7ef4fdb2b4789dafdb16ffeb1c","e5705e7a3c51b73022883c03b4c9faa6c6fdaf44f5116cbc38f46c9cc756e985","b4cec22d7a89061fc64d76c1b5f0f94adbacd85ae7810e0263c0472a8f0da7c4","fc6e8f45a4b1c76c21404d6ecb03be3fa3c575ac8ec36e2681d74847eba9fbb2","f5c163097ae931e3c13f2afbfd828e3029f1d25c5e822f4e71b79e9bdbcf9418","fb772e9c6a4a89e297f8515c37cb7226046034292d02bf498c1dbc03935f6ea0","be5aba2a5142997a6c577a89bf3fbbf4b0ee44b26e1da161248e2cebdb102809","03eb65b97ab6f78da7dece179c5a13035a1698542d5cbee39b26cf3a3d85e26a","7461af4d2de785a4f7d8d85f506d22db3f588cc2c7a7d1271cdeabb2c8bf9d23","e87885d7d6f507833a3e4b550b8109f70258e0cf09727ebddd609574b891a2c1","d23ef30e5355af58e59787db8dbbb8fd170735ce06268b053b2269e008ec56a0","5079f20c77658d32e5636e30ebf16c1e69e4afce0fe5ace02fedef00a0b17bd7","e0b59853db571177a4f5a3afd2f8ad4e5c6adf0dc47165bbcb9a575fbc24cc40","b9c0d581de28aff00aa6a82ea36d5dbcae002ff038ff2d97fa12291fa1cd2a05","05d42c71f16333d844515306acd3668297569aa097b802632334c017737b2466","9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","408ae1a99c21dd9f62fa113df3909ca9f84114110449adf967cd9ae9b809f7c6","67130b0814d56b9823f4225dcc9884c26eb9c938d8dc1675354476f06ebe57fb","c62efe803090795fcf5e92c9989515dabb4770a89bccdcbbc51c348b5a004f92","05a52c250cccb1db9565b65c2653ec691e667dfae3bf8ecdfb8b68d1698939f8","ba3910bc59a961a41e472b03a41619b52af09da77aa3ce374aaa3fa52e8878e6","352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","5a2a893604754ea14f7ac64d7c579d6c104dd99abfc5ca2d1b847062c590bef6","ac1099461d14ad1f616fea97d1a4e60c74e208864e365342ed953eaceeca4ba1","61ca9d453735a9980fbef4994e8a803c10f48669c5be2ea04a9083c2ba543651","b32e68ffea0b234d3c4d221024ab39d1c8cd9760535a925bf0e8fbfdb73feab1","737ff3c1184b7cee4b70ddf4aa4980cb887cd72c09b38acf8ce6cd8bd28b68c8","54fdb2ae0c92a76a7ba795889c793fff1e845fab042163f98bc17e5141bbe5f3","4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","174b64363af0d3d9788584094f0f5a4fac30c869b536bb6bad9e7c3c9dce4c1d","5d6e915a32dbbf3efae18f229b22a101ee05f7fa7a70cc93c9d9d9d63a38dd8a","b8371b67b64727bb527b6605fa88846dd2ca705434839504fd1a025d7b6badf5","c2bb322d35d4edfdeb478906ad7f9cadc6e26f23ba746d518cae976f5f6c6ff5","6f728f0b2b0d9a9bf29c2a403431fcc39b0f6c8073b5b387dafc92d41cacbd5d","daf8a5a6c5fb32ca380d1ea5fe7d7956cd3f06444386ae5fb3183f77fb3c883d","facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","1d4b3189bd500012b62bf7401c2e14cc5abb9b041b0c938240560cc94a78abe7","f919471289119d2e8f71aba81869b01f30f790e8322cf5aa7e7dee8c8dadd00a","3b9f5af0e636b312ec712d24f611225188627838967191bf434c547b87bde906","e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","0d6a8503fbebd4eb886ba7963afa475bbf5b5d1efcfd389a896ea576d5804fb4","eb0b8ae9c181a4a54fd189f54485507a164217b32139a4359883b8be0d52856b","42d6c5429b3dc33b6a705470481106b74ed24819820c7f583cedba5cc62c8ce9","9487de768209d70b90f69ee60fc3eaf5709ffd67c26e5de2f915cf028f0c54be","0d7a8c0b0b32452f360b9c1c3298f593ea2960c7775266d929c04c5bc02f396c","3e8171a4d6ad2800074366cce7d166af957ed6ca5562c375299b52e3b76e23be","5c31eb0468e83f68c496359c7f989e18c2acb1c12abea051f01a16ea11ec8157","8195f48493294b88b317f017d727a1758f630d73e1d38f615d5f229d0d89fe59","c37e96c76d21b8421fcc1ce91fe4eb0c3ead43cf2d3f202487f2610a4213b7a5","e6147cb975e2e3053cab809408e63788476de44310cdfd44bdbd4ee25ec810df","17a5f8cb0b6bfab9d09bf401b7e5a487265a2cd090ed381c8628d6dd33a70509","a84edccefa137f2ff19ea6c6b243c6ed5bb659dda066b5ea97f096e19d616d60","14b039e4b9166b96c2a00e9cc15fe687ce2d3942d373d5170ba24a9ecc3b6a1a","4be72884fe99b425fa0b2dd382edd422e63a96f31bb044eaf20c5a10fc3a4d1a","5d1526cd11e0a3c691be00a6bd0553e9979aa7b8a0db0f2e6f4882a1607404a8","3951174697ca1632dd73c69502e191f631569c1d0bdeb46424e6dd5008d1ab4f","ee234d26604b724acdafc43c22b2d5655a8d282bf467ec7fe54aed16fa850b0b","996f7615a76697331bb47a4f0851d7310554d8fb30b30b0bdb5f72c8c49110d0","b86951c3fb0592dc172b4e16245659e4863b930c6c585ae002b582d1b4deed65","3c7a386e1622e6cf2510b1abab4e0fb7388d5bbb453ea1198804132da373876d","eb9b2d6b475e4dd2ea6d69cac2ad56b11096988bec63c77f90010082b16e5273","11e9f880b1f239127de4786862b2bd053c68318c306f3f460da35c560b55aae2","f1f4a2e31d225e0389ef23c772b20b554aba52ff3414b97e607658a83a680fdc","93597dc56d99202924058dea12d10eb9453f77faaf1c24f192582aa84566814b","bf815ecc9a93f8a965edf5be0de4ce3e8806fe79719597010b3bb9e2fae17643","2e5ee0238ec08ab8e8f485bcf1907fa1a4b9ed778b0a7324c48180658306a255","c279a090fd35651a8ab5c8e8801571a8119197de9a7d2d61382a58a6f376bd9b","4f97438d5dec6ee008f0d1b058868b1894e78d8b244a551c1d54b84e3d9cd2a3","6e7d7be151904ef98f8a4c9678b503426e9e7892ab1f8c32aad2dae9459eae19","631ae987999a6c73b6eb87e530b6083ebe6b613be49344117f19b5e0f17dabe0","70ff411a9cb67cd136d085e7697fa62feb67e776ddcd41ed09551d79a65a571c","5d540f6b8a44f1d91f9adf2248a0091f2d89b7b3add94519cdb5e04ca70f6ed0","96f7f259b7f9f5b5a252a33934a6e74a823c122e41c9c4c7128992f243b3931e","454e8e851bff00d627bfd2205461262871d4f834b80e449e79837fa2ad90cc18","8733875ff1b16216825b07935bebd50459d8fb506d3714cac7db4a561459267c","e46508af31746e1007bf92ed48c952eb45032fb5485999d2fd0840ca76724dc3","40f074adc7342b39a5471fc13ae1439a788ddbfd4872127416f3dc4c0e07a551","db119ef30fd490196fe664ff8f7da360beb7d2f82795bb2c54c026b338cfec71","7b1f69419d2debbbb06da00cb638efa32467599b503927e3d7081679621dac69","981bb0ace076f9e351fa848f152c4e732430b0c4ec279d1bc0348e9f554938d4","8541a0bc04ac59e8197fc0286f83268a4f9fa274aa5a4a359aafcdce1af866c3","e20f9c57e1d2d5f5407af278ca1f4a6fe5e939d1913a35486c3a78a168bcefb8","058be565ba2690e1573ad6f2b5f5e7ba8a255c846571ed7659f0a216178d50bd","15376a2a22f25e8d80022b475744decf40202d49ce865ad5678c4b7243fa204a","89fbe00ce088f3a533c3ef21fe55d6d66ba377808b4607ff6866d09be0ac2661","87c98e1e69241f2dadbe979884bf5101f405557867d34aab3cc0e06493d786e0","582a86128ba53a2d686ad86c10fc25eaee13c4eb71232c10ec973b3f9be2b9f1","909710baf107ef944d27eb57e31f1eb5e584e252540aa47cf744ee6c49f5e622","c3e7459d390ccb99ede756fd153e307ae2ff6f69cee8a95739daf93af2177b6a","8b992bbd97cfcfdd1af50f3fe733d60036ef78f6fe05b8cdb3628724312a78eb","87d96f1bc5fbb3defe903dd550bb709849429f923137b8f261538101423fb0dd","d1300bee452fdffbad145ef6799bf93c7ecbbac3ba6916c550e4170818dfc74e","45bc16015548d7276facd5409c5edb4181f4b9419abcdd54f24ab98234820f7a","14418a0b5488a6f1a5cd7b1b38607b365957094adc9b8737e22e0e6821cdf936","25b99d4ac663bbc27a20e58d2351f4369aef41172180be343e8777aad214f0e3","0482767ebc9c6948b4d14140a6a82bbde9393633965339fa0712f244de25f9bd","a45b334a89b936a8bc8d6dae32b30210f80b1d1982a6313250b45c68817b6a49","271b3d5eaff8cd4415d38a2b1daa2cdfe1d242ed89fdbadf9dc9041987562ae4","b71e366c3919dd457b0f7ffb0171119dadd60d198162a1434f8c8a64bd5ef27d","2b6d176e56ff3ace8b516def639b11b3385786cfcbb8acdb1eb929f568b7297c","328f887f58fe66011faf950e5298d34262a138ba4f6a5aba607dedf811bbd0b2","4d9a6f4b9e2ac247731c11f8e4e129db0bf29b8f9a2882f48ce4d0b17ad22cdc","f728bce8893f6d544284aafe09a420b7ef10534f17223d50e557e374fd5473b5","0ef4b0eba30734d398bb804391576afae123640fd8a82c83a1f94084bc39f9ad","c7f6ef00a6c20c5277b2cdb904ff0f8398660a8016312cfd141f867d0ed4b34d","5f3c0bfc7fdbf789e4c3ad7a396727ab29df29ecf802a9596f4676e09c61159f","6faec03971a5bf4f1997585f8de68d7ad36d9eb037c40cebd817fc7216c11ea9","726380ea45254b7681d0ed90f0ba647feb5de48a4d53661a9d3e3ea579dee3d9","d369e828648066d6e539f944e837d7a18ef1afa379e3bc260e43f8b3de63883a","409d62c8a387ee443e9cfa97b070e290d2dcbf391c3e0402973982f8fb8df4ec","16f0fb8ba3180733cf92bb830edbcbcff012e20f05133f494277d96d0d6830de","84cec5817d1db3042ccf192c6587199f4c2b17a96ad3a26c554e8b89f2d23289","63cc11fb894168e67488afb96a8b10d28a181bc1616141a514969382d0556ba6","1ed148e92ea7bbef362b2a81e659d316e6f1b198d85db5b272cecbcf49798ee4","6dc9a83201e4ee37027a02e72227204d17d516969f40e644f49831b27905b7ae","006d199f073601aaf609d5b0aaeeea9451f57cf95eaa1d4f05fe382942e00c42","d14d6f4c38978e20f088e2c784762f33c34769cf72f1c5e3f38d81a4be1ec030","019e96dcaa86a339ae3b0211062f82f66a8aac3d4c81c2f468c2efbdd954aeb8","eab9174de09c96a77763908f146b3e8bf4124df719fcc7a8b17c55ea82bdfce2","5205ecf7c5434a72f7e217aaf85b3bfa003f26d4ab8a954efcdab2df206e6529","37bf5d672990edb3dbd1c7c57f4c447708c54cbf4af27782c69e674e2e3be5db","47ef9c77b36c3ba839049a31a398f4905c7f487afa2ef982a7ab0f2e660cbd18","1f9ef8a0efa5c2f28bd0348f377bc8df9a1a88fd23a1c3e381f33f4ad99c174a","e40104b13f35bdb411e53c9149ac13aa6e320523b8550828621f138a8cf01e5d","13e2140907e42723ae54b92f61a1b312b6ef870a057adfc61881714ddbf41c48","760147bc71297612a88c2df0861560b7868419f92295ad66920133b2c16613e1","34a7bf1339338154c66f1756a110240a7ccc84c93dd92efd4123de9349a10664","7eb1cc1ce2d19e979994af126288a91dcdc46557678c0fc6ec84d7e1a6f08503","1991f56c2ebc8cbaec217c48fe1ce5b389699d3fb0a60621c1595f0595be24ad","833fffaf0251f39e4f8db7433361855902e18cf876057c102a32256d6bb537f9","ce0ae06699d416fe8032f060bd19bee58df40faac5271a4a96ceb5ef8025b87b","5264fa05fac55f4395e79249a03e738ee4960b7691622ad4f944291611abcaa3","9cb152073a04d6ad2713fc9e4d9b59e0cabdd5a699706b68e11d44cbb68e7401","1859a6a53642d74edcfd41b822e63e7d9548252307318cb126d682bbaaedaa33","fe3a6e3f74a39b0a38f40a49cd10ffd4627d04bd65494fe4eb58678d4050f6d1","ba6dc5916fb7ea7308f3fe4e649188193483455c43bf0e4275ba51a727615d75","14f02503933159ff8962bec0f44529cb246c4eae0feaefa17416b425f54b18af","c71bde203989c75a82256b158c67376b2a0035f2d625a2391b4c97e35c6d5133","6b64879fe2d9146ce0e7ed100c5cb40b534074831b9e7bd0f966eceff7231699","b3495dda6a698fe2351ba671cacc5457826d8eff7e800f11797f93290335ad41","0b2daaeed9d54163d8d3b2aa94858f4186c188871e90fe22c3905d1caf8b2e97","795707fa3a6a87f11227a0a7ceefab5728c4a5bcc9ecc9e48af837903f815d74","b955fb6d69808fc1fc29efd82e56cd4ead04d3263746c746faa1cae0e3659e65","429288215d36ebd0e9e02e858f2b10e65056cb193c11b868bc0c4e6cd3489950","5c2f9e93907186cb834eddb919c2494b408136728893bbd7119baf51593a4620","8c83c2597130b25f28ec1383b27287bb3640085cb3d77043f36a63a57deea7ef","3a4f36ead5ba0d6981b33e49d39e25f54333cf6a62af732f43ae57056bad951e","6b5ea5864f994ce9de57cc6d7734fe0633cd1ab9154dbdefa3f13a2053e49e08","c7fb4cad507951907607f36acbb1ae9b46427eceefa54afa5505c81ae3c1ff2c","9d16105cf59fa09a75a23411365bcbfddc702838fecd7955993403f3dc9c92e2","29768478b1d98f0d07ffaa4f7c1913b7877f680477099541fc4e4cf8f3d19fff","3a297f8dc940e58b38c608f2bdaf31c91115729624bf57f4e8a813ffc80ca06c","a868c4cb47a3ce958851caf44eb358b8a63b5dd0a98ee975dd86ac8a1005831d","86f3e961e42cd4b18126c9020253da853cc21d0efd86c061560f0eb8ccb311d8","1f8d9ed4fceed9413b289fc29a8e34f535e3c3bab6871d4822a4de552386cf86","285c4f588b2471aae23cb70d44c083c59cb2b5851ce9e644af36ac7f1ebdee31","a8f2b0d4d9a311fc63fb7fc68244311384aa3ed6d3deb86844e19d7dd13b40b6","873e7bbfb6d967e8b7734b510a789fd45671cc6bed0c6f2ae01c168efca7db8e","76b4b1b296b68c814ecf01e86ed48b7d51fcb52e7e689b9c1f3978804eea754c","d07ca304ef1bfee690e542dae4722f1e220671e44ba78a70372018fed7160996","49edea287b0e5468e9954a0aca1f88e7020e83cfa17c41b140c181fa305a6215","be349ad028c85bca23bb421d2859745e5e83e801db5ded139c28f1d6c6a3eda9","593b796cc27790634655a20bd19aa8beed8f5a2dfc95498f10b0e0325ad4f257","6ccd705850c811475e61f364dffdd3821f70f40d21595bf6fcde2f756c916913","e0558a666cbac769b73066a0dc331ca60bd0e902acf3540e3b45a4c6936c3a99","b79b89ab5a1c5274475730af3e79242c884367aa16990eea8aab3dd153cf6ae0","4056f9ef10db2c9e865a1d751c30f34bfb63c7d695398bbfe064374a4e33e3cb","34bc5a244eca653349a7379cf83e9100d368bf1005f6e612ea12890bda40f730","dc00417f8264d0c293eb9e39b49c581ada6436b271ca914b22c3a9ee0aab4e2e","dc2810da1c29b3d45ef9d99a5c7d8f6025323db68cb7f76330b0d3a572c78d7e","da4b10b0545f0d6eec45e700692bf4a38c5cacd581609a6a8602e4fdab23b0b0","c0d079bb48a296cf763f57494282614182e67a74187ed82bb728a13dc4105d92","171c2a2d5747ccd02ea54de8dfd76c4384d6a2bedc74fee41f68ae6653ec0a02","80ffc7cb47c8300f25e53e30f74302e98e598fbad5ba8b6b0769f0106912447e","2ac2fa2d17f627cbf44bf5ebb75d59ab1ead816c3cb46d808bfa18bc71181408","5c089bc199903a902ef2818eea08c88a0bdca992ff2f7e07da6bc465b9f0fd70","15fc1c8fad1ed14f5b878e84454f5a0b5072d52eb40a7d4e1f396982c625602d","bb2a452af1b60a94bcacc1ddc77a89fd9d4c1595233624ad863c1235026c05e8","dc7b34f45c05546853f6579c00f67b055293764b42f18ba8627987ec17da13ef","f38d47b34e4943fc3daa61149cbfd9916de48d5aa9167f17517f683ef0ee11c6","3f245b674abe948f4058ebb454f975ad230613c0eb15edea1bdcece753a21d75","072bd35ae43ad2027d8745dc43911ff4332769ae60c0fad8bd440870fa368841","c5c785b13917203d4c294747e5f23e6a5e79d0bfff559c3c03d9a1e69a0a8117","4feb9454f147ec7484a3f2ced8f1e2cd74ba3c6af633d0264b222417f19ecdd5","82be6d7eda986b7038c516bb51e94108fbbeae2422615bde7b48842bbf6cd7fe","9270670f50f87f5d9acb69bade37a86ced3ca7a20a66602621700481b04df26f","bab3f7fc97ddb4cfc4db5c9223057f057e5f96fc62798404e29072298163b9f4","6ce58c49ddd1ff97c892ea8a2e25061f049560b8d5055c89176542171d620aff","0f8d761d7f8a17d6de4ee13000db81f731106c09e4afd177f2c29d1c63928b49","55e6a867f523f4d2b16be9218dad09a39b41040805e9fc79b49f637b66d57d07","4e346a881ca1dbe37aa5492d12c67433d17da2fb43106b30c7a28666486258fa","0c4de233cc9fb2dadc70da5f6923e07500fd9056ce0439f080a0657d306503a9","2fbfa221b0ca273dca197253f8e7192bff7e675684a5caccb5da2e737b70a133","344aa971560269dcc6c581d5b5ad1c96bceaa9dd0000845c05fbb72b72a4239a","cc1e5b36c27ed458d28a5d26bfdfad72a28a3a89a222690b8dc922a78f156676","b95074b5c452014bbe7539c3296ef1de707bd4e1bec59c2967e499a60f1405cf","4d64e01f4277e11fbead43e4227d52bd255472fb4d0abfa9667b5497a2643448","9c311944a2917526abb3dfabc3800a051b66e98f68ea7b9bf2eb552718d9ea73","c27541e0a70a0d1fc084943796cc922cf2826cb7fddb4768656f9968df68a175","62ee6f0ac563c721309b112c372742cef0844e17a69854eb43377eb1cc3196b3","e6613ea60b1d4c6522cd1f03be194aa9b342c09d2711bf640c69ddd0b4396e4f","e5fcec9d024e6da57234d37577489c7a3d60f06added42577111f0a7b7e9cac3","c369a9122b064a7505f22aa63c31a4f1cd5b3df83bd462138d070db6c4887e6c","8588f887dd1b17ddab71c47626d26986b2debf9a700db7a078d4a6ac40ecb17c","53179b38e47ae72b993208b94e46d42606cf3c9f50d4ee0988763a6388a2903d","eadb269432ae4b0ae67eab6e1d52c22bb0013941c0eced18c4e77b1dc19ac475","b52fd9e312a03b61988a1049eb608da78fc90da89a3f96eed0b1ef004a9c0be7","41930ee7206d92ad41ce038f9ad8928df68c585c144cdf5fe762d80d9c9b09fd","d10d4e06f86562cd2e9eb1b088e1ce5056a6b0358c0cc6f862a93fee742d41e5","04c6c71d6ff04ce6ce4c8dbb1cd54583c0c42961871601473ec22cced729b60e","2848ee86bac04222e5b89d7772df8b630893d0e41a96556bdfa46feb4bd3852b","fbf32b7a2f7da48e8b9bc43daae4f45c73a10ce742f781ea7393800bc9c8ff1a","0201c3af1069f3ab55e4ef6fc8253b97cfd5911ca6d441b31d72e109131af436","00be89651e8ecd2f7e2984255dcb3801b356d64e149841a0557b8e9faaa802f6","444580ceab61cf50a201b7ae3f05f72be22d454fd725fc9819c46e6745e9e0f9","bd7f31a633ab4c85ea77ab6c63a6593f05184b853b6f74459378087fdcaa89c4","802fa4a9402ee5fd01b4311bb7f42287da5b3afcac3646ca983a47e8293ab114","bed944f551c58292cd46d373ef6f88450f351537e6d7541cce91a11cc90e66f1","b8e2ebc4aca44fda7c0ddfe9c774a98c6837ac5313246aacf921fab42e9e9c52","349d29db02c81dac8ab68b522f2182a947917cf8bfefbd8cc9fa43671eb4c398","32392776a55bf1523c39d41cdb732e43283df4e60dc7c4373abd968152092624","496338455fe0844695911607f0bafeff697d3ef1b713f933d110a87297b68ce2","3046a1d17c5e5504024c7ad99de92158a3e94290e0749462a538686ef51264f5","2fb0d07a48aac2cfbdbcdd899d0812da6d725bbcd4add1d3af3235c811b68e18","6bcc28cbe811cd1557f2cd045ae5236303dd91c26a0bfa2dac91f6e69cd60cec","6c023c4c206f4084df49f3668b7a710dddabd0955df76ad0ece2fd03f9b92b9c","cfa54be05be4ecbc20e3a144b88add8579ddf272a4102c5ee3dab73e37f63c60","27de7f987c686b91727e92d9ae43475fe9a8f427e738d73f06ebb5e180db8983","22afdada5c95c74e07774fb17fea0517a81a6cd4d765269b36d9f2160eb700ed","35549a4131158ef4bb49f577ba9d913c10cb37bdfff833288bd461a5a5676529","8bacf0b7f4f45796d9acab5f74523c586e00d7f9ec5a1538db0342823f4e8d9d","57d75196fa4766669b37cd9536d2475085e2936bbfd85cbac7afa57f7bc15580","2bd120f6caf6c802fcae03c3b71a69f61edda909cbc407e55046ddafe8be01ec","e3700d0f2fab0a1b4fff396d3f7869b687624e7899bbd934bb3fef8d1cf1cc67","ee9d9660e3baa1bea5939f0d12d0ca4e909296418b9ac27380f7133d8aaf3159","24159624bb6336528614479ea585a3abd6cf4fbc218bbde7a97a5704e7591251","0980f8fff099bffc385152af977b9855fdc5d39da1c2923455ea34b876f59c20","8cd867550447989a0e5709b5359ebb00e1ccb1afe56e49d40d8ebb9d9b99b5ac","7a509f939b901606563c55f43b45d04063006ae43e32b2a506cc95a282e825ee","360b44dc8757328283b0c47b309fe5cea0f28485195056e292e0b3297fa1a5a1","b546338eeec09dcfea6c5c5c728ea332262efae8fb797fb058f96cdc65de8812","e8bed537b507a48b495432e2ac247ca5aa8d18b9f28e20094c3c5a63b7623ab4","827651b6ba1ba6dd44f333f28dd73c116254b0413f44caa638811e87a149c3ca","27076594253cdd2066c01a069be03f4055e072efe9712d6de9378795f157571f","c009882bf132ba5a49147c1f6214e592b6b5c0609d353ee178fed591d4f0f14a","52c42a2485e9766d9624a23ce0ddfe23833c96fc9080f3bca9bdd2e62380a850","73717e38937b9aa3d043ea357010e0beca74ef8b7a3c541b986df1a7c8b34d23","1c9f6e5a1fecbfc29824f591eb0e5ecef41068277a84afe45c66d5769175576f","7581744e7936664cb40c6c3ce979c69efcc4e6c6b9f4f4701ab3c6fbb356d8f4","4a12b0baa2295c7ce168a756de04cfd7ea0d9130da6fd75b2ca438dd1676934f","431accc6065a7acb92a50783fa5ed235e96420c143cab3e3df94e1acde23289d","978289d50fc315f618b12d72a232f29a9c745b255e97b8c7cffa5acc7fedda03","f255a77ff827d9f99df5d6738bbdd4a0c5f5f27a7238f7994287a87942ebc7b7","d60c8e2be801492d87d2db736ea4844262f8a6776d45d847c5e779a7c431b418","3065c70a47e21e5bc70fcfdf9e86a4927947e647c89f34220def40dffb460bf3","5f77b5a3cf3cbba824129e26f426b39ddedc6130dce41e743ca6ace34a8e5175","614bd7ff3851bcb33837473ceca245de5b35e8b1b25b547a8dbdb026f7b9a49e","5a7106346e32897f727c69324d15f830662cfd3c7d7d65c8a383a7a7f9b27e9f","97e7054210cc0c10676f6aabb3ecbf5ced9a5de5347495be760a399f4279ed91","03c517b63dc0d92612d585a41d289972c4c6a524af78c9c2b8be950b9ade1b58","1eaaf61988b2f8d96ae995b6c19d48a51c93556aad9ac1388f4af6bfcb7208b3","fcb41a6f834b7c77efe4d3875dd8c6d30b072a5c60b27e7f4124de00e7822f77","6f80748cb4e92ecdcb16b683d6d0da2243d6ccff490cc236f48a998c3b151805","bffd35d4f292d528942129c22f26c5846105168e379e8b6669d05623b1811e80","78b6541d98b889b620c795b52416dd7f14539df0f2fe21373876346955b1da3d","29a8f4983cce3cfe347489ddedf11c5e73ee30a8b0bb7b0deea876821bf511ff","7d8a1bad266cf77917d89545b77769ec1c9c02c6f20318e7ad2101aa33a31206","d91789744a66aaf10332e627de8c680f344139f261bea287fbdb95b98b16dd11","e593e9396d4e528d0c88bd3012f84f0f7537354fb44283ad90113ba75f959b77","14d35893fc5c2a5f0f09cc02edf3b1822f351060846f685e3e645d92f1017555","9761a5079b952e148b4461758a1b883d2febf48db771309fba9dcfd259045434","e5eb932fdffc3568d05c12de37a0c4d4327e3f0119f2fdede3a825e394db60d1","367e45bfc63d5e72e1499e55be3d0329e347a71ed8d6e82a4f53f006342471de","2da78bbf48da9470bf98df6709a4b65f1166ce86aa6ce4cb294f926ca66782de","8ef065f2ac4100253cdf5a12b4404f197a590c7c15560da4918814082798e758","438d0d99045c3843db8be13603366f6e8c828a155c5be1e4f524f850de1f875c","898b98212d39633eeb4d1829243718551aedc6b7be53f23b9a7258bc9eb0d1fd","628f608da9dbf5b9ccceb68edf63cce258a4a643d7134f06822110f6b74c2e49","d4e45557a5fa352898218bc60f6cd8344dfc22bd6af2cafdd8ed0f15a8590db0","335865b59fc7b53e21b5cfc30219b5e5627482d224d71b9ec4eea74faec17c39","811fcf4f650ed92025594eb3c38a114c7025009afe6196a8bd89dffbadcefee0","be7272f3f3068eeaac09eef4495e19630e11040e17ac83a443378dfc6e3bff92","cd20dca07b4c102cf9fc7823e792e41b6bacf538e01767f1aba29c279ea3ad00","4ecc7907ea5341399b4273e86a917858c4390fdce5d833793d40b540023942b5","efbb45cedad7fc9ecc3f279c8702c2120e668e5b243ec48c761cbedecfce2ad6","595030fbad551b1385301fd6425357062e5e648633ab08e7d89e40d2d121eef2","6341434693bbc0e134eccc759f10ddfc604db5f87d151a30d65510b17249b0c3","093e8a9f2e8ed8c12c33d6974c74592cb2cf6248ccb464ffe4d5199511baa6cc","89cf07512112291676e4d8d66669d0e774ac6e24334d80dd22a4736dc81e8c97","629fb2051fbba6c8f14cb7902524685e1563e4b7f06cbc3c3b36afcca97a83e6","944f6780c8f6b17910f0c1fcfb4b87832538deae8b8b6af45d2ea505413c5bfc","4f17e6995937a10df39edc030431292ab536f28b0589d05bbdff5ef63b923639","9bc886a4818abc443705b5222a8b9c99244a11d3775dbd78bed0962b5a8273d4","676fe3679c15f340efd28569f8126c0625ce446888b715c740a460049bd431c7","3c27b8eeae5db620e6412ca5f40436dc3fa2281e9cca16a0d5c0df180895046e","78d4a1fc5df01bff728de842407a0dd281cb4af160c97a61f62a0215b1b57a32","aa8accd9fcdcdcaeda2460e960b226310b26a664717510266d1cae4f5c8c281a","950c30c3bec6e749104ae7d78d59657e4fa2bd0fb252702f0a1f12fcbd531073","4ec2615618d536abe756f0f43aa60fb93a2b2b0be7301759078ee664c72b4d68","4ac632487e6206746467db6ee4ee96590bbec1d6098d3932eb398b9cf4a2a216","09fe007b7664a0fdcef62bfaf78dd933c827831d19e73c78cccde1863db69419","70ed00d914e99cc02dda1a733d214e3acb79e038807453bfab8a77759f34efe4","c5a676ce053b493151f647a4c9cb8986c866f3f11b2d4bc4f54605c90027d65d","53abf090edefadcd73630166a8cd79a3ca5fcc870f95ffcf1f0ef042c2c850c7","d0eedc8c296089a0dc99ef4a8214bf89a93b4ee1411e21621b670488e834f752","b75b809c09e88cd0b954bef1187b33fd51e42ec35a6369efa551d776e1a3f36d","5f882490c2a25d12275909042073a7b7ff22004670d451b58ffab961f48c728e","71af3d91114b01a869ee839c98c84f950dfc4247d7187e67f0d87f2cee733e26","f928752bed64afebf3dc801de46e38d9af178665a1699e1c12eadb33e80b7e90","4cd60a92ff49ae97fbaf2e5080b5d2fc64f5cfd13803cc1ff6863a46770b8248","0eaebdcf699369e4de192d486e2b3463e81672694483a46b4edbb7736d213df8","f69bae3efffa6ac45b7d96e9483b7124f72be84f1e040b020848d3765452e901","5700557392f8e56df8c8b22191c665c1ee53e4848a469e0b1db370fa365892b2","c51a938552721b7cd407a4cd43e69f25d83c996d579477aaea8b3c1cb9ac1381","7abb695954c6cf00134d495e74d0f23ecb027303caf556b859bdbd473e18c025","1d3547cda4163e9a4d9299bf24fef40657cb05cef45d3e9d1c6f596fec5d2384","0faaf76f479d69f04e6f5200833c5af70f06b897f8b73134a4014d23b0964e99","b99fa7445e94e653057a6abc05b38dfe62f237d977a4412d626dcd94d12f87fb","53e87489a506b88ca369fb452f5fc0c6e7157519e11ab94e11171203aa98b4f6","203439b634c693e840650e03e13b01a4de15a47a59b46f78bd1f7d1e529695f0","a3d03537719d60ee7222b06a75ee51de22d870b44effb055606deb2b8065f1be","3370f002d970080dc0e0f620607d43919f590668d3dcb9852d2a533319153bff","eaa2663c5bb65ec1e0b1fecbbefc34eaca68deffe18c41a9c84e36cd6e180139","b29609b03ff3a62c0a726423443a439731ef78ef363c04afaee5d8fd5f12bb70","b926e886ae50c3dee3da889a9f219174b4408838cc883311d46699836798173e","d25fe9e615b9b052699f41467921d9c840e260253d77ecc2eea665c40b2037b5","c50f74338297dd57ec751dbf50cb6c116d24ff2eea9a2eb7468cc6edbd52b041","fbd9310e91864c1988f1c0ae7088b9c8a6b579514a753a486e04472d36549a0c","9586677c0de891a1a09be516fd80c8363f27bdc5517e26799e988fc760b9ec62","b69ca77b74528f4dff08be3b2b29979e9771d0da122642543128ebccdda83413","90eece9e826a5cb249552ae181e8befdf6baf8bb4a04e177462faaabe605595e","2175c02e36122535bd2d458749fa564b43ef94eb28d77c8b9aeef4e0080118eb","fea9468f1ae2ee25828e64addc02e728ecd44ed247962398d8fdb75ce93fec16","58e0ec03d197ac7bb82ef2797f60932df7ace9e8c6325ffe03fc8b7181e82594","923c49b24c4ab9c49d2f3eb95fb85409ad8c05d0d801b64d4889257a9175efa1","751c5af61c57b87fab54c97523fbf3698011c28b8910768cc38cd7a59b39c1a2","b2566808f76487b3a8b0d7db516973890c4e7432b78798558897810ee99a9d3f","efb19a6ef4c7328b2461ef6b848e6c1e83362767649d6b726ad9ab4edd0b337a","926834a2f40357599f8ed7f72dd0d18867ac90670c3c0c87b2f1732f33575b60","92e75aafede91fbe8c73739148c8ae51bf3957613fd750499d4822f7af72efaf","61a330d2c0c766a8e1ecba1fed0df5feb65f797ee5867e54a82673a3107df3c5","06781c7069fd609872ec5db301b7e9e5d3e628c8b877528f5eec8c904847cef1","122f24a9e59705e15ede9ca07a4aacfb66f86c8144dbe08176c8ab6fac1765ef","2697ac104116845fa8fa4a7373b479543dd5fc4ebda4dd02b9b1aabdaf257eb2","bfbd4d1cdf2cf2babd81defb9dcd41d312bc266c275f464eef13d50a19e21c7d","fca140d1bd94ef44609426bd8659a0e1d2330c17754da21880a7042820bc5d1b","cd2a0f0f5ba76ac130628c413bed0ceaa9484e8847fac0a79abacb9d567006de","d70898f53ad15bdd56d688c35557d2bcef62a2940d23223fcd2386f3e1836d1a","74614863a86fb87c0a1d90b38ae91fb71a4c8abece53592683e44a7e4a4d2fb1","6b4de0b869bec6d098533549596da565ccd2c484fcdeeed5e297a3ab1ec2434d","544bc91113c8d094a9323a43c792f3a3351371f17d242b1751e02ed8a324b968","22a23e6e35fa58266e657adfec1078058a8f6cd061023b966fdcb7eb53f4a33f","fbac4f9c76e136bd8ddfe99d992278e65a4b343cc6d2c51826db79d8b1dee2d8","9392bc27d4342da1e2f1233c9dea7d5021843e58725dcc318717a9c0331cba60","e14e0fafbb9644891291386c5926800d8ac45f64b7894a4b05a1ccc9afce93a7","46a6408af6d2ec3db51f2ac69db01bfdef97b4386890fd81da8bfe01e7ec4bf8","734604c4fd9f0b8c86393b8e86574236c704b3815ab33fa4e7667d08285978e9","c59c17d9a9e7db647d41a9405db859e609c32ffbba4901591712a4f57df5f087","f75dfe2c237dc9ef5d201a9e09eac267c59d9a06c17cc3c70c43e97af02dd2c4","cf40390e5207b41f71c75abe37fbdc066ef67fc40c05ef7a30a5d7eb8bd5a3bb","1c99fb97bc91a60848f3b85f6449b38f550e799fb8ab39cbe9102fbd871b0902","3057cc4d0acc3527a38596b3858f5f8c79fe696a620b7761b17c73aa7529b325","5efd7d914b88a8e5298c3c84b297718d5012ea44ddd73ea0487d9a720c1856c6","86af47b013229a91f6ff104268c1183f11f81e74aaf8bc50a0187b7b6500d452","e9d137f04d39d9dfc3133a3d3f9373df0c312cdfe0eb31a6814a011145740996","f248315e033cdaa3aff3a4427e6a4aef07ba68a6b1860c24fa99528c0f021244","7cc6d21e86806b3073435a2a0b9ed77002b2aff487e7b9b098b4638bd563e871","81d15e91bed90ab229aaa77cddfe6337eff9b89110a6ae7c63cdf1853303d179","a4b3c2c3e14f5e4193f8a263cf1fdd889a3753c916dc52f1fa179478556f1838","1f77ad12134f2beb3a8dca044075f57bb32d0c5143b1a8bfc9f9ef389954d1ff","baefa1b512817334f05fb6ce11cd7b550380d54bb135555067fb30b1a2e02d6c","c2f1816da140f94eb956f1d664fc36552f4412b8089721c2df8904833bc1743e","e3cabf40a00ea558bf1154ffdc4747eee6d0c3c372f27a48886986e6a85512d8","ab6a572bbd1284e1270463b86e8e2f1d0238281056234b4f2a793ed110d697a8","bc9a548a41d6b4bf0159f497549b301f327554cdd246abc4ba1bd3fde76fedfa","b1849a54d729268ee6d6277f020824da14ffca96edde851cf8661acccadc0f9a","4f826cff774ffc1e4c270ee2f04bf1fbcaa7c0947351da677ef2f88a6b82886a","c5cdc744d1ef40afaab8007db055b08fc233773d24bab1a3b2867490d06c752a","48353aaaf14b879802a196eaeb35d51fd759715bedca27ba388c906f0c6837a0","01f5d88c78f9fe6899112748ca94c1f1fe5eb2f74eeb7a16e066770c586f79e0","7568f415f519840b4913ede54925fd35f441ffc9902cec1d59d1cd071c98bf40","956756c2075a81fcb7d51adbcf68060c812997be2c7f03b1f364887659b66dbb","f204f03efb45c76c920e781b4f094d7cb48073f6e64916c9911c02dc5955e4fd","40d84f2e0300e4a989356c5bedf25bed8c8efb9cc8ab70ec7426d72a8d2dc9b7","72d186dd5a546fb50363dc6a73f088e981cc45a28222fc48dd6990adf2f8c8dd","9a589e5a7dc3287112b38326c60dba040a1405d083d7bab3adc154c8e4db46d9","569065194c357c45b115c40031a509cdb477ad23c5dc9fdb93c199d790552ddc","deef6907578592bb6f38bf889131e214709500633f2c5392aecfc8d4dd00db11","291c0f63f0a837864aad88c278fd83448755b856f95167b67b3f92ea8091c65a","d7e51e0ff2c35311fb27a66199f92fa9b8ada3561df188785807d34d226c3cca","c9d7cd5a5c1264d356a3ad3e0dd7de08de864639a76fd0c037ff11a5c8a6db3e","7fb006054334796a84f98874d6fdef638357e20aaf71519b982c90b954b6adf0","e990881ccf7c314a9a81f133d5890853557bb9a97ca7526e99ac26669adfb50d","ec8fcb98651dff25321256bc8f0e39c7b8a7762b0d53841706ba551b9af59a39","77d9b88e08dd500c974304cf667193ff64a308039d86859e28e5e4bcc6a89739","83f71c4b77fd761607d986d4df0f7b251ce75ed59a35b8a6ab0b766b98e52e50","576c18bafe026a9d137cff02bf06d6b6bbccb94ef2ef16c9adde47f9156927d2","c880c87d3cc41b43ee8a9284b4c9e9ba3a889196b6c1943605ec123a00d5ae3d","6ecb3c477adc8b48376c7dac446e69c0d76e59e5725da5a9d8f924cf3167b4f7","a948eaeef88a42773d84d7da4ea0b7ceca3e923e4650fade6c8b3312d8b84f8c","163173f50f2e1fe8f71b2e1e7a8ab4236f1ec36856567cc07ae76d37ed09d53a","8542099bd3ae6bfda52494450c0576b9048444af3c1beea750152f9753f3b1dd","6b4484b668406fb36206dd35c440bc8594f13dab347942975c0bd875b739471f","19bb0f71e809b1bcad8a182f87b16697c5986e521abf529b6edd01d343a02871","347a72fff29c0ab4063ea984fb9bc3f7966129ee08bff5701e0ff5847ce5be0e","46fedb23d4af3b1d72c076535c07b9c8df86245811df2a26851e094932e14eed","1453016b8b984180f049e3ce51854155c72841bbb0d0270738a8d8d105d17b15","ea1fccfb71ed3439c85a6ee31cd0bc85fccdc4601e26a55b222a65dd765fb086","66080d8ccdc44d5f1c0aab9c825326fbc313c9e0f5e3d16def28bd7a8eb7e476","7382896b1b716ca333a09338c03eefba9bb30363dbe47134e3a19cd06df4e95b","1c1c769ab1785a048451a38d2d1c14c22efbaa027eed6ffe9c9faba538854b46","780e99583583429a44de843056f70c0c241e98ddb1b432be274f18940d7551c8","646b23429c73048512fb7d633049bb78945f7428ddcc1a3fa02f0b9484a354c5","cd3cf475f37dc8d4c4351c4868cf133bbd773b593c13b782d55a8a5b2dc5e5ba","397c8f7c21cbb45c3b0eda2d8ea2220cd57537151b44fd19567162df3ab1323a","2653afb0cfcf8d52a18b8841e86bb30c57d40b4872875a88239209ca8d99b337","6666d40a7d901bd5e56cf32b134663da80be0d7c619a311b4090c49222882f1d","9a37c7bbe239ab724ee7ba371fe6f1ee4430957e9375028c0ceba13df0693265","67f4e28272896ebf4b200c43350b5db6f77f31e7d5a170acfcd2d6be93e00a7e","706aedc3518a91be47a44ff02eaa0ead214a0808247e8fe6cfc9654d702e4a6f","19032d0c582f3d3a30e17b87b034311c35dcd3269ee860408f9b136672c77515","e3f16ae42c3659297cf33290e47ba2a3d16426993128de5e6cf0f8f33dc66d26","517ea492971d80c0b37e4e10da46ba84489548936f478e475ef22f94dbbf4575","f0504e035cec24fc554df01e2f801ea3d9b44731ae9f35c4c6ace238e5587d54","4a040a495dcca5f82ea7ffcfbeeb24ad1f399681444b7255bfdceb711ca560f0","115380cdd3efcdd793e9f8cdf156b162d1a215cfe8470ed9595092c859ef4016","cc6a95b1f37c54bd9dffdf47fc38c9a81f2f0117653ac0d17fed8fc30ea6ff51","276132064abee78fbe14e125167898774bd0a98e2ad22c924b8833cc12385b92","3816fe2cf855ea5e3df0a6fe52aa550fd29d7fe7b6cd983c18554a7b09c03976","0ca6bf573a7647bf9630b36d06864574d2b62db7c9374528a4c244511478c520","b658c35020517a6a4b531eb4953cb71c20df7ec7c178a56842a8bb349924b1bd","27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","734997b41710ba3c422e7ebec66638048fb186ea3d455b9a1bf93fc514be8ce5","21cfd01ca3bbace027f4e1407926a77668c878ba422daa6259b3667ec74bc081","9d4ddfe3c00aa97416d3532e6daa9219793c7127d5e9253f9dd28db922e0c96a","659cf6c1bf89781d08c1312f14c559a1ab424fd3f14647fe6352fb1319a94922","1bae6a80c5acb58cdf89f1038fabe51e441c876635ed9de40774b8de0c89f5ce","181f23b8778b1ae86c5a950de6428c2a60f79431910109d538ed5d5a63821cad","16334558218724324e8b2b13a6115cfeecfb83f9948b66165e7fd046cfe5b0b4","acc51f71d876493164ab3b10ab9bf5c649875dfe2719c3ed6ce31eb3e0d6f288","a73eae6035f3eade262870a642416fcc58f6a7a6ac9d57e067119ca25a51fcea","9e9d0d16188e9686d899099b074fd4396147b0fd1bec5e47097a578b53ef47c7","8b224bac26fa90deb3df080ab07ce5b731ea5bcbbe8f7a635bfe9995173f60d1","c5863946c67a824024f75fc7b5002f3bcddd57531c0bbedb2e6f3823048b0870","f537042263ae3379364f4617cb463f1124865145aa5fb9f7c0d22fb81d287025","0fd2f21c02c6492d8feed980d85951238350af938eddd4d066b402e1c3cefbd5","eb8943c33f96d7f63e6c5edddf3f0f5590dbf0d1a82acb2c5aadbcaa52246b6d","30b20e543590d0eed2efd5ebb5b01dd93e6e80e2dbd9553c0ab3baf486666aa7","b4bcaedcf34efce0b1b67b792ee368203c4a4cf381343e807adb780bdca1ee3e","59fcb430bdb10b60c4a562c121646eb21c152af280ee59bcc3d20683c9287377","ef4626e2dcd9d132f1ee10f67be0326f48b61c0f7146c72d435cd2788cc3c402","20a37f152285990381271e0d28e194c672b8d277cd3150ad2218ef4c34907d9f","dc442c4ab1ddb22237b0e5141053516387c45aadd749127234d35a2c1ac7db9e","6a89cb8d575a4ee4ba98d7f89960cd2dee497c250dc58a084d2a4dc665cb53ae","e6b4665398876480ab0f62caed721562e8c63ff69f6c4980b5b90bb6c6b0b496",{"version":"7344c32ee78025dca5273f64cb84c85b0f1ffffda078aa687d746f003471ba90","affectsGlobalScope":true},"e51484e32c1a4224b2248c3e9f31b164fb32055ae493452ee27881b8a0945dc1","56e933722bc0b995aa96a7d023497871ce07d1500d9dae9e95875b3208b23169","ac3fe57c3647a20c4c5d5c90b9fde0babbf2f58704f55cc5df03b36b6e2fe447","5d3c334e7de094adeca13438bc91ff5886e5bff5690c396a3ceb2da587a91d5a","c6eff85f66b05eba0a5af516cfa2e7ce0c6d2a2cc71bc4c543915c823cea9ce8","434272013d17121b677ec280c2309b16442cd47060af926d1deba5a00fa26856","b55144428bf4cdc9d7f5027035b45e165feb6064538a06339aa3d7186aead0fb","7f5fd4f85fbb8f2ca5cb9938c4873d2d349112d58f2422a8f218e64e5902b9a0","0706139fea91b191554d605cc00192d295832707c54782c14b2e770f84786576","95962a73cda657445af192e3491525a603199b97e73e104eadeabe3eda6b6435","1bbebdff86484ae402823d23e066a64aea6d2dd6a3c3a97b61cfd370494e337e","feec049813eb318ef8e434887464f1c0c171244d1f8a2b5d1823dae830967320","cb88f3cbc7700c70257a3f2486acefc813493199114de21e704e9f824b69f350","5856f753a225ecaed4f059098f4214084a0e95f8a7b7f291fefd6aa488ac4bdd","eb6e9970e5e73182935f70266c8b5e42f5c481dea158debce36375e920a2e9e2","95dba2a44e6fe23300f32afbc11fa8971aacc3630fd1d05601bab9e71ad5282a","30e81e0d15a6cca02397e1aa517166e03ce0a28f0e6d53e25440ef22b31f64ab","8c3234ee825381290cc10c63af31be166404bfe3cc218e23b7c71c502734e961","3442bd24d7d746b3a79f2bc44d8456f58ea4d841dbf6eced8c41607e980287c0","df5ce9a4178d2770edab716847c11aa51098726c7b5080749fda25f4f5b5a2b2","f9623ef5cecfa8ae05c1a3bb8cf81c0c723ec124e46f71e3104ef665fe74ad10","809a57de65ca328f47f4639ba1a8a4348af2c9f91a060e77bdd3dd92dd71b492","016990463a717488f46aeba06125b987d0d7c77dc09d27d47ea2760f1af7f4da","692c448209a6699a345b5318ae2fc0612ee95c52812f0abf81dc902260ce572f","6ba92d2209defae5551c58f024665ad2fd965f03dd80e17b1bb1cee57ebd706a","d50fc26add4a7d835a29482544e4605558f3706fe14e191b1009ce70f76dadf0","39eb436d0226a590cc35f84b7bffae0fd613e2c4c83124be83969726df8cf269","e7dbb1423e552557b09a125be1c6772c94c169677146e3eaee95e6d1fc6851c8","aa184f01f3f0b540bddf441dc658bd472a59d519da188a2f048acb365e8ca77a","49798c9e2d9624bbc01cdf8371171b64a4eead49fef2853b69fe1bc2e7c75207","c7fb2b8c48f3a20faad1673b23366f24992afaf7d3854190e51d72e0dcad5bc8","c0a48e69d2a824fcf1fdd6ec59604e280c56998ac7a7e3a8514823db1de68cdd","4e78c87355f7e4fd9524d7582a14bf72771aeee33acb73a848de8bf2e44d8831","ff00f23ec0c6c986df2778657ef18073548634b31757bd496902cd00c183ae96","6c3351c0361b6fa16a3379508e2c4114cba7ad6d6bfcc0d5b2fb9f02aa2f83c4","69071e42231f3b87f71b076904875bdef914f01c3017eb6a39a33694e437b5e0","dee490d4ee8b309fcba02b3c49ab263b4a40946c1cd29e7b12e08b48c70cd9a2","7ddda341b1ad729e8da34de6378d9d1b3f64a7bef3a4a8fcdf4261c9a9c68ccb","174f185e6b6399ea73366bff1e454c5e54bef9b0804a57bef7f5009d1f21b9ad","e0d39ecd8a0627a45b9fece85425d5d048e2d0cf23d4c444d9594147605ca4bf","10b3b799f9675ebe2785104b5ac69a898accc5d32f86cda152fa646a2c3cdfc2","41ca098760de99ca2cc5de79e73e0b837e2661767e5772a983bc535ba4d86690","f78570ffe02941be6f7ad1b8a54642a1d6069d16cdbbb75bfe1cdf81610f0c69","c0a90b05dc7d2a78b2f90c9e2b1d464887ee23a71799acba659b0359785d07de","0557cef4f85111361244bad1e684ce9cadb326e582f78ad70d31c93ddb0d99f3","bf5413a1e4c9a2127b83ff92b52f9b3f344f91841ffb95a8a78eec6059730caf","4a8c98591fb622a5314d2f61b0c3cd96b5a439d84ed9a6660e71bbed3323714c","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","9c7e2234299983670ec9d650ebfc2791bcf71f126b8da66b9b0fca755eb8d886","496854efb0145947319d2c713c61bd244226a110f949227602100f52c6b429bc","e7ecc41702b29153304d1b8c00aa371d15e64dbaff6c7b46c7181797e7a075ac","1bf13f80cb429cf43e671aebaa0b9ac9a541abf244af81fd97b04678fb15a6bb","3f5ab6160bf2935f00a55f9bb7d5ae81d49f19eef911216cc428c6e1f1059ec4","fe81fb714ee64eb7219b1cabad2fcad57bbd38f9474a583d718c8eb82b6241e0","16eea2a294e3cb1988d5b06a022ddc5e75769462bbbe700c63956427a6f20f09","c1974446bb67158264c4e2ae093ce65422d49463c373148cdd182c25115258bc","7538fefe21f12c872e86670f9fed9ce4c727693de6279476464cbfd43ccc5fb0","fcc8beef29f39f09b1d9c9f99c42f9fed605ab1c28d2a630185f732b9ba53763","14fbf770a4b022c2f050d2140988ee8df0f4c96a0f970758cbd88c71b82cdf87","aa33b971a2a5b33c05e603e2f7a7d50d004a8304b8df98bfd75c84d0e05d4cf5","4525777519f9dc16bacc951e16b5d48f23a975f2ab1b0161066f829aa9cf2554","b61f393bdbf923344adb8a683889a65fc615cc2b12565778c5605aa8fd6b607b","596def1ac1ab5af6f6d86d30c0e4cdea6c4b11d6595b2fb0849ab70fee65961f","f9b859fb0396522c5c978fd57d7381c47fee6f066f75c32b06472ecf44a38890","323a75e01c89a50bb8827d1d624e72c20b0d81d4647a30ee6a695dbb4d76f3b5","7538fefe21f12c872e86670f9fed9ce4c727693de6279476464cbfd43ccc5fb0","1efaf4c3fe7f884e46be5203339e898abaf1bb3a550b706c268e68058c105b8c","644980f97d36471d8848ae289126fd176f5f3a3792a1c6dde431073985c73ad6",{"version":"fc764f7a81b6bfe36b5ac7ec2cda57bd40fddbc2e5ba60f17bad4bd7486d562f","affectsGlobalScope":true},"af9ac78f8bcc3cdf3f977e5ae0108ebb7975f0fdecb1729b3db9c2457a2f95eb","4f69796a7c13a8ce4cab08a0630661c96c1ebc4af169b2e85fae95679a0df30b","db6ed38ffc2292841af687a6c2f0b0845205d10f163028839ae1ff23bdf81de8","d312d9614ccf614e4b0c95e56a0e5351a8768d881aaccdff6075748d998bc8a7","1b5ac77342a998e2837a2f049e91ca72c3f7295d0eb5d229999e9897e6cc275d","759d2661ce795a535cea22722f81ef12193731d9979dd96c41cf3f82f27c5e23","ab884b58e04fe8f651b41cedd7b87ffcf25cf1abcf8f4186f4ad7297fd5f97d5","4e9baa121995ebebd105ced0dd7e4c8a8468fa6737d360d7eb250a9e82d753a4","95a615f2f5b5995e84fe92ca614174ea9c8a1cbbac2f2fce47287af9907b6aa3","ea51f5754f06777ff6c0df0c0541855e30650f6c8c3721e2a06ac4a0fa31e160","d929a4badfa2f084fc332bdf27cd90c76f1fc2daa29f30fd2f729d4ce4a1e50d","452234c0b8169349b658a4b5e2b271608879b3914fcc325735ed21b9cb88d58d","a2017ed5f373c69897024ea9c892b352efcd6b42fa5eaffccd156fa1212745e2","4b505e20a8ce6b5dcf400ad0fac45a68e806b897c2f2c00cda9a2c0d46d3d173","14ecfc29e0c44ad4c5e50f9b597492cd8f45a2a635db8b5fe911a5da83e26cf8","bd93a3a1fabff2b95fe9442989cafdda76c3c8949ae1fc4bc75a92d04396d9e2","02ed2766d79a00719ac3cc77851d54bd7197c1b12085ea12126bc2a65068223e","4b84373e192b7e0f8569b65eb16857098a6ee279b75d49223db2a751fdd7efde","fc85a7c96dc69c9e16ccc8d9520075d1ec272e0036aa26c88251709ba25ac841","7c37569e586a3276ae7cbc405c9f1c51efdf3f603cc8b76dd2196d1b01c2f9d0","bef359bd6998f4ce186f7450ec3fbd9cf47ee3097d75c26828b6d985c843a48d","696a04758e6c58966e18bb99a64292017fac57f0ba5482e1bc0b617be850b12e","46fe6faf3d6907bb675b5c37df15b6021b9ca1e4f91b25ccc422630b4c1568e3","c45a995ea8fd0d701c3e013dcf7a106809d9b1517c7115ade3f58d4196bd350c","0332891c6714ceea22d919677ba76e7875f4be1104dc1c2a19b9359b7a2e08e4","38a217719a1e847d3b56f0e513075f07740ea536a838c332d02b2ce4288f23be","d51809d133c78da34a13a1b4267e29afb0d979f50acbeb4321e10d74380beeea","68745f37d24b1b5800c45d0c5c00abfcbb031f9be0bcecdafd29405667397abe","fccc4725f7937821ed7744c796c090963929da13a497a05a58ba478d1c1442ef","7537e0e842b0da6682fd234989bac6c8a2fe146520225b142c75f39fb31b2549","75e7f3ceea520eb800e38806fe4be2a37747597d837602657ed809840d64e9e8","60fbce4fe62a585d67228f8c1e43e7f1e5493519ac7f3d0fb383d95c1f690a1b","ec680627cfcc2c14c92a3771593020cd6ef28b20ac2c11595c788c22e5ed8825","baa76e88310b7c17a2ecfcaaf71f1e8851a05c2ca9677ede20e6aa552433ab74","a78939a5e506a5ad80952abaa114d8cb3ebff8b44d78264dd4e2a1b44e33a513","4203181f1c1ba620814585e93d908b79685f053407cd6f80e4c03e0f24f0cb6a","ba886f3b114384a98944ceebf202b91b80796a621bef21234d0b15848f0d88cb","ab43326dbc670b95546e82370aa9a5fc4e74fc26bd957f9d92e307f8f1038248","cb76c9f437a827420a9b8de4a8b928e13c4b846e4d4c134d40f167682bcba381","937861ac75dca790635035e2ff8367f41a38b55e79c4408470ebc0be23fadf18","7b05d6980e722e7635570394e13aeb10aee2d80c1a84f4cce690b40da73a0ad6","888d3a998e1bac2ca8b56e1d8b69ba1ecbf3cc8ba3f44af30937fe1584d1f317","67299dc8693cb640ee6f3c1c0ca177fc6c955387d76069d3187ddfbe831af61f","716879fd029c373d842f7c49a3077d9b2562ab910a89c879ebbe731414a73024","e3595608d75a0baa5a8c725cdfbeea3db443e93220bc4b5e96298b86bd18bf5d","e8f7d5a6afb073c1c2b429bd7b902c919f9127e69b11736abe59485a254d2e39","7e8c4c9afd9f75b38633d7cf1703a7df3b91f11d4944ae52fe25529e13df25a6","e180b1198f3be36b90a6942029dec78250882bd74e8e0b82267cc7d086430aab","f212d052b6247ce6f2158862a31a483450c3dd158faf7e4784890dc8a4e0a413","1a0d230df5a36f488d740d0775aefb650a14f0b7bb9a904d3688c0ba1674cea0","d4edf705d3100b1b503c35ab4bde3fb0d3c047f1c0d8c36867fe264f7bf8d55b","4ba099ba189a6bc028a352a8dd1e4bd910b70923f6cb660b484707b5a109785a","3d9a0cce3139ec3338fe054d28ba3c262e298a24b673c93436ce988011b4d05f","edbd3a40c9a8d72c4c562347bb0aac97156b5aa135e9cb299201f9d4b35c4735","a1f5a1f86ae1701d4f2fc216a0524c993683a1173c044e857e5209cb07fce18f",{"version":"3a909e8789a4f8b5377ef3fb8dc10d0c0a090c03f2e40aab599534727457475a","affectsGlobalScope":true},"2b47c8df863142d9383f948c987e1ebd25ade3867aeb4ae60e9d6009035dfe46","b8dd45aa6e099a5f564edcabfe8114096b096eb1ffaa343dd6f3fe73f1a6e85e",{"version":"1c7e0072ec63ceee8f4f1a0248ff6b9ec7196eabd5dc61189da9807862cc09bd","affectsGlobalScope":true},"bc4db28f3510994e45bbabba1ee33e9a0d27dab33d4c8a5844cee8c85438a058","232f660363b3b189f7be7822ed71e907195d1a85bc8d55d2b7ce3f09b2136938","e745388cfad9efb4e5a9a15a2c6b66d54094dd82f8d0c2551064e216f7b51526","53390c21d095fb54e6c0b8351cbf7f4008f096ade9717bc5ee75e340bc3dfa30","71493b2c538dffa1e3e968b55b70984b542cc6e488012850865f72768ff32630","8ebf448e9837fda1a368acbb575b0e28843d5b2a3fda04bce76248b64326ea49","91b9f6241fca7843985aa31157cfa08cc724c77d91145a4d834d27cdde099c05","1ded20b804e07204fc4c3b47b1ee67bcbbf483c2c1c537d3b06ea86ddf0ed5a6","e0342a1ffdbed1c647127b61f57a07bc908546f7f3b0d21e6fd49f7315377950","3dfa3a6f2a62259b56fa7bcebfbacf886848dfa037298be5bed07c7a0381ee4f","a1e3cda52746919d2a95784ce0b1b9ffa22052209aab5f54e079e7b920f5339e","1882680f8c88c5648d603408dd1943857ca831a815e33d3126be8368f7a69252","f387a979388291b2688ba0f604e3ae78874f5f777616b448d34109762a4f05a9","cae0fb826d8a88749189b8a924dfcb5d3ad629e3bc5ec934195fbd83fa48b068","65439c17810a801359b14cb051ad50688329bbc1b9c278c3f63487a31a98e349","488242948cc48ee6413a159c60bcaf70de15db01364741737a962662f1a127a5","42bacb33cddecbcfe3e043ee1117ba848801749e44f947626765b3e0aec74b1c","b326790c20287ad266b5fcd0c388e2a83320a24747856727dcb70c7bbd489dfc","cd2156bc8e4d54d52a2817d1b6f4629a5dd3173b1d8bb0fc893ee678d6a78ecd","60526d9010e8ccb2a76a59821061463464c3acd5bc7a50320df6d2e4e0d6e4f7","562cce1c8e14e8d5a55d1931cb1848b1df49cc7b1024356d56f3550ed57ad67f","623fa4efc706bb9956d0ae94b13321c6617655bf8ebdb270c9792bb398f82e44","12e89ccc9388208a5c72abe13b2037085dad791d5f1bd5f9ce5f07225da6bec4","52ee75cf0be6032ebaf0b3e2f2d5b98febe01fb4d783a903c03a4dbc8c81b205","9054417b5760061bc5fe31f9eee5dc9bf018339b0617d3c65dd1673c8e3c0f25","442856ad0787bc213f659e134c204ad0d502179aa216bf700faefb5572208358","443702ca8101ef0adc827c2cc530ca93cf98d41e36ce4399efb9bc833ad9cb62","c94f70562ae60797cce564c3bebbaaf1752c327d5063d6ac152aa5ca1616c267","2aeb5fcdfc884b16015617d263fd8d1a8513f7efe23880be4e5f0bdb3794b37c","fd412dd6372493eb8e3e95cae8687d35e4d34dde905a33e0ee47b74224cdd6ab","b561170fbe8d4292425e1dfa52406c8d97575681f7a5e420d11d9f72f7c29e38","5fe94f3f6411a0f6293f16fdc8e02ee61138941847ce91d6f6800c97fac22fcd","7f7c0ecc3eeeef905a3678e540947f4fbbc1a9c76075419dcc5fbfc3df59cb0b","df3303018d45c92be73fb4a282d5a242579f96235f5e0f8981983102caf5feca","35db266b474b3b9dfd0bc7d25dff3926cc227de45394262f3783b8b174182a16","8205e62a7310ac0513747f6d84175400680cff372559bc5fbe2df707194a295d","084d0df6805570b6dc6c8b49c3a71d5bdfe59606901e0026c63945b68d4b080a","8387fa3287992c71702756fe6ecea68e2f8f2c5aa434493e3afe4817dd4a4787","0f066f9654e700a9cf79c75553c934eb14296aa80583bd2b5d07e2d582a3f4ee","269c5d54104033b70331343bd931c9933852a882391ed6bd98c3d8b7d6465d22","a56b8577aaf471d9e60582065a8193269310e8cae48c1ce4111ed03216f5f715","486ae83cd51b813095f6716f06cc9b2cf480ad1d6c7f8ec59674d6c858cd2407","fff527e2567a24dd634a30268f1aa8a220315fed9c513d70ee872e54f67f27f3","5dd0ff735b3f2e642c3f16bcfb3dc4ecebb679a70e43cfb19ab5fd84d8faaeed","d1d78d1ef0f21ac77cdc436d2a4d56592453a8a2e51af2040ec9a69a5d35e4de","bc55b91274e43f88030c9cfe2c4217fae57894c3c302173ab6e9743c29484e3d","8bb22f70bfd7bf186631fa565c9202ee6a1009ffb961197b7d092b5a1e1d56b1","77282216c61bcef9a700db98e142301d5a7d988d3076286029da63e415e98a42","9d7b415f4856108011453a98e28c79d36baeb0dfc6c1c176826454909e1ff47f","64ce8e260a1362d4cadd6c753581a912a9869d4a53ec6e733dc61018f9250f5d","29db89aee3b9f95c0ceb8c6e5d129c746dbbf60d588f78cc549b14002ea4b9ec","33eedfef5ad506cfa5f650a66001e7df48bc9676ab5177826d599adb9600a723","4c4cb14e734799f98f97d5a0670cb7943bd2b4bd61413e33641f448e35e9f242","bdb2b70c74908c92ec41d8dd8375a195cb3bb07523e4de642b2b2dfbde249ca6","7b329f4137a552073f504022acbf8cd90d49cc5e5529791bef508f76ff774854","f63bbbffcfc897d22f34cf19ae13405cd267b1783cd21ec47d8a2d02947c98c1","7889f4932dfa7b1126cdc17914d85d80b5860cc3d62ba329494007e8aab45430","d9725ef7f60a791668f7fb808eb90b1789feaaef989a686fefc0f7546a51dcdc","df55b9be6ba19a6f77487e09dc7a94d7c9bf66094d35ea168dbd4bac42c46b8f","595125f3e088b883d104622ef10e6b7d5875ff6976bbe4d7dca090a3e2dca513","8ebb6f0603bf481e893311c49e4d2e2061413c51b9ba5898cd9b0a01f5ef19c8","e0d7eed4ba363df3faadb8e617f95f9fc8adfbb00b87db7ade4a1098d6cf1e90","38faab59a79924ce5eb4f2f3e7e7db91e74d425b4183f908cc014be213f0d971","de115595321ce012c456f512a799679bfc874f0ac0a4928a8429557bb25086aa","cdca67bd898deff48e3acb05fb44500b5ebce16c26a8ec99dee1522cf9879795","0524cab11ba9048d151d93cc666d3908fda329eec6b1642e9a936093e6d79f28","869073d7523e75f45bd65b2072865c60002d5e0cbd3d17831e999cf011312778","c43f78e8fa0df471335a1ddf8ccc32aecaa7a9813049b355dff8a66ab35f4ae9","56503e377bc1344f155e4e3115a772cb4e59350c0b8131e3e1fb2750ac491608","6b579287217ee1320ee1c6cfec5f6730f3a1f91daab000f7131558ee531b2bf8","d9c805da711bc8dd43d837576a4adf6893472b822d0458f525a5571cdbf81fce","a793636667598e739a52684033037a67dc2d9db37fab727623626ef19aa5abb9","b15d6238a86bc0fc2368da429249b96c260debc0cec3eb7b5f838ad32587c129","9be37564440fc3e305e1edc77e6406f7d09579195ad1d302b60ee3de31ec1d16","4b10e2fe52cb61035e58df3f1fdd926dd0fe9cf1a2302f92916da324332fb4e0","d1092ae8d6017f359f4758115f588e089848cc8fb359f7ba045b1a1cf3668a49","ddae9195b0da7b25a585ef43365f4dc5204a746b155fbee71e6ee1a9193fb69f","32dbced998ce74c5e76ce87044d0b4071857576dde36b0c6ed1d5957ce9cf5b5","5bc29a9918feba88816b71e32960cf11243b77b76630e9e87cad961e5e1d31d0","341ffa358628577f490f128f3880c01d50ef31412d1be012bb1cd959b0a383ea","ecc1b8878c8033bde0204b85e26fe1af6847805427759e5723882c848a11e134","cfc9c32553ad3b5be38342bc8731397438a93531118e1a226a8c79ad255b4f0c","16e5b5b023c2a1119c1878a51714861c56255778de0a7fe378391876a15f7433","328a366c195c74ecd5cd576bb11ced578e35be7288fc4d72783f860409a48b3d","a090a8a3b0ef2cceeb089acf4df95df72e7d934215896afe264ff6f734d66d15","a0259c6054e3ed2c5fb705b6638e384446cbcdf7fd2072c659b43bd56e214b9a","005319c82222e57934c7b211013eb6931829e46b2a61c5d9a1c3c25f8dc3ea90","151f422f08c8ca67b77c5c39d49278b4df452ef409237c8219be109ae3cdae9d",{"version":"6466cbb0aa561e1c1a87850a1f066692f1692a0a9513c508a3886cd66a62dae8","affectsGlobalScope":true},"24c97750177bca07b982ca6e881d223d774fe98602d0c088b99f5fb92504e7e6","5e8a53c5421aa32e34b6ffc8abc9d933811cc9c49bd283dd7e773cbc178b2cf9","d0df2dea473c1fdc94ad3ac4caed4eb9b8f20fe9c96ed36583ed4e5d85f9dd7d","3d9241250ff79102e2eee92162852175846a82f759d53b1ed989cca72bca4f08","6888cd42feb2c2cdc981a53a67c80b592a3428f0ad2376910755034b8c8e0fad","f76661e9cc46eea38c297c7c6c8944e8080fcb6df9216830c499fdb57a9c5747","6130e2e272482f8e1141e63eb2d00fc7d339ee0280313c55abca017145414e41","ebe20b4333eaea785fd71889e2600178db581a161916d1cfd66eaf68730b9b71","f92f3004b0329f13a3c103a8f41bb8d55d8ef27c1b142c9e5d4b1f47573b0111","fcb8d00416318a39a55b4e0107909eb4c4d32fdb0fa4abdabbea67b62aef3ec3","fd5d0b4718f438069e0e6acf41226370d1ecea1c749446e96e39ea2e93eb6614","6a496d225a1e8640f2f416996206f8f75e40a9e8218c97b4ac1f68e2d051e290","00e35dcffa54360f59c00fa886c08aa34fd74aaee0b94fed64ec9916ca068100","92c4211e8112893387dcda584c61bf040635341f484ac1ea464519aeba925812","f31ea0388a117d3695b9f99fa8ddbe594c90b9083e0e22477256b6b3abfe7db3","79d1dc10e55c9e5cbd3eb2907c19483e98c7b8f53642d0288f3f660d3f4106e4","deceee831c0176b38c8e12f33c896b80ac729ab2cc9cad11e763064b0c740cad",{"version":"763c0c99a55a5911b65dc893b628197bbeaa0eddaa63aa215f629b6203412eb9","affectsGlobalScope":true},"1b01eac44fc679f6058b13268b560645cedffc493ce9323e196f46b7f953363d","31513e7248cc4d007f2a33d065f6d97fd546a391948a5c36599de3825b508ba3","fecb5388cc0848298df6239787ef6991afd2c6a56cb71c075de852c4b635ac67","2ef80bd2f8ae8fec1bd83ff82548456b3f9b71d53253f176ed27b6436939ff28","ff1e46f0dc83811c1bd0076f7f25d12f9ce27bacf60bb671ea41c8178e3a11a6","4d160de9b54abe9098aebd46c4bc337c5e49d99fb0ac26e7ee82dd6d6b6eec80","867c3c22fa8055e3ae6005d2317e54e430aa4499f34b9d3ada6a98a3a03caf08","2c501b735db4c7f155821c401d1b2ec139d0c2039d49123c297b38322e1661ee","1b9bce1a26c77a55ca98231de2140eb6d8c1a03cde4f2a89357d437861506a60","60d5de4a036980f0f2e3610b0a6bfea3431d6a2e3533c25e44bdbd0b9d83aae7","fa350a5eed359b6811f02cd057a9accd5a1e35a8ca35322a3a2d4e96b6361740","fd5ee42b8f915a44d29b787ff6357eecc52d7cbfa4d7a0dbfd8ecf02245e0f95","852a54b4051a6668cdd5ccc9847a1ced5bfde10022e19362a64a05828cb2e0de","78acbe1145cbfedad728f81b422e7afda279979068c3f951c7e6a0f119f0a75e","43d3683f342616a0a984915e2969eb19746ff5d9eca2280ed194aaf6ccf16d78","533d7d4ae37e0731de58504466f2762dda19bc881a754469d6722577530cf127","4b70d58f552e5334a39257f623d1d9ba13b8c672ceafe9a899aa499b0374fc48","46e6262e758b1e8012018344cce0b458f6701e43147ecdc689f6058b10775ef2","53f043dd85e09b6c58f9f62ca253a3297c33481a347b3edb9c9fb30bef51aea2","778f50e082c3dfc4eb24b18996167098ddc00697ea78fe6430b1e6939a10ed86","f50aeb9f44ba0611ca5482b8907d1b626c47c8d21a4a7dffec027875c5e2e39c","ffbc4e41590daeeb816d09dae40f3501eb784576f87d71533b1e032e8fef37c9","32dadc047a8ac7ac4554620d4ef69ee3182534f8e5e7bd67b20af96a53d5154d","75df00f150da38eec49d2d92f4be5b226b73ee2bf32486aa4dd764ccfc3a4ac8","5bc8b682a1023014f85ba9ed86af826f6bd89d71ec0537055ddfe0dd50db9901","21f8cafbfd9c4f494b53807686d6cf26032fddad15872095b399863b6ca96574","cfc025582cabbe689b20b310fa259480ccb8002d1478fc0078ce06514c9619e1","8b715eb42a268a1706ece58afda6579a019b3f054b09abd83732945bdfd0ad7c","b4fc31e2cace0117359bb7ef567d76a32ee65e239a1c421138feba48c8278edb","ef32d1331b46f32d8661a86b2f19f2bc4ae02374dd933dae1301eeb7af17362a","68c4dc753ef949fcc9711d5c19fc60d8b7ac5a5f601b5b11e0fdf0b0e04fdc2b","d74aafe0316d36b464a04e97d8c034012872a0ca594b96461397124b875d0496","28bc2b4b62bd4ba96d663484489dcdd795102eba5c6e49b7500284fb1b9d40ce","6609e5d290d7ec5d5f0f49a9c48a08aeab8908beb4131720ebbb6c7a55df61a8","a0b04ea6ec4aaba417fce6ac08d29536cf9dde0640bace0630986becef0f53d1","39c52261600e58ac4d0d3c0ef84b2b771af1679d4d1ed232553de09acedad89f","a4dcedfc593283ccd46b224827752bbdb1f44033efd0829b7aad6ff8106594cc","2fbdeb74aab13b6e1808c1ec521bc524faf37f0bd71ecee6dd9582a499a7aa0c","ea686f733cb76a3ab518d5f4e69c179c1697f2f17a3d19b36b750fef2a710e42","c91fc6fc29c22817970568c6d62e4e10df1d193b709102fd4b0309051493befa","f97a3745ef4fdf4f0d12233183ee4519ef14cc2c81f1a12079e21ff920c1e673","0d11aac159f2fe901c37e7710941ddc879b5749434840ca4c347626fb6edf8f0","62e5ed4676c53751c8b2cde9b509fcb5ae2d933f8868c98ea5a0b9090d629e97","670186fb4fa0a2ea24cdb1db08bfddc132e3e9a9795f11f2c4e68dcc42c16db1","6c8fe55f2ab4ff573c192f43bf4ddc04db5ff7ffabccc569980db46b12402aee","6ba11a29797cbd8f2641dede6342ad1437c8a27d6aaaca6cecf8bebc3e5c2cfd","33a1157a264ef155864c43aa9ee6988b86f6989fd46acd7173741718e645acf6","6570e44c92f351ec2ef171fdc3973e3022f5a412da08ce557def22d8e7143683","6ba11a29797cbd8f2641dede6342ad1437c8a27d6aaaca6cecf8bebc3e5c2cfd","f3b74a770a3426788d100b988db3d39c6441414eec35a2efa48e4faf19ed7c08","4dec8b4e273a23d48fe8b90c3b23e11140b196637106a1e6251f095e98483109","62e5ed4676c53751c8b2cde9b509fcb5ae2d933f8868c98ea5a0b9090d629e97","3f5067eda9b22893f6d04b7fbf423e07238b5ca04802cff742504b78a8d0de63","6fa003fa22011673e5f0618654b2b29f32306d170110c4e801de397c2270db0a","27f1dda1bfd96b94220de04e225c67f1d232e07097db0b973027df1ed9e8a35a","89bf59c1d834a4b01c7d9b5b4cfa64ffed09e59580d27bbadf1acdd69706c200","c8adda9f45d2f7ec9fb28c59859db32da6c2835f1fec96433e2729e5805fa46f","8bab32fbeda42d2bf244c29d1f37d80f1323ae419f8031347387d2cba17e5356","679d7df22bf42d8761ef3f8acdac6d305384fa11df7d222de32c939405abda22","172f31b538f6e3f70c2d001d665d5a46c4b043f707ba822b4d906d59bd9c229d","7af025cf1b7afde27e5deb448d9517a5f1ba47a02523b7ab93501a218695b5c6","3792990c9fcb5344df38b3cbea16042fb3a98d72dadbcf058e0b561b2fe5ca7c","e82bb9f8e7cb97a8899c34fd33c14d33f943a998d6bbeb0c4e716380aa69d599","1cd41ef8b88969618c77276d26fd771576dd6de8b8a48f746156f082eb470fb6","90d2f41ef26831dc7a453d329d93f1b7d76737ee85ec9f7d6b2d7cb00368df45","26a1f5fb6eecc2f91855ba6d839c79ead0a7e9aa7db6330beabb36f3e4e3590e","d767e3c8b8c40eca341f32dbd7ce9eac23763f7cb376abe14cb7cd75c1f472ab","e35fef205376d6a3eb91308eb737ab9d03717f77d361fe34a69bc8d1800c76d8","1c697d5571b23e58c638327b0959ab8ce7a3a1192f3fa5847c545e8a35a88b81","f5c930992a2ea87d96ffc5c17f964501d10160136e4bdf8281446b0c4481b079","8b8ae4783419c0cbba56335ae9af63181593d876a542d61a823a887a5b3fc713","a5cc00517576130211ef4b1a05c9968592774f5e67b6db3b2f935edd34886220","2c02593e8570e02aff42533da041deecfa0f52c115bc9031f9eec37a90995153","1e82684bfd260833f90219907c17251dd5c5f6d92a71eb005cd550eb42224607","091e3045270bd0b0b12765940128af773344d085621395001c2e4649c0c33c67","f0d56ec8d982bcb82230aa47b0d2747b6ccc8be1b439f4f3e24b20021ac12f30","c1f143281fa2178579eaef19ebe393a0270cac3fafb71a5ec521f149e872c26f","f8a229fb7b268e10480dda6181693678f57ee8b4216ac47ae0f54bf20f01ed72","6dcf86d8b2b6a6f9e2059b39d576ead37d55abd3cc9b67305b07974ece62c364","f60bbf96db27dd73d32ca5c0ccbe03c8f72aba2b87760ac96ac15b57c2d9ceb0","7ad7e739715eafbf8fcb3814b4ec4856ef55e0bbf2f614eeb68199fa3f2d4da0","f01e37e255b2afc08accfcf3a84f8d3c6f2747d1f49e71287a81ca2386c0c9c1","6dcb7cbb7930c7ecdfe9fb820c9cad7c34384e884c74fd345a51063df70e586b","450904f66cd4c251f97208f0be4db89cacb7a1d0f14eb50b808a9ba7a13c8a0f","5ebe4b473dbffcfab4d01b124d62bafc19b15e060b21820f6b9d6d3c732f7852","aa44780a5dfa9df4f2524332299f01115f5281e9c8bf1a2e1cac2a5b81e5beff","d03f27224746abc875b58c6e63b939ad88c54de8b0f0fa63ad731fb806b743fa","f999d004d73a4c0d3587fc5448eef49f9d1915e0218d94573c5ce1f1747167af","611d8477b3b7d62795f9958337eccb9a298a7a13bd1f0827f7351853e06a0943","7f4d7d3426e39f1be70dc80fe6bb73134591aa355026500d811a8365cfceb429","44cbb0793a8d5bfe9d83689fdb00fd3006ee6ab9f53e08f1f37a97915f526ba4","544b8b4579e2948e5634d077e943a2ab0da94009c7386f37d3a213cf25910753","93f004b26b2266547d832d063f9d6a0a9659118e63b1dff209cf57df02512d99","57603b6783f49fa2aaddbd38a52e14bdcae2cd8f82f2d27e883b3d01f4137283","368f93346276f218181aef3e3f6209f0420aede864eef3f4054dd80373d01f95","7a3cbb4281154ea358de672d3f2f62b19c1002d2c01b225cf6f5f090c17a6364","ce9f2d650cd422bc0853fa358dd0f639cf90b17136f35d1b6efb022d80176cd0","c71865cfd9b17e4cf0d76e2655e024f749d2e3972bcd2783a41f8f234d7ce638","e0f63dda6145224de0395a8103319444b72d9c3b9f280004954f272b3b1c6a45","61f7793c2af361a28fec685805b69e73cf3d09b2709d644c0605e5a045e6fd7b","6fca3d52e9da91755a7a1969eda0be7dfd7e8dff957a506aa1e1ccc07d6496f9","e8c3680bbb156e878fb2677f06618335b29d17202ce35837895e5258501ffd2e","ac0f6ceacec4521a0963c317a3339820ca9107c04e54d50cfca0d3fa17610f5f","b3a84d29e1a7c24840e889e072c77407f9172e937e621407a897eabe60728a57","d62d364c794422ed8c47010b055b583e2f2091a94c304132e69e46fc153478c5","eba8332b8783cea122bf028bf6783970e49f631f95355ff1292686d0bd60c277","19644d9cb88159cb62093bb84a9201f37dc6c8a8325136364dfeeaf3d8db9342","d4d98bb95e40df66eb0e734dacadebb0222595008c9dd31ed0f52fef580d8693","79bdbcf55efccead17851d99746d729cc6d79148ebc87905d80ff9c3e07a6e9a","621ba043ce3c7cf5d0a4c2659ef21288c2670ecd272f0b87e89129ab9428feae","0158ce9b6ae7812448bf2e0b0c38f88fdc43347490a30912381502eec6615edb","713172e888625f466e005c0e2665212c76e4bfb1df5997075fec868c3262a3bb","757604e7fd60306cd65493335f56784e18ff0dadf0c5531f828aa452aab0916f","644d24d013f27b64205d8e6141b22b516deef6d6e46629f83668dc82f97c1015","bcf7013edaf631bccc853d45126adf6bd0dd4bf1664ac543308633e31956df5b","615365470b35097606ab4a2486fbe0e2f48e0877d30c8c27e980147d9aea8058","a3c5c10d92886a209f1626b3846bbdfdd0d53b3c3b543826ebacc4053d2aa656","66d128495fc2e689a3ea72e8c52ae93e3c59f9832a474db9ee080c8ea21003a8","cb97fc6b34b4269f5e321a887aa9defa0748e3a28c9d2fba829512269098bac0","f86eca71288dc7fcf2770db4cbf6776a5c82a8a2a15398a987fe4ddbe1212e6d","53064df23afe68d9c04365aa3fdf6066d9167da0d3aefdddda8afef7bce740e5","353fd7eedaa79447a387f7b8b86702e7d5c92a54c8730cccc2af28dc2ea90910","e45ddf28c1cd9b336426ce0865b31cedfaf487817b72d24907a7147aa5a9bd21","f29f86b22364494500af4f9f40995a50df3723ce59f64a7431c812a4247d874b","705f065a0f7acbaff9725203c4970f9c255ebf735a8bdbd8bb2704d7a813acc1","75db6ed890802f38745a1037f034acf45e1efdade4c1cc50769ea7e32f112a91","b81528a46f226c140c29681167b138af6408805cbd18a5b28ca86ac9654ff298","41156f841d4dd6bf13b69b37125e41287fc6030573ec9c0b263a78fe3ed9e21c","ca24c45bc6bd44387a1e95e1696e4cd2c1b191fafe4f3b25b8cd5aab52d0a93f","da1bcc4e13420dc54cf52a643d71c72c78c853ee33c1a76a3793ee363c743614","7cf17f5fb9b7f080ca615ce156767b33ca3440fec9a791e74ed35e503a2ad7fa","e5d5ca7e185123a790032342b02739659e777f9cc3f5af5dd9653dfac0df3dee","4136d06896b2c9b49275c82e56dee7372a221fa9ea41c2d9fb5660ecad907bea","ae9aefa43ea32f638c324f44ecd841620fb4e7e87a18ef21a9ab55cb2c5d7ee0","a6de4e80b822fbeb662c2f1b1217030326c84eac84d91434c5e45e9a4c51870c","b247803c6b8b7b045667cfd3769a956a82bcd240975992ec33dac6b221f5b1f3","88ff614f8c58574e5096c97606cf31f923c458066070a61e15141b8d05c8cc4b","0a52850c4373899c7dbb7e61adc536cfbedd780cc65fe33f16d570a5d684ffb7","271162f20c22eb92be5f26c33103730d76ead864ed3640c004b4562c82266cd4","1924013723279a9bdf3cdcae2178ebbedda0d8787deb6c45c8ed56fe309aa696","ac0f6ceacec4521a0963c317a3339820ca9107c04e54d50cfca0d3fa17610f5f","217289604fd2f435f5c215b25f4798c1a37383b5b0e5878c408cb11fffe7eb52","37f169778c80d8828a3e80b1c8d1ffa50a74b0c753e2fbdf9781005a307a1be2","40b58e2a31cb1aebafc800d8d1fc123c2706b93fc121d8e39fe89c9aeb3fe5d1","2079ecaa463ee8fd946b7f20682d4db7e0c10455e60e71fc2f987e68974e5e8e","f705f92d29877a70c7898745bf0e30a958e7bf35ce740ae4753743c136e0f8a0","6907d63ee7aaee241d05233950896bb521dc2895b52aace06499ef449208fd53","fe0712e84dabf398523e6c5d06784270853cb839d0de4655758698102acee8b4","d5da393a9df4e647c5c4c94813b7d288f48563f1966511e744cc664e7426df94","d533627c219e154700a5b929f7e1b07529e3c2da2ebb313c27848fbeee2e18b8","db19ab08deee31dce6fe7901716649f4d2790dbee4ad9357374308d78e928eb4","1aa03008fc2a9cf47538182365763214a29e062793e33ef099bc9d92d75cecac","a05baba0f8cd9acdbab41d22f3cb79fc757f241acd9e6d9ccd4e5c144b7e479d","99e5ce0b6d30d94c9612b01b95e088f6e23ebd0cfa4f5445ea8cfdff300c509d","5e64ad86e1e74c23af0ee2139c0e73415c30ef68a78142121193060addcc4309","dab0f4d396246644d86b8a6148cb5377d025d518b14b2b3d09b1fc9c9a55eb82","f964606361c9133fe5f298c873bd0bf8584c74b8e5b0209955bc2c516d73ca16","8a9cee03ca1d9c15ccf5d342a599147546fec40e93e80e458b9d0a47877c4e2c","825f48cce9d110c551cb0c510ebd2afe671b64d8bd63d85c7cd9ee4426df4feb","027fa51b7a3790bb2a2a89c0d296ae5e18805f188135f9e90bbe2b04640dc40c","810ce8897eac96def7f2ffc64034caa41e520c7320fa164807daa76478898448","fa9e38160bfc54bf2d39e215da092b74a66103e56568eda31820cb9c21bc1795",{"version":"d7475ab6cc85a7d7db742ce887f904ba501b93d3c6440425ddd4b3e56fd6d604","signature":"54509eb7d26f3d2f479961a35587dc88a2dbaf512a615e4745c9713fa56e5ff7"},"f4ab62dbadbaa34a292752912077fceb797bc4d602ab75b82569751feac66368","f64487e06875cfbe0cc854328920403df337dc6c1925070995653ac71c266c0e","5487b97cfa28b26b4a9ef0770f872bdbebd4c46124858de00f242c3eed7519f4","ea2d7f91b9258a11281e73d8e6113a40e0a1561d00ca8240741c4d33e6272aac","b8fe42dbf4b0efba2eb4dbfb2b95a3712676717ff8469767dc439e75d0c1a3b6","8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","83306c97a4643d78420f082547ea0d488a0d134c922c8e65fc0b4f08ef66d92b","f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","98a9cc18f661d28e6bd31c436e1984f3980f35e0f0aa9cf795c54f8ccb667ffe","c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","2356304761c0a31f75c28b961347f66a3303cce128da996869e548aac96bf648","f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","a17d11ec2122bc3becdfbd95c2f0a29c74beb1d2f9f00ad6f5e19df7af398d0c","ce3e97d16c8a64a07721618ca9820226a23d1209b7e6dab8a9014290db8159c5","754548a7bee424d98efa966641b346c05caa68dfa3bbebd5534e078cec7eff84","f76d5d7579179768eaafbe2f3cb011ee7982573c91a28700f4722b420d1e92d0",{"version":"4bba62418acf5ed556de858da0a6c74e2e46552aae66b48070d826ed065625fc","signature":"3b0348d8b71bace2db3151f62f260f559514a5c927489d5552cf0c45725e3160"},{"version":"2a2f3a0e0204c6bc74527aaf6976cd782e80c2f4423c240a815b5a0fdffecf24","signature":"947a30d682ee413ddf8c431d017e6fead3fced99c1e19bdf860a84c86ca4fb3b"},"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","eee8abb8503852554eec94e4f77339dbe8927f5f7dfecac41d9479d64bbfc475","90d1a0aa42eba9363179b77b2ee909ab079057af910b194830347b3bcecdf661","d3c9a974a0a6201f3c04598c2cf188c99feb1ef762c40ece44f11fc5fd097d50","cd56172939d5bd981324111c13858a247febcc47ffbc24f9b14c8a9e5c748697",{"version":"d698ff7f5794f0d6aff6182b328525494b85cc3cda369d36b9abd55c46520c82","signature":"8d4227ee46ed396fc1ff72201fe26406bb642307c13f84aedbc0be32da22f29b"},{"version":"8685335ff857743c8bd43633bf596db5058081a04a4c4f2190f7e4f4119f1404","signature":"7fad8067fe48f75ed91666f362e224bce273ebabcfe1341b9f30cd2646b02ddf"},"b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","cf93e7b09b66e142429611c27ba2cbf330826057e3c793e1e2861e976fae3940","90e727d145feb03695693fdc9f165a4dc10684713ee5f6aa81e97a6086faa0f8","ee2c6ec73c636c9da5ab4ce9227e5197f55a57241d66ea5828f94b69a4a09a2d","afaf64477630c7297e3733765046c95640ab1c63f0dfb3c624691c8445bc3b08","5aa03223a53ad03171988820b81a6cae9647eabcebcb987d1284799de978d8e3","7f50c8914983009c2b940923d891e621db624ba32968a51db46e0bf480e4e1cb","90fc18234b7d2e19d18ac026361aaf2f49d27c98dc30d9f01e033a9c2b01c765","a980e4d46239f344eb4d5442b69dcf1d46bd2acac8d908574b5a507181f7e2a1","bbbfa4c51cdaa6e2ef7f7be3ae199b319de6b31e3b5afa7e5a2229c14bb2568a","bc7bfe8f48fa3067deb3b37d4b511588b01831ba123a785ea81320fe74dd9540","fd60c0aaf7c52115f0e7f367d794657ac18dbb257255777406829ab65ca85746","15c17866d58a19f4a01a125f3f511567bd1c22235b4fd77bf90c793bf28388c3","51301a76264b1e1b4046f803bda44307fba403183bc274fe9e7227252d7315cb","ddef23e8ace6c2b2ddf8d8092d30b1dd313743f7ff47b2cbb43f36c395896008","9e42df47111429042b5e22561849a512ad5871668097664b8fb06a11640140ac","391fcc749c6f94c6c4b7f017c6a6f63296c1c9ae03fa639f99337dddb9cc33fe","ac4706eb1fb167b19f336a93989763ab175cd7cc6227b0dcbfa6a7824c6ba59a","633220dc1e1a5d0ccf11d3c3e8cadc9124daf80fef468f2ff8186a2775229de3","6de22ad73e332e513454f0292275155d6cb77f2f695b73f0744928c4ebb3a128","ebe0e3c77f5114b656d857213698fade968cff1b3a681d1868f3cfdd09d63b75","22c27a87488a0625657b52b9750122814c2f5582cac971484cda0dcd7a46dc3b","7e7a817c8ec57035b2b74df8d5dbcc376a4a60ad870b27ec35463536158e1156","0e2061f86ca739f34feae42fd7cce27cc171788d251a587215b33eaec456e786","91659b2b090cadffdb593736210910508fc5b77046d4ce180b52580b14b075ec","d0f6c657c45faaf576ca1a1dc64484534a8dc74ada36fd57008edc1aab65a02b","ce0c52b1ebc023b71d3c1fe974804a2422cf1d85d4af74bb1bced36ff3bff8b5","9c6acb4a388887f9a5552eda68987ee5d607152163d72f123193a984c48157c9","90d0a9968cbb7048015736299f96a0cceb01cf583fd2e9a9edbc632ac4c81b01","49abec0571c941ab6f095885a76828d50498511c03bb326eec62a852e58000c5","8eeb4a4ff94460051173d561749539bca870422a6400108903af2fb7a1ffe3d7","49e39b284b87452fed1e27ac0748ba698f5a27debe05084bc5066b3ecf4ed762","59dcf835762f8df90fba5a3f8ba87941467604041cf127fb456543c793b71456","33e0c4c683dcaeb66bedf5bb6cc35798d00ac58d7f3bc82aadb50fa475781d60","605839abb6d150b0d83ed3712e1b3ffbeb309e382770e7754085d36bc2d84a4c","a862dcb740371257e3dae1ab379b0859edcb5119484f8359a5e6fb405db9e12e","0f0a16a0e8037c17e28f537028215e87db047eba52281bd33484d5395402f3c1","cf533aed4c455b526ddccbb10dae7cc77e9269c3d7862f9e5cedbd4f5c92e05e","f8a60ca31702a0209ef217f8f3b4b32f498813927df2304787ac968c78d8560d","530192961885d3ddad87bf9c4390e12689fa29ff515df57f17a57c9125fc77c3","165ba9e775dd769749e2177c383d24578e3b212e4774b0a72ad0f6faee103b68","61448f238fdfa94e5ccce1f43a7cced5e548b1ea2d957bec5259a6e719378381","69fa523e48131ced0a52ab1af36c3a922c5fd7a25e474d82117329fe051f5b85","fa10b79cd06f5dd03435e184fb05cc5f0d02713bfb4ee9d343db527501be334c","c6fb591e363ee4dea2b102bb721c0921485459df23a2d2171af8354cacef4bce","ea7e1f1097c2e61ed6e56fa04a9d7beae9d276d87ac6edb0cd39a3ee649cddfe","e8cf2659d87462aae9c7647e2a256ac7dcaf2a565a9681bfb49328a8a52861e8","7e374cb98b705d35369b3c15444ef2ff5ff983bd2fbb77a287f7e3240abf208c","ca75ba1519f9a426b8c512046ebbad58231d8627678d054008c93c51bc0f3fa5","ff63760147d7a60dcfc4ac16e40aa2696d016b9ffe27e296b43655dfa869d66b","4d434123b16f46b290982907a4d24675442eb651ca95a5e98e4c274be16f1220","57263d6ba38046e85f499f3c0ab518cfaf0a5f5d4f53bdae896d045209ab4aff","d3a535f2cd5d17f12b1abf0b19a64e816b90c8c10a030b58f308c0f7f2acfe2c","be26d49bb713c13bd737d00ae8a61aa394f0b76bc2d5a1c93c74f59402eb8db3","c7012003ac0c9e6c9d3a6418128ddebf6219d904095180d4502b19c42f46a186","d58c55750756bcf73f474344e6b4a9376e5381e4ba7d834dc352264b491423b6","01e2aabfabe22b4bf6d715fc54d72d32fa860a3bd1faa8974e0d672c4b565dfe","ba2c489bb2566c16d28f0500b3d98013917e471c40a4417c03991460cb248e88","39f94b619f0844c454a6f912e5d6868d0beb32752587b134c3c858b10ecd7056","0d2d8b0477b1cf16b34088e786e9745c3e8145bc8eea5919b700ad054e70a095","2a5e963b2b8f33a50bb516215ba54a20801cb379a8e9b1ae0b311e900dc7254c","d8307f62b55feeb5858529314761089746dce957d2b8fd919673a4985fa4342a","bf449ec80fc692b2703ad03e64ae007b3513ecd507dc2ab77f39be6f578e6f5c","f780213dd78998daf2511385dd51abf72905f709c839a9457b6ba2a55df57be7","2b7843e8a9a50bdf511de24350b6d429a3ee28430f5e8af7d3599b1e9aa7057f","05d95be6e25b4118c2eb28667e784f0b25882f6a8486147788df675c85391ab7","62d2721e9f2c9197c3e2e5cffeb2f76c6412121ae155153179049890011eb785","ff5668fb7594c02aca5e7ba7be6c238676226e450681ca96b457f4a84898b2d9","59fd37ea08657fef36c55ddea879eae550ffe21d7e3a1f8699314a85a30d8ae9","84e23663776e080e18b25052eb3459b1a0486b5b19f674d59b96347c0cb7312a","43e5934c7355731eec20c5a2aa7a859086f19f60a4e5fcd80e6684228f6fb767","a49c210c136c518a7c08325f6058fc648f59f911c41c93de2026db692bba0e47","1a92f93597ebc451e9ef4b158653c8d31902de5e6c8a574470ecb6da64932df4","256513ad066ac9898a70ca01e6fbdb3898a4e0fe408fbf70608fdc28ac1af224","d9835850b6cc05c21e8d85692a8071ebcf167a4382e5e39bf700c4a1e816437e","e5ab7190f818442e958d0322191c24c2447ddceae393c4e811e79cda6bd49836","91b4b77ef81466ce894f1aade7d35d3589ddd5c9981109d1dea11f55a4b807a0","03abb209bed94c8c893d9872639e3789f0282061c7aa6917888965e4047a8b5f","e97a07901de562219f5cba545b0945a1540d9663bd9abce66495721af3903eec","bf39ed1fdf29bc8178055ec4ff32be6725c1de9f29c252e31bdc71baf5c227e6","985eabf06dac7288fc355435b18641282f86107e48334a83605739a1fe82ac15","6112d33bcf51e3e6f6a81e419f29580e2f8e773529d53958c7c1c99728d4fb2e","89e9f7e87a573504acc2e7e5ad727a110b960330657d1b9a6d3526e77c83d8be","44bbb88abe9958c7c417e8687abf65820385191685009cc4b739c2d270cb02e9","ab4b506b53d2c4aec4cc00452740c540a0e6abe7778063e95c81a5cd557c19eb","858757bde6d615d0d1ee474c972131c6d79c37b0b61897da7fbd7110beb8af12","60b9dea33807b086a1b4b4b89f72d5da27ad0dd36d6436a6e306600c47438ac4","409c963b1166d0c1d49fdad1dfeb4de27fd2d6662d699009857de9baf43ca7c3","b7674ecfeb5753e965404f7b3d31eec8450857d1a23770cb867c82f264f546ab","c9800b9a9ad7fcdf74ed8972a5928b66f0e4ff674d55fd038a3b1c076911dcbe","99864433e35b24c61f8790d2224428e3b920624c01a6d26ea8b27ee1f62836bb","c391317b9ff8f87d28c6bfe4e50ed92e8f8bfab1bb8a03cd1fe104ff13186f83","42bdc3c98446fdd528e2591213f71ce6f7008fb9bb12413bd57df60d892a3fb5","542d2d689b58c25d39a76312ccaea2fcd10a45fb27b890e18015399c8032e2d9","97d1656f0a563dbb361d22b3d7c2487427b0998f347123abd1c69a4991326c96","d4f53ed7960c9fba8378af3fa28e3cc483d6c0b48e4a152a83ff0973d507307d","0665de5280d65ec32776dc55fb37128e259e60f389cde5b9803cf9e81ad23ce0","b6dc8fd1c6092da86725c338ca6c263d1c6dd3073046d3ec4eb2d68515062da2","d9198a0f01f00870653347560e10494efeca0bfa2de0988bd5d883a9d2c47edb","d4279865b926d7e2cfe8863b2eae270c4c035b6e923af8f9d7e6462d68679e07","73b6945448bb3425b764cfe7b1c4b0b56c010cc66e5f438ef320c53e469797eb","cf72fd8ffa5395f4f1a26be60246ec79c5a9ad201579c9ba63fd2607b5daf184","301a458744666096f84580a78cc3f6e8411f8bab92608cdaa33707546ca2906f","711e70c0916ff5f821ea208043ecd3e67ed09434b8a31d5616286802b58ebebe","e1f2fd9f88dd0e40c358fbf8c8f992211ab00a699e7d6823579b615b874a8453","17db3a9dcb2e1689ff7ace9c94fa110c88da64d69f01dc2f3cec698e4fc7e29e","73fb07305106bb18c2230890fcacf910fd1a7a77d93ac12ec40bc04c49ee5b8e","2c5f341625a45530b040d59a4bc2bc83824d258985ede10c67005be72d3e21d0","c4a262730d4277ecaaf6f6553dabecc84dcca8decaebbf2e16f1df8bbd996397","c23c533d85518f3358c55a7f19ab1a05aad290251e8bba0947bd19ea3c259467","5d0322a0b8cdc67b8c71e4ccaa30286b0c8453211d4c955a217ac2d3590e911f","f5e4032b6e4e116e7fec5b2620a2a35d0b6b8b4a1cc9b94a8e5ee76190153110","9ab26cb62a0e86ab7f669c311eb0c4d665457eb70a103508aa39da6ccee663da","5f64d1a11d8d4ce2c7ee3b72471df76b82d178a48964a14cdfdc7c5ef7276d70","24e2fbc48f65814e691d9377399807b9ec22cd54b51d631ba9e48ee18c5939dd","bfa2648b2ee90268c6b6f19e84da3176b4d46329c9ec0555d470e647d0568dfb","75ef3cb4e7b3583ba268a094c1bd16ce31023f2c3d1ac36e75ca65aca9721534","3be6b3304a81d0301838860fd3b4536c2b93390e785808a1f1a30e4135501514","da66c1b3e50ef9908e31ce7a281b137b2db41423c2b143c62524f97a536a53d9","3ada1b216e45bb9e32e30d8179a0a95870576fe949c33d9767823ccf4f4f4c97","1ace2885dffab849f7c98bffe3d1233260fbf07ee62cb58130167fd67a376a65","2126e5989c0ca5194d883cf9e9c10fe3e5224fbd3e4a4a6267677544e8be0aae","41a6738cf3c756af74753c5033e95c5b33dfc1f6e1287fa769a1ac4027335bf5","6e8630be5b0166cbc9f359b9f9e42801626d64ff1702dcb691af811149766154","e36b77c04e00b4a0bb4e1364f2646618a54910c27f6dc3fc558ca2ced8ca5bc5","2c4ea7e9f95a558f46c89726d1fedcb525ef649eb755a3d7d5055e22b80c2904","4875d65190e789fad05e73abd178297b386806b88b624328222d82e455c0f2e7","bf5302ecfaacee37c2316e33703723d62e66590093738c8921773ee30f2ecc38","62684064fe034d54b87f62ad416f41b98a405dee4146d0ec03b198c3634ea93c","be02cbdb1688c8387f8a76a9c6ed9d75d8bb794ec5b9b1d2ba3339a952a00614","cefaff060473a5dbf4939ee1b52eb900f215f8d6249dc7c058d6b869d599983c","b2797235a4c1a7442a6f326f28ffb966226c3419399dbb33634b8159af2c712f","164d633bbd4329794d329219fc173c3de85d5ad866d44e5b5f0fb60c140e98f2","b74300dd0a52eaf564b3757c07d07e1d92def4e3b8708f12eedb40033e4cafe9","a792f80b1e265b06dce1783992dbee2b45815a7bdc030782464b8cf982337cf2","8816b4b3a87d9b77f0355e616b38ed5054f993cc4c141101297f1914976a94b1","0f35e4da974793534c4ca1cdd9491eab6993f8cf47103dadfc048b899ed9b511","0ccdfcaebf297ec7b9dde20bbbc8539d5951a3d8aaa40665ca469da27f5a86e1","7fcb05c8ce81f05499c7b0488ae02a0a1ac6aebc78c01e9f8c42d98f7ba68140","81c376c9e4d227a4629c7fca9dde3bbdfa44bd5bd281aee0ed03801182368dc5","0f2448f95110c3714797e4c043bbc539368e9c4c33586d03ecda166aa9908843","b2f1a443f7f3982d7325775906b51665fe875c82a62be3528a36184852faa0bb","7568ff1f23363d7ee349105eb936e156d61aea8864187a4c5d85c60594b44a25","8c4d1d9a4eba4eac69e6da0f599a424b2689aee55a455f0b5a7f27a807e064db","e1beb9077c100bdd0fc8e727615f5dae2c6e1207de224569421907072f4ec885","3dda13836320ec71b95a68cd3d91a27118b34c05a2bfda3e7e51f1d8ca9b960b","fedc79cb91f2b3a14e832d7a8e3d58eb02b5d5411c843fcbdc79e35041316b36","99f395322ffae908dcdfbaa2624cc7a2a2cb7b0fbf1a1274aca506f7b57ebcb5","5e1f7c43e8d45f2222a5c61cbc88b074f4aaf1ca4b118ac6d6123c858efdcd71","7388273ab71cb8f22b3f25ffd8d44a37d5740077c4d87023da25575204d57872","0a48ceb01a0fdfc506aa20dfd8a3563edbdeaa53a8333ddf261d2ee87669ea7b","3182d06b874f31e8e55f91ea706c85d5f207f16273480f46438781d0bd2a46a1","ccd47cab635e8f71693fa4e2bbb7969f559972dae97bd5dbd1bbfee77a63b410","89770fa14c037f3dc3882e6c56be1c01bb495c81dec96fa29f868185d9555a5d","7048c397f08c54099c52e6b9d90623dc9dc6811ea142f8af3200e40d66a972e1","512120cd6f026ce1d3cf686c6ab5da80caa40ef92aa47466ec60ba61a48b5551","6cd0cb7f999f221e984157a7640e7871960131f6b221d67e4fdc2a53937c6770","f48b84a0884776f1bc5bf0fcf3f69832e97b97dc55d79d7557f344de900d259b","dca490d986411644b0f9edf6ea701016836558e8677c150dca8ad315178ec735","a028a04948cf98c1233166b48887dad324e8fe424a4be368a287c706d9ccd491","3046ed22c701f24272534b293c10cfd17b0f6a89c2ec6014c9a44a90963dfa06","394da10397d272f19a324c95bea7492faadf2263da157831e02ae1107bd410f5","0580595a99248b2d30d03f2307c50f14eb21716a55beb84dd09d240b1b087a42","a7da9510150f36a9bea61513b107b59a423fdff54429ad38547c7475cd390e95","659615f96e64361af7127645bb91f287f7b46c5d03bea7371e6e02099226d818","1f2a42974920476ce46bb666cd9b3c1b82b2072b66ccd0d775aa960532d78176","500b3ae6095cbab92d81de0b40c9129f5524d10ad955643f81fc07d726c5a667","a957ad4bd562be0662fb99599dbcf0e16d1631f857e5e1a83a3f3afb6c226059","e57a4915266a6a751c6c172e8f30f6df44a495608613e1f1c410196207da9641","7a12e57143b7bc5a52a41a8c4e6283a8f8d59a5e302478185fb623a7157fff5e","17b3426162e1d9cb0a843e8d04212aabe461d53548e671236de957ed3ae9471b","f38e86eb00398d63180210c5090ef6ed065004474361146573f98b3c8a96477d","231d9e32382d3971f58325e5a85ba283a2021243651cb650f82f87a1bf62d649","6532e3e87b87c95f0771611afce929b5bad9d2c94855b19b29b3246937c9840b","65704bbb8f0b55c73871335edd3c9cead7c9f0d4b21f64f5d22d0987c45687f0","787232f574af2253ac860f22a445c755d57c73a69a402823ae81ba0dfdd1ce23","5e63903cd5ebce02486b91647d951d61a16ad80d65f9c56581cd624f39a66007","bcc89a120d8f3c02411f4df6b1d989143c01369314e9b0e04794441e6b078d22","d17531ef42b7c76d953f63bd5c5cd927c4723e62a7e0b2badf812d5f35f784eb","6d4ee1a8e3a97168ea4c4cc1c68bb61a3fd77134f15c71bb9f3f63df3d26b54c","1eb04fea6b47b16922ed79625d90431a8b2fc7ba9d5768b255e62df0c96f1e3a","de0c2eece83bd81b8682f4496f558beb728263e17e74cbc4910e5c9ce7bef689","98866542d45306dab48ecc3ddd98ee54fa983353bc3139dfbc619df882f54d90","9e04c7708917af428c165f1e38536ddb2e8ecd576f55ed11a97442dc34b6b010","31fe6f6d02b53c1a7c34b8d8f8c87ee9b6dd4b67f158cbfff3034b4f3f69c409","2e1d853f84188e8e002361f4bfdd892ac31c68acaeac426a63cd4ff7abf150d0","666b5289ec8a01c4cc0977c62e3fd32e89a8e3fd9e97c8d8fd646f632e63c055","a1107bbb2b10982dba1f7958a6a5cf841e1a19d6976d0ecdc4c43269c7b0eaf2","07fa6122f7495331f39167ec9e4ebd990146a20f99c16c17bc0a98aa81f63b27","39c1483481b35c2123eaab5094a8b548a0c3f1e483ab7338102c3291f1ab18bf","b73e6242c13796e7d5fba225bf1c07c8ee66d31b7bb65f45be14226a9ae492d2","f2931608d541145d189390d6cfb74e1b1e88f73c0b9a80c4356a4daa7fa5e005","8684656fe3bf1425a91bd62b8b455a1c7ec18b074fd695793cfae44ae02e381a","ccf0b9057dd65c7fb5e237de34f706966ebc30c6d3669715ed05e76225f54fbd","d930f077da575e8ea761e3d644d4c6279e2d847bae2b3ea893bbd572315acc21","19b0616946cb615abde72c6d69049f136cc4821b784634771c1d73bec8005f73","553312560ad0ef97b344b653931935d6e80840c2de6ab90b8be43cbacf0d04cf","1225cf1910667bfd52b4daa9974197c3485f21fe631c3ce9db3b733334199faa","f7cb9e46bd6ab9d620d68257b525dbbbbc9b0b148adf500b819d756ebc339de0","e46d6c3120aca07ae8ec3189edf518c667d027478810ca67a62431a0fa545434","9d234b7d2f662a135d430d3190fc21074325f296273125244b2bf8328b5839a0","0554ef14d10acea403348c53436b1dd8d61e7c73ef5872e2fe69cc1c433b02f8","2f6ae5538090db60514336bd1441ca208a8fab13108cfa4b311e61eaca5ff716","17bf4ce505a4cff88fb56177a8f7eb48aa55c22ccc4cce3e49cc5c8ddc54b07d","3d735f493d7da48156b79b4d8a406bf2bbf7e3fe379210d8f7c085028143ee40","41de1b3ddd71bd0d9ed7ac217ca1b15b177dd731d5251cde094945c20a715d03","17d9c562a46c6a25bc2f317c9b06dd4e8e0368cbe9bdf89be6117aeafd577b36","ded799031fe18a0bb5e78be38a6ae168458ff41b6c6542392b009d2abe6a6f32","ed48d467a7b25ee1a2769adebc198b647a820e242c96a5f96c1e6c27a40ab131","b914114df05f286897a1ae85d2df39cfd98ed8da68754d73cf830159e85ddd15","73881e647da3c226f21e0b80e216feaf14a5541a861494c744e9fbe1c3b3a6af","d79e1d31b939fa99694f2d6fbdd19870147401dbb3f42214e84c011e7ec359ab","4f71097eae7aa37941bab39beb2e53e624321fd341c12cc1d400eb7a805691ff","58ebb4f21f3a90dda31a01764462aa617849fdb1b592f3a8d875c85019956aff","a8e8d0e6efff70f3c28d3e384f9d64530c7a7596a201e4879a7fd75c7d55cbb5","df5cbb80d8353bf0511a4047cc7b8434b0be12e280b6cf3de919d5a3380912c0","256eb0520e822b56f720962edd7807ed36abdf7ea23bcadf4a25929a3317c8cf","9cf2cbc9ceb5f718c1705f37ce5454f14d3b89f690d9864394963567673c1b5c","07d3dd790cf1e66bb6fc9806d014dd40bb2055f8d6ca3811cf0e12f92ba4cb9a","1f99fd62e9cff9b50c36f368caf3b9fb79fc6f6c75ca5d3c2ec4afaea08d9109","6558faaacba5622ef7f1fdfb843cd967af2c105469b9ff5c18a81ce85178fca7","34e7f17ae9395b0269cd3f2f0af10709e6dc975c5b44a36b6b70442dc5e25a38","a4295111b54f84c02c27e46b0855b02fad3421ae1d2d7e67ecf16cb49538280a","ce9746b2ceae2388b7be9fe1f009dcecbc65f0bdbc16f40c0027fab0fb848c3b","35ce823a59f397f0e85295387778f51467cea137d787df385be57a2099752bfb","2e5acd3ec67bc309e4f679a70c894f809863c33b9572a8da0b78db403edfa106","1872f3fcea0643d5e03b19a19d777704320f857d1be0eb4ee372681357e20c88","9689628941205e40dcbb2706d1833bd00ce7510d333b2ef08be24ecbf3eb1a37","0317a72a0b63094781476cf1d2d27585d00eb2b0ca62b5287124735912f3d048","6ce4c0ab3450a4fff25d60a058a25039cffd03141549589689f5a17055ad0545","9153ec7b0577ae77349d2c5e8c5dd57163f41853b80c4fb5ce342c7a431cbe1e","f490dfa4619e48edd594a36079950c9fca1230efb3a82aaf325047262ba07379","674f00085caff46d2cbc76fc74740fd31f49d53396804558573421e138be0c12","41d029194c4811f09b350a1e858143c191073007a9ee836061090ed0143ad94f","44a6259ffd6febd8510b9a9b13a700e1d022530d8b33663f0735dbb3bee67b3d","6f4322500aff8676d9b8eef7711c7166708d4a0686b792aa4b158e276ed946a7","e829ff9ecffa3510d3a4d2c3e4e9b54d4a4ccfef004bacbb1d6919ce3ccca01f","62e6fec9dbd012460b47af7e727ec4cd34345b6e4311e781f040e6b640d7f93e","4d180dd4d0785f2cd140bc069d56285d0121d95b53e4348feb4f62db2d7035d3","f1142cbba31d7f492d2e7c91d82211a8334e6642efe52b71d9a82cb95ba4e8ae","279cac827be5d48c0f69fe319dc38c876fdd076b66995d9779c43558552d8a50","a70ff3c65dc0e7213bfe0d81c072951db9f5b1e640eb66c1eaed0737879c797b","f75d3303c1750f4fdacd23354657eca09aae16122c344e65b8c14c570ff67df5","3ebae6a418229d4b303f8e0fdb14de83f39fba9f57b39d5f213398bca72137c7","21ba07e33265f59d52dece5ac44f933b2b464059514587e64ad5182ddf34a9b0","2d3d96efba00493059c460fd55e6206b0667fc2e73215c4f1a9eb559b550021f","d23d4a57fff5cec5607521ba3b72f372e3d735d0f6b11a4681655b0bdd0505f4","395c1f3da7e9c87097c8095acbb361541480bf5fd7fa92523985019fef7761dd","d61f3d719293c2f92a04ba73d08536940805938ecab89ac35ceabc8a48ccb648","ca693235a1242bcd97254f43a17592aa84af66ccb7497333ccfea54842fde648","cd41cf040b2e368382f2382ec9145824777233730e3965e9a7ba4523a6a4698e","2e7a9dba6512b0310c037a28d27330520904cf5063ca19f034b74ad280dbfe71","9f2a38baf702e6cb98e0392fa39d25a64c41457a827b935b366c5e0980a6a667","c1dc37f0e7252928f73d03b0d6b46feb26dea3d8737a531ca4c0ec4105e33120","25126b80243fb499517e94fc5afe5c9c5df3a0105618e33581fb5b2f2622f342","d332c2ddcb64012290eb14753c1b49fe3eee9ca067204efba1cf31c1ce1ee020","1be8da453470021f6fe936ba19ee0bfebc7cfa2406953fa56e78940467c90769","7c9f2d62d83f1292a183a44fb7fb1f16eb9037deb05691d307d4017ac8af850a","d0163ab7b0de6e23b8562af8b5b4adea4182884ca7543488f7ac2a3478f3ae6e","05224e15c6e51c4c6cd08c65f0766723f6b39165534b67546076c226661db691","a5f7158823c7700dd9fc1843a94b9edc309180c969fbfa6d591aeb0b33d3b514","7d30937f8cf9bb0d4b2c2a8fb56a415d7ef393f6252b24e4863f3d7b84285724","e04d074584483dc9c59341f9f36c7220f16eed09f7af1fa3ef9c64c26095faec","619697e06cbc2c77edda949a83a62047e777efacde1433e895b904fe4877c650","88d9a8593d2e6aee67f7b15a25bda62652c77be72b79afbee52bea61d5ffb39e","044d7acfc9bd1af21951e32252cf8f3a11c8b35a704169115ddcbde9fd717de2","a4ca8f13a91bd80e6d7a4f013b8a9e156fbf579bbec981fe724dad38719cfe01","5a216426a68418e37e55c7a4366bc50efc99bda9dc361eae94d7e336da96c027","13b65b640306755096d304e76d4a237d21103de88b474634f7ae13a2fac722d5","7478bd43e449d3ce4e94f3ed1105c65007b21f078b3a791ea5d2c47b30ea6962","601d3e8e71b7d6a24fc003aca9989a6c25fa2b3755df196fd0aaee709d190303","168e0850fcc94011e4477e31eca81a8a8a71e1aed66d056b7b50196b877e86c8","37ba82d63f5f8c6b4fc9b756f24902e47f62ea66aae07e89ace445a54190a86e","f5b66b855f0496bc05f1cd9ba51a6a9de3d989b24aa36f6017257f01c8b65a9f","823b16d378e8456fcc5503d6253c8b13659be44435151c6b9f140c4a38ec98c1","b58b254bf1b586222844c04b3cdec396e16c811463bf187615bb0a1584beb100","a367c2ccfb2460e222c5d10d304e980bd172dd668bcc02f6c2ff626e71e90d75","0718623262ac94b016cb0cfd8d54e4d5b7b1d3941c01d85cf95c25ec1ba5ed8d","d4f3c9a0bd129e9c7cbfac02b6647e34718a2b81a414d914e8bd6b76341172e0","824306df6196f1e0222ff775c8023d399091ada2f10f2995ce53f5e3d4aff7a4","84ca07a8d57f1a6ba8c0cf264180d681f7afae995631c6ca9f2b85ec6ee06c0f","35755e61e9f4ec82d059efdbe3d1abcccc97a8a839f1dbf2e73ac1965f266847","64a918a5aa97a37400ec085ffeea12a14211aa799cd34e5dc828beb1806e95bb","0c8f5489ba6af02a4b1d5ba280e7badd58f30dc8eb716113b679e9d7c31185e5","7b574ca9ae0417203cdfa621ab1585de5b90c4bc6eea77a465b2eb8b92aa5380","3334c03c15102700973e3e334954ac1dffb7be7704c67cc272822d5895215c93","aabcb169451df7f78eb43567fab877a74d134a0a6d9850aa58b38321374ab7c0","1b5effdd8b4e8d9897fc34ab4cd708a446bf79db4cb9a3467e4a30d55b502e14","d772776a7aea246fd72c5818de72c3654f556b2cf0d73b90930c9c187cc055fc","dbd4bd62f433f14a419e4c6130075199eb15f2812d2d8e7c9e1f297f4daac788","427df949f5f10c73bcc77b2999893bc66c17579ad073ee5f5270a2b30651c873","c4c1a5565b9b85abfa1d663ca386d959d55361e801e8d49155a14dd6ca41abe1","7a45a45c277686aaff716db75a8157d0458a0d854bacf072c47fee3d499d7a99","57005b72bce2dc26293e8924f9c6be7ee3a2c1b71028a680f329762fa4439354","8f53b1f97c53c3573c16d0225ee3187d22f14f01421e3c6da1a26a1aace32356","810fdc0e554ed7315c723b91f6fa6ef3a6859b943b4cd82879641563b0e6c390","87a36b177b04d23214aa4502a0011cd65079e208cd60654aefc47d0d65da68ea","28a1c17fcbb9e66d7193caca68bbd12115518f186d90fc729a71869f96e2c07b","cc2d2abbb1cc7d6453c6fee760b04a516aa425187d65e296a8aacff66a49598a","d2413645bc4ab9c3f3688c5281232e6538684e84b49a57d8a1a8b2e5cf9f2041","4e6e21a0f9718282d342e66c83b2cd9aa7cd777dfcf2abd93552da694103b3dc","9006cc15c3a35e49508598a51664aa34ae59fc7ab32d6cc6ea2ec68d1c39448e","74467b184eadee6186a17cac579938d62eceb6d89c923ae67d058e2bcded254e","4169b96bb6309a2619f16d17307da341758da2917ff40c615568217b14357f5e","4a94d6146b38050de0830019a1c6a7820c2e2b90eba1a5ee4e4ab3bc30a72036","48a35ece156203abf19864daa984475055bbed4dc9049d07f4462100363f1e85",{"version":"4448c512209f3a1cf613201f37ce2ab2f35871ae7600183897c2bcd728d3bae8","signature":"3b7c633fba4f450f193c2db29ba86ad73807f1850f84cf5b0f48d726f30dfe0d"},{"version":"de74826766c4b37c679a010dfb315d9abc6b35b57e26d614a8487681155fb98e","signature":"fcea22935b15adc956735571b270cd15d8ae3324051945f4dcd57a315df54127"},{"version":"9244fcb95620740f179004daeb0eaf57dbcb6de2669e693d7ae27f767cd8756f","signature":"1f7d490b09e601b348144af8241ac56bc6516e5356d36b6d1526f0772465d252"},{"version":"7a9f7f2293f76468e3adbd33e44b23efcee10f63af1728a4d40e0dfb516d86dc","signature":"a56657c9c83aeea058ef1619a2218277af76da92b17c6e53bb5f61f54529cd6e"},"08a78d17d51e521a0b5c7fabee4f3a6e68d49131ba9e6eb9ed0c609b6498ff81",{"version":"fd10ce5cdef4153b6b555d22de847a30a9fe40042d1ac6479611afc3d1deca1c","signature":"87d215fbefe3071d7a67c79777a705fd95ceff726db6c17ad6949ff42b53499f"},{"version":"ede877f4a4143db29b3087182ca5082bd2f151714a9d7237e640484472e18d8d","signature":"a84ff5c6d0cafbbcb449e313a4481ada7fe49b48d061671eb8953bbe188ddc13"},{"version":"9915d86dfa3832d6fe5803f552128d6ceeb92a7e6b4e8f37e24a0f3e0a0c0856","signature":"62d501dead3c0945b73c04d03ca5bd8aea996edc7784e6dc4943abc81e43efea"},"e5885f7b9247fb96fb143a533f3a37fd511f8b96b42d56f76ed0fc7dc36e6dc8","571b2640f0cf541dfed72c433706ad1c70fb55ed60763343aa617e150fbb036e","6a2372186491f911527a890d92ac12b88dec29f1c0cec7fce93745aba3253fde","c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","d8ddb822f7084a23723ffe21330bec38326600f770bd4a1a17a6e2d4774245af","4acbc7165a8d54738ff62b51414e772c08fe78434e524e6d8770180d3ba2925f","725a7f773ac9502cb2301231f3d8befd5459173cbb8a098e163423023d5a4e9f","88c61a8f84635887200d1b4b3a197301d01a5f934fe7c38292432f7207db1c2d","77ba741539a7802a2af10db28669f8128ed3248af47bebb77530c88e5d9f8ab6","8e67d540978038fb087e293cf684a044e5e5c6acab7c635a5a9729962e0d6f21","6892358ef9fd0ae003d2ec63ab34c7cc3f16af1a298db7a11c5df31d45f0413c",{"version":"fbc0729811f5d4d27c16ada37092766c3c1c15e05798ff8a470569402d9805cc","signature":"cc8fa733f654c2ab09f5d4a3e0f8ed581fe2b2e5c8259a74f222fe3d5e5162c7"},"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","fc2e03a21b84c1d090e6c38dfd1bd440f6c5c9e83a9dd3a81f8c7391a1fb928d","1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","910d31a7ef6f468bd963de066b7b893ca2616253b9817a103fa985e36815bde3","87751d98eb135aedd77ca8289e70ce0f389ebd5ca966f97e59bc11b05876111b","e361e681415c6e7f95315b710f61fcce578b3afe23e494a63ad33b96b77f0743",{"version":"2d0700f52609c17c658ca9ad21704f1788ccd9563c03e16d00962377723bd106","signature":"edded661b32622aff98696ba5ae0a385779079a95bad5b972df62c257b2e5284"},{"version":"3f43d32041531a2c6c45e8e7f168828af1e699a37697066776c8760235e35524","signature":"baa24c9f22a4b7d992354fa77ceaae6a8741754348e60b6619cb3e8f8b7e080b"},"0e647bbe4f4992bbc42680a705d957fd6fd4c3947c125bded0acebbd543229a3","1140496227f8e9d9679a2a8d526a3243faee6ea992967e63c50fb1a4473e60c9",{"version":"d0123973a0323b637e8eedb17e33c3a45a11793a72aca0e370ce6dcfb25caf42","signature":"1a8a1105268610133358e7b935ece56724d81b41aec6d9e1b743485927085466"},"6b98bd8d87f15c2ec66a98f66bb2f3f676e2811873612100aca6c66d4ee0651e","8dc9549bee6a8b8134bc39165ffe3217a3f12a441d92845667fd7566c92bec4f","7975c4e355eaeee604d1abf5511990f336a47e654cf2296d5158388e7fa0fb51","c271193e426325d9acab2f99997bb9f5f2dff850ec8c7c011c5abafe5af83b5f","6c788dba2e1d20130c5067722cfdcb8547b66d8b924d98d477fc7eb20d36a54b",{"version":"6e60fc2edafbb39417d62b2e61aabe041fb5429cae6af79269fcfeb8162fc6a8","signature":"4dd08eda74ace0a392e0cfc054c1178d5d9fd45cd8ae3e6cc7d69f43f13f359a"},{"version":"2c78b6d8bf77f7bd11d32f2a197c38d65ec99e106b9253b138f962219451b71a","signature":"eec15c8c4413fff7d5fbb9de458cab4b92a9025d057ad149e5a994977d2411cd"},"5dc4b28d92018055827cdacc57c002cba55ad2dd55dc95098f7684e9fbd016ec","6552460efe3df85dc656654231b75161e5072fc8ae0d5d3fd72d184f1d1f9487","47d6b5c9eef90150db146110fceafe993d57c06c8ecf772e1aed80c408e64d4a","065fc307c0c446e6c34ade1964e4831446e97bf5a2205852a2f0a715e6245790","e68cefe327be0e10ee06cf6b7a8c0f11271640333d1582c2176741896aade369","14f9bfe168ad8322e5e2c3e616278a8c13142dce7cb413e4dfe8272e7efa3b09","fcbed278dcc536e0762684323d7fd4fb19b58aae6bc370a825d0872b4cfbd810","003862fb7f01e4885cba058a0c023c3dd3b72617869c278f36dc4ada58cd49ed","f8349093fbd684343fa6daa8ffde3a18d8d57e18e1cf483de83bf1dde7a1831f","3b465040dedff2f3349e77b7283cd7b164863fb50052dcf5be9029392a773838","31a10e45ed67c6a3698ddd4d30581dc1b0a0a8ce0059bf5d4cfcda6ecdbdb91d",{"version":"af310ef201720d6ebc733d18add99773f3b72c4e4934f1fccb72db2f105f6145","signature":"3f35afd68370c2e960a1c7fe4c9322a3e9429b0d729492a53aa7c56102b694c4"},{"version":"e93f462a1c87e257e0a1894636aee3d3513924a912eeb995a65dbd3e5fcb58cc","signature":"dae43f45abbb677bc992118d5e230d1abce3f8c8c0e7cf22c0ef9bbdde104496"},{"version":"3ad17d3de58a9dc9e56333886ad0294a31aa80949f72075dc8655cd37ff44bb6","signature":"02f262de74d24071f5bd5954a795bfc8ebf5f3007541fcf665332d7a2fa883ec"},{"version":"c95e3acb0821f8ee3a0c1c72ef8a950ffffaaaa14aa1d7da13859e44d5ae40f9","signature":"09321879da65bb80648629c6e36bdfe4e07af5b33091177337aec5fc9eef5c77"},"929b84d8d5fbd235871609d8cf347678389ce0daa5c13ea9e207f2aad4ed554c","d11e4bb5a2896a7b755598cebd3489e8bcbe3268bb5c03177f58689fc5912519","b8ae8f390e04970a1b4745b14302e935b5829cf429e1a6c2b0d2e1d0f9a353e1","4046ac99624b4ed995c326ede50cca61d28fcbd3fa384d81be76fe5ff7b06d47","e401573d1084d67ed15882d2778840ffdab9dfdd6a98dadfbfaa80a6cd10d0b5","31ecf14b46a224947d39db14c37ad58035fb283c30a58b75b1118bc597a18bbb","d768cfb68e9c0d23cff3e9ccc6cbde4570f6365c9c9d0754c338a07162c0ab16","76c5482d1b47149942ae253623efe67d4737fac661917ed89fb589770050eada","010b4b9e253d9bf9566b792f410e3880f0c9eb07cd5b4ab3f25242901ded61cb",{"version":"c3bae71beb59fad622ceb6789331080e765ab43133013f99125ac97267e8096c","signature":"011b0c2c2a788bf633dd21251566e56de5052690768fa9722a7dd3e6c6a2272c"},{"version":"51e6867d6b2e5aee2f4532bbff45a62dc091b56431c48228ec0ebcb9ac60e6d1","signature":"00c0e78d36de00eea5fc97593f96355bf8b02f3e07776b3c5bb1c98bca583aac"},"d66bd8a64f1490c6034bba8821169e7e6099bf1f3f079c899380ec8e5fc2c315","9035012202f1da8a95dfd4f53a172fbc73c696918be76c870242b291478fe1de","80bb84ee1482237c5f8cc0febcbdb05e2ccc8929aa46cb5858470afce6f6827e",{"version":"5a47e9c502595aa2408c1208216934532c22940a649b32142537674b33218793","signature":"14eac3adf7bae521d32962f4106052e63f8bb53bfe37128ec93eb15ffb1c1cc4"},{"version":"11448cd55146f5db560501a07829ebc2ddf8955b704fa334f1f319065d0e1741","signature":"66ee2dfcc19d2dbb85ca017af890cd99d755be2e920502bd96f8e35438ec5dd4"},"40fe31095a51cef76ed9e3b535933a2cf89963630e38f267047c70e1af30effa","ccb88072d796632c33a2ded66c8b2051f034b9edf17eb08bbb12f3afef21a17b","207cbdee9e1b4ceed9673eeccfbff98ed8906246f1dfd84bba15a00cf0afbebc","f18e84ec3f0fc5651133fe16d3b28a05297a788334bba00b72aea76983770916","26da830b38a3f322b6e42901fb0c4455312fab7835a49f7054fd0f81c34a3f99","b2ae145b89460293dd7965185b069b2e80f83f4e37780c103a1b4d2ecf83c1e5","73f7ad8e386cd8614894c216947c2bc89042e276bbacd996f618b2fcaea30916","3c7ef2e6fd4d65901cee69fda36e13a41a5433125acbd5954e5ffd12cbbd7ddb","a5bb8781c7baf1ab6cca37145905d80c9af5fa8dda4d216d3b5fcef87a76096a","defa1db2322bbfb4a51a9410551858fbf2e4fb5e43bea42accfe1ea582a04106","f63ebd80bc7b9de8dd9fcf9d720b8fe7e2d3a51703f2bccbd316cedefd64b3a1","132cd72533d88d43a879e034ad280037ed9bbd9d716400ec2568debb507ffc37","395feec92cfff560e0c1ca16940751bd9e317012b9259be60f44e6b205604114","6438607301e618091d465590f29ebc04b372ea51f06ab2768e3fb0f5859d7d6e","9c1670d610187b9282846ca4663dc1ebeeea1f196f7150c5cfecef2bf6026d78","b44526d4c7ec062eabb57ce0eb2c8da04424abad1ca9971d3f072e3daf291f00","b3338366fe1f2c5f978e2ec200f57d35c5bd2c4c90c2191f1e638cfa5621c1f6","aed15f9c14562fa4d57cad5944fd8456830ddabbf51918cc31f30b62432a4b5f","e178f8de46d9ba5ed49fb64c8fc00f8ab418c25dbbafbf062167493e4b3cba6d","a3c7e0d2054b7648473e3818a7fc8726dcd9c799bc4b4409f5af71a63b6a4bf5","690781c33a62209a47ffff2ccd7c43245b1bc1d200bc5397de6e104a6fe6b61f","91f81b6b161c3f5d9cf0b25c0c797d5d013fb1c9c6206f646445cb93faf6d19c","2e9364b9ceb653c23dff7ea937445265d41c6e01bcc1778824d7e1708325d29c","ea3c196b4fcb01e34de0ecb50a84252c35bbdfbd51ae14ec8712cfb53c2f2343","bbf75a86740932aa195bd6399cb390848f0ad1cd95d5f3445dc0102fc1c95434","90fe26427a168529e487ebf4d9a1e0f3c457816b0bc636c7807e7f3da76da2df","d86f28a74e1bbba841d8a0740216fbd64bfd5c40ff2f1cd8a6d96deb64823540","0839ab20a919cedea716a61f71082d866aa3ffc66abb4bc35e9953b2bf13c6df","4390646dae91315630a8117adb8490746414b027cec8c2be3cb6f118e7377a1c","cd1a7f77549b2622856bcc9e09fd06007e9ffba4b60fb5678172115481815405","48d30b71ef5e843a711ab31df7ab3b4ea647868741cb58036c2710ae0586ca84","092463d792d329fa6cd0e7211839479bf28f89f9c425240df3b59fd87464a4aa","b2ac9d4a82347bd9fec3328731eb9ae14caafa72b4bcc669cbdc8644f99a0258","eeee3c0bbaf6543e24a603fa7ba3899c75b45a45823cd4cf4e615e394088bc5e","1294cfaa19cff49d270423b28543a7e609e685993897449ede9f5571abf0d48e","af36dcfe341179bd0e5d03d1821e208e6a3f80c2f6bcd7c55113689e9204fdaa","50774e26235e759c80f2c2e111a30127a89eccbf661429e382f7df4d47b2192c","542fa7bf4ddb35239de641313db57b7fd1c2dff6d777af0a7257555522a7ff79","360a79a4753b8dd69bbab3e082503c582cae5f585be21fa982768b32e9f5afd6","ad571174af038ec6c78b2a1f77a8323237f6eb279316d38c5a9464ba06cc75ed","5e3f4266586d209e481a0f730a6f26e35dd8e806a10eabe25fdd0fb52ca7b74c","a326bdfeb83f5dde8206b938bf217d9f490ed186c9b7349c24bb9f7d7c462236","da10af765c937bade5176039de88cb683d464f315df083a3876172a176a5a430","484d7a6a185f044a330064d7aac06d990f273a29f33250c8765ffe5e827be218","736bf790a7037ca8fc3d65f353ece7a8ecf9d63003e273bdaeb25062aa71bc8c","fb2bc6829245714c6ecd7d7bc3c823af292e9b241002a04652e777093630561a","2dfbf2250e854465456985a0429420fc12875c4efba110d5895cce4242249483","e2e1a8f95f2cbd94448b9410fbd17d171c9590523fb1afe2a130c3ee93e9772b","0b828ac3c46be927fde95468647ffb9337bb137c6df569acb8429d2cc97804e1","b160e46468b623646dc6c1631fa6d0bfce469f79f7ceee51f387a60806916bf8","002268ab9d68c77e6d95e96eb6c391cc4dd06baea4cf85782e2d790077a0b874","a02defb4926a836fab2e9d161320f9bf3cb2a0f47f2d2901e08fd2c5871a3985","20896784cecd6e275caf148a0f1cf630b62996e0d1066c0f6bda244ba510717f","f769cec1b5858fc7992ae9be15cb1f83b18917c9e677f7ae4172f7c677df059a","2c5cf7667b86c0983841e9a795baac2790c05cf9a3d4f293bcb23132cd7493d4","90678bbfa613690b2bc84d2ebc2b83e0454a717c2f4da524c6ba1ee8ed9ab2ac","3d927d62b19aac292c62538b1d46a001f1d6572b9c51bf247150ee46f0f68bac","ed41a4ad0ab74a2148c40339a970448e7432192bcbf81c2ebd5040db3feaf03b","b42c21f0c236220c675fb5d317433acb1c2873e6322d97802ff1797209335d8f","8cce932d8a056838e7b9402d9355904b513d5f9ddc7d58e75d9f8e6b332ee9f6","ffe35c59afb9b77836073da07161de4007d53a1601b52baffa5849aca9be69eb","d6d87a5df0f2164b8a1e3b9a66ee113c02fb11af86825fa2f697c0896d72eb89","3328c2148c6073e9d24c24c9fc8c48647653a2204745a8510b26e0f92c845a54","5a6e095d5fb3b2f30f5a16645e3f3a6ec1b4bbd1c251c3c9d99daaf967e45400","ede2ba30aee4f51961552d732f87ea984244646171700aadb8839c239246ea3b","72d831b39e2377045f095d9c2abc15fd9510d5c2c1c9387063dde2715f1b31fb","fc49c0659bc8b865a65bdbd65f8c7b976348c11502baea15271edde3c13f3739","f1cf9d5fc462aa8fc436a37bcc7041c1a54d0db01fa1bd8d956c2049a4b20065","cd34e61e636362197f8aa20d9c866a4804b7e8642299bcc397c89ae397c68c9a","c70a4560d5efed900d120357342ec30966089ea53bb717d27b7972cd353a3ad9","e20bf5c0b64418a93774d1c88744ca86816e6504b59fbe48d25e1f8c929bfc39","20eb061e1f480b864de31ee93b630d72b40109948ac0a9873a0699a4ad3dcc8c","c5d591b71fd346e694e943c9836ae4dec22f91fb4afbaa98c8937ab33892e918","1e7ed303370845bf261938082748ca45c13489706274604dab9d0feec01efe82","6b220e8957ed215af9d49bcfe76cbc1108df2bb6f7ba4ac88db254bb94242f34","9fb5c533b90d2425f77364e28b342b2f0986d432f5e08a119fe9e07b4fd0ea68","5cf4d496a8b68479dc2c946e52e7fc83bf0bb0102ef14bf17a2267dd8402fe92","0ecdfa08fa1f0fd3a59308c9a571ffc9869e1a8d56c727a0f71875b320cac9c4","8cb411e8e454981689ed2c79604c7129466f4cacd06102a2d8b0a414e71d5c6b","5b276eb5785ed76d9d3816179238528f875e80d15e076c4fd8474efa274066e4","e92f948adfa3d03fc955fad8d6376e7c4fe4e36f2b64309a5076b78daafc4787","566876d370580473855a414e1111e3d8101d955331493e716a44438c1f557c6f","7928f42b3a1db8a514bf9f9d42988f60ec31fe404c8925a35c63ee9686cbf306","86f9aeb0a7ccb337c7e65447276e2c133d38c3336f08d7a72d4ce380f70414f8","ba1602c37a7f69388e3991f7cfcb679fd9ba5655b5717116a4afc6652473c282","c590702f777af60cf0bc53610ec89d1626f3cd793c560b89f1ff8fc0cb003725","9fb2bf9b6da9a01f51eac9ef900e55d16bdaa137988bd97fc7790d3f8aec14b2","2fe8c4cd0a7b396d150c871e04790db7dfb01c5cf4aec1af4d87457bb6ec9580","75da2c182c51f69ca52647fbd6481c88d254a610770ad51ab62e1e165746a439","19f1eaf32dc1f16a463884dff61d6d7de0eee80ebd8b563f940b533e753cfed0","51812369cde3f8d1c0139351907ce45d460874c3584cf60145ba949735cb2b2e","c346f90ea8f79da752d54c1f8d995a2a8934e683cb4042d8edd00d2c3586d4c6","bb4f022121efd54085b09a23820d843f025e5f95a20ca2c0a93a0dab1994a6fb","5a4a563b77666730b2e13f6480d7d11a947dea6e2dd6fe280fb1edde3d5c6cf5","adf579167e35e5967642d2f79b6bdff7b4cd8c52f1d03eb6e0b33e351e645d08","de3dbd05623a76948203614e20dfdea7d427b58a4f9fd18c8f5958bbd7e18b75","6dceb029dff0063122de24952efd9467ceeed923d8b2ef2224ad45b8f88f2e8a","f9da1704f9ef02f99401d73eaab4f0a4e28c5f43a02cce6a5b8b6e03c3849317","9c276c3797c22251f3fd5cbc144f3dda7df02175b29cd8d6ff688a16add0b691","8e437257158ac383bf171e832ef01a296b3b2ddc65f0b0d241e0be7a683876fe","e98d35bca0594e1caf13acd304be1e4e974ce6bc2b259ade0a495ad8a69c1110","cf490493f865f1a6dd82c5b62a0844ca195ef18318b097b6b526fc034fd19c2d","27f01818444d4a7f0be6007ae27b308eeb3ebc187a35cda881cc5b3eced65726","515de56a456a75d303ce2a55e19401182aeba6329899dc40e2f6b4f920fdbac1","3be31bd6a8d0f1d27b06582482f7e3eacc1e03f06b3d8f6a2c45b05eb5241525","4b3c1f2b88e8843cd0f380bbcd6cbaff55cbcbfb67fbd630816e271d2a7de2de","a6101d840bdc95fae595d967cfefb96466bfec793b7b82d194c8f6afc6c96aae","2f409deffff5efd7a6728b57e04b9df378ef284335fdb6341d78be69561ffe0a","19d531673cb3d974349b7a202c7c2d5020b7bcdbe26365141de99005244f7698","9a4b4636c5f83a464364bcbd389a3e071d05929d7d54f953a0876d0f5e37de65","ba50a11bb7b9c47c04c8aa3d745e2ecb63f01affc909550b1b8f0b0139622393","8a815dda6e38e386a41b4b9d7871f93f0c873b191ad4ba6d0a5df0a34481b715","e35ca9ab379928f0b9adfae69084278d63c58ec96afd4226bf764ac9e22dbea8","395ec10e9ab83c496018f95a5e268a1e967130f76e56a22b9bba1f503c869389","d73cfd1484017ca89ae5f248ce10da423a289e3c0cb554cc9e88dc2bff6a04dc","104957aa70e72847b62620ab95da338a66cb52dc544363becd836de84b1d8544","53bb7995604c3b06b6557fef04b525277e81d395f68524894fcf72448ebd4e24","c577dc5cc0817b3a3356ee14d726babd5f0eb5ccf966a6740b6f2c8687a14289",{"version":"96362a5e06b3b35a2c928931d2442f9370c01bfc09efb6a53815344f1b7db314","signature":"e758d0faddd14d3518232113c4a9c21ebe5c8a4f8369258515050d7a1a71f287"},"54ccd0c58d4f2d0ea14c1526b2a29547685c4dfe1671ef1286a2ca396e604bf4",{"version":"1fe6836b56943782ef60aa102612a217dc20a037546b6c9bcd77ef7088305b01","signature":"b37cda424c9382dfac3bc471e07f8d1740628a4ebb7785f2c50658987070e12e"},"561aa2a40fb584621aa939f062df32bd9f3d5c7ce7a11d09a2ace0f53e1fdc99","19455012fdeed9dd09692683d7c71af7377bebc31b14f2fb806be0435b881d1f","eb122cc41ea0cf73db8d387e78a6c8b387bd08c1fda39dbe9a4e91b5b5ed4cd2",{"version":"94f0c63ece292625b6fed7ee7b1e66875d2fc4d5b5f1624a896b0d1f2152710f","signature":"9016c4b609a3c852a13fe14f260d2ebc4da05f925bb6a74092507032d02eb9d1"},{"version":"e3244a588917ca9d3c383bafdc99e6d09960ca4ad820a489f68d5cf904bfaeb2","signature":"1817f19078a090d38474bf509b0acb96797217e97cd06a0310e2aac294624222"},{"version":"f40d96753491e4aeb9a2d8acd6bfeb2f9e2660e0db6bf90e362acfc1301853af","signature":"839056f07b97c3e21383b922835f3320d38891996482cfac05ed186a22539baf"},"9e4b070b543d91d0b321a481e1119e99bb8f136f4ef271d7b5ba264919fc32e2",{"version":"be7abf1df570aea13a80f9e26c48e4ec51ee5b5c807326fc730eadba8a118905","affectsGlobalScope":true},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true},{"version":"f65b3f4d5fd737570c8b1df6a050572891d8848eb65be9185e9d3117f85175b9","affectsGlobalScope":true},{"version":"ec661892cf668936492eee432fb5229e37fe07ba3033bec9e5d97a9734c4de45","affectsGlobalScope":true},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","7852500a7dc3f9cb6b73d619f6e0249119211ea662fd5e16c59ee5aba3deeb80","1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true},"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","d8f7109e14f20eb735225a62fd3f8366da1a8349e90331cdad57f4b04caf6c5a","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e",{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true},"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[379,407,1934,1955,1965,1966,[2285,2288],[2290,2292],2304,2311,2312,2315,2321,2322,[2334,2337],2347,2348,2352,2353,2472,2474,[2478,2480]],"options":{"allowJs":true,"checkJs":true,"esModuleInterop":true,"jsx":1,"module":99,"noImplicitAny":false,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"skipLibCheck":true,"strict":true,"target":9},"fileIdsList":[[377,378],[377,1954],[1510,1530,1532,1533],[1514,1515,1516,1517],[1516],[1532,1534],[1511,1512,1513,1519,1525,1526,1530,1531],[1527,1528,1529],[1512,1519],[159,1512,1518,1519,1520,1521,1523,1524],[1524],[1512,1518,1520,1523,1524],[1513],[1527],[159,1512],[1512],[1523,1524],[1512,1522],[121,159,1556,1557,1571],[1556,1557,1572,1573],[159,1556],[159,1571,1574,1577],[159,1574,1577,1578],[1575,1576,1577,1579,1580],[159,1577],[159,1571,1574,1575,1576,1579],[159,1562],[159],[121,159],[109,159],[1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570],[159,1560,1561],[159,1560,1562],[2497],[1593,1595],[1595,1596,1597,1598,1599,1600],[1593,1594],[1544],[1547],[1544,1547],[1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1582,1585,1586,1587,1588,1589,1590,1591,1592],[1538,1544,1545],[1547,1553,1555,1581],[1584],[1547,1548],[1544,1588],[1593,1594,1601,1603],[1604],[1606],[1603,1604,1605,1606,1607,1608,1609,1610],[159,1605,1608],[159,1593,1604,1606],[1603,1608],[159,1593,1594,1601,1604],[1593,1601],[1612,1613,1614],[1612,1613,1614,1615,1616,1618,1619,1639,1640,1641,1642,1643,1644,1648,1649,1651,1652,1653,1654,1655,1656,1657,1658,1659],[1616,1617,1639,1642,1643,1644,1650],[1612,1613,1616,1617,1618,1619,1641,1642,1644,1648,1649,1650,1651,1652,1653,1654,1655,1660],[1612,1616,1617,1638,1642,1643,1644,1645,1646,1647,1648,1650,1656],[1617,1642,1643,1645,1646,1647,1648,1649],[1613,1639,1640,1641],[1613,1619,1643,1651],[1619],[1611,1660,1755,1756,1764,1765,1769,1770],[1758,1761],[159,1660,1759,1760],[1611],[1611,1617,1660,1756,1757,1759,1761,1762,1763,1764,1765,1767,1768],[1660],[1769],[1766],[1660,1757,1758,1761,1762,1763,1765,1769],[1959,1961],[2476],[65,2316],[65,2316,2327],[65],[65,2316,2327,2331],[65,2316,2323,2324,2327,2328,2329,2330],[65,2316,2325,2326,2327],[1680],[65,1753],[65,2295,2298],[65,2298,2350],[65,2295,2298,2300,2301],[65,2298],[2296,2297],[403,404],[65,2298,2301,2332],[351],[65,2298,2338],[65,2298,2317],[1806],[121,159,1804,1805],[1793,1796],[1796],[1793,1796,1801,1802,1803],[1797,1798,1799,1800],[1788],[1789,1791,1792,1795],[1789,1792,1793,1794],[1790],[1794,1796],[1773,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1787],[1773,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786],[1773],[1773,1774],[1949],[1949,1950],[1952],[1095],[1094,1095,1096],[1094,1095,1096,1097,1098,1099,1100,1101,1102],[1094,1095],[65,1103],[65,251,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119],[1103,1104],[65,251],[1103],[1103,1104,1111],[1103,1104,1106],[2481],[2482,2484],[1583],[2488,2490],[2487,2488,2489],[2483],[2492],[2493],[2499,2502],[1979],[1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283],[1967,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979],[1967,1968,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979],[1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979],[1967,1968,1969,1971,1972,1973,1974,1975,1976,1977,1978,1979],[1967,1968,1969,1970,1972,1973,1974,1975,1976,1977,1978,1979],[1967,1968,1969,1970,1971,1973,1974,1975,1976,1977,1978,1979],[1967,1968,1969,1970,1971,1972,1974,1975,1976,1977,1978,1979],[1967,1968,1969,1970,1971,1972,1973,1975,1976,1977,1978,1979],[1967,1968,1969,1970,1971,1972,1973,1974,1976,1977,1978,1979],[1967,1968,1969,1970,1971,1972,1973,1974,1975,1977,1978,1979],[1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1978,1979],[1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1979],[1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978],[72],[108],[109,114,143],[110,121,122,129,140,151],[110,111,121,129],[112,152],[113,114,122,130],[114,140,148],[115,117,121,129],[108,116],[117,118],[121],[119,121],[108,121],[121,122,123,140,151],[121,122,123,136,140,143],[106,109,156],[117,121,124,129,140,151],[121,122,124,125,129,140,148,151],[124,126,140,148,151],[72,73,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158],[121,127],[128,151,156],[117,121,129,140],[130],[131],[108,132],[133,150,156],[134],[135],[121,136,137],[136,138,152,154],[109,121,140,141,142,143],[109,140,142],[140,141],[143],[144],[108,140],[121,146,147],[146,147],[114,129,140,148],[149],[129,150],[109,124,135,151],[114,152],[140,153],[128,154],[155],[109,114,121,123,132,140,151,154,156],[140,157],[121,140,148,159,1956,1959,1960,1961],[65,373,374,375],[65,373,374],[65,69,325,368,372],[65,69,325,368,371],[62,63,64],[2508],[2510],[1962,1963],[1962],[1089,1123,1535],[1089,1536,1772,1808,1930,1931],[717,1089,1123,1771],[1089,1123,1804,1807],[717,1089,1123,1929],[717,1010,1011],[717,1007,1009,1010,1011,1013,1014],[1010,1011,1013,1014],[717,1007,1010,1011,1017,1021],[717,1007,1010,1011,1013,1017,1018,1019],[717,1007,1010,1011,1017],[717,1010],[717,1007,1010,1011,1017,1018],[1007,1010,1011,1017],[1010],[717,1007,1010,1011],[1007,1010],[717,1007,1010,1011,1013,1014],[717,1007,1010,1011,1021,1047],[717,1010,1011,1017,1018],[717,1007,1010,1013,1019],[717,1007,1010,1011,1018],[717,1010,1011,1017],[717,1010,1011,1045,1046],[1007,1009,1010,1013],[717,1007,1010,1011,1013,1018,1019],[717,1007,1010,1011,1013,1017,1019],[717,1010,1013,1014],[717,1007,1010,1011,1013,1014,1061],[1010,1024],[1010,1030],[1010,1031],[1010,1032],[1010,1033],[1010,1034],[1010,1043],[717,1007,1010,1011,1013,1017,1018,1019,1059],[717,1006,1007,1008],[717,1007,1009],[717,1009],[717,1004,1005,1006,1007,1008,1009],[1007],[717,1010,1013],[1010,1013],[717,1008,1009,1010,1012,1013,1014,1015,1016,1018,1019,1020,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088],[1006,1007,1011,1018,1084,1121,1122],[1128,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171],[1007,1010,1011,1012],[1009,1010,1015,1129],[1010,1016,1129],[717,1007,1010,1011,1021,1022],[1007,1010,1011,1020],[1007,1010,1011,1023],[717,1007,1010,1011,1021,1025],[717,1007,1010,1011,1026],[1007,1010,1011,1027],[1007,1010,1011,1028],[1007,1010,1011,1029],[717,1007,1010,1011,1019],[717,1007,1010,1011,1035],[717,1007,1010,1011,1036],[717,1007,1010,1011,1037],[717,1007,1010,1011,1038],[717,1007,1010,1011,1039],[717,1007,1010,1011,1040],[1007,1010,1011,1041],[1007,1010,1011,1042],[1007,1010,1011,1044],[1007,1010,1011,1021,1048],[717,1007,1010,1011,1018,1049],[1007,1010,1011,1050],[717,1007,1010,1011,1051],[717,1007,1010,1011,1018,1052],[717,1007,1010,1011,1053],[717,1007,1010,1011,1047],[717,1007,1010,1011,1018,1054],[717,1007,1010,1011,1046],[1007,1010,1055,1129],[1007,1010,1056,1103],[717,1007,1010,1057,1129],[717,1007,1010,1058,1103],[717,1007,1010,1011,1018,1059],[1007,1010,1060,1129],[1007,1010,1062,1103],[1007,1103],[717,1007,1010,1011,1063],[717,1007,1010,1011,1064],[717,1007,1010,1011,1018,1075],[717,1007,1010,1011,1018,1076,1103],[717,1007,1010],[1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877],[1861],[1839,1861],[121,159,1839,1861],[1879,1880,1898,1899,1901,1902,1903,1904,1905,1906,1907],[121,159,1839,1861,1892,1897],[121,159,1839,1861,1900],[121,159,1861],[1864,1878,1908],[1884,1885],[121,159,1813,1826,1861,1862,1926],[1927,1928],[1861,1927],[1814],[1819],[121,159,1817],[1817,1818,1820],[1815],[1816],[1920],[121,159,1892],[1822,1823,1824,1825],[1822,1823],[1886],[1826,1882],[1882],[1881,1882,1883,1887,1888,1889,1890,1891],[1826],[1811,1812],[1811],[1809,1810],[1832,1834],[1832,1833,1838],[1832,1835,1836,1837],[1893,1894,1895,1896],[1893],[1826,1893],[1911,1912,1913,1914,1915,1916,1917],[1839,1861,1909],[1863,1910,1918],[1813,1815,1821,1839,1840,1841,1845,1846,1847,1849,1850,1851],[1826,1839,1840,1852],[1839],[1815,1839,1852],[1815,1826,1839,1852],[1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852],[1839,1852],[121,159,1826,1839,1845,1848,1852],[1815,1839,1845],[1815,1826,1839,1842,1843,1844,1852],[1826,1839,1852],[1815,1826,1839,1845],[1853,1860],[121,159,1839,1850,1852,1854,1855,1857,1858],[121,159,1826,1845,1849,1854,1855,1856,1857,1859],[1854,1855,1856,1857,1858,1859],[1826,1845,1854,1855,1859],[1845,1848,1859],[1845,1848,1854,1859],[1924,1925],[1922,1923],[1813,1815,1861,1919,1921,1923],[1826,1861,1919,1922],[121,159,1826,1839,1861,1919,1924],[408,409],[409],[408,410,411,412,413,415,416,417,418,421,422,423,424,425,426,427,428,429],[411],[410,411,414],[410,411],[410,417],[410,414,416],[409,410,414],[409,410,415],[409,410,414,419,420],[409,410,412,414,419,420],[409,410],[409,410,414,419],[408,409,410,414,420],[408,409,410],[2293,2294],[2293],[1625,1626,1630,1631,1632,1633],[1620,1624,1625],[1620,1624,1626],[1627,1628,1629],[1625],[1624,1625],[1621],[143,159,1621,1622,1623],[2495,2501],[2499],[2496,2500],[1000,1001,1002,1003],[999],[1000,1001],[1000],[431,740,741,746,796,803,880,914],[740,742,915],[740,741,742,766,768],[741,742,764],[741,742,804,875,901],[741,742,766,796,803,804,914],[740,741,742,804,880,882,901],[740,742,746,754,762,764,778,780,782,784,787,829,910,912],[742,746,754,831,834,835,910,912],[740,742,746,754,764,782,787,829,910,912],[740,746,754,764,778,780,782,784,787,829,910,912],[740,742,746,749,754,829,844,847,858,872,873,891,910,912,915],[740,741,742,744,745,746,754,764,778,780,782,790,794,809,810,824,827,910,912,915],[742,754,794,839,910,912],[740,742,744,749,754,764,794,839,843,910,912],[740,742,744,746,749,754,764,794,839,843,910,912],[740,745,746,749,754,780,814,828,910,912,915],[742,744,748,754,820,848,849,850,910,912],[744,745,746,747,754,764,794,809,810,813,910,912,915],[742,744,747,754,763,794,817,820,848,849,910,912],[740,742,744,754,764,794,910,912],[741,742,744,754,764,794,815,816,910,912,915],[742,754,794,910,912],[741,742,744,754,763,764,794,910,912],[740,741,742,744,754,764,794,910,912],[742,754,763,794,910,912,915],[740,741,742,744,749,750,754,777,857,910,912],[744,748,754,764,794,859,910,912],[740,741,742,744,750,754,794,839,855,856,910,912],[740,742,744,750,754,794,839,855,856,910,912],[742,754,794,910,912,915],[740,741,742,744,749,750,754,764,794,843,855,856,910,912],[740,741,742,744,751,754,764,794,863,910,912],[741,742,744,754,764,794,910,912,913],[741,742,754,852,866,867,910,912],[740,742,744,754,763,764,794,910,912,915],[741,742,754,794,795,867,910,912,999],[740,742,749,754,778,780,782,825,828,829,870,910,912],[740,749,754,778,780,825,828,910,912],[740,741,742,745,746,749,754,778,780,825,828,872,910,912],[740,741,742,754,757,764,825,876,877,910,912],[740,741,742,754,875,878,910,912],[740,741,742,754,878,880,882,910,912],[741,742,754,817,866,869,884,887,910,912,914],[742,754,852,885,886,910,912],[742,744,754,817,885,886,889,910,912],[740,742,749,750,754,884,885,889,910,912],[741,742,754,884,885,889,910,912],[741,742,747,754,794,912,942],[742,747,754,794,912,942],[740,742,747,752,754,794,912,942],[740,742,747,754,794,912,942],[742,747,752,754,794,912,942],[741,742,747,754,794,809,912,942],[740,741,742,747,754,794,912,942],[742,754,764,794,910,912,915],[740,741,742,746,749,754,822,910,912,915],[740,742,754,768,794,910,912,915],[742,753,754,794,910,912,915],[745,746,747,754,809,810,814,817,818,819,910,911,912,915],[740,742,754,794,910,912,915],[742,746,753,754,794,910,912,915],[741,742,754,794,910,912,914],[741,742,745,746,747,754,794,805,806,807,809,810,811,820,821,910,912,915],[741,742,745,747,754,764,794,902,910,912,915],[742,745,746,747,754,764,794,805,806,809,810,811,910,912,914,915],[740,741,742,745,747,754,757,794,819,880,881,889,905,910,912,915],[740,741,742,746,747,749,754,780,809,822,910,912,915],[740,742,745,746,747,753,754,894,909,912,915],[742,746,753,754,894,910,912],[740,742,746,747,753,754,910,912,915,941],[740,742,746,747,753,754,909,910,912,915],[740,744,747,748,749,754,811,814,817,818,820,821,825,829,830,835,836,837,838,839,840,844,845,846,847,849,850,851,852,853,854,857,858,860,861,862,864,865,866,868,869,871,873,874,879,883,887,888,890,891,892,893,910,911,912],[747,752,754,910,912,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,942,943],[740,754,811,820,821,822,872,895,896,897,898,899,900,903,904,906,907,908,910,912,915],[742,753,910,912],[742,754],[742,754,912],[742,754,793,946],[741,742,754,793,946],[740,741,755],[755],[741,755],[755,912],[740,741,755,825,826,912],[755,814,912,915],[746,755],[741,744,755,822,912,914,915],[740],[431,740,741,743,744,747,748,749,750,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,775,776,777,778,780,781,782,784,786,788,789,795,796,799,800,801,802,803,806,809,810,811,812,814,815,816,817,818,820,822,825,826,827,828,829,830,831,832,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,860,861,862,865,866,867,868,869,870,871,872,873,874,875,876,878,880,881,882,885,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,903,906,907,908,909,910,911,912,913,914,915,916,918,919,920,921,922,923,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,975,978,981,982,983,984,985,986,987,988,989,990,991,992,993,994,996,997,998],[431,740,746,915],[740,741,743,914],[740,746,747,748,754,803,816,820,910,911,914],[740,741,746,914],[740,741,744,746,752],[740,741,744,746,749,753],[740,741,749],[740,749],[740,741],[744,746,748,750,751,914],[740,741,746,748,750,913],[754],[741],[740,741,742,756,761,762,763,768,769,772],[740,741,742,749,756,773],[740,741,742,749,756,773,776,779],[740,741,742,746,749,756,773,779,842],[740,741,742,749,756,769,773,776,779],[740,741,742,749,756,773,777],[740,741,742,756,759,761,764,767,769,770,771],[740,741,742,749,756,771,772],[740,742,749,771,772,776,777,779],[740,742,749,756,765,766,772,779,841,842],[740,742,749,756,771,772,776,777,779],[740,742,749,756,772,777],[740,741,742,756,759,764,767,770,771],[740,742,749,756],[742,749],[740,741,742,749,757,767,776],[740,742,765,766,767],[740,741,742,759,765,766,768,769,771,799,961],[740,742],[740,742,770],[742,788,789,790,791,793],[740,741,742,754,825,910,912],[742,781,912],[746,912],[742,912],[781,912],[742],[741,742,797],[741,742],[741,742,757,765],[741,742,758],[741,742,757],[741,742,757,758,761],[741,742,762,763,764],[741,742,760,761,762,765],[741,742,755,760,764,765,798,799],[741,742,757,759,763,764],[741,742,759,760,763],[741,742,764,765,798],[742,754,831,833,910,912],[740,742,754,829,831,832,910,912],[742,764,765,766,783],[742,764,765,766,771,783],[741,742,765,785,786],[742,823,825,827,912],[740,742,827],[742,812,814,823,912,915],[755,800,822],[742,795,822,823,912,915],[741,742,744,746,752,808,912,913],[742,748,752],[742,746],[742,750,752],[742,751,752],[742,744,746,752,808,912,914],[742,746,752,808,912,914],[740,742,765,766],[740,742,775],[740,742,765,766,769,775],[740,742,774],[741,742,757,761],[741,742,757,764,765],[740,745,757,759,761,762,763,764,765,766,767,768,769,771,772,773,776,777,778,779,780,782,793,794,796,799,801,802,803,806,807,808,809,810,813,816,820,823,824,826,828,842,843,855,856,867,875,876,881,882,889,913,958,959,960,961,962,963,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994],[742,788,790,792],[741,742,763],[741,742,764,765],[741,742,765,766,771],[740,741,742,764,766,772,880,881],[740,741,742],[740,741,742,875,967],[741,742,757,763],[740,741,742,880,882,967],[741,742,995],[741,742,763,764],[740,741,742,768,968,978],[740,741,742,768,880,970,978],[742,745,770,795,800,822,912],[742,755,767,770,781,800,914],[742,763,769,795,914],[742,795,914],[741,742,757,759,763,767,770,795,799,801,914,963,982],[741,742,767,770,795,799,914],[741,742,764,771,795,796,799,801,802,914],[740,741,742,761,764,767,880,882],[989],[742,992],[718,719],[718],[721],[720,721,724],[720,721],[720,727],[720,724,726],[718,720,724],[718,720,725],[718,720,724,729,730],[718,720,722,724,729,730],[718,720],[718,720,724,729],[718,719,720,724,730],[719,720,721,722,723,725,726,727,728,731,732,733,734,735,736,737,738,739],[718,719,720],[2475],[65,2309],[70],[329],[331,332,333],[335],[167,177,183,185,325],[167,174,176,179,197],[177],[177,303],[164,232,250,265],[273],[164,167,177,184,218,228,300,301],[164,184],[164,177,228,229,230],[164,177,184,218],[164],[164,167,184,185],[258],[108,159,257],[65,251,252,253,270,271],[241],[240,242,345],[65,251,252,268],[247,271,357],[355,356],[191,354],[244],[108,159,191,207,240,241,242,243],[65,268,270,271],[268,270],[268,269,271],[135,159],[239],[108,159,176,178,235,236,237,238],[65,168,348],[65,151,159],[65,184,216],[65,184],[214,219],[65,215,328],[2305],[65,69,124,159,325,366,367,371,372],[325],[166],[318,319,320,321,322,323],[320],[65,215,251,328],[65,251,326,328],[65,251,328],[124,159,178,328],[175,176,178,187,205,207,239,244,245,267,268],[164,236,239,244,252,254,255,256,258,259,260,261,262,263,264],[237],[65,135,159,164,176,177,205,207,208,210,235,267,271,325],[124,159,178,179,191,192,240],[124,159,177,179],[124,140,159,175,178,179],[124,135,151,159,175,176,177,178,179,184,187,188,198,199,201,204,205,207,208,209,210,234,235,268,276,278,281,283,286,288,289,290,291],[124,140,159],[164,167,168,169,175,176,325,328],[124,140,151,159,164,172,302,304,305],[135,151,159,172,175,195,199,201,202,203,208,235,281,292,294,300,314,315],[177,181,235],[175,177],[188,282],[284,285],[284],[282],[284,287],[171,172],[171,211],[171],[173,188,280],[279],[172,173],[173,277],[172],[267],[175,178,187,206,226,232,246,249,266,268],[220,221,222,223,224,225,247,248,271,326],[275],[124,159,175,187,206,212,272,274,276,325,328],[124,151,159,168,175,177,234],[231],[124,159,308,313],[198,207,234,328],[296,300,314,317],[124,159,181,300,308,309,317],[167,177,198,209,311],[124,159,177,184,209,295,296,306,307,310,312],[160,205,206,207,325,328],[124,135,151,159,173,175,176,181,186,187,195,198,199,201,202,203,204,208,210,234,235,278,292,293,328],[124,159,175,177,181,294,316],[124,159,176,178],[65,124,135,159,166,168,175,176,179,187,204,205,207,208,210,275,325,328],[124,135,151,159,170,173,174,178],[171,233],[124,159,171,176,187],[124,159,177,188],[124,159],[191],[164,190],[192],[177,189,191,195],[177,189,191],[124,159,170,177,178,184,192,193,194],[65,268,269,270],[227],[65,168],[65,201],[65,160,204,207,210,325,328],[168,348,349],[65,219],[65,135,151,159,166,213,215,217,218,328],[178,184,201],[200],[65,122,124,135,159,166,219,228,325,326,327],[61,65,66,67,68,325,368,371,372],[114,159],[297,298,299],[297],[65,69,124,126,135,159,166,179,317,324,328,368,371,372],[337],[339],[341],[2306],[343],[346],[350],[69,71,330,334,336,338,340,342,344,347,351,353,359,360,362,369,370,376],[352],[358],[215],[361],[108,192,193,194,195,363,364,365,368],[65,325,372,373,375],[159,1956,1957,1958],[140,159,1956],[140,159],[140,159,1827,1828,1832],[121,156,1829,1830,1831],[2498],[65,2319],[161,162],[2341,2343],[2344],[2341,2342,2344],[65,2344],[65,1754],[1688,1689],[65,1669,1675,1676,1679,1682,1684,1685,1688],[1686],[1696],[65,1668,1694],[65,1666,1668,1669,1673,1687,1688],[65,1688,1717,1718],[65,1666,1668,1669,1673,1688],[1694,1703],[65,1666,1673,1687,1688,1705],[65,1667,1669,1672,1673,1676,1687,1688],[65,1666,1668,1673,1688],[65,1666,1668,1673],[65,1666,1667,1669,1671,1673,1674,1687,1688],[65,1688],[65,1687,1688],[65,1666,1668,1669,1672,1673,1687,1688,1694,1705],[65,1667,1669],[65,1666,1668,1671,1687,1688,1705,1715],[65,1666,1671,1688,1715,1717],[65,1666,1668,1671,1673,1705,1715],[65,1666,1667,1669,1671,1672,1687,1688,1705],[1669],[65,1667,1669,1670,1671,1672,1687,1688],[1694],[1695],[65,1666,1667,1668,1669,1672,1677,1678,1687,1688],[1669,1670],[65,1675,1676,1681,1687,1688],[65,1675,1681,1683,1687,1688],[65,1669,1673],[65,1731],[1668],[65,1668],[1688],[1687],[1677,1686,1688],[65,1666,1668,1669,1672,1687,1688],[1741],[1703],[1661,1662,1663,1664,1665,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752],[1753],[1663],[2373],[2346,2355,2356,2357,2358,2360,2361,2362,2364,2365,2366,2367,2368,2369,2371,2372,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470],[65,2359,2360],[65,2359],[65,2361],[65,2363],[2367],[2370],[65,2373],[65,2384],[2398],[65,2418],[2460],[2374],[2373,2404],[1635,1636,1637],[1620,1634,1635,1636],[1620,1635,1637],[1620],[380],[1537,1539,1540,1541,1542,1543],[1537,1538],[1539],[1538,1539],[1537,1539],[395],[393,395],[384,392,393,394,396],[382],[385,390,395,398],[381,398],[385,386,389,390,391,398],[385,386,387,389,390,398],[382,383,384,385,386,390,391,392,394,395,396,398],[398],[380,382,383,384,385,386,387,389,390,391,392,393,394,395,396,397],[380,398],[385,387,388,390,391,398],[389,398],[390,391,395,398],[383,393],[400,401],[399,402],[83,87,151],[83,140,151],[78],[80,83,148,151],[129,148],[78,159],[80,83,129,151],[75,76,79,82,109,121,140,151],[75,81],[79,83,109,143,151,159],[99,109,159],[77,78,159],[83],[77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,100,101,102,103,104,105],[83,90,91],[81,83,91,92],[82],[75,78,83],[83,87,91,92],[87],[81,83,86,151],[75,80,81,83,87,90],[109,140],[78,83,99,109,156,159],[430,431,433,434,452,459,460,621,626],[430,432,627],[432,434,449],[432,434,577,604,605],[432,434,451,459,605,621,626],[430,432,434,460,583,604,605],[430,432,433,446,449,478,494,496,503,514,517,519,615,617],[432,433,478,521,524,525,615,617],[430,432,433,449,478,503,517,519,615,617],[430,433,449,478,494,496,503,514,517,519,615,617],[430,432,433,457,478,519,534,540,560,574,575,593,615,617,627],[511,519,520,525,526,527,528,530,534,535,536,539,540,545,546,548,549,550,551,552,553,554,555,556,559,560,562,563,564,566,567,568,570,571,573,574,575,576,580,581,584,589,590,592,593,594,595,596,598,599,600,601,602,603,607,609,611,612,613,616,624,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,655,656,657,658,659,660],[430,432,433,434,437,441,449,461,474,476,478,490,491,492,494,496,499,502,503,506,509,510,615,617,627],[432,478,502,529,615,617],[430,432,449,457,474,478,502,529,533,615,617],[430,432,433,449,457,474,478,502,529,533,615,617],[430,433,457,461,478,496,518,539,615,617,627],[432,454,474,478,541,548,549,550,615,617],[430,433,449,461,474,478,502,509,510,538,615,617,627],[432,448,455,474,478,502,541,545,548,549,615,617],[430,432,449,474,478,502,615,617],[432,478,502,615,617,627],[432,433,434,449,474,478,502,542,544,615,617,627],[432,478,502,615,617],[432,434,448,449,474,478,502,615,617],[430,432,434,449,474,478,502,615,617],[432,448,478,502,615,617,627],[430,432,434,457,458,474,478,493,559,615,617],[449,454,474,478,502,561,615,617],[430,432,434,458,474,478,502,529,557,558,615,617],[430,432,458,474,478,502,529,557,558,615,617],[430,432,434,449,457,458,474,478,502,533,557,558,615,617],[430,432,434,449,474,475,478,502,565,615,617],[432,433,434,449,474,478,502,543,615,617],[432,434,478,553,568,569,615,617],[430,432,448,449,474,478,502,615,617,627],[432,434,478,502,569,615,617,625,717],[430,432,457,478,494,496,503,511,518,519,572,615,617],[430,433,457,478,494,496,511,518,615,617],[430,432,433,434,455,457,461,478,494,496,511,518,574,615,617],[430,432,434,444,449,478,511,578,579,615,617],[430,432,434,478,577,580,615,617],[430,432,434,460,478,580,583,615,617],[432,434,459,478,500,545,568,571,585,589,615,617],[432,478,553,587,588,615,617],[432,474,478,545,587,588,591,615,617],[430,432,457,458,474,478,585,587,591,615,617],[432,434,478,585,587,591,615,617],[432,434,455,478,502,617,654],[432,455,478,502,617,654],[430,432,455,476,478,502,617,654],[430,432,455,478,502,617,654],[432,455,476,478,502,617,654],[432,434,455,478,502,509,617,654],[430,432,434,455,478,502,617,654],[432,449,478,502,615,617,627],[430,432,433,434,457,478,615,617,624,627],[430,432,478,485,502,615,617,627],[432,477,478,502,615,617,627],[430,433,455,456,459,461,478,509,510,539,545,546,547,615,616,617,626,627],[430,432,478,502,615,617,627],[432,433,477,478,502,615,617,627],[432,434,459,478,502,615,617],[432,433,434,455,456,461,478,502,509,510,548,556,596,608,615,617,622,623,627],[432,434,449,455,461,478,502,606,615,617,627],[432,433,449,455,456,459,461,478,502,509,510,556,608,615,617,622,627],[430,432,434,444,455,460,461,478,502,547,582,591,610,615,617,627],[430,432,433,434,455,457,478,496,509,615,617,624,627],[434,717,1271],[430,433,434,454,459,474,476],[717],[717,1508],[717,1272,1508],[717,1408,1416,1508],[433,617,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1409,1410,1411,1415,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507],[430,432,433,455,461,477,478,512,597,614,617,627],[430,432,433,455,477,478,597,615,617],[430,432,433,455,477,478,615,617,627,653],[430,432,433,455,477,478,614,615,617,627],[430,454,455,457,474,478,511,519,520,525,526,527,528,529,530,534,535,536,539,540,545,546,548,549,550,551,552,553,554,555,556,559,560,562,563,564,566,567,568,570,571,573,575,576,581,584,589,590,592,593,594,595,596,615,616,617],[455,476,478,615,617,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,654,655],[430,457,478,548,556,574,596,598,599,600,601,602,603,607,609,611,612,613,615,617,624,627],[432,477,615,617],[432,478],[432,478,617],[432,478,662,664],[432,434,476,478,501,662,668],[430,434,435],[435],[434,435],[435,617],[430,434,435,489,511,617],[435,539,617,627],[433,435],[435,491],[434,435,459,474,617,624,627],[430],[430,432,434,442,449,450,451],[430,431,433,434,435,436,437,439,440,441,442,443,444,445,446,447,448,449,450,451,453,454,455,456,457,458,459,460,462,463,464,465,466,468,469,472,473,474,476,477,478,479,484,485,486,487,489,490,491,492,493,494,495,496,497,498,500,503,504,508,509,510,511,512,514,516,518,519,520,521,522,525,526,527,528,529,530,531,532,533,534,535,536,537,539,540,541,542,543,544,545,546,548,549,550,551,552,553,554,555,556,557,558,559,560,562,563,564,566,567,568,569,570,571,572,573,574,575,576,577,578,580,581,582,583,584,586,587,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,607,608,609,611,612,613,614,615,616,617,618,619,620,621,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,665,666,667,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716],[432,434,459,621,1505],[434,474,476,1505],[433,434,454,459,476],[430,431,433,627],[430,434,459,473],[430,433,454,455,459,478,544,548,615,616,621],[430,433,434,459],[430,433,434,474,476],[434],[433],[430,433,434,457,474,477],[430,433,434,455,459],[430,434,457],[430,433,457],[430,434],[430,433,434,454,458,459,474,475],[430,433,434],[430,433,434,453,454,456,458],[433,478,586],[430,433],[430,432,434,436,445,446,447,449,479,485,486],[430,432,434,436,457,487],[430,432,433,434,436,457,484,487,488],[430,432,433,434,436,457,487,488,532],[430,432,433,434,436,457,479,484,487,488],[430,432,433,434,436,457,487,493],[430,432,434,436,437,439,440,442,445,449,479],[430,432,433,434,436,440,457,495],[430,432,433,434,440,457,484,488,493,495],[430,432,433,436,447,451,457,488,493,495,531,532],[430,432,433,434,436,440,457,484,488,493,495],[430,432,433,434,436,457,493,495],[430,432,434,436,437,439,440,442,449],[430,432,436,457],[430,432,433,434,439,444,457,484],[430,432,457,458,476,557],[430,432,433,434,436,440,457,484,488,493],[430,432,439,447,451],[430,432,434,440,442,447,451,472,479,485,682],[430,432,438],[430,432,437],[432,434,447,449,456],[432,434,465],[432,434,449,464],[432,434,447,449,471],[432,434,453,465],[432,434,445,447,449,467],[432,433,434,453,456,462,463,468],[432,477,497,498,499,500,501],[430,432,434,478,511,615,617],[432,617,618],[433,617],[432,617],[617,618],[432,434,470],[432,434],[432,434,444,447],[432,434,441],[432,434,444],[432,434,441,444,445],[432,434,446,448,449],[432,434,443,445,446,447],[432,434,435,443,447,449,471,472],[432,434,442,444,448,449],[432,434,442,443,448],[432,478,521,523,615,617],[430,432,478,519,521,522,615,617],[432,447,449,451,513],[432,440,447,449,451,513],[432,434,447,515,516],[432,490,505,511,617],[430,432,490],[432,505,537,539,617,627],[433,435,504,624],[432,505,617,624,625,627],[432,433,434,474,476,507,543,617],[432,454,476],[432,433],[432,433,458,476],[432,433,475,476],[432,433,459,474,476,507,617],[432,433,459,476,507,617],[432,433,459,476,507,508,617,717],[432,447,451],[432,434,444,445],[432,434,444,447,449],[432],[483],[432,483],[482],[430,432,479,483],[430,432,481],[430,432,480,482],[432,456],[432,508],[432,476,497,663],[432,476,499],[501],[432,434,448],[432,434,447,449],[432,434,440,447,451],[430,432,434,449,451,460,495,582],[430,432,434],[430,432,434,577,688],[432,434,444,448],[430,432,434,451,459,604,621,688],[430,432,434,460,583,688],[432,434,448,449],[430,432,434,485,689,695],[430,432,434,460,485,692,695],[432,433,437,461,504,617,624,625],[432,435,437,439,459,467,504,618],[432,433,448,459,479,625,717],[432,433,459,625,717],[432,433,434,437,439,442,444,448,459,472,619,625,684,706],[432,434,437,439,459,472,625],[432,433,434,440,449,459,462,463,466,469,472,619,620,625,626],[430,432,434,439,445,449,460,583],[703],[432,713],[430,432,434,457,478,599,615,627,1401,1403,1406],[478,615,624,627,1401],[433,455,478,609,615,617,627,1399,1401],[433,717,1408,1416],[1409,1410,1411],[430,455,478,614,615,1401,1402,1405,1407],[1397,1398,1399,1400,1401,1402,1403,1404,1405,1407,1408,1412,1413,1414,1415],[717,1399],[434,474,476,1399],[617,1399,1400],[430,434,1399],[430,434,458,476],[430,433,434,454,459,476,1397,1398,1400],[65,1089,1090],[1089],[1092],[1508],[1932],[1089,1090,1091,1092,1093,1126,1127,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227],[1172],[1089,1125],[1089,1123,1125],[1089,1123,1124,1125,1172],[717,1089,1123,1124,1125,1172,1174],[1089,1123,1124,1125,1172,1176],[717,1089,1123,1124,1125,1172],[1089,1124,1125,1172],[717,1089,1124,1125,1172,1200],[717,1089,1124,1125,1172],[717,1089,1123,1125],[65,1089],[1089,1120,1123,1124],[1120,1123],[1948],[1939,1940],[1937,1938,1939,1941,1942,1946],[1938,1939],[1947],[1939],[1937,1938,1939,1942,1943,1944,1945],[1937,1938,1948],[1935,1936,1954],[1964],[2298,2320],[65,2345,2346],[351,1228,1934,2302],[353],[351,353,2302,2303,2334],[65,1228,1934,1955,1965,2286,2291,2292,2298,2299,2302,2303,2349,2352],[65,351,353,359,1228,1934,1954,2286,2288,2302,2308,2354,2471],[1228,1934,2286,2291,2292,2302,2303],[2289,2473],[353,2289,2302,2303,2473,2477],[351,2290,2291,2292,2299,2351],[65,1966,2284,2285],[2289],[2314,2318,2321,2322,2335,2336],[65,1228,1934,2286,2287,2299,2314,2339,2340,2347,2348,2353,2472,2474,2478],[65,2299,2302,2303],[65,2298,2307,2311],[351,353,377,2302,2313,2314],[1120,1228,1934,1954,2308,2310],[65,2298,2302,2303,2310,2333],[1949,1951,1953],[1228,1509,1933,1934],[403,405,406],[377],[65,2295,2298,2300,2303],[65,2298,2303,2332],[65,2291,2292],[65,377],[717,1228,1934]],"referencedMap":[[379,1],[2480,2],[1534,3],[1518,4],[1517,5],[1535,6],[1532,7],[1530,8],[1531,9],[1525,10],[1526,11],[1533,12],[1520,13],[1528,14],[1521,15],[1527,16],[1529,17],[1523,18],[1524,18],[1572,19],[1574,20],[1557,21],[1578,22],[1579,23],[1575,23],[1581,24],[1576,23],[1580,25],[1577,26],[1563,27],[1560,28],[1567,29],[1561,27],[1558,30],[1571,31],[1565,28],[1562,32],[1564,33],[2498,34],[1596,35],[1597,35],[1599,35],[1601,36],[1595,37],[1600,35],[1545,38],[1546,38],[1548,39],[1549,38],[1550,38],[1551,40],[1547,38],[1593,41],[1555,42],[1582,43],[1585,44],[1591,45],[1592,46],[1604,47],[1605,48],[1607,49],[1611,50],[1609,51],[1608,52],[1610,53],[1606,54],[1603,55],[1602,41],[1594,29],[1615,56],[1660,57],[1645,58],[1656,59],[1649,60],[1650,61],[1642,62],[1654,63],[1655,64],[1771,65],[1762,66],[1761,67],[1756,68],[1769,69],[1763,70],[1764,71],[1758,70],[1767,72],[1766,73],[1765,70],[1962,74],[2477,75],[2325,76],[2350,77],[2327,78],[2323,76],[2332,79],[2324,76],[2331,80],[2328,81],[2329,76],[2316,78],[2338,77],[2330,77],[2317,76],[2300,78],[1681,82],[1680,83],[2308,78],[2299,84],[2351,85],[2313,84],[2302,86],[2314,87],[2298,88],[405,89],[2333,90],[2349,91],[2301,78],[2339,92],[2318,93],[2340,87],[2473,87],[1807,94],[1806,95],[1805,29],[1802,96],[1798,97],[1804,98],[1799,97],[1801,99],[1797,97],[1792,100],[1796,101],[1795,102],[1791,103],[1789,100],[1800,104],[1788,105],[1787,106],[1777,107],[1782,107],[1776,107],[1781,107],[1775,108],[1950,109],[1951,110],[1953,111],[1100,112],[1102,113],[1103,114],[1098,113],[1101,112],[1097,113],[1096,115],[1114,116],[1120,117],[1111,118],[1119,78],[1112,116],[1113,119],[1106,118],[1104,120],[1118,121],[1115,120],[1117,118],[1116,120],[1105,118],[1107,122],[1109,118],[1110,118],[1108,118],[2482,123],[2485,124],[1584,125],[2491,126],[2490,127],[2484,128],[2493,129],[2494,130],[2503,131],[1980,132],[1981,132],[1982,132],[1983,132],[1984,132],[1985,132],[1986,132],[1987,132],[1988,132],[1989,132],[1990,132],[1991,132],[1992,132],[1993,132],[1994,132],[1995,132],[1996,132],[1997,132],[1998,132],[1999,132],[2000,132],[2001,132],[2002,132],[2003,132],[2004,132],[2005,132],[2006,132],[2007,132],[2008,132],[2009,132],[2010,132],[2011,132],[2012,132],[2013,132],[2014,132],[2015,132],[2016,132],[2017,132],[2018,132],[2019,132],[2020,132],[2021,132],[2022,132],[2023,132],[2024,132],[2025,132],[2026,132],[2027,132],[2028,132],[2029,132],[2030,132],[2031,132],[2032,132],[2033,132],[2034,132],[2035,132],[2036,132],[2037,132],[2038,132],[2039,132],[2040,132],[2041,132],[2042,132],[2043,132],[2044,132],[2045,132],[2046,132],[2047,132],[2048,132],[2049,132],[2050,132],[2051,132],[2052,132],[2053,132],[2054,132],[2055,132],[2056,132],[2057,132],[2058,132],[2059,132],[2060,132],[2061,132],[2062,132],[2063,132],[2064,132],[2065,132],[2066,132],[2067,132],[2068,132],[2069,132],[2070,132],[2071,132],[2072,132],[2073,132],[2074,132],[2075,132],[2076,132],[2284,133],[2077,132],[2078,132],[2079,132],[2080,132],[2081,132],[2082,132],[2083,132],[2084,132],[2085,132],[2086,132],[2087,132],[2088,132],[2089,132],[2090,132],[2091,132],[2092,132],[2093,132],[2094,132],[2095,132],[2096,132],[2097,132],[2098,132],[2099,132],[2100,132],[2101,132],[2102,132],[2103,132],[2104,132],[2105,132],[2106,132],[2107,132],[2108,132],[2109,132],[2110,132],[2111,132],[2112,132],[2113,132],[2114,132],[2115,132],[2116,132],[2117,132],[2118,132],[2119,132],[2120,132],[2121,132],[2122,132],[2123,132],[2124,132],[2125,132],[2126,132],[2127,132],[2128,132],[2129,132],[2130,132],[2131,132],[2132,132],[2133,132],[2134,132],[2135,132],[2136,132],[2137,132],[2138,132],[2139,132],[2140,132],[2141,132],[2142,132],[2143,132],[2144,132],[2145,132],[2146,132],[2147,132],[2148,132],[2149,132],[2150,132],[2151,132],[2152,132],[2153,132],[2154,132],[2155,132],[2156,132],[2157,132],[2158,132],[2159,132],[2160,132],[2161,132],[2162,132],[2163,132],[2164,132],[2165,132],[2166,132],[2167,132],[2168,132],[2169,132],[2170,132],[2171,132],[2172,132],[2173,132],[2174,132],[2175,132],[2176,132],[2177,132],[2178,132],[2179,132],[2180,132],[2181,132],[2182,132],[2183,132],[2184,132],[2185,132],[2186,132],[2187,132],[2188,132],[2189,132],[2190,132],[2191,132],[2192,132],[2193,132],[2194,132],[2195,132],[2196,132],[2197,132],[2198,132],[2199,132],[2200,132],[2201,132],[2202,132],[2203,132],[2204,132],[2205,132],[2206,132],[2207,132],[2208,132],[2209,132],[2210,132],[2211,132],[2212,132],[2213,132],[2214,132],[2215,132],[2216,132],[2217,132],[2218,132],[2219,132],[2220,132],[2221,132],[2222,132],[2223,132],[2224,132],[2225,132],[2226,132],[2227,132],[2228,132],[2229,132],[2230,132],[2231,132],[2232,132],[2233,132],[2234,132],[2235,132],[2236,132],[2237,132],[2238,132],[2239,132],[2240,132],[2241,132],[2242,132],[2243,132],[2244,132],[2245,132],[2246,132],[2247,132],[2248,132],[2249,132],[2250,132],[2251,132],[2252,132],[2253,132],[2254,132],[2255,132],[2256,132],[2257,132],[2258,132],[2259,132],[2260,132],[2261,132],[2262,132],[2263,132],[2264,132],[2265,132],[2266,132],[2267,132],[2268,132],[2269,132],[2270,132],[2271,132],[2272,132],[2273,132],[2274,132],[2275,132],[2276,132],[2277,132],[2278,132],[2279,132],[2280,132],[2281,132],[2282,132],[2283,132],[1968,134],[1969,135],[1967,136],[1970,137],[1971,138],[1972,139],[1973,140],[1974,141],[1975,142],[1976,143],[1977,144],[1978,145],[1979,146],[2504,28],[72,147],[73,147],[108,148],[109,149],[110,150],[111,151],[112,152],[113,153],[114,154],[115,155],[116,156],[117,157],[118,157],[120,158],[119,159],[121,160],[122,161],[123,162],[107,163],[124,164],[125,165],[126,166],[159,167],[127,168],[128,169],[129,170],[130,171],[131,172],[132,173],[133,174],[134,175],[135,176],[136,177],[137,177],[138,178],[140,179],[142,180],[141,181],[143,182],[144,183],[145,184],[146,185],[147,186],[148,187],[149,188],[150,189],[151,190],[152,191],[153,192],[154,193],[155,194],[156,195],[157,196],[1961,197],[374,198],[375,199],[373,78],[371,200],[372,201],[65,202],[251,78],[2506,28],[2509,203],[2511,204],[1964,205],[1963,206],[1536,207],[1932,208],[1772,209],[1808,210],[1930,211],[1012,212],[1015,213],[1016,214],[1022,215],[1020,216],[1023,217],[1024,218],[1025,215],[1026,219],[1027,220],[1028,220],[1029,220],[1030,221],[1031,218],[1032,222],[1033,223],[1019,224],[1034,221],[1035,220],[1036,220],[1037,220],[1038,220],[1039,220],[1040,220],[1041,220],[1042,220],[1043,222],[1044,220],[1048,225],[1049,219],[1050,226],[1051,220],[1052,219],[1053,227],[1045,212],[1054,228],[1046,229],[1047,230],[1055,231],[1056,232],[1057,233],[1058,233],[1059,216],[1060,234],[1062,235],[1063,220],[1064,217],[1075,219],[1065,236],[1067,219],[1066,219],[1068,237],[1121,238],[1069,239],[1070,240],[1071,241],[1072,219],[1073,219],[1074,242],[1076,243],[1009,244],[1077,245],[1078,246],[1010,247],[1008,223],[1013,248],[1014,249],[1061,250],[1089,251],[1123,252],[1172,253],[1079,221],[1128,254],[1130,255],[1131,256],[1132,257],[1133,258],[1134,259],[1135,260],[1136,261],[1137,262],[1138,263],[1139,264],[1140,265],[1141,266],[1142,267],[1143,268],[1144,269],[1145,270],[1146,271],[1147,272],[1148,273],[1149,274],[1150,275],[1151,276],[1152,277],[1153,278],[1154,279],[1155,280],[1156,281],[1157,282],[1158,283],[1159,281],[1160,284],[1161,285],[1162,286],[1163,287],[1165,288],[1164,289],[1166,290],[1129,291],[1171,120],[1167,292],[1168,293],[1169,294],[1170,295],[1080,218],[1081,218],[1018,296],[1011,221],[1082,221],[1083,221],[1878,297],[1873,298],[1879,299],[1907,299],[1905,300],[1904,300],[1908,301],[1902,299],[1880,299],[1903,300],[1898,302],[1899,299],[1901,303],[1900,298],[1906,299],[1864,304],[1909,305],[1886,306],[1927,307],[1929,308],[1862,309],[1814,29],[1815,310],[1820,311],[1818,312],[1821,313],[1816,314],[1817,315],[1921,316],[1920,317],[1826,318],[1823,29],[1824,319],[1887,320],[1883,321],[1888,322],[1892,323],[1882,324],[1891,322],[1813,325],[1812,326],[1811,327],[1837,328],[1835,328],[1839,329],[1836,328],[1838,330],[1897,331],[1895,332],[1894,333],[1896,333],[1863,298],[1911,298],[1915,298],[1918,334],[1910,335],[1919,336],[1852,337],[1841,338],[1851,339],[1847,340],[1846,341],[1853,342],[1840,343],[1842,343],[1849,344],[1843,345],[1845,346],[1848,347],[1844,348],[1850,339],[1861,349],[1859,350],[1858,351],[1860,352],[1856,353],[1857,349],[1854,354],[1855,355],[1926,356],[1924,357],[1922,358],[1923,359],[1925,360],[410,361],[411,362],[430,363],[425,364],[426,365],[427,366],[428,364],[429,364],[418,367],[417,368],[415,369],[416,370],[421,371],[422,372],[423,372],[424,372],[414,373],[420,374],[419,375],[413,376],[2295,377],[2294,378],[1634,379],[1626,380],[1625,381],[1630,382],[1627,380],[1628,383],[1629,384],[1623,385],[1622,385],[1624,386],[2502,387],[2500,388],[2501,389],[2303,78],[1004,390],[1000,391],[1002,392],[1001,393],[1003,392],[915,394],[745,395],[977,396],[804,397],[902,398],[805,399],[905,400],[830,401],[836,402],[837,403],[838,403],[835,404],[916,405],[825,406],[840,407],[844,408],[845,409],[846,407],[847,410],[911,411],[814,412],[850,413],[851,414],[817,415],[852,416],[853,417],[854,418],[811,419],[858,420],[860,421],[861,422],[862,423],[849,424],[857,425],[864,426],[865,418],[866,427],[868,428],[818,429],[869,430],[871,431],[829,432],[873,433],[874,407],[878,434],[879,435],[883,436],[888,437],[887,438],[890,439],[891,440],[892,440],[893,441],[943,442],[917,442],[918,443],[919,444],[920,443],[921,445],[922,443],[923,445],[924,442],[925,443],[926,443],[927,446],[928,447],[929,445],[930,443],[931,443],[932,448],[933,445],[934,443],[935,443],[936,443],[937,443],[938,445],[939,448],[940,445],[895,449],[896,450],[897,451],[898,452],[820,453],[899,454],[900,455],[821,456],[822,457],[903,458],[904,459],[906,460],[907,449],[908,452],[872,461],[910,462],[948,463],[942,464],[949,465],[894,466],[941,467],[909,468],[754,469],[944,470],[945,471],[947,472],[950,473],[756,474],[819,475],[770,475],[815,476],[781,477],[827,478],[797,475],[758,475],[760,476],[832,475],[812,479],[848,475],[841,475],[800,475],[788,475],[789,480],[795,481],[946,475],[742,482],[999,483],[747,484],[744,485],[912,486],[749,487],[753,488],[839,489],[750,490],[870,491],[751,492],[752,493],[914,494],[885,495],[880,482],[743,496],[773,497],[957,498],[826,499],[855,500],[958,501],[778,502],[772,503],[876,504],[959,505],[843,506],[780,507],[960,508],[975,509],[779,510],[976,511],[777,512],[768,513],[962,514],[767,515],[978,516],[794,517],[971,518],[806,519],[972,520],[973,521],[782,522],[979,523],[798,524],[771,525],[961,525],[877,526],[757,525],[759,527],[761,528],[769,529],[762,525],[981,530],[763,531],[982,532],[765,533],[764,534],[799,535],[834,536],[833,537],[783,528],[785,525],[786,538],[784,539],[787,540],[824,541],[828,542],[813,543],[823,544],[807,545],[816,546],[980,521],[859,547],[808,548],[856,549],[863,550],[913,551],[867,552],[809,552],[842,553],[998,554],[776,555],[775,556],[983,557],[766,558],[774,523],[985,558],[984,558],[995,559],[884,548],[886,523],[790,523],[791,523],[792,523],[793,560],[997,561],[964,562],[875,563],[882,564],[965,397],[966,397],[967,565],[968,566],[969,567],[970,568],[996,569],[901,570],[986,571],[987,572],[889,523],[810,573],[801,574],[963,575],[796,576],[988,577],[802,578],[803,579],[881,580],[990,581],[991,581],[989,523],[993,582],[994,582],[992,523],[720,583],[719,584],[721,584],[735,585],[736,586],[737,587],[738,585],[739,585],[728,588],[727,589],[725,590],[726,591],[731,592],[732,593],[733,593],[734,593],[724,594],[730,595],[729,596],[740,597],[723,598],[2476,599],[2310,600],[2309,78],[71,601],[330,602],[334,603],[336,604],[184,605],[198,606],[301,607],[304,608],[266,609],[274,610],[302,611],[185,612],[231,613],[303,614],[205,615],[186,616],[210,615],[199,615],[169,615],[257,617],[258,618],[254,619],[259,119],[345,620],[252,119],[346,621],[255,622],[358,623],[357,624],[261,119],[355,625],[256,78],[243,626],[244,627],[253,628],[269,629],[270,630],[260,631],[238,632],[239,633],[349,634],[352,635],[217,636],[216,637],[215,638],[361,78],[214,639],[2306,640],[366,78],[368,641],[197,642],[167,643],[324,644],[322,645],[323,645],[329,646],[337,647],[341,648],[179,649],[246,650],[237,632],[265,651],[263,652],[268,653],[241,654],[178,655],[203,656],[292,657],[170,658],[177,659],[166,607],[306,660],[316,661],[315,662],[188,663],[283,664],[289,665],[291,666],[284,667],[288,668],[290,665],[287,667],[286,665],[285,667],[226,669],[211,669],[277,670],[212,670],[172,671],[281,672],[280,673],[279,674],[278,675],[173,676],[250,677],[267,678],[249,679],[273,680],[275,681],[272,679],[206,676],[293,682],[232,683],[314,684],[235,685],[309,686],[310,687],[312,688],[313,689],[308,658],[208,690],[294,691],[317,692],[187,693],[276,694],[175,695],[234,696],[233,697],[189,698],[242,699],[240,700],[191,701],[193,702],[192,703],[194,704],[195,705],[248,78],[271,706],[228,707],[339,78],[348,708],[225,78],[343,119],[224,709],[326,710],[223,708],[350,711],[221,78],[222,78],[220,712],[219,713],[209,714],[202,631],[201,715],[247,78],[328,716],[69,717],[66,78],[307,718],[300,719],[298,720],[325,721],[338,722],[340,723],[342,724],[2307,725],[344,726],[347,727],[378,728],[351,728],[377,729],[353,730],[359,731],[360,732],[362,733],[369,734],[376,735],[370,28],[1959,736],[1956,28],[1958,737],[1827,738],[1829,739],[1830,699],[1831,29],[1832,740],[2499,741],[2320,742],[163,743],[2344,744],[2342,745],[2343,746],[2345,747],[1755,748],[1754,83],[1690,749],[1686,750],[1693,751],[1697,752],[1699,753],[1700,754],[1719,755],[1702,756],[1704,757],[1706,758],[1707,759],[1708,760],[1674,760],[1709,761],[1675,762],[1710,763],[1711,754],[1712,764],[1713,765],[1671,766],[1716,767],[1718,768],[1717,769],[1715,770],[1676,761],[1672,771],[1673,772],[1703,773],[1695,773],[1696,774],[1679,775],[1722,773],[1723,776],[1725,757],[1682,777],[1684,778],[1727,779],[1732,780],[1683,78],[1736,781],[1734,78],[1735,782],[1738,783],[1740,783],[1739,783],[1689,783],[1688,784],[1687,785],[1685,786],[1742,787],[1669,782],[1743,752],[1744,752],[1745,788],[1746,773],[1750,78],[1753,789],[1662,790],[1663,791],[1752,790],[1670,771],[1668,78],[2469,792],[2363,78],[2356,78],[2358,78],[2471,793],[2361,794],[2360,795],[2362,796],[2364,797],[2368,798],[2369,78],[2371,799],[2374,792],[2376,78],[2377,78],[2378,78],[2379,78],[2380,78],[2381,78],[2382,78],[2383,78],[2387,78],[2389,800],[2392,78],[2393,78],[2395,78],[2397,78],[2398,801],[2400,802],[2401,802],[2404,792],[2405,78],[2407,78],[2413,78],[2418,78],[2419,803],[2462,804],[2421,792],[2422,805],[2465,78],[2433,78],[2435,78],[2436,78],[2437,78],[2440,78],[2441,78],[2442,78],[2460,78],[2445,800],[2456,78],[2457,806],[2459,797],[1638,807],[1637,808],[1636,809],[1635,810],[380,811],[1544,812],[1539,813],[1540,814],[1541,814],[1542,815],[1543,815],[1538,816],[396,817],[394,818],[395,819],[383,820],[384,818],[391,821],[382,822],[387,823],[388,824],[393,825],[399,826],[398,827],[381,828],[389,829],[390,830],[385,831],[392,817],[386,832],[402,833],[403,834],[90,835],[97,836],[89,835],[104,837],[81,838],[80,839],[103,28],[98,840],[101,841],[83,842],[82,843],[78,844],[77,30],[100,845],[79,846],[84,847],[88,847],[106,848],[105,847],[92,849],[93,850],[95,851],[91,852],[94,853],[99,28],[86,854],[87,855],[96,856],[76,857],[102,858],[627,859],[461,860],[605,861],[606,862],[622,863],[610,864],[520,865],[526,866],[527,867],[528,867],[525,868],[628,869],[1017,870],[511,871],[530,872],[534,873],[535,874],[536,872],[540,875],[616,876],[539,877],[550,878],[551,879],[552,880],[545,881],[553,882],[554,883],[555,884],[556,885],[560,886],[562,887],[563,888],[564,889],[549,880],[559,890],[566,891],[567,884],[568,892],[570,893],[546,894],[571,895],[573,896],[519,897],[575,898],[576,872],[580,899],[581,900],[584,901],[590,902],[589,903],[592,904],[593,905],[594,905],[595,906],[655,907],[629,907],[630,908],[631,909],[632,908],[633,910],[634,908],[635,910],[636,907],[637,908],[657,908],[638,908],[639,911],[640,912],[658,908],[641,910],[642,908],[643,908],[644,913],[645,910],[646,908],[659,908],[647,908],[648,908],[649,908],[650,910],[660,908],[651,913],[656,908],[652,910],[598,914],[599,915],[600,916],[601,917],[548,918],[602,919],[603,920],[596,921],[624,922],[607,923],[609,924],[611,925],[612,914],[613,917],[574,926],[1272,927],[1271,928],[1229,929],[1230,930],[1231,930],[1232,929],[1233,929],[1234,929],[1235,929],[1236,929],[1240,929],[1241,929],[1242,929],[1237,929],[1238,929],[1239,929],[1243,929],[1244,929],[1245,929],[1246,929],[1247,929],[1248,929],[1249,930],[1250,930],[1251,930],[1252,929],[1253,929],[1254,929],[1255,929],[1256,929],[1257,929],[1258,929],[1259,929],[1260,929],[1261,929],[1262,929],[1263,929],[1264,929],[1265,929],[1267,929],[1266,929],[1268,929],[1269,929],[1270,929],[1273,931],[1274,931],[1275,929],[1276,929],[1277,929],[1278,929],[1279,929],[1280,929],[1281,929],[1282,929],[1283,929],[1284,929],[1285,929],[1286,929],[1287,929],[1288,929],[1289,929],[1290,929],[1291,929],[1292,929],[1293,929],[1294,929],[1295,929],[1302,929],[1303,929],[1296,929],[1297,929],[1298,929],[1299,929],[1300,929],[1301,929],[1304,929],[1305,929],[1306,929],[1307,929],[1308,929],[1309,929],[1310,929],[1311,929],[1312,929],[1314,929],[1313,929],[1315,929],[1316,929],[1317,930],[1318,930],[1319,929],[1320,929],[1327,929],[1328,929],[1325,929],[1326,929],[1331,929],[1332,929],[1329,929],[1330,929],[1333,929],[1335,929],[1334,929],[1336,929],[1337,929],[1338,929],[1321,929],[1322,929],[1323,929],[1339,929],[1324,929],[1340,929],[1341,929],[1342,929],[1343,929],[1344,929],[1345,929],[1346,929],[1347,929],[1348,929],[1349,929],[1350,929],[1351,929],[1352,929],[1353,930],[1354,929],[1355,929],[1356,929],[1357,929],[1358,929],[1359,929],[1360,929],[1361,929],[1362,929],[1363,929],[1364,929],[1365,929],[1366,929],[1367,929],[1368,929],[1369,929],[1370,929],[1371,929],[1372,929],[1373,929],[1374,929],[1375,929],[1376,929],[1377,929],[1378,929],[1379,929],[1380,929],[1381,929],[1382,929],[1383,929],[1384,929],[1385,929],[1387,929],[1386,929],[1388,929],[1394,929],[1392,929],[1393,929],[1389,930],[1390,930],[1391,930],[1395,929],[1396,929],[1418,930],[1419,930],[1420,929],[1417,932],[1421,929],[1422,929],[1423,929],[1424,929],[1425,929],[1426,929],[1427,929],[1428,929],[1429,929],[1430,929],[1431,929],[1432,929],[1433,929],[1434,929],[1435,929],[1436,929],[1437,929],[1438,930],[1439,930],[1440,929],[1441,929],[1442,929],[1443,929],[1444,929],[1445,929],[1446,929],[1447,929],[1467,929],[1468,929],[1448,929],[1449,929],[1450,929],[1451,929],[1452,929],[1453,929],[1454,929],[1455,929],[1456,929],[1457,929],[1458,929],[1459,929],[1460,929],[1461,929],[1462,929],[1463,929],[1464,929],[1465,929],[1466,929],[1469,929],[1470,929],[1471,929],[1473,929],[1474,929],[1475,929],[1476,929],[1472,929],[1477,929],[1478,929],[1479,929],[1480,929],[1481,929],[1482,929],[1483,929],[1484,929],[1485,929],[1486,929],[1489,929],[1490,929],[1488,929],[1487,929],[1491,929],[1492,929],[1493,929],[1494,929],[1495,929],[1496,929],[1497,929],[1498,929],[1499,929],[1409,932],[1500,932],[1501,932],[1411,932],[1410,932],[1502,930],[1503,930],[1504,930],[1508,933],[615,934],[666,935],[654,936],[667,937],[597,938],[653,939],[614,940],[478,941],[661,942],[586,943],[665,944],[669,945],[436,946],[547,947],[437,947],[467,948],[542,948],[618,949],[490,950],[470,947],[441,947],[443,948],[522,947],[537,951],[541,947],[531,947],[504,947],[497,947],[498,952],[492,953],[625,954],[662,947],[432,955],[452,956],[717,957],[1507,958],[1506,959],[1505,960],[455,961],[474,962],[617,963],[457,964],[477,965],[453,966],[454,967],[529,968],[456,969],[458,970],[434,967],[572,971],[475,972],[476,973],[491,974],[459,975],[587,976],[460,977],[473,966],[487,978],[676,979],[489,980],[557,981],[677,982],[494,983],[495,984],[578,985],[678,986],[533,987],[496,988],[680,989],[450,990],[488,991],[493,992],[681,993],[679,994],[485,995],[683,996],[439,997],[695,998],[462,999],[463,999],[466,1000],[465,1001],[699,1002],[698,1003],[468,1004],[469,1005],[502,1006],[512,1007],[608,1008],[701,1009],[702,1010],[503,1011],[471,1012],[440,1013],[682,1013],[579,1014],[444,1013],[442,1015],[445,1016],[479,1017],[446,1013],[486,1018],[448,1019],[706,1020],[447,1021],[449,1022],[472,1002],[524,1023],[523,1024],[513,1016],[515,1013],[516,1025],[514,1026],[517,1027],[506,1028],[518,1029],[538,1030],[505,1031],[623,1032],[544,1033],[561,1034],[507,1035],[558,1036],[565,1037],[543,1038],[569,1039],[509,1040],[480,1041],[711,1042],[451,1043],[481,1044],[712,1043],[464,1043],[709,1045],[532,1046],[707,1047],[710,1045],[484,1048],[708,1047],[482,1049],[483,1050],[508,1051],[700,1052],[585,1035],[588,1044],[499,1044],[500,1044],[663,1044],[664,1053],[501,1054],[668,1055],[694,1056],[685,1057],[577,1058],[583,1059],[686,861],[687,861],[688,1060],[689,1061],[690,1062],[691,1063],[692,1064],[693,1057],[604,1065],[696,1066],[697,1067],[591,1044],[510,1068],[619,1069],[684,1070],[626,1071],[716,1072],[620,1073],[621,1074],[582,1075],[704,1076],[705,1076],[703,1044],[714,1077],[715,1077],[713,1044],[1407,1078],[1403,1079],[1402,1079],[1404,1080],[1405,1080],[1413,1081],[1412,1082],[1414,1083],[1416,1084],[1408,1085],[1415,1086],[1401,1087],[1400,1088],[1398,1089],[1399,1090],[1091,1091],[1092,1092],[1093,1093],[1509,1094],[1933,1095],[1228,1096],[1200,1097],[1126,1098],[1127,1099],[1173,1100],[1175,1101],[1177,1102],[1178,1100],[1179,1100],[1180,1100],[1181,1098],[1182,1098],[1183,1099],[1184,1098],[1185,1100],[1186,1098],[1188,1100],[1187,1098],[1189,1100],[1190,1100],[1191,1100],[1192,1100],[1193,1100],[1194,1100],[1195,1103],[1196,1104],[1197,1100],[1198,1100],[1199,1100],[1201,1105],[1202,1106],[1203,1100],[1204,1099],[1205,1103],[1206,1103],[1207,1100],[1208,1100],[1209,1100],[1210,1100],[1211,1106],[1212,1100],[1213,1100],[1214,1100],[1215,1100],[1216,1100],[1217,1104],[1218,1100],[1219,1100],[1220,1100],[1221,1106],[1223,1100],[1222,1100],[1176,1099],[1174,1107],[1224,1107],[1225,1099],[1226,1106],[1090,1108],[1125,1109],[1124,1110],[1949,1111],[1941,1112],[1947,1113],[1942,1114],[1945,1111],[1948,1115],[1940,1116],[1946,1117],[1939,1118],[1955,1119],[1965,1120],[2321,1121],[2347,1122],[2348,1123],[2322,1124],[2335,1125],[2353,1126],[2472,1127],[2336,1128],[2474,1129],[2478,1130],[2352,1131],[1966,78],[2286,1132],[2290,1133],[2337,1134],[2479,1135],[2304,1136],[2312,1137],[2315,1138],[2311,1139],[2334,1140],[1954,1141],[1934,1142],[407,1143]],"exportedModulesMap":[[379,1],[2480,1144],[1534,3],[1518,4],[1517,5],[1535,6],[1532,7],[1530,8],[1531,9],[1525,10],[1526,11],[1533,12],[1520,13],[1528,14],[1521,15],[1527,16],[1529,17],[1523,18],[1524,18],[1572,19],[1574,20],[1557,21],[1578,22],[1579,23],[1575,23],[1581,24],[1576,23],[1580,25],[1577,26],[1563,27],[1560,28],[1567,29],[1561,27],[1558,30],[1571,31],[1565,28],[1562,32],[1564,33],[2498,34],[1596,35],[1597,35],[1599,35],[1601,36],[1595,37],[1600,35],[1545,38],[1546,38],[1548,39],[1549,38],[1550,38],[1551,40],[1547,38],[1593,41],[1555,42],[1582,43],[1585,44],[1591,45],[1592,46],[1604,47],[1605,48],[1607,49],[1611,50],[1609,51],[1608,52],[1610,53],[1606,54],[1603,55],[1602,41],[1594,29],[1615,56],[1660,57],[1645,58],[1656,59],[1649,60],[1650,61],[1642,62],[1654,63],[1655,64],[1771,65],[1762,66],[1761,67],[1756,68],[1769,69],[1763,70],[1764,71],[1758,70],[1767,72],[1766,73],[1765,70],[1962,74],[2477,75],[2325,76],[2350,77],[2327,78],[2323,76],[2332,79],[2324,76],[2331,80],[2328,81],[2329,76],[2316,78],[2338,77],[2330,77],[2317,76],[2300,78],[1681,82],[1680,83],[2308,78],[2299,84],[2351,85],[2313,84],[2302,1145],[2314,87],[2298,88],[405,89],[2333,1146],[2349,91],[2301,78],[2339,92],[2318,93],[2340,87],[2473,87],[1807,94],[1806,95],[1805,29],[1802,96],[1798,97],[1804,98],[1799,97],[1801,99],[1797,97],[1792,100],[1796,101],[1795,102],[1791,103],[1789,100],[1800,104],[1788,105],[1787,106],[1777,107],[1782,107],[1776,107],[1781,107],[1775,108],[1950,109],[1951,110],[1953,111],[1100,112],[1102,113],[1103,114],[1098,113],[1101,112],[1097,113],[1096,115],[1114,116],[1120,117],[1111,118],[1119,78],[1112,116],[1113,119],[1106,118],[1104,120],[1118,121],[1115,120],[1117,118],[1116,120],[1105,118],[1107,122],[1109,118],[1110,118],[1108,118],[2482,123],[2485,124],[1584,125],[2491,126],[2490,127],[2484,128],[2493,129],[2494,130],[2503,131],[1980,132],[1981,132],[1982,132],[1983,132],[1984,132],[1985,132],[1986,132],[1987,132],[1988,132],[1989,132],[1990,132],[1991,132],[1992,132],[1993,132],[1994,132],[1995,132],[1996,132],[1997,132],[1998,132],[1999,132],[2000,132],[2001,132],[2002,132],[2003,132],[2004,132],[2005,132],[2006,132],[2007,132],[2008,132],[2009,132],[2010,132],[2011,132],[2012,132],[2013,132],[2014,132],[2015,132],[2016,132],[2017,132],[2018,132],[2019,132],[2020,132],[2021,132],[2022,132],[2023,132],[2024,132],[2025,132],[2026,132],[2027,132],[2028,132],[2029,132],[2030,132],[2031,132],[2032,132],[2033,132],[2034,132],[2035,132],[2036,132],[2037,132],[2038,132],[2039,132],[2040,132],[2041,132],[2042,132],[2043,132],[2044,132],[2045,132],[2046,132],[2047,132],[2048,132],[2049,132],[2050,132],[2051,132],[2052,132],[2053,132],[2054,132],[2055,132],[2056,132],[2057,132],[2058,132],[2059,132],[2060,132],[2061,132],[2062,132],[2063,132],[2064,132],[2065,132],[2066,132],[2067,132],[2068,132],[2069,132],[2070,132],[2071,132],[2072,132],[2073,132],[2074,132],[2075,132],[2076,132],[2284,133],[2077,132],[2078,132],[2079,132],[2080,132],[2081,132],[2082,132],[2083,132],[2084,132],[2085,132],[2086,132],[2087,132],[2088,132],[2089,132],[2090,132],[2091,132],[2092,132],[2093,132],[2094,132],[2095,132],[2096,132],[2097,132],[2098,132],[2099,132],[2100,132],[2101,132],[2102,132],[2103,132],[2104,132],[2105,132],[2106,132],[2107,132],[2108,132],[2109,132],[2110,132],[2111,132],[2112,132],[2113,132],[2114,132],[2115,132],[2116,132],[2117,132],[2118,132],[2119,132],[2120,132],[2121,132],[2122,132],[2123,132],[2124,132],[2125,132],[2126,132],[2127,132],[2128,132],[2129,132],[2130,132],[2131,132],[2132,132],[2133,132],[2134,132],[2135,132],[2136,132],[2137,132],[2138,132],[2139,132],[2140,132],[2141,132],[2142,132],[2143,132],[2144,132],[2145,132],[2146,132],[2147,132],[2148,132],[2149,132],[2150,132],[2151,132],[2152,132],[2153,132],[2154,132],[2155,132],[2156,132],[2157,132],[2158,132],[2159,132],[2160,132],[2161,132],[2162,132],[2163,132],[2164,132],[2165,132],[2166,132],[2167,132],[2168,132],[2169,132],[2170,132],[2171,132],[2172,132],[2173,132],[2174,132],[2175,132],[2176,132],[2177,132],[2178,132],[2179,132],[2180,132],[2181,132],[2182,132],[2183,132],[2184,132],[2185,132],[2186,132],[2187,132],[2188,132],[2189,132],[2190,132],[2191,132],[2192,132],[2193,132],[2194,132],[2195,132],[2196,132],[2197,132],[2198,132],[2199,132],[2200,132],[2201,132],[2202,132],[2203,132],[2204,132],[2205,132],[2206,132],[2207,132],[2208,132],[2209,132],[2210,132],[2211,132],[2212,132],[2213,132],[2214,132],[2215,132],[2216,132],[2217,132],[2218,132],[2219,132],[2220,132],[2221,132],[2222,132],[2223,132],[2224,132],[2225,132],[2226,132],[2227,132],[2228,132],[2229,132],[2230,132],[2231,132],[2232,132],[2233,132],[2234,132],[2235,132],[2236,132],[2237,132],[2238,132],[2239,132],[2240,132],[2241,132],[2242,132],[2243,132],[2244,132],[2245,132],[2246,132],[2247,132],[2248,132],[2249,132],[2250,132],[2251,132],[2252,132],[2253,132],[2254,132],[2255,132],[2256,132],[2257,132],[2258,132],[2259,132],[2260,132],[2261,132],[2262,132],[2263,132],[2264,132],[2265,132],[2266,132],[2267,132],[2268,132],[2269,132],[2270,132],[2271,132],[2272,132],[2273,132],[2274,132],[2275,132],[2276,132],[2277,132],[2278,132],[2279,132],[2280,132],[2281,132],[2282,132],[2283,132],[1968,134],[1969,135],[1967,136],[1970,137],[1971,138],[1972,139],[1973,140],[1974,141],[1975,142],[1976,143],[1977,144],[1978,145],[1979,146],[2504,28],[72,147],[73,147],[108,148],[109,149],[110,150],[111,151],[112,152],[113,153],[114,154],[115,155],[116,156],[117,157],[118,157],[120,158],[119,159],[121,160],[122,161],[123,162],[107,163],[124,164],[125,165],[126,166],[159,167],[127,168],[128,169],[129,170],[130,171],[131,172],[132,173],[133,174],[134,175],[135,176],[136,177],[137,177],[138,178],[140,179],[142,180],[141,181],[143,182],[144,183],[145,184],[146,185],[147,186],[148,187],[149,188],[150,189],[151,190],[152,191],[153,192],[154,193],[155,194],[156,195],[157,196],[1961,197],[374,198],[375,199],[373,78],[371,200],[372,201],[65,202],[251,78],[2506,28],[2509,203],[2511,204],[1964,205],[1963,206],[1536,207],[1932,208],[1772,209],[1808,210],[1930,211],[1012,212],[1015,213],[1016,214],[1022,215],[1020,216],[1023,217],[1024,218],[1025,215],[1026,219],[1027,220],[1028,220],[1029,220],[1030,221],[1031,218],[1032,222],[1033,223],[1019,224],[1034,221],[1035,220],[1036,220],[1037,220],[1038,220],[1039,220],[1040,220],[1041,220],[1042,220],[1043,222],[1044,220],[1048,225],[1049,219],[1050,226],[1051,220],[1052,219],[1053,227],[1045,212],[1054,228],[1046,229],[1047,230],[1055,231],[1056,232],[1057,233],[1058,233],[1059,216],[1060,234],[1062,235],[1063,220],[1064,217],[1075,219],[1065,236],[1067,219],[1066,219],[1068,237],[1121,238],[1069,239],[1070,240],[1071,241],[1072,219],[1073,219],[1074,242],[1076,243],[1009,244],[1077,245],[1078,246],[1010,247],[1008,223],[1013,248],[1014,249],[1061,250],[1089,251],[1123,252],[1172,253],[1079,221],[1128,254],[1130,255],[1131,256],[1132,257],[1133,258],[1134,259],[1135,260],[1136,261],[1137,262],[1138,263],[1139,264],[1140,265],[1141,266],[1142,267],[1143,268],[1144,269],[1145,270],[1146,271],[1147,272],[1148,273],[1149,274],[1150,275],[1151,276],[1152,277],[1153,278],[1154,279],[1155,280],[1156,281],[1157,282],[1158,283],[1159,281],[1160,284],[1161,285],[1162,286],[1163,287],[1165,288],[1164,289],[1166,290],[1129,291],[1171,120],[1167,292],[1168,293],[1169,294],[1170,295],[1080,218],[1081,218],[1018,296],[1011,221],[1082,221],[1083,221],[1878,297],[1873,298],[1879,299],[1907,299],[1905,300],[1904,300],[1908,301],[1902,299],[1880,299],[1903,300],[1898,302],[1899,299],[1901,303],[1900,298],[1906,299],[1864,304],[1909,305],[1886,306],[1927,307],[1929,308],[1862,309],[1814,29],[1815,310],[1820,311],[1818,312],[1821,313],[1816,314],[1817,315],[1921,316],[1920,317],[1826,318],[1823,29],[1824,319],[1887,320],[1883,321],[1888,322],[1892,323],[1882,324],[1891,322],[1813,325],[1812,326],[1811,327],[1837,328],[1835,328],[1839,329],[1836,328],[1838,330],[1897,331],[1895,332],[1894,333],[1896,333],[1863,298],[1911,298],[1915,298],[1918,334],[1910,335],[1919,336],[1852,337],[1841,338],[1851,339],[1847,340],[1846,341],[1853,342],[1840,343],[1842,343],[1849,344],[1843,345],[1845,346],[1848,347],[1844,348],[1850,339],[1861,349],[1859,350],[1858,351],[1860,352],[1856,353],[1857,349],[1854,354],[1855,355],[1926,356],[1924,357],[1922,358],[1923,359],[1925,360],[410,361],[411,362],[430,363],[425,364],[426,365],[427,366],[428,364],[429,364],[418,367],[417,368],[415,369],[416,370],[421,371],[422,372],[423,372],[424,372],[414,373],[420,374],[419,375],[413,376],[2295,377],[2294,378],[1634,379],[1626,380],[1625,381],[1630,382],[1627,380],[1628,383],[1629,384],[1623,385],[1622,385],[1624,386],[2502,387],[2500,388],[2501,389],[2303,78],[1004,390],[1000,391],[1002,392],[1001,393],[1003,392],[915,394],[745,395],[977,396],[804,397],[902,398],[805,399],[905,400],[830,401],[836,402],[837,403],[838,403],[835,404],[916,405],[825,406],[840,407],[844,408],[845,409],[846,407],[847,410],[911,411],[814,412],[850,413],[851,414],[817,415],[852,416],[853,417],[854,418],[811,419],[858,420],[860,421],[861,422],[862,423],[849,424],[857,425],[864,426],[865,418],[866,427],[868,428],[818,429],[869,430],[871,431],[829,432],[873,433],[874,407],[878,434],[879,435],[883,436],[888,437],[887,438],[890,439],[891,440],[892,440],[893,441],[943,442],[917,442],[918,443],[919,444],[920,443],[921,445],[922,443],[923,445],[924,442],[925,443],[926,443],[927,446],[928,447],[929,445],[930,443],[931,443],[932,448],[933,445],[934,443],[935,443],[936,443],[937,443],[938,445],[939,448],[940,445],[895,449],[896,450],[897,451],[898,452],[820,453],[899,454],[900,455],[821,456],[822,457],[903,458],[904,459],[906,460],[907,449],[908,452],[872,461],[910,462],[948,463],[942,464],[949,465],[894,466],[941,467],[909,468],[754,469],[944,470],[945,471],[947,472],[950,473],[756,474],[819,475],[770,475],[815,476],[781,477],[827,478],[797,475],[758,475],[760,476],[832,475],[812,479],[848,475],[841,475],[800,475],[788,475],[789,480],[795,481],[946,475],[742,482],[999,483],[747,484],[744,485],[912,486],[749,487],[753,488],[839,489],[750,490],[870,491],[751,492],[752,493],[914,494],[885,495],[880,482],[743,496],[773,497],[957,498],[826,499],[855,500],[958,501],[778,502],[772,503],[876,504],[959,505],[843,506],[780,507],[960,508],[975,509],[779,510],[976,511],[777,512],[768,513],[962,514],[767,515],[978,516],[794,517],[971,518],[806,519],[972,520],[973,521],[782,522],[979,523],[798,524],[771,525],[961,525],[877,526],[757,525],[759,527],[761,528],[769,529],[762,525],[981,530],[763,531],[982,532],[765,533],[764,534],[799,535],[834,536],[833,537],[783,528],[785,525],[786,538],[784,539],[787,540],[824,541],[828,542],[813,543],[823,544],[807,545],[816,546],[980,521],[859,547],[808,548],[856,549],[863,550],[913,551],[867,552],[809,552],[842,553],[998,554],[776,555],[775,556],[983,557],[766,558],[774,523],[985,558],[984,558],[995,559],[884,548],[886,523],[790,523],[791,523],[792,523],[793,560],[997,561],[964,562],[875,563],[882,564],[965,397],[966,397],[967,565],[968,566],[969,567],[970,568],[996,569],[901,570],[986,571],[987,572],[889,523],[810,573],[801,574],[963,575],[796,576],[988,577],[802,578],[803,579],[881,580],[990,581],[991,581],[989,523],[993,582],[994,582],[992,523],[720,583],[719,584],[721,584],[735,585],[736,586],[737,587],[738,585],[739,585],[728,588],[727,589],[725,590],[726,591],[731,592],[732,593],[733,593],[734,593],[724,594],[730,595],[729,596],[740,597],[723,598],[2476,599],[2310,600],[2309,78],[71,601],[330,602],[334,603],[336,604],[184,605],[198,606],[301,607],[304,608],[266,609],[274,610],[302,611],[185,612],[231,613],[303,614],[205,615],[186,616],[210,615],[199,615],[169,615],[257,617],[258,618],[254,619],[259,119],[345,620],[252,119],[346,621],[255,622],[358,623],[357,624],[261,119],[355,625],[256,78],[243,626],[244,627],[253,628],[269,629],[270,630],[260,631],[238,632],[239,633],[349,634],[352,635],[217,636],[216,637],[215,638],[361,78],[214,639],[2306,640],[366,78],[368,641],[197,642],[167,643],[324,644],[322,645],[323,645],[329,646],[337,647],[341,648],[179,649],[246,650],[237,632],[265,651],[263,652],[268,653],[241,654],[178,655],[203,656],[292,657],[170,658],[177,659],[166,607],[306,660],[316,661],[315,662],[188,663],[283,664],[289,665],[291,666],[284,667],[288,668],[290,665],[287,667],[286,665],[285,667],[226,669],[211,669],[277,670],[212,670],[172,671],[281,672],[280,673],[279,674],[278,675],[173,676],[250,677],[267,678],[249,679],[273,680],[275,681],[272,679],[206,676],[293,682],[232,683],[314,684],[235,685],[309,686],[310,687],[312,688],[313,689],[308,658],[208,690],[294,691],[317,692],[187,693],[276,694],[175,695],[234,696],[233,697],[189,698],[242,699],[240,700],[191,701],[193,702],[192,703],[194,704],[195,705],[248,78],[271,706],[228,707],[339,78],[348,708],[225,78],[343,119],[224,709],[326,710],[223,708],[350,711],[221,78],[222,78],[220,712],[219,713],[209,714],[202,631],[201,715],[247,78],[328,716],[69,717],[66,78],[307,718],[300,719],[298,720],[325,721],[338,722],[340,723],[342,724],[2307,725],[344,726],[347,727],[378,728],[351,728],[377,729],[353,730],[359,731],[360,732],[362,733],[369,734],[376,735],[370,28],[1959,736],[1956,28],[1958,737],[1827,738],[1829,739],[1830,699],[1831,29],[1832,740],[2499,741],[2320,742],[163,743],[2344,744],[2342,745],[2343,746],[2345,747],[1755,748],[1754,83],[1690,749],[1686,750],[1693,751],[1697,752],[1699,753],[1700,754],[1719,755],[1702,756],[1704,757],[1706,758],[1707,759],[1708,760],[1674,760],[1709,761],[1675,762],[1710,763],[1711,754],[1712,764],[1713,765],[1671,766],[1716,767],[1718,768],[1717,769],[1715,770],[1676,761],[1672,771],[1673,772],[1703,773],[1695,773],[1696,774],[1679,775],[1722,773],[1723,776],[1725,757],[1682,777],[1684,778],[1727,779],[1732,780],[1683,78],[1736,781],[1734,78],[1735,782],[1738,783],[1740,783],[1739,783],[1689,783],[1688,784],[1687,785],[1685,786],[1742,787],[1669,782],[1743,752],[1744,752],[1745,788],[1746,773],[1750,78],[1753,789],[1662,790],[1663,791],[1752,790],[1670,771],[1668,78],[2469,792],[2363,78],[2356,78],[2358,78],[2471,793],[2361,794],[2360,795],[2362,796],[2364,797],[2368,798],[2369,78],[2371,799],[2374,792],[2376,78],[2377,78],[2378,78],[2379,78],[2380,78],[2381,78],[2382,78],[2383,78],[2387,78],[2389,800],[2392,78],[2393,78],[2395,78],[2397,78],[2398,801],[2400,802],[2401,802],[2404,792],[2405,78],[2407,78],[2413,78],[2418,78],[2419,803],[2462,804],[2421,792],[2422,805],[2465,78],[2433,78],[2435,78],[2436,78],[2437,78],[2440,78],[2441,78],[2442,78],[2460,78],[2445,800],[2456,78],[2457,806],[2459,797],[1638,807],[1637,808],[1636,809],[1635,810],[380,811],[1544,812],[1539,813],[1540,814],[1541,814],[1542,815],[1543,815],[1538,816],[396,817],[394,818],[395,819],[383,820],[384,818],[391,821],[382,822],[387,823],[388,824],[393,825],[399,826],[398,827],[381,828],[389,829],[390,830],[385,831],[392,817],[386,832],[402,833],[403,834],[90,835],[97,836],[89,835],[104,837],[81,838],[80,839],[103,28],[98,840],[101,841],[83,842],[82,843],[78,844],[77,30],[100,845],[79,846],[84,847],[88,847],[106,848],[105,847],[92,849],[93,850],[95,851],[91,852],[94,853],[99,28],[86,854],[87,855],[96,856],[76,857],[102,858],[627,859],[461,860],[605,861],[606,862],[622,863],[610,864],[520,865],[526,866],[527,867],[528,867],[525,868],[628,869],[1017,870],[511,871],[530,872],[534,873],[535,874],[536,872],[540,875],[616,876],[539,877],[550,878],[551,879],[552,880],[545,881],[553,882],[554,883],[555,884],[556,885],[560,886],[562,887],[563,888],[564,889],[549,880],[559,890],[566,891],[567,884],[568,892],[570,893],[546,894],[571,895],[573,896],[519,897],[575,898],[576,872],[580,899],[581,900],[584,901],[590,902],[589,903],[592,904],[593,905],[594,905],[595,906],[655,907],[629,907],[630,908],[631,909],[632,908],[633,910],[634,908],[635,910],[636,907],[637,908],[657,908],[638,908],[639,911],[640,912],[658,908],[641,910],[642,908],[643,908],[644,913],[645,910],[646,908],[659,908],[647,908],[648,908],[649,908],[650,910],[660,908],[651,913],[656,908],[652,910],[598,914],[599,915],[600,916],[601,917],[548,918],[602,919],[603,920],[596,921],[624,922],[607,923],[609,924],[611,925],[612,914],[613,917],[574,926],[1272,927],[1271,928],[1229,929],[1230,930],[1231,930],[1232,929],[1233,929],[1234,929],[1235,929],[1236,929],[1240,929],[1241,929],[1242,929],[1237,929],[1238,929],[1239,929],[1243,929],[1244,929],[1245,929],[1246,929],[1247,929],[1248,929],[1249,930],[1250,930],[1251,930],[1252,929],[1253,929],[1254,929],[1255,929],[1256,929],[1257,929],[1258,929],[1259,929],[1260,929],[1261,929],[1262,929],[1263,929],[1264,929],[1265,929],[1267,929],[1266,929],[1268,929],[1269,929],[1270,929],[1273,931],[1274,931],[1275,929],[1276,929],[1277,929],[1278,929],[1279,929],[1280,929],[1281,929],[1282,929],[1283,929],[1284,929],[1285,929],[1286,929],[1287,929],[1288,929],[1289,929],[1290,929],[1291,929],[1292,929],[1293,929],[1294,929],[1295,929],[1302,929],[1303,929],[1296,929],[1297,929],[1298,929],[1299,929],[1300,929],[1301,929],[1304,929],[1305,929],[1306,929],[1307,929],[1308,929],[1309,929],[1310,929],[1311,929],[1312,929],[1314,929],[1313,929],[1315,929],[1316,929],[1317,930],[1318,930],[1319,929],[1320,929],[1327,929],[1328,929],[1325,929],[1326,929],[1331,929],[1332,929],[1329,929],[1330,929],[1333,929],[1335,929],[1334,929],[1336,929],[1337,929],[1338,929],[1321,929],[1322,929],[1323,929],[1339,929],[1324,929],[1340,929],[1341,929],[1342,929],[1343,929],[1344,929],[1345,929],[1346,929],[1347,929],[1348,929],[1349,929],[1350,929],[1351,929],[1352,929],[1353,930],[1354,929],[1355,929],[1356,929],[1357,929],[1358,929],[1359,929],[1360,929],[1361,929],[1362,929],[1363,929],[1364,929],[1365,929],[1366,929],[1367,929],[1368,929],[1369,929],[1370,929],[1371,929],[1372,929],[1373,929],[1374,929],[1375,929],[1376,929],[1377,929],[1378,929],[1379,929],[1380,929],[1381,929],[1382,929],[1383,929],[1384,929],[1385,929],[1387,929],[1386,929],[1388,929],[1394,929],[1392,929],[1393,929],[1389,930],[1390,930],[1391,930],[1395,929],[1396,929],[1418,930],[1419,930],[1420,929],[1417,932],[1421,929],[1422,929],[1423,929],[1424,929],[1425,929],[1426,929],[1427,929],[1428,929],[1429,929],[1430,929],[1431,929],[1432,929],[1433,929],[1434,929],[1435,929],[1436,929],[1437,929],[1438,930],[1439,930],[1440,929],[1441,929],[1442,929],[1443,929],[1444,929],[1445,929],[1446,929],[1447,929],[1467,929],[1468,929],[1448,929],[1449,929],[1450,929],[1451,929],[1452,929],[1453,929],[1454,929],[1455,929],[1456,929],[1457,929],[1458,929],[1459,929],[1460,929],[1461,929],[1462,929],[1463,929],[1464,929],[1465,929],[1466,929],[1469,929],[1470,929],[1471,929],[1473,929],[1474,929],[1475,929],[1476,929],[1472,929],[1477,929],[1478,929],[1479,929],[1480,929],[1481,929],[1482,929],[1483,929],[1484,929],[1485,929],[1486,929],[1489,929],[1490,929],[1488,929],[1487,929],[1491,929],[1492,929],[1493,929],[1494,929],[1495,929],[1496,929],[1497,929],[1498,929],[1499,929],[1409,932],[1500,932],[1501,932],[1411,932],[1410,932],[1502,930],[1503,930],[1504,930],[1508,933],[615,934],[666,935],[654,936],[667,937],[597,938],[653,939],[614,940],[478,941],[661,942],[586,943],[665,944],[669,945],[436,946],[547,947],[437,947],[467,948],[542,948],[618,949],[490,950],[470,947],[441,947],[443,948],[522,947],[537,951],[541,947],[531,947],[504,947],[497,947],[498,952],[492,953],[625,954],[662,947],[432,955],[452,956],[717,957],[1507,958],[1506,959],[1505,960],[455,961],[474,962],[617,963],[457,964],[477,965],[453,966],[454,967],[529,968],[456,969],[458,970],[434,967],[572,971],[475,972],[476,973],[491,974],[459,975],[587,976],[460,977],[473,966],[487,978],[676,979],[489,980],[557,981],[677,982],[494,983],[495,984],[578,985],[678,986],[533,987],[496,988],[680,989],[450,990],[488,991],[493,992],[681,993],[679,994],[485,995],[683,996],[439,997],[695,998],[462,999],[463,999],[466,1000],[465,1001],[699,1002],[698,1003],[468,1004],[469,1005],[502,1006],[512,1007],[608,1008],[701,1009],[702,1010],[503,1011],[471,1012],[440,1013],[682,1013],[579,1014],[444,1013],[442,1015],[445,1016],[479,1017],[446,1013],[486,1018],[448,1019],[706,1020],[447,1021],[449,1022],[472,1002],[524,1023],[523,1024],[513,1016],[515,1013],[516,1025],[514,1026],[517,1027],[506,1028],[518,1029],[538,1030],[505,1031],[623,1032],[544,1033],[561,1034],[507,1035],[558,1036],[565,1037],[543,1038],[569,1039],[509,1040],[480,1041],[711,1042],[451,1043],[481,1044],[712,1043],[464,1043],[709,1045],[532,1046],[707,1047],[710,1045],[484,1048],[708,1047],[482,1049],[483,1050],[508,1051],[700,1052],[585,1035],[588,1044],[499,1044],[500,1044],[663,1044],[664,1053],[501,1054],[668,1055],[694,1056],[685,1057],[577,1058],[583,1059],[686,861],[687,861],[688,1060],[689,1061],[690,1062],[691,1063],[692,1064],[693,1057],[604,1065],[696,1066],[697,1067],[591,1044],[510,1068],[619,1069],[684,1070],[626,1071],[716,1072],[620,1073],[621,1074],[582,1075],[704,1076],[705,1076],[703,1044],[714,1077],[715,1077],[713,1044],[1407,1078],[1403,1079],[1402,1079],[1404,1080],[1405,1080],[1413,1081],[1412,1082],[1414,1083],[1416,1084],[1408,1085],[1415,1086],[1401,1087],[1400,1088],[1398,1089],[1399,1090],[1091,1091],[1092,1092],[1093,1093],[1509,1094],[1933,1095],[1228,1096],[1200,1097],[1126,1098],[1127,1099],[1173,1100],[1175,1101],[1177,1102],[1178,1100],[1179,1100],[1180,1100],[1181,1098],[1182,1098],[1183,1099],[1184,1098],[1185,1100],[1186,1098],[1188,1100],[1187,1098],[1189,1100],[1190,1100],[1191,1100],[1192,1100],[1193,1100],[1194,1100],[1195,1103],[1196,1104],[1197,1100],[1198,1100],[1199,1100],[1201,1105],[1202,1106],[1203,1100],[1204,1099],[1205,1103],[1206,1103],[1207,1100],[1208,1100],[1209,1100],[1210,1100],[1211,1106],[1212,1100],[1213,1100],[1214,1100],[1215,1100],[1216,1100],[1217,1104],[1218,1100],[1219,1100],[1220,1100],[1221,1106],[1223,1100],[1222,1100],[1176,1099],[1174,1107],[1224,1107],[1225,1099],[1226,1106],[1090,1108],[1125,1109],[1124,1110],[1949,1111],[1941,1112],[1947,1113],[1942,1114],[1945,1111],[1948,1115],[1940,1116],[1946,1117],[1939,1118],[2321,78],[2347,78],[2348,78],[2322,78],[2335,78],[2353,78],[2472,78],[2336,78],[2474,78],[2478,78],[2352,1147],[1966,78],[2286,78],[2337,78],[2479,78],[2304,78],[2312,78],[2315,1148],[2311,78],[2334,78],[1934,1149]],"semanticDiagnosticsPerFile":[379,2480,1510,1534,1514,1515,1518,1517,1516,1512,1535,1513,1532,1530,1519,1531,1525,1526,1533,1520,1528,1521,1527,1529,1522,1523,1524,1572,1556,1574,1557,1573,1578,1579,1575,1581,1576,1580,1577,1563,1560,1567,1561,1558,1566,1571,1568,1569,1570,1565,1562,1559,1564,2495,2498,1596,1597,1598,1599,1601,1595,1600,1545,1546,1548,1549,1550,1551,1552,1553,1554,1547,1593,1555,1582,1585,1586,1587,1588,1589,1590,1591,1592,1604,1605,1607,1611,1609,1608,1610,1606,1603,1602,1594,1615,1657,1616,1660,1645,1656,1649,1618,1658,1646,1619,1650,1642,1612,1651,1647,1652,1648,1659,1639,1643,1644,1640,1613,1653,1654,1655,1614,1641,1771,1762,1761,1760,1756,1769,1763,1764,1758,1767,1766,1770,1765,1768,1759,1962,327,2477,2325,2350,2327,2323,2332,2324,2331,2328,2329,2316,2338,2330,2317,2300,2326,1681,1680,2308,2299,2351,2313,2302,2314,2298,405,2333,2349,2301,2339,2318,2340,2473,1935,1807,1806,1805,1802,1793,1790,1798,1804,1799,1801,1797,1792,1796,1795,1794,1791,1789,1803,1800,1788,1787,1777,1773,1779,1782,1784,1774,1780,1783,1786,1785,1778,1776,1781,1775,431,2497,1620,1950,1952,1951,1953,1100,1102,1103,1098,1099,1101,1097,1094,1095,1096,1114,1120,1111,1119,1112,1113,1106,1104,1118,1115,1117,1116,1105,1107,1109,1110,1108,2482,2485,1584,2486,2491,2487,2490,2488,2484,2483,2481,2492,2493,2494,2503,2370,2489,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2284,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,1968,1969,1967,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1583,2504,72,73,108,109,110,111,112,113,114,115,116,117,118,120,119,121,122,123,107,158,124,125,126,159,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,2505,1961,2319,64,374,375,373,371,372,62,65,251,2506,2507,2509,2508,2510,2511,1964,1963,1536,1932,1772,1808,1931,1930,1012,1015,1016,1022,1020,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1019,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1048,1049,1050,1051,1052,1053,1045,1054,1046,1047,1055,1056,1057,1058,1059,1060,1062,1063,1064,1075,1065,1067,1066,1068,1121,1069,1070,1071,1072,1073,1074,1076,1009,1077,1078,1010,1006,1008,1013,1014,1061,1089,1123,1172,1079,1128,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1165,1164,1166,1129,1171,1167,1168,1169,1170,1080,1081,1018,1011,1082,1021,1007,1083,1084,1085,1086,1087,1122,1088,1865,1866,1877,1875,1874,1878,1867,1868,1873,1869,1870,1871,1872,1876,1879,1907,1905,1904,1908,1902,1880,1903,1898,1899,1901,1900,1906,1864,1909,1884,1885,1886,1928,1927,1929,1862,1814,1815,1819,1820,1818,1821,1816,1817,1921,1920,1826,1822,1823,1824,1825,1881,1887,1883,1888,1892,1889,1882,1890,1891,1813,1812,1811,1809,1810,1837,1835,1833,1839,1834,1836,1838,1897,1895,1894,1893,1896,1863,1911,1915,1912,1918,1916,1913,1914,1917,1910,1919,1852,1841,1851,1847,1846,1853,1840,1842,1849,1843,1845,1848,1844,1850,1861,1859,1858,1860,1856,1857,1854,1855,1926,1924,1922,1923,1925,410,411,430,425,426,427,428,429,418,417,415,416,421,422,423,424,414,420,419,412,408,409,413,1936,74,2496,2295,2294,2293,2296,1828,63,406,1632,1634,1626,1625,1630,1627,1633,1628,1629,1631,1621,1623,1622,1624,1617,1511,2502,1757,2500,2501,2354,2303,2475,1004,1000,1002,1001,1003,915,745,977,804,902,805,905,830,836,837,838,835,916,825,840,844,845,846,847,911,814,850,851,817,852,853,854,811,858,860,861,862,849,857,864,865,866,868,818,869,871,829,873,874,878,879,883,888,887,890,891,892,893,943,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,895,896,897,898,820,899,900,821,822,903,904,906,907,908,872,910,948,942,949,894,941,909,754,944,945,947,950,951,952,955,954,956,953,756,819,770,755,815,781,827,797,758,760,832,812,848,841,800,788,789,795,946,742,999,747,744,912,749,753,831,748,839,750,741,870,751,752,914,885,880,746,743,773,957,826,855,958,778,772,876,959,843,780,960,975,779,976,777,768,962,767,978,794,971,806,972,973,782,979,798,771,961,877,757,759,761,769,762,981,763,982,765,764,799,834,833,783,785,786,784,787,824,828,813,823,807,816,980,859,808,856,863,913,867,809,842,998,776,775,983,766,774,985,984,995,884,886,790,791,792,974,793,997,964,875,882,965,966,967,968,969,970,996,901,986,987,889,810,801,963,796,988,802,803,881,990,991,989,993,994,992,720,719,721,735,736,737,738,739,728,727,725,726,731,732,733,734,724,730,729,740,722,718,723,2476,2310,2309,71,330,334,336,184,198,301,230,304,266,274,302,185,229,231,303,205,186,210,199,169,257,258,174,254,259,345,252,346,236,255,358,357,261,356,354,355,256,243,244,253,269,270,260,238,239,349,352,217,216,215,361,214,190,364,2306,2305,367,366,368,165,295,197,167,318,319,321,324,320,322,323,183,196,329,337,341,179,246,245,237,265,263,262,264,268,241,178,203,292,170,177,166,306,316,305,315,204,188,283,282,289,291,284,288,290,287,286,285,226,211,277,212,172,171,281,280,279,278,173,250,267,249,273,275,272,206,160,293,232,314,235,309,176,310,312,313,296,308,208,294,317,180,182,187,276,175,181,234,233,189,242,240,191,193,365,192,194,332,331,333,363,195,248,70,271,218,228,207,339,348,225,343,224,326,223,168,350,221,222,213,227,220,219,209,202,311,201,200,335,247,328,61,69,66,67,68,307,300,299,298,297,325,338,340,342,2307,344,347,378,351,377,353,359,360,362,369,376,164,370,1959,1956,1958,1957,1960,1827,1829,1830,1831,1832,2499,2320,161,162,163,2344,2342,2343,2345,2341,1755,1754,1690,1691,1686,1692,1693,1697,1698,1699,1700,1719,1701,1702,1704,1706,1707,1708,1674,1709,1675,1710,1711,1712,1713,1714,1671,1716,1718,1717,1715,1676,1672,1673,1720,1721,1703,1695,1696,1679,1677,1678,1722,1723,1724,1725,1682,1684,1726,1727,1728,1729,1730,1732,1733,1683,1736,1734,1735,1737,1738,1740,1739,1689,1688,1687,1685,1741,1742,1669,1743,1744,1745,1746,1731,1747,1748,1751,1694,1749,1750,1753,1661,1662,1663,1664,1665,1705,1666,1752,1667,1670,1668,2399,2469,2363,2355,2357,2356,2358,2471,2373,2359,2361,2360,2362,2364,2365,2366,2368,2369,2371,2372,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2385,2384,2386,2467,2387,2388,2389,2390,2391,2470,2392,2393,2394,2395,2396,2397,2398,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2464,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2462,2421,2422,2423,2424,2425,2426,2465,2427,2428,2429,2430,2431,2432,2433,2466,2435,2436,2461,2437,2434,2438,2468,2439,2440,2441,2442,2443,2444,2446,2460,2445,2447,2448,2449,2450,2451,2367,2452,2453,2454,2455,2456,2457,2458,2459,2463,2346,1638,1637,1636,1635,380,2289,1537,1544,1539,1540,1541,1542,1543,1538,2297,404,396,394,395,383,384,391,382,387,397,388,393,399,398,381,389,390,385,392,386,402,401,400,403,59,60,10,11,13,12,2,14,15,16,17,18,19,20,21,3,22,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,1,58,90,97,89,104,81,80,103,98,101,83,82,78,77,100,79,84,85,88,75,106,105,92,93,95,91,94,99,86,87,96,76,102,627,461,605,606,622,610,520,526,527,528,525,628,1017,511,530,534,535,536,540,616,539,550,551,552,545,553,554,555,556,560,562,563,564,549,559,566,567,568,570,546,571,573,519,575,576,580,581,584,590,589,592,593,594,595,655,629,630,631,632,633,634,635,636,637,657,638,639,640,658,641,642,643,644,645,646,659,647,648,649,650,660,651,656,652,598,599,600,601,548,602,603,596,624,607,609,611,612,613,574,1272,1271,1229,1230,1231,1232,1233,1234,1235,1236,1240,1241,1242,1237,1238,1239,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1267,1266,1268,1269,1270,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1302,1303,1296,1297,1298,1299,1300,1301,1304,1305,1306,1307,1308,1309,1310,1311,1312,1314,1313,1315,1316,1317,1318,1319,1320,1327,1328,1325,1326,1331,1332,1329,1330,1333,1335,1334,1336,1337,1338,1321,1322,1323,1339,1324,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1387,1386,1388,1394,1392,1393,1389,1390,1391,1395,1396,1418,1419,1420,1417,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1467,1468,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1469,1470,1471,1473,1474,1475,1476,1472,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1489,1490,1488,1487,1491,1492,1493,1494,1495,1496,1497,1498,1499,1409,1500,1501,1411,1410,1502,1503,1504,1508,615,666,654,667,597,653,614,478,661,586,665,669,670,671,674,673,675,672,436,547,437,435,467,542,618,490,470,441,443,522,537,541,531,504,497,498,492,625,662,432,452,717,1507,1506,1505,455,474,617,457,477,453,521,454,529,456,458,434,572,475,476,491,459,587,460,433,473,487,676,489,557,677,494,495,578,678,533,496,680,450,488,493,681,679,485,683,439,695,462,463,466,465,699,698,468,469,502,512,608,701,702,503,471,440,682,579,444,442,445,479,446,486,448,706,447,449,472,524,523,513,515,516,514,517,506,518,538,505,623,544,561,507,558,565,543,569,509,480,711,451,481,712,464,709,532,707,710,484,708,482,483,508,700,438,585,588,499,500,663,664,501,668,694,685,577,583,686,687,688,689,690,691,692,693,604,696,697,591,510,619,684,626,716,620,621,582,704,705,703,714,715,713,1407,1403,1402,1404,1405,1413,1412,1414,1416,1408,1415,1401,1406,1400,1397,1398,1399,1091,1092,1093,1509,1933,1228,1200,1126,1127,1173,1175,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1188,1187,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1223,1222,1176,1174,1224,1225,1226,1090,1125,1124,1227,1949,1941,1947,1943,1944,1942,1945,1937,1938,1948,1940,1946,1939,1005,1955,1965,2321,2347,2348,2322,2335,2353,2472,2336,2474,2478,2352,1966,2286,2287,2288,2290,2285,2337,2479,2304,2312,2315,2311,2334,1954,2291,2292,1934,407],"affectedFilesPendingEmit":[2480,1955,1965,2321,2347,2348,2322,2335,2353,2472,2336,2474,2478,2352,1966,2286,2287,2288,2290,2285,2337,2479,2304,2312,2315,2311,2334,1954,2291,2292,1934,407]},"version":"5.4.5"} \ No newline at end of file From 2dd2cd618b2074c6f0b48f0cf5e58f199f230ff1 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 10:12:28 -0400 Subject: [PATCH 002/110] fix: trig --- zk-auth/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zk-auth/README.md b/zk-auth/README.md index d30e151..fdc87b2 100644 --- a/zk-auth/README.md +++ b/zk-auth/README.md @@ -1,5 +1,7 @@ # zk-auth +URL: https://zkauth.vercel.app + ## Getting Started 🚀 > [!IMPORTANT] From 983273c93ae5a68b4d813725a3abc62edc8956d8 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 10:16:25 -0400 Subject: [PATCH 003/110] fix: build --- zk-auth/src/app/_components/prove-button.tsx | 8 ++++---- zk-auth/src/app/_lib/bonsai-proving.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/zk-auth/src/app/_components/prove-button.tsx b/zk-auth/src/app/_components/prove-button.tsx index 53ff96e..3178a5d 100644 --- a/zk-auth/src/app/_components/prove-button.tsx +++ b/zk-auth/src/app/_components/prove-button.tsx @@ -9,13 +9,13 @@ import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; import { useTheme } from "next-themes"; import Image from "next/image"; import { useState, useTransition } from "react"; -import type { - SnarkSessionStatusRes, - StarkSessionStatusRes, -} from "../_actions/bonsai-proving"; import { doSnarkProving } from "../_utils/do-snark-proving"; import { doStarkProving } from "../_utils/do-stark-proving"; import { UserInfos } from "./user-infos"; +import type { + SnarkSessionStatusRes, + StarkSessionStatusRes, +} from "../_lib/bonsai-proving"; export function ProveButton() { const { resolvedTheme } = useTheme(); diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 833f144..9c1372a 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -19,7 +19,7 @@ type SnarkSessionReceipt = { journal: number[]; }; -type StarkSessionStatusRes = { +export type StarkSessionStatusRes = { status: string; receipt_url?: string; error_msg?: string; @@ -28,7 +28,7 @@ type StarkSessionStatusRes = { stats?: StarkSessionStats; }; -type SnarkSessionStatusRes = { +export type SnarkSessionStatusRes = { status: string; output?: SnarkSessionReceipt; error_msg?: string; From 03f32c97b9b8c7b2f5f98d7d686629d21848191f Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 10:20:49 -0400 Subject: [PATCH 004/110] fix: trig --- zk-auth/tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/zk-auth/tsconfig.json b/zk-auth/tsconfig.json index 4d92b15..1b81183 100644 --- a/zk-auth/tsconfig.json +++ b/zk-auth/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "@risc0/ui/config/tsconfig.base.json", "compilerOptions": { - /* Path Aliases */ "baseUrl": ".", "paths": { "~/*": ["./src/*"] From 6fea0a712818f0056aef495142990981745500c1 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:02:13 -0400 Subject: [PATCH 005/110] fix: wip --- zk-auth/bun.lockb | Bin 518620 -> 156114 bytes zk-auth/middleware.ts | 41 +++++ zk-auth/package.json | 6 +- zk-auth/package/.gitignore | 24 +++ zk-auth/package/README.md | 50 ++++++ zk-auth/package/bun.lockb | Bin 0 -> 135349 bytes zk-auth/package/index.html | 13 ++ zk-auth/package/package.json | 26 +++ zk-auth/package/public/vite.svg | 1 + zk-auth/package/src/App.tsx | 68 +++++++ zk-auth/package/src/do-snark-proving.ts | 70 ++++++++ zk-auth/package/src/do-stark-proving.ts | 87 +++++++++ zk-auth/package/src/download-button.tsx | 23 +++ zk-auth/package/src/main.tsx | 9 + zk-auth/package/src/prove-button.tsx | 176 +++++++++++++++++++ zk-auth/package/src/sign-in-button.tsx | 35 ++++ zk-auth/package/src/snark-table.tsx | 41 +++++ zk-auth/package/src/stark-table.tsx | 77 ++++++++ zk-auth/package/src/user-infos.tsx | 30 ++++ zk-auth/package/src/vite-env.d.ts | 1 + zk-auth/package/tsconfig.app.json | 24 +++ zk-auth/package/tsconfig.json | 7 + zk-auth/package/tsconfig.node.json | 22 +++ zk-auth/package/vite.config.ts | 7 + zk-auth/src/app/_components/prove-button.tsx | 3 +- zk-auth/src/app/_components/user-infos.tsx | 3 +- zk-auth/src/app/page.tsx | 80 ++++++++- zk-auth/src/app/providers.tsx | 35 ++-- zk-auth/src/wagmi.ts | 18 -- 29 files changed, 926 insertions(+), 51 deletions(-) create mode 100644 zk-auth/middleware.ts create mode 100644 zk-auth/package/.gitignore create mode 100644 zk-auth/package/README.md create mode 100755 zk-auth/package/bun.lockb create mode 100644 zk-auth/package/index.html create mode 100644 zk-auth/package/package.json create mode 100644 zk-auth/package/public/vite.svg create mode 100644 zk-auth/package/src/App.tsx create mode 100644 zk-auth/package/src/do-snark-proving.ts create mode 100644 zk-auth/package/src/do-stark-proving.ts create mode 100644 zk-auth/package/src/download-button.tsx create mode 100644 zk-auth/package/src/main.tsx create mode 100644 zk-auth/package/src/prove-button.tsx create mode 100644 zk-auth/package/src/sign-in-button.tsx create mode 100644 zk-auth/package/src/snark-table.tsx create mode 100644 zk-auth/package/src/stark-table.tsx create mode 100644 zk-auth/package/src/user-infos.tsx create mode 100644 zk-auth/package/src/vite-env.d.ts create mode 100644 zk-auth/package/tsconfig.app.json create mode 100644 zk-auth/package/tsconfig.json create mode 100644 zk-auth/package/tsconfig.node.json create mode 100644 zk-auth/package/vite.config.ts delete mode 100644 zk-auth/src/wagmi.ts diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 12f974e1508da6ac5d446986726341a7453aaa43..385f8bd76e7d9100f31ab203c8a7e92d9ef4b6d3 100755 GIT binary patch delta 36050 zcmeI52Ygi3_V4G+WM(ozAk>5s5_%{JDTE1x1VRnHLl6UmWJm&OB%zlC1jP=HxWNW? zEQp901W^!Cupn5mpkl?wwV(oC@O{@QNfh*Q-~Yb%`Ml4&^Wm4Z*Ke=g)^6vVIn4gx zjqum^c~(bvIy@`%VfFQaQNN6gJAdeqr~KVB%|AI7c<)MYy)6-GZBHfj&9vL(Gf!KS z-m<)TsitejpISCs#loU&U3rJUq8~zfkfphqCB=kqb=Yi;&{rZGBg>HWkv9a`Z1qGh z&Ci>T-R1D1=!YmS0@)Y68S)YI*2rk|M&$%nL$pAKLNq~^ptnTYO?{lHpF~Q*iKcyX zWElECX+b#hOQcljFfs&L>MNM*E3w)3qt`~yD#|ZHwGBn7gMJsXye@&C2#A5=kF+=i z8HC)Av9!Fzmzh;YxCf-@8wiX2pW|ncnPmJkQtT}ILf?EzZhJD=@WAb+ydv0EZflC+ zObC%3uL!LyTTtw?y~==)L22=GGw0-EV*8Z*#FG|Z zepzdqtsz8Q8^dMmkW%y3NXa+|iE+h4ZH<=PWy)VjCtWiVDX#8_Y>#Zmp9o}IY9{#{ zN0}yZSC}_rf$e@%--?t$bBKiE(wzLF>0&=G#;`BQE6gj-EG^xOE`42S$~Cb@AAf-q zPxwr}JkIcJ2{K6L|Ezc;VG2@e-lUr$Yop8HdH`Kob~{p9@*2Fzf0fR%U*6rQfR%1M z6$vK&Jzo4T8LcBAa$as;RxT~eEA`FyAv+}+EjWi14-{vXBHn4 z@siI$GygqE@mztgB*#bpA1pT`UhZ%7$&Ad>ve{%%;+s<{mAr0%(Zb;ajj^yEDGSFg z(>^WoMQ$cv_-MKHnmP zkR`q>_RX@=hld&V%Z3|c;y99g`d5?~fr>0sZXRJ6jx+U+NU6X8Q}>#Bc6^k+p*0_F z^MBK(U3t-H!w$ZTRn~^gEGfxc&~=Pa!EwZk>*0N}4%}f@=tfh{9BWkk3iLYIwHar0 zoxTM`<&_4Z%er(LDMQ6>N;AH^bS?>lh{(z>oi8q(ZF;IC)9}pS?1KM+O|YElHqofL zwF_FiUsgf(EU8c$6_S;+U3;7MGr8F4yL*Tb58RAonpF&%ZMbwjQW6%I6tSR{+Kg2~ zE`Vmtkm;T0^ZC39-E7MV%WUytFP`nk;wSkP&nch;o2{rY3m>xymSh$evz8uWBh?4T z5(<=-l@{mcmBra?`DR6Amn_IDEt^@iAgid*X3O>E7e_HoClTKe`%y?Ka3E3|l5Fa+ z6e1Od)1_~o(Lil!+xbCzo_Qgv`={Rw>R-OsziL2Y;J^*X9=bbZ*J=Nr0gnYANq^|@ z;8PnupFX>7a-Z7u68*&kBmIXvg!6vZKRqxqu=MJ*^H1E@ zcCkNVP(vMNEeQ94Kf6U-MfzOP|+h;%j#%lkjZjqs{mp*&`tuehkZ`bWn z*r4&y!M8Q8{JPo7r)T-6bqx(Xe*V=*BfABy^Cu?61V8`iyuJ;z{)_I8e|yA+`_6d% z6@w!JyPd7Gd*a%yQ~VnT_X%C>%D650y88;hDR}<2^e;!hJbv1@zn@*5`HR0#Ohljg zE%FW@Up3{&t8agMV!(ttd*-c}@kR8=ISIAyIR4%W_owl9Ub(B^rgL@gkL`VLyTw=3 zZ+7bb2DjU9nz7pA{e5~R_IY-B_O^#_9XfGqP|MG*zW%|eoITfMH1FMY=Z@9OLsp(# z^knU(ech82@;0=N4Xa2r(!za(5 zx~875qkIctP8V4F*2G*SY-G?U@H2 z>$`s4{LEU<-~R5Q4vXjh);KJ=GKW@FJ)!52zO+R?Pd$j%MYae*zImfs6Hg5LY zlk1P&{N(5>zliy%_S_W_jn3Tk#8;o(dcI}*Z}NskZr*ZYVbOu_|FN{siwEb0jEvsa z@AR=)&+ltCOe;ICY5vd=)3oFM1tWTUT4**K3qgg`pPKIVq@!`YRblt1j`lik(rhZJ zkCyCw)M2v?Q^|d_B!`WW@w>-B6w=GQLwdd{Os8k>LbD6gj%JD)gJ^Do<+7>L4^ z9zNB^dm|5_jY4C&`om`@yzC;A&%JuhHB;t(zRvYv<`(6ldE)6K!=c(3ucrWw zZLUI7sa_JjfZE?G&r^$wh$`RPGn)B#Zb-4;+RT4;LyGeVaRdEJ@{>I6xH2%)&_j7> ziBb!H>KL!%uI99RB+dF7dVpRz%|$uATi9&en^0F#9ThEXYS$>-^L|VE*MDwwlA}pD zZ5>U@(Oh82Aa3B_%ZTx#NtJZX{$aTP?AR20qX>V`aVefj5mwx?2e3qoks|!5-+4Xn zp$$RP{LD{#L2Licu_=yCttoblmSS&1Elrs;7QHQ^pPcA?GGH3oxcKzo~QilsU4K}+$UyE@5piqJ@S zsyWB&>DK|T>Q>9>(W}uUcRHs~OAJ68GX$$^h{+@@O0}`m6&zwNwn#D5uu%}PSvI+2BHkJN{D;{Z7`bCX0x#> zR(&?Xvy@Z}>p5~o*40_%ewpv*AdRZ-Wq#y#F&yOZFPrCe%!{InC(*?}McHhlNog}i zZvSYTtvf1Hewo*^5RGKAh^_H@4x$+@mg&*3t6}NzGnSo$(Ng@oFHiDZMM%a>fPe1< z(x4fAPq#SQ#L(H7QR;F=M{kT65+l8y&(LJty8X+@xJ9h7&eYNurip0MR3EVtHm7?z0Q@Q`IB>!oRx$IO2|`-6-!)XG;0`|bb^ud3N&em-i!8UdiZoZ|~(li^*9SS#R|!dXkc@IU^off;N#jm(qH&XnlfO-PJMpN)j41&qk9ty#pPa zQW#@XS<+UUeU6sZE8HrDH@N9)DVsZt%RfoQ$`$t#oW8wU7y{+!}` z9iqFeYxcl_{+_?2I43bR+346{HxZI~%KV<;b)F>H+kcKB7d40{bp}7q>zs_%%YSZi zl1C9T2OlfIF;k;aIJYt5y*h3<8kLm3q``Ni$?{^C+2{OLEdA%kCVASjNJ=?Qy@_Mc zWXE%=y>_}4jeeE^FxBgM9nI|430`MiGVAY8z9GpohLGWjW%IqBE77DqEOuNkzb95` zv@YH2@D63i@-g5_hvE;l#HS@W9)$Z1&T)o7(hLF#!>}UYd7IT-MpavVZ@gtVU#jRC zv-CN?N5fGxpz8>$lF~^pGNN)51I;KpIp6E?jt*GbUTjBN0M3ZqH?AM;58EE{YcFXcvP8{RSku6sjp42LBSw><2 zN)NdV^6VhQw39V(oKDBc^l@~WK$jL#mFp+iYzf5I@u$vC?0_QUsGjYQpXcCf!4FNi zreVOjEgY7{8Dp%8RN??)wms&xcrj(!LjHvy0V1X`5b{o1U%DNDpa8XY5>uj9(gDY}dje}j^xh0UIs zo|<6{OvdRj#%VdKtXypHcQa?vWDt`nvu_+-W6n%A`0LR6`ICQ4a=bQ$!sd{3#8m6j zQF49_OXh(dx@e{r*Dv5Lvv0;lH|d1>MZ|6dKzC zD?RI+bEr@5Rg#O6JP#6*H4gVNlTV<@LPqKABkg8XT~W}69JK0szKBNU%-lQXSSz}; zwg63ciSFkUXfmQSrRB0flOkYhnP(5Pgq6K}auDuR_YKnjL==nz)Z8u+;1PSmN|ew_APww-NUeN`dDI z75(}Nnv8WGwEXJzG%K+#l;q-TgsE{k!)4C3Xx;Ve(7h%8v(r;Nzd^__(yzaq<4VQD zavgOip_nTEebM~MW0E|z%c?g1iC%l}GXKH_Db8h(Oba%Jcg$$&JKF24Jx8+R*4{pT zj=$&16wmb#-Sk|=cYD#gqtS>Qul?6K{+$z2JOk!h7hJNnm!tKr5M&|{UcK9 zG1X9O%GP?lrkfELlbQ;{824jEq+uBESI?ZK|}Bqkf!beZtxrk z051Ufh!p#SzzGfk$@4WJACY4J1`z&DQ$LE7bngSe(#X*r%DgNU8q_q||3LQliGlA5#iH-qdTza@}wO z5n?b2DK?jxh9ZT}F!hT`smN3_UZmJhM+%i?@**XeZR*uhpZi9HB+S7;GR!j#FDAt< z-;A#*g(~2W$U-w-q~up@>NTbCC3T394Cf#N)aI?sdf^wD_9CUn%aKA=nEc;KNx$5* z6Dh$fOu538D~0595!p#kaHVM=Qi50UM~2FECNEM`1=nifdVTpaMmO`D(SIjpWZ!1m ziIm{&ro6-CMM^t1n0ieqBYV5aBaMYb2uVSI$LH{~Zn^7%U{CZC#iA|<~Q zNNLSCCNEMZ+z%Qnj5PZvGve>0n4B{0M24c*k;MNaX-=S;8A%yIX2v2VSkKf&%7AW& z6uU+yFH)97dE-+)HKo{x!;1%6oAFgrAAV*;FftAUahcbYz08EYk^HlzntFdzABYrJ z4m0%;ralfS17bQ-J|d+8K2zo*C8~TTf2F`8GeX{Nm54I=V@hf195a4CQpV6SQ(s}) ziL3)J@5%-t??6h_2L8yDc>q}(`MAkHfvhJx%svA05h)cpfNY99j+CfR`6I6V+LS*a zrDeY(rR7eVCEKICoZA4|2`Tw>MM{A^kuv8-A*F)y)~{438)>I}+YADdp}Zz6ACY>C zO?^%cDH$&`;}@Cy#UypJEivP3O38Pr$&0kh_^Tiw5zEX7k)kgb1LO*m|4&NEU*3;4 z$G>r5D;K)*xtRPvbdlRyFHo*_rAGg~$kp8;7t7*~|6b(&_agVd7rC0bM#)vLtc3r) z$hH0VB3G8j|6b(cgiE;yHYd=3FLM8Tk^BGUMXtL2b?u2heG7}XA{+zU=j)wkx$&sHkG0W(wm`W}t7TKITVY(= zrWT5W-+NDFuua9aLDsjaYeY7%sZT^Uw5gtLk-T$vlSp2o z`&uOL%JprB7pP$i&YOU0=GulLz{vpI}G2#8NS{*S7{0OF?BTPG++9}KqVZu5& zhH4$u@pnm-`!PhqQF7_1mK}u%Jq|Gk3wvjL*@0iMddq*2;?`KnY z3lsP?j57|K0X8)z4rYfi+l3iK;d`h~?l&+&@i2q&bv!nq-@@z`hIbQo_QmFaFk$`d zL+!(Hb~kM1e+N_04V#hJ2orfyY!YBb+tkbin4`kHDh%JvH|q|w>K`ymy2Fget->UJ z4-@5unTUJ5Feik$<30LllKSdB`e@w`5XZ!XFG)KkVv_bF%=L+QCqwlRlhZ0l zXzhW?rk`Ne_JGNxox-G_f*H`0L|H1YH7*VO8R8BIyN{vU6O$dn3{Qf|!O2N5xxc`i z6DE(@7lkWAe}$P7g)3&^_FmW=5N2~PYzi3A!puJnlaUNl#DGqQi97=nlmaswC#S$1 z6=t_ErMR>=%&N061-)VB;8I}{e}f6@1H<<@GyA}t5av~37U0rUn05bzS&|B~2$u?z zb`B=0FU%6g=uOo5v@k1$DTnEc&8G7(3H@M}F>d?8r2h_6(1dnf!3c&~8)#?X_Qzx; zGrvE?4v6oBxC)DxWawxx0|vlc&A1&vE}?dq?S07QT6`+Z0bzy@#O8W@IuK^Q1Lj-< z`%vvh_25tRUSt47&?$O+jT$Y)Q6YRn_|?`^5UZRJ3Cw=`T2>RuB+&&keh}Fz#`++b z6T&#tVAeC%(_q%QVYUl%n@!mV!=y=@e1l=`pb2k@YlLa%qrw}Q@IIJL9+_;Lb3)b;L%P2W@J)*n|ebjGqPb zFm;{%;i=lT9V-nlLAXX*Ud;r)cOfm~{jDpz|E;hm($7iEq(j#E* z8x8X*!&jKVRxsnozEG)?ur945Up%zc-`I5hR6Fo9iQ#%I7dHFb9e%no6kQ()Yh8Z!kZHwtFE zFdj|Wr^19r!}zAc)YjDF!W+6Vnp!9_L{qOL)rmNAOvon3rkYxw4YMvD=5t}1YbwqM zlhzGptq&$lQ=bTPT9^SdV8S(Z(+rqR2{1nk(+a=jz@&GFxi1H%4So?O&JUKJ)D9~Ho?>IJi;044!136q!%6IBS~#ZQGWCxkgB zOb<PF6DF-UOmZFm;ss^QVO#}n9ZdygYb_qx&2@=%3ucLpE8)x{xCsvV20wK zIWPx=*)7a){4*D3{s5SQxiBN~k1&w~VZ!FYjK)9nV2%p&sxV{m&wQ9wgJ71-hZ&E5 zgh@<;iCO?N5&tZJIU&q3VJ6|9g)r*|!!)kVDl?f8B~027m;p_($zT+Ir{N!AR({8p zIF<3!6q`*9a@EdGs!URy#3p?h%;zVu$zmM-114}d%&UpC)2HeuauKvch~Z~QltXpu zGN5utz#OX!lSfg)gpQPK7E<^uniT|dK$zr3Fa@}|CCvO$Fl&V=Vt_BAI+3Gcd>>Ny zY&vi;%u!+PSd2|66%2t{H3sHqVdgNLm%t>Bg}HBuW0snB&=KHYF{w-CsC|ydG=K4k z0JY~qN1*-sT9r2}bJWrq`;59Oy4=xSkBxZ65$G)Ciw$oeIQhCJX8uH3uRQQNNbJ$TEA zuPrP3A%oSLWsaBi!f)S5;kWY2Np0b7)VWb_z_sTcrCP%E*11O89c`sWU5x6*RAO>% zKaxoiuW3e=0`m1%FLvljq+Jf$Ratb@k)Z`y|Fe27kJ|MLbQY^7)_<(d%Fm0QS!#Uy zay+B5<$I1#9R5Bd8i`S5z=w_)O^RQv`2)vCN@$1U|K?vsi7(ckRw~cHY_^DbOvzUQ zQp(T&ZhVBaUU`tOkK|KRmoLraW4#6;&s68?jPXi@eAy;_$=gu+XC&oFQS#l_0)w)R zf{?r=uZ0FzuD>rKgk-S9AZ_xW9)*){+?Jc%6f;Bl8u1E~n+hitkuS4XnA~*JPQJxk zX>!)95b{mlRVF77hUJ@N{d>o&A*E(MNckR8zS+A8$fv~2kl`(F!|5OKBLC$7P}?3d zC|enXc%VLb#N_6~Nd@IA#?2-tuQy0q`TFru>zlO2CfNvb3y?%hOisR7d)(xfnw)&G z7B5D8$d}bQ>Z@-8y2*H(17zyTRGklGddhTM1Qr9Cg-e0hR)A$-Ik*C>05Yqt1TvGZ z1=oS=!42R>um;HF@q@LX2;_iVP%Do=J}|(hQa%l6HfA{C5nv=31xAB0U@RC1#sk)N z{o7^fDH-H4sAUk#n3XXqV^Vrd##}geg+B(gY$`n|JtsXSPQ3yb$am-ED(u^UkaBsV zDc|X5fGJ=qknj3OgRx*dm;fe%`$;a7{9*72kcs>#*an^eG7p=A7N8xd17v<31Ts~c zfDjN0nu0U3>^wuCJqz}Lz2G^p4?GX#eIDs>>0p^dcY}L?%$@td{onzx2|NfM0uO^n z!4@D>XDfIdYy(e#nN)NZ$Oki|Yo`;K3Nk?kU{BNE_w0_8VOv2fJZ6L2!$!l24 z!R_FBaD()}cpx8S10R?Hl0gdS4f=pokO+E$9uzEZ*_48Qgs*^;CGSR10CGSEm;z*v z9t8S>z90##0J0oT1=BS8GE<%TBA|Ks0Q4*{9b5(`gRx)|m;mmitgFGz-~q4+JP5Xc z$G}z~n^PQF%I4D&$cEzqwLonU1R8>usQWA6HSi{QTi&FRP3I~g8%=u<2^s@=SxPpQ zU#P^d;4JtJoCD{1;fAyAlsRgAa1whcoZ23vg%s>F5_S%kbyBA3DAoum?N~o&m|=39u9F0NcSf@ECXqECTm|d%+5D1y~A}fW=@LSPsPF6+rac zMZ1>3DsUxO39d53S0k?h*MsZ8IaCEs0ZA+A6u1?v zH}yNEHg|w~z+GSi*a+?h4}u54{a}+B-i&+%JPaNMTfpOBD-chJhf;ueOV*T1@FWmk zy7nnEyc@X-l#A;m@@eoK*bDZ7=fQq(5J;E22@Zi*!7E@75dH{w4IBny^E!9~d;lar zv40PU?X%!ra1=;6?@Mn8DN2n&ami!iW70|G|87k5C4L2U%@ZnXYd2~3H%7Y2PeUI;2ZEQ_y-W1Q{Xg^JkEok zC|}R?tSKep9I#V(AaH>IU{xZLxaGhJC)3J}6t1R?@aaI(^ae?w1$NDWmvA#=QxFQu z10X^OGy#o4BOq594M2Sm4C(2Ccxy#LM85 zZi6qkb%1OS+Jbhbfh6h;x`6ILE?#?qI1mfEf=)m-t|-tESe27XN#!K|&z#u*k;DH| zh>()dlF=98#4hH7464&efftLHt8BUKw;CgMlE2s{l=G(>hzEbHS#@SoF)O}iB`?;( z9^}&j`}ROC&E@i5U{y@gTb`Bl z(pfF9k)~XCyY!dkdMl9_U)W#OwU-KsjbtV_8sf!2SH#LwZdfi>sZR1Hr(_`R`KwH% zkUwWUg9=Ng;tk1o7?8?Z1Jv@Cq!mvL1=6q~K+2H;D<0!$OO}Y4@i7pq*ToErgXudyG<%melfRMuKjbXYi1}@Qd%P|`@5+ro)Yg|EH6A$ z{)ZY`^W3Vbw76#XT+{;Sr>$d~?>3jSRSE%#duk_!A` zoR#AjnUm6&mfIy$Yrcxxtaxi)ml9tBW`kl-1PVa`$OkjQ3~)J+TW-1CP6wBPY>)}2 zfvF%VgFjP17MKovAP?k#TvJL$v%p-Cb{&8Cy!54}zG>~0XHqs*uZ{DFI@`wCOq-(` zw{^xhmkY02TxWgNa@yp&^&*n(T6}bDbR6s|wdSh?_EWLGQ-O*)%*)wmhNsAFxNt+Yex_qNWa@$V2X*>7l9(WUcB-*mf{5ZztR z-ufke>o-27;JEncM4P()M`v@#e$A#H{?QrhI85N9ADtoIFKJF=vU=`xm(yDge0O(% z784yGADzG+O-wj3{hs{o*pa66T%iu%bJ5@!9Z{)=~?KRo%1&+j!% zNGngRR3;`4o~x*lKVxhCWdB=_=dOO{wy#pEvwH-SEn<6!fF`yl?fU(2#mQBxJ_sB% zdwF%GeCCI3z&Do}y{;prIKJ_(%G&wRMMV52-ehr<0+? zv}k_j+Rx+byG$G77^;#zu>~!9BZ@|F^w%WBRvC%!E zV;HTBI~hFIkG<+KF%olEZJP@J#Tk-joo?_;;VsJ>)w;h8CX9;c*o!4z8q3ILR9HW+ zKjzc>XWcw~%LKdDGDt1`#o1IX;ZNJpy83gE3x;;EX2tNO=jz{`q4pj@>djxAaq=ao z=q;?H5l(Enrrz6cyNd1F=j0Vk3rq_Y@vF02nDx`mk8b+usxh~2J!sdgImVAWtJ%Lg zL+l6ZsfcmT#&NN+HtQIKmnYov>g#VVpK52=Cqxrrvkpp#zbR|s-a9rfv1=cb{>ZP+ z@N(-cg=MjCl{M<@PYkOF6GzxnZ~v;U-rGG{+itRjTk=aa7&jf z>@eks^PjnI+y1o8PozmqbT?VtKIWa;`e&HOKN1KEcZD?i^Ewu+1=YVLz!mBUs!x}k zafUlm8ryj3*VWN6n833z_I6Fw$D^E~Vb;MDo!`2r1X?93k5D?%T(`nqTxI&mhb_4dYnHhyo{-eLYrGdMj$Eji1AVx2p2 zd+Hov|&fBPd4B>$D-^$d>bFl@i%to2m0>ouMi})7dN` zge9C2TG43!(&lY9etf%KV~*%KSw~Zp-&k?9rFZ*!8FjJDA07p$^52~Cnjylh->zQ2 zqhi#{@z0*Jv-FY${lTwWtJi*GeX>ra2tKoAanKionW9pLEWOqbVkbBG^t#Z-k->H? zj>ME<<0rFK*gt8j^&8p~W_+%#EI4yo636NJ^DEnGG$!86Fk^{)zhLG58y+})MRgUd zALd@Mq5G8wA9`_rbz*+gTWyfU){lI<%F@>i@AB5i)rt3!Z4-QRD6-$SL+_S$tWL~n z7iw8+S4f!k3*uAe4}9&%&%REoPRwtQt5)ZnA%m@-Q6JXGO=wRQ;5D=w$oe56+*OY1ev^-LiAe9-6r)Piv_^O*Qu9cn3d5uiBk= zcC1|iFa3D~#H91iSaTN+vwr9QQJ<=N?)ukTiK7$rU6>OA)ZX*XkgnE=8nc}XhGzco z_MKAEm}t2Py>JUZNFw*|&Vm*f&YCH)j4?hnmdJ;GuU;b6FTXpR*(O|}yw7d0!s2##3mu5UMDKmn zsymXaNx8Usx!Lz^iyEs3^m(dJfy*$d-_zAlrP*CWF2N-=d>Zx(xw7C?Jbzov{?p3? z+mUM=n_@iAgxjz|*j=$<3!2vR=z~Snz>9hk{7RP2P-05N@lIQ{EK4j*05;T-lkHWu70)tG+tE8TCOftfqoNwWf|Mw#6P|Q2V1%YH3|psC|EwT36Q<=imS% z^(qlz))7cwkIq^&>e|SqN*zs0Mt zEW)f)gqk*JkUy?Xy*Kst>iaqe9jPOdNnwoox*i2{Qj!V}hS(dU5`$fxYQ2P4_yCT&`9z9@cU^V9&n&QhLrOwzf0?Xlw4 z{of-o7r(M~$#NDjqMgexM3`TC5UW-?c4&f5NcD$-P7)hRc(&$xc-K3ie z?#|V|bpn%hDg#wZG}`q*H}ye6RU#4_cRF@5EtX<0+9*1S=X*xg?UeBhmffw>ohH4| zeazQG&U{N5F~;@JMN02M434pyZyo$JYH9w{A8g(B2x+}W{qFIqJ~&AISj1-BDN)re zb`GK^58&^irjY}&g& z1}shB!jmlZ(PEt!Wt~`IWp&KkeE2QgA{pG2&cep6;t2 zo#+gWvrdod)HUs&rzbc1(X_xf=lU6Gt+O)pT-o&14f~xf?7RA_e?E@KtV5%o?Q+|D zN#jF@U?u&)_+-h6*@nxEl_pdz-bOcGH$XkUjc(l4|CT2x-8xe0DtE^_hu`zKbz#9O zU>!1*6rMI^;Y~yMPXKzpaccUD&hBB>Syt9L9o!L^^NmBM)bT_YqIaTThNz4ga zs&=TWV~eMT8CO~tURpmjOpOY4-5ti6So*To{>${}ZoQUs+i%SfPSaBLnsSwD9itWX z?Dnvn&K2>d38T|GXe-*gI$`L8zj(W~dZdAFqEBj0 z^HOUh|7DoSI{JR2Qx~B<7VPI(;C0$dFv}ieJ3uT<-^fm>LU_6q?Tuz zx-x1H8Ewo14)0Q#&0HakFRXS3QP&eydj__$0do+T+R}`znUlZNIby=BqrHBuIG;A^ zm1#dympGhDUF_r7E1P2yG|sqaU$Jr8+sUonvL)huxdm;5iLbeuE77{)1*cd(j<=T35~p4tOj4xCdzq+olodv@b76Zh2Gt;{njeWScRLeOz#)woFexWGALL;y~N0NQm2+LrA2P|uhpGdRb8v&t9#07 zZBu4Zct2Uq!3a`8pF`d#Spf1|@W#!%&Tv{v>e z5!@Rk=y-r+0O_Bwtu* zss~b)FRDta>JW}qR7EM=iCXjSf=Lx-oxr#!KzrfiIWvw{_pdw%W0qaYjHxP_^BdKg zc${fKu3&%a%8RM#kRaL?ob{E#>5|%A9yNurddU^QkN1;_Msao2rnq)pDt+8%j!m9s= zq5H>HSGkBs!TdNx%|XUvWA%{?JF8d1*ctS%oi`6JyZZZt7mrmBYik1i%{Eo#*8kCf ztm-bSM47VxYB~QX!4>YX9`pXqlVJ0)YlwsA$!cVGSI0j;4X)~j3kS2zMBTOj8>>OJ zi>n6yB@DHyUbV*DC8YW52K-IWRSkryF;X=yFJbUq;ExM0IsWyx0{_YNQhMocT3gk& z3oCAox$0}BszGhdk^e(iPk-HSj;i`{%B~une32#X|DyB$!$ak7Hd1RJa#)@6A09*( z&hQJzL)Dg1)%(`IbqQ1P&(k-gswGtyc>1Mk_`ldm)UsckjXf#J+>3LGrQb$3aS}={ zQcL^tM0H@1@zB9KdzFi>ZoHAi4X|}cv2{8tG4kY*+oDND>Xp8(87-{ij;(WE^($EY z$;gr-HKLy@F3dWS**bPs&t1QyyQheU@BNr+PnZ>mnm93N^4gyASU|qL=K_!Op4Aad zT3F{iTZh?VLMi%{@@#eJq;p1#L9>l#K-RIgx`qCI#QNE)WjxQGmzSu-cpeh=D^*L= z(GQiXfDfE;q1Kts)>*b}TKeM|HR1yvKHglU0{Xk++F1uNdy0C!@b&0hxinqMvke|F z+d@xhx;?*jr6%`x^-~oCTrt7Hkaf6%Uy+#biZ;LQd7Ul)Gh3FKmp?DBFniGC*V~`$ zytTs=zEzR;d(`>(zWI+0ZSd!BWd0mqIwz|{PIrHDe{t>GhBq!5#SOE3d;0$PMfXm8 zIHKufbg9L%knweYZ`AGb4|5=bA@=u}I=1)Rp6~omE3oP-qwzg6?ds)$u3Oc@L9W}> z${XC3Ns6QYWq6(7&UUAtFKB~?{=$@eXize^*Xmp^~!a1H$va% zxLT)qw9(yUxx_8j#?7k5i__+htG6%2RPQYY8D&#G^Sx;j*G(W>DvmtUQ{!qrr@ zxXqmrlT(tJ<(n}lKWav4pVE0*UFF1XUrDJx&f;TYVqz1#J+d+j^X8QLXj7R_tv=#z zRC)hxZhi$~=QdZGihkYQTm^4*N2o_{bM>x_+2{_`Y8B^Y73obWRf%`GN2>P(t zU9Bpwy30L8tEx^Nj$3rKt~_$LJ4929dboS46Zg1Z4k*Z@{TuUX+*6OZ$|?`t>pmW! zb`5tupjJQVZl*qa(5-@|XHNI!cP*JyScY-s!iU@wG>Hujh>Q02Q1#PX;Zn*%b;k%- zVx{j9cY@~5E1a8Il9#EpiS95}`$kvK%I%xomD(-!aqqhIuI6=0d^x^CUrAXj$lPet^ZS(2BX!QYRa8)rS(xoBQ7gB**Qkm0-Ch;)q`P@&(e#-zta!&MFQ>39*H@S~V?k7Ae!g0B zgS&;A^rU;Ynz@p((xlRTjYmI*T}oCPE8Rmp`6Y9rvN9PV>g!5(fqG%9tBIP~*Ii5X z=u6*C+~E#a+aGidYob4zi7v}oI6X5zlcV3Wsa08)+Ulc(g%7#YZoZO)6jB?XF{2ou0-U*KS~dj=Ie?MSb+3%USu#23IXjjKba1^9sAp%qvr~ zV{mQV0q$6JJl4Hf6<1QZ2V&h#ROdZZZgmXvv|cQOe)JAkn3^5yE@lB_g~*F@zp1H_ zd)zbC_hZ}x)sY=Ep!-<&JLqo zqmHlOYrUN#T+J&}pLf4gug>(6qIspv>-@aZG8Ou!`&%{Van}k5yNNpYxGPcxx1(y` zEOT{J8>a9EN2hJBmX)`>@VC6Ri7{1*VJL! zF=wJm^L@TzwY46@Bz1wSkNV;Z_h5C~^{&>c#kFovi_GaoC1p`ev9gk){Ct|E567w5 zzO15b)n^|5c|XI|Q3YJiWcX|&PE_ZMXj+Q&chppt5zjrYs5-jyqRKK$a(rbf zrN9-TuDjbcM4ireH+K07v!jY;sM)0~0&N$&viT()^4mDi6`=MkbVaM#t=;WZi$$#I zs}{T3tB1d&KcBvqZhGxYcaiEa##L8^k8vd#eVlT_JzExRr`mZn^ZBt8?y+j$)ohtP JzjELGzW`@@=+poJ literal 518620 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
+ + + diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json new file mode 100644 index 0000000..b2473c7 --- /dev/null +++ b/zk-auth/package/package.json @@ -0,0 +1,26 @@ +{ + "name": "package", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --port 3000", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@react-oauth/google": "0.12.1", + "@risc0/ui": "0.0.167", + "react": "19.0.0-rc-f2df5694-20240916", + "react-dom": "19.0.0-rc-f2df5694-20240916", + "string-ts": "2.2.0" + }, + "devDependencies": { + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "@vitejs/plugin-react-swc": "3.5.0", + "globals": "15.9.0", + "typescript": "5.5.3", + "vite": "5.4.1" + } +} diff --git a/zk-auth/package/public/vite.svg b/zk-auth/package/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/zk-auth/package/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx new file mode 100644 index 0000000..ec8d28f --- /dev/null +++ b/zk-auth/package/src/App.tsx @@ -0,0 +1,68 @@ +//import "@risc0/ui/styles/globals.css"; + +import { GoogleOAuthProvider } from "@react-oauth/google"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { useEffect, useState } from "react"; +import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; +import { StarkTable } from "./stark-table"; +import { SnarkTable } from "./snark-table"; +import { SignInButton } from "./sign-in-button"; +import { ProveButton } from "./prove-button"; + +export function App() { + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + const [googleUserToken] = useLocalStorage("google-token", null); + const [currentStep, setCurrentStep] = useState(1); + const [starkResults] = useLocalStorage( + "stark-results", + undefined, + ); + const [snarkResults] = useLocalStorage( + "snark-results", + undefined, + ); + + useEffect(() => { + if (!googleUserToken) { + setCurrentStep(2); + return; + } + + if (starkResults || snarkResults) { + setCurrentStep(4); + return; + } + + setCurrentStep(3); + }, [address, googleUserToken, starkResults, snarkResults]); + + return ( + + {currentStep === 2 ? ( + + ) : currentStep === 3 ? ( + + ) : ( + <> + {starkResults && ( + + STARK Results + + + + + )} + + {snarkResults && ( + + SNARK Results + + + + + )} + + )} + + ); +} diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/do-snark-proving.ts new file mode 100644 index 0000000..e2dd13a --- /dev/null +++ b/zk-auth/package/src/do-snark-proving.ts @@ -0,0 +1,70 @@ +import { sleep } from "@risc0/ui/utils/sleep"; +import type { Dispatch, SetStateAction } from "react"; + +type SnarkSessionStatusRes = { + status: string; + // Add other properties as needed +}; + +async function bonsaiSnarkProving(uuid: string): Promise { + const response = await fetch( + "https://zk-auth.vercel.app/api/bonsai/snark-proving", + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ uuid }), + }, + ); + + if (!response.ok) { + throw new Error("Failed to start SNARK proving"); + } + + const data = await response.json(); + + return data.uuid; +} + +async function getBonsaiSnarkStatus( + uuid: string, +): Promise { + const response = await fetch( + `https://zk-auth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, + ); + + if (!response.ok) { + throw new Error("Failed to get SNARK status"); + } + + return response.json(); +} + +export async function doSnarkProving({ + starkUuid, + setSnarkPollingResults, +}: { + starkUuid: string; + setSnarkPollingResults: Dispatch< + SetStateAction + >; +}) { + const snarkUuid = await bonsaiSnarkProving(starkUuid); + + if (!snarkUuid) { + throw new Error("SNARK UUID not found"); + } + + let snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + + setSnarkPollingResults(snarkStatus); + + // Poll until the session is not RUNNING + while (snarkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + + setSnarkPollingResults(snarkStatus); + } + + return { snarkStatus }; +} diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts new file mode 100644 index 0000000..c0c6a53 --- /dev/null +++ b/zk-auth/package/src/do-stark-proving.ts @@ -0,0 +1,87 @@ +import { sleep } from "@risc0/ui/utils/sleep"; +import isEqual from "lodash-es/isEqual"; +import type { Dispatch, SetStateAction } from "react"; + +type StarkSessionStatusRes = { + status: string; + // Add other properties as needed +}; + +async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "test"; token: string }): Promise { + const response = await fetch( + "https://zk-auth.vercel.app/api/bonsai/stark-proving", + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ iss, token }), + }, + ); + if (!response.ok) { + throw new Error("Failed to start STARK proving"); + } + + const data = await response.json(); + + return data.uuid; +} + +async function getBonsaiStarkStatus( + uuid: string, +): Promise { + const response = await fetch( + `https://zk-auth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, + ); + + if (!response.ok) { + throw new Error("Failed to get STARK status"); + } + + return response.json(); +} + +export async function doStarkProving({ + iss, + token, + setStarkPollingResults, +}: { + iss: "Google" | "test"; + token: string; + setStarkPollingResults: Dispatch< + SetStateAction + >; +}) { + const starkUuid = await bonsaiStarkProving({ iss, token }); + + if (!starkUuid) { + throw new Error("STARK UUID not found"); + } + + // STARK + let starkStatus = await getBonsaiStarkStatus(starkUuid); + + setStarkPollingResults([starkStatus]); + + // Poll until the session is not RUNNING + while (starkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + starkStatus = await getBonsaiStarkStatus(starkUuid); + + setStarkPollingResults((prevResults) => { + const lastStarkStatus = prevResults?.at(-1); + + if (!isEqual(lastStarkStatus, starkStatus)) { + return [...(prevResults ?? []), starkStatus]; + } + + return prevResults; + }); + } + + return { + starkUuid, + starkStatus, + }; +} diff --git a/zk-auth/package/src/download-button.tsx b/zk-auth/package/src/download-button.tsx new file mode 100644 index 0000000..e43f5d7 --- /dev/null +++ b/zk-auth/package/src/download-button.tsx @@ -0,0 +1,23 @@ +import { Button } from "@risc0/ui/button"; +import { DownloadIcon } from "lucide-react"; + +export function DownloadButton({ snarkData }: any) { + const handleDownload = () => { + const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(snarkData.output))}`; + const downloadAnchorNode = document.createElement("a"); + downloadAnchorNode.setAttribute("href", dataStr); + downloadAnchorNode.setAttribute( + "download", + `snark_data_${new Date().toLocaleDateString()}.json`, + ); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); + }; + + return ( + + ); +} diff --git a/zk-auth/package/src/main.tsx b/zk-auth/package/src/main.tsx new file mode 100644 index 0000000..821a6db --- /dev/null +++ b/zk-auth/package/src/main.tsx @@ -0,0 +1,9 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { App } from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx new file mode 100644 index 0000000..5437b75 --- /dev/null +++ b/zk-auth/package/src/prove-button.tsx @@ -0,0 +1,176 @@ +"use client"; + +import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { Loader } from "@risc0/ui/loader"; +import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; +import { useTheme } from "next-themes"; +import { useState, useTransition } from "react"; +import { doSnarkProving } from "./do-snark-proving"; +import { doStarkProving } from "./do-stark-proving"; +import { UserInfos } from "./user-infos"; + +export function ProveButton() { + const { resolvedTheme } = useTheme(); + const [isPending, startTransition] = useTransition(); + const [_starkResults, setStarkResults] = useLocalStorage( + "stark-results", + undefined, + ); + const [_snarkResults, setSnarkResults] = useLocalStorage( + "snark-results", + undefined, + ); + const [googleUserInfos] = useLocalStorage("google-infos", undefined); + const [googleUserToken] = useLocalStorage( + "google-token", + undefined, + ); + const [error, setError] = useState(); + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + const [snarkPollingResults, setSnarkPollingResults] = useState(); + const [starkPollingResults, setStarkPollingResults] = useState(); + + // this function takes care of creating the STARK session, which then returns a UUID + // we then use this UUID to create a SNARK session + // lastly, we get all the results from the STARK and SNARK sessions + // this gets around Vercel's time limit for serverless functions + function handleClick() { + if (!googleUserToken) { + console.error("JWT not found"); + return; + } + + //@ts-expect-error idk why this is not working + startTransition(async () => { + try { + const { starkUuid, starkStatus } = await doStarkProving({ + iss: googleUserInfos ? "Google" : "test", + setStarkPollingResults, + token: googleUserToken ?? "", + }); + const { snarkStatus } = await doSnarkProving({ + setSnarkPollingResults, + starkUuid, + }); + + setStarkResults(starkStatus); + setSnarkResults(snarkStatus); + } catch (error) { + console.error("Error proving:", error); + setError(error); + } + }); + } + + return address ? ( + <> + {isPending ? ( + + ) : ( + <> +

+ You are about to prove that address{" "} + {address} owns the following social + account: +

+ + {googleUserInfos && ( + + )} + + )} + +
+ + + {starkPollingResults && starkPollingResults.length > 0 && ( + + + STARK Results{" "} + + ({starkPollingResults.at(-1)?.status}) + + + {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( + +
+
+ {starkPollingResults.map((result: any, index: any) => ( + + {result.state} + + ))} +
+ +
+
+ )} +
+ )} + + {snarkPollingResults && ( + + + SNARK Results{" "} + + ({snarkPollingResults.status}) + + + +
+ This will take ~2 minutes{" "} + +
+
+
+ )} + + {error && ( + + + Error {error.status} + {error.message} + + )} +
+ + ) : null; +} diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/sign-in-button.tsx new file mode 100644 index 0000000..4995a3f --- /dev/null +++ b/zk-auth/package/src/sign-in-button.tsx @@ -0,0 +1,35 @@ +import { GoogleLogin } from "@react-oauth/google"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import jwtDecode from "jwt-decode"; +import { useEffect } from "react"; + +export function SignInButton() { + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage< + any | undefined + >("google-infos", undefined); + const [googleUserToken, setGoogleUserToken] = useLocalStorage< + string | undefined + >("google-token", undefined); + const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user + + useEffect(() => { + if (!googleUserToken || googleUserInfos) { + return; + } + + setGoogleUserInfos(jwtDecode(googleUserToken)); + }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + + return ( + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + ); +} diff --git a/zk-auth/package/src/snark-table.tsx b/zk-auth/package/src/snark-table.tsx new file mode 100644 index 0000000..af17c5a --- /dev/null +++ b/zk-auth/package/src/snark-table.tsx @@ -0,0 +1,41 @@ +import { cn } from "@risc0/ui/cn"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@risc0/ui/table"; +import { capitalize, toLowerCase } from "string-ts"; +import { DownloadButton } from "./download-button"; + +export function SnarkTable({ snarkData }: any) { + return ( + + + + Status + Output + + + + + + + {capitalize(toLowerCase(snarkData.status))} + + + + + + + +
+ ); +} diff --git a/zk-auth/package/src/stark-table.tsx b/zk-auth/package/src/stark-table.tsx new file mode 100644 index 0000000..90bc792 --- /dev/null +++ b/zk-auth/package/src/stark-table.tsx @@ -0,0 +1,77 @@ +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@risc0/ui/table"; +import { capitalize, toLowerCase } from "string-ts"; +import { DownloadIcon } from "lucide-react"; + +export function StarkTable({ starkData }: any) { + const isSuccess = starkData.status === "SUCCEEDED"; + + return ( + + + + Status + {!isSuccess && ( + Error Message + )} + Stats + Elapsed Time + {isSuccess && ( + Receipt URL + )} + + + + + + + {capitalize(toLowerCase(starkData.status))} + + + {!isSuccess && {starkData.error_msg ?? "-"}} + +
+ + Segments:{" "} + {starkData.stats?.segments} + + + Cycles:{" "} + {starkData.stats?.cycles} + + + Total Cycles:{" "} + {starkData.stats?.total_cycles} + +
+
+ + {starkData.elapsed_time}s + + {isSuccess && ( + + + + + + )} +
+
+
+ ); +} diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx new file mode 100644 index 0000000..d8096b1 --- /dev/null +++ b/zk-auth/package/src/user-infos.tsx @@ -0,0 +1,30 @@ +import { Alert, AlertDescription } from "@risc0/ui/alert"; + +export function UserInfos({ + userInfos, + type, +}: { userInfos: any; type: "google" }) { + return ( + + +

+ {userInfos.name} +

+

+ {userInfos.email} +

+

+ {type === "google" && ( + <> + Google{" "} + Google + + )} +

+
+
+ ); +} diff --git a/zk-auth/package/src/vite-env.d.ts b/zk-auth/package/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/zk-auth/package/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/zk-auth/package/tsconfig.app.json b/zk-auth/package/tsconfig.app.json new file mode 100644 index 0000000..f0a2350 --- /dev/null +++ b/zk-auth/package/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/zk-auth/package/tsconfig.json b/zk-auth/package/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/zk-auth/package/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/zk-auth/package/tsconfig.node.json b/zk-auth/package/tsconfig.node.json new file mode 100644 index 0000000..0d3d714 --- /dev/null +++ b/zk-auth/package/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/zk-auth/package/vite.config.ts b/zk-auth/package/vite.config.ts new file mode 100644 index 0000000..861b04b --- /dev/null +++ b/zk-auth/package/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/zk-auth/src/app/_components/prove-button.tsx b/zk-auth/src/app/_components/prove-button.tsx index 3178a5d..1f06dfe 100644 --- a/zk-auth/src/app/_components/prove-button.tsx +++ b/zk-auth/src/app/_components/prove-button.tsx @@ -7,7 +7,6 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { Loader } from "@risc0/ui/loader"; import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; import { useTheme } from "next-themes"; -import Image from "next/image"; import { useState, useTransition } from "react"; import { doSnarkProving } from "../_utils/do-snark-proving"; import { doStarkProving } from "../_utils/do-stark-proving"; @@ -99,7 +98,7 @@ export function ProveButton() { disabled={!!error || isPending} > Prove with{" "} - {type === "google" && ( <> - Google{" "} + Google{" "} Google )} diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx index 87e1ac6..aee7c2f 100644 --- a/zk-auth/src/app/page.tsx +++ b/zk-auth/src/app/page.tsx @@ -5,8 +5,84 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useEffect, useState } from "react"; import { ProveButton } from "./_components/prove-button"; import { SignInButton } from "./_components/sign-in-button"; -import { SnarkTable } from "./_components/snark-table"; -import { StarkTable } from "./_components/stark-table"; +import { Button } from "@risc0/ui/button"; +import { cn } from "@risc0/ui/cn"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@risc0/ui/table"; +import { DownloadIcon } from "lucide-react"; +import Link from "next/link"; +import { capitalize, toLowerCase } from "string-ts"; + +function StarkTable({ starkData }) { + const isSuccess = starkData.status === "SUCCEEDED"; + + return ( + + + + Status + {!isSuccess && ( + Error Message + )} + Stats + Elapsed Time + {isSuccess && ( + Receipt URL + )} + + + + + + + {capitalize(toLowerCase(starkData.status))} + + + {!isSuccess && {starkData.error_msg ?? "-"}} + +
+ + Segments:{" "} + {starkData.stats?.segments} + + + Cycles:{" "} + {starkData.stats?.cycles} + + + Total Cycles:{" "} + {starkData.stats?.total_cycles} + +
+
+ + {starkData.elapsed_time}s + + {isSuccess && ( + + + + + + )} +
+
+
+ ); +} export default function AppPage() { const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user diff --git a/zk-auth/src/app/providers.tsx b/zk-auth/src/app/providers.tsx index c36ddf5..5768bb1 100644 --- a/zk-auth/src/app/providers.tsx +++ b/zk-auth/src/app/providers.tsx @@ -2,30 +2,21 @@ import { GoogleOAuthProvider } from "@react-oauth/google"; import { TooltipProvider } from "@risc0/ui/tooltip"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ThemeProvider } from "next-themes"; -import { WagmiProvider } from "wagmi"; import env from "~/env"; -import { config } from "~/wagmi"; - -const queryClient = new QueryClient(); export function Providers({ children }) { - return ( - - - - - {children} - - - - - ); + return ( + + + {children} + + + ); } diff --git a/zk-auth/src/wagmi.ts b/zk-auth/src/wagmi.ts deleted file mode 100644 index f0c6672..0000000 --- a/zk-auth/src/wagmi.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { http, createConfig } from "wagmi"; -import { mainnet } from "wagmi/chains"; -import { injected } from "wagmi/connectors"; - -export const config = createConfig({ - chains: [mainnet], - connectors: [injected()], - ssr: true, - transports: { - [mainnet.id]: http(), - }, -}); - -declare module "wagmi" { - interface Register { - config: typeof config; - } -} From 2654682eaca948360e0bddb1524be103053583bf Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:13:44 -0400 Subject: [PATCH 006/110] fix: build --- zk-auth/middleware.ts | 15 +++++--- zk-auth/src/app/page.tsx | 82 ++-------------------------------------- 2 files changed, 14 insertions(+), 83 deletions(-) diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts index 293b483..9734d01 100644 --- a/zk-auth/middleware.ts +++ b/zk-auth/middleware.ts @@ -1,13 +1,17 @@ import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; -export function middleware(request: NextRequest) { - const allowedOrigin = "http://localhost:3000"; +const allowedOrigins = [ + // 'https://your-allowed-domain1.com', + // 'https://your-allowed-domain2.com', + "http://localhost:3000", // For local development +]; +export function middleware(request: NextRequest) { if (request.nextUrl.pathname.startsWith("/api/")) { const origin = request.headers.get("origin"); - if (origin !== allowedOrigin) { + if (origin && !allowedOrigins.includes(origin)) { return new NextResponse(null, { status: 403, statusText: "Forbidden", @@ -20,7 +24,9 @@ export function middleware(request: NextRequest) { // For successful requests, add CORS headers const response = NextResponse.next(); - response.headers.set("Access-Control-Allow-Origin", allowedOrigin); + if (origin) { + response.headers.set("Access-Control-Allow-Origin", origin); + } response.headers.set( "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS", @@ -29,7 +35,6 @@ export function middleware(request: NextRequest) { "Access-Control-Allow-Headers", "Content-Type, Authorization", ); - return response; } diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx index aee7c2f..250203a 100644 --- a/zk-auth/src/app/page.tsx +++ b/zk-auth/src/app/page.tsx @@ -5,84 +5,8 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useEffect, useState } from "react"; import { ProveButton } from "./_components/prove-button"; import { SignInButton } from "./_components/sign-in-button"; -import { Button } from "@risc0/ui/button"; -import { cn } from "@risc0/ui/cn"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@risc0/ui/table"; -import { DownloadIcon } from "lucide-react"; -import Link from "next/link"; -import { capitalize, toLowerCase } from "string-ts"; - -function StarkTable({ starkData }) { - const isSuccess = starkData.status === "SUCCEEDED"; - - return ( - - - - Status - {!isSuccess && ( - Error Message - )} - Stats - Elapsed Time - {isSuccess && ( - Receipt URL - )} - - - - - - - {capitalize(toLowerCase(starkData.status))} - - - {!isSuccess && {starkData.error_msg ?? "-"}} - -
- - Segments:{" "} - {starkData.stats?.segments} - - - Cycles:{" "} - {starkData.stats?.cycles} - - - Total Cycles:{" "} - {starkData.stats?.total_cycles} - -
-
- - {starkData.elapsed_time}s - - {isSuccess && ( - - - - - - )} -
-
-
- ); -} +import { SnarkTable } from "./_components/snark-table"; +import { StarkTable } from "./_components/stark-table"; export default function AppPage() { const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user @@ -111,6 +35,8 @@ export default function AppPage() { setCurrentStep(3); }, [address, googleUserToken, starkResults, snarkResults]); + console.log(currentStep); + return currentStep === 2 ? ( ) : currentStep === 3 ? ( From 7bdcb16c916e7638444b8a23a59a6558a1071cf6 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:18:56 -0400 Subject: [PATCH 007/110] fix: middleware --- zk-auth/middleware.ts | 1 + zk-auth/package/postcss.config.cjs | 1 + zk-auth/package/public/bonsai-logo-dark.svg | 1 + zk-auth/package/public/bonsai-logo-light.svg | 1 + zk-auth/package/public/google.svg | 1 + zk-auth/package/public/loading.gif | Bin 0 -> 18308 bytes zk-auth/package/public/vite.svg | 1 - zk-auth/package/src/App.tsx | 2 +- zk-auth/package/tailwind.config.ts | 18 ++++++++++++++++++ 9 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 zk-auth/package/postcss.config.cjs create mode 100644 zk-auth/package/public/bonsai-logo-dark.svg create mode 100644 zk-auth/package/public/bonsai-logo-light.svg create mode 100644 zk-auth/package/public/google.svg create mode 100644 zk-auth/package/public/loading.gif delete mode 100644 zk-auth/package/public/vite.svg create mode 100644 zk-auth/package/tailwind.config.ts diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts index 9734d01..7a46041 100644 --- a/zk-auth/middleware.ts +++ b/zk-auth/middleware.ts @@ -5,6 +5,7 @@ const allowedOrigins = [ // 'https://your-allowed-domain1.com', // 'https://your-allowed-domain2.com', "http://localhost:3000", // For local development + "https://zk-auth.vercel.app", ]; export function middleware(request: NextRequest) { diff --git a/zk-auth/package/postcss.config.cjs b/zk-auth/package/postcss.config.cjs new file mode 100644 index 0000000..522f38a --- /dev/null +++ b/zk-auth/package/postcss.config.cjs @@ -0,0 +1 @@ +module.exports = require("@risc0/ui/config/postcss.config.base.cjs"); diff --git a/zk-auth/package/public/bonsai-logo-dark.svg b/zk-auth/package/public/bonsai-logo-dark.svg new file mode 100644 index 0000000..44f94bb --- /dev/null +++ b/zk-auth/package/public/bonsai-logo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/package/public/bonsai-logo-light.svg b/zk-auth/package/public/bonsai-logo-light.svg new file mode 100644 index 0000000..b557f8b --- /dev/null +++ b/zk-auth/package/public/bonsai-logo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/package/public/google.svg b/zk-auth/package/public/google.svg new file mode 100644 index 0000000..c0669b3 --- /dev/null +++ b/zk-auth/package/public/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zk-auth/package/public/loading.gif b/zk-auth/package/public/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e920a2fba83ba1176ffee918fbeb349084a67717 GIT binary patch literal 18308 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 literal 0 HcmV?d00001 diff --git a/zk-auth/package/public/vite.svg b/zk-auth/package/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/zk-auth/package/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx index ec8d28f..48c82fa 100644 --- a/zk-auth/package/src/App.tsx +++ b/zk-auth/package/src/App.tsx @@ -1,4 +1,4 @@ -//import "@risc0/ui/styles/globals.css"; +import "@risc0/ui/styles/globals.css"; import { GoogleOAuthProvider } from "@react-oauth/google"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; diff --git a/zk-auth/package/tailwind.config.ts b/zk-auth/package/tailwind.config.ts new file mode 100644 index 0000000..cf3dba9 --- /dev/null +++ b/zk-auth/package/tailwind.config.ts @@ -0,0 +1,18 @@ +import tailwindConfig from "@risc0/ui/config/tailwind.config.base"; +import deepmerge from "deepmerge"; +import type { Config } from "tailwindcss"; + +const config = deepmerge(tailwindConfig, { + theme: { + fontFamily: { + sans: ["system-ui"], + }, + }, +}) satisfies Config; + +config.content = [ + "./node_modules/@risc0/ui/**/*.{ts,tsx}", + "./src/**/*.{js,jsx,ts,tsx,mdx}", +]; + +export default config; From 9c4f0ad99c0d6f1f2de09ea7e1a0bab3391661b2 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:22:05 -0400 Subject: [PATCH 008/110] fix: middleware2 --- zk-auth/middleware.ts | 69 ++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts index 7a46041..c330fdc 100644 --- a/zk-auth/middleware.ts +++ b/zk-auth/middleware.ts @@ -1,45 +1,40 @@ -import { NextResponse } from "next/server"; -import type { NextRequest } from "next/server"; +import { NextRequest, NextResponse } from "next/server"; -const allowedOrigins = [ - // 'https://your-allowed-domain1.com', - // 'https://your-allowed-domain2.com', - "http://localhost:3000", // For local development - "https://zk-auth.vercel.app", -]; +const allowedOrigins = ["https://zkauth.vercel.app", "http://localhost:3000"]; + +const corsOptions = { + "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", +}; export function middleware(request: NextRequest) { - if (request.nextUrl.pathname.startsWith("/api/")) { - const origin = request.headers.get("origin"); - - if (origin && !allowedOrigins.includes(origin)) { - return new NextResponse(null, { - status: 403, - statusText: "Forbidden", - headers: { - "Content-Type": "text/plain", - }, - }); - } - - // For successful requests, add CORS headers - const response = NextResponse.next(); - - if (origin) { - response.headers.set("Access-Control-Allow-Origin", origin); - } - response.headers.set( - "Access-Control-Allow-Methods", - "GET, POST, PUT, DELETE, OPTIONS", - ); - response.headers.set( - "Access-Control-Allow-Headers", - "Content-Type, Authorization", - ); - return response; + // Check the origin from the request + const origin = request.headers.get("origin") ?? ""; + const isAllowedOrigin = allowedOrigins.includes(origin); + + // Handle preflighted requests + const isPreflight = request.method === "OPTIONS"; + + if (isPreflight) { + const preflightHeaders = { + ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), + ...corsOptions, + }; + return NextResponse.json({}, { headers: preflightHeaders }); } - return NextResponse.next(); + // Handle simple requests + const response = NextResponse.next(); + + if (isAllowedOrigin) { + response.headers.set("Access-Control-Allow-Origin", origin); + } + + Object.entries(corsOptions).forEach(([key, value]) => { + response.headers.set(key, value); + }); + + return response; } export const config = { From 64604f71f856fe10c77285a089de4e6796f04788 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:29:13 -0400 Subject: [PATCH 009/110] fix: middleware3 --- zk-auth/middleware.ts | 53 +++++++++++-------------- zk-auth/package/src/do-snark-proving.ts | 4 +- zk-auth/package/src/do-stark-proving.ts | 4 +- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts index c330fdc..971938e 100644 --- a/zk-auth/middleware.ts +++ b/zk-auth/middleware.ts @@ -1,39 +1,34 @@ -import { NextRequest, NextResponse } from "next/server"; +import { NextResponse } from "next/server"; -const allowedOrigins = ["https://zkauth.vercel.app", "http://localhost:3000"]; +const allowedOrigins = + process.env.NODE_ENV === "production" + ? ["https://zkauth.vercel.app/m", "http://localhost:3000"] + : ["http://localhost:3000"]; -const corsOptions = { - "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", - "Access-Control-Allow-Headers": "Content-Type, Authorization", -}; - -export function middleware(request: NextRequest) { - // Check the origin from the request - const origin = request.headers.get("origin") ?? ""; - const isAllowedOrigin = allowedOrigins.includes(origin); +export function middleware(request: Request) { + const origin = request.headers.get("origin"); - // Handle preflighted requests - const isPreflight = request.method === "OPTIONS"; - - if (isPreflight) { - const preflightHeaders = { - ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), - ...corsOptions, - }; - return NextResponse.json({}, { headers: preflightHeaders }); + if (origin && !allowedOrigins.includes(origin)) { + return new Error("Invalid origin"), { status: 403 }; } - // Handle simple requests - const response = NextResponse.next(); - - if (isAllowedOrigin) { - response.headers.set("Access-Control-Allow-Origin", origin); - } - - Object.entries(corsOptions).forEach(([key, value]) => { - response.headers.set(key, value); + const response = NextResponse.next({ + request: { + ...request, + headers: request.headers, + }, }); + response.headers.set("Access-Control-Allow-Origin", "*"); + response.headers.set( + "Access-Control-Allow-Methods", + "GET, POST, PUT, DELETE, OPTIONS", + ); + response.headers.set( + "Access-Control-Allow-Headers", + "Content-Type, Authorization", + ); + return response; } diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/do-snark-proving.ts index e2dd13a..81565dc 100644 --- a/zk-auth/package/src/do-snark-proving.ts +++ b/zk-auth/package/src/do-snark-proving.ts @@ -8,7 +8,7 @@ type SnarkSessionStatusRes = { async function bonsaiSnarkProving(uuid: string): Promise { const response = await fetch( - "https://zk-auth.vercel.app/api/bonsai/snark-proving", + "https://zkauth.vercel.app/api/bonsai/snark-proving", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -29,7 +29,7 @@ async function getBonsaiSnarkStatus( uuid: string, ): Promise { const response = await fetch( - `https://zk-auth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, + `https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, ); if (!response.ok) { diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts index c0c6a53..31ce0c0 100644 --- a/zk-auth/package/src/do-stark-proving.ts +++ b/zk-auth/package/src/do-stark-proving.ts @@ -12,7 +12,7 @@ async function bonsaiStarkProving({ token, }: { iss: "Google" | "test"; token: string }): Promise { const response = await fetch( - "https://zk-auth.vercel.app/api/bonsai/stark-proving", + "https://zkauth.vercel.app/api/bonsai/stark-proving", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -32,7 +32,7 @@ async function getBonsaiStarkStatus( uuid: string, ): Promise { const response = await fetch( - `https://zk-auth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, + `https://zkauth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, ); if (!response.ok) { From 59674e95ba6afcee0f51facfc6f509ac72d0fa82 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:31:17 -0400 Subject: [PATCH 010/110] fix: middleware4 --- zk-auth/middleware.ts | 37 ------------------------------------- zk-auth/next.config.js | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 38 deletions(-) delete mode 100644 zk-auth/middleware.ts diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts deleted file mode 100644 index 971938e..0000000 --- a/zk-auth/middleware.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NextResponse } from "next/server"; - -const allowedOrigins = - process.env.NODE_ENV === "production" - ? ["https://zkauth.vercel.app/m", "http://localhost:3000"] - : ["http://localhost:3000"]; - -export function middleware(request: Request) { - const origin = request.headers.get("origin"); - - if (origin && !allowedOrigins.includes(origin)) { - return new Error("Invalid origin"), { status: 403 }; - } - - const response = NextResponse.next({ - request: { - ...request, - headers: request.headers, - }, - }); - - response.headers.set("Access-Control-Allow-Origin", "*"); - response.headers.set( - "Access-Control-Allow-Methods", - "GET, POST, PUT, DELETE, OPTIONS", - ); - response.headers.set( - "Access-Control-Allow-Headers", - "Content-Type, Authorization", - ); - - return response; -} - -export const config = { - matcher: "/api/:path*", -}; diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 1695eb1..7779fb4 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,6 +3,28 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, {}); +const config = deepmerge(nextConfigBase, { + async headers() { + return [ + { + // matching all API routes + source: "/api/:path*", + headers: [ + { key: "Access-Control-Allow-Credentials", value: "true" }, + { key: "Access-Control-Allow-Origin", value: "*" }, // replace this your actual origin + { + key: "Access-Control-Allow-Methods", + value: "GET,DELETE,PATCH,POST,PUT", + }, + { + key: "Access-Control-Allow-Headers", + value: + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", + }, + ], + }, + ]; + }, +}); export default config; From 09f02ea3ca1639c2988ba90552f54c9249abfeee Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:35:22 -0400 Subject: [PATCH 011/110] fix: middleware5 --- zk-auth/middleware.ts | 9 +++++++++ zk-auth/next.config.js | 22 ++-------------------- 2 files changed, 11 insertions(+), 20 deletions(-) create mode 100644 zk-auth/middleware.ts diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts new file mode 100644 index 0000000..6dca884 --- /dev/null +++ b/zk-auth/middleware.ts @@ -0,0 +1,9 @@ +import type { NextRequest } from "next/server"; + +export function middleware(request: NextRequest) { + console.log("lol!!!"); +} + +export const config = { + matcher: "/", +}; diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 7779fb4..46460d6 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -4,26 +4,8 @@ import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; const config = deepmerge(nextConfigBase, { - async headers() { - return [ - { - // matching all API routes - source: "/api/:path*", - headers: [ - { key: "Access-Control-Allow-Credentials", value: "true" }, - { key: "Access-Control-Allow-Origin", value: "*" }, // replace this your actual origin - { - key: "Access-Control-Allow-Methods", - value: "GET,DELETE,PATCH,POST,PUT", - }, - { - key: "Access-Control-Allow-Headers", - value: - "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", - }, - ], - }, - ]; + typescript: { + ignoreBuildErrors: true, }, }); From 6738c5e87d23c4ef3e16bfbd053f48ec5ba64831 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:38:37 -0400 Subject: [PATCH 012/110] fix: move middleware to src --- zk-auth/middleware.ts | 9 --------- zk-auth/src/middleware.ts | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 9 deletions(-) delete mode 100644 zk-auth/middleware.ts create mode 100644 zk-auth/src/middleware.ts diff --git a/zk-auth/middleware.ts b/zk-auth/middleware.ts deleted file mode 100644 index 6dca884..0000000 --- a/zk-auth/middleware.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { NextRequest } from "next/server"; - -export function middleware(request: NextRequest) { - console.log("lol!!!"); -} - -export const config = { - matcher: "/", -}; diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts new file mode 100644 index 0000000..c330fdc --- /dev/null +++ b/zk-auth/src/middleware.ts @@ -0,0 +1,42 @@ +import { NextRequest, NextResponse } from "next/server"; + +const allowedOrigins = ["https://zkauth.vercel.app", "http://localhost:3000"]; + +const corsOptions = { + "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", +}; + +export function middleware(request: NextRequest) { + // Check the origin from the request + const origin = request.headers.get("origin") ?? ""; + const isAllowedOrigin = allowedOrigins.includes(origin); + + // Handle preflighted requests + const isPreflight = request.method === "OPTIONS"; + + if (isPreflight) { + const preflightHeaders = { + ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), + ...corsOptions, + }; + return NextResponse.json({}, { headers: preflightHeaders }); + } + + // Handle simple requests + const response = NextResponse.next(); + + if (isAllowedOrigin) { + response.headers.set("Access-Control-Allow-Origin", origin); + } + + Object.entries(corsOptions).forEach(([key, value]) => { + response.headers.set(key, value); + }); + + return response; +} + +export const config = { + matcher: "/api/:path*", +}; From 2fa7c0cbfd105644389f6e838c878e91d8f0a9b7 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:47:28 -0400 Subject: [PATCH 013/110] fix: support images in middleware --- zk-auth/next.config.js | 6 +---- zk-auth/package.json | 2 +- zk-auth/package/bun.lockb | Bin 135349 -> 136388 bytes zk-auth/package/package.json | 2 +- zk-auth/package/public/bonsai-logo-dark.svg | 1 - zk-auth/package/public/bonsai-logo-light.svg | 1 - zk-auth/package/public/google.svg | 1 - zk-auth/package/public/loading.gif | Bin 18308 -> 0 bytes zk-auth/package/src/prove-button.tsx | 13 ++++------ zk-auth/package/src/user-infos.tsx | 7 +++++- zk-auth/src/middleware.ts | 25 ++++++++++++++++++- 11 files changed, 38 insertions(+), 20 deletions(-) delete mode 100644 zk-auth/package/public/bonsai-logo-dark.svg delete mode 100644 zk-auth/package/public/bonsai-logo-light.svg delete mode 100644 zk-auth/package/public/google.svg delete mode 100644 zk-auth/package/public/loading.gif diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 46460d6..1695eb1 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,10 +3,6 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, { - typescript: { - ignoreBuildErrors: true, - }, -}); +const config = deepmerge(nextConfigBase, {}); export default config; diff --git a/zk-auth/package.json b/zk-auth/package.json index ca481d8..b48ffc2 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@react-oauth/google": "0.12.1", - "@risc0/ui": "0.0.167", + "@risc0/ui": "0.0.168", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/bun.lockb b/zk-auth/package/bun.lockb index 1d12ccbd5813a477c223d45351d19b3e20f20510..5c3a44a56eeb281adab9938cbad665dde7af9a4f 100755 GIT binary patch delta 13398 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 \ No newline at end of file diff --git a/zk-auth/package/public/bonsai-logo-light.svg b/zk-auth/package/public/bonsai-logo-light.svg deleted file mode 100644 index b557f8b..0000000 --- a/zk-auth/package/public/bonsai-logo-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zk-auth/package/public/google.svg b/zk-auth/package/public/google.svg deleted file mode 100644 index c0669b3..0000000 --- a/zk-auth/package/public/google.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zk-auth/package/public/loading.gif b/zk-auth/package/public/loading.gif deleted file mode 100644 index e920a2fba83ba1176ffee918fbeb349084a67717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18308 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 diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 5437b75..e271e7e 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -6,14 +6,12 @@ import { cn } from "@risc0/ui/cn"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { Loader } from "@risc0/ui/loader"; import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; -import { useTheme } from "next-themes"; import { useState, useTransition } from "react"; import { doSnarkProving } from "./do-snark-proving"; import { doStarkProving } from "./do-stark-proving"; import { UserInfos } from "./user-infos"; export function ProveButton() { - const { resolvedTheme } = useTheme(); const [isPending, startTransition] = useTransition(); const [_starkResults, setStarkResults] = useLocalStorage( "stark-results", @@ -68,7 +66,10 @@ export function ProveButton() { return address ? ( <> {isPending ? ( - + ) : ( <>

@@ -97,11 +98,7 @@ export function ProveButton() { className="-top-[1px] relative" width={58} height={16} - src={ - resolvedTheme === "dark" - ? "/bonsai-logo-light.svg" - : "/bonsai-logo-dark.svg" - } + src="https://zkauth.vercel.app/bonsai-logo-light.svg" alt="bonsai logo" /> diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index d8096b1..0d83e57 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -19,7 +19,12 @@ export function UserInfos({

{type === "google" && ( <> - Google{" "} + Google{" "} Google )} diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index c330fdc..19605f5 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -7,7 +7,21 @@ const corsOptions = { "Access-Control-Allow-Headers": "Content-Type, Authorization", }; +function isImageRequest(request: NextRequest) { + return ( + request.method === "GET" && + request.nextUrl.pathname.match(/\.(svg|png|jpg|jpeg|gif)$/i) + ); +} + export function middleware(request: NextRequest) { + // Handle image requests + if (isImageRequest(request)) { + const response = NextResponse.next(); + response.headers.set("Access-Control-Allow-Origin", "*"); + return response; + } + // Check the origin from the request const origin = request.headers.get("origin") ?? ""; const isAllowedOrigin = allowedOrigins.includes(origin); @@ -38,5 +52,14 @@ export function middleware(request: NextRequest) { } export const config = { - matcher: "/api/:path*", + matcher: [ + "/api/:path*", + /* + * Match all request paths except for the ones starting with: + * - _next/static (static files) + * - _next/image (image optimization files) + * - favicon.ico, sitemap.xml, robots.txt (metadata files) + */ + "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)", + ], }; From 85c56b25bc7acd7703a8100b9a10cc52ed632289 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:47:44 -0400 Subject: [PATCH 014/110] fix: support images in middleware2 --- zk-auth/src/middleware.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index 19605f5..f56d55e 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -7,21 +7,7 @@ const corsOptions = { "Access-Control-Allow-Headers": "Content-Type, Authorization", }; -function isImageRequest(request: NextRequest) { - return ( - request.method === "GET" && - request.nextUrl.pathname.match(/\.(svg|png|jpg|jpeg|gif)$/i) - ); -} - export function middleware(request: NextRequest) { - // Handle image requests - if (isImageRequest(request)) { - const response = NextResponse.next(); - response.headers.set("Access-Control-Allow-Origin", "*"); - return response; - } - // Check the origin from the request const origin = request.headers.get("origin") ?? ""; const isAllowedOrigin = allowedOrigins.includes(origin); From 144d37954d802ddd7fbf17d3acda628e050cf219 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:48:38 -0400 Subject: [PATCH 015/110] fix: support images in middleware3 --- zk-auth/src/middleware.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index f56d55e..86b852f 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -39,7 +39,6 @@ export function middleware(request: NextRequest) { export const config = { matcher: [ - "/api/:path*", /* * Match all request paths except for the ones starting with: * - _next/static (static files) From 2d4187c72cccbca0b519e68e81ff791bed248140 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 11:57:29 -0400 Subject: [PATCH 016/110] fix: support images in middleware6 --- zk-auth/package/index.html | 2 -- zk-auth/package/src/prove-button.tsx | 9 +------ zk-auth/package/src/user-infos.tsx | 12 +-------- zk-auth/package/vite.config.ts | 17 ++++++++++--- .../public/{ => images}/bonsai-logo-dark.svg | 0 .../public/{ => images}/bonsai-logo-light.svg | 0 zk-auth/public/{ => images}/google.svg | 0 zk-auth/public/{ => images}/loading.gif | Bin zk-auth/src/middleware.ts | 23 ++++++++---------- 9 files changed, 25 insertions(+), 38 deletions(-) rename zk-auth/public/{ => images}/bonsai-logo-dark.svg (100%) rename zk-auth/public/{ => images}/bonsai-logo-light.svg (100%) rename zk-auth/public/{ => images}/google.svg (100%) rename zk-auth/public/{ => images}/loading.gif (100%) diff --git a/zk-auth/package/index.html b/zk-auth/package/index.html index e4b78ea..84b7eb6 100644 --- a/zk-auth/package/index.html +++ b/zk-auth/package/index.html @@ -2,9 +2,7 @@ - - Vite + React + TS

diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index e271e7e..2872333 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -93,14 +93,7 @@ export function ProveButton() { className="flex w-full flex-row items-center gap-1.5" disabled={!!error || isPending} > - Prove with{" "} - bonsai logo + Prove with Bonsai {starkPollingResults && starkPollingResults.length > 0 && ( diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index 0d83e57..744a010 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -17,17 +17,7 @@ export function UserInfos({ {userInfos.email}

- {type === "google" && ( - <> - Google{" "} - Google - - )} + {type === "google" && "Google"}

diff --git a/zk-auth/package/vite.config.ts b/zk-auth/package/vite.config.ts index 861b04b..88e6e46 100644 --- a/zk-auth/package/vite.config.ts +++ b/zk-auth/package/vite.config.ts @@ -1,7 +1,16 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react-swc"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], -}) + plugins: [react()], + build: { + rollupOptions: { + output: { + entryFileNames: `assets/[name].js`, + chunkFileNames: `assets/[name].js`, + assetFileNames: `assets/[name].[ext]`, + }, + }, + }, +}); diff --git a/zk-auth/public/bonsai-logo-dark.svg b/zk-auth/public/images/bonsai-logo-dark.svg similarity index 100% rename from zk-auth/public/bonsai-logo-dark.svg rename to zk-auth/public/images/bonsai-logo-dark.svg diff --git a/zk-auth/public/bonsai-logo-light.svg b/zk-auth/public/images/bonsai-logo-light.svg similarity index 100% rename from zk-auth/public/bonsai-logo-light.svg rename to zk-auth/public/images/bonsai-logo-light.svg diff --git a/zk-auth/public/google.svg b/zk-auth/public/images/google.svg similarity index 100% rename from zk-auth/public/google.svg rename to zk-auth/public/images/google.svg diff --git a/zk-auth/public/loading.gif b/zk-auth/public/images/loading.gif similarity index 100% rename from zk-auth/public/loading.gif rename to zk-auth/public/images/loading.gif diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index 86b852f..7188c06 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -8,14 +8,19 @@ const corsOptions = { }; export function middleware(request: NextRequest) { - // Check the origin from the request const origin = request.headers.get("origin") ?? ""; const isAllowedOrigin = allowedOrigins.includes(origin); + const isImageRoute = request.nextUrl.pathname.startsWith("/images"); - // Handle preflighted requests - const isPreflight = request.method === "OPTIONS"; + // Allow all origins for image routes + if (isImageRoute) { + const response = NextResponse.next(); + response.headers.set("Access-Control-Allow-Origin", "*"); + return response; + } - if (isPreflight) { + // Handle preflighted requests + if (request.method === "OPTIONS") { const preflightHeaders = { ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), ...corsOptions, @@ -38,13 +43,5 @@ export function middleware(request: NextRequest) { } export const config = { - matcher: [ - /* - * Match all request paths except for the ones starting with: - * - _next/static (static files) - * - _next/image (image optimization files) - * - favicon.ico, sitemap.xml, robots.txt (metadata files) - */ - "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)", - ], + matcher: ["/(.*?)"], }; From edeb52ecdaf3dfdddd827d72850bdcd2a310a4e6 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:02:01 -0400 Subject: [PATCH 017/110] fix: support images in middleware7 --- zk-auth/package/src/prove-button.tsx | 9 ++++++++- zk-auth/package/src/user-infos.tsx | 12 +++++++++++- zk-auth/src/app/_components/prove-button.tsx | 4 ++-- zk-auth/src/app/_components/user-infos.tsx | 7 ++++++- zk-auth/src/middleware.ts | 4 ++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 2872333..55cc33c 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -93,7 +93,14 @@ export function ProveButton() { className="flex w-full flex-row items-center gap-1.5" disabled={!!error || isPending} > - Prove with Bonsai + Prove with{" "} + bonsai logo {starkPollingResults && starkPollingResults.length > 0 && ( diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index 744a010..c333a9a 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -17,7 +17,17 @@ export function UserInfos({ {userInfos.email}

- {type === "google" && "Google"} + {type === "google" && ( + <> + Google{" "} + Google + + )}

diff --git a/zk-auth/src/app/_components/prove-button.tsx b/zk-auth/src/app/_components/prove-button.tsx index 1f06dfe..44e5917 100644 --- a/zk-auth/src/app/_components/prove-button.tsx +++ b/zk-auth/src/app/_components/prove-button.tsx @@ -104,8 +104,8 @@ export function ProveButton() { height={16} src={ resolvedTheme === "dark" - ? "/bonsai-logo-light.svg" - : "/bonsai-logo-dark.svg" + ? "/images/bonsai-logo-light.svg" + : "/images/bonsai-logo-dark.svg" } alt="bonsai logo" /> diff --git a/zk-auth/src/app/_components/user-infos.tsx b/zk-auth/src/app/_components/user-infos.tsx index 848734e..cb3f781 100644 --- a/zk-auth/src/app/_components/user-infos.tsx +++ b/zk-auth/src/app/_components/user-infos.tsx @@ -16,7 +16,12 @@ export function UserInfos({ userInfos, type }: { userInfos; type: "google" }) {

{type === "google" && ( <> - Google{" "} + Google{" "} Google )} diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index 7188c06..fb240f2 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -14,8 +14,12 @@ export function middleware(request: NextRequest) { // Allow all origins for image routes if (isImageRoute) { + console.log("Image route detected:", request.nextUrl.pathname); const response = NextResponse.next(); response.headers.set("Access-Control-Allow-Origin", "*"); + // Add additional headers that might be required + response.headers.set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS"); + response.headers.set("Access-Control-Allow-Headers", "Content-Type"); return response; } From fd909eabc80708f2cdc37c4f200f18435183d9d9 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:04:41 -0400 Subject: [PATCH 018/110] fix: support images in middleware8 --- zk-auth/src/middleware.ts | 57 ++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index fb240f2..cce2a88 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -11,6 +11,7 @@ export function middleware(request: NextRequest) { const origin = request.headers.get("origin") ?? ""; const isAllowedOrigin = allowedOrigins.includes(origin); const isImageRoute = request.nextUrl.pathname.startsWith("/images"); + const isApiRoute = request.nextUrl.pathname.startsWith("/api"); // Allow all origins for image routes if (isImageRoute) { @@ -20,32 +21,46 @@ export function middleware(request: NextRequest) { // Add additional headers that might be required response.headers.set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS"); response.headers.set("Access-Control-Allow-Headers", "Content-Type"); + return response; } - // Handle preflighted requests - if (request.method === "OPTIONS") { - const preflightHeaders = { - ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), - ...corsOptions, - }; - return NextResponse.json({}, { headers: preflightHeaders }); - } + // Handle CORS for API routes + if (isApiRoute) { + console.log("API route detected:", request.nextUrl.pathname); - // Handle simple requests - const response = NextResponse.next(); + // Handle preflight requests + if (request.method === "OPTIONS") { + const response = new NextResponse(null, { status: 204 }); + response.headers.set( + "Access-Control-Allow-Origin", + isAllowedOrigin ? origin : (allowedOrigins[0] ?? ""), + ); + response.headers.set( + "Access-Control-Allow-Methods", + corsOptions["Access-Control-Allow-Methods"], + ); + response.headers.set( + "Access-Control-Allow-Headers", + corsOptions["Access-Control-Allow-Headers"], + ); + response.headers.set("Access-Control-Max-Age", "86400"); + return response; + } - if (isAllowedOrigin) { - response.headers.set("Access-Control-Allow-Origin", origin); - } + // Handle actual requests + const response = NextResponse.next(); + response.headers.set( + "Access-Control-Allow-Origin", + isAllowedOrigin ? origin : (allowedOrigins[0] ?? ""), + ); + Object.entries(corsOptions).forEach(([key, value]) => { + response.headers.set(key, value); + }); - Object.entries(corsOptions).forEach(([key, value]) => { - response.headers.set(key, value); - }); + return response; + } - return response; + // For all other routes, proceed without modifying headers + return NextResponse.next(); } - -export const config = { - matcher: ["/(.*?)"], -}; From 6ce5d9049dc6718eb791008f069fd448b9738dba Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:09:38 -0400 Subject: [PATCH 019/110] fix: allow all origins --- zk-auth/package/index.html | 2 +- zk-auth/package/src/App.tsx | 8 +-- zk-auth/package/src/main.tsx | 6 ++- zk-auth/package/src/prove-button.tsx | 3 +- zk-auth/package/src/sign-in-button.tsx | 3 +- zk-auth/src/middleware.ts | 72 +++++++++----------------- 6 files changed, 35 insertions(+), 59 deletions(-) diff --git a/zk-auth/package/index.html b/zk-auth/package/index.html index 84b7eb6..da11a2f 100644 --- a/zk-auth/package/index.html +++ b/zk-auth/package/index.html @@ -5,7 +5,7 @@ -

+
diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx index 48c82fa..2b54430 100644 --- a/zk-auth/package/src/App.tsx +++ b/zk-auth/package/src/App.tsx @@ -9,8 +9,8 @@ import { SnarkTable } from "./snark-table"; import { SignInButton } from "./sign-in-button"; import { ProveButton } from "./prove-button"; -export function App() { - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user +export function App({ address }: { address: string }) { + console.log("YOUR ADDRESS IS:", address); const [googleUserToken] = useLocalStorage("google-token", null); const [currentStep, setCurrentStep] = useState(1); const [starkResults] = useLocalStorage( @@ -39,9 +39,9 @@ export function App() { return ( {currentStep === 2 ? ( - + ) : currentStep === 3 ? ( - + ) : ( <> {starkResults && ( diff --git a/zk-auth/package/src/main.tsx b/zk-auth/package/src/main.tsx index 821a6db..b38cb32 100644 --- a/zk-auth/package/src/main.tsx +++ b/zk-auth/package/src/main.tsx @@ -2,8 +2,10 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import { App } from "./App.tsx"; -createRoot(document.getElementById("root")!).render( +const address = document.getElementById("zkauth")?.getAttribute("data-address"); + +createRoot(document.getElementById("zkauth")!).render( - + , ); diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 55cc33c..4cae6f3 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -11,7 +11,7 @@ import { doSnarkProving } from "./do-snark-proving"; import { doStarkProving } from "./do-stark-proving"; import { UserInfos } from "./user-infos"; -export function ProveButton() { +export function ProveButton({ address }: { address: string }) { const [isPending, startTransition] = useTransition(); const [_starkResults, setStarkResults] = useLocalStorage( "stark-results", @@ -27,7 +27,6 @@ export function ProveButton() { undefined, ); const [error, setError] = useState(); - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user const [snarkPollingResults, setSnarkPollingResults] = useState(); const [starkPollingResults, setStarkPollingResults] = useState(); diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/sign-in-button.tsx index 4995a3f..fd77dc9 100644 --- a/zk-auth/package/src/sign-in-button.tsx +++ b/zk-auth/package/src/sign-in-button.tsx @@ -3,14 +3,13 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import jwtDecode from "jwt-decode"; import { useEffect } from "react"; -export function SignInButton() { +export function SignInButton({ address }: { address: string }) { const [googleUserInfos, setGoogleUserInfos] = useLocalStorage< any | undefined >("google-infos", undefined); const [googleUserToken, setGoogleUserToken] = useLocalStorage< string | undefined >("google-token", undefined); - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user useEffect(() => { if (!googleUserToken || googleUserInfos) { diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts index cce2a88..70ebf7a 100644 --- a/zk-auth/src/middleware.ts +++ b/zk-auth/src/middleware.ts @@ -1,6 +1,6 @@ import { NextRequest, NextResponse } from "next/server"; -const allowedOrigins = ["https://zkauth.vercel.app", "http://localhost:3000"]; +const allowedOrigins = ["https://acme.com", "https://my-app.org"]; const corsOptions = { "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", @@ -8,59 +8,35 @@ const corsOptions = { }; export function middleware(request: NextRequest) { + // Check the origin from the request const origin = request.headers.get("origin") ?? ""; - const isAllowedOrigin = allowedOrigins.includes(origin); - const isImageRoute = request.nextUrl.pathname.startsWith("/images"); - const isApiRoute = request.nextUrl.pathname.startsWith("/api"); + const isAllowedOrigin = true; // allowedOrigins.includes(origin); - // Allow all origins for image routes - if (isImageRoute) { - console.log("Image route detected:", request.nextUrl.pathname); - const response = NextResponse.next(); - response.headers.set("Access-Control-Allow-Origin", "*"); - // Add additional headers that might be required - response.headers.set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS"); - response.headers.set("Access-Control-Allow-Headers", "Content-Type"); + // Handle preflighted requests + const isPreflight = request.method === "OPTIONS"; - return response; + if (isPreflight) { + const preflightHeaders = { + ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), + ...corsOptions, + }; + return NextResponse.json({}, { headers: preflightHeaders }); } - // Handle CORS for API routes - if (isApiRoute) { - console.log("API route detected:", request.nextUrl.pathname); + // Handle simple requests + const response = NextResponse.next(); - // Handle preflight requests - if (request.method === "OPTIONS") { - const response = new NextResponse(null, { status: 204 }); - response.headers.set( - "Access-Control-Allow-Origin", - isAllowedOrigin ? origin : (allowedOrigins[0] ?? ""), - ); - response.headers.set( - "Access-Control-Allow-Methods", - corsOptions["Access-Control-Allow-Methods"], - ); - response.headers.set( - "Access-Control-Allow-Headers", - corsOptions["Access-Control-Allow-Headers"], - ); - response.headers.set("Access-Control-Max-Age", "86400"); - return response; - } - - // Handle actual requests - const response = NextResponse.next(); - response.headers.set( - "Access-Control-Allow-Origin", - isAllowedOrigin ? origin : (allowedOrigins[0] ?? ""), - ); - Object.entries(corsOptions).forEach(([key, value]) => { - response.headers.set(key, value); - }); - - return response; + if (isAllowedOrigin) { + response.headers.set("Access-Control-Allow-Origin", origin); } - // For all other routes, proceed without modifying headers - return NextResponse.next(); + Object.entries(corsOptions).forEach(([key, value]) => { + response.headers.set(key, value); + }); + + return response; } + +export const config = { + matcher: "/api/:path*", +}; From d918fd14bb5d206011cf637647bd8eb05e143727 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:14:03 -0400 Subject: [PATCH 020/110] fix: allow all origins --- zk-auth/package/src/do-snark-proving.ts | 4 +++ zk-auth/package/src/do-stark-proving.ts | 4 +++ zk-auth/src/middleware.ts | 42 ------------------------- 3 files changed, 8 insertions(+), 42 deletions(-) delete mode 100644 zk-auth/src/middleware.ts diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/do-snark-proving.ts index 81565dc..6700b2d 100644 --- a/zk-auth/package/src/do-snark-proving.ts +++ b/zk-auth/package/src/do-snark-proving.ts @@ -11,6 +11,7 @@ async function bonsaiSnarkProving(uuid: string): Promise { "https://zkauth.vercel.app/api/bonsai/snark-proving", { method: "POST", + mode: "no-cors", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uuid }), }, @@ -30,6 +31,9 @@ async function getBonsaiSnarkStatus( ): Promise { const response = await fetch( `https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, + { + mode: "no-cors", + }, ); if (!response.ok) { diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts index 31ce0c0..ff46774 100644 --- a/zk-auth/package/src/do-stark-proving.ts +++ b/zk-auth/package/src/do-stark-proving.ts @@ -17,6 +17,7 @@ async function bonsaiStarkProving({ method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ iss, token }), + mode: "no-cors", }, ); if (!response.ok) { @@ -33,6 +34,9 @@ async function getBonsaiStarkStatus( ): Promise { const response = await fetch( `https://zkauth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, + { + mode: "no-cors", + }, ); if (!response.ok) { diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts deleted file mode 100644 index 70ebf7a..0000000 --- a/zk-auth/src/middleware.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; - -const allowedOrigins = ["https://acme.com", "https://my-app.org"]; - -const corsOptions = { - "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", - "Access-Control-Allow-Headers": "Content-Type, Authorization", -}; - -export function middleware(request: NextRequest) { - // Check the origin from the request - const origin = request.headers.get("origin") ?? ""; - const isAllowedOrigin = true; // allowedOrigins.includes(origin); - - // Handle preflighted requests - const isPreflight = request.method === "OPTIONS"; - - if (isPreflight) { - const preflightHeaders = { - ...(isAllowedOrigin && { "Access-Control-Allow-Origin": origin }), - ...corsOptions, - }; - return NextResponse.json({}, { headers: preflightHeaders }); - } - - // Handle simple requests - const response = NextResponse.next(); - - if (isAllowedOrigin) { - response.headers.set("Access-Control-Allow-Origin", origin); - } - - Object.entries(corsOptions).forEach(([key, value]) => { - response.headers.set(key, value); - }); - - return response; -} - -export const config = { - matcher: "/api/:path*", -}; From cbd4a674a656fa1e95eac988213ebda8a30eaeec Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:15:21 -0400 Subject: [PATCH 021/110] fix: enable cors --- zk-auth/next.config.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 1695eb1..cd4f444 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,6 +3,28 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, {}); +const config = deepmerge(nextConfigBase, { + async headers() { + return [ + { + // matching all API routes + source: "/api/:path*", + headers: [ + { key: "Access-Control-Allow-Credentials", value: "true" }, + { key: "Access-Control-Allow-Origin", value: "*" }, + { + key: "Access-Control-Allow-Methods", + value: "GET,OPTIONS,PATCH,DELETE,POST,PUT", + }, + { + key: "Access-Control-Allow-Headers", + value: + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", + }, + ], + }, + ]; + }, +}); export default config; From c609661290e63108674f2acdde7a3f5118e02500 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:20:11 -0400 Subject: [PATCH 022/110] fix: enable cors55 --- zk-auth/next.config.js | 24 +---------- zk-auth/package/src/do-snark-proving.ts | 4 -- zk-auth/package/src/do-stark-proving.ts | 4 -- .../src/app/api/bonsai/stark-proving/route.ts | 35 +++++++++++++++- .../src/app/api/bonsai/stark-status/route.ts | 40 +++++++++++++++++-- 5 files changed, 71 insertions(+), 36 deletions(-) diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index cd4f444..1695eb1 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,28 +3,6 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, { - async headers() { - return [ - { - // matching all API routes - source: "/api/:path*", - headers: [ - { key: "Access-Control-Allow-Credentials", value: "true" }, - { key: "Access-Control-Allow-Origin", value: "*" }, - { - key: "Access-Control-Allow-Methods", - value: "GET,OPTIONS,PATCH,DELETE,POST,PUT", - }, - { - key: "Access-Control-Allow-Headers", - value: - "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", - }, - ], - }, - ]; - }, -}); +const config = deepmerge(nextConfigBase, {}); export default config; diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/do-snark-proving.ts index 6700b2d..81565dc 100644 --- a/zk-auth/package/src/do-snark-proving.ts +++ b/zk-auth/package/src/do-snark-proving.ts @@ -11,7 +11,6 @@ async function bonsaiSnarkProving(uuid: string): Promise { "https://zkauth.vercel.app/api/bonsai/snark-proving", { method: "POST", - mode: "no-cors", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uuid }), }, @@ -31,9 +30,6 @@ async function getBonsaiSnarkStatus( ): Promise { const response = await fetch( `https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, - { - mode: "no-cors", - }, ); if (!response.ok) { diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts index ff46774..31ce0c0 100644 --- a/zk-auth/package/src/do-stark-proving.ts +++ b/zk-auth/package/src/do-stark-proving.ts @@ -17,7 +17,6 @@ async function bonsaiStarkProving({ method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ iss, token }), - mode: "no-cors", }, ); if (!response.ok) { @@ -34,9 +33,6 @@ async function getBonsaiStarkStatus( ): Promise { const response = await fetch( `https://zkauth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, - { - mode: "no-cors", - }, ); if (!response.ok) { diff --git a/zk-auth/src/app/api/bonsai/stark-proving/route.ts b/zk-auth/src/app/api/bonsai/stark-proving/route.ts index 0e00b26..4db4d9e 100644 --- a/zk-auth/src/app/api/bonsai/stark-proving/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-proving/route.ts @@ -7,11 +7,42 @@ export async function POST(request: NextRequest) { try { const uuid = await bonsaiStarkProving({ iss, token }); - return NextResponse.json({ uuid }); + const response = NextResponse.json({ uuid }); + + // Add CORS headers + response.headers.set( + "Access-Control-Allow-Origin", + "http://localhost:3000", + ); + response.headers.set("Access-Control-Allow-Methods", "POST"); + response.headers.set("Access-Control-Allow-Headers", "Content-Type"); + + return response; } catch (error) { - return NextResponse.json( + const errorResponse = NextResponse.json( { error: "Internal Server Error" }, { status: 500 }, ); + + // Add CORS headers to error response as well + errorResponse.headers.set( + "Access-Control-Allow-Origin", + "http://localhost:3000", + ); + errorResponse.headers.set("Access-Control-Allow-Methods", "POST"); + errorResponse.headers.set("Access-Control-Allow-Headers", "Content-Type"); + + return errorResponse; } } + +// Handle OPTIONS request for preflight +export function OPTIONS() { + const response = new NextResponse(null, { status: 204 }); + + response.headers.set("Access-Control-Allow-Origin", "http://localhost:3000"); + response.headers.set("Access-Control-Allow-Methods", "POST"); + response.headers.set("Access-Control-Allow-Headers", "Content-Type"); + + return response; +} diff --git a/zk-auth/src/app/api/bonsai/stark-status/route.ts b/zk-auth/src/app/api/bonsai/stark-status/route.ts index 9d73b20..5325600 100644 --- a/zk-auth/src/app/api/bonsai/stark-status/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-status/route.ts @@ -5,17 +5,51 @@ export async function GET(request: NextRequest) { const uuid = request.nextUrl.searchParams.get("uuid"); if (!uuid) { - return NextResponse.json({ error: "Invalid UUID" }, { status: 400 }); + const errorResponse = NextResponse.json( + { error: "Invalid UUID" }, + { status: 400 }, + ); + // Add CORS headers to error response + errorResponse.headers.set( + "Access-Control-Allow-Origin", + "http://localhost:3000", + ); + errorResponse.headers.set("Access-Control-Allow-Methods", "GET"); + return errorResponse; } try { const status = await getBonsaiStarkStatus({ uuid }); - return NextResponse.json(status); + const response = NextResponse.json(status); + // Add CORS headers + response.headers.set( + "Access-Control-Allow-Origin", + "http://localhost:3000", + ); + response.headers.set("Access-Control-Allow-Methods", "GET"); + return response; } catch (error) { - return NextResponse.json( + const errorResponse = NextResponse.json( { error: "Internal Server Error" }, { status: 500 }, ); + // Add CORS headers to error response + errorResponse.headers.set( + "Access-Control-Allow-Origin", + "http://localhost:3000", + ); + errorResponse.headers.set("Access-Control-Allow-Methods", "GET"); + return errorResponse; } } + +// Handle OPTIONS request for preflight +export function OPTIONS() { + const response = new NextResponse(null, { status: 204 }); + + response.headers.set("Access-Control-Allow-Origin", "http://localhost:3000"); + response.headers.set("Access-Control-Allow-Methods", "GET"); + + return response; +} From 6523571464848f0edb66822ed7071d024b956fd1 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:24:21 -0400 Subject: [PATCH 023/110] fix: last try --- zk-auth/src/app/_utils/set-cors-headers.ts | 8 +++++ .../src/app/api/bonsai/stark-proving/route.ts | 29 +++---------------- .../src/app/api/bonsai/stark-status/route.ts | 29 ++++--------------- 3 files changed, 17 insertions(+), 49 deletions(-) create mode 100644 zk-auth/src/app/_utils/set-cors-headers.ts diff --git a/zk-auth/src/app/_utils/set-cors-headers.ts b/zk-auth/src/app/_utils/set-cors-headers.ts new file mode 100644 index 0000000..8ead4fb --- /dev/null +++ b/zk-auth/src/app/_utils/set-cors-headers.ts @@ -0,0 +1,8 @@ +import type { NextResponse } from "next/server"; + +// Helper function to set CORS headers +export function setCorsHeaders(response: NextResponse) { + response.headers.set("Access-Control-Allow-Origin", "*"); + response.headers.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); + response.headers.set("Access-Control-Allow-Headers", "Content-Type"); +} diff --git a/zk-auth/src/app/api/bonsai/stark-proving/route.ts b/zk-auth/src/app/api/bonsai/stark-proving/route.ts index 4db4d9e..bba6202 100644 --- a/zk-auth/src/app/api/bonsai/stark-proving/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-proving/route.ts @@ -1,48 +1,27 @@ import { NextRequest, NextResponse } from "next/server"; import { bonsaiStarkProving } from "~/app/_lib/bonsai-proving"; +import { setCorsHeaders } from "~/app/_utils/set-cors-headers"; export async function POST(request: NextRequest) { const { iss, token } = await request.json(); try { const uuid = await bonsaiStarkProving({ iss, token }); - const response = NextResponse.json({ uuid }); - - // Add CORS headers - response.headers.set( - "Access-Control-Allow-Origin", - "http://localhost:3000", - ); - response.headers.set("Access-Control-Allow-Methods", "POST"); - response.headers.set("Access-Control-Allow-Headers", "Content-Type"); - + setCorsHeaders(response); return response; } catch (error) { const errorResponse = NextResponse.json( { error: "Internal Server Error" }, { status: 500 }, ); - - // Add CORS headers to error response as well - errorResponse.headers.set( - "Access-Control-Allow-Origin", - "http://localhost:3000", - ); - errorResponse.headers.set("Access-Control-Allow-Methods", "POST"); - errorResponse.headers.set("Access-Control-Allow-Headers", "Content-Type"); - + setCorsHeaders(errorResponse); return errorResponse; } } -// Handle OPTIONS request for preflight export function OPTIONS() { const response = new NextResponse(null, { status: 204 }); - - response.headers.set("Access-Control-Allow-Origin", "http://localhost:3000"); - response.headers.set("Access-Control-Allow-Methods", "POST"); - response.headers.set("Access-Control-Allow-Headers", "Content-Type"); - + setCorsHeaders(response); return response; } diff --git a/zk-auth/src/app/api/bonsai/stark-status/route.ts b/zk-auth/src/app/api/bonsai/stark-status/route.ts index 5325600..d0149e0 100644 --- a/zk-auth/src/app/api/bonsai/stark-status/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-status/route.ts @@ -1,5 +1,6 @@ import { NextRequest, NextResponse } from "next/server"; import { getBonsaiStarkStatus } from "~/app/_lib/bonsai-proving"; +import { setCorsHeaders } from "~/app/_utils/set-cors-headers"; export async function GET(request: NextRequest) { const uuid = request.nextUrl.searchParams.get("uuid"); @@ -9,47 +10,27 @@ export async function GET(request: NextRequest) { { error: "Invalid UUID" }, { status: 400 }, ); - // Add CORS headers to error response - errorResponse.headers.set( - "Access-Control-Allow-Origin", - "http://localhost:3000", - ); - errorResponse.headers.set("Access-Control-Allow-Methods", "GET"); + setCorsHeaders(errorResponse); return errorResponse; } try { const status = await getBonsaiStarkStatus({ uuid }); - const response = NextResponse.json(status); - // Add CORS headers - response.headers.set( - "Access-Control-Allow-Origin", - "http://localhost:3000", - ); - response.headers.set("Access-Control-Allow-Methods", "GET"); + setCorsHeaders(response); return response; } catch (error) { const errorResponse = NextResponse.json( { error: "Internal Server Error" }, { status: 500 }, ); - // Add CORS headers to error response - errorResponse.headers.set( - "Access-Control-Allow-Origin", - "http://localhost:3000", - ); - errorResponse.headers.set("Access-Control-Allow-Methods", "GET"); + setCorsHeaders(errorResponse); return errorResponse; } } -// Handle OPTIONS request for preflight export function OPTIONS() { const response = new NextResponse(null, { status: 204 }); - - response.headers.set("Access-Control-Allow-Origin", "http://localhost:3000"); - response.headers.set("Access-Control-Allow-Methods", "GET"); - + setCorsHeaders(response); return response; } From a6da943cf0576b3f25593bc66b4b32524a57559b Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:28:34 -0400 Subject: [PATCH 024/110] fix: last try2 --- zk-auth/bun.lockb | Bin 156114 -> 151109 bytes zk-auth/package.json | 1 + .../src/app/api/bonsai/stark-proving/route.ts | 68 +++++++++++----- .../src/app/api/bonsai/stark-status/route.ts | 75 +++++++++++------- 4 files changed, 94 insertions(+), 50 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 385f8bd76e7d9100f31ab203c8a7e92d9ef4b6d3..14003f161285b1b1b8e3f5171f1920a84441bebb 100755 GIT binary patch delta 28278 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 b`LZIvm*lu3qK$NtQ778%sM${1SpEM1fQd+p delta 31026 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 { + fn(req, res, (result: any) => { + if (result instanceof Error) { + return reject(result); + } + return resolve(result); + }); + }); } -export function OPTIONS() { - const response = new NextResponse(null, { status: 204 }); - setCorsHeaders(response); - return response; +export default async function handler( + req: NextApiRequest, + res: NextApiResponse, +) { + // Run the middleware + await runMiddleware(req, res, cors); + + if (req.method === "OPTIONS") { + return res.status(200).end(); + } + + if (req.method === "POST") { + const { iss, token } = req.body; + + try { + const uuid = await bonsaiStarkProving({ iss, token }); + res.status(200).json({ uuid }); + } catch (error) { + res.status(500).json({ error: "Internal Server Error" }); + } + } else { + res.setHeader("Allow", ["POST"]); + res.status(405).end(`Method ${req.method} Not Allowed`); + } } diff --git a/zk-auth/src/app/api/bonsai/stark-status/route.ts b/zk-auth/src/app/api/bonsai/stark-status/route.ts index d0149e0..136e19a 100644 --- a/zk-auth/src/app/api/bonsai/stark-status/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-status/route.ts @@ -1,36 +1,53 @@ -import { NextRequest, NextResponse } from "next/server"; +import type { NextApiRequest, NextApiResponse } from "next"; +import Cors from "cors"; import { getBonsaiStarkStatus } from "~/app/_lib/bonsai-proving"; -import { setCorsHeaders } from "~/app/_utils/set-cors-headers"; -export async function GET(request: NextRequest) { - const uuid = request.nextUrl.searchParams.get("uuid"); +const cors = Cors({ + methods: ["GET", "OPTIONS"], + origin: "*", // For development. In production, specify your client's origin + optionsSuccessStatus: 200, +}); - if (!uuid) { - const errorResponse = NextResponse.json( - { error: "Invalid UUID" }, - { status: 400 }, - ); - setCorsHeaders(errorResponse); - return errorResponse; - } +function runMiddleware( + req: NextApiRequest, + res: NextApiResponse, + fn: Function, +) { + return new Promise((resolve, reject) => { + fn(req, res, (result: any) => { + if (result instanceof Error) { + return reject(result); + } + return resolve(result); + }); + }); +} - try { - const status = await getBonsaiStarkStatus({ uuid }); - const response = NextResponse.json(status); - setCorsHeaders(response); - return response; - } catch (error) { - const errorResponse = NextResponse.json( - { error: "Internal Server Error" }, - { status: 500 }, - ); - setCorsHeaders(errorResponse); - return errorResponse; +export default async function handler( + req: NextApiRequest, + res: NextApiResponse, +) { + await runMiddleware(req, res, cors); + + if (req.method === "OPTIONS") { + return res.status(200).end(); } -} -export function OPTIONS() { - const response = new NextResponse(null, { status: 204 }); - setCorsHeaders(response); - return response; + if (req.method === "GET") { + const { uuid } = req.query; + + if (!uuid || Array.isArray(uuid)) { + return res.status(400).json({ error: "Invalid UUID" }); + } + + try { + const status = await getBonsaiStarkStatus({ uuid }); + res.status(200).json(status); + } catch (error) { + res.status(500).json({ error: "Internal Server Error" }); + } + } else { + res.setHeader("Allow", ["GET"]); + res.status(405).end(`Method ${req.method} Not Allowed`); + } } From b542c1eb83814226a61fc2da0c0a259cb7429521 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:36:15 -0400 Subject: [PATCH 025/110] fix: last try3 --- zk-auth/src/app/_utils/set-cors-headers.ts | 8 --- .../src/app/api/bonsai/stark-proving/route.ts | 58 ++++--------------- .../src/app/api/bonsai/stark-status/route.ts | 58 +++++-------------- zk-auth/src/middleware.ts | 7 +++ 4 files changed, 31 insertions(+), 100 deletions(-) delete mode 100644 zk-auth/src/app/_utils/set-cors-headers.ts create mode 100644 zk-auth/src/middleware.ts diff --git a/zk-auth/src/app/_utils/set-cors-headers.ts b/zk-auth/src/app/_utils/set-cors-headers.ts deleted file mode 100644 index 8ead4fb..0000000 --- a/zk-auth/src/app/_utils/set-cors-headers.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { NextResponse } from "next/server"; - -// Helper function to set CORS headers -export function setCorsHeaders(response: NextResponse) { - response.headers.set("Access-Control-Allow-Origin", "*"); - response.headers.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); - response.headers.set("Access-Control-Allow-Headers", "Content-Type"); -} diff --git a/zk-auth/src/app/api/bonsai/stark-proving/route.ts b/zk-auth/src/app/api/bonsai/stark-proving/route.ts index 19343ed..0e00b26 100644 --- a/zk-auth/src/app/api/bonsai/stark-proving/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-proving/route.ts @@ -1,53 +1,17 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import Cors from "cors"; +import { NextRequest, NextResponse } from "next/server"; import { bonsaiStarkProving } from "~/app/_lib/bonsai-proving"; -// Initialize the cors middleware -const cors = Cors({ - methods: ["POST", "OPTIONS"], - origin: "*", // For development. In production, specify your client's origin - optionsSuccessStatus: 200, -}); +export async function POST(request: NextRequest) { + const { iss, token } = await request.json(); -// Helper method to wait for a middleware to execute before continuing -// And to throw an error when an error happens in a middleware -function runMiddleware( - req: NextApiRequest, - res: NextApiResponse, - fn: Function, -) { - return new Promise((resolve, reject) => { - fn(req, res, (result: any) => { - if (result instanceof Error) { - return reject(result); - } - return resolve(result); - }); - }); -} - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - // Run the middleware - await runMiddleware(req, res, cors); - - if (req.method === "OPTIONS") { - return res.status(200).end(); - } - - if (req.method === "POST") { - const { iss, token } = req.body; + try { + const uuid = await bonsaiStarkProving({ iss, token }); - try { - const uuid = await bonsaiStarkProving({ iss, token }); - res.status(200).json({ uuid }); - } catch (error) { - res.status(500).json({ error: "Internal Server Error" }); - } - } else { - res.setHeader("Allow", ["POST"]); - res.status(405).end(`Method ${req.method} Not Allowed`); + return NextResponse.json({ uuid }); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); } } diff --git a/zk-auth/src/app/api/bonsai/stark-status/route.ts b/zk-auth/src/app/api/bonsai/stark-status/route.ts index 136e19a..9d73b20 100644 --- a/zk-auth/src/app/api/bonsai/stark-status/route.ts +++ b/zk-auth/src/app/api/bonsai/stark-status/route.ts @@ -1,53 +1,21 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import Cors from "cors"; +import { NextRequest, NextResponse } from "next/server"; import { getBonsaiStarkStatus } from "~/app/_lib/bonsai-proving"; -const cors = Cors({ - methods: ["GET", "OPTIONS"], - origin: "*", // For development. In production, specify your client's origin - optionsSuccessStatus: 200, -}); +export async function GET(request: NextRequest) { + const uuid = request.nextUrl.searchParams.get("uuid"); -function runMiddleware( - req: NextApiRequest, - res: NextApiResponse, - fn: Function, -) { - return new Promise((resolve, reject) => { - fn(req, res, (result: any) => { - if (result instanceof Error) { - return reject(result); - } - return resolve(result); - }); - }); -} - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - await runMiddleware(req, res, cors); - - if (req.method === "OPTIONS") { - return res.status(200).end(); + if (!uuid) { + return NextResponse.json({ error: "Invalid UUID" }, { status: 400 }); } - if (req.method === "GET") { - const { uuid } = req.query; - - if (!uuid || Array.isArray(uuid)) { - return res.status(400).json({ error: "Invalid UUID" }); - } + try { + const status = await getBonsaiStarkStatus({ uuid }); - try { - const status = await getBonsaiStarkStatus({ uuid }); - res.status(200).json(status); - } catch (error) { - res.status(500).json({ error: "Internal Server Error" }); - } - } else { - res.setHeader("Allow", ["GET"]); - res.status(405).end(`Method ${req.method} Not Allowed`); + return NextResponse.json(status); + } catch (error) { + return NextResponse.json( + { error: "Internal Server Error" }, + { status: 500 }, + ); } } diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts new file mode 100644 index 0000000..abdca16 --- /dev/null +++ b/zk-auth/src/middleware.ts @@ -0,0 +1,7 @@ +import { NextResponse } from "next/server"; + +export function middleware() { + const response = NextResponse.next(); + response.headers.set("Access-Control-Allow-Origin", "*"); + return response; +} From f1b8cf30d50ff15fe21fe97501dca717efe548bb Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:37:21 -0400 Subject: [PATCH 026/110] fix: last try4 --- zk-auth/next.config.js | 24 +++++++++++++++++++++++- zk-auth/src/middleware.ts | 7 ------- 2 files changed, 23 insertions(+), 8 deletions(-) delete mode 100644 zk-auth/src/middleware.ts diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 1695eb1..04eaa3a 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,6 +3,28 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, {}); +const config = deepmerge(nextConfigBase, { + async headers() { + return [ + { + source: "/api/:path*", + headers: [ + { + key: "Access-Control-Allow-Origin", + value: "*", // Set your origin + }, + { + key: "Access-Control-Allow-Methods", + value: "GET, POST, PUT, DELETE, OPTIONS", + }, + { + key: "Access-Control-Allow-Headers", + value: "Content-Type, Authorization", + }, + ], + }, + ]; + }, +}); export default config; diff --git a/zk-auth/src/middleware.ts b/zk-auth/src/middleware.ts deleted file mode 100644 index abdca16..0000000 --- a/zk-auth/src/middleware.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { NextResponse } from "next/server"; - -export function middleware() { - const response = NextResponse.next(); - response.headers.set("Access-Control-Allow-Origin", "*"); - return response; -} From 926dbd246f6b75c66102df94bda5096760b6b43a Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:48:14 -0400 Subject: [PATCH 027/110] fix: vite --- zk-auth/next.config.js | 24 +------- zk-auth/public/vite/assets/index.css | 1 + zk-auth/public/vite/assets/index.js | 84 ++++++++++++++++++++++++++++ zk-auth/public/vite/index.html | 12 ++++ 4 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 zk-auth/public/vite/assets/index.css create mode 100644 zk-auth/public/vite/assets/index.js create mode 100644 zk-auth/public/vite/index.html diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 04eaa3a..1695eb1 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,28 +3,6 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, { - async headers() { - return [ - { - source: "/api/:path*", - headers: [ - { - key: "Access-Control-Allow-Origin", - value: "*", // Set your origin - }, - { - key: "Access-Control-Allow-Methods", - value: "GET, POST, PUT, DELETE, OPTIONS", - }, - { - key: "Access-Control-Allow-Headers", - value: "Content-Type, Authorization", - }, - ], - }, - ]; - }, -}); +const config = deepmerge(nextConfigBase, {}); export default config; diff --git a/zk-auth/public/vite/assets/index.css b/zk-auth/public/vite/assets/index.css new file mode 100644 index 0000000..126efbf --- /dev/null +++ b/zk-auth/public/vite/assets/index.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:system-ui;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root{--background: 0 0% 100%;--foreground: 20 14.3% 4.1%;--card: 0 0% 100%;--card-foreground: 20 14.3% 4.1%;--popover: 0 0% 100%;--popover-foreground: 20 14.3% 4.1%;--primary: 24 9.8% 10%;--primary-foreground: 60 9.1% 97.8%;--secondary: 60 4.8% 95.9%;--secondary-foreground: 24 9.8% 10%;--muted: 60 4.8% 95.9%;--muted-foreground: 25 5.3% 44.7%;--accent: 60 4.8% 95.9%;--accent-foreground: 24 9.8% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 60 9.1% 97.8%;--border: 20 5.9% 90%;--input: 20 5.9% 90%;--ring: 20 14.3% 4.1%;--radius: .3rem;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%}.dark{--background: 20 14.3% 4.1%;--foreground: 60 9.1% 97.8%;--card: 20 14.3% 4.1%;--card-foreground: 60 9.1% 97.8%;--popover: 20 14.3% 4.1%;--popover-foreground: 60 9.1% 97.8%;--primary: 61 100% 80.8%;--primary-foreground: 0 0% 0%;--secondary: 12 6.5% 15.1%;--secondary-foreground: 60 9.1% 97.8%;--muted: 12 6.5% 15.1%;--muted-foreground: 24 5.4% 63.9%;--accent: 12 6.5% 15.1%;--accent-foreground: 60 9.1% 97.8%;--destructive: 0 92.8% 70.6%;--destructive-foreground: 60 9.1% 97.8%;--border: 12 6.5% 15.1%;--input: 12 6.5% 15.1%;--ring: 61 100% 80.8%;--chart-1: 220 70% 50%;--chart-2: 160 60% 45%;--chart-3: 30 80% 55%;--chart-4: 280 65% 60%;--chart-5: 340 75% 55%}*{border-color:hsl(var(--border))}body{min-height:100dvh;background-color:hsl(var(--background));font-family:system-ui;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-display:swap}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.title{font-size:1.875rem;line-height:2.25rem;font-weight:700}.link{color:hsl(var(--muted-foreground));text-underline-offset:4px}.link:hover{text-decoration-line:underline}.link:is(.dark *){color:hsl(var(--primary))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-top-\[1px\]{top:-1px}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-2\.5{top:.625rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.z-\[1\]{z-index:1}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1{margin-bottom:.25rem}.mb-3{margin-bottom:.75rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-0{margin-right:0}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-24{margin-top:6rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\[0\.25rem\]{margin-top:.25rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.min-h-\[60px\]{min-height:60px}.w-0{width:0px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-72{width:18rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[calc\(100\%-5rem\)\]{width:calc(100% - 5rem)}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-0{max-width:0px}.max-w-3{max-width:.75rem}.max-w-4{max-width:1rem}.max-w-5{max-width:1.25rem}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in-up{animation:fade-in-up 1s ease-in-out}@keyframes head-shake{0%{transform:translate(0)}6.5%{transform:translate(-6px) rotateY(-9deg)}18.5%{transform:translate(5px) rotateY(7deg)}31.5%{transform:translate(-3px) rotateY(-5deg)}43.5%{transform:translate(2px) rotateY(3deg)}50%{transform:translate(0)}}.animate-head-shake{animation:head-shake 1s ease-in-out}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[--color-border\]{border-color:var(--color-border)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-transparent{border-color:transparent}.bg-\[--color-bg\]{background-color:var(--color-bg)}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-neutral-50{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.fill-background{fill:hsl(var(--background))}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-3{padding-bottom:.75rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.ordinal{--tw-ordinal: ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-border{color:hsl(var(--border))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.paused{animation-play-state:paused}html{scrollbar-gutter:stable}body[style]{margin:0 auto!important}body[data-scroll-locked]{overflow:hidden;position:fixed;width:100%}iframe{color-scheme:auto}.lucide{stroke-width:1.75px!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.last\:overflow-x-hidden:last-child{overflow-x:hidden}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary-foreground:hover{color:hsl(var(--primary-foreground))}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:focus-visible~.peer-focus-visible\:text-primary{color:hsl(var(--primary))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-60{opacity:.6}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-checked\:border-primary[aria-checked=true]{border-color:hsl(var(--primary))}.aria-checked\:bg-primary[aria-checked=true]{background-color:hsl(var(--primary))}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:rounded-b-none[data-state=active]{border-bottom-right-radius:0;border-bottom-left-radius:0}.data-\[state\=active\]\:border-b-2[data-state=active]{border-bottom-width:2px}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:hsl(var(--primary))}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent) / .5)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:bg-neutral-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}.dark\:bg-white:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.dark\:fill-white:is(.dark *){fill:#fff}.dark\:text-green-500:is(.dark *){--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.dark\:text-red-500:is(.dark *){--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:absolute{position:absolute}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:px-0{padding-left:0;padding-right:0}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border) / .5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px} diff --git a/zk-auth/public/vite/assets/index.js b/zk-auth/public/vite/assets/index.js new file mode 100644 index 0000000..485cdd9 --- /dev/null +++ b/zk-auth/public/vite/assets/index.js @@ -0,0 +1,84 @@ +var Uh=(t,l)=>()=>(l||t((l={exports:{}}).exports,l),l.exports);var Zp=Uh((Tl,_l)=>{(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const u of n)if(u.type==="childList")for(const i of u.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function e(n){const u={};return n.integrity&&(u.integrity=n.integrity),n.referrerPolicy&&(u.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?u.credentials="include":n.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function a(n){if(n.ep)return;n.ep=!0;const u=e(n);fetch(n.href,u)}})();function wh(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var hs={exports:{}},Iu={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ch=Symbol.for("react.transitional.element"),Hh=Symbol.for("react.fragment");function vs(t,l,e){var a=null;if(e!==void 0&&(a=""+e),l.key!==void 0&&(a=""+l.key),"key"in l){e={};for(var n in l)n!=="key"&&(e[n]=l[n])}else e=l;return l=e.ref,{$$typeof:Ch,type:t,key:a,ref:l!==void 0?l:null,props:e}}Iu.Fragment=Hh;Iu.jsx=vs;Iu.jsxs=vs;hs.exports=Iu;var b=hs.exports,gs={exports:{}},w={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var sf=Symbol.for("react.transitional.element"),Bh=Symbol.for("react.portal"),Gh=Symbol.for("react.fragment"),qh=Symbol.for("react.strict_mode"),Yh=Symbol.for("react.profiler"),Xh=Symbol.for("react.consumer"),Qh=Symbol.for("react.context"),Lh=Symbol.for("react.forward_ref"),Zh=Symbol.for("react.suspense"),Vh=Symbol.for("react.memo"),ms=Symbol.for("react.lazy"),yr=Symbol.iterator;function Kh(t){return t===null||typeof t!="object"?null:(t=yr&&t[yr]||t["@@iterator"],typeof t=="function"?t:null)}var ys={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},bs=Object.assign,ps={};function Aa(t,l,e){this.props=t,this.context=l,this.refs=ps,this.updater=e||ys}Aa.prototype.isReactComponent={};Aa.prototype.setState=function(t,l){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,l,"setState")};Aa.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Ss(){}Ss.prototype=Aa.prototype;function df(t,l,e){this.props=t,this.context=l,this.refs=ps,this.updater=e||ys}var hf=df.prototype=new Ss;hf.constructor=df;bs(hf,Aa.prototype);hf.isPureReactComponent=!0;var br=Array.isArray,lt={H:null,A:null,T:null,S:null},Es=Object.prototype.hasOwnProperty;function vf(t,l,e,a,n,u,i){return e=i.ref,{$$typeof:sf,type:t,key:l,ref:e!==void 0?e:null,props:i}}function Jh(t,l){return vf(t.type,l,null,void 0,void 0,void 0,t.props)}function gf(t){return typeof t=="object"&&t!==null&&t.$$typeof===sf}function $h(t){var l={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(e){return l[e]})}var pr=/\/+/g;function Ei(t,l){return typeof t=="object"&&t!==null&&t.key!=null?$h(""+t.key):l.toString(36)}function Sr(){}function kh(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(Sr,Sr):(t.status="pending",t.then(function(l){t.status==="pending"&&(t.status="fulfilled",t.value=l)},function(l){t.status==="pending"&&(t.status="rejected",t.reason=l)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function Qe(t,l,e,a,n){var u=typeof t;(u==="undefined"||u==="boolean")&&(t=null);var i=!1;if(t===null)i=!0;else switch(u){case"bigint":case"string":case"number":i=!0;break;case"object":switch(t.$$typeof){case sf:case Bh:i=!0;break;case ms:return i=t._init,Qe(i(t._payload),l,e,a,n)}}if(i)return n=n(t),i=a===""?"."+Ei(t,0):a,br(n)?(e="",i!=null&&(e=i.replace(pr,"$&/")+"/"),Qe(n,l,e,"",function(r){return r})):n!=null&&(gf(n)&&(n=Jh(n,e+(n.key==null||t&&t.key===n.key?"":(""+n.key).replace(pr,"$&/")+"/")+i)),l.push(n)),1;i=0;var c=a===""?".":a+":";if(br(t))for(var f=0;f>>1,nt=_[K];if(0>>1;Kn(Si,j))oen(Zn,Si)?(_[K]=Zn,_[oe]=j,K=oe):(_[K]=Si,_[Ln]=j,K=Ln);else if(oen(Zn,j))_[K]=Zn,_[oe]=j,K=oe;else break t}}return M}function n(_,M){var j=_.sortIndex-M.sortIndex;return j!==0?j:_.id-M.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var i=Date,c=i.now();t.unstable_now=function(){return i.now()-c}}var f=[],r=[],v=1,m=null,d=3,g=!1,S=!1,E=!1,x=typeof setTimeout=="function"?setTimeout:null,s=typeof clearTimeout=="function"?clearTimeout:null,o=typeof setImmediate<"u"?setImmediate:null;function h(_){for(var M=e(r);M!==null;){if(M.callback===null)a(r);else if(M.startTime<=_)a(r),M.sortIndex=M.expirationTime,l(f,M);else break;M=e(r)}}function y(_){if(E=!1,h(_),!S)if(e(f)!==null)S=!0,ht();else{var M=e(r);M!==null&&Rt(y,M.startTime-_)}}var T=!1,A=-1,z=5,O=-1;function X(){return!(t.unstable_now()-O_&&X());){var K=m.callback;if(typeof K=="function"){m.callback=null,d=m.priorityLevel;var nt=K(m.expirationTime<=_);if(_=t.unstable_now(),typeof nt=="function"){m.callback=nt,h(_),M=!0;break l}m===e(f)&&a(f),h(_)}else a(f);m=e(f)}if(m!==null)M=!0;else{var Dt=e(r);Dt!==null&&Rt(y,Dt.startTime-_),M=!1}}break t}finally{m=null,d=j,g=!1}M=void 0}}finally{M?et():T=!1}}}var et;if(typeof o=="function")et=function(){o(D)};else if(typeof MessageChannel<"u"){var G=new MessageChannel,Cl=G.port2;G.port1.onmessage=D,et=function(){Cl.postMessage(null)}}else et=function(){x(D,0)};function ht(){T||(T=!0,et())}function Rt(_,M){A=x(function(){_(t.unstable_now())},M)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(_){_.callback=null},t.unstable_continueExecution=function(){S||g||(S=!0,ht())},t.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):z=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return d},t.unstable_getFirstCallbackNode=function(){return e(f)},t.unstable_next=function(_){switch(d){case 1:case 2:case 3:var M=3;break;default:M=d}var j=d;d=M;try{return _()}finally{d=j}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(_,M){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var j=d;d=_;try{return M()}finally{d=j}},t.unstable_scheduleCallback=function(_,M,j){var K=t.unstable_now();switch(typeof j=="object"&&j!==null?(j=j.delay,j=typeof j=="number"&&0K?(_.sortIndex=j,l(r,_),e(f)===null&&_===e(r)&&(E?(s(A),A=-1):E=!0,Rt(y,j-K))):(_.sortIndex=nt,l(f,_),S||g||(S=!0,ht())),_},t.unstable_shouldYield=X,t.unstable_wrapCallback=function(_){var M=d;return function(){var j=d;d=M;try{return _.apply(this,arguments)}finally{d=j}}}})(xs);As.exports=xs;var Ph=As.exports,zs={exports:{}},Ot={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ih=R;function Os(t){var l="https://react.dev/errors/"+t;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Rs)}catch(t){console.error(t)}}Rs(),zs.exports=Ot;var ev=zs.exports;/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var dt=Ph,Ds=R,av=ev;function p(t){var l="https://react.dev/errors/"+t;if(1)":-1n||f[a]!==r[n]){var v=` +`+f[a].replace(" at new "," at ");return t.displayName&&v.includes("")&&(v=v.replace("",t.displayName)),v}while(1<=a&&0<=n);break}}}finally{_i=!1,Error.prepareStackTrace=e}return(e=t?t.displayName||t.name:"")?La(e):""}function fv(t){switch(t.tag){case 26:case 27:case 5:return La(t.type);case 16:return La("Lazy");case 13:return La("Suspense");case 19:return La("SuspenseList");case 0:case 15:return t=Ai(t.type,!1),t;case 11:return t=Ai(t.type.render,!1),t;case 1:return t=Ai(t.type,!0),t;default:return""}}function Ar(t){try{var l="";do l+=fv(t),t=t.return;while(t);return l}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}function xa(t){var l=t,e=t;if(t.alternate)for(;l.return;)l=l.return;else{t=l;do l=t,l.flags&4098&&(e=l.return),t=l.return;while(t)}return l.tag===3?e:null}function ws(t){if(t.tag===13){var l=t.memoizedState;if(l===null&&(t=t.alternate,t!==null&&(l=t.memoizedState)),l!==null)return l.dehydrated}return null}function xr(t){if(xa(t)!==t)throw Error(p(188))}function rv(t){var l=t.alternate;if(!l){if(l=xa(t),l===null)throw Error(p(188));return l!==t?null:t}for(var e=t,a=l;;){var n=e.return;if(n===null)break;var u=n.alternate;if(u===null){if(a=n.return,a!==null){e=a;continue}break}if(n.child===u.child){for(u=n.child;u;){if(u===e)return xr(n),t;if(u===a)return xr(n),l;u=u.sibling}throw Error(p(188))}if(e.return!==a.return)e=n,a=u;else{for(var i=!1,c=n.child;c;){if(c===e){i=!0,e=n,a=u;break}if(c===a){i=!0,a=n,e=u;break}c=c.sibling}if(!i){for(c=u.child;c;){if(c===e){i=!0,e=u,a=n;break}if(c===a){i=!0,a=u,e=n;break}c=c.sibling}if(!i)throw Error(p(189))}}if(e.alternate!==a)throw Error(p(190))}if(e.tag!==3)throw Error(p(188));return e.stateNode.current===e?t:l}function Cs(t){var l=t.tag;if(l===5||l===26||l===27||l===6)return t;for(t=t.child;t!==null;){if(l=Cs(t),l!==null)return l;t=t.sibling}return null}var Za=Array.isArray,W=av.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,be={pending:!1,data:null,method:null,action:null},sc=[],Je=-1;function ol(t){return{current:t}}function yt(t){0>Je||(t.current=sc[Je],sc[Je]=null,Je--)}function I(t,l){Je++,sc[Je]=t.current,t.current=l}var ul=ol(null),sn=ol(null),Fl=ol(null),Su=ol(null);function Eu(t,l){switch(I(Fl,l),I(sn,t),I(ul,null),t=l.nodeType,t){case 9:case 11:l=(l=l.documentElement)&&(l=l.namespaceURI)?zo(l):0;break;default:if(t=t===8?l.parentNode:l,l=t.tagName,t=t.namespaceURI)t=zo(t),l=J0(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}yt(ul),I(ul,l)}function va(){yt(ul),yt(sn),yt(Fl)}function dc(t){t.memoizedState!==null&&I(Su,t);var l=ul.current,e=J0(l,t.type);l!==e&&(I(sn,t),I(ul,e))}function Tu(t){sn.current===t&&(yt(ul),yt(sn)),Su.current===t&&(yt(Su),_n._currentValue=be)}var hc=Object.prototype.hasOwnProperty,bf=dt.unstable_scheduleCallback,xi=dt.unstable_cancelCallback,ov=dt.unstable_shouldYield,sv=dt.unstable_requestPaint,il=dt.unstable_now,dv=dt.unstable_getCurrentPriorityLevel,pf=dt.unstable_ImmediatePriority,Hs=dt.unstable_UserBlockingPriority,_u=dt.unstable_NormalPriority,hv=dt.unstable_LowPriority,Bs=dt.unstable_IdlePriority,vv=dt.log,gv=dt.unstable_setDisableYieldValue,jn=null,Bt=null;function mv(t){if(Bt&&typeof Bt.onCommitFiberRoot=="function")try{Bt.onCommitFiberRoot(jn,t,void 0,(t.current.flags&128)===128)}catch{}}function kl(t){if(typeof vv=="function"&&gv(t),Bt&&typeof Bt.setStrictMode=="function")try{Bt.setStrictMode(jn,t)}catch{}}var Gt=Math.clz32?Math.clz32:pv,yv=Math.log,bv=Math.LN2;function pv(t){return t>>>=0,t===0?32:31-(yv(t)/bv|0)|0}var Jn=128,$n=4194304;function he(t){var l=t&42;if(l!==0)return l;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Au(t,l){var e=t.pendingLanes;if(e===0)return 0;var a=0,n=t.suspendedLanes,u=t.pingedLanes,i=t.warmLanes;t=t.finishedLanes!==0;var c=e&134217727;return c!==0?(e=c&~n,e!==0?a=he(e):(u&=c,u!==0?a=he(u):t||(i=c&~i,i!==0&&(a=he(i))))):(c=e&~n,c!==0?a=he(c):u!==0?a=he(u):t||(i=e&~i,i!==0&&(a=he(i)))),a===0?0:l!==0&&l!==a&&!(l&n)&&(n=a&-a,i=l&-l,n>=i||n===32&&(i&4194176)!==0)?l:a}function Sv(t,l){switch(t){case 1:case 2:case 4:case 8:return l+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Gs(t,l){return t.errorRecoveryDisabledLanes&l?0:(t=t.pendingLanes&-536870913,t!==0?t:t&536870912?536870912:0)}function qs(){var t=Jn;return Jn<<=1,!(Jn&4194176)&&(Jn=128),t}function Ys(){var t=$n;return $n<<=1,!($n&62914560)&&($n=4194304),t}function zi(t){for(var l=[],e=0;31>e;e++)l.push(t);return l}function Ev(t,l,e,a,n,u){var i=t.pendingLanes;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=e,t.entangledLanes&=e,t.errorRecoveryDisabledLanes&=e,t.shellSuspendCounter=0;var c=t.entanglements,f=t.expirationTimes,r=t.hiddenUpdates;for(e=i&~e;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),xv=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Or={},Rr={};function zv(t){return hc.call(Rr,t)?!0:hc.call(Or,t)?!1:xv.test(t)?Rr[t]=!0:(Or[t]=!0,!1)}function fu(t,l,e){if(zv(l))if(e===null)t.removeAttribute(l);else{switch(typeof e){case"undefined":case"function":case"symbol":t.removeAttribute(l);return;case"boolean":var a=l.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){t.removeAttribute(l);return}}t.setAttribute(l,""+e)}}function kn(t,l,e){if(e===null)t.removeAttribute(l);else{switch(typeof e){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(l);return}t.setAttribute(l,""+e)}}function sl(t,l,e,a){if(a===null)t.removeAttribute(e);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttributeNS(l,e,""+a)}}function Qt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Js(t){var l=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function Ov(t){var l=Js(t)?"checked":"value",e=Object.getOwnPropertyDescriptor(t.constructor.prototype,l),a=""+t[l];if(!t.hasOwnProperty(l)&&typeof e<"u"&&typeof e.get=="function"&&typeof e.set=="function"){var n=e.get,u=e.set;return Object.defineProperty(t,l,{configurable:!0,get:function(){return n.call(this)},set:function(i){a=""+i,u.call(this,i)}}),Object.defineProperty(t,l,{enumerable:e.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[l]}}}}function xu(t){t._valueTracker||(t._valueTracker=Ov(t))}function $s(t){if(!t)return!1;var l=t._valueTracker;if(!l)return!0;var e=l.getValue(),a="";return t&&(a=Js(t)?t.checked?"true":"false":t.value),t=a,t!==e?(l.setValue(t),!0):!1}function zu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Rv=/[\n"\\]/g;function Kt(t){return t.replace(Rv,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function gc(t,l,e,a,n,u,i,c){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),l!=null?i==="number"?(l===0&&t.value===""||t.value!=l)&&(t.value=""+Qt(l)):t.value!==""+Qt(l)&&(t.value=""+Qt(l)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),l!=null?mc(t,i,Qt(l)):e!=null?mc(t,i,Qt(e)):a!=null&&t.removeAttribute("value"),n==null&&u!=null&&(t.defaultChecked=!!u),n!=null&&(t.checked=n&&typeof n!="function"&&typeof n!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?t.name=""+Qt(c):t.removeAttribute("name")}function ks(t,l,e,a,n,u,i,c){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.type=u),l!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||l!=null))return;e=e!=null?""+Qt(e):"",l=l!=null?""+Qt(l):e,c||l===t.value||(t.value=l),t.defaultValue=l}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=c?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mc(t,l,e){l==="number"&&zu(t.ownerDocument)===t||t.defaultValue===""+e||(t.defaultValue=""+e)}function na(t,l,e,a){if(t=t.options,l){l={};for(var n=0;n=ka),Cr=" ",Hr=!1;function ed(t,l){switch(t){case"keyup":return eg.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ad(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ke=!1;function ng(t,l){switch(t){case"compositionend":return ad(l);case"keypress":return l.which!==32?null:(Hr=!0,Cr);case"textInput":return t=l.data,t===Cr&&Hr?null:t;default:return null}}function ug(t,l){if(ke)return t==="compositionend"||!xf&&ed(t,l)?(t=td(),ou=_f=Wl=null,ke=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:e,offset:l-t};t=a}t:{for(;e;){if(e.nextSibling){e=e.nextSibling;break t}e=e.parentNode}e=void 0}e=Xr(e)}}function cd(t,l){return t&&l?t===l?!0:t&&t.nodeType===3?!1:l&&l.nodeType===3?cd(t,l.parentNode):"contains"in t?t.contains(l):t.compareDocumentPosition?!!(t.compareDocumentPosition(l)&16):!1:!1}function fd(t){var l,e;for(t=(e=t==null||(l=t.ownerDocument)==null?void 0:l.defaultView)!=null?e:window,l=zu(t.document);l instanceof t.HTMLIFrameElement;){try{var a=typeof l.contentWindow.location.href=="string"}catch{a=!1}if(a)t=l.contentWindow;else break;l=zu(t.document)}return l}function zf(t){var l=t&&t.nodeName&&t.nodeName.toLowerCase();return l&&(l==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||l==="textarea"||t.contentEditable==="true")}function hg(t,l){var e=fd(l);l=t.focusedElem;var a=t.selectionRange;if(e!==l&&l&&l.ownerDocument&&cd(l.ownerDocument.documentElement,l)){if(a!==null&&zf(l)){if(t=a.start,e=a.end,e===void 0&&(e=t),"selectionStart"in l)l.selectionStart=t,l.selectionEnd=Math.min(e,l.value.length);else if(e=(t=l.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=l.textContent.length,u=Math.min(a.start,n);a=a.end===void 0?u:Math.min(a.end,n),!e.extend&&u>a&&(n=a,a=u,u=n),n=Qr(l,u);var i=Qr(l,a);n&&i&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(n.node,n.offset),e.removeAllRanges(),u>a?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=l;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof l.focus=="function"&&l.focus(),l=0;l=document.documentMode,We=null,pc=null,Fa=null,Sc=!1;function Lr(t,l,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;Sc||We==null||We!==zu(a)||(a=We,"selectionStart"in a&&zf(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Fa&&gn(Fa,a)||(Fa=a,a=Lu(pc,"onSelect"),0>=i,n-=i,bl=1<<32-Gt(l)+n|e<O?(X=z,z=null):X=z.sibling;var D=d(s,z,h[O],y);if(D===null){z===null&&(z=X);break}t&&z&&D.alternate===null&&l(s,z),o=u(D,o,O),A===null?T=D:A.sibling=D,A=D,z=X}if(O===h.length)return e(s,z),Y&&ve(s,O),T;if(z===null){for(;OO?(X=z,z=null):X=z.sibling;var et=d(s,z,D.value,y);if(et===null){z===null&&(z=X);break}t&&z&&et.alternate===null&&l(s,z),o=u(et,o,O),A===null?T=et:A.sibling=et,A=et,z=X}if(D.done)return e(s,z),Y&&ve(s,O),T;if(z===null){for(;!D.done;O++,D=h.next())D=m(s,D.value,y),D!==null&&(o=u(D,o,O),A===null?T=D:A.sibling=D,A=D);return Y&&ve(s,O),T}for(z=a(z);!D.done;O++,D=h.next())D=g(z,s,O,D.value,y),D!==null&&(t&&D.alternate!==null&&z.delete(D.key===null?O:D.key),o=u(D,o,O),A===null?T=D:A.sibling=D,A=D);return t&&z.forEach(function(G){return l(s,G)}),Y&&ve(s,O),T}function x(s,o,h,y){if(typeof h=="object"&&h!==null&&h.type===Ke&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Kn:t:{for(var T=h.key,A=o;A!==null;){if(A.key===T){if(T=h.type,T===Ke){if(A.tag===7){e(s,A.sibling),o=n(A,h.props.children),o.return=s,s=o;break t}}else if(A.elementType===T||typeof T=="object"&&T!==null&&T.$$typeof===Yl&&Wr(T)===A.type){e(s,A.sibling),o=n(A,h.props),Ha(s,A,o,h),o.return=s,s=o;break t}e(s,A);break}else l(s,A);A=A.sibling}h.type===Ke?(o=Ee(h.props.children,s.mode,y,h.key),o.return=s,s=o):(y=mu(h.type,h.key,h.props,null,s.mode,y),Ha(s,o,y,h),y.return=s,s=y)}return i(s);case Qa:t:{for(A=h.key;o!==null;){if(o.key===A)if(o.tag===4&&o.stateNode.containerInfo===h.containerInfo&&o.stateNode.implementation===h.implementation){e(s,o.sibling),o=n(o,h.children||[]),o.return=s,s=o;break t}else{e(s,o);break}else l(s,o);o=o.sibling}o=Ji(h,s.mode,y),o.return=s,s=o}return i(s);case Yl:return A=h._init,h=A(h._payload),x(s,o,h,y)}if(Za(h))return S(s,o,h,y);if(Na(h)){if(A=Na(h),typeof A!="function")throw Error(p(150));return h=A.call(h),E(s,o,h,y)}if(typeof h.then=="function")return x(s,o,Pn(h),y);if(h.$$typeof===yl)return x(s,o,tu(s,h),y);In(s,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,o!==null&&o.tag===6?(e(s,o.sibling),o=n(o,h),o.return=s,s=o):(e(s,o),o=Ki(h,s.mode,y),o.return=s,s=o),i(s)):e(s,o)}return function(s,o,h,y){try{yn=0;var T=x(s,o,h,y);return ia=null,T}catch(z){if(z===Pa)throw z;var A=$t(29,z,null,s.mode);return A.lanes=y,A.return=s,A}finally{}}}var ze=pd(!0),Sd=pd(!1),ya=ol(null),Mu=ol(0);function Fr(t,l){t=Dl,I(Mu,t),I(ya,l),Dl=t|l.baseLanes}function _c(){I(Mu,Dl),I(ya,ya.current)}function jf(){Dl=Mu.current,yt(ya),yt(Mu)}var fl=ol(null),cl=null;function Ll(t){var l=t.alternate;I(ot,ot.current&1),I(fl,t),cl===null&&(l===null||ya.current!==null||l.memoizedState!==null)&&(cl=t)}function Ed(t){if(t.tag===22){if(I(ot,ot.current),I(fl,t),cl===null){var l=t.alternate;l!==null&&l.memoizedState!==null&&(cl=t)}}else Zl()}function Zl(){I(ot,ot.current),I(fl,fl.current)}function Sl(t){yt(fl),cl===t&&(cl=null),yt(ot)}var ot=ol(0);function ju(t){for(var l=t;l!==null;){if(l.tag===13){var e=l.memoizedState;if(e!==null&&(e=e.dehydrated,e===null||e.data==="$?"||e.data==="$!"))return l}else if(l.tag===19&&l.memoizedProps.revealOrder!==void 0){if(l.flags&128)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===t)break;for(;l.sibling===null;){if(l.return===null||l.return===t)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var bg=typeof AbortController<"u"?AbortController:function(){var t=[],l=this.signal={aborted:!1,addEventListener:function(e,a){t.push(a)}};this.abort=function(){l.aborted=!0,t.forEach(function(e){return e()})}},pg=dt.unstable_scheduleCallback,Sg=dt.unstable_NormalPriority,rt={$$typeof:yl,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Nf(){return{controller:new bg,data:new Map,refCount:0}}function wn(t){t.refCount--,t.refCount===0&&pg(Sg,function(){t.controller.abort()})}var tn=null,Ac=0,ba=0,ca=null;function Eg(t,l){if(tn===null){var e=tn=[];Ac=0,ba=ar(),ca={status:"pending",value:void 0,then:function(a){e.push(a)}}}return Ac++,l.then(Pr,Pr),l}function Pr(){if(tn!==null&&--Ac===0){ca!==null&&(ca.status="fulfilled");var t=tn;tn=null,ba=0,ca=null;for(var l=0;lu?u:8;var i=N.T,c={};N.T=c,Vf(t,!1,l,e);try{var f=n(),r=N.S;if(r!==null&&r(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var v=Tg(f,a);oa(t,l,v)}else oa(t,l,a)}catch(m){oa(t,l,{then:function(){},status:"rejected",reason:m})}finally{W.p=u,N.T=i}}function Og(){}function Oc(t,l,e,a){if(t.tag!==5)throw Error(p(476));var n=$d(t).queue;Jd(t,n,l,be,e===null?Og:function(){return kd(t),e(a)})}function $d(t){var l=t.memoizedState;if(l!==null)return l;l={memoizedState:be,baseState:be,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:be},next:null};var e={};return l.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:e},next:null},t.memoizedState=l,t=t.alternate,t!==null&&(t.memoizedState=l),l}function kd(t){var l=$d(t).next.queue;oa(t,l,{})}function Zf(){return _t(_n)}function Wd(){return ft().memoizedState}function Fd(){return ft().memoizedState}function Rg(t){for(var l=t.return;l!==null;){switch(l.tag){case 24:case 3:var e=xl();t=Pl(e);var a=Il(l,t,e);a!==null&&(zt(a,l,e),en(a,l,e)),l={cache:Nf()},t.payload=l;return}l=l.return}}function Dg(t,l,e){var a=xl();e={lane:a,revertLane:0,action:e,hasEagerState:!1,eagerState:null,next:null},oi(t)?Pd(l,e):(e=Rf(t,l,e,a),e!==null&&(zt(e,t,a),Id(e,l,a)))}function oa(t,l,e){var a=xl(),n={lane:a,revertLane:0,action:e,hasEagerState:!1,eagerState:null,next:null};if(oi(t))Pd(l,n);else{var u=t.alternate;if(t.lanes===0&&(u===null||u.lanes===0)&&(u=l.lastRenderedReducer,u!==null))try{var i=l.lastRenderedState,c=u(i,e);if(n.hasEagerState=!0,n.eagerState=c,qt(c,i)){ii(t,l,n,0),V===null&&ui();return}}catch{}finally{}e=Rf(t,l,n,a),e!==null&&(zt(e,t,a),Id(e,l,a))}}function Vf(t,l,e,a){if(a={lane:2,revertLane:ar(),action:a,hasEagerState:!1,eagerState:null,next:null},oi(t)){if(l)throw Error(p(479))}else l=Rf(t,e,a,2),l!==null&&zt(l,t,2)}function oi(t){var l=t.alternate;return t===C||l!==null&&l===C}function Pd(t,l){fa=Nu=!0;var e=t.pending;e===null?l.next=l:(l.next=e.next,e.next=l),t.pending=l}function Id(t,l,e){if(e&4194176){var a=l.lanes;a&=t.pendingLanes,e|=a,l.lanes=e,Qs(t,e)}}var rl={readContext:_t,use:fi,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useLayoutEffect:ut,useInsertionEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useSyncExternalStore:ut,useId:ut};rl.useCacheRefresh=ut;rl.useMemoCache=ut;rl.useHostTransitionStatus=ut;rl.useFormState=ut;rl.useActionState=ut;rl.useOptimistic=ut;var Ce={readContext:_t,use:fi,useCallback:function(t,l){return Mt().memoizedState=[t,l===void 0?null:l],t},useContext:_t,useEffect:eo,useImperativeHandle:function(t,l,e){e=e!=null?e.concat([t]):null,vu(4194308,4,Qd.bind(null,l,t),e)},useLayoutEffect:function(t,l){return vu(4194308,4,t,l)},useInsertionEffect:function(t,l){vu(4,2,t,l)},useMemo:function(t,l){var e=Mt();l=l===void 0?null:l;var a=t();return Oe&&(kl(!0),t(),kl(!1)),e.memoizedState=[a,l],a},useReducer:function(t,l,e){var a=Mt();if(e!==void 0){var n=e(l);Oe&&(kl(!0),e(l),kl(!1))}else n=l;return a.memoizedState=a.baseState=n,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},a.queue=t,t=t.dispatch=Dg.bind(null,C,t),[a.memoizedState,t]},useRef:function(t){var l=Mt();return t={current:t},l.memoizedState=t},useState:function(t){t=xc(t);var l=t.queue,e=oa.bind(null,C,l);return l.dispatch=e,[t.memoizedState,e]},useDebugValue:Qf,useDeferredValue:function(t,l){var e=Mt();return Lf(e,t,l)},useTransition:function(){var t=xc(!1);return t=Jd.bind(null,C,t.queue,!0,!1),Mt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,l,e){var a=C,n=Mt();if(Y){if(e===void 0)throw Error(p(407));e=e()}else{if(e=l(),V===null)throw Error(p(349));q&60||zd(a,l,e)}n.memoizedState=e;var u={value:e,getSnapshot:l};return n.queue=u,eo(Rd.bind(null,a,u,t),[t]),a.flags|=2048,pa(9,Od.bind(null,a,u,e,l),{destroy:void 0},null),e},useId:function(){var t=Mt(),l=V.identifierPrefix;if(Y){var e=pl,a=bl;e=(a&~(1<<32-Gt(a)-1)).toString(32)+e,l=":"+l+"R"+e,e=Uu++,0 title"))),St(u,a,e),u[Tt]=t,gt(u),a=u;break t;case"link":var i=No("link","href",n).get(a+(e.href||""));if(i){for(var c=0;c<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof a.is=="string"?n.createElement("select",{is:a.is}):n.createElement("select"),a.multiple?t.multiple=!0:a.size&&(t.size=a.size);break;default:t=typeof a.is=="string"?n.createElement(e,{is:a.is}):n.createElement(e)}}t[Tt]=l,t[Ut]=a;t:for(n=l.child;n!==null;){if(n.tag===5||n.tag===6)t.appendChild(n.stateNode);else if(n.tag!==4&&n.tag!==27&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===l)break t;for(;n.sibling===null;){if(n.return===null||n.return===l)break t;n=n.return}n.sibling.return=n.return,n=n.sibling}l.stateNode=t;t:switch(St(t,e,a),e){case"button":case"input":case"select":case"textarea":t=!!a.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&vl(l)}}return tt(l),l.flags&=-16777217,null;case 6:if(t&&l.stateNode!=null)t.memoizedProps!==a&&vl(l);else{if(typeof a!="string"&&l.stateNode===null)throw Error(p(166));if(t=Fl.current,Ca(l)){if(t=l.stateNode,e=l.memoizedProps,a=null,n=At,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}t[Tt]=l,t=!!(t.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||K0(t.nodeValue,e)),t||xe(l)}else t=Zu(t).createTextNode(a),t[Tt]=l,l.stateNode=t}return tt(l),null;case 13:if(a=l.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(n=Ca(l),a!==null&&a.dehydrated!==null){if(t===null){if(!n)throw Error(p(318));if(n=l.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(p(317));n[Tt]=l}else Un(),!(l.flags&128)&&(l.memoizedState=null),l.flags|=4;tt(l),n=!1}else It!==null&&(Lc(It),It=null),n=!0;if(!n)return l.flags&256?(Sl(l),l):(Sl(l),null)}if(Sl(l),l.flags&128)return l.lanes=e,l;if(e=a!==null,t=t!==null&&t.memoizedState!==null,e){a=l.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool);var u=null;a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)}return e!==t&&e&&(l.child.flags|=8192),lu(l,l.updateQueue),tt(l),null;case 4:return va(),t===null&&nr(l.stateNode.containerInfo),tt(l),null;case 10:return Al(l.type),tt(l),null;case 19:if(yt(ot),n=l.memoizedState,n===null)return tt(l),null;if(a=(l.flags&128)!==0,u=n.rendering,u===null)if(a)Ba(n,!1);else{if(at!==0||t!==null&&t.flags&128)for(t=l.child;t!==null;){if(u=ju(t),u!==null){for(l.flags|=128,Ba(n,!1),t=u.updateQueue,l.updateQueue=t,lu(l,t),l.subtreeFlags=0,t=e,e=l.child;e!==null;)D0(e,t),e=e.sibling;return I(ot,ot.current&1|2),l.child}t=t.sibling}n.tail!==null&&il()>qu&&(l.flags|=128,a=!0,Ba(n,!1),l.lanes=4194304)}else{if(!a)if(t=ju(u),t!==null){if(l.flags|=128,a=!0,t=t.updateQueue,l.updateQueue=t,lu(l,t),Ba(n,!0),n.tail===null&&n.tailMode==="hidden"&&!u.alternate&&!Y)return tt(l),null}else 2*il()-n.renderingStartTime>qu&&e!==536870912&&(l.flags|=128,a=!0,Ba(n,!1),l.lanes=4194304);n.isBackwards?(u.sibling=l.child,l.child=u):(t=n.last,t!==null?t.sibling=u:l.child=u,n.last=u)}return n.tail!==null?(l=n.tail,n.rendering=l,n.tail=l.sibling,n.renderingStartTime=il(),l.sibling=null,t=ot.current,I(ot,a?t&1|2:t&1),l):(tt(l),null);case 22:case 23:return Sl(l),jf(),a=l.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(l.flags|=8192):a&&(l.flags|=8192),a?e&536870912&&!(l.flags&128)&&(tt(l),l.subtreeFlags&6&&(l.flags|=8192)):tt(l),e=l.updateQueue,e!==null&&lu(l,e.retryQueue),e=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),a=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),a!==e&&(l.flags|=2048),t!==null&&yt(Se),null;case 24:return e=null,t!==null&&(e=t.memoizedState.cache),l.memoizedState.cache!==e&&(l.flags|=2048),Al(rt),tt(l),null;case 25:return null}throw Error(p(156,l.tag))}function Hg(t,l){switch(Mf(l),l.tag){case 1:return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 3:return Al(rt),va(),t=l.flags,t&65536&&!(t&128)?(l.flags=t&-65537|128,l):null;case 26:case 27:case 5:return Tu(l),null;case 13:if(Sl(l),t=l.memoizedState,t!==null&&t.dehydrated!==null){if(l.alternate===null)throw Error(p(340));Un()}return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 19:return yt(ot),null;case 4:return va(),null;case 10:return Al(l.type),null;case 22:case 23:return Sl(l),jf(),t!==null&&yt(Se),t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 24:return Al(rt),null;case 25:return null;default:return null}}function j0(t,l){switch(Mf(l),l.tag){case 3:Al(rt),va();break;case 26:case 27:case 5:Tu(l);break;case 4:va();break;case 13:Sl(l);break;case 19:yt(ot);break;case 10:Al(l.type);break;case 22:case 23:Sl(l),jf(),t!==null&&yt(Se);break;case 24:Al(rt)}}var Bg={getCacheForType:function(t){var l=_t(rt),e=l.data.get(t);return e===void 0&&(e=t(),l.data.set(t,e)),e}},Gg=typeof WeakMap=="function"?WeakMap:Map,Q=0,V=null,H=null,q=0,P=0,Xt=null,Vt=!1,Pf=!1,Dl=0,at=0,Ml=0,jl=0,If=0,jt=0,Me=0,cn=null,tl=null,Ea=!1,Gu=!1,tr=0,qu=1/0,pn=null,le=null,eu=!1,ge=null,fn=0,Yc=0,Xc=null,rn=0,Qc=null;function xl(){if(Q&2&&q!==0)return q&-q;if(N.T!==null){var t=ba;return t!==0?t:ar()}return Zs()}function N0(){jt===0&&(jt=!(q&536870912)||Y?qs():536870912);var t=fl.current;return t!==null&&(t.flags|=32),jt}function zt(t,l,e){(t===V&&P===2||t.cancelPendingCommit!==null)&&(Be(t,0),nl(t,q,jt,Vt)),Gn(t,e),(!(Q&2)||t!==V)&&(t===V&&(!(Q&2)&&(jl|=e),at===4&&nl(t,q,jt,Vt)),Nt(t))}function U0(t,l){if(Q&6)throw Error(p(327));var e=t.callbackNode;if(sa()&&t.callbackNode!==e)return null;var a=Au(t,t===V?q:0);if(a===0)return null;var n=(a&60)===0&&(a&t.expiredLanes)===0&&!l;if(l=n?Xg(t,a):Yu(t,a),l!==0){var u=n;do{if(l===6)nl(t,a,0,Vt);else{if(n=t.current.alternate,u&&!qg(n)){l=Yu(t,a),u=!1;continue}if(l===2){u=a;var i=Gs(t,u);if(i!==0&&(a=i,l=w0(t,u,i),u=!1,l!==2))continue}if(l===1){Be(t,0),nl(t,a,0,Vt);break}t:{switch(u=t,l){case 0:case 1:throw Error(p(345));case 4:if((a&4194176)===a){nl(u,a,jt,Vt);break t}break;case 2:tl=null;break;case 3:case 5:break;default:throw Error(p(329))}if(u.finishedWork=n,u.finishedLanes=a,(a&62914560)===a&&(l=tr+300-il(),10e?32:e,N.T=null,ge===null)var u=!1;else{e=Xc,Xc=null;var i=ge,c=fn;if(ge=null,fn=0,Q&6)throw Error(p(331));var f=Q;if(Q|=4,O0(i.current),A0(i,i.current,c,e),Q=f,qn(0,!1),Bt&&typeof Bt.onPostCommitFiberRoot=="function")try{Bt.onPostCommitFiberRoot(jn,i)}catch{}u=!0}return u}finally{W.p=n,N.T=a,X0(t,l)}}return!1}function Eo(t,l,e){l=Jt(e,l),l=Dc(t.stateNode,l,2),t=Il(t,l,2),t!==null&&(Gn(t,2),Nt(t))}function J(t,l,e){if(t.tag===3)Eo(t,t,e);else for(;l!==null;){if(l.tag===3){Eo(l,t,e);break}else if(l.tag===1){var a=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(le===null||!le.has(a))){t=Jt(e,t),e=a0(2),a=Il(l,e,2),a!==null&&(n0(e,a,l,t),Gn(a,2),Nt(a));break}}l=l.return}}function $i(t,l,e){var a=t.pingCache;if(a===null){a=t.pingCache=new Gg;var n=new Set;a.set(l,n)}else n=a.get(l),n===void 0&&(n=new Set,a.set(l,n));n.has(e)||(Pf=!0,n.add(e),t=Zg.bind(null,t,l,e),l.then(t,t))}function Zg(t,l,e){var a=t.pingCache;a!==null&&a.delete(l),t.pingedLanes|=t.suspendedLanes&e,t.warmLanes&=~e,Q&2?Ea=!0:Q&4&&(Gu=!0),er(),V===t&&(q&e)===e&&(at===4||at===3&&(q&62914560)===q&&300>il()-tr?!(Q&2)&&Be(t,0):If|=e,Me===q&&(Me=0)),Nt(t)}function Q0(t,l){l===0&&(l=Ys()),t=ie(t,l),t!==null&&(Gn(t,l),Nt(t))}function Vg(t){var l=t.memoizedState,e=0;l!==null&&(e=l.retryLane),Q0(t,e)}function Kg(t,l){var e=0;switch(t.tag){case 13:var a=t.stateNode,n=t.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(p(314))}a!==null&&a.delete(l),Q0(t,e)}function er(){if(50"u"?null:document;function W0(t,l,e){var a=Ra;if(a&&typeof l=="string"&&l){var n=Kt(l);n='link[rel="'+t+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),Do.has(n)||(Do.add(n),t={rel:t,crossOrigin:e,href:l},a.querySelector(n)===null&&(l=a.createElement("link"),St(l,"link",t),gt(l),a.head.appendChild(l)))}}function sm(t){Nl.D(t),W0("dns-prefetch",t,null)}function dm(t,l){Nl.C(t,l),W0("preconnect",t,l)}function hm(t,l,e){Nl.L(t,l,e);var a=Ra;if(a&&t&&l){var n='link[rel="preload"][as="'+Kt(l)+'"]';l==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+Kt(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+Kt(e.imageSizes)+'"]')):n+='[href="'+Kt(t)+'"]';var u=n;switch(l){case"style":u=Ta(t);break;case"script":u=Da(t)}kt.has(u)||(t=F({rel:"preload",href:l==="image"&&e&&e.imageSrcSet?void 0:t,as:l},e),kt.set(u,t),a.querySelector(n)!==null||l==="style"&&a.querySelector(Yn(u))||l==="script"&&a.querySelector(Xn(u))||(l=a.createElement("link"),St(l,"link",t),gt(l),a.head.appendChild(l)))}}function vm(t,l){Nl.m(t,l);var e=Ra;if(e&&t){var a=l&&typeof l.as=="string"?l.as:"script",n='link[rel="modulepreload"][as="'+Kt(a)+'"][href="'+Kt(t)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Da(t)}if(!kt.has(u)&&(t=F({rel:"modulepreload",href:t},l),kt.set(u,t),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(Xn(u)))return}a=e.createElement("link"),St(a,"link",t),gt(a),e.head.appendChild(a)}}}function gm(t,l,e){Nl.S(t,l,e);var a=Ra;if(a&&t){var n=aa(a).hoistableStyles,u=Ta(t);l=l||"default";var i=n.get(u);if(!i){var c={loading:0,preload:null};if(i=a.querySelector(Yn(u)))c.loading=5;else{t=F({rel:"stylesheet",href:t,"data-precedence":l},e),(e=kt.get(u))&&ur(t,e);var f=i=a.createElement("link");gt(f),St(f,"link",t),f._p=new Promise(function(r,v){f.onload=r,f.onerror=v}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,yu(i,l,a)}i={type:"stylesheet",instance:i,count:1,state:c},n.set(u,i)}}}function mm(t,l){Nl.X(t,l);var e=Ra;if(e&&t){var a=aa(e).hoistableScripts,n=Da(t),u=a.get(n);u||(u=e.querySelector(Xn(n)),u||(t=F({src:t,async:!0},l),(l=kt.get(n))&&ir(t,l),u=e.createElement("script"),gt(u),St(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function ym(t,l){Nl.M(t,l);var e=Ra;if(e&&t){var a=aa(e).hoistableScripts,n=Da(t),u=a.get(n);u||(u=e.querySelector(Xn(n)),u||(t=F({src:t,async:!0,type:"module"},l),(l=kt.get(n))&&ir(t,l),u=e.createElement("script"),gt(u),St(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function Mo(t,l,e,a){var n=(n=Fl.current)?Vu(n):null;if(!n)throw Error(p(446));switch(t){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(l=Ta(e.href),e=aa(n).hoistableStyles,a=e.get(l),a||(a={type:"style",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){t=Ta(e.href);var u=aa(n).hoistableStyles,i=u.get(t);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(t,i),(u=n.querySelector(Yn(t)))&&!u._p&&(i.instance=u,i.state.loading=5),kt.has(t)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},kt.set(t,e),u||bm(n,t,e,i.state))),l&&a===null)throw Error(p(528,""));return i}if(l&&a!==null)throw Error(p(529,""));return null;case"script":return l=e.async,e=e.src,typeof e=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=Da(e),e=aa(n).hoistableScripts,a=e.get(l),a||(a={type:"script",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(p(444,t))}}function Ta(t){return'href="'+Kt(t)+'"'}function Yn(t){return'link[rel="stylesheet"]['+t+"]"}function F0(t){return F({},t,{"data-precedence":t.precedence,precedence:null})}function bm(t,l,e,a){t.querySelector('link[rel="preload"][as="style"]['+l+"]")?a.loading=1:(l=t.createElement("link"),a.preload=l,l.addEventListener("load",function(){return a.loading|=1}),l.addEventListener("error",function(){return a.loading|=2}),St(l,"link",e),gt(l),t.head.appendChild(l))}function Da(t){return'[src="'+Kt(t)+'"]'}function Xn(t){return"script[async]"+t}function jo(t,l,e){if(l.count++,l.instance===null)switch(l.type){case"style":var a=t.querySelector('style[data-href~="'+Kt(e.href)+'"]');if(a)return l.instance=a,gt(a),a;var n=F({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),gt(a),St(a,"style",n),yu(a,e.precedence,t),l.instance=a;case"stylesheet":n=Ta(e.href);var u=t.querySelector(Yn(n));if(u)return l.state.loading|=4,l.instance=u,gt(u),u;a=F0(e),(n=kt.get(n))&&ur(a,n),u=(t.ownerDocument||t).createElement("link"),gt(u);var i=u;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),St(u,"link",a),l.state.loading|=4,yu(u,e.precedence,t),l.instance=u;case"script":return u=Da(e.src),(n=t.querySelector(Xn(u)))?(l.instance=n,gt(n),n):(a=e,(n=kt.get(u))&&(a=F({},e),ir(a,n)),t=t.ownerDocument||t,n=t.createElement("script"),gt(n),St(n,"link",a),t.head.appendChild(n),l.instance=n);case"void":return null;default:throw Error(p(443,l.type))}else l.type==="stylesheet"&&!(l.state.loading&4)&&(a=l.instance,l.state.loading|=4,yu(a,e.precedence,t));return l.instance}function yu(t,l,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function pm(t,l,e){if(e===1||l.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return t=l.disabled,typeof l.precedence=="string"&&t==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function P0(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var Tn=null;function Sm(){}function Em(t,l,e){if(Tn===null)throw Error(p(475));var a=Tn;if(l.type==="stylesheet"&&(typeof e.media!="string"||matchMedia(e.media).matches!==!1)&&!(l.state.loading&4)){if(l.instance===null){var n=Ta(e.href),u=t.querySelector(Yn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(a.count++,a=Ku.bind(a),t.then(a,a)),l.state.loading|=4,l.instance=u,gt(u);return}u=t.ownerDocument||t,e=F0(e),(n=kt.get(n))&&ur(e,n),u=u.createElement("link"),gt(u);var i=u;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),St(u,"link",e),l.instance=u}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,t),(t=l.state.preload)&&!(l.state.loading&3)&&(a.count++,l=Ku.bind(a),t.addEventListener("load",l),t.addEventListener("error",l))}}function Tm(){if(Tn===null)throw Error(p(475));var t=Tn;return t.stylesheets&&t.count===0&&Pc(t,t.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(uh)}catch(t){console.error(t)}}uh(),_s.exports=ti;var jm=_s.exports;function Nm(t={}){const{nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a}=t,[n,u]=R.useState(!1),i=R.useRef(e);i.current=e;const c=R.useRef(a);return c.current=a,R.useEffect(()=>{const f=document.createElement("script");return f.src="https://accounts.google.com/gsi/client",f.async=!0,f.defer=!0,f.nonce=l,f.onload=()=>{var r;u(!0),(r=i.current)===null||r===void 0||r.call(i)},f.onerror=()=>{var r;u(!1),(r=c.current)===null||r===void 0||r.call(c)},document.body.appendChild(f),()=>{document.body.removeChild(f)}},[l]),n}const ih=R.createContext(null);function Um({clientId:t,nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a,children:n}){const u=Nm({nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a}),i=R.useMemo(()=>({clientId:t,scriptLoadedSuccessfully:u}),[t,u]);return Ts.createElement(ih.Provider,{value:i},n)}function wm(){const t=R.useContext(ih);if(!t)throw new Error("Google OAuth components must be used within GoogleOAuthProvider");return t}function Cm(t){var l;return(l=t==null?void 0:t.clientId)!==null&&l!==void 0?l:t==null?void 0:t.client_id}const Hm={large:40,medium:32,small:20};function Bm({onSuccess:t,onError:l,useOneTap:e,promptMomentNotification:a,type:n="standard",theme:u="outline",size:i="large",text:c,shape:f,logo_alignment:r,width:v,locale:m,click_listener:d,containerProps:g,...S}){const E=R.useRef(null),{clientId:x,scriptLoadedSuccessfully:s}=wm(),o=R.useRef(t);o.current=t;const h=R.useRef(l);h.current=l;const y=R.useRef(a);return y.current=a,R.useEffect(()=>{var T,A,z,O,X,D,et,G,Cl;if(s)return(z=(A=(T=window==null?void 0:window.google)===null||T===void 0?void 0:T.accounts)===null||A===void 0?void 0:A.id)===null||z===void 0||z.initialize({client_id:x,callback:ht=>{var Rt;if(!(ht!=null&&ht.credential))return(Rt=h.current)===null||Rt===void 0?void 0:Rt.call(h);const{credential:_,select_by:M}=ht;o.current({credential:_,clientId:Cm(ht),select_by:M})},...S}),(D=(X=(O=window==null?void 0:window.google)===null||O===void 0?void 0:O.accounts)===null||X===void 0?void 0:X.id)===null||D===void 0||D.renderButton(E.current,{type:n,theme:u,size:i,text:c,shape:f,logo_alignment:r,width:v,locale:m,click_listener:d}),e&&((Cl=(G=(et=window==null?void 0:window.google)===null||et===void 0?void 0:et.accounts)===null||G===void 0?void 0:G.id)===null||Cl===void 0||Cl.prompt(y.current)),()=>{var ht,Rt,_;e&&((_=(Rt=(ht=window==null?void 0:window.google)===null||ht===void 0?void 0:ht.accounts)===null||Rt===void 0?void 0:Rt.id)===null||_===void 0||_.cancel())}},[x,s,e,n,u,i,c,f,r,v,m]),Ts.createElement("div",{...g,ref:E,style:{height:Hm[i],...g==null?void 0:g.style}})}const Gm=t=>!!(t&&t.constructor&&t.call&&t.apply),ch=(t,l)=>{if(Object.is(t,l))return!0;if(t instanceof Date&&l instanceof Date)return t.getTime()===l.getTime();if(t instanceof RegExp&&l instanceof RegExp)return t.toString()===l.toString();if(typeof t!="object"||t===null||typeof l!="object"||l===null)return!1;const e=Reflect.ownKeys(t),a=Reflect.ownKeys(l);if(e.length!==a.length)return!1;for(let n=0;n{try{return t==="undefined"?void 0:JSON.parse(t??"")}catch{console.error("parsing error on",{value:t});return}},qo=(t,l,e)=>{const a=R.useRef();R.useEffect(()=>{const n=window;if(!(n!=null&&n.addEventListener))return;a.current!==l&&(a.current=l);const u=i=>{a!=null&&a.current&&a.current(i)};return n.addEventListener(t,u),()=>{n.removeEventListener(t,u)}},[t,e,l])},Ym=t=>t==null,Xm=t=>{try{const l=window.localStorage.getItem(t);return(l&&qm(l))??void 0}catch(l){return console.warn(`Error reading localStorage key "${t}":`,l),{error:"unable to read value"}}},Qm=t=>!!(t!=null&&t.error),El=(t,l)=>{const e=R.useRef(l),a=()=>{if(typeof window>"u")return l;const f=Xm(t);return Qm(f)||Ym(f)||f===""?l:f},[n,u]=R.useState(a),i=f=>{typeof window>"u"&&console.warn(`Tried setting localStorage key "${t}" even though environment is not a client`);try{const r=Gm(f)?f(n):f;window.localStorage.setItem(t,JSON.stringify(r)),u(r),window.dispatchEvent(new Event("local-storage"))}catch(r){console.warn(`Error setting localStorage key "${t}":`,r)}};R.useEffect(()=>{const f=a();u(f),e.current=f},[]);const c=()=>{const f=a();ch(f,e.current)||(u(f),e.current=f)};return qo("storage",c),qo("local-storage",c),[n,i]};function fh(t){var l,e,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t))for(l=0;ltypeof t=="boolean"?"".concat(t):t===0?"0":t,Xo=Lm,sr=(t,l)=>e=>{var a;if((l==null?void 0:l.variants)==null)return Xo(t,e==null?void 0:e.class,e==null?void 0:e.className);const{variants:n,defaultVariants:u}=l,i=Object.keys(n).map(r=>{const v=e==null?void 0:e[r],m=u==null?void 0:u[r];if(v===null)return null;const d=Yo(v)||Yo(m);return n[r][d]}),c=e&&Object.entries(e).reduce((r,v)=>{let[m,d]=v;return d===void 0||(r[m]=d),r},{}),f=l==null||(a=l.compoundVariants)===null||a===void 0?void 0:a.reduce((r,v)=>{let{class:m,className:d,...g}=v;return Object.entries(g).every(S=>{let[E,x]=S;return Array.isArray(x)?x.includes({...u,...c}[E]):{...u,...c}[E]===x})?[...r,m,d]:r},[]);return Xo(t,i,f,e==null?void 0:e.class,e==null?void 0:e.className)};function rh(t){var l,e,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(l=0;l{const l=Jm(t),{conflictingClassGroups:e,conflictingClassGroupModifiers:a}=t;return{getClassGroupId:i=>{const c=i.split(dr);return c[0]===""&&c.length!==1&&c.shift(),oh(c,l)||Km(i)},getConflictingClassGroupIds:(i,c)=>{const f=e[i]||[];return c&&a[i]?[...f,...a[i]]:f}}},oh=(t,l)=>{var i;if(t.length===0)return l.classGroupId;const e=t[0],a=l.nextPart.get(e),n=a?oh(t.slice(1),a):void 0;if(n)return n;if(l.validators.length===0)return;const u=t.join(dr);return(i=l.validators.find(({validator:c})=>c(u)))==null?void 0:i.classGroupId},Qo=/^\[(.+)\]$/,Km=t=>{if(Qo.test(t)){const l=Qo.exec(t)[1],e=l==null?void 0:l.substring(0,l.indexOf(":"));if(e)return"arbitrary.."+e}},Jm=t=>{const{theme:l,prefix:e}=t,a={nextPart:new Map,validators:[]};return km(Object.entries(t.classGroups),e).forEach(([u,i])=>{lf(i,a,u,l)}),a},lf=(t,l,e,a)=>{t.forEach(n=>{if(typeof n=="string"){const u=n===""?l:Lo(l,n);u.classGroupId=e;return}if(typeof n=="function"){if($m(n)){lf(n(a),l,e,a);return}l.validators.push({validator:n,classGroupId:e});return}Object.entries(n).forEach(([u,i])=>{lf(i,Lo(l,u),e,a)})})},Lo=(t,l)=>{let e=t;return l.split(dr).forEach(a=>{e.nextPart.has(a)||e.nextPart.set(a,{nextPart:new Map,validators:[]}),e=e.nextPart.get(a)}),e},$m=t=>t.isThemeGetter,km=(t,l)=>l?t.map(([e,a])=>{const n=a.map(u=>typeof u=="string"?l+u:typeof u=="object"?Object.fromEntries(Object.entries(u).map(([i,c])=>[l+i,c])):u);return[e,n]}):t,Wm=t=>{if(t<1)return{get:()=>{},set:()=>{}};let l=0,e=new Map,a=new Map;const n=(u,i)=>{e.set(u,i),l++,l>t&&(l=0,a=e,e=new Map)};return{get(u){let i=e.get(u);if(i!==void 0)return i;if((i=a.get(u))!==void 0)return n(u,i),i},set(u,i){e.has(u)?e.set(u,i):n(u,i)}}},sh="!",Fm=t=>{const{separator:l,experimentalParseClassName:e}=t,a=l.length===1,n=l[0],u=l.length,i=c=>{const f=[];let r=0,v=0,m;for(let x=0;xv?m-v:void 0;return{modifiers:f,hasImportantModifier:g,baseClassName:S,maybePostfixModifierPosition:E}};return e?c=>e({className:c,parseClassName:i}):i},Pm=t=>{if(t.length<=1)return t;const l=[];let e=[];return t.forEach(a=>{a[0]==="["?(l.push(...e.sort(),a),e=[]):e.push(a)}),l.push(...e.sort()),l},Im=t=>({cache:Wm(t.cacheSize),parseClassName:Fm(t),...Vm(t)}),ty=/\s+/,ly=(t,l)=>{const{parseClassName:e,getClassGroupId:a,getConflictingClassGroupIds:n}=l,u=[],i=t.trim().split(ty);let c="";for(let f=i.length-1;f>=0;f-=1){const r=i[f],{modifiers:v,hasImportantModifier:m,baseClassName:d,maybePostfixModifierPosition:g}=e(r);let S=!!g,E=a(S?d.substring(0,g):d);if(!E){if(!S){c=r+(c.length>0?" "+c:c);continue}if(E=a(d),!E){c=r+(c.length>0?" "+c:c);continue}S=!1}const x=Pm(v).join(":"),s=m?x+sh:x,o=s+E;if(u.includes(o))continue;u.push(o);const h=n(E,S);for(let y=0;y0?" "+c:c)}return c};function ey(){let t=0,l,e,a="";for(;t{if(typeof t=="string")return t;let l,e="";for(let a=0;am(v),t());return e=Im(r),a=e.cache.get,n=e.cache.set,u=c,c(f)}function c(f){const r=a(f);if(r)return r;const v=ly(f,e);return n(f,v),v}return function(){return u(ey.apply(null,arguments))}}const $=t=>{const l=e=>e[t]||[];return l.isThemeGetter=!0,l},hh=/^\[(?:([a-z-]+):)?(.+)\]$/i,ny=/^\d+\/\d+$/,uy=new Set(["px","full","screen"]),iy=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,cy=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,fy=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ry=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,oy=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,gl=t=>da(t)||uy.has(t)||ny.test(t),Bl=t=>Ma(t,"length",by),da=t=>!!t&&!Number.isNaN(Number(t)),ec=t=>Ma(t,"number",da),qa=t=>!!t&&Number.isInteger(Number(t)),sy=t=>t.endsWith("%")&&da(t.slice(0,-1)),U=t=>hh.test(t),Gl=t=>iy.test(t),dy=new Set(["length","size","percentage"]),hy=t=>Ma(t,dy,vh),vy=t=>Ma(t,"position",vh),gy=new Set(["image","url"]),my=t=>Ma(t,gy,Sy),yy=t=>Ma(t,"",py),Ya=()=>!0,Ma=(t,l,e)=>{const a=hh.exec(t);return a?a[1]?typeof l=="string"?a[1]===l:l.has(a[1]):e(a[2]):!1},by=t=>cy.test(t)&&!fy.test(t),vh=()=>!1,py=t=>ry.test(t),Sy=t=>oy.test(t),Ey=()=>{const t=$("colors"),l=$("spacing"),e=$("blur"),a=$("brightness"),n=$("borderColor"),u=$("borderRadius"),i=$("borderSpacing"),c=$("borderWidth"),f=$("contrast"),r=$("grayscale"),v=$("hueRotate"),m=$("invert"),d=$("gap"),g=$("gradientColorStops"),S=$("gradientColorStopPositions"),E=$("inset"),x=$("margin"),s=$("opacity"),o=$("padding"),h=$("saturate"),y=$("scale"),T=$("sepia"),A=$("skew"),z=$("space"),O=$("translate"),X=()=>["auto","contain","none"],D=()=>["auto","hidden","clip","visible","scroll"],et=()=>["auto",U,l],G=()=>[U,l],Cl=()=>["",gl,Bl],ht=()=>["auto",da,U],Rt=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],_=()=>["solid","dashed","dotted","double","none"],M=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],j=()=>["start","end","center","between","around","evenly","stretch"],K=()=>["","0",U],nt=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Dt=()=>[da,U];return{cacheSize:500,separator:":",theme:{colors:[Ya],spacing:[gl,Bl],blur:["none","",Gl,U],brightness:Dt(),borderColor:[t],borderRadius:["none","","full",Gl,U],borderSpacing:G(),borderWidth:Cl(),contrast:Dt(),grayscale:K(),hueRotate:Dt(),invert:K(),gap:G(),gradientColorStops:[t],gradientColorStopPositions:[sy,Bl],inset:et(),margin:et(),opacity:Dt(),padding:G(),saturate:Dt(),scale:Dt(),sepia:K(),skew:Dt(),space:G(),translate:G()},classGroups:{aspect:[{aspect:["auto","square","video",U]}],container:["container"],columns:[{columns:[Gl]}],"break-after":[{"break-after":nt()}],"break-before":[{"break-before":nt()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Rt(),U]}],overflow:[{overflow:D()}],"overflow-x":[{"overflow-x":D()}],"overflow-y":[{"overflow-y":D()}],overscroll:[{overscroll:X()}],"overscroll-x":[{"overscroll-x":X()}],"overscroll-y":[{"overscroll-y":X()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[E]}],"inset-x":[{"inset-x":[E]}],"inset-y":[{"inset-y":[E]}],start:[{start:[E]}],end:[{end:[E]}],top:[{top:[E]}],right:[{right:[E]}],bottom:[{bottom:[E]}],left:[{left:[E]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",qa,U]}],basis:[{basis:et()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",U]}],grow:[{grow:K()}],shrink:[{shrink:K()}],order:[{order:["first","last","none",qa,U]}],"grid-cols":[{"grid-cols":[Ya]}],"col-start-end":[{col:["auto",{span:["full",qa,U]},U]}],"col-start":[{"col-start":ht()}],"col-end":[{"col-end":ht()}],"grid-rows":[{"grid-rows":[Ya]}],"row-start-end":[{row:["auto",{span:[qa,U]},U]}],"row-start":[{"row-start":ht()}],"row-end":[{"row-end":ht()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",U]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",U]}],gap:[{gap:[d]}],"gap-x":[{"gap-x":[d]}],"gap-y":[{"gap-y":[d]}],"justify-content":[{justify:["normal",...j()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...j(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...j(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[o]}],px:[{px:[o]}],py:[{py:[o]}],ps:[{ps:[o]}],pe:[{pe:[o]}],pt:[{pt:[o]}],pr:[{pr:[o]}],pb:[{pb:[o]}],pl:[{pl:[o]}],m:[{m:[x]}],mx:[{mx:[x]}],my:[{my:[x]}],ms:[{ms:[x]}],me:[{me:[x]}],mt:[{mt:[x]}],mr:[{mr:[x]}],mb:[{mb:[x]}],ml:[{ml:[x]}],"space-x":[{"space-x":[z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",U,l]}],"min-w":[{"min-w":[U,l,"min","max","fit"]}],"max-w":[{"max-w":[U,l,"none","full","min","max","fit","prose",{screen:[Gl]},Gl]}],h:[{h:[U,l,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[U,l,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[U,l,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[U,l,"auto","min","max","fit"]}],"font-size":[{text:["base",Gl,Bl]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",ec]}],"font-family":[{font:[Ya]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",U]}],"line-clamp":[{"line-clamp":["none",da,ec]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",gl,U]}],"list-image":[{"list-image":["none",U]}],"list-style-type":[{list:["none","disc","decimal",U]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[t]}],"placeholder-opacity":[{"placeholder-opacity":[s]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[t]}],"text-opacity":[{"text-opacity":[s]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[..._(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",gl,Bl]}],"underline-offset":[{"underline-offset":["auto",gl,U]}],"text-decoration-color":[{decoration:[t]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:G()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",U]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",U]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[s]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Rt(),vy]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",hy]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},my]}],"bg-color":[{bg:[t]}],"gradient-from-pos":[{from:[S]}],"gradient-via-pos":[{via:[S]}],"gradient-to-pos":[{to:[S]}],"gradient-from":[{from:[g]}],"gradient-via":[{via:[g]}],"gradient-to":[{to:[g]}],rounded:[{rounded:[u]}],"rounded-s":[{"rounded-s":[u]}],"rounded-e":[{"rounded-e":[u]}],"rounded-t":[{"rounded-t":[u]}],"rounded-r":[{"rounded-r":[u]}],"rounded-b":[{"rounded-b":[u]}],"rounded-l":[{"rounded-l":[u]}],"rounded-ss":[{"rounded-ss":[u]}],"rounded-se":[{"rounded-se":[u]}],"rounded-ee":[{"rounded-ee":[u]}],"rounded-es":[{"rounded-es":[u]}],"rounded-tl":[{"rounded-tl":[u]}],"rounded-tr":[{"rounded-tr":[u]}],"rounded-br":[{"rounded-br":[u]}],"rounded-bl":[{"rounded-bl":[u]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[s]}],"border-style":[{border:[..._(),"hidden"]}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[s]}],"divide-style":[{divide:_()}],"border-color":[{border:[n]}],"border-color-x":[{"border-x":[n]}],"border-color-y":[{"border-y":[n]}],"border-color-t":[{"border-t":[n]}],"border-color-r":[{"border-r":[n]}],"border-color-b":[{"border-b":[n]}],"border-color-l":[{"border-l":[n]}],"divide-color":[{divide:[n]}],"outline-style":[{outline:["",..._()]}],"outline-offset":[{"outline-offset":[gl,U]}],"outline-w":[{outline:[gl,Bl]}],"outline-color":[{outline:[t]}],"ring-w":[{ring:Cl()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[t]}],"ring-opacity":[{"ring-opacity":[s]}],"ring-offset-w":[{"ring-offset":[gl,Bl]}],"ring-offset-color":[{"ring-offset":[t]}],shadow:[{shadow:["","inner","none",Gl,yy]}],"shadow-color":[{shadow:[Ya]}],opacity:[{opacity:[s]}],"mix-blend":[{"mix-blend":[...M(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":M()}],filter:[{filter:["","none"]}],blur:[{blur:[e]}],brightness:[{brightness:[a]}],contrast:[{contrast:[f]}],"drop-shadow":[{"drop-shadow":["","none",Gl,U]}],grayscale:[{grayscale:[r]}],"hue-rotate":[{"hue-rotate":[v]}],invert:[{invert:[m]}],saturate:[{saturate:[h]}],sepia:[{sepia:[T]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[e]}],"backdrop-brightness":[{"backdrop-brightness":[a]}],"backdrop-contrast":[{"backdrop-contrast":[f]}],"backdrop-grayscale":[{"backdrop-grayscale":[r]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[v]}],"backdrop-invert":[{"backdrop-invert":[m]}],"backdrop-opacity":[{"backdrop-opacity":[s]}],"backdrop-saturate":[{"backdrop-saturate":[h]}],"backdrop-sepia":[{"backdrop-sepia":[T]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",U]}],duration:[{duration:Dt()}],ease:[{ease:["linear","in","out","in-out",U]}],delay:[{delay:Dt()}],animate:[{animate:["none","spin","ping","pulse","bounce",U]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[y]}],"scale-x":[{"scale-x":[y]}],"scale-y":[{"scale-y":[y]}],rotate:[{rotate:[qa,U]}],"translate-x":[{"translate-x":[O]}],"translate-y":[{"translate-y":[O]}],"skew-x":[{"skew-x":[A]}],"skew-y":[{"skew-y":[A]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",U]}],accent:[{accent:["auto",t]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",U]}],"caret-color":[{caret:[t]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":G()}],"scroll-mx":[{"scroll-mx":G()}],"scroll-my":[{"scroll-my":G()}],"scroll-ms":[{"scroll-ms":G()}],"scroll-me":[{"scroll-me":G()}],"scroll-mt":[{"scroll-mt":G()}],"scroll-mr":[{"scroll-mr":G()}],"scroll-mb":[{"scroll-mb":G()}],"scroll-ml":[{"scroll-ml":G()}],"scroll-p":[{"scroll-p":G()}],"scroll-px":[{"scroll-px":G()}],"scroll-py":[{"scroll-py":G()}],"scroll-ps":[{"scroll-ps":G()}],"scroll-pe":[{"scroll-pe":G()}],"scroll-pt":[{"scroll-pt":G()}],"scroll-pr":[{"scroll-pr":G()}],"scroll-pb":[{"scroll-pb":G()}],"scroll-pl":[{"scroll-pl":G()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",U]}],fill:[{fill:[t,"none"]}],"stroke-w":[{stroke:[gl,Bl,ec]}],stroke:[{stroke:[t,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Ty=ay(Ey);function st(...t){return Ty(Zm(t))}const _y=sr("relative w-full rounded-lg border bg-background px-4 py-3 text-foreground text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:text-foreground [&>svg~*]:pl-7",{variants:{variant:{default:"",destructive:"border-destructive/50 dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),_e=R.forwardRef(({className:t,variant:l,...e},a)=>b.jsx("div",{ref:a,role:"alert",className:st(_y({variant:l}),t),...e})),ha=R.forwardRef(({className:t,...l},e)=>b.jsx("h3",{ref:e,className:st("mb-1 font-bold leading-none",t),...l})),Ae=R.forwardRef(({className:t,...l},e)=>b.jsx("div",{ref:e,className:st("text-sm [&_p]:leading-relaxed",t),...l}));_e.displayName="Alert";ha.displayName="AlertTitle";Ae.displayName="AlertDescription";function Ay(t,l){typeof t=="function"?t(l):t!=null&&(t.current=l)}function xy(...t){return l=>t.forEach(e=>Ay(e,l))}var gh=R.forwardRef((t,l)=>{const{children:e,...a}=t,n=R.Children.toArray(e),u=n.find(Oy);if(u){const i=u.props.children,c=n.map(f=>f===u?R.Children.count(i)>1?R.Children.only(null):R.isValidElement(i)?i.props.children:null:f);return b.jsx(ef,{...a,ref:l,children:R.isValidElement(i)?R.cloneElement(i,void 0,c):null})}return b.jsx(ef,{...a,ref:l,children:e})});gh.displayName="Slot";var ef=R.forwardRef((t,l)=>{const{children:e,...a}=t;if(R.isValidElement(e)){const n=Dy(e);return R.cloneElement(e,{...Ry(a,e.props),ref:l?xy(l,n):n})}return R.Children.count(e)>1?R.Children.only(null):null});ef.displayName="SlotClone";var zy=({children:t})=>b.jsx(b.Fragment,{children:t});function Oy(t){return R.isValidElement(t)&&t.type===zy}function Ry(t,l){const e={...l};for(const a in l){const n=t[a],u=l[a];/^on[A-Z]/.test(a)?n&&u?e[a]=(...c)=>{u(...c),n(...c)}:n&&(e[a]=n):a==="style"?e[a]={...n,...u}:a==="className"&&(e[a]=[n,u].filter(Boolean).join(" "))}return{...t,...e}}function Dy(t){var a,n;let l=(a=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:a.get,e=l&&"isReactWarning"in l&&l.isReactWarning;return e?t.ref:(l=(n=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:n.get,e=l&&"isReactWarning"in l&&l.isReactWarning,e?t.props.ref:t.props.ref||t.ref)}/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const My=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),mh=(...t)=>t.filter((l,e,a)=>!!l&&a.indexOf(l)===e).join(" ");/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var jy={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ny=R.forwardRef(({color:t="currentColor",size:l=24,strokeWidth:e=2,absoluteStrokeWidth:a,className:n="",children:u,iconNode:i,...c},f)=>R.createElement("svg",{ref:f,...jy,width:l,height:l,stroke:t,strokeWidth:a?Number(e)*24/Number(l):e,className:mh("lucide",n),...c},[...i.map(([r,v])=>R.createElement(r,v)),...Array.isArray(u)?u:[u]]));/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hr=(t,l)=>{const e=R.forwardRef(({className:a,...n},u)=>R.createElement(Ny,{ref:u,iconNode:l,className:mh(`lucide-${My(t)}`,a),...n}));return e.displayName=`${t}`,e};/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yh=hr("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const af=hr("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-react v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uy=hr("TriangleAlert",[["path",{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",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),wy=sr("inline-flex items-center justify-center whitespace-nowrap rounded-md font-bold text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary font-bold text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8 text-lg",icon:"size-9","icon-sm":"size-8"}},defaultVariants:{variant:"default",size:"default"}}),ac=sr(void 0,{variants:{size:{default:"size-4 max-w-4",sm:"size-3 max-w-3",lg:"size-5 max-w-5",icon:"mr-0 size-4","icon-sm":"mr-0 size-3"}},defaultVariants:{size:"default"}}),yi=R.forwardRef(({className:t,startIcon:l,isLoading:e=!1,variant:a,endIcon:n,size:u,children:i,asChild:c=!1,...f},r)=>{const v=c?gh:"button";return b.jsxs(v,{className:st(wy({variant:a,size:u,className:t})),ref:r,...f,children:[b.jsx(af,{"data-testid":"loader-icon",className:st("animate-spin",!l&&"transition-all",e&&"mr-2 opacity-100",ac({size:u}),!e&&"mr-0 max-w-0 opacity-0")}),!e&&l&&R.cloneElement(l,{className:st("mr-2",ac({size:u}),l.props.className)}),i,n&&R.cloneElement(n,{className:st("ml-2",ac({size:u}),n.props.className)})]})});yi.displayName="Button";const vr=R.forwardRef(({className:t,...l},e)=>b.jsx("div",{className:"relative w-full overflow-auto",children:b.jsx("table",{ref:e,className:st("w-full caption-bottom text-sm",t),...l})})),gr=R.forwardRef(({className:t,...l},e)=>b.jsx("thead",{ref:e,className:st("[&_tr]:border-b",t),...l})),mr=R.forwardRef(({className:t,...l},e)=>b.jsx("tbody",{ref:e,className:st("[&_tr:last-child]:border-0",t),...l})),Cy=R.forwardRef(({className:t,...l},e)=>b.jsx("tfoot",{ref:e,className:st("border-t bg-muted/50 [&>tr]:last:border-b-0",t),...l})),On=R.forwardRef(({className:t,...l},e)=>b.jsx("tr",{ref:e,className:st("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",t),...l})),Jl=R.forwardRef(({className:t,...l},e)=>b.jsx("th",{ref:e,className:st("h-10 px-2 text-left align-middle font-bold text-muted-foreground last:overflow-x-hidden [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...l})),$l=R.forwardRef(({className:t,...l},e)=>b.jsx("td",{ref:e,className:st("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...l})),Hy=R.forwardRef(({className:t,...l},e)=>b.jsx("caption",{ref:e,className:st("mt-4 text-muted-foreground text-sm",t),...l}));vr.displayName="Table";mr.displayName="TableBody";Hy.displayName="TableCaption";$l.displayName="TableCell";Cy.displayName="TableFooter";Jl.displayName="TableHead";gr.displayName="TableHeader";On.displayName="TableRow";function By(t,l){return t.charAt(l)}function Gy(t,l=""){return t.join(l)}function qy(t,l=0,e=void 0){return t.slice(l,e)}function bh(t){return t.toLowerCase()}function Yy(t){return t.toUpperCase()}function ph(t){return Gy([Yy(By(t,0)??""),qy(t,1)])}function Xy({starkData:t}){var e,a,n;const l=t.status==="SUCCEEDED";return b.jsxs(vr,{children:[b.jsx(gr,{children:b.jsxs(On,{children:[b.jsx(Jl,{className:"truncate",children:"Status"}),!l&&b.jsx(Jl,{className:"truncate",children:"Error Message"}),b.jsx(Jl,{className:"truncate text-right",children:"Stats"}),b.jsx(Jl,{className:"truncate text-right",children:"Elapsed Time"}),l&&b.jsx(Jl,{className:"truncate text-right",children:"Receipt URL"})]})}),b.jsx(mr,{children:b.jsxs(On,{children:[b.jsx($l,{children:b.jsx("span",{className:st(t.status==="SUCCEEDED"&&"text-green-600 dark:text-green-500"),children:ph(bh(t.status))})}),!l&&b.jsx($l,{children:t.error_msg??"-"}),b.jsx($l,{children:b.jsxs("div",{className:"flex flex-col items-end",children:[b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Segments:"})," ",(e=t.stats)==null?void 0:e.segments]}),b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Cycles:"})," ",(a=t.stats)==null?void 0:a.cycles]}),b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Total Cycles:"})," ",(n=t.stats)==null?void 0:n.total_cycles]})]})}),b.jsxs($l,{className:"text-right",children:[t.elapsed_time,"s"]}),l&&b.jsx($l,{className:"text-right",children:b.jsx("a",{href:t.receipt_url,children:b.jsx(yi,{size:"sm",startIcon:b.jsx(yh,{}),children:"Download"})})})]})})]})}function Qy({snarkData:t}){const l=()=>{const e=`data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(t.output))}`,a=document.createElement("a");a.setAttribute("href",e),a.setAttribute("download",`snark_data_${new Date().toLocaleDateString()}.json`),document.body.appendChild(a),a.click(),a.remove()};return b.jsx(yi,{size:"sm",startIcon:b.jsx(yh,{}),onClick:l,children:"Download"})}function Ly({snarkData:t}){return b.jsxs(vr,{children:[b.jsx(gr,{children:b.jsxs(On,{children:[b.jsx(Jl,{className:"truncate",children:"Status"}),b.jsx(Jl,{className:"truncate text-right",children:"Output"})]})}),b.jsx(mr,{children:b.jsxs(On,{children:[b.jsx($l,{children:b.jsx("span",{className:st(t.status==="SUCCEEDED"&&"text-green-600 dark:text-green-500"),children:ph(bh(t.status))})}),b.jsx($l,{className:"text-right",children:b.jsx(Qy,{snarkData:t})})]})})]})}function nf(t){this.message=t}nf.prototype=new Error,nf.prototype.name="InvalidCharacterError";var Zo=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(t){var l=String(t).replace(/=+$/,"");if(l.length%4==1)throw new nf("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,a,n=0,u=0,i="";a=l.charAt(u++);~a&&(e=n%4?64*e+a:a,n++%4)?i+=String.fromCharCode(255&e>>(-2*n&6)):0)a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a);return i};function Zy(t){var l=t.replace(/-/g,"+").replace(/_/g,"/");switch(l.length%4){case 0:break;case 2:l+="==";break;case 3:l+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(Zo(e).replace(/(.)/g,function(a,n){var u=n.charCodeAt(0).toString(16).toUpperCase();return u.length<2&&(u="0"+u),"%"+u}))}(l)}catch{return Zo(l)}}function Wu(t){this.message=t}function Vy(t,l){if(typeof t!="string")throw new Wu("Invalid token specified");var e=(l=l||{}).header===!0?0:1;try{return JSON.parse(Zy(t.split(".")[e]))}catch(a){throw new Wu("Invalid token specified: "+a.message)}}Wu.prototype=new Error,Wu.prototype.name="InvalidTokenError";function Ky({address:t}){const[l,e]=El("google-infos",void 0),[a,n]=El("google-token",void 0);return R.useEffect(()=>{!a||l||e(Vy(a))},[a,e,l]),b.jsx(Bm,{auto_select:!0,theme:"filled_black",nonce:t,onSuccess:u=>{u.credential&&n(u.credential)}})}function Jy({loadingSrc:t="/loading.gif",loadingText:l="Loading…"}){return b.jsxs("div",{className:"mx-auto flex animate-fade-in-up flex-col items-center justify-center gap-3",children:[b.jsx("img",{height:120,width:128,src:t,alt:"Loading"}),b.jsx("p",{className:"text-sm",children:l})]})}function Sh(t){return new Promise(l=>setTimeout(l,t))}async function $y(t){const l=await fetch("https://zkauth.vercel.app/api/bonsai/snark-proving",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uuid:t})});if(!l.ok)throw new Error("Failed to start SNARK proving");return(await l.json()).uuid}async function Vo(t){const l=await fetch(`https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${t}`);if(!l.ok)throw new Error("Failed to get SNARK status");return l.json()}async function ky({starkUuid:t,setSnarkPollingResults:l}){const e=await $y(t);if(!e)throw new Error("SNARK UUID not found");let a=await Vo(e);for(l(a);a.status==="RUNNING";)await Sh(4e3),a=await Vo(e),l(a);return{snarkStatus:a}}function Wy(){this.__data__=[],this.size=0}function Eh(t,l){return t===l||t!==t&&l!==l}function bi(t,l){for(var e=t.length;e--;)if(Eh(t[e][0],l))return e;return-1}var Fy=Array.prototype,Py=Fy.splice;function Iy(t){var l=this.__data__,e=bi(l,t);if(e<0)return!1;var a=l.length-1;return e==a?l.pop():Py.call(l,e,1),--this.size,!0}function t1(t){var l=this.__data__,e=bi(l,t);return e<0?void 0:l[e][1]}function l1(t){return bi(this.__data__,t)>-1}function e1(t,l){var e=this.__data__,a=bi(e,t);return a<0?(++this.size,e.push([t,l])):e[a][1]=l,this}function Ul(t){var l=-1,e=t==null?0:t.length;for(this.clear();++lc))return!1;var r=u.get(t),v=u.get(l);if(r&&v)return r==l&&v==t;var m=-1,d=!0,g=e&ab?new Fu:void 0;for(u.set(t,l),u.set(l,t);++m-1&&t%1==0&&t-1&&t%1==0&&t<=Gb}var qb="[object Arguments]",Yb="[object Array]",Xb="[object Boolean]",Qb="[object Date]",Lb="[object Error]",Zb="[object Function]",Vb="[object Map]",Kb="[object Number]",Jb="[object Object]",$b="[object RegExp]",kb="[object Set]",Wb="[object String]",Fb="[object WeakMap]",Pb="[object ArrayBuffer]",Ib="[object DataView]",tp="[object Float32Array]",lp="[object Float64Array]",ep="[object Int8Array]",ap="[object Int16Array]",np="[object Int32Array]",up="[object Uint8Array]",ip="[object Uint8ClampedArray]",cp="[object Uint16Array]",fp="[object Uint32Array]",k={};k[tp]=k[lp]=k[ep]=k[ap]=k[np]=k[up]=k[ip]=k[cp]=k[fp]=!0;k[qb]=k[Yb]=k[Pb]=k[Xb]=k[Ib]=k[Qb]=k[Lb]=k[Zb]=k[Vb]=k[Kb]=k[Jb]=k[$b]=k[kb]=k[Wb]=k[Fb]=!1;function rp(t){return Mn(t)&&Dh(t.length)&&!!k[Qn(t)]}function op(t){return function(l){return t(l)}}var Mh=typeof Tl=="object"&&Tl&&!Tl.nodeType&&Tl,on=Mh&&typeof _l=="object"&&_l&&!_l.nodeType&&_l,sp=on&&on.exports===Mh,ic=sp&&Th.process,ts=function(){try{var t=on&&on.require&&on.require("util").types;return t||ic&&ic.binding&&ic.binding("util")}catch{}}(),ls=ts&&ts.isTypedArray,jh=ls?op(ls):rp,dp=Object.prototype,hp=dp.hasOwnProperty;function vp(t,l){var e=Pu(t),a=!e&&jb(t),n=!e&&!a&&uf(t),u=!e&&!a&&!n&&jh(t),i=e||a||n||u,c=i?Ob(t.length,String):[],f=c.length;for(var r in t)hp.call(t,r)&&!(i&&(r=="length"||n&&(r=="offset"||r=="parent")||u&&(r=="buffer"||r=="byteLength"||r=="byteOffset")||Bb(r,f)))&&c.push(r);return c}var gp=Object.prototype;function mp(t){var l=t&&t.constructor,e=typeof l=="function"&&l.prototype||gp;return t===e}function yp(t,l){return function(e){return t(l(e))}}var bp=yp(Object.keys,Object),pp=Object.prototype,Sp=pp.hasOwnProperty;function Ep(t){if(!mp(t))return bp(t);var l=[];for(var e in Object(t))Sp.call(t,e)&&e!="constructor"&&l.push(e);return l}function Tp(t){return t!=null&&Dh(t.length)&&!xh(t)}function _p(t){return Tp(t)?vp(t):Ep(t)}function es(t){return Eb(t,_p,zb)}var Ap=1,xp=Object.prototype,zp=xp.hasOwnProperty;function Op(t,l,e,a,n,u){var i=e&Ap,c=es(t),f=c.length,r=es(l),v=r.length;if(f!=v&&!i)return!1;for(var m=f;m--;){var d=c[m];if(!(i?d in l:zp.call(l,d)))return!1}var g=u.get(t),S=u.get(l);if(g&&S)return g==l&&S==t;var E=!0;u.set(t,l),u.set(l,t);for(var x=i;++m{const i=u==null?void 0:u.at(-1);return Bp(i,n)?u:[...u??[],n]});return{starkUuid:a,starkStatus:n}}function Yp({userInfos:t,type:l}){return b.jsx(_e,{className:"flex flex-row items-center gap-4 bg-neutral-50 p-5 dark:bg-neutral-900",children:b.jsxs(Ae,{className:"grid w-full",children:[b.jsx("p",{title:t.name,className:"truncate font-bold text-xl",children:t.name}),b.jsx("p",{title:t.email,className:"truncate text-muted-foreground text-sm",children:t.email}),b.jsx("p",{className:"mt-1 flex flex-row gap-2 font-mono text-[10px]",children:l==="google"&&b.jsxs(b.Fragment,{children:[b.jsx("img",{src:"https://zkauth.vercel.app/images/google.svg",width:16,height:16,alt:"Google"})," ","Google"]})})]})})}function Xp({address:t}){var x,s,o,h;const[l,e]=R.useTransition(),[a,n]=El("stark-results",void 0),[u,i]=El("snark-results",void 0),[c]=El("google-infos",void 0),[f]=El("google-token",void 0),[r,v]=R.useState(),[m,d]=R.useState(),[g,S]=R.useState();function E(){if(!f){console.error("JWT not found");return}e(async()=>{try{const{starkUuid:y,starkStatus:T}=await qp({iss:c?"Google":"test",setStarkPollingResults:S,token:f??""}),{snarkStatus:A}=await ky({setSnarkPollingResults:d,starkUuid:y});n(T),i(A)}catch(y){console.error("Error proving:",y),v(y)}})}return t?b.jsxs(b.Fragment,{children:[l?b.jsx(Jy,{loadingSrc:"https://zkauth.vercel.app/loading.gif",loadingText:"☕️ This will take a couple of minutes… Do not close your browser…"}):b.jsxs(b.Fragment,{children:[b.jsxs("p",{className:"mb-3 break-words text-xs",children:["You are about to prove that address"," ",b.jsx("strong",{title:t,children:t})," owns the following social account:"]}),c&&b.jsx(Yp,{type:"google",userInfos:c})]}),b.jsxs("div",{className:"mt-6 w-full",children:[b.jsxs(yi,{isLoading:l,onClick:E,size:"lg",autoFocus:!0,className:"flex w-full flex-row items-center gap-1.5",disabled:!!r||l,children:["Prove with"," ",b.jsx("img",{className:"-top-[1px] relative",width:58,height:16,src:"https://zkauth.vercel.app/images/bonsai-logo-light.svg",alt:"bonsai logo"})]}),g&&g.length>0&&b.jsxs(_e,{className:"mt-4 border-none px-0",children:[b.jsxs(ha,{children:["STARK Results"," ",b.jsxs("span",{className:st("text-muted-foreground",((x=g.at(-1))==null?void 0:x.status)==="SUCCEEDED"&&"font-bold text-green-600 dark:text-green-500",((s=g.at(-1))==null?void 0:s.status)==="FAILED"&&"font-bold text-red-600 dark:text-red-500"),children:["(",(o=g.at(-1))==null?void 0:o.status,")"]})]}),((h=g.at(-1))==null?void 0:h.status)!=="SUCCEEDED"&&b.jsx(Ae,{className:"rounded border bg-neutral-50 font-mono dark:bg-neutral-900",children:b.jsxs("div",{className:"flex flex-row items-start justify-between gap-2 px-3 py-2",children:[b.jsx("div",{className:"flex flex-col",children:g.map((y,T)=>b.jsx("code",{className:"block text-[10px]",children:y.state},T))}),b.jsx(af,{className:"mt-[0.25rem] size-3.5 animate-spin text-border"})]})})]}),m&&b.jsxs(_e,{className:"border-none px-0 pb-0",children:[b.jsxs(ha,{children:["SNARK Results"," ",b.jsxs("span",{className:st(m.status==="SUCCEEDED"&&"font-bold text-green-600 dark:text-green-500",m.status==="FAILED"&&"font-bold text-red-600 dark:text-red-500"),children:["(",m.status,")"]})]}),b.jsx(Ae,{className:"rounded border bg-neutral-50 font-mono dark:bg-neutral-900",children:b.jsxs("div",{className:"flex flex-row items-center justify-between gap-2 px-3 py-2 text-xs",children:["This will take ~2 minutes"," ",b.jsx(af,{className:"size-3.5 animate-spin text-border"})]})})]}),r&&b.jsxs(_e,{variant:"destructive",className:"mt-2",children:[b.jsx(Uy,{className:"size-4"}),b.jsxs(ha,{children:["Error ",r.status]}),b.jsx(Ae,{children:r.message})]})]})]}):null}function Qp({address:t}){console.log("YOUR ADDRESS IS:",t);const[l]=El("google-token",null),[e,a]=R.useState(1),[n]=El("stark-results",void 0),[u]=El("snark-results",void 0);return R.useEffect(()=>{if(!l){a(2);return}if(n||u){a(4);return}a(3)},[t,l,n,u]),b.jsx(Um,{clientId:"381952934096-ahvjn5cj420qiosnjl2g4o2olpbuopf9.apps.googleusercontent.com",children:e===2?b.jsx(Ky,{address:t}):e===3?b.jsx(Xp,{address:t}):b.jsxs(b.Fragment,{children:[n&&b.jsxs(_e,{className:"border-none px-0",children:[b.jsx(ha,{children:"STARK Results"}),b.jsx(Ae,{className:"rounded border bg-neutral-50 dark:bg-neutral-900",children:b.jsx(Xy,{starkData:n})})]}),u&&b.jsxs(_e,{className:"border-none px-0 pb-0",children:[b.jsx(ha,{children:"SNARK Results"}),b.jsx(Ae,{className:"rounded border bg-neutral-50 dark:bg-neutral-900",children:b.jsx(Ly,{snarkData:u})})]})]})})}var ds;const Lp=(ds=document.getElementById("zkauth"))==null?void 0:ds.getAttribute("data-address");jm.createRoot(document.getElementById("zkauth")).render(b.jsx(R.StrictMode,{children:b.jsx(Qp,{address:Lp??""})}))});export default Zp(); diff --git a/zk-auth/public/vite/index.html b/zk-auth/public/vite/index.html new file mode 100644 index 0000000..b109eaa --- /dev/null +++ b/zk-auth/public/vite/index.html @@ -0,0 +1,12 @@ + + + + + + + + + +
+ + From 2b6ae6da69608703bedf101b330cf35d020e50e3 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 12:52:23 -0400 Subject: [PATCH 028/110] fix: vite2 --- zk-auth/next.config.js | 24 +++++++++++++++++++++++- zk-auth/public/vite/index.html | 4 ++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 1695eb1..2362f2d 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,6 +3,28 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, {}); +const config = deepmerge(nextConfigBase, { + async headers() { + return [ + { + // matching all API routes + source: "/:path*", + headers: [ + { key: "Access-Control-Allow-Credentials", value: "true" }, + { key: "Access-Control-Allow-Origin", value: "*" }, + { + key: "Access-Control-Allow-Methods", + value: "GET,OPTIONS,PATCH,DELETE,POST,PUT", + }, + { + key: "Access-Control-Allow-Headers", + value: + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", + }, + ], + }, + ]; + }, +}); export default config; diff --git a/zk-auth/public/vite/index.html b/zk-auth/public/vite/index.html index b109eaa..6a54c98 100644 --- a/zk-auth/public/vite/index.html +++ b/zk-auth/public/vite/index.html @@ -3,8 +3,8 @@ - - + +
From 49ef909c6b2524c4578d5b8ebe0d4e0e9c5bf787 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 13:01:01 -0400 Subject: [PATCH 029/110] fix: vite3 --- zk-auth/next.config.js | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 2362f2d..1695eb1 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,28 +3,6 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, { - async headers() { - return [ - { - // matching all API routes - source: "/:path*", - headers: [ - { key: "Access-Control-Allow-Credentials", value: "true" }, - { key: "Access-Control-Allow-Origin", value: "*" }, - { - key: "Access-Control-Allow-Methods", - value: "GET,OPTIONS,PATCH,DELETE,POST,PUT", - }, - { - key: "Access-Control-Allow-Headers", - value: - "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", - }, - ], - }, - ]; - }, -}); +const config = deepmerge(nextConfigBase, {}); export default config; From f537edfcb795a6e50462dec7e3f6bac24f7039d2 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 13:03:51 -0400 Subject: [PATCH 030/110] fix: vite4 --- zk-auth/next.config.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/zk-auth/next.config.js b/zk-auth/next.config.js index 1695eb1..cd4f444 100644 --- a/zk-auth/next.config.js +++ b/zk-auth/next.config.js @@ -3,6 +3,28 @@ import "./src/env.js"; import { nextConfigBase } from "@risc0/ui/config/next.config.base.js"; import deepmerge from "deepmerge"; -const config = deepmerge(nextConfigBase, {}); +const config = deepmerge(nextConfigBase, { + async headers() { + return [ + { + // matching all API routes + source: "/api/:path*", + headers: [ + { key: "Access-Control-Allow-Credentials", value: "true" }, + { key: "Access-Control-Allow-Origin", value: "*" }, + { + key: "Access-Control-Allow-Methods", + value: "GET,OPTIONS,PATCH,DELETE,POST,PUT", + }, + { + key: "Access-Control-Allow-Headers", + value: + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", + }, + ], + }, + ]; + }, +}); export default config; From a19d9b316740b2e8ad4c5aad5a418e620493a362 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:12:14 -0400 Subject: [PATCH 031/110] fix: wip --- biome.jsonc | 8 +- bonsai-pay/ui/src/main.tsx | 9 +- zk-auth/.husky/pre-commit | 4 + zk-auth/package/.npmignore | 27 ++ zk-auth/package/README.md | 51 +--- zk-auth/package/package.json | 52 ++-- zk-auth/package/src/App.tsx | 101 +++---- zk-auth/package/src/do-snark-proving.ts | 79 +++-- zk-auth/package/src/do-stark-proving.ts | 112 ++++--- zk-auth/package/src/download-button.tsx | 31 +- zk-auth/package/src/main.tsx | 6 +- zk-auth/package/src/prove-button.tsx | 279 ++++++++---------- zk-auth/package/src/sign-in-button.tsx | 44 ++- zk-auth/package/src/snark-table.tsx | 58 ++-- zk-auth/package/src/stark-table.tsx | 119 +++----- zk-auth/package/src/user-infos.tsx | 52 ++-- zk-auth/package/tailwind.config.ts | 15 +- zk-auth/package/tsconfig.json | 5 +- zk-auth/package/vite.config.ts | 22 +- .../public/{images => }/bonsai-logo-dark.svg | 0 .../public/{images => }/bonsai-logo-light.svg | 0 zk-auth/public/{images => }/google.svg | 0 zk-auth/public/{images => }/loading.gif | Bin zk-auth/public/vite/assets/index.css | 1 - zk-auth/public/vite/assets/index.js | 84 ------ zk-auth/public/vite/index.html | 12 - 26 files changed, 479 insertions(+), 692 deletions(-) create mode 100644 zk-auth/.husky/pre-commit create mode 100644 zk-auth/package/.npmignore rename zk-auth/public/{images => }/bonsai-logo-dark.svg (100%) rename zk-auth/public/{images => }/bonsai-logo-light.svg (100%) rename zk-auth/public/{images => }/google.svg (100%) rename zk-auth/public/{images => }/loading.gif (100%) delete mode 100644 zk-auth/public/vite/assets/index.css delete mode 100644 zk-auth/public/vite/assets/index.js delete mode 100644 zk-auth/public/vite/index.html diff --git a/biome.jsonc b/biome.jsonc index 2439aad..8dcab9e 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,6 +1,6 @@ { - "extends": ["./zk-socials/node_modules/@risc0/ui/biome.base.jsonc"], - "files": { - "include": ["zk-socials"] - } + "extends": ["./zk-auth/node_modules/@risc0/ui/config/biome.base.jsonc"], + "files": { + "include": ["zk-socials", "zk-auth"] + } } diff --git a/bonsai-pay/ui/src/main.tsx b/bonsai-pay/ui/src/main.tsx index 966f17a..9ab04cd 100644 --- a/bonsai-pay/ui/src/main.tsx +++ b/bonsai-pay/ui/src/main.tsx @@ -1,10 +1,11 @@ import React from "react"; import ReactDOM from "react-dom/client"; import App from "./App.tsx"; + import "./index.css"; -ReactDOM.createRoot(document.getElementById("root")!).render( - - - +ReactDOM.createRoot(document.getElementById("root")).render( + + + , ); diff --git a/zk-auth/.husky/pre-commit b/zk-auth/.husky/pre-commit new file mode 100644 index 0000000..1777ab2 --- /dev/null +++ b/zk-auth/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/bash + +bun run pre-commit +git add . diff --git a/zk-auth/package/.npmignore b/zk-auth/package/.npmignore new file mode 100644 index 0000000..74c429a --- /dev/null +++ b/zk-auth/package/.npmignore @@ -0,0 +1,27 @@ +# misc +.github +.gitignore +.husky +node_modules + +# typescript +tsconfig.json +tsconfig.tsbuildinfo + +# tests +*.test.* +*.spec.* +coverage +setup-tests.ts +vitest.config.ts + +# stories +.ladle +stories + +# config files only for risc0-ui +biome.jsonc +components.json +postcss.config.cjs +tailwind.config.ts +vite.config.ts diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 74872fd..ac9d5de 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -1,50 +1 @@ -# React + TypeScript + Vite - -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh - -## Expanding the ESLint configuration - -If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: - -- Configure the top-level `parserOptions` property like this: - -```js -export default tseslint.config({ - languageOptions: { - // other options... - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - }, -}) -``` - -- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` -- Optionally add `...tseslint.configs.stylisticTypeChecked` -- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: - -```js -// eslint.config.js -import react from 'eslint-plugin-react' - -export default tseslint.config({ - // Set the react version - settings: { react: { version: '18.3' } }, - plugins: { - // Add the react plugin - react, - }, - rules: { - // other rules... - // Enable its recommended rules - ...react.configs.recommended.rules, - ...react.configs['jsx-runtime'].rules, - }, -}) -``` +# zkAuth diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 4e04d17..173d76b 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,26 +1,30 @@ { - "name": "package", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite --port 3000", - "build": "tsc -b && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@react-oauth/google": "0.12.1", - "@risc0/ui": "0.0.168", - "react": "19.0.0-rc-f2df5694-20240916", - "react-dom": "19.0.0-rc-f2df5694-20240916", - "string-ts": "2.2.0" - }, - "devDependencies": { - "@types/react": "18.3.3", - "@types/react-dom": "18.3.0", - "@vitejs/plugin-react-swc": "3.5.0", - "globals": "15.9.0", - "typescript": "5.5.3", - "vite": "5.4.1" - } + "name": "@risc0/zkauth", + "version": "0.0.2", + "private": false, + "sideEffects": false, + "type": "module", + "files": ["dist"], + "scripts": { + "build": "tsc -b && vite build", + "dev": "vite --port 3000", + "package": "bun run build && rm dist/index.html && npm pack", + "preview": "vite preview" + }, + "devDependencies": { + "@react-oauth/google": "0.12.1", + "@risc0/ui": "0.0.168", + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "@vitejs/plugin-react-swc": "3.5.0", + "globals": "15.9.0", + "react": "19.0.0-rc-f2df5694-20240916", + "react-dom": "19.0.0-rc-f2df5694-20240916", + "string-ts": "2.2.0", + "typescript": "5.5.3", + "vite": "5.4.1" + }, + "publishConfig": { + "access": "public" + } } diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx index 2b54430..d475cf7 100644 --- a/zk-auth/package/src/App.tsx +++ b/zk-auth/package/src/App.tsx @@ -1,68 +1,61 @@ import "@risc0/ui/styles/globals.css"; import { GoogleOAuthProvider } from "@react-oauth/google"; +import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useEffect, useState } from "react"; -import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; -import { StarkTable } from "./stark-table"; -import { SnarkTable } from "./snark-table"; -import { SignInButton } from "./sign-in-button"; import { ProveButton } from "./prove-button"; +import { SignInButton } from "./sign-in-button"; +import { SnarkTable } from "./snark-table"; +import { StarkTable } from "./stark-table"; export function App({ address }: { address: string }) { - console.log("YOUR ADDRESS IS:", address); - const [googleUserToken] = useLocalStorage("google-token", null); - const [currentStep, setCurrentStep] = useState(1); - const [starkResults] = useLocalStorage( - "stark-results", - undefined, - ); - const [snarkResults] = useLocalStorage( - "snark-results", - undefined, - ); + const [googleUserToken] = useLocalStorage("google-token", null); + const [currentStep, setCurrentStep] = useState(1); + const [starkResults] = useLocalStorage("stark-results", undefined); + const [snarkResults] = useLocalStorage("snark-results", undefined); - useEffect(() => { - if (!googleUserToken) { - setCurrentStep(2); - return; - } + useEffect(() => { + if (!googleUserToken) { + setCurrentStep(2); + return; + } - if (starkResults || snarkResults) { - setCurrentStep(4); - return; - } + if (starkResults || snarkResults) { + setCurrentStep(4); + return; + } - setCurrentStep(3); - }, [address, googleUserToken, starkResults, snarkResults]); + setCurrentStep(3); + }, [address, googleUserToken, starkResults, snarkResults]); - return ( - - {currentStep === 2 ? ( - - ) : currentStep === 3 ? ( - - ) : ( - <> - {starkResults && ( - - STARK Results - - - - - )} + return ( + + {currentStep === 2 ? ( + + ) : currentStep === 3 ? ( + + ) : ( + <> + {starkResults && ( + + STARK Results + + + + + )} - {snarkResults && ( - - SNARK Results - - - - - )} - - )} - - ); + {snarkResults && ( + + SNARK Results + + + + + )} + + )} + + ); } diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/do-snark-proving.ts index 81565dc..cd465e5 100644 --- a/zk-auth/package/src/do-snark-proving.ts +++ b/zk-auth/package/src/do-snark-proving.ts @@ -2,69 +2,60 @@ import { sleep } from "@risc0/ui/utils/sleep"; import type { Dispatch, SetStateAction } from "react"; type SnarkSessionStatusRes = { - status: string; - // Add other properties as needed + status: string; + // Add other properties as needed }; async function bonsaiSnarkProving(uuid: string): Promise { - const response = await fetch( - "https://zkauth.vercel.app/api/bonsai/snark-proving", - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ uuid }), - }, - ); + const response = await fetch("https://zkauth.vercel.app/api/bonsai/snark-proving", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ uuid }), + }); - if (!response.ok) { - throw new Error("Failed to start SNARK proving"); - } + if (!response.ok) { + throw new Error("Failed to start SNARK proving"); + } - const data = await response.json(); + const data = await response.json(); - return data.uuid; + return data.uuid; } -async function getBonsaiSnarkStatus( - uuid: string, -): Promise { - const response = await fetch( - `https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`, - ); +async function getBonsaiSnarkStatus(uuid: string): Promise { + const response = await fetch(`https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${uuid}`); - if (!response.ok) { - throw new Error("Failed to get SNARK status"); - } + if (!response.ok) { + throw new Error("Failed to get SNARK status"); + } - return response.json(); + return response.json(); } export async function doSnarkProving({ - starkUuid, - setSnarkPollingResults, + starkUuid, + setSnarkPollingResults, }: { - starkUuid: string; - setSnarkPollingResults: Dispatch< - SetStateAction - >; + starkUuid: string; + setSnarkPollingResults: Dispatch>; }) { - const snarkUuid = await bonsaiSnarkProving(starkUuid); + const snarkUuid = await bonsaiSnarkProving(starkUuid); - if (!snarkUuid) { - throw new Error("SNARK UUID not found"); - } + if (!snarkUuid) { + throw new Error("SNARK UUID not found"); + } - let snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + let snarkStatus = await getBonsaiSnarkStatus(snarkUuid); - setSnarkPollingResults(snarkStatus); + setSnarkPollingResults(snarkStatus); - // Poll until the session is not RUNNING - while (snarkStatus.status === "RUNNING") { - await sleep(4000); // Wait for 4 seconds - snarkStatus = await getBonsaiSnarkStatus(snarkUuid); + // Poll until the session is not RUNNING + while (snarkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + snarkStatus = await getBonsaiSnarkStatus(snarkUuid); - setSnarkPollingResults(snarkStatus); - } + setSnarkPollingResults(snarkStatus); + } - return { snarkStatus }; + return { snarkStatus }; } diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts index 31ce0c0..f37c0fa 100644 --- a/zk-auth/package/src/do-stark-proving.ts +++ b/zk-auth/package/src/do-stark-proving.ts @@ -3,85 +3,73 @@ import isEqual from "lodash-es/isEqual"; import type { Dispatch, SetStateAction } from "react"; type StarkSessionStatusRes = { - status: string; - // Add other properties as needed + status: string; + // Add other properties as needed }; -async function bonsaiStarkProving({ - iss, - token, -}: { iss: "Google" | "test"; token: string }): Promise { - const response = await fetch( - "https://zkauth.vercel.app/api/bonsai/stark-proving", - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ iss, token }), - }, - ); - if (!response.ok) { - throw new Error("Failed to start STARK proving"); - } - - const data = await response.json(); - - return data.uuid; +async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "test"; token: string }): Promise { + const response = await fetch("https://zkauth.vercel.app/api/bonsai/stark-proving", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ iss, token }), + }); + if (!response.ok) { + throw new Error("Failed to start STARK proving"); + } + + const data = await response.json(); + + return data.uuid; } -async function getBonsaiStarkStatus( - uuid: string, -): Promise { - const response = await fetch( - `https://zkauth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`, - ); +async function getBonsaiStarkStatus(uuid: string): Promise { + const response = await fetch(`https://zkauth.vercel.app/api/bonsai/stark-status?uuid=${uuid}`); - if (!response.ok) { - throw new Error("Failed to get STARK status"); - } + if (!response.ok) { + throw new Error("Failed to get STARK status"); + } - return response.json(); + return response.json(); } export async function doStarkProving({ - iss, - token, - setStarkPollingResults, + iss, + token, + setStarkPollingResults, }: { - iss: "Google" | "test"; - token: string; - setStarkPollingResults: Dispatch< - SetStateAction - >; + iss: "Google" | "test"; + token: string; + setStarkPollingResults: Dispatch>; }) { - const starkUuid = await bonsaiStarkProving({ iss, token }); + const starkUuid = await bonsaiStarkProving({ iss, token }); - if (!starkUuid) { - throw new Error("STARK UUID not found"); - } + if (!starkUuid) { + throw new Error("STARK UUID not found"); + } - // STARK - let starkStatus = await getBonsaiStarkStatus(starkUuid); + // STARK + let starkStatus = await getBonsaiStarkStatus(starkUuid); - setStarkPollingResults([starkStatus]); + setStarkPollingResults([starkStatus]); - // Poll until the session is not RUNNING - while (starkStatus.status === "RUNNING") { - await sleep(4000); // Wait for 4 seconds - starkStatus = await getBonsaiStarkStatus(starkUuid); + // Poll until the session is not RUNNING + while (starkStatus.status === "RUNNING") { + await sleep(4000); // Wait for 4 seconds + starkStatus = await getBonsaiStarkStatus(starkUuid); - setStarkPollingResults((prevResults) => { - const lastStarkStatus = prevResults?.at(-1); + setStarkPollingResults((prevResults) => { + const lastStarkStatus = prevResults?.at(-1); - if (!isEqual(lastStarkStatus, starkStatus)) { - return [...(prevResults ?? []), starkStatus]; - } + if (!isEqual(lastStarkStatus, starkStatus)) { + return [...(prevResults ?? []), starkStatus]; + } - return prevResults; - }); - } + return prevResults; + }); + } - return { - starkUuid, - starkStatus, - }; + return { + starkUuid, + starkStatus, + }; } diff --git a/zk-auth/package/src/download-button.tsx b/zk-auth/package/src/download-button.tsx index e43f5d7..28e3a2a 100644 --- a/zk-auth/package/src/download-button.tsx +++ b/zk-auth/package/src/download-button.tsx @@ -2,22 +2,19 @@ import { Button } from "@risc0/ui/button"; import { DownloadIcon } from "lucide-react"; export function DownloadButton({ snarkData }: any) { - const handleDownload = () => { - const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(snarkData.output))}`; - const downloadAnchorNode = document.createElement("a"); - downloadAnchorNode.setAttribute("href", dataStr); - downloadAnchorNode.setAttribute( - "download", - `snark_data_${new Date().toLocaleDateString()}.json`, - ); - document.body.appendChild(downloadAnchorNode); // required for firefox - downloadAnchorNode.click(); - downloadAnchorNode.remove(); - }; + const handleDownload = () => { + const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(snarkData.output))}`; + const downloadAnchorNode = document.createElement("a"); + downloadAnchorNode.setAttribute("href", dataStr); + downloadAnchorNode.setAttribute("download", `snark_data_${new Date().toLocaleDateString()}.json`); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); + }; - return ( - - ); + return ( + + ); } diff --git a/zk-auth/package/src/main.tsx b/zk-auth/package/src/main.tsx index b38cb32..a965800 100644 --- a/zk-auth/package/src/main.tsx +++ b/zk-auth/package/src/main.tsx @@ -5,7 +5,7 @@ import { App } from "./App.tsx"; const address = document.getElementById("zkauth")?.getAttribute("data-address"); createRoot(document.getElementById("zkauth")!).render( - - - , + + + , ); diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 4cae6f3..8efb27d 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -12,161 +12,144 @@ import { doStarkProving } from "./do-stark-proving"; import { UserInfos } from "./user-infos"; export function ProveButton({ address }: { address: string }) { - const [isPending, startTransition] = useTransition(); - const [_starkResults, setStarkResults] = useLocalStorage( - "stark-results", - undefined, - ); - const [_snarkResults, setSnarkResults] = useLocalStorage( - "snark-results", - undefined, - ); - const [googleUserInfos] = useLocalStorage("google-infos", undefined); - const [googleUserToken] = useLocalStorage( - "google-token", - undefined, - ); - const [error, setError] = useState(); - const [snarkPollingResults, setSnarkPollingResults] = useState(); - const [starkPollingResults, setStarkPollingResults] = useState(); + const [isPending, startTransition] = useTransition(); + const [_starkResults, setStarkResults] = useLocalStorage("stark-results", undefined); + const [_snarkResults, setSnarkResults] = useLocalStorage("snark-results", undefined); + const [googleUserInfos] = useLocalStorage("google-infos", undefined); + const [googleUserToken] = useLocalStorage("google-token", undefined); + const [error, setError] = useState(); + const [snarkPollingResults, setSnarkPollingResults] = useState(); + const [starkPollingResults, setStarkPollingResults] = useState(); - // this function takes care of creating the STARK session, which then returns a UUID - // we then use this UUID to create a SNARK session - // lastly, we get all the results from the STARK and SNARK sessions - // this gets around Vercel's time limit for serverless functions - function handleClick() { - if (!googleUserToken) { - console.error("JWT not found"); - return; - } + // this function takes care of creating the STARK session, which then returns a UUID + // we then use this UUID to create a SNARK session + // lastly, we get all the results from the STARK and SNARK sessions + // this gets around Vercel's time limit for serverless functions + function handleClick() { + if (!googleUserToken) { + console.error("JWT not found"); + return; + } - //@ts-expect-error idk why this is not working - startTransition(async () => { - try { - const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : "test", - setStarkPollingResults, - token: googleUserToken ?? "", - }); - const { snarkStatus } = await doSnarkProving({ - setSnarkPollingResults, - starkUuid, - }); + //@ts-expect-error idk why this is not working + startTransition(async () => { + try { + const { starkUuid, starkStatus } = await doStarkProving({ + iss: googleUserInfos ? "Google" : "test", + setStarkPollingResults, + token: googleUserToken ?? "", + }); + const { snarkStatus } = await doSnarkProving({ + setSnarkPollingResults, + starkUuid, + }); - setStarkResults(starkStatus); - setSnarkResults(snarkStatus); - } catch (error) { - console.error("Error proving:", error); - setError(error); - } - }); - } + setStarkResults(starkStatus); + setSnarkResults(snarkStatus); + } catch (error) { + console.error("Error proving:", error); + setError(error); + } + }); + } - return address ? ( - <> - {isPending ? ( - - ) : ( - <> -

- You are about to prove that address{" "} - {address} owns the following social - account: -

+ return address ? ( + <> + {isPending ? ( + + ) : ( + <> +

+ You are about to prove that address {address} owns the following social + account: +

- {googleUserInfos && ( - - )} - - )} + {googleUserInfos && } + + )} -
- +
+ - {starkPollingResults && starkPollingResults.length > 0 && ( - - - STARK Results{" "} - - ({starkPollingResults.at(-1)?.status}) - - - {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( - -
-
- {starkPollingResults.map((result: any, index: any) => ( - - {result.state} - - ))} -
- -
-
- )} -
- )} + {starkPollingResults && starkPollingResults.length > 0 && ( + + + STARK Results{" "} + + ({starkPollingResults.at(-1)?.status}) + + + {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( + +
+
+ {starkPollingResults.map((result: any, index: any) => ( + + {result.state} + + ))} +
+ +
+
+ )} +
+ )} - {snarkPollingResults && ( - - - SNARK Results{" "} - - ({snarkPollingResults.status}) - - - -
- This will take ~2 minutes{" "} - -
-
-
- )} + {snarkPollingResults && ( + + + SNARK Results{" "} + + ({snarkPollingResults.status}) + + + +
+ This will take ~2 minutes +
+
+
+ )} - {error && ( - - - Error {error.status} - {error.message} - - )} -
- - ) : null; + {error && ( + + + Error {error.status} + {error.message} + + )} +
+ + ) : null; } diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/sign-in-button.tsx index fd77dc9..a394195 100644 --- a/zk-auth/package/src/sign-in-button.tsx +++ b/zk-auth/package/src/sign-in-button.tsx @@ -4,31 +4,27 @@ import jwtDecode from "jwt-decode"; import { useEffect } from "react"; export function SignInButton({ address }: { address: string }) { - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage< - any | undefined - >("google-infos", undefined); - const [googleUserToken, setGoogleUserToken] = useLocalStorage< - string | undefined - >("google-token", undefined); + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage("google-infos", undefined); + const [googleUserToken, setGoogleUserToken] = useLocalStorage("google-token", undefined); - useEffect(() => { - if (!googleUserToken || googleUserInfos) { - return; - } + useEffect(() => { + if (!googleUserToken || googleUserInfos) { + return; + } - setGoogleUserInfos(jwtDecode(googleUserToken)); - }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + setGoogleUserInfos(jwtDecode(googleUserToken)); + }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); - return ( - { - if (response.credential) { - setGoogleUserToken(response.credential); - } - }} - /> - ); + return ( + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + ); } diff --git a/zk-auth/package/src/snark-table.tsx b/zk-auth/package/src/snark-table.tsx index af17c5a..38ad44f 100644 --- a/zk-auth/package/src/snark-table.tsx +++ b/zk-auth/package/src/snark-table.tsx @@ -1,41 +1,29 @@ import { cn } from "@risc0/ui/cn"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@risc0/ui/table"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@risc0/ui/table"; import { capitalize, toLowerCase } from "string-ts"; import { DownloadButton } from "./download-button"; export function SnarkTable({ snarkData }: any) { - return ( - - - - Status - Output - - - - - - - {capitalize(toLowerCase(snarkData.status))} - - - - - - - -
- ); + return ( + + + + Status + Output + + + + + + + {capitalize(toLowerCase(snarkData.status))} + + + + + + + +
+ ); } diff --git a/zk-auth/package/src/stark-table.tsx b/zk-auth/package/src/stark-table.tsx index 90bc792..d4c2119 100644 --- a/zk-auth/package/src/stark-table.tsx +++ b/zk-auth/package/src/stark-table.tsx @@ -1,77 +1,56 @@ import { Button } from "@risc0/ui/button"; import { cn } from "@risc0/ui/cn"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@risc0/ui/table"; -import { capitalize, toLowerCase } from "string-ts"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@risc0/ui/table"; import { DownloadIcon } from "lucide-react"; +import { capitalize, toLowerCase } from "string-ts"; export function StarkTable({ starkData }: any) { - const isSuccess = starkData.status === "SUCCEEDED"; + const isSuccess = starkData.status === "SUCCEEDED"; - return ( - - - - Status - {!isSuccess && ( - Error Message - )} - Stats - Elapsed Time - {isSuccess && ( - Receipt URL - )} - - - - - - - {capitalize(toLowerCase(starkData.status))} - - - {!isSuccess && {starkData.error_msg ?? "-"}} - -
- - Segments:{" "} - {starkData.stats?.segments} - - - Cycles:{" "} - {starkData.stats?.cycles} - - - Total Cycles:{" "} - {starkData.stats?.total_cycles} - -
-
- - {starkData.elapsed_time}s - - {isSuccess && ( - - - - - - )} -
-
-
- ); + return ( + + + + Status + {!isSuccess && Error Message} + Stats + Elapsed Time + {isSuccess && Receipt URL} + + + + + + + {capitalize(toLowerCase(starkData.status))} + + + {!isSuccess && {starkData.error_msg ?? "-"}} + +
+ + Segments: {starkData.stats?.segments} + + + Cycles: {starkData.stats?.cycles} + + + Total Cycles: {starkData.stats?.total_cycles} + +
+
+ {starkData.elapsed_time}s + {isSuccess && ( + + + + + + )} +
+
+
+ ); } diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index c333a9a..906abb3 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -1,35 +1,23 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; -export function UserInfos({ - userInfos, - type, -}: { userInfos: any; type: "google" }) { - return ( - - -

- {userInfos.name} -

-

- {userInfos.email} -

-

- {type === "google" && ( - <> - Google{" "} - Google - - )} -

-
-
- ); +export function UserInfos({ userInfos, type }: { userInfos: any; type: "google" }) { + return ( + + +

+ {userInfos.name} +

+

+ {userInfos.email} +

+

+ {type === "google" && ( + <> + Google Google + + )} +

+
+
+ ); } diff --git a/zk-auth/package/tailwind.config.ts b/zk-auth/package/tailwind.config.ts index cf3dba9..d72abc7 100644 --- a/zk-auth/package/tailwind.config.ts +++ b/zk-auth/package/tailwind.config.ts @@ -3,16 +3,13 @@ import deepmerge from "deepmerge"; import type { Config } from "tailwindcss"; const config = deepmerge(tailwindConfig, { - theme: { - fontFamily: { - sans: ["system-ui"], - }, - }, + theme: { + fontFamily: { + sans: ["system-ui"], + }, + }, }) satisfies Config; -config.content = [ - "./node_modules/@risc0/ui/**/*.{ts,tsx}", - "./src/**/*.{js,jsx,ts,tsx,mdx}", -]; +config.content = ["./node_modules/@risc0/ui/**/*.{ts,tsx}", "./src/**/*.{js,jsx,ts,tsx,mdx}"]; export default config; diff --git a/zk-auth/package/tsconfig.json b/zk-auth/package/tsconfig.json index 1ffef60..d32ff68 100644 --- a/zk-auth/package/tsconfig.json +++ b/zk-auth/package/tsconfig.json @@ -1,7 +1,4 @@ { "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] } diff --git a/zk-auth/package/vite.config.ts b/zk-auth/package/vite.config.ts index 88e6e46..3905b4b 100644 --- a/zk-auth/package/vite.config.ts +++ b/zk-auth/package/vite.config.ts @@ -1,16 +1,16 @@ -import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; +import { defineConfig } from "vite"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], - build: { - rollupOptions: { - output: { - entryFileNames: `assets/[name].js`, - chunkFileNames: `assets/[name].js`, - assetFileNames: `assets/[name].[ext]`, - }, - }, - }, + plugins: [react()], + build: { + rollupOptions: { + output: { + entryFileNames: "[name].js", + chunkFileNames: "[name].js", + assetFileNames: "[name].[ext]", + }, + }, + }, }); diff --git a/zk-auth/public/images/bonsai-logo-dark.svg b/zk-auth/public/bonsai-logo-dark.svg similarity index 100% rename from zk-auth/public/images/bonsai-logo-dark.svg rename to zk-auth/public/bonsai-logo-dark.svg diff --git a/zk-auth/public/images/bonsai-logo-light.svg b/zk-auth/public/bonsai-logo-light.svg similarity index 100% rename from zk-auth/public/images/bonsai-logo-light.svg rename to zk-auth/public/bonsai-logo-light.svg diff --git a/zk-auth/public/images/google.svg b/zk-auth/public/google.svg similarity index 100% rename from zk-auth/public/images/google.svg rename to zk-auth/public/google.svg diff --git a/zk-auth/public/images/loading.gif b/zk-auth/public/loading.gif similarity index 100% rename from zk-auth/public/images/loading.gif rename to zk-auth/public/loading.gif diff --git a/zk-auth/public/vite/assets/index.css b/zk-auth/public/vite/assets/index.css deleted file mode 100644 index 126efbf..0000000 --- a/zk-auth/public/vite/assets/index.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:system-ui;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root{--background: 0 0% 100%;--foreground: 20 14.3% 4.1%;--card: 0 0% 100%;--card-foreground: 20 14.3% 4.1%;--popover: 0 0% 100%;--popover-foreground: 20 14.3% 4.1%;--primary: 24 9.8% 10%;--primary-foreground: 60 9.1% 97.8%;--secondary: 60 4.8% 95.9%;--secondary-foreground: 24 9.8% 10%;--muted: 60 4.8% 95.9%;--muted-foreground: 25 5.3% 44.7%;--accent: 60 4.8% 95.9%;--accent-foreground: 24 9.8% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 60 9.1% 97.8%;--border: 20 5.9% 90%;--input: 20 5.9% 90%;--ring: 20 14.3% 4.1%;--radius: .3rem;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%}.dark{--background: 20 14.3% 4.1%;--foreground: 60 9.1% 97.8%;--card: 20 14.3% 4.1%;--card-foreground: 60 9.1% 97.8%;--popover: 20 14.3% 4.1%;--popover-foreground: 60 9.1% 97.8%;--primary: 61 100% 80.8%;--primary-foreground: 0 0% 0%;--secondary: 12 6.5% 15.1%;--secondary-foreground: 60 9.1% 97.8%;--muted: 12 6.5% 15.1%;--muted-foreground: 24 5.4% 63.9%;--accent: 12 6.5% 15.1%;--accent-foreground: 60 9.1% 97.8%;--destructive: 0 92.8% 70.6%;--destructive-foreground: 60 9.1% 97.8%;--border: 12 6.5% 15.1%;--input: 12 6.5% 15.1%;--ring: 61 100% 80.8%;--chart-1: 220 70% 50%;--chart-2: 160 60% 45%;--chart-3: 30 80% 55%;--chart-4: 280 65% 60%;--chart-5: 340 75% 55%}*{border-color:hsl(var(--border))}body{min-height:100dvh;background-color:hsl(var(--background));font-family:system-ui;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-display:swap}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.title{font-size:1.875rem;line-height:2.25rem;font-weight:700}.link{color:hsl(var(--muted-foreground));text-underline-offset:4px}.link:hover{text-decoration-line:underline}.link:is(.dark *){color:hsl(var(--primary))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-top-\[1px\]{top:-1px}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-2\.5{top:.625rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.z-\[1\]{z-index:1}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1{margin-bottom:.25rem}.mb-3{margin-bottom:.75rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-0{margin-right:0}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-24{margin-top:6rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\[0\.25rem\]{margin-top:.25rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.min-h-\[60px\]{min-height:60px}.w-0{width:0px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-72{width:18rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[calc\(100\%-5rem\)\]{width:calc(100% - 5rem)}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-0{max-width:0px}.max-w-3{max-width:.75rem}.max-w-4{max-width:1rem}.max-w-5{max-width:1.25rem}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in-up{animation:fade-in-up 1s ease-in-out}@keyframes head-shake{0%{transform:translate(0)}6.5%{transform:translate(-6px) rotateY(-9deg)}18.5%{transform:translate(5px) rotateY(7deg)}31.5%{transform:translate(-3px) rotateY(-5deg)}43.5%{transform:translate(2px) rotateY(3deg)}50%{transform:translate(0)}}.animate-head-shake{animation:head-shake 1s ease-in-out}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[--color-border\]{border-color:var(--color-border)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-transparent{border-color:transparent}.bg-\[--color-bg\]{background-color:var(--color-bg)}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-neutral-50{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.fill-background{fill:hsl(var(--background))}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-3{padding-bottom:.75rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.ordinal{--tw-ordinal: ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-border{color:hsl(var(--border))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.paused{animation-play-state:paused}html{scrollbar-gutter:stable}body[style]{margin:0 auto!important}body[data-scroll-locked]{overflow:hidden;position:fixed;width:100%}iframe{color-scheme:auto}.lucide{stroke-width:1.75px!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.last\:overflow-x-hidden:last-child{overflow-x:hidden}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary-foreground:hover{color:hsl(var(--primary-foreground))}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:focus-visible~.peer-focus-visible\:text-primary{color:hsl(var(--primary))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-60{opacity:.6}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-checked\:border-primary[aria-checked=true]{border-color:hsl(var(--primary))}.aria-checked\:bg-primary[aria-checked=true]{background-color:hsl(var(--primary))}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:rounded-b-none[data-state=active]{border-bottom-right-radius:0;border-bottom-left-radius:0}.data-\[state\=active\]\:border-b-2[data-state=active]{border-bottom-width:2px}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:hsl(var(--primary))}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent) / .5)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:bg-neutral-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}.dark\:bg-white:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.dark\:fill-white:is(.dark *){fill:#fff}.dark\:text-green-500:is(.dark *){--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.dark\:text-red-500:is(.dark *){--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:absolute{position:absolute}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:px-0{padding-left:0;padding-right:0}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border) / .5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px} diff --git a/zk-auth/public/vite/assets/index.js b/zk-auth/public/vite/assets/index.js deleted file mode 100644 index 485cdd9..0000000 --- a/zk-auth/public/vite/assets/index.js +++ /dev/null @@ -1,84 +0,0 @@ -var Uh=(t,l)=>()=>(l||t((l={exports:{}}).exports,l),l.exports);var Zp=Uh((Tl,_l)=>{(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const u of n)if(u.type==="childList")for(const i of u.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&a(i)}).observe(document,{childList:!0,subtree:!0});function e(n){const u={};return n.integrity&&(u.integrity=n.integrity),n.referrerPolicy&&(u.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?u.credentials="include":n.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function a(n){if(n.ep)return;n.ep=!0;const u=e(n);fetch(n.href,u)}})();function wh(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var hs={exports:{}},Iu={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ch=Symbol.for("react.transitional.element"),Hh=Symbol.for("react.fragment");function vs(t,l,e){var a=null;if(e!==void 0&&(a=""+e),l.key!==void 0&&(a=""+l.key),"key"in l){e={};for(var n in l)n!=="key"&&(e[n]=l[n])}else e=l;return l=e.ref,{$$typeof:Ch,type:t,key:a,ref:l!==void 0?l:null,props:e}}Iu.Fragment=Hh;Iu.jsx=vs;Iu.jsxs=vs;hs.exports=Iu;var b=hs.exports,gs={exports:{}},w={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var sf=Symbol.for("react.transitional.element"),Bh=Symbol.for("react.portal"),Gh=Symbol.for("react.fragment"),qh=Symbol.for("react.strict_mode"),Yh=Symbol.for("react.profiler"),Xh=Symbol.for("react.consumer"),Qh=Symbol.for("react.context"),Lh=Symbol.for("react.forward_ref"),Zh=Symbol.for("react.suspense"),Vh=Symbol.for("react.memo"),ms=Symbol.for("react.lazy"),yr=Symbol.iterator;function Kh(t){return t===null||typeof t!="object"?null:(t=yr&&t[yr]||t["@@iterator"],typeof t=="function"?t:null)}var ys={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},bs=Object.assign,ps={};function Aa(t,l,e){this.props=t,this.context=l,this.refs=ps,this.updater=e||ys}Aa.prototype.isReactComponent={};Aa.prototype.setState=function(t,l){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,l,"setState")};Aa.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Ss(){}Ss.prototype=Aa.prototype;function df(t,l,e){this.props=t,this.context=l,this.refs=ps,this.updater=e||ys}var hf=df.prototype=new Ss;hf.constructor=df;bs(hf,Aa.prototype);hf.isPureReactComponent=!0;var br=Array.isArray,lt={H:null,A:null,T:null,S:null},Es=Object.prototype.hasOwnProperty;function vf(t,l,e,a,n,u,i){return e=i.ref,{$$typeof:sf,type:t,key:l,ref:e!==void 0?e:null,props:i}}function Jh(t,l){return vf(t.type,l,null,void 0,void 0,void 0,t.props)}function gf(t){return typeof t=="object"&&t!==null&&t.$$typeof===sf}function $h(t){var l={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(e){return l[e]})}var pr=/\/+/g;function Ei(t,l){return typeof t=="object"&&t!==null&&t.key!=null?$h(""+t.key):l.toString(36)}function Sr(){}function kh(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(Sr,Sr):(t.status="pending",t.then(function(l){t.status==="pending"&&(t.status="fulfilled",t.value=l)},function(l){t.status==="pending"&&(t.status="rejected",t.reason=l)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function Qe(t,l,e,a,n){var u=typeof t;(u==="undefined"||u==="boolean")&&(t=null);var i=!1;if(t===null)i=!0;else switch(u){case"bigint":case"string":case"number":i=!0;break;case"object":switch(t.$$typeof){case sf:case Bh:i=!0;break;case ms:return i=t._init,Qe(i(t._payload),l,e,a,n)}}if(i)return n=n(t),i=a===""?"."+Ei(t,0):a,br(n)?(e="",i!=null&&(e=i.replace(pr,"$&/")+"/"),Qe(n,l,e,"",function(r){return r})):n!=null&&(gf(n)&&(n=Jh(n,e+(n.key==null||t&&t.key===n.key?"":(""+n.key).replace(pr,"$&/")+"/")+i)),l.push(n)),1;i=0;var c=a===""?".":a+":";if(br(t))for(var f=0;f>>1,nt=_[K];if(0>>1;Kn(Si,j))oen(Zn,Si)?(_[K]=Zn,_[oe]=j,K=oe):(_[K]=Si,_[Ln]=j,K=Ln);else if(oen(Zn,j))_[K]=Zn,_[oe]=j,K=oe;else break t}}return M}function n(_,M){var j=_.sortIndex-M.sortIndex;return j!==0?j:_.id-M.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var i=Date,c=i.now();t.unstable_now=function(){return i.now()-c}}var f=[],r=[],v=1,m=null,d=3,g=!1,S=!1,E=!1,x=typeof setTimeout=="function"?setTimeout:null,s=typeof clearTimeout=="function"?clearTimeout:null,o=typeof setImmediate<"u"?setImmediate:null;function h(_){for(var M=e(r);M!==null;){if(M.callback===null)a(r);else if(M.startTime<=_)a(r),M.sortIndex=M.expirationTime,l(f,M);else break;M=e(r)}}function y(_){if(E=!1,h(_),!S)if(e(f)!==null)S=!0,ht();else{var M=e(r);M!==null&&Rt(y,M.startTime-_)}}var T=!1,A=-1,z=5,O=-1;function X(){return!(t.unstable_now()-O_&&X());){var K=m.callback;if(typeof K=="function"){m.callback=null,d=m.priorityLevel;var nt=K(m.expirationTime<=_);if(_=t.unstable_now(),typeof nt=="function"){m.callback=nt,h(_),M=!0;break l}m===e(f)&&a(f),h(_)}else a(f);m=e(f)}if(m!==null)M=!0;else{var Dt=e(r);Dt!==null&&Rt(y,Dt.startTime-_),M=!1}}break t}finally{m=null,d=j,g=!1}M=void 0}}finally{M?et():T=!1}}}var et;if(typeof o=="function")et=function(){o(D)};else if(typeof MessageChannel<"u"){var G=new MessageChannel,Cl=G.port2;G.port1.onmessage=D,et=function(){Cl.postMessage(null)}}else et=function(){x(D,0)};function ht(){T||(T=!0,et())}function Rt(_,M){A=x(function(){_(t.unstable_now())},M)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(_){_.callback=null},t.unstable_continueExecution=function(){S||g||(S=!0,ht())},t.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):z=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return d},t.unstable_getFirstCallbackNode=function(){return e(f)},t.unstable_next=function(_){switch(d){case 1:case 2:case 3:var M=3;break;default:M=d}var j=d;d=M;try{return _()}finally{d=j}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(_,M){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var j=d;d=_;try{return M()}finally{d=j}},t.unstable_scheduleCallback=function(_,M,j){var K=t.unstable_now();switch(typeof j=="object"&&j!==null?(j=j.delay,j=typeof j=="number"&&0K?(_.sortIndex=j,l(r,_),e(f)===null&&_===e(r)&&(E?(s(A),A=-1):E=!0,Rt(y,j-K))):(_.sortIndex=nt,l(f,_),S||g||(S=!0,ht())),_},t.unstable_shouldYield=X,t.unstable_wrapCallback=function(_){var M=d;return function(){var j=d;d=M;try{return _.apply(this,arguments)}finally{d=j}}}})(xs);As.exports=xs;var Ph=As.exports,zs={exports:{}},Ot={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ih=R;function Os(t){var l="https://react.dev/errors/"+t;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Rs)}catch(t){console.error(t)}}Rs(),zs.exports=Ot;var ev=zs.exports;/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var dt=Ph,Ds=R,av=ev;function p(t){var l="https://react.dev/errors/"+t;if(1)":-1n||f[a]!==r[n]){var v=` -`+f[a].replace(" at new "," at ");return t.displayName&&v.includes("")&&(v=v.replace("",t.displayName)),v}while(1<=a&&0<=n);break}}}finally{_i=!1,Error.prepareStackTrace=e}return(e=t?t.displayName||t.name:"")?La(e):""}function fv(t){switch(t.tag){case 26:case 27:case 5:return La(t.type);case 16:return La("Lazy");case 13:return La("Suspense");case 19:return La("SuspenseList");case 0:case 15:return t=Ai(t.type,!1),t;case 11:return t=Ai(t.type.render,!1),t;case 1:return t=Ai(t.type,!0),t;default:return""}}function Ar(t){try{var l="";do l+=fv(t),t=t.return;while(t);return l}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}function xa(t){var l=t,e=t;if(t.alternate)for(;l.return;)l=l.return;else{t=l;do l=t,l.flags&4098&&(e=l.return),t=l.return;while(t)}return l.tag===3?e:null}function ws(t){if(t.tag===13){var l=t.memoizedState;if(l===null&&(t=t.alternate,t!==null&&(l=t.memoizedState)),l!==null)return l.dehydrated}return null}function xr(t){if(xa(t)!==t)throw Error(p(188))}function rv(t){var l=t.alternate;if(!l){if(l=xa(t),l===null)throw Error(p(188));return l!==t?null:t}for(var e=t,a=l;;){var n=e.return;if(n===null)break;var u=n.alternate;if(u===null){if(a=n.return,a!==null){e=a;continue}break}if(n.child===u.child){for(u=n.child;u;){if(u===e)return xr(n),t;if(u===a)return xr(n),l;u=u.sibling}throw Error(p(188))}if(e.return!==a.return)e=n,a=u;else{for(var i=!1,c=n.child;c;){if(c===e){i=!0,e=n,a=u;break}if(c===a){i=!0,a=n,e=u;break}c=c.sibling}if(!i){for(c=u.child;c;){if(c===e){i=!0,e=u,a=n;break}if(c===a){i=!0,a=u,e=n;break}c=c.sibling}if(!i)throw Error(p(189))}}if(e.alternate!==a)throw Error(p(190))}if(e.tag!==3)throw Error(p(188));return e.stateNode.current===e?t:l}function Cs(t){var l=t.tag;if(l===5||l===26||l===27||l===6)return t;for(t=t.child;t!==null;){if(l=Cs(t),l!==null)return l;t=t.sibling}return null}var Za=Array.isArray,W=av.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,be={pending:!1,data:null,method:null,action:null},sc=[],Je=-1;function ol(t){return{current:t}}function yt(t){0>Je||(t.current=sc[Je],sc[Je]=null,Je--)}function I(t,l){Je++,sc[Je]=t.current,t.current=l}var ul=ol(null),sn=ol(null),Fl=ol(null),Su=ol(null);function Eu(t,l){switch(I(Fl,l),I(sn,t),I(ul,null),t=l.nodeType,t){case 9:case 11:l=(l=l.documentElement)&&(l=l.namespaceURI)?zo(l):0;break;default:if(t=t===8?l.parentNode:l,l=t.tagName,t=t.namespaceURI)t=zo(t),l=J0(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}yt(ul),I(ul,l)}function va(){yt(ul),yt(sn),yt(Fl)}function dc(t){t.memoizedState!==null&&I(Su,t);var l=ul.current,e=J0(l,t.type);l!==e&&(I(sn,t),I(ul,e))}function Tu(t){sn.current===t&&(yt(ul),yt(sn)),Su.current===t&&(yt(Su),_n._currentValue=be)}var hc=Object.prototype.hasOwnProperty,bf=dt.unstable_scheduleCallback,xi=dt.unstable_cancelCallback,ov=dt.unstable_shouldYield,sv=dt.unstable_requestPaint,il=dt.unstable_now,dv=dt.unstable_getCurrentPriorityLevel,pf=dt.unstable_ImmediatePriority,Hs=dt.unstable_UserBlockingPriority,_u=dt.unstable_NormalPriority,hv=dt.unstable_LowPriority,Bs=dt.unstable_IdlePriority,vv=dt.log,gv=dt.unstable_setDisableYieldValue,jn=null,Bt=null;function mv(t){if(Bt&&typeof Bt.onCommitFiberRoot=="function")try{Bt.onCommitFiberRoot(jn,t,void 0,(t.current.flags&128)===128)}catch{}}function kl(t){if(typeof vv=="function"&&gv(t),Bt&&typeof Bt.setStrictMode=="function")try{Bt.setStrictMode(jn,t)}catch{}}var Gt=Math.clz32?Math.clz32:pv,yv=Math.log,bv=Math.LN2;function pv(t){return t>>>=0,t===0?32:31-(yv(t)/bv|0)|0}var Jn=128,$n=4194304;function he(t){var l=t&42;if(l!==0)return l;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Au(t,l){var e=t.pendingLanes;if(e===0)return 0;var a=0,n=t.suspendedLanes,u=t.pingedLanes,i=t.warmLanes;t=t.finishedLanes!==0;var c=e&134217727;return c!==0?(e=c&~n,e!==0?a=he(e):(u&=c,u!==0?a=he(u):t||(i=c&~i,i!==0&&(a=he(i))))):(c=e&~n,c!==0?a=he(c):u!==0?a=he(u):t||(i=e&~i,i!==0&&(a=he(i)))),a===0?0:l!==0&&l!==a&&!(l&n)&&(n=a&-a,i=l&-l,n>=i||n===32&&(i&4194176)!==0)?l:a}function Sv(t,l){switch(t){case 1:case 2:case 4:case 8:return l+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Gs(t,l){return t.errorRecoveryDisabledLanes&l?0:(t=t.pendingLanes&-536870913,t!==0?t:t&536870912?536870912:0)}function qs(){var t=Jn;return Jn<<=1,!(Jn&4194176)&&(Jn=128),t}function Ys(){var t=$n;return $n<<=1,!($n&62914560)&&($n=4194304),t}function zi(t){for(var l=[],e=0;31>e;e++)l.push(t);return l}function Ev(t,l,e,a,n,u){var i=t.pendingLanes;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=e,t.entangledLanes&=e,t.errorRecoveryDisabledLanes&=e,t.shellSuspendCounter=0;var c=t.entanglements,f=t.expirationTimes,r=t.hiddenUpdates;for(e=i&~e;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),xv=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Or={},Rr={};function zv(t){return hc.call(Rr,t)?!0:hc.call(Or,t)?!1:xv.test(t)?Rr[t]=!0:(Or[t]=!0,!1)}function fu(t,l,e){if(zv(l))if(e===null)t.removeAttribute(l);else{switch(typeof e){case"undefined":case"function":case"symbol":t.removeAttribute(l);return;case"boolean":var a=l.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){t.removeAttribute(l);return}}t.setAttribute(l,""+e)}}function kn(t,l,e){if(e===null)t.removeAttribute(l);else{switch(typeof e){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(l);return}t.setAttribute(l,""+e)}}function sl(t,l,e,a){if(a===null)t.removeAttribute(e);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(e);return}t.setAttributeNS(l,e,""+a)}}function Qt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Js(t){var l=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function Ov(t){var l=Js(t)?"checked":"value",e=Object.getOwnPropertyDescriptor(t.constructor.prototype,l),a=""+t[l];if(!t.hasOwnProperty(l)&&typeof e<"u"&&typeof e.get=="function"&&typeof e.set=="function"){var n=e.get,u=e.set;return Object.defineProperty(t,l,{configurable:!0,get:function(){return n.call(this)},set:function(i){a=""+i,u.call(this,i)}}),Object.defineProperty(t,l,{enumerable:e.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[l]}}}}function xu(t){t._valueTracker||(t._valueTracker=Ov(t))}function $s(t){if(!t)return!1;var l=t._valueTracker;if(!l)return!0;var e=l.getValue(),a="";return t&&(a=Js(t)?t.checked?"true":"false":t.value),t=a,t!==e?(l.setValue(t),!0):!1}function zu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Rv=/[\n"\\]/g;function Kt(t){return t.replace(Rv,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function gc(t,l,e,a,n,u,i,c){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),l!=null?i==="number"?(l===0&&t.value===""||t.value!=l)&&(t.value=""+Qt(l)):t.value!==""+Qt(l)&&(t.value=""+Qt(l)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),l!=null?mc(t,i,Qt(l)):e!=null?mc(t,i,Qt(e)):a!=null&&t.removeAttribute("value"),n==null&&u!=null&&(t.defaultChecked=!!u),n!=null&&(t.checked=n&&typeof n!="function"&&typeof n!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?t.name=""+Qt(c):t.removeAttribute("name")}function ks(t,l,e,a,n,u,i,c){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.type=u),l!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||l!=null))return;e=e!=null?""+Qt(e):"",l=l!=null?""+Qt(l):e,c||l===t.value||(t.value=l),t.defaultValue=l}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=c?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mc(t,l,e){l==="number"&&zu(t.ownerDocument)===t||t.defaultValue===""+e||(t.defaultValue=""+e)}function na(t,l,e,a){if(t=t.options,l){l={};for(var n=0;n=ka),Cr=" ",Hr=!1;function ed(t,l){switch(t){case"keyup":return eg.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ad(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ke=!1;function ng(t,l){switch(t){case"compositionend":return ad(l);case"keypress":return l.which!==32?null:(Hr=!0,Cr);case"textInput":return t=l.data,t===Cr&&Hr?null:t;default:return null}}function ug(t,l){if(ke)return t==="compositionend"||!xf&&ed(t,l)?(t=td(),ou=_f=Wl=null,ke=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:e,offset:l-t};t=a}t:{for(;e;){if(e.nextSibling){e=e.nextSibling;break t}e=e.parentNode}e=void 0}e=Xr(e)}}function cd(t,l){return t&&l?t===l?!0:t&&t.nodeType===3?!1:l&&l.nodeType===3?cd(t,l.parentNode):"contains"in t?t.contains(l):t.compareDocumentPosition?!!(t.compareDocumentPosition(l)&16):!1:!1}function fd(t){var l,e;for(t=(e=t==null||(l=t.ownerDocument)==null?void 0:l.defaultView)!=null?e:window,l=zu(t.document);l instanceof t.HTMLIFrameElement;){try{var a=typeof l.contentWindow.location.href=="string"}catch{a=!1}if(a)t=l.contentWindow;else break;l=zu(t.document)}return l}function zf(t){var l=t&&t.nodeName&&t.nodeName.toLowerCase();return l&&(l==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||l==="textarea"||t.contentEditable==="true")}function hg(t,l){var e=fd(l);l=t.focusedElem;var a=t.selectionRange;if(e!==l&&l&&l.ownerDocument&&cd(l.ownerDocument.documentElement,l)){if(a!==null&&zf(l)){if(t=a.start,e=a.end,e===void 0&&(e=t),"selectionStart"in l)l.selectionStart=t,l.selectionEnd=Math.min(e,l.value.length);else if(e=(t=l.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=l.textContent.length,u=Math.min(a.start,n);a=a.end===void 0?u:Math.min(a.end,n),!e.extend&&u>a&&(n=a,a=u,u=n),n=Qr(l,u);var i=Qr(l,a);n&&i&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(n.node,n.offset),e.removeAllRanges(),u>a?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=l;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof l.focus=="function"&&l.focus(),l=0;l=document.documentMode,We=null,pc=null,Fa=null,Sc=!1;function Lr(t,l,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;Sc||We==null||We!==zu(a)||(a=We,"selectionStart"in a&&zf(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Fa&&gn(Fa,a)||(Fa=a,a=Lu(pc,"onSelect"),0>=i,n-=i,bl=1<<32-Gt(l)+n|e<O?(X=z,z=null):X=z.sibling;var D=d(s,z,h[O],y);if(D===null){z===null&&(z=X);break}t&&z&&D.alternate===null&&l(s,z),o=u(D,o,O),A===null?T=D:A.sibling=D,A=D,z=X}if(O===h.length)return e(s,z),Y&&ve(s,O),T;if(z===null){for(;OO?(X=z,z=null):X=z.sibling;var et=d(s,z,D.value,y);if(et===null){z===null&&(z=X);break}t&&z&&et.alternate===null&&l(s,z),o=u(et,o,O),A===null?T=et:A.sibling=et,A=et,z=X}if(D.done)return e(s,z),Y&&ve(s,O),T;if(z===null){for(;!D.done;O++,D=h.next())D=m(s,D.value,y),D!==null&&(o=u(D,o,O),A===null?T=D:A.sibling=D,A=D);return Y&&ve(s,O),T}for(z=a(z);!D.done;O++,D=h.next())D=g(z,s,O,D.value,y),D!==null&&(t&&D.alternate!==null&&z.delete(D.key===null?O:D.key),o=u(D,o,O),A===null?T=D:A.sibling=D,A=D);return t&&z.forEach(function(G){return l(s,G)}),Y&&ve(s,O),T}function x(s,o,h,y){if(typeof h=="object"&&h!==null&&h.type===Ke&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Kn:t:{for(var T=h.key,A=o;A!==null;){if(A.key===T){if(T=h.type,T===Ke){if(A.tag===7){e(s,A.sibling),o=n(A,h.props.children),o.return=s,s=o;break t}}else if(A.elementType===T||typeof T=="object"&&T!==null&&T.$$typeof===Yl&&Wr(T)===A.type){e(s,A.sibling),o=n(A,h.props),Ha(s,A,o,h),o.return=s,s=o;break t}e(s,A);break}else l(s,A);A=A.sibling}h.type===Ke?(o=Ee(h.props.children,s.mode,y,h.key),o.return=s,s=o):(y=mu(h.type,h.key,h.props,null,s.mode,y),Ha(s,o,y,h),y.return=s,s=y)}return i(s);case Qa:t:{for(A=h.key;o!==null;){if(o.key===A)if(o.tag===4&&o.stateNode.containerInfo===h.containerInfo&&o.stateNode.implementation===h.implementation){e(s,o.sibling),o=n(o,h.children||[]),o.return=s,s=o;break t}else{e(s,o);break}else l(s,o);o=o.sibling}o=Ji(h,s.mode,y),o.return=s,s=o}return i(s);case Yl:return A=h._init,h=A(h._payload),x(s,o,h,y)}if(Za(h))return S(s,o,h,y);if(Na(h)){if(A=Na(h),typeof A!="function")throw Error(p(150));return h=A.call(h),E(s,o,h,y)}if(typeof h.then=="function")return x(s,o,Pn(h),y);if(h.$$typeof===yl)return x(s,o,tu(s,h),y);In(s,h)}return typeof h=="string"&&h!==""||typeof h=="number"||typeof h=="bigint"?(h=""+h,o!==null&&o.tag===6?(e(s,o.sibling),o=n(o,h),o.return=s,s=o):(e(s,o),o=Ki(h,s.mode,y),o.return=s,s=o),i(s)):e(s,o)}return function(s,o,h,y){try{yn=0;var T=x(s,o,h,y);return ia=null,T}catch(z){if(z===Pa)throw z;var A=$t(29,z,null,s.mode);return A.lanes=y,A.return=s,A}finally{}}}var ze=pd(!0),Sd=pd(!1),ya=ol(null),Mu=ol(0);function Fr(t,l){t=Dl,I(Mu,t),I(ya,l),Dl=t|l.baseLanes}function _c(){I(Mu,Dl),I(ya,ya.current)}function jf(){Dl=Mu.current,yt(ya),yt(Mu)}var fl=ol(null),cl=null;function Ll(t){var l=t.alternate;I(ot,ot.current&1),I(fl,t),cl===null&&(l===null||ya.current!==null||l.memoizedState!==null)&&(cl=t)}function Ed(t){if(t.tag===22){if(I(ot,ot.current),I(fl,t),cl===null){var l=t.alternate;l!==null&&l.memoizedState!==null&&(cl=t)}}else Zl()}function Zl(){I(ot,ot.current),I(fl,fl.current)}function Sl(t){yt(fl),cl===t&&(cl=null),yt(ot)}var ot=ol(0);function ju(t){for(var l=t;l!==null;){if(l.tag===13){var e=l.memoizedState;if(e!==null&&(e=e.dehydrated,e===null||e.data==="$?"||e.data==="$!"))return l}else if(l.tag===19&&l.memoizedProps.revealOrder!==void 0){if(l.flags&128)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===t)break;for(;l.sibling===null;){if(l.return===null||l.return===t)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var bg=typeof AbortController<"u"?AbortController:function(){var t=[],l=this.signal={aborted:!1,addEventListener:function(e,a){t.push(a)}};this.abort=function(){l.aborted=!0,t.forEach(function(e){return e()})}},pg=dt.unstable_scheduleCallback,Sg=dt.unstable_NormalPriority,rt={$$typeof:yl,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Nf(){return{controller:new bg,data:new Map,refCount:0}}function wn(t){t.refCount--,t.refCount===0&&pg(Sg,function(){t.controller.abort()})}var tn=null,Ac=0,ba=0,ca=null;function Eg(t,l){if(tn===null){var e=tn=[];Ac=0,ba=ar(),ca={status:"pending",value:void 0,then:function(a){e.push(a)}}}return Ac++,l.then(Pr,Pr),l}function Pr(){if(tn!==null&&--Ac===0){ca!==null&&(ca.status="fulfilled");var t=tn;tn=null,ba=0,ca=null;for(var l=0;lu?u:8;var i=N.T,c={};N.T=c,Vf(t,!1,l,e);try{var f=n(),r=N.S;if(r!==null&&r(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var v=Tg(f,a);oa(t,l,v)}else oa(t,l,a)}catch(m){oa(t,l,{then:function(){},status:"rejected",reason:m})}finally{W.p=u,N.T=i}}function Og(){}function Oc(t,l,e,a){if(t.tag!==5)throw Error(p(476));var n=$d(t).queue;Jd(t,n,l,be,e===null?Og:function(){return kd(t),e(a)})}function $d(t){var l=t.memoizedState;if(l!==null)return l;l={memoizedState:be,baseState:be,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:be},next:null};var e={};return l.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ol,lastRenderedState:e},next:null},t.memoizedState=l,t=t.alternate,t!==null&&(t.memoizedState=l),l}function kd(t){var l=$d(t).next.queue;oa(t,l,{})}function Zf(){return _t(_n)}function Wd(){return ft().memoizedState}function Fd(){return ft().memoizedState}function Rg(t){for(var l=t.return;l!==null;){switch(l.tag){case 24:case 3:var e=xl();t=Pl(e);var a=Il(l,t,e);a!==null&&(zt(a,l,e),en(a,l,e)),l={cache:Nf()},t.payload=l;return}l=l.return}}function Dg(t,l,e){var a=xl();e={lane:a,revertLane:0,action:e,hasEagerState:!1,eagerState:null,next:null},oi(t)?Pd(l,e):(e=Rf(t,l,e,a),e!==null&&(zt(e,t,a),Id(e,l,a)))}function oa(t,l,e){var a=xl(),n={lane:a,revertLane:0,action:e,hasEagerState:!1,eagerState:null,next:null};if(oi(t))Pd(l,n);else{var u=t.alternate;if(t.lanes===0&&(u===null||u.lanes===0)&&(u=l.lastRenderedReducer,u!==null))try{var i=l.lastRenderedState,c=u(i,e);if(n.hasEagerState=!0,n.eagerState=c,qt(c,i)){ii(t,l,n,0),V===null&&ui();return}}catch{}finally{}e=Rf(t,l,n,a),e!==null&&(zt(e,t,a),Id(e,l,a))}}function Vf(t,l,e,a){if(a={lane:2,revertLane:ar(),action:a,hasEagerState:!1,eagerState:null,next:null},oi(t)){if(l)throw Error(p(479))}else l=Rf(t,e,a,2),l!==null&&zt(l,t,2)}function oi(t){var l=t.alternate;return t===C||l!==null&&l===C}function Pd(t,l){fa=Nu=!0;var e=t.pending;e===null?l.next=l:(l.next=e.next,e.next=l),t.pending=l}function Id(t,l,e){if(e&4194176){var a=l.lanes;a&=t.pendingLanes,e|=a,l.lanes=e,Qs(t,e)}}var rl={readContext:_t,use:fi,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useLayoutEffect:ut,useInsertionEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useSyncExternalStore:ut,useId:ut};rl.useCacheRefresh=ut;rl.useMemoCache=ut;rl.useHostTransitionStatus=ut;rl.useFormState=ut;rl.useActionState=ut;rl.useOptimistic=ut;var Ce={readContext:_t,use:fi,useCallback:function(t,l){return Mt().memoizedState=[t,l===void 0?null:l],t},useContext:_t,useEffect:eo,useImperativeHandle:function(t,l,e){e=e!=null?e.concat([t]):null,vu(4194308,4,Qd.bind(null,l,t),e)},useLayoutEffect:function(t,l){return vu(4194308,4,t,l)},useInsertionEffect:function(t,l){vu(4,2,t,l)},useMemo:function(t,l){var e=Mt();l=l===void 0?null:l;var a=t();return Oe&&(kl(!0),t(),kl(!1)),e.memoizedState=[a,l],a},useReducer:function(t,l,e){var a=Mt();if(e!==void 0){var n=e(l);Oe&&(kl(!0),e(l),kl(!1))}else n=l;return a.memoizedState=a.baseState=n,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},a.queue=t,t=t.dispatch=Dg.bind(null,C,t),[a.memoizedState,t]},useRef:function(t){var l=Mt();return t={current:t},l.memoizedState=t},useState:function(t){t=xc(t);var l=t.queue,e=oa.bind(null,C,l);return l.dispatch=e,[t.memoizedState,e]},useDebugValue:Qf,useDeferredValue:function(t,l){var e=Mt();return Lf(e,t,l)},useTransition:function(){var t=xc(!1);return t=Jd.bind(null,C,t.queue,!0,!1),Mt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,l,e){var a=C,n=Mt();if(Y){if(e===void 0)throw Error(p(407));e=e()}else{if(e=l(),V===null)throw Error(p(349));q&60||zd(a,l,e)}n.memoizedState=e;var u={value:e,getSnapshot:l};return n.queue=u,eo(Rd.bind(null,a,u,t),[t]),a.flags|=2048,pa(9,Od.bind(null,a,u,e,l),{destroy:void 0},null),e},useId:function(){var t=Mt(),l=V.identifierPrefix;if(Y){var e=pl,a=bl;e=(a&~(1<<32-Gt(a)-1)).toString(32)+e,l=":"+l+"R"+e,e=Uu++,0 title"))),St(u,a,e),u[Tt]=t,gt(u),a=u;break t;case"link":var i=No("link","href",n).get(a+(e.href||""));if(i){for(var c=0;c<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof a.is=="string"?n.createElement("select",{is:a.is}):n.createElement("select"),a.multiple?t.multiple=!0:a.size&&(t.size=a.size);break;default:t=typeof a.is=="string"?n.createElement(e,{is:a.is}):n.createElement(e)}}t[Tt]=l,t[Ut]=a;t:for(n=l.child;n!==null;){if(n.tag===5||n.tag===6)t.appendChild(n.stateNode);else if(n.tag!==4&&n.tag!==27&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===l)break t;for(;n.sibling===null;){if(n.return===null||n.return===l)break t;n=n.return}n.sibling.return=n.return,n=n.sibling}l.stateNode=t;t:switch(St(t,e,a),e){case"button":case"input":case"select":case"textarea":t=!!a.autoFocus;break t;case"img":t=!0;break t;default:t=!1}t&&vl(l)}}return tt(l),l.flags&=-16777217,null;case 6:if(t&&l.stateNode!=null)t.memoizedProps!==a&&vl(l);else{if(typeof a!="string"&&l.stateNode===null)throw Error(p(166));if(t=Fl.current,Ca(l)){if(t=l.stateNode,e=l.memoizedProps,a=null,n=At,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}t[Tt]=l,t=!!(t.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||K0(t.nodeValue,e)),t||xe(l)}else t=Zu(t).createTextNode(a),t[Tt]=l,l.stateNode=t}return tt(l),null;case 13:if(a=l.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(n=Ca(l),a!==null&&a.dehydrated!==null){if(t===null){if(!n)throw Error(p(318));if(n=l.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(p(317));n[Tt]=l}else Un(),!(l.flags&128)&&(l.memoizedState=null),l.flags|=4;tt(l),n=!1}else It!==null&&(Lc(It),It=null),n=!0;if(!n)return l.flags&256?(Sl(l),l):(Sl(l),null)}if(Sl(l),l.flags&128)return l.lanes=e,l;if(e=a!==null,t=t!==null&&t.memoizedState!==null,e){a=l.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool);var u=null;a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)}return e!==t&&e&&(l.child.flags|=8192),lu(l,l.updateQueue),tt(l),null;case 4:return va(),t===null&&nr(l.stateNode.containerInfo),tt(l),null;case 10:return Al(l.type),tt(l),null;case 19:if(yt(ot),n=l.memoizedState,n===null)return tt(l),null;if(a=(l.flags&128)!==0,u=n.rendering,u===null)if(a)Ba(n,!1);else{if(at!==0||t!==null&&t.flags&128)for(t=l.child;t!==null;){if(u=ju(t),u!==null){for(l.flags|=128,Ba(n,!1),t=u.updateQueue,l.updateQueue=t,lu(l,t),l.subtreeFlags=0,t=e,e=l.child;e!==null;)D0(e,t),e=e.sibling;return I(ot,ot.current&1|2),l.child}t=t.sibling}n.tail!==null&&il()>qu&&(l.flags|=128,a=!0,Ba(n,!1),l.lanes=4194304)}else{if(!a)if(t=ju(u),t!==null){if(l.flags|=128,a=!0,t=t.updateQueue,l.updateQueue=t,lu(l,t),Ba(n,!0),n.tail===null&&n.tailMode==="hidden"&&!u.alternate&&!Y)return tt(l),null}else 2*il()-n.renderingStartTime>qu&&e!==536870912&&(l.flags|=128,a=!0,Ba(n,!1),l.lanes=4194304);n.isBackwards?(u.sibling=l.child,l.child=u):(t=n.last,t!==null?t.sibling=u:l.child=u,n.last=u)}return n.tail!==null?(l=n.tail,n.rendering=l,n.tail=l.sibling,n.renderingStartTime=il(),l.sibling=null,t=ot.current,I(ot,a?t&1|2:t&1),l):(tt(l),null);case 22:case 23:return Sl(l),jf(),a=l.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(l.flags|=8192):a&&(l.flags|=8192),a?e&536870912&&!(l.flags&128)&&(tt(l),l.subtreeFlags&6&&(l.flags|=8192)):tt(l),e=l.updateQueue,e!==null&&lu(l,e.retryQueue),e=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),a=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),a!==e&&(l.flags|=2048),t!==null&&yt(Se),null;case 24:return e=null,t!==null&&(e=t.memoizedState.cache),l.memoizedState.cache!==e&&(l.flags|=2048),Al(rt),tt(l),null;case 25:return null}throw Error(p(156,l.tag))}function Hg(t,l){switch(Mf(l),l.tag){case 1:return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 3:return Al(rt),va(),t=l.flags,t&65536&&!(t&128)?(l.flags=t&-65537|128,l):null;case 26:case 27:case 5:return Tu(l),null;case 13:if(Sl(l),t=l.memoizedState,t!==null&&t.dehydrated!==null){if(l.alternate===null)throw Error(p(340));Un()}return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 19:return yt(ot),null;case 4:return va(),null;case 10:return Al(l.type),null;case 22:case 23:return Sl(l),jf(),t!==null&&yt(Se),t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 24:return Al(rt),null;case 25:return null;default:return null}}function j0(t,l){switch(Mf(l),l.tag){case 3:Al(rt),va();break;case 26:case 27:case 5:Tu(l);break;case 4:va();break;case 13:Sl(l);break;case 19:yt(ot);break;case 10:Al(l.type);break;case 22:case 23:Sl(l),jf(),t!==null&&yt(Se);break;case 24:Al(rt)}}var Bg={getCacheForType:function(t){var l=_t(rt),e=l.data.get(t);return e===void 0&&(e=t(),l.data.set(t,e)),e}},Gg=typeof WeakMap=="function"?WeakMap:Map,Q=0,V=null,H=null,q=0,P=0,Xt=null,Vt=!1,Pf=!1,Dl=0,at=0,Ml=0,jl=0,If=0,jt=0,Me=0,cn=null,tl=null,Ea=!1,Gu=!1,tr=0,qu=1/0,pn=null,le=null,eu=!1,ge=null,fn=0,Yc=0,Xc=null,rn=0,Qc=null;function xl(){if(Q&2&&q!==0)return q&-q;if(N.T!==null){var t=ba;return t!==0?t:ar()}return Zs()}function N0(){jt===0&&(jt=!(q&536870912)||Y?qs():536870912);var t=fl.current;return t!==null&&(t.flags|=32),jt}function zt(t,l,e){(t===V&&P===2||t.cancelPendingCommit!==null)&&(Be(t,0),nl(t,q,jt,Vt)),Gn(t,e),(!(Q&2)||t!==V)&&(t===V&&(!(Q&2)&&(jl|=e),at===4&&nl(t,q,jt,Vt)),Nt(t))}function U0(t,l){if(Q&6)throw Error(p(327));var e=t.callbackNode;if(sa()&&t.callbackNode!==e)return null;var a=Au(t,t===V?q:0);if(a===0)return null;var n=(a&60)===0&&(a&t.expiredLanes)===0&&!l;if(l=n?Xg(t,a):Yu(t,a),l!==0){var u=n;do{if(l===6)nl(t,a,0,Vt);else{if(n=t.current.alternate,u&&!qg(n)){l=Yu(t,a),u=!1;continue}if(l===2){u=a;var i=Gs(t,u);if(i!==0&&(a=i,l=w0(t,u,i),u=!1,l!==2))continue}if(l===1){Be(t,0),nl(t,a,0,Vt);break}t:{switch(u=t,l){case 0:case 1:throw Error(p(345));case 4:if((a&4194176)===a){nl(u,a,jt,Vt);break t}break;case 2:tl=null;break;case 3:case 5:break;default:throw Error(p(329))}if(u.finishedWork=n,u.finishedLanes=a,(a&62914560)===a&&(l=tr+300-il(),10e?32:e,N.T=null,ge===null)var u=!1;else{e=Xc,Xc=null;var i=ge,c=fn;if(ge=null,fn=0,Q&6)throw Error(p(331));var f=Q;if(Q|=4,O0(i.current),A0(i,i.current,c,e),Q=f,qn(0,!1),Bt&&typeof Bt.onPostCommitFiberRoot=="function")try{Bt.onPostCommitFiberRoot(jn,i)}catch{}u=!0}return u}finally{W.p=n,N.T=a,X0(t,l)}}return!1}function Eo(t,l,e){l=Jt(e,l),l=Dc(t.stateNode,l,2),t=Il(t,l,2),t!==null&&(Gn(t,2),Nt(t))}function J(t,l,e){if(t.tag===3)Eo(t,t,e);else for(;l!==null;){if(l.tag===3){Eo(l,t,e);break}else if(l.tag===1){var a=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(le===null||!le.has(a))){t=Jt(e,t),e=a0(2),a=Il(l,e,2),a!==null&&(n0(e,a,l,t),Gn(a,2),Nt(a));break}}l=l.return}}function $i(t,l,e){var a=t.pingCache;if(a===null){a=t.pingCache=new Gg;var n=new Set;a.set(l,n)}else n=a.get(l),n===void 0&&(n=new Set,a.set(l,n));n.has(e)||(Pf=!0,n.add(e),t=Zg.bind(null,t,l,e),l.then(t,t))}function Zg(t,l,e){var a=t.pingCache;a!==null&&a.delete(l),t.pingedLanes|=t.suspendedLanes&e,t.warmLanes&=~e,Q&2?Ea=!0:Q&4&&(Gu=!0),er(),V===t&&(q&e)===e&&(at===4||at===3&&(q&62914560)===q&&300>il()-tr?!(Q&2)&&Be(t,0):If|=e,Me===q&&(Me=0)),Nt(t)}function Q0(t,l){l===0&&(l=Ys()),t=ie(t,l),t!==null&&(Gn(t,l),Nt(t))}function Vg(t){var l=t.memoizedState,e=0;l!==null&&(e=l.retryLane),Q0(t,e)}function Kg(t,l){var e=0;switch(t.tag){case 13:var a=t.stateNode,n=t.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(p(314))}a!==null&&a.delete(l),Q0(t,e)}function er(){if(50"u"?null:document;function W0(t,l,e){var a=Ra;if(a&&typeof l=="string"&&l){var n=Kt(l);n='link[rel="'+t+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),Do.has(n)||(Do.add(n),t={rel:t,crossOrigin:e,href:l},a.querySelector(n)===null&&(l=a.createElement("link"),St(l,"link",t),gt(l),a.head.appendChild(l)))}}function sm(t){Nl.D(t),W0("dns-prefetch",t,null)}function dm(t,l){Nl.C(t,l),W0("preconnect",t,l)}function hm(t,l,e){Nl.L(t,l,e);var a=Ra;if(a&&t&&l){var n='link[rel="preload"][as="'+Kt(l)+'"]';l==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+Kt(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+Kt(e.imageSizes)+'"]')):n+='[href="'+Kt(t)+'"]';var u=n;switch(l){case"style":u=Ta(t);break;case"script":u=Da(t)}kt.has(u)||(t=F({rel:"preload",href:l==="image"&&e&&e.imageSrcSet?void 0:t,as:l},e),kt.set(u,t),a.querySelector(n)!==null||l==="style"&&a.querySelector(Yn(u))||l==="script"&&a.querySelector(Xn(u))||(l=a.createElement("link"),St(l,"link",t),gt(l),a.head.appendChild(l)))}}function vm(t,l){Nl.m(t,l);var e=Ra;if(e&&t){var a=l&&typeof l.as=="string"?l.as:"script",n='link[rel="modulepreload"][as="'+Kt(a)+'"][href="'+Kt(t)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Da(t)}if(!kt.has(u)&&(t=F({rel:"modulepreload",href:t},l),kt.set(u,t),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(Xn(u)))return}a=e.createElement("link"),St(a,"link",t),gt(a),e.head.appendChild(a)}}}function gm(t,l,e){Nl.S(t,l,e);var a=Ra;if(a&&t){var n=aa(a).hoistableStyles,u=Ta(t);l=l||"default";var i=n.get(u);if(!i){var c={loading:0,preload:null};if(i=a.querySelector(Yn(u)))c.loading=5;else{t=F({rel:"stylesheet",href:t,"data-precedence":l},e),(e=kt.get(u))&&ur(t,e);var f=i=a.createElement("link");gt(f),St(f,"link",t),f._p=new Promise(function(r,v){f.onload=r,f.onerror=v}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,yu(i,l,a)}i={type:"stylesheet",instance:i,count:1,state:c},n.set(u,i)}}}function mm(t,l){Nl.X(t,l);var e=Ra;if(e&&t){var a=aa(e).hoistableScripts,n=Da(t),u=a.get(n);u||(u=e.querySelector(Xn(n)),u||(t=F({src:t,async:!0},l),(l=kt.get(n))&&ir(t,l),u=e.createElement("script"),gt(u),St(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function ym(t,l){Nl.M(t,l);var e=Ra;if(e&&t){var a=aa(e).hoistableScripts,n=Da(t),u=a.get(n);u||(u=e.querySelector(Xn(n)),u||(t=F({src:t,async:!0,type:"module"},l),(l=kt.get(n))&&ir(t,l),u=e.createElement("script"),gt(u),St(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function Mo(t,l,e,a){var n=(n=Fl.current)?Vu(n):null;if(!n)throw Error(p(446));switch(t){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(l=Ta(e.href),e=aa(n).hoistableStyles,a=e.get(l),a||(a={type:"style",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){t=Ta(e.href);var u=aa(n).hoistableStyles,i=u.get(t);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(t,i),(u=n.querySelector(Yn(t)))&&!u._p&&(i.instance=u,i.state.loading=5),kt.has(t)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},kt.set(t,e),u||bm(n,t,e,i.state))),l&&a===null)throw Error(p(528,""));return i}if(l&&a!==null)throw Error(p(529,""));return null;case"script":return l=e.async,e=e.src,typeof e=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=Da(e),e=aa(n).hoistableScripts,a=e.get(l),a||(a={type:"script",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(p(444,t))}}function Ta(t){return'href="'+Kt(t)+'"'}function Yn(t){return'link[rel="stylesheet"]['+t+"]"}function F0(t){return F({},t,{"data-precedence":t.precedence,precedence:null})}function bm(t,l,e,a){t.querySelector('link[rel="preload"][as="style"]['+l+"]")?a.loading=1:(l=t.createElement("link"),a.preload=l,l.addEventListener("load",function(){return a.loading|=1}),l.addEventListener("error",function(){return a.loading|=2}),St(l,"link",e),gt(l),t.head.appendChild(l))}function Da(t){return'[src="'+Kt(t)+'"]'}function Xn(t){return"script[async]"+t}function jo(t,l,e){if(l.count++,l.instance===null)switch(l.type){case"style":var a=t.querySelector('style[data-href~="'+Kt(e.href)+'"]');if(a)return l.instance=a,gt(a),a;var n=F({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),gt(a),St(a,"style",n),yu(a,e.precedence,t),l.instance=a;case"stylesheet":n=Ta(e.href);var u=t.querySelector(Yn(n));if(u)return l.state.loading|=4,l.instance=u,gt(u),u;a=F0(e),(n=kt.get(n))&&ur(a,n),u=(t.ownerDocument||t).createElement("link"),gt(u);var i=u;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),St(u,"link",a),l.state.loading|=4,yu(u,e.precedence,t),l.instance=u;case"script":return u=Da(e.src),(n=t.querySelector(Xn(u)))?(l.instance=n,gt(n),n):(a=e,(n=kt.get(u))&&(a=F({},e),ir(a,n)),t=t.ownerDocument||t,n=t.createElement("script"),gt(n),St(n,"link",a),t.head.appendChild(n),l.instance=n);case"void":return null;default:throw Error(p(443,l.type))}else l.type==="stylesheet"&&!(l.state.loading&4)&&(a=l.instance,l.state.loading|=4,yu(a,e.precedence,t));return l.instance}function yu(t,l,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function pm(t,l,e){if(e===1||l.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return t=l.disabled,typeof l.precedence=="string"&&t==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function P0(t){return!(t.type==="stylesheet"&&!(t.state.loading&3))}var Tn=null;function Sm(){}function Em(t,l,e){if(Tn===null)throw Error(p(475));var a=Tn;if(l.type==="stylesheet"&&(typeof e.media!="string"||matchMedia(e.media).matches!==!1)&&!(l.state.loading&4)){if(l.instance===null){var n=Ta(e.href),u=t.querySelector(Yn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(a.count++,a=Ku.bind(a),t.then(a,a)),l.state.loading|=4,l.instance=u,gt(u);return}u=t.ownerDocument||t,e=F0(e),(n=kt.get(n))&&ur(e,n),u=u.createElement("link"),gt(u);var i=u;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),St(u,"link",e),l.instance=u}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,t),(t=l.state.preload)&&!(l.state.loading&3)&&(a.count++,l=Ku.bind(a),t.addEventListener("load",l),t.addEventListener("error",l))}}function Tm(){if(Tn===null)throw Error(p(475));var t=Tn;return t.stylesheets&&t.count===0&&Pc(t,t.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(uh)}catch(t){console.error(t)}}uh(),_s.exports=ti;var jm=_s.exports;function Nm(t={}){const{nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a}=t,[n,u]=R.useState(!1),i=R.useRef(e);i.current=e;const c=R.useRef(a);return c.current=a,R.useEffect(()=>{const f=document.createElement("script");return f.src="https://accounts.google.com/gsi/client",f.async=!0,f.defer=!0,f.nonce=l,f.onload=()=>{var r;u(!0),(r=i.current)===null||r===void 0||r.call(i)},f.onerror=()=>{var r;u(!1),(r=c.current)===null||r===void 0||r.call(c)},document.body.appendChild(f),()=>{document.body.removeChild(f)}},[l]),n}const ih=R.createContext(null);function Um({clientId:t,nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a,children:n}){const u=Nm({nonce:l,onScriptLoadSuccess:e,onScriptLoadError:a}),i=R.useMemo(()=>({clientId:t,scriptLoadedSuccessfully:u}),[t,u]);return Ts.createElement(ih.Provider,{value:i},n)}function wm(){const t=R.useContext(ih);if(!t)throw new Error("Google OAuth components must be used within GoogleOAuthProvider");return t}function Cm(t){var l;return(l=t==null?void 0:t.clientId)!==null&&l!==void 0?l:t==null?void 0:t.client_id}const Hm={large:40,medium:32,small:20};function Bm({onSuccess:t,onError:l,useOneTap:e,promptMomentNotification:a,type:n="standard",theme:u="outline",size:i="large",text:c,shape:f,logo_alignment:r,width:v,locale:m,click_listener:d,containerProps:g,...S}){const E=R.useRef(null),{clientId:x,scriptLoadedSuccessfully:s}=wm(),o=R.useRef(t);o.current=t;const h=R.useRef(l);h.current=l;const y=R.useRef(a);return y.current=a,R.useEffect(()=>{var T,A,z,O,X,D,et,G,Cl;if(s)return(z=(A=(T=window==null?void 0:window.google)===null||T===void 0?void 0:T.accounts)===null||A===void 0?void 0:A.id)===null||z===void 0||z.initialize({client_id:x,callback:ht=>{var Rt;if(!(ht!=null&&ht.credential))return(Rt=h.current)===null||Rt===void 0?void 0:Rt.call(h);const{credential:_,select_by:M}=ht;o.current({credential:_,clientId:Cm(ht),select_by:M})},...S}),(D=(X=(O=window==null?void 0:window.google)===null||O===void 0?void 0:O.accounts)===null||X===void 0?void 0:X.id)===null||D===void 0||D.renderButton(E.current,{type:n,theme:u,size:i,text:c,shape:f,logo_alignment:r,width:v,locale:m,click_listener:d}),e&&((Cl=(G=(et=window==null?void 0:window.google)===null||et===void 0?void 0:et.accounts)===null||G===void 0?void 0:G.id)===null||Cl===void 0||Cl.prompt(y.current)),()=>{var ht,Rt,_;e&&((_=(Rt=(ht=window==null?void 0:window.google)===null||ht===void 0?void 0:ht.accounts)===null||Rt===void 0?void 0:Rt.id)===null||_===void 0||_.cancel())}},[x,s,e,n,u,i,c,f,r,v,m]),Ts.createElement("div",{...g,ref:E,style:{height:Hm[i],...g==null?void 0:g.style}})}const Gm=t=>!!(t&&t.constructor&&t.call&&t.apply),ch=(t,l)=>{if(Object.is(t,l))return!0;if(t instanceof Date&&l instanceof Date)return t.getTime()===l.getTime();if(t instanceof RegExp&&l instanceof RegExp)return t.toString()===l.toString();if(typeof t!="object"||t===null||typeof l!="object"||l===null)return!1;const e=Reflect.ownKeys(t),a=Reflect.ownKeys(l);if(e.length!==a.length)return!1;for(let n=0;n{try{return t==="undefined"?void 0:JSON.parse(t??"")}catch{console.error("parsing error on",{value:t});return}},qo=(t,l,e)=>{const a=R.useRef();R.useEffect(()=>{const n=window;if(!(n!=null&&n.addEventListener))return;a.current!==l&&(a.current=l);const u=i=>{a!=null&&a.current&&a.current(i)};return n.addEventListener(t,u),()=>{n.removeEventListener(t,u)}},[t,e,l])},Ym=t=>t==null,Xm=t=>{try{const l=window.localStorage.getItem(t);return(l&&qm(l))??void 0}catch(l){return console.warn(`Error reading localStorage key "${t}":`,l),{error:"unable to read value"}}},Qm=t=>!!(t!=null&&t.error),El=(t,l)=>{const e=R.useRef(l),a=()=>{if(typeof window>"u")return l;const f=Xm(t);return Qm(f)||Ym(f)||f===""?l:f},[n,u]=R.useState(a),i=f=>{typeof window>"u"&&console.warn(`Tried setting localStorage key "${t}" even though environment is not a client`);try{const r=Gm(f)?f(n):f;window.localStorage.setItem(t,JSON.stringify(r)),u(r),window.dispatchEvent(new Event("local-storage"))}catch(r){console.warn(`Error setting localStorage key "${t}":`,r)}};R.useEffect(()=>{const f=a();u(f),e.current=f},[]);const c=()=>{const f=a();ch(f,e.current)||(u(f),e.current=f)};return qo("storage",c),qo("local-storage",c),[n,i]};function fh(t){var l,e,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t))for(l=0;ltypeof t=="boolean"?"".concat(t):t===0?"0":t,Xo=Lm,sr=(t,l)=>e=>{var a;if((l==null?void 0:l.variants)==null)return Xo(t,e==null?void 0:e.class,e==null?void 0:e.className);const{variants:n,defaultVariants:u}=l,i=Object.keys(n).map(r=>{const v=e==null?void 0:e[r],m=u==null?void 0:u[r];if(v===null)return null;const d=Yo(v)||Yo(m);return n[r][d]}),c=e&&Object.entries(e).reduce((r,v)=>{let[m,d]=v;return d===void 0||(r[m]=d),r},{}),f=l==null||(a=l.compoundVariants)===null||a===void 0?void 0:a.reduce((r,v)=>{let{class:m,className:d,...g}=v;return Object.entries(g).every(S=>{let[E,x]=S;return Array.isArray(x)?x.includes({...u,...c}[E]):{...u,...c}[E]===x})?[...r,m,d]:r},[]);return Xo(t,i,f,e==null?void 0:e.class,e==null?void 0:e.className)};function rh(t){var l,e,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(l=0;l{const l=Jm(t),{conflictingClassGroups:e,conflictingClassGroupModifiers:a}=t;return{getClassGroupId:i=>{const c=i.split(dr);return c[0]===""&&c.length!==1&&c.shift(),oh(c,l)||Km(i)},getConflictingClassGroupIds:(i,c)=>{const f=e[i]||[];return c&&a[i]?[...f,...a[i]]:f}}},oh=(t,l)=>{var i;if(t.length===0)return l.classGroupId;const e=t[0],a=l.nextPart.get(e),n=a?oh(t.slice(1),a):void 0;if(n)return n;if(l.validators.length===0)return;const u=t.join(dr);return(i=l.validators.find(({validator:c})=>c(u)))==null?void 0:i.classGroupId},Qo=/^\[(.+)\]$/,Km=t=>{if(Qo.test(t)){const l=Qo.exec(t)[1],e=l==null?void 0:l.substring(0,l.indexOf(":"));if(e)return"arbitrary.."+e}},Jm=t=>{const{theme:l,prefix:e}=t,a={nextPart:new Map,validators:[]};return km(Object.entries(t.classGroups),e).forEach(([u,i])=>{lf(i,a,u,l)}),a},lf=(t,l,e,a)=>{t.forEach(n=>{if(typeof n=="string"){const u=n===""?l:Lo(l,n);u.classGroupId=e;return}if(typeof n=="function"){if($m(n)){lf(n(a),l,e,a);return}l.validators.push({validator:n,classGroupId:e});return}Object.entries(n).forEach(([u,i])=>{lf(i,Lo(l,u),e,a)})})},Lo=(t,l)=>{let e=t;return l.split(dr).forEach(a=>{e.nextPart.has(a)||e.nextPart.set(a,{nextPart:new Map,validators:[]}),e=e.nextPart.get(a)}),e},$m=t=>t.isThemeGetter,km=(t,l)=>l?t.map(([e,a])=>{const n=a.map(u=>typeof u=="string"?l+u:typeof u=="object"?Object.fromEntries(Object.entries(u).map(([i,c])=>[l+i,c])):u);return[e,n]}):t,Wm=t=>{if(t<1)return{get:()=>{},set:()=>{}};let l=0,e=new Map,a=new Map;const n=(u,i)=>{e.set(u,i),l++,l>t&&(l=0,a=e,e=new Map)};return{get(u){let i=e.get(u);if(i!==void 0)return i;if((i=a.get(u))!==void 0)return n(u,i),i},set(u,i){e.has(u)?e.set(u,i):n(u,i)}}},sh="!",Fm=t=>{const{separator:l,experimentalParseClassName:e}=t,a=l.length===1,n=l[0],u=l.length,i=c=>{const f=[];let r=0,v=0,m;for(let x=0;xv?m-v:void 0;return{modifiers:f,hasImportantModifier:g,baseClassName:S,maybePostfixModifierPosition:E}};return e?c=>e({className:c,parseClassName:i}):i},Pm=t=>{if(t.length<=1)return t;const l=[];let e=[];return t.forEach(a=>{a[0]==="["?(l.push(...e.sort(),a),e=[]):e.push(a)}),l.push(...e.sort()),l},Im=t=>({cache:Wm(t.cacheSize),parseClassName:Fm(t),...Vm(t)}),ty=/\s+/,ly=(t,l)=>{const{parseClassName:e,getClassGroupId:a,getConflictingClassGroupIds:n}=l,u=[],i=t.trim().split(ty);let c="";for(let f=i.length-1;f>=0;f-=1){const r=i[f],{modifiers:v,hasImportantModifier:m,baseClassName:d,maybePostfixModifierPosition:g}=e(r);let S=!!g,E=a(S?d.substring(0,g):d);if(!E){if(!S){c=r+(c.length>0?" "+c:c);continue}if(E=a(d),!E){c=r+(c.length>0?" "+c:c);continue}S=!1}const x=Pm(v).join(":"),s=m?x+sh:x,o=s+E;if(u.includes(o))continue;u.push(o);const h=n(E,S);for(let y=0;y0?" "+c:c)}return c};function ey(){let t=0,l,e,a="";for(;t{if(typeof t=="string")return t;let l,e="";for(let a=0;am(v),t());return e=Im(r),a=e.cache.get,n=e.cache.set,u=c,c(f)}function c(f){const r=a(f);if(r)return r;const v=ly(f,e);return n(f,v),v}return function(){return u(ey.apply(null,arguments))}}const $=t=>{const l=e=>e[t]||[];return l.isThemeGetter=!0,l},hh=/^\[(?:([a-z-]+):)?(.+)\]$/i,ny=/^\d+\/\d+$/,uy=new Set(["px","full","screen"]),iy=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,cy=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,fy=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ry=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,oy=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,gl=t=>da(t)||uy.has(t)||ny.test(t),Bl=t=>Ma(t,"length",by),da=t=>!!t&&!Number.isNaN(Number(t)),ec=t=>Ma(t,"number",da),qa=t=>!!t&&Number.isInteger(Number(t)),sy=t=>t.endsWith("%")&&da(t.slice(0,-1)),U=t=>hh.test(t),Gl=t=>iy.test(t),dy=new Set(["length","size","percentage"]),hy=t=>Ma(t,dy,vh),vy=t=>Ma(t,"position",vh),gy=new Set(["image","url"]),my=t=>Ma(t,gy,Sy),yy=t=>Ma(t,"",py),Ya=()=>!0,Ma=(t,l,e)=>{const a=hh.exec(t);return a?a[1]?typeof l=="string"?a[1]===l:l.has(a[1]):e(a[2]):!1},by=t=>cy.test(t)&&!fy.test(t),vh=()=>!1,py=t=>ry.test(t),Sy=t=>oy.test(t),Ey=()=>{const t=$("colors"),l=$("spacing"),e=$("blur"),a=$("brightness"),n=$("borderColor"),u=$("borderRadius"),i=$("borderSpacing"),c=$("borderWidth"),f=$("contrast"),r=$("grayscale"),v=$("hueRotate"),m=$("invert"),d=$("gap"),g=$("gradientColorStops"),S=$("gradientColorStopPositions"),E=$("inset"),x=$("margin"),s=$("opacity"),o=$("padding"),h=$("saturate"),y=$("scale"),T=$("sepia"),A=$("skew"),z=$("space"),O=$("translate"),X=()=>["auto","contain","none"],D=()=>["auto","hidden","clip","visible","scroll"],et=()=>["auto",U,l],G=()=>[U,l],Cl=()=>["",gl,Bl],ht=()=>["auto",da,U],Rt=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],_=()=>["solid","dashed","dotted","double","none"],M=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],j=()=>["start","end","center","between","around","evenly","stretch"],K=()=>["","0",U],nt=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Dt=()=>[da,U];return{cacheSize:500,separator:":",theme:{colors:[Ya],spacing:[gl,Bl],blur:["none","",Gl,U],brightness:Dt(),borderColor:[t],borderRadius:["none","","full",Gl,U],borderSpacing:G(),borderWidth:Cl(),contrast:Dt(),grayscale:K(),hueRotate:Dt(),invert:K(),gap:G(),gradientColorStops:[t],gradientColorStopPositions:[sy,Bl],inset:et(),margin:et(),opacity:Dt(),padding:G(),saturate:Dt(),scale:Dt(),sepia:K(),skew:Dt(),space:G(),translate:G()},classGroups:{aspect:[{aspect:["auto","square","video",U]}],container:["container"],columns:[{columns:[Gl]}],"break-after":[{"break-after":nt()}],"break-before":[{"break-before":nt()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Rt(),U]}],overflow:[{overflow:D()}],"overflow-x":[{"overflow-x":D()}],"overflow-y":[{"overflow-y":D()}],overscroll:[{overscroll:X()}],"overscroll-x":[{"overscroll-x":X()}],"overscroll-y":[{"overscroll-y":X()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[E]}],"inset-x":[{"inset-x":[E]}],"inset-y":[{"inset-y":[E]}],start:[{start:[E]}],end:[{end:[E]}],top:[{top:[E]}],right:[{right:[E]}],bottom:[{bottom:[E]}],left:[{left:[E]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",qa,U]}],basis:[{basis:et()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",U]}],grow:[{grow:K()}],shrink:[{shrink:K()}],order:[{order:["first","last","none",qa,U]}],"grid-cols":[{"grid-cols":[Ya]}],"col-start-end":[{col:["auto",{span:["full",qa,U]},U]}],"col-start":[{"col-start":ht()}],"col-end":[{"col-end":ht()}],"grid-rows":[{"grid-rows":[Ya]}],"row-start-end":[{row:["auto",{span:[qa,U]},U]}],"row-start":[{"row-start":ht()}],"row-end":[{"row-end":ht()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",U]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",U]}],gap:[{gap:[d]}],"gap-x":[{"gap-x":[d]}],"gap-y":[{"gap-y":[d]}],"justify-content":[{justify:["normal",...j()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...j(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...j(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[o]}],px:[{px:[o]}],py:[{py:[o]}],ps:[{ps:[o]}],pe:[{pe:[o]}],pt:[{pt:[o]}],pr:[{pr:[o]}],pb:[{pb:[o]}],pl:[{pl:[o]}],m:[{m:[x]}],mx:[{mx:[x]}],my:[{my:[x]}],ms:[{ms:[x]}],me:[{me:[x]}],mt:[{mt:[x]}],mr:[{mr:[x]}],mb:[{mb:[x]}],ml:[{ml:[x]}],"space-x":[{"space-x":[z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",U,l]}],"min-w":[{"min-w":[U,l,"min","max","fit"]}],"max-w":[{"max-w":[U,l,"none","full","min","max","fit","prose",{screen:[Gl]},Gl]}],h:[{h:[U,l,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[U,l,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[U,l,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[U,l,"auto","min","max","fit"]}],"font-size":[{text:["base",Gl,Bl]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",ec]}],"font-family":[{font:[Ya]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",U]}],"line-clamp":[{"line-clamp":["none",da,ec]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",gl,U]}],"list-image":[{"list-image":["none",U]}],"list-style-type":[{list:["none","disc","decimal",U]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[t]}],"placeholder-opacity":[{"placeholder-opacity":[s]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[t]}],"text-opacity":[{"text-opacity":[s]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[..._(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",gl,Bl]}],"underline-offset":[{"underline-offset":["auto",gl,U]}],"text-decoration-color":[{decoration:[t]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:G()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",U]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",U]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[s]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Rt(),vy]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",hy]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},my]}],"bg-color":[{bg:[t]}],"gradient-from-pos":[{from:[S]}],"gradient-via-pos":[{via:[S]}],"gradient-to-pos":[{to:[S]}],"gradient-from":[{from:[g]}],"gradient-via":[{via:[g]}],"gradient-to":[{to:[g]}],rounded:[{rounded:[u]}],"rounded-s":[{"rounded-s":[u]}],"rounded-e":[{"rounded-e":[u]}],"rounded-t":[{"rounded-t":[u]}],"rounded-r":[{"rounded-r":[u]}],"rounded-b":[{"rounded-b":[u]}],"rounded-l":[{"rounded-l":[u]}],"rounded-ss":[{"rounded-ss":[u]}],"rounded-se":[{"rounded-se":[u]}],"rounded-ee":[{"rounded-ee":[u]}],"rounded-es":[{"rounded-es":[u]}],"rounded-tl":[{"rounded-tl":[u]}],"rounded-tr":[{"rounded-tr":[u]}],"rounded-br":[{"rounded-br":[u]}],"rounded-bl":[{"rounded-bl":[u]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[s]}],"border-style":[{border:[..._(),"hidden"]}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[s]}],"divide-style":[{divide:_()}],"border-color":[{border:[n]}],"border-color-x":[{"border-x":[n]}],"border-color-y":[{"border-y":[n]}],"border-color-t":[{"border-t":[n]}],"border-color-r":[{"border-r":[n]}],"border-color-b":[{"border-b":[n]}],"border-color-l":[{"border-l":[n]}],"divide-color":[{divide:[n]}],"outline-style":[{outline:["",..._()]}],"outline-offset":[{"outline-offset":[gl,U]}],"outline-w":[{outline:[gl,Bl]}],"outline-color":[{outline:[t]}],"ring-w":[{ring:Cl()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[t]}],"ring-opacity":[{"ring-opacity":[s]}],"ring-offset-w":[{"ring-offset":[gl,Bl]}],"ring-offset-color":[{"ring-offset":[t]}],shadow:[{shadow:["","inner","none",Gl,yy]}],"shadow-color":[{shadow:[Ya]}],opacity:[{opacity:[s]}],"mix-blend":[{"mix-blend":[...M(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":M()}],filter:[{filter:["","none"]}],blur:[{blur:[e]}],brightness:[{brightness:[a]}],contrast:[{contrast:[f]}],"drop-shadow":[{"drop-shadow":["","none",Gl,U]}],grayscale:[{grayscale:[r]}],"hue-rotate":[{"hue-rotate":[v]}],invert:[{invert:[m]}],saturate:[{saturate:[h]}],sepia:[{sepia:[T]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[e]}],"backdrop-brightness":[{"backdrop-brightness":[a]}],"backdrop-contrast":[{"backdrop-contrast":[f]}],"backdrop-grayscale":[{"backdrop-grayscale":[r]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[v]}],"backdrop-invert":[{"backdrop-invert":[m]}],"backdrop-opacity":[{"backdrop-opacity":[s]}],"backdrop-saturate":[{"backdrop-saturate":[h]}],"backdrop-sepia":[{"backdrop-sepia":[T]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",U]}],duration:[{duration:Dt()}],ease:[{ease:["linear","in","out","in-out",U]}],delay:[{delay:Dt()}],animate:[{animate:["none","spin","ping","pulse","bounce",U]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[y]}],"scale-x":[{"scale-x":[y]}],"scale-y":[{"scale-y":[y]}],rotate:[{rotate:[qa,U]}],"translate-x":[{"translate-x":[O]}],"translate-y":[{"translate-y":[O]}],"skew-x":[{"skew-x":[A]}],"skew-y":[{"skew-y":[A]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",U]}],accent:[{accent:["auto",t]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",U]}],"caret-color":[{caret:[t]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":G()}],"scroll-mx":[{"scroll-mx":G()}],"scroll-my":[{"scroll-my":G()}],"scroll-ms":[{"scroll-ms":G()}],"scroll-me":[{"scroll-me":G()}],"scroll-mt":[{"scroll-mt":G()}],"scroll-mr":[{"scroll-mr":G()}],"scroll-mb":[{"scroll-mb":G()}],"scroll-ml":[{"scroll-ml":G()}],"scroll-p":[{"scroll-p":G()}],"scroll-px":[{"scroll-px":G()}],"scroll-py":[{"scroll-py":G()}],"scroll-ps":[{"scroll-ps":G()}],"scroll-pe":[{"scroll-pe":G()}],"scroll-pt":[{"scroll-pt":G()}],"scroll-pr":[{"scroll-pr":G()}],"scroll-pb":[{"scroll-pb":G()}],"scroll-pl":[{"scroll-pl":G()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",U]}],fill:[{fill:[t,"none"]}],"stroke-w":[{stroke:[gl,Bl,ec]}],stroke:[{stroke:[t,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Ty=ay(Ey);function st(...t){return Ty(Zm(t))}const _y=sr("relative w-full rounded-lg border bg-background px-4 py-3 text-foreground text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:text-foreground [&>svg~*]:pl-7",{variants:{variant:{default:"",destructive:"border-destructive/50 dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),_e=R.forwardRef(({className:t,variant:l,...e},a)=>b.jsx("div",{ref:a,role:"alert",className:st(_y({variant:l}),t),...e})),ha=R.forwardRef(({className:t,...l},e)=>b.jsx("h3",{ref:e,className:st("mb-1 font-bold leading-none",t),...l})),Ae=R.forwardRef(({className:t,...l},e)=>b.jsx("div",{ref:e,className:st("text-sm [&_p]:leading-relaxed",t),...l}));_e.displayName="Alert";ha.displayName="AlertTitle";Ae.displayName="AlertDescription";function Ay(t,l){typeof t=="function"?t(l):t!=null&&(t.current=l)}function xy(...t){return l=>t.forEach(e=>Ay(e,l))}var gh=R.forwardRef((t,l)=>{const{children:e,...a}=t,n=R.Children.toArray(e),u=n.find(Oy);if(u){const i=u.props.children,c=n.map(f=>f===u?R.Children.count(i)>1?R.Children.only(null):R.isValidElement(i)?i.props.children:null:f);return b.jsx(ef,{...a,ref:l,children:R.isValidElement(i)?R.cloneElement(i,void 0,c):null})}return b.jsx(ef,{...a,ref:l,children:e})});gh.displayName="Slot";var ef=R.forwardRef((t,l)=>{const{children:e,...a}=t;if(R.isValidElement(e)){const n=Dy(e);return R.cloneElement(e,{...Ry(a,e.props),ref:l?xy(l,n):n})}return R.Children.count(e)>1?R.Children.only(null):null});ef.displayName="SlotClone";var zy=({children:t})=>b.jsx(b.Fragment,{children:t});function Oy(t){return R.isValidElement(t)&&t.type===zy}function Ry(t,l){const e={...l};for(const a in l){const n=t[a],u=l[a];/^on[A-Z]/.test(a)?n&&u?e[a]=(...c)=>{u(...c),n(...c)}:n&&(e[a]=n):a==="style"?e[a]={...n,...u}:a==="className"&&(e[a]=[n,u].filter(Boolean).join(" "))}return{...t,...e}}function Dy(t){var a,n;let l=(a=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:a.get,e=l&&"isReactWarning"in l&&l.isReactWarning;return e?t.ref:(l=(n=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:n.get,e=l&&"isReactWarning"in l&&l.isReactWarning,e?t.props.ref:t.props.ref||t.ref)}/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const My=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),mh=(...t)=>t.filter((l,e,a)=>!!l&&a.indexOf(l)===e).join(" ");/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var jy={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ny=R.forwardRef(({color:t="currentColor",size:l=24,strokeWidth:e=2,absoluteStrokeWidth:a,className:n="",children:u,iconNode:i,...c},f)=>R.createElement("svg",{ref:f,...jy,width:l,height:l,stroke:t,strokeWidth:a?Number(e)*24/Number(l):e,className:mh("lucide",n),...c},[...i.map(([r,v])=>R.createElement(r,v)),...Array.isArray(u)?u:[u]]));/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hr=(t,l)=>{const e=R.forwardRef(({className:a,...n},u)=>R.createElement(Ny,{ref:u,iconNode:l,className:mh(`lucide-${My(t)}`,a),...n}));return e.displayName=`${t}`,e};/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yh=hr("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const af=hr("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** - * @license lucide-react v0.441.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Uy=hr("TriangleAlert",[["path",{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",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),wy=sr("inline-flex items-center justify-center whitespace-nowrap rounded-md font-bold text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary font-bold text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8 text-lg",icon:"size-9","icon-sm":"size-8"}},defaultVariants:{variant:"default",size:"default"}}),ac=sr(void 0,{variants:{size:{default:"size-4 max-w-4",sm:"size-3 max-w-3",lg:"size-5 max-w-5",icon:"mr-0 size-4","icon-sm":"mr-0 size-3"}},defaultVariants:{size:"default"}}),yi=R.forwardRef(({className:t,startIcon:l,isLoading:e=!1,variant:a,endIcon:n,size:u,children:i,asChild:c=!1,...f},r)=>{const v=c?gh:"button";return b.jsxs(v,{className:st(wy({variant:a,size:u,className:t})),ref:r,...f,children:[b.jsx(af,{"data-testid":"loader-icon",className:st("animate-spin",!l&&"transition-all",e&&"mr-2 opacity-100",ac({size:u}),!e&&"mr-0 max-w-0 opacity-0")}),!e&&l&&R.cloneElement(l,{className:st("mr-2",ac({size:u}),l.props.className)}),i,n&&R.cloneElement(n,{className:st("ml-2",ac({size:u}),n.props.className)})]})});yi.displayName="Button";const vr=R.forwardRef(({className:t,...l},e)=>b.jsx("div",{className:"relative w-full overflow-auto",children:b.jsx("table",{ref:e,className:st("w-full caption-bottom text-sm",t),...l})})),gr=R.forwardRef(({className:t,...l},e)=>b.jsx("thead",{ref:e,className:st("[&_tr]:border-b",t),...l})),mr=R.forwardRef(({className:t,...l},e)=>b.jsx("tbody",{ref:e,className:st("[&_tr:last-child]:border-0",t),...l})),Cy=R.forwardRef(({className:t,...l},e)=>b.jsx("tfoot",{ref:e,className:st("border-t bg-muted/50 [&>tr]:last:border-b-0",t),...l})),On=R.forwardRef(({className:t,...l},e)=>b.jsx("tr",{ref:e,className:st("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",t),...l})),Jl=R.forwardRef(({className:t,...l},e)=>b.jsx("th",{ref:e,className:st("h-10 px-2 text-left align-middle font-bold text-muted-foreground last:overflow-x-hidden [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...l})),$l=R.forwardRef(({className:t,...l},e)=>b.jsx("td",{ref:e,className:st("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...l})),Hy=R.forwardRef(({className:t,...l},e)=>b.jsx("caption",{ref:e,className:st("mt-4 text-muted-foreground text-sm",t),...l}));vr.displayName="Table";mr.displayName="TableBody";Hy.displayName="TableCaption";$l.displayName="TableCell";Cy.displayName="TableFooter";Jl.displayName="TableHead";gr.displayName="TableHeader";On.displayName="TableRow";function By(t,l){return t.charAt(l)}function Gy(t,l=""){return t.join(l)}function qy(t,l=0,e=void 0){return t.slice(l,e)}function bh(t){return t.toLowerCase()}function Yy(t){return t.toUpperCase()}function ph(t){return Gy([Yy(By(t,0)??""),qy(t,1)])}function Xy({starkData:t}){var e,a,n;const l=t.status==="SUCCEEDED";return b.jsxs(vr,{children:[b.jsx(gr,{children:b.jsxs(On,{children:[b.jsx(Jl,{className:"truncate",children:"Status"}),!l&&b.jsx(Jl,{className:"truncate",children:"Error Message"}),b.jsx(Jl,{className:"truncate text-right",children:"Stats"}),b.jsx(Jl,{className:"truncate text-right",children:"Elapsed Time"}),l&&b.jsx(Jl,{className:"truncate text-right",children:"Receipt URL"})]})}),b.jsx(mr,{children:b.jsxs(On,{children:[b.jsx($l,{children:b.jsx("span",{className:st(t.status==="SUCCEEDED"&&"text-green-600 dark:text-green-500"),children:ph(bh(t.status))})}),!l&&b.jsx($l,{children:t.error_msg??"-"}),b.jsx($l,{children:b.jsxs("div",{className:"flex flex-col items-end",children:[b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Segments:"})," ",(e=t.stats)==null?void 0:e.segments]}),b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Cycles:"})," ",(a=t.stats)==null?void 0:a.cycles]}),b.jsxs("span",{children:[b.jsx("span",{className:"text-muted-foreground",children:"Total Cycles:"})," ",(n=t.stats)==null?void 0:n.total_cycles]})]})}),b.jsxs($l,{className:"text-right",children:[t.elapsed_time,"s"]}),l&&b.jsx($l,{className:"text-right",children:b.jsx("a",{href:t.receipt_url,children:b.jsx(yi,{size:"sm",startIcon:b.jsx(yh,{}),children:"Download"})})})]})})]})}function Qy({snarkData:t}){const l=()=>{const e=`data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(t.output))}`,a=document.createElement("a");a.setAttribute("href",e),a.setAttribute("download",`snark_data_${new Date().toLocaleDateString()}.json`),document.body.appendChild(a),a.click(),a.remove()};return b.jsx(yi,{size:"sm",startIcon:b.jsx(yh,{}),onClick:l,children:"Download"})}function Ly({snarkData:t}){return b.jsxs(vr,{children:[b.jsx(gr,{children:b.jsxs(On,{children:[b.jsx(Jl,{className:"truncate",children:"Status"}),b.jsx(Jl,{className:"truncate text-right",children:"Output"})]})}),b.jsx(mr,{children:b.jsxs(On,{children:[b.jsx($l,{children:b.jsx("span",{className:st(t.status==="SUCCEEDED"&&"text-green-600 dark:text-green-500"),children:ph(bh(t.status))})}),b.jsx($l,{className:"text-right",children:b.jsx(Qy,{snarkData:t})})]})})]})}function nf(t){this.message=t}nf.prototype=new Error,nf.prototype.name="InvalidCharacterError";var Zo=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(t){var l=String(t).replace(/=+$/,"");if(l.length%4==1)throw new nf("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,a,n=0,u=0,i="";a=l.charAt(u++);~a&&(e=n%4?64*e+a:a,n++%4)?i+=String.fromCharCode(255&e>>(-2*n&6)):0)a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a);return i};function Zy(t){var l=t.replace(/-/g,"+").replace(/_/g,"/");switch(l.length%4){case 0:break;case 2:l+="==";break;case 3:l+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(Zo(e).replace(/(.)/g,function(a,n){var u=n.charCodeAt(0).toString(16).toUpperCase();return u.length<2&&(u="0"+u),"%"+u}))}(l)}catch{return Zo(l)}}function Wu(t){this.message=t}function Vy(t,l){if(typeof t!="string")throw new Wu("Invalid token specified");var e=(l=l||{}).header===!0?0:1;try{return JSON.parse(Zy(t.split(".")[e]))}catch(a){throw new Wu("Invalid token specified: "+a.message)}}Wu.prototype=new Error,Wu.prototype.name="InvalidTokenError";function Ky({address:t}){const[l,e]=El("google-infos",void 0),[a,n]=El("google-token",void 0);return R.useEffect(()=>{!a||l||e(Vy(a))},[a,e,l]),b.jsx(Bm,{auto_select:!0,theme:"filled_black",nonce:t,onSuccess:u=>{u.credential&&n(u.credential)}})}function Jy({loadingSrc:t="/loading.gif",loadingText:l="Loading…"}){return b.jsxs("div",{className:"mx-auto flex animate-fade-in-up flex-col items-center justify-center gap-3",children:[b.jsx("img",{height:120,width:128,src:t,alt:"Loading"}),b.jsx("p",{className:"text-sm",children:l})]})}function Sh(t){return new Promise(l=>setTimeout(l,t))}async function $y(t){const l=await fetch("https://zkauth.vercel.app/api/bonsai/snark-proving",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uuid:t})});if(!l.ok)throw new Error("Failed to start SNARK proving");return(await l.json()).uuid}async function Vo(t){const l=await fetch(`https://zkauth.vercel.app/api/bonsai/snark-status?uuid=${t}`);if(!l.ok)throw new Error("Failed to get SNARK status");return l.json()}async function ky({starkUuid:t,setSnarkPollingResults:l}){const e=await $y(t);if(!e)throw new Error("SNARK UUID not found");let a=await Vo(e);for(l(a);a.status==="RUNNING";)await Sh(4e3),a=await Vo(e),l(a);return{snarkStatus:a}}function Wy(){this.__data__=[],this.size=0}function Eh(t,l){return t===l||t!==t&&l!==l}function bi(t,l){for(var e=t.length;e--;)if(Eh(t[e][0],l))return e;return-1}var Fy=Array.prototype,Py=Fy.splice;function Iy(t){var l=this.__data__,e=bi(l,t);if(e<0)return!1;var a=l.length-1;return e==a?l.pop():Py.call(l,e,1),--this.size,!0}function t1(t){var l=this.__data__,e=bi(l,t);return e<0?void 0:l[e][1]}function l1(t){return bi(this.__data__,t)>-1}function e1(t,l){var e=this.__data__,a=bi(e,t);return a<0?(++this.size,e.push([t,l])):e[a][1]=l,this}function Ul(t){var l=-1,e=t==null?0:t.length;for(this.clear();++lc))return!1;var r=u.get(t),v=u.get(l);if(r&&v)return r==l&&v==t;var m=-1,d=!0,g=e&ab?new Fu:void 0;for(u.set(t,l),u.set(l,t);++m-1&&t%1==0&&t-1&&t%1==0&&t<=Gb}var qb="[object Arguments]",Yb="[object Array]",Xb="[object Boolean]",Qb="[object Date]",Lb="[object Error]",Zb="[object Function]",Vb="[object Map]",Kb="[object Number]",Jb="[object Object]",$b="[object RegExp]",kb="[object Set]",Wb="[object String]",Fb="[object WeakMap]",Pb="[object ArrayBuffer]",Ib="[object DataView]",tp="[object Float32Array]",lp="[object Float64Array]",ep="[object Int8Array]",ap="[object Int16Array]",np="[object Int32Array]",up="[object Uint8Array]",ip="[object Uint8ClampedArray]",cp="[object Uint16Array]",fp="[object Uint32Array]",k={};k[tp]=k[lp]=k[ep]=k[ap]=k[np]=k[up]=k[ip]=k[cp]=k[fp]=!0;k[qb]=k[Yb]=k[Pb]=k[Xb]=k[Ib]=k[Qb]=k[Lb]=k[Zb]=k[Vb]=k[Kb]=k[Jb]=k[$b]=k[kb]=k[Wb]=k[Fb]=!1;function rp(t){return Mn(t)&&Dh(t.length)&&!!k[Qn(t)]}function op(t){return function(l){return t(l)}}var Mh=typeof Tl=="object"&&Tl&&!Tl.nodeType&&Tl,on=Mh&&typeof _l=="object"&&_l&&!_l.nodeType&&_l,sp=on&&on.exports===Mh,ic=sp&&Th.process,ts=function(){try{var t=on&&on.require&&on.require("util").types;return t||ic&&ic.binding&&ic.binding("util")}catch{}}(),ls=ts&&ts.isTypedArray,jh=ls?op(ls):rp,dp=Object.prototype,hp=dp.hasOwnProperty;function vp(t,l){var e=Pu(t),a=!e&&jb(t),n=!e&&!a&&uf(t),u=!e&&!a&&!n&&jh(t),i=e||a||n||u,c=i?Ob(t.length,String):[],f=c.length;for(var r in t)hp.call(t,r)&&!(i&&(r=="length"||n&&(r=="offset"||r=="parent")||u&&(r=="buffer"||r=="byteLength"||r=="byteOffset")||Bb(r,f)))&&c.push(r);return c}var gp=Object.prototype;function mp(t){var l=t&&t.constructor,e=typeof l=="function"&&l.prototype||gp;return t===e}function yp(t,l){return function(e){return t(l(e))}}var bp=yp(Object.keys,Object),pp=Object.prototype,Sp=pp.hasOwnProperty;function Ep(t){if(!mp(t))return bp(t);var l=[];for(var e in Object(t))Sp.call(t,e)&&e!="constructor"&&l.push(e);return l}function Tp(t){return t!=null&&Dh(t.length)&&!xh(t)}function _p(t){return Tp(t)?vp(t):Ep(t)}function es(t){return Eb(t,_p,zb)}var Ap=1,xp=Object.prototype,zp=xp.hasOwnProperty;function Op(t,l,e,a,n,u){var i=e&Ap,c=es(t),f=c.length,r=es(l),v=r.length;if(f!=v&&!i)return!1;for(var m=f;m--;){var d=c[m];if(!(i?d in l:zp.call(l,d)))return!1}var g=u.get(t),S=u.get(l);if(g&&S)return g==l&&S==t;var E=!0;u.set(t,l),u.set(l,t);for(var x=i;++m{const i=u==null?void 0:u.at(-1);return Bp(i,n)?u:[...u??[],n]});return{starkUuid:a,starkStatus:n}}function Yp({userInfos:t,type:l}){return b.jsx(_e,{className:"flex flex-row items-center gap-4 bg-neutral-50 p-5 dark:bg-neutral-900",children:b.jsxs(Ae,{className:"grid w-full",children:[b.jsx("p",{title:t.name,className:"truncate font-bold text-xl",children:t.name}),b.jsx("p",{title:t.email,className:"truncate text-muted-foreground text-sm",children:t.email}),b.jsx("p",{className:"mt-1 flex flex-row gap-2 font-mono text-[10px]",children:l==="google"&&b.jsxs(b.Fragment,{children:[b.jsx("img",{src:"https://zkauth.vercel.app/images/google.svg",width:16,height:16,alt:"Google"})," ","Google"]})})]})})}function Xp({address:t}){var x,s,o,h;const[l,e]=R.useTransition(),[a,n]=El("stark-results",void 0),[u,i]=El("snark-results",void 0),[c]=El("google-infos",void 0),[f]=El("google-token",void 0),[r,v]=R.useState(),[m,d]=R.useState(),[g,S]=R.useState();function E(){if(!f){console.error("JWT not found");return}e(async()=>{try{const{starkUuid:y,starkStatus:T}=await qp({iss:c?"Google":"test",setStarkPollingResults:S,token:f??""}),{snarkStatus:A}=await ky({setSnarkPollingResults:d,starkUuid:y});n(T),i(A)}catch(y){console.error("Error proving:",y),v(y)}})}return t?b.jsxs(b.Fragment,{children:[l?b.jsx(Jy,{loadingSrc:"https://zkauth.vercel.app/loading.gif",loadingText:"☕️ This will take a couple of minutes… Do not close your browser…"}):b.jsxs(b.Fragment,{children:[b.jsxs("p",{className:"mb-3 break-words text-xs",children:["You are about to prove that address"," ",b.jsx("strong",{title:t,children:t})," owns the following social account:"]}),c&&b.jsx(Yp,{type:"google",userInfos:c})]}),b.jsxs("div",{className:"mt-6 w-full",children:[b.jsxs(yi,{isLoading:l,onClick:E,size:"lg",autoFocus:!0,className:"flex w-full flex-row items-center gap-1.5",disabled:!!r||l,children:["Prove with"," ",b.jsx("img",{className:"-top-[1px] relative",width:58,height:16,src:"https://zkauth.vercel.app/images/bonsai-logo-light.svg",alt:"bonsai logo"})]}),g&&g.length>0&&b.jsxs(_e,{className:"mt-4 border-none px-0",children:[b.jsxs(ha,{children:["STARK Results"," ",b.jsxs("span",{className:st("text-muted-foreground",((x=g.at(-1))==null?void 0:x.status)==="SUCCEEDED"&&"font-bold text-green-600 dark:text-green-500",((s=g.at(-1))==null?void 0:s.status)==="FAILED"&&"font-bold text-red-600 dark:text-red-500"),children:["(",(o=g.at(-1))==null?void 0:o.status,")"]})]}),((h=g.at(-1))==null?void 0:h.status)!=="SUCCEEDED"&&b.jsx(Ae,{className:"rounded border bg-neutral-50 font-mono dark:bg-neutral-900",children:b.jsxs("div",{className:"flex flex-row items-start justify-between gap-2 px-3 py-2",children:[b.jsx("div",{className:"flex flex-col",children:g.map((y,T)=>b.jsx("code",{className:"block text-[10px]",children:y.state},T))}),b.jsx(af,{className:"mt-[0.25rem] size-3.5 animate-spin text-border"})]})})]}),m&&b.jsxs(_e,{className:"border-none px-0 pb-0",children:[b.jsxs(ha,{children:["SNARK Results"," ",b.jsxs("span",{className:st(m.status==="SUCCEEDED"&&"font-bold text-green-600 dark:text-green-500",m.status==="FAILED"&&"font-bold text-red-600 dark:text-red-500"),children:["(",m.status,")"]})]}),b.jsx(Ae,{className:"rounded border bg-neutral-50 font-mono dark:bg-neutral-900",children:b.jsxs("div",{className:"flex flex-row items-center justify-between gap-2 px-3 py-2 text-xs",children:["This will take ~2 minutes"," ",b.jsx(af,{className:"size-3.5 animate-spin text-border"})]})})]}),r&&b.jsxs(_e,{variant:"destructive",className:"mt-2",children:[b.jsx(Uy,{className:"size-4"}),b.jsxs(ha,{children:["Error ",r.status]}),b.jsx(Ae,{children:r.message})]})]})]}):null}function Qp({address:t}){console.log("YOUR ADDRESS IS:",t);const[l]=El("google-token",null),[e,a]=R.useState(1),[n]=El("stark-results",void 0),[u]=El("snark-results",void 0);return R.useEffect(()=>{if(!l){a(2);return}if(n||u){a(4);return}a(3)},[t,l,n,u]),b.jsx(Um,{clientId:"381952934096-ahvjn5cj420qiosnjl2g4o2olpbuopf9.apps.googleusercontent.com",children:e===2?b.jsx(Ky,{address:t}):e===3?b.jsx(Xp,{address:t}):b.jsxs(b.Fragment,{children:[n&&b.jsxs(_e,{className:"border-none px-0",children:[b.jsx(ha,{children:"STARK Results"}),b.jsx(Ae,{className:"rounded border bg-neutral-50 dark:bg-neutral-900",children:b.jsx(Xy,{starkData:n})})]}),u&&b.jsxs(_e,{className:"border-none px-0 pb-0",children:[b.jsx(ha,{children:"SNARK Results"}),b.jsx(Ae,{className:"rounded border bg-neutral-50 dark:bg-neutral-900",children:b.jsx(Ly,{snarkData:u})})]})]})})}var ds;const Lp=(ds=document.getElementById("zkauth"))==null?void 0:ds.getAttribute("data-address");jm.createRoot(document.getElementById("zkauth")).render(b.jsx(R.StrictMode,{children:b.jsx(Qp,{address:Lp??""})}))});export default Zp(); diff --git a/zk-auth/public/vite/index.html b/zk-auth/public/vite/index.html deleted file mode 100644 index 6a54c98..0000000 --- a/zk-auth/public/vite/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - -
- - From 9b473632c3c0c8d538825b4ec911ce58e5de9340 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:16:27 -0400 Subject: [PATCH 032/110] fix: wip --- zk-auth/bun.lockb | Bin 151109 -> 40199 bytes zk-auth/next.config.js | 43 +++-- zk-auth/package.json | 58 +++--- zk-auth/postcss.config.cjs | 1 - zk-auth/src/app/_components/prove-button.tsx | 181 ------------------ .../src/app/_components/sign-in-button.tsx | 37 ---- zk-auth/src/app/_components/snark-table.tsx | 63 ------ zk-auth/src/app/_components/stark-table.tsx | 78 -------- zk-auth/src/app/_components/user-infos.tsx | 32 ---- zk-auth/src/app/_utils/do-snark-proving.ts | 65 ------- zk-auth/src/app/_utils/do-stark-proving.ts | 82 -------- .../src/app/api/bonsai/snark-proving/route.ts | 19 +- zk-auth/src/app/layout.tsx | 14 -- zk-auth/src/app/page.tsx | 65 ------- zk-auth/src/app/providers.tsx | 22 --- zk-auth/tailwind.config.ts | 18 -- 16 files changed, 53 insertions(+), 725 deletions(-) delete mode 100644 zk-auth/postcss.config.cjs delete mode 100644 zk-auth/src/app/_components/prove-button.tsx delete mode 100644 zk-auth/src/app/_components/sign-in-button.tsx delete mode 100644 zk-auth/src/app/_components/snark-table.tsx delete mode 100644 zk-auth/src/app/_components/stark-table.tsx delete mode 100644 zk-auth/src/app/_components/user-infos.tsx delete mode 100644 zk-auth/src/app/_utils/do-snark-proving.ts delete mode 100644 zk-auth/src/app/_utils/do-stark-proving.ts delete mode 100644 zk-auth/src/app/layout.tsx delete mode 100644 zk-auth/src/app/page.tsx delete mode 100644 zk-auth/src/app/providers.tsx delete mode 100644 zk-auth/tailwind.config.ts diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 14003f161285b1b1b8e3f5171f1920a84441bebb..39e0410db7cb3d03dc0dc3468bcea56c64bbe390 100755 GIT binary patch delta 7175 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%0DlVb;o18iDcn<86%E33 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 - "stark-results", - undefined, - ); - const [_snarkResults, setSnarkResults] = useLocalStorage( - "snark-results", - undefined, - ); - const [googleUserInfos] = useLocalStorage("google-infos", undefined); - const [googleUserToken] = useLocalStorage( - "google-token", - undefined, - ); - const [error, setError] = useState(); - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user - const [snarkPollingResults, setSnarkPollingResults] = - useState(); - const [starkPollingResults, setStarkPollingResults] = - useState(); - - // this function takes care of creating the STARK session, which then returns a UUID - // we then use this UUID to create a SNARK session - // lastly, we get all the results from the STARK and SNARK sessions - // this gets around Vercel's time limit for serverless functions - function handleClick() { - if (!googleUserToken) { - console.error("JWT not found"); - return; - } - - startTransition(async () => { - try { - const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : "test", - setStarkPollingResults, - token: googleUserToken ?? "", - }); - const { snarkStatus } = await doSnarkProving({ - setSnarkPollingResults, - starkUuid, - }); - - setStarkResults(starkStatus); - setSnarkResults(snarkStatus); - } catch (error) { - console.error("Error proving:", error); - setError(error); - } - }); - } - - return address ? ( - <> - {isPending ? ( - - ) : ( - <> -

- You are about to prove that address{" "} - {address} owns the following social - account: -

- - {googleUserInfos && ( - - )} - - )} - -
- - - {starkPollingResults && starkPollingResults.length > 0 && ( - - - STARK Results{" "} - - ({starkPollingResults.at(-1)?.status}) - - - {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( - -
-
- {starkPollingResults.map((result, index) => ( - - {result.state} - - ))} -
- -
-
- )} -
- )} - - {snarkPollingResults && ( - - - SNARK Results{" "} - - ({snarkPollingResults.status}) - - - -
- This will take ~2 minutes{" "} - -
-
-
- )} - - {error && ( - - - Error {error.status} - {error.message} - - )} -
- - ) : null; -} diff --git a/zk-auth/src/app/_components/sign-in-button.tsx b/zk-auth/src/app/_components/sign-in-button.tsx deleted file mode 100644 index 3e39dcf..0000000 --- a/zk-auth/src/app/_components/sign-in-button.tsx +++ /dev/null @@ -1,37 +0,0 @@ -"use client"; - -import { GoogleLogin } from "@react-oauth/google"; -import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; -import jwtDecode from "jwt-decode"; -import { useEffect } from "react"; - -export function SignInButton() { - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage< - any | undefined - >("google-infos", undefined); - const [googleUserToken, setGoogleUserToken] = useLocalStorage< - string | undefined - >("google-token", undefined); - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user - - useEffect(() => { - if (!googleUserToken || googleUserInfos) { - return; - } - - setGoogleUserInfos(jwtDecode(googleUserToken)); - }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); - - return ( - { - if (response.credential) { - setGoogleUserToken(response.credential); - } - }} - /> - ); -} diff --git a/zk-auth/src/app/_components/snark-table.tsx b/zk-auth/src/app/_components/snark-table.tsx deleted file mode 100644 index b7d3a8b..0000000 --- a/zk-auth/src/app/_components/snark-table.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { Button } from "@risc0/ui/button"; -import { cn } from "@risc0/ui/cn"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@risc0/ui/table"; -import { DownloadIcon } from "lucide-react"; -import { capitalize, toLowerCase } from "string-ts"; - -function DownloadButton({ snarkData }) { - const handleDownload = () => { - const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(snarkData.output))}`; - const downloadAnchorNode = document.createElement("a"); - downloadAnchorNode.setAttribute("href", dataStr); - downloadAnchorNode.setAttribute( - "download", - `snark_data_${new Date().toLocaleDateString()}.json`, - ); - document.body.appendChild(downloadAnchorNode); // required for firefox - downloadAnchorNode.click(); - downloadAnchorNode.remove(); - }; - - return ( - - ); -} - -export function SnarkTable({ snarkData }) { - return ( - - - - Status - Output - - - - - - - {capitalize(toLowerCase(snarkData.status))} - - - - - - - -
- ); -} diff --git a/zk-auth/src/app/_components/stark-table.tsx b/zk-auth/src/app/_components/stark-table.tsx deleted file mode 100644 index 4e9f11d..0000000 --- a/zk-auth/src/app/_components/stark-table.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Button } from "@risc0/ui/button"; -import { cn } from "@risc0/ui/cn"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@risc0/ui/table"; -import { DownloadIcon } from "lucide-react"; -import Link from "next/link"; -import { capitalize, toLowerCase } from "string-ts"; - -export function StarkTable({ starkData }) { - const isSuccess = starkData.status === "SUCCEEDED"; - - return ( - - - - Status - {!isSuccess && ( - Error Message - )} - Stats - Elapsed Time - {isSuccess && ( - Receipt URL - )} - - - - - - - {capitalize(toLowerCase(starkData.status))} - - - {!isSuccess && {starkData.error_msg ?? "-"}} - -
- - Segments:{" "} - {starkData.stats?.segments} - - - Cycles:{" "} - {starkData.stats?.cycles} - - - Total Cycles:{" "} - {starkData.stats?.total_cycles} - -
-
- - {starkData.elapsed_time}s - - {isSuccess && ( - - - - - - )} -
-
-
- ); -} diff --git a/zk-auth/src/app/_components/user-infos.tsx b/zk-auth/src/app/_components/user-infos.tsx deleted file mode 100644 index cb3f781..0000000 --- a/zk-auth/src/app/_components/user-infos.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Alert, AlertDescription } from "@risc0/ui/alert"; - -export function UserInfos({ userInfos, type }: { userInfos; type: "google" }) { - return ( - - -

- {userInfos.name} -

-

- {userInfos.email} -

-

- {type === "google" && ( - <> - Google{" "} - Google - - )} -

-
-
- ); -} diff --git a/zk-auth/src/app/_utils/do-snark-proving.ts b/zk-auth/src/app/_utils/do-snark-proving.ts deleted file mode 100644 index d047fac..0000000 --- a/zk-auth/src/app/_utils/do-snark-proving.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { sleep } from "@risc0/ui/utils/sleep"; -import type { Dispatch, SetStateAction } from "react"; - -type SnarkSessionStatusRes = { - status: string; - // Add other properties as needed -}; - -async function bonsaiSnarkProving(uuid: string): Promise { - const response = await fetch("/api/bonsai/snark-proving", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ uuid }), - }); - - if (!response.ok) { - throw new Error("Failed to start SNARK proving"); - } - - const data = await response.json(); - - return data.uuid; -} - -async function getBonsaiSnarkStatus( - uuid: string, -): Promise { - const response = await fetch(`/api/bonsai/snark-status?uuid=${uuid}`); - - if (!response.ok) { - throw new Error("Failed to get SNARK status"); - } - - return response.json(); -} - -export async function doSnarkProving({ - starkUuid, - setSnarkPollingResults, -}: { - starkUuid: string; - setSnarkPollingResults: Dispatch< - SetStateAction - >; -}) { - const snarkUuid = await bonsaiSnarkProving(starkUuid); - - if (!snarkUuid) { - throw new Error("SNARK UUID not found"); - } - - let snarkStatus = await getBonsaiSnarkStatus(snarkUuid); - - setSnarkPollingResults(snarkStatus); - - // Poll until the session is not RUNNING - while (snarkStatus.status === "RUNNING") { - await sleep(4000); // Wait for 4 seconds - snarkStatus = await getBonsaiSnarkStatus(snarkUuid); - - setSnarkPollingResults(snarkStatus); - } - - return { snarkStatus }; -} diff --git a/zk-auth/src/app/_utils/do-stark-proving.ts b/zk-auth/src/app/_utils/do-stark-proving.ts deleted file mode 100644 index 14f7b99..0000000 --- a/zk-auth/src/app/_utils/do-stark-proving.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { sleep } from "@risc0/ui/utils/sleep"; -import isEqual from "lodash-es/isEqual"; -import type { Dispatch, SetStateAction } from "react"; - -type StarkSessionStatusRes = { - status: string; - // Add other properties as needed -}; - -async function bonsaiStarkProving({ - iss, - token, -}: { iss: "Google" | "test"; token: string }): Promise { - const response = await fetch("/api/bonsai/stark-proving", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ iss, token }), - }); - if (!response.ok) { - throw new Error("Failed to start STARK proving"); - } - - const data = await response.json(); - - return data.uuid; -} - -async function getBonsaiStarkStatus( - uuid: string, -): Promise { - const response = await fetch(`/api/bonsai/stark-status?uuid=${uuid}`); - - if (!response.ok) { - throw new Error("Failed to get STARK status"); - } - - return response.json(); -} - -export async function doStarkProving({ - iss, - token, - setStarkPollingResults, -}: { - iss: "Google" | "test"; - token: string; - setStarkPollingResults: Dispatch< - SetStateAction - >; -}) { - const starkUuid = await bonsaiStarkProving({ iss, token }); - - if (!starkUuid) { - throw new Error("STARK UUID not found"); - } - - // STARK - let starkStatus = await getBonsaiStarkStatus(starkUuid); - - setStarkPollingResults([starkStatus]); - - // Poll until the session is not RUNNING - while (starkStatus.status === "RUNNING") { - await sleep(4000); // Wait for 4 seconds - starkStatus = await getBonsaiStarkStatus(starkUuid); - - setStarkPollingResults((prevResults) => { - const lastStarkStatus = prevResults?.at(-1); - - if (!isEqual(lastStarkStatus, starkStatus)) { - return [...(prevResults ?? []), starkStatus]; - } - - return prevResults; - }); - } - - return { - starkUuid, - starkStatus, - }; -} diff --git a/zk-auth/src/app/api/bonsai/snark-proving/route.ts b/zk-auth/src/app/api/bonsai/snark-proving/route.ts index 554c133..695126b 100644 --- a/zk-auth/src/app/api/bonsai/snark-proving/route.ts +++ b/zk-auth/src/app/api/bonsai/snark-proving/route.ts @@ -1,17 +1,14 @@ -import { NextRequest, NextResponse } from "next/server"; +import { type NextRequest, NextResponse } from "next/server"; import { bonsaiSnarkProving } from "~/app/_lib/bonsai-proving"; export async function POST(request: NextRequest) { - const { uuid } = await request.json(); + const { uuid } = await request.json(); - try { - const snarkUuid = await bonsaiSnarkProving({ uuid }); + try { + const snarkUuid = await bonsaiSnarkProving({ uuid }); - return NextResponse.json({ uuid: snarkUuid }); - } catch (error) { - return NextResponse.json( - { error: "Internal Server Error" }, - { status: 500 }, - ); - } + return NextResponse.json({ uuid: snarkUuid }); + } catch (error) { + return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); + } } diff --git a/zk-auth/src/app/layout.tsx b/zk-auth/src/app/layout.tsx deleted file mode 100644 index ee6992a..0000000 --- a/zk-auth/src/app/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import "@risc0/ui/styles/globals.css"; - -import type { PropsWithChildren } from "react"; -import { Providers } from "./providers"; - -export default function RootLayout({ children }: PropsWithChildren) { - return ( - - - {children} - - - ); -} diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx deleted file mode 100644 index 250203a..0000000 --- a/zk-auth/src/app/page.tsx +++ /dev/null @@ -1,65 +0,0 @@ -"use client"; - -import { Alert, AlertDescription, AlertTitle } from "@risc0/ui/alert"; -import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; -import { useEffect, useState } from "react"; -import { ProveButton } from "./_components/prove-button"; -import { SignInButton } from "./_components/sign-in-button"; -import { SnarkTable } from "./_components/snark-table"; -import { StarkTable } from "./_components/stark-table"; - -export default function AppPage() { - const address = "0xeB4Fc761FAb7501abe8cD04b2d831a45E8913DdF"; // @todo: replace with the address of the user - const [googleUserToken] = useLocalStorage("google-token", null); - const [currentStep, setCurrentStep] = useState(1); - const [starkResults] = useLocalStorage( - "stark-results", - undefined, - ); - const [snarkResults] = useLocalStorage( - "snark-results", - undefined, - ); - - useEffect(() => { - if (!googleUserToken) { - setCurrentStep(2); - return; - } - - if (starkResults || snarkResults) { - setCurrentStep(4); - return; - } - - setCurrentStep(3); - }, [address, googleUserToken, starkResults, snarkResults]); - - console.log(currentStep); - - return currentStep === 2 ? ( - - ) : currentStep === 3 ? ( - - ) : ( - <> - {starkResults && ( - - STARK Results - - - - - )} - - {snarkResults && ( - - SNARK Results - - - - - )} - - ); -} diff --git a/zk-auth/src/app/providers.tsx b/zk-auth/src/app/providers.tsx deleted file mode 100644 index 5768bb1..0000000 --- a/zk-auth/src/app/providers.tsx +++ /dev/null @@ -1,22 +0,0 @@ -"use client"; - -import { GoogleOAuthProvider } from "@react-oauth/google"; -import { TooltipProvider } from "@risc0/ui/tooltip"; -import { ThemeProvider } from "next-themes"; -import env from "~/env"; - -export function Providers({ children }) { - return ( - - - {children} - - - ); -} diff --git a/zk-auth/tailwind.config.ts b/zk-auth/tailwind.config.ts deleted file mode 100644 index cf3dba9..0000000 --- a/zk-auth/tailwind.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import tailwindConfig from "@risc0/ui/config/tailwind.config.base"; -import deepmerge from "deepmerge"; -import type { Config } from "tailwindcss"; - -const config = deepmerge(tailwindConfig, { - theme: { - fontFamily: { - sans: ["system-ui"], - }, - }, -}) satisfies Config; - -config.content = [ - "./node_modules/@risc0/ui/**/*.{ts,tsx}", - "./src/**/*.{js,jsx,ts,tsx,mdx}", -]; - -export default config; From b2c78eeecd6ad54825786fc10217276ef9a592f0 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:23:31 -0400 Subject: [PATCH 033/110] fix: wip --- zk-auth/package/src/App.tsx | 10 +++++----- zk-auth/package/src/prove-button.tsx | 8 ++++---- zk-auth/package/src/sign-in-button.tsx | 8 +++++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx index d475cf7..fa50073 100644 --- a/zk-auth/package/src/App.tsx +++ b/zk-auth/package/src/App.tsx @@ -10,10 +10,10 @@ import { SnarkTable } from "./snark-table"; import { StarkTable } from "./stark-table"; export function App({ address }: { address: string }) { - const [googleUserToken] = useLocalStorage("google-token", null); - const [currentStep, setCurrentStep] = useState(1); - const [starkResults] = useLocalStorage("stark-results", undefined); - const [snarkResults] = useLocalStorage("snark-results", undefined); + const [googleUserToken] = useLocalStorage(`google-token-${address}`, null); + const [currentStep, setCurrentStep] = useState(1); + const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); + const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); useEffect(() => { if (!googleUserToken) { @@ -27,7 +27,7 @@ export function App({ address }: { address: string }) { } setCurrentStep(3); - }, [address, googleUserToken, starkResults, snarkResults]); + }, [googleUserToken, starkResults, snarkResults]); return ( diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 8efb27d..1cf94d1 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -13,10 +13,10 @@ import { UserInfos } from "./user-infos"; export function ProveButton({ address }: { address: string }) { const [isPending, startTransition] = useTransition(); - const [_starkResults, setStarkResults] = useLocalStorage("stark-results", undefined); - const [_snarkResults, setSnarkResults] = useLocalStorage("snark-results", undefined); - const [googleUserInfos] = useLocalStorage("google-infos", undefined); - const [googleUserToken] = useLocalStorage("google-token", undefined); + const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); + const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); + const [googleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); + const [googleUserToken] = useLocalStorage(`google-token-${address}`, undefined); const [error, setError] = useState(); const [snarkPollingResults, setSnarkPollingResults] = useState(); const [starkPollingResults, setStarkPollingResults] = useState(); diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/sign-in-button.tsx index a394195..64896f6 100644 --- a/zk-auth/package/src/sign-in-button.tsx +++ b/zk-auth/package/src/sign-in-button.tsx @@ -4,8 +4,11 @@ import jwtDecode from "jwt-decode"; import { useEffect } from "react"; export function SignInButton({ address }: { address: string }) { - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage("google-infos", undefined); - const [googleUserToken, setGoogleUserToken] = useLocalStorage("google-token", undefined); + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); + const [googleUserToken, setGoogleUserToken] = useLocalStorage( + `google-token-${address}`, + undefined, + ); useEffect(() => { if (!googleUserToken || googleUserInfos) { @@ -18,7 +21,6 @@ export function SignInButton({ address }: { address: string }) { return ( { if (response.credential) { From 5da5a9d757e0c51168276e02fa17c92671de580d Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:29:55 -0400 Subject: [PATCH 034/110] fix: wip --- zk-auth/package/README.md | 22 ++++++++++++++++++++++ zk-auth/package/risc0-zkauth-0.0.2.tgz | Bin 0 -> 85320 bytes 2 files changed, 22 insertions(+) create mode 100644 zk-auth/package/risc0-zkauth-0.0.2.tgz diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index ac9d5de..5ade98a 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -1 +1,23 @@ # zkAuth + +## In order to implement this flow you need to: + +1. Ask us to add your domain to the list of allowed domains on Google Cloud Console +2. Add the following code to your project: + +```html + + + + + + + +
+ +
+ + + + + diff --git a/zk-auth/package/risc0-zkauth-0.0.2.tgz b/zk-auth/package/risc0-zkauth-0.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..de10ab4a5ad4ac703f579481819748846d10bd7a GIT binary patch literal 85320 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
+ ); +} + +function App() { + return ( + <> +

My App

+ + + ); +} +``` diff --git a/zk-auth/package/bun.lockb b/zk-auth/package/bun.lockb index 5c3a44a56eeb281adab9938cbad665dde7af9a4f..35d635780330e1a1630abfbeffa3b342513a660d 100755 GIT binary patch delta 41220 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 a;80yM>Z;TYtgA$l@^wv$0(vXKtp5WEc=;*- diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 173d76b..bf75a99 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,12 +1,15 @@ { "name": "@risc0/zkauth", - "version": "0.0.2", + "version": "0.0.3", "private": false, "sideEffects": false, + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", "type": "module", "files": ["dist"], "scripts": { - "build": "tsc -b && vite build", + "build": "tsc -b && vite build && tsup src/index.ts --format esm --dts --external react,react-dom --outDir dist/react", "dev": "vite --port 3000", "package": "bun run build && rm dist/index.html && npm pack", "preview": "vite preview" @@ -14,16 +17,20 @@ "devDependencies": { "@react-oauth/google": "0.12.1", "@risc0/ui": "0.0.168", - "@types/react": "18.3.3", - "@types/react-dom": "18.3.0", + "@types/react": "^18", + "@types/react-dom": "^18", "@vitejs/plugin-react-swc": "3.5.0", "globals": "15.9.0", - "react": "19.0.0-rc-f2df5694-20240916", - "react-dom": "19.0.0-rc-f2df5694-20240916", + "react": "^18", + "react-dom": "^18", "string-ts": "2.2.0", + "tsup": "8.3.0", "typescript": "5.5.3", "vite": "5.4.1" }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, "publishConfig": { "access": "public" } diff --git a/zk-auth/package/risc0-zkauth-0.0.2.tgz b/zk-auth/package/risc0-zkauth-0.0.2.tgz index de10ab4a5ad4ac703f579481819748846d10bd7a..9770cce9dab4d575b9a20d2c6b8b79672247d490 100644 GIT binary patch delta 14592 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 delta 14256 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
1&`7#7( zlq@w!C38qAf0$vDg$Vy2HEo0Sp39~G+xRWvhjb03ct?|lCYQu5i|E=W!FB$JnSA< z5t-`X40AZ{-mLJd?}- diff --git a/zk-auth/package/risc0-zkauth-0.0.3.tgz b/zk-auth/package/risc0-zkauth-0.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..99a24c28e440bebf154957a58303b72c4e4f4961 GIT binary patch literal 85656 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 literal 0 HcmV?d00001 diff --git a/zk-auth/package/src/App.tsx b/zk-auth/package/src/App.tsx index fa50073..1004736 100644 --- a/zk-auth/package/src/App.tsx +++ b/zk-auth/package/src/App.tsx @@ -6,6 +6,7 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useEffect, useState } from "react"; import { ProveButton } from "./prove-button"; import { SignInButton } from "./sign-in-button"; +import { SignOutButton } from "./sign-out-button"; import { SnarkTable } from "./snark-table"; import { StarkTable } from "./stark-table"; @@ -31,6 +32,8 @@ export function App({ address }: { address: string }) { return ( + + {currentStep === 2 ? ( ) : currentStep === 3 ? ( diff --git a/zk-auth/package/src/index.ts b/zk-auth/package/src/index.ts new file mode 100644 index 0000000..5e46f65 --- /dev/null +++ b/zk-auth/package/src/index.ts @@ -0,0 +1,15 @@ +import "@risc0/zkauth/dist/index.css"; +import { useEffect } from "react"; + +export function useZkAuth() { + useEffect(() => { + const script = document.createElement("script"); + script.src = "https://unpkg.com/@risc0/zkauth@latest/dist/index.js"; + script.async = true; + document.body.appendChild(script); + + return () => { + document.body.removeChild(script); + }; + }, []); +} diff --git a/zk-auth/package/src/sign-out-button.tsx b/zk-auth/package/src/sign-out-button.tsx new file mode 100644 index 0000000..2547124 --- /dev/null +++ b/zk-auth/package/src/sign-out-button.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { Button } from "@risc0/ui/button"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { LogOutIcon } from "lucide-react"; + +export function SignOutButton({ address }: { address: string }) { + const [_googleUserToken, setGoogleUserToken] = useLocalStorage(`google-token-${address}`, undefined); + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); + + function signOut() { + setGoogleUserToken(undefined); + setGoogleUserInfos(undefined); + } + + if (!address || !googleUserInfos) { + return null; + } + + return ( + + ); +} From 1ec1b26ae3e2d3e981a968bd7c2b404d976d7cfc Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:54:38 -0400 Subject: [PATCH 037/110] fix: demo react --- zk-auth/package/README.md | 1 + zk-auth/package/package.json | 2 +- zk-auth/package/src/index.ts | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 4c92407..b6bc3e7 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -38,6 +38,7 @@ npm install @risc0/zkauth ### Usage ```tsx +import "@risc0/zkauth/dist/index.css"; // load the zkAuth stylesheet import { useZkAuth } from "@risc0/zkauth/react"; function ZkAuth({ address }: { address: string }) { diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index bf75a99..6a03b6b 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.3", + "version": "0.0.4", "private": false, "sideEffects": false, "main": "dist/index.js", diff --git a/zk-auth/package/src/index.ts b/zk-auth/package/src/index.ts index 5e46f65..e21df08 100644 --- a/zk-auth/package/src/index.ts +++ b/zk-auth/package/src/index.ts @@ -1,4 +1,3 @@ -import "@risc0/zkauth/dist/index.css"; import { useEffect } from "react"; export function useZkAuth() { From e8a0d600d015bab00f63b3b21a2d49a7d4d6e383 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:57:02 -0400 Subject: [PATCH 038/110] fix: demo react --- zk-auth/.gitignore | 1 + zk-auth/package/README.md | 14 ++++---------- zk-auth/package/package.json | 1 + zk-auth/package/risc0-zkauth-0.0.2.tgz | Bin 85656 -> 0 bytes zk-auth/package/risc0-zkauth-0.0.3.tgz | Bin 85656 -> 0 bytes 5 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 zk-auth/package/risc0-zkauth-0.0.2.tgz delete mode 100644 zk-auth/package/risc0-zkauth-0.0.3.tgz diff --git a/zk-auth/.gitignore b/zk-auth/.gitignore index c8a7336..3184a00 100644 --- a/zk-auth/.gitignore +++ b/zk-auth/.gitignore @@ -1,2 +1,3 @@ .vercel .env*.local +*.tgz diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index b6bc3e7..1f1411a 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -5,7 +5,7 @@ 1. Ask us to add your domain to the list of allowed domains on Google Cloud Console 2. Integrate the following code to your project: -#### HTML Example: +##### HTML Example: ```html @@ -27,7 +27,7 @@ --- -#### React Example: +##### React Example: ### Install @@ -41,19 +41,13 @@ npm install @risc0/zkauth import "@risc0/zkauth/dist/index.css"; // load the zkAuth stylesheet import { useZkAuth } from "@risc0/zkauth/react"; -function ZkAuth({ address }: { address: string }) { +function App() { useZkAuth(); - return ( -
- ); -} - -function App() { return ( <>

My App

- +
); } diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 6a03b6b..98b533a 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -2,6 +2,7 @@ "name": "@risc0/zkauth", "version": "0.0.4", "private": false, + "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, "main": "dist/index.js", "module": "dist/index.js", diff --git a/zk-auth/package/risc0-zkauth-0.0.2.tgz b/zk-auth/package/risc0-zkauth-0.0.2.tgz deleted file mode 100644 index 9770cce9dab4d575b9a20d2c6b8b79672247d490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85656 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 diff --git a/zk-auth/package/risc0-zkauth-0.0.3.tgz b/zk-auth/package/risc0-zkauth-0.0.3.tgz deleted file mode 100644 index 99a24c28e440bebf154957a58303b72c4e4f4961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85656 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 From 44b889d307c260667944bb2b74e74df04827b807 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:00:16 -0400 Subject: [PATCH 039/110] fix: demo react --- zk-auth/package/package.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 98b533a..1ef3c1d 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -9,6 +9,18 @@ "types": "dist/index.d.ts", "type": "module", "files": ["dist"], + "exports": { + ".": { + "import": "./dist/react/index.js", + "require": "./dist/react/index.js", + "types": "./dist/react/index.d.ts" + }, + "./react": { + "import": "./dist/react/index.js", + "require": "./dist/react/index.js", + "types": "./dist/react/index.d.ts" + } + }, "scripts": { "build": "tsc -b && vite build && tsup src/index.ts --format esm --dts --external react,react-dom --outDir dist/react", "dev": "vite --port 3000", From 02ccb5bce2116eaeca01b2a1e4ded18508ed5768 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:01:40 -0400 Subject: [PATCH 040/110] fix: demo react2 --- zk-auth/package/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 1ef3c1d..8554ee4 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.4", + "version": "0.0.5", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, @@ -11,14 +11,14 @@ "files": ["dist"], "exports": { ".": { + "types": "./dist/react/index.d.ts", "import": "./dist/react/index.js", - "require": "./dist/react/index.js", - "types": "./dist/react/index.d.ts" + "require": "./dist/react/index.js" }, "./react": { + "types": "./dist/react/index.d.ts", "import": "./dist/react/index.js", - "require": "./dist/react/index.js", - "types": "./dist/react/index.d.ts" + "require": "./dist/react/index.js" } }, "scripts": { From 69714556c543df08b67ebfc997305d14792f3933 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:15:34 -0400 Subject: [PATCH 041/110] fix: demo react3 --- zk-auth/package/package.json | 25 +++++++++++++------------ zk-auth/package/src/index.ts | 2 ++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 8554ee4..b1e7d04 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,28 +1,29 @@ { "name": "@risc0/zkauth", - "version": "0.0.5", + "version": "0.0.6", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, - "main": "dist/index.js", - "module": "dist/index.js", - "types": "dist/index.d.ts", - "type": "module", - "files": ["dist"], + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", "exports": { ".": { - "types": "./dist/react/index.d.ts", - "import": "./dist/react/index.js", - "require": "./dist/react/index.js" + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./react": { "types": "./dist/react/index.d.ts", - "import": "./dist/react/index.js", + "import": "./dist/react/index.mjs", "require": "./dist/react/index.js" - } + }, + "./dist/index.css": "./dist/index.css" }, + "type": "module", + "files": ["dist"], "scripts": { - "build": "tsc -b && vite build && tsup src/index.ts --format esm --dts --external react,react-dom --outDir dist/react", + "build": "tsc -b && vite build && tsup src/index.ts --format cjs,esm --dts --external react,react-dom --outDir dist/react", "dev": "vite --port 3000", "package": "bun run build && rm dist/index.html && npm pack", "preview": "vite preview" diff --git a/zk-auth/package/src/index.ts b/zk-auth/package/src/index.ts index e21df08..38feab3 100644 --- a/zk-auth/package/src/index.ts +++ b/zk-auth/package/src/index.ts @@ -5,6 +5,8 @@ export function useZkAuth() { const script = document.createElement("script"); script.src = "https://unpkg.com/@risc0/zkauth@latest/dist/index.js"; script.async = true; + script.type = "module"; + script.crossOrigin = "anonymous"; document.body.appendChild(script); return () => { From 399b6a96d7a075a986421c549876a6cb856a0304 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:16:45 -0400 Subject: [PATCH 042/110] fix: demo react4 --- zk-auth/package/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index b1e7d04..e19e461 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,21 +1,21 @@ { "name": "@risc0/zkauth", - "version": "0.0.6", + "version": "0.0.7", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, "main": "./dist/index.js", - "module": "./dist/index.mjs", + "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", + "import": "./dist/index.js", "require": "./dist/index.js" }, "./react": { "types": "./dist/react/index.d.ts", - "import": "./dist/react/index.mjs", + "import": "./dist/react/index.js", "require": "./dist/react/index.js" }, "./dist/index.css": "./dist/index.css" @@ -23,7 +23,7 @@ "type": "module", "files": ["dist"], "scripts": { - "build": "tsc -b && vite build && tsup src/index.ts --format cjs,esm --dts --external react,react-dom --outDir dist/react", + "build": "tsc -b && vite build && tsup src/index.ts --format esm --dts --external react,react-dom --outDir dist/react", "dev": "vite --port 3000", "package": "bun run build && rm dist/index.html && npm pack", "preview": "vite preview" From 901af02463887e5031c2c03d0c345f4cad6f537c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:17:45 -0400 Subject: [PATCH 043/110] fix: demo react5 --- zk-auth/package/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index e19e461..a6fa6b5 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.7", + "version": "0.0.8", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, @@ -18,7 +18,7 @@ "import": "./dist/react/index.js", "require": "./dist/react/index.js" }, - "./dist/index.css": "./dist/index.css" + "./index.css": "./dist/index.css" }, "type": "module", "files": ["dist"], From be8dec5a4d98a028f36b9a1b0a3287e3ea0ff499 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 16:25:58 -0400 Subject: [PATCH 044/110] fix: demo react6 --- zk-auth/package/README.md | 6 ++-- zk-auth/package/src/prove-button.tsx | 52 +++++++++++++++------------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 1f1411a..e9677b2 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -29,13 +29,15 @@ ##### React Example: -### Install +### 1. Install ```bash npm install @risc0/zkauth ``` -### Usage +### 2. For local development, make sure you are using port 3000 + +### 3. Usage ```tsx import "@risc0/zkauth/dist/index.css"; // load the zkAuth stylesheet diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 1cf94d1..e3a82f4 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -6,13 +6,12 @@ import { cn } from "@risc0/ui/cn"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { Loader } from "@risc0/ui/loader"; import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; -import { useState, useTransition } from "react"; +import { useState } from "react"; import { doSnarkProving } from "./do-snark-proving"; import { doStarkProving } from "./do-stark-proving"; import { UserInfos } from "./user-infos"; export function ProveButton({ address }: { address: string }) { - const [isPending, startTransition] = useTransition(); const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); const [googleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); @@ -20,42 +19,45 @@ export function ProveButton({ address }: { address: string }) { const [error, setError] = useState(); const [snarkPollingResults, setSnarkPollingResults] = useState(); const [starkPollingResults, setStarkPollingResults] = useState(); + const [isLoading, setIsLoading] = useState(false); // this function takes care of creating the STARK session, which then returns a UUID // we then use this UUID to create a SNARK session // lastly, we get all the results from the STARK and SNARK sessions // this gets around Vercel's time limit for serverless functions - function handleClick() { + async function handleClick() { if (!googleUserToken) { console.error("JWT not found"); return; } - //@ts-expect-error idk why this is not working - startTransition(async () => { - try { - const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : "test", - setStarkPollingResults, - token: googleUserToken ?? "", - }); - const { snarkStatus } = await doSnarkProving({ - setSnarkPollingResults, - starkUuid, - }); + setError(null); + setIsLoading(true); - setStarkResults(starkStatus); - setSnarkResults(snarkStatus); - } catch (error) { - console.error("Error proving:", error); - setError(error); - } - }); + try { + const { starkUuid, starkStatus } = await doStarkProving({ + iss: googleUserInfos ? "Google" : "test", + setStarkPollingResults, + token: googleUserToken ?? "", + }); + const { snarkStatus } = await doSnarkProving({ + setSnarkPollingResults, + starkUuid, + }); + + setStarkResults(starkStatus); + setSnarkResults(snarkStatus); + } catch (error) { + console.error("Error proving:", error); + setError(error); + } finally { + setIsLoading(false); + } } return address ? ( <> - {isPending ? ( + {isLoading ? ( - ); -} diff --git a/zk-auth/package/src/index.ts b/zk-auth/package/src/index.ts deleted file mode 100644 index 38feab3..0000000 --- a/zk-auth/package/src/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { useEffect } from "react"; - -export function useZkAuth() { - useEffect(() => { - const script = document.createElement("script"); - script.src = "https://unpkg.com/@risc0/zkauth@latest/dist/index.js"; - script.async = true; - script.type = "module"; - script.crossOrigin = "anonymous"; - document.body.appendChild(script); - - return () => { - document.body.removeChild(script); - }; - }, []); -} diff --git a/zk-auth/package/src/main.tsx b/zk-auth/package/src/main.tsx index 966ca64..80a8819 100644 --- a/zk-auth/package/src/main.tsx +++ b/zk-auth/package/src/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App.tsx"; +import { ZkAuth } from "./zk-auth"; const container = document.getElementById("zkauth"); @@ -18,6 +18,6 @@ if (!address) { createRoot(container).render( - + , ); diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index f5fea51..f3a555f 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -62,9 +62,14 @@ export function ProveButton({ address }: { address: string }) { /> ) : ( <> -

- You are about to prove that address {address} owns the following social - account: +

+ You are about to prove that address +
+ + {address} + +
+ owns the following social account:

{googleUserInfos && } @@ -80,14 +85,8 @@ export function ProveButton({ address }: { address: string }) { className="flex w-full flex-row items-center gap-1.5" disabled={!!error || isLoading} > - Prove with{" "} - bonsai logo + {isLoading ? "Proving" : "Prove"} with{" "} + bonsai logo {starkPollingResults && starkPollingResults.length > 0 && ( @@ -97,15 +96,15 @@ export function ProveButton({ address }: { address: string }) { ({starkPollingResults.at(-1)?.status}) {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( - +
{starkPollingResults.map((result: any, index: any) => ( @@ -127,16 +126,16 @@ export function ProveButton({ address }: { address: string }) { SNARK Results{" "} ({snarkPollingResults.status}) - +
- This will take ~2 minutes + This will take around 2 minutes
diff --git a/zk-auth/package/src/sign-out-button.tsx b/zk-auth/package/src/sign-out-button.tsx index 2547124..096bf07 100644 --- a/zk-auth/package/src/sign-out-button.tsx +++ b/zk-auth/package/src/sign-out-button.tsx @@ -14,12 +14,12 @@ export function SignOutButton({ address }: { address: string }) { } if (!address || !googleUserInfos) { - return null; + return
; } return ( - ); } diff --git a/zk-auth/package/src/snark-table.tsx b/zk-auth/package/src/snark-table.tsx deleted file mode 100644 index 38ad44f..0000000 --- a/zk-auth/package/src/snark-table.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { cn } from "@risc0/ui/cn"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@risc0/ui/table"; -import { capitalize, toLowerCase } from "string-ts"; -import { DownloadButton } from "./download-button"; - -export function SnarkTable({ snarkData }: any) { - return ( - - - - Status - Output - - - - - - - {capitalize(toLowerCase(snarkData.status))} - - - - - - - -
- ); -} diff --git a/zk-auth/package/src/stark-table.tsx b/zk-auth/package/src/stark-table.tsx deleted file mode 100644 index d4c2119..0000000 --- a/zk-auth/package/src/stark-table.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Button } from "@risc0/ui/button"; -import { cn } from "@risc0/ui/cn"; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@risc0/ui/table"; -import { DownloadIcon } from "lucide-react"; -import { capitalize, toLowerCase } from "string-ts"; - -export function StarkTable({ starkData }: any) { - const isSuccess = starkData.status === "SUCCEEDED"; - - return ( - - - - Status - {!isSuccess && Error Message} - Stats - Elapsed Time - {isSuccess && Receipt URL} - - - - - - - {capitalize(toLowerCase(starkData.status))} - - - {!isSuccess && {starkData.error_msg ?? "-"}} - -
- - Segments: {starkData.stats?.segments} - - - Cycles: {starkData.stats?.cycles} - - - Total Cycles: {starkData.stats?.total_cycles} - -
-
- {starkData.elapsed_time}s - {isSuccess && ( - - - - - - )} -
-
-
- ); -} diff --git a/zk-auth/package/src/index.css b/zk-auth/package/src/style.css similarity index 81% rename from zk-auth/package/src/index.css rename to zk-auth/package/src/style.css index 10ba01c..3e2ae79 100644 --- a/zk-auth/package/src/index.css +++ b/zk-auth/package/src/style.css @@ -41,27 +41,10 @@ @apply tracking-wide; } -html { - @apply scroll-smooth; -} - -code { - @apply !font-mono; -} - table { width: 100%; } -a { - @apply focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring -} - -.font-mono { - /* reset the `tracking-wide` on the monospace font */ - letter-spacing: initial; -} - .lucide { stroke-width: 1.5px!important; } diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index 906abb3..6cac78d 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -2,7 +2,14 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function UserInfos({ userInfos, type }: { userInfos: any; type: "google" }) { return ( - + + {userInfos.name}

{userInfos.name} @@ -10,10 +17,11 @@ export function UserInfos({ userInfos, type }: { userInfos: any; type: "google"

{userInfos.email}

-

+

{type === "google" && ( <> - Google Google + Google + Google )}

diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx new file mode 100644 index 0000000..0b68668 --- /dev/null +++ b/zk-auth/package/src/zk-auth.tsx @@ -0,0 +1,68 @@ +import "./style.css"; + +import { GoogleOAuthProvider } from "@react-oauth/google"; +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { useEffect, useState } from "react"; +import { ProveButton } from "./prove-button"; +import { SignInButton } from "./sign-in-button"; +import { SignOutButton } from "./sign-out-button"; + +export type ZkAuthProps = { + address: string; + onStarkComplete?: (starkResults: any) => void; + onSnarkComplete?: (snarkResults: any) => void; +}; + +export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { + const [googleUserToken] = useLocalStorage(`google-token-${address}`, null); + const [currentStep, setCurrentStep] = useState(1); + const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); + const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); + + useEffect(() => { + if (!googleUserToken) { + setCurrentStep(2); + return; + } + + if (starkResults || snarkResults) { + setCurrentStep(4); + return; + } + + setCurrentStep(3); + }, [googleUserToken, starkResults, snarkResults]); + + useEffect(() => { + if (starkResults && onStarkComplete) { + onStarkComplete(starkResults); + } + }, [starkResults, onStarkComplete]); + + useEffect(() => { + if (snarkResults && onSnarkComplete) { + onSnarkComplete(snarkResults); + } + }, [snarkResults, onSnarkComplete]); + + return ( + +
+
+

zkAuth

+ +
+ +
+ {currentStep === 2 ? ( + + ) : currentStep === 3 ? ( + + ) : ( + <>Proving complete + )} +
+
+
+ ); +} diff --git a/zk-auth/package/tailwind.config.ts b/zk-auth/package/tailwind.config.ts index 70dd55b..7c75b1d 100644 --- a/zk-auth/package/tailwind.config.ts +++ b/zk-auth/package/tailwind.config.ts @@ -6,7 +6,6 @@ const config = deepmerge(tailwindConfig, { theme: { fontFamily: { sans: ["var(--font-europa-sans)", "system-ui"], - mono: ["var(--font-jetbrains-mono)"], }, }, }) satisfies Config; diff --git a/zk-auth/package/tsconfig.app.json b/zk-auth/package/tsconfig.app.json deleted file mode 100644 index f0a2350..0000000 --- a/zk-auth/package/tsconfig.app.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/zk-auth/package/tsconfig.json b/zk-auth/package/tsconfig.json index d32ff68..dbaa9ba 100644 --- a/zk-auth/package/tsconfig.json +++ b/zk-auth/package/tsconfig.json @@ -1,4 +1,13 @@ { - "files": [], - "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] + "extends": "@risc0/ui/config/tsconfig.base.json", + "compilerOptions": { + /* Path Aliases */ + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "types": ["node", "vite/client"] + }, + "include": ["src", "vite.config.ts"], + "exclude": ["node_modules"] } diff --git a/zk-auth/package/tsconfig.node.json b/zk-auth/package/tsconfig.node.json deleted file mode 100644 index 0d3d714..0000000 --- a/zk-auth/package/tsconfig.node.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["vite.config.ts"] -} diff --git a/zk-auth/package/tsconfig.tsbuildinfo b/zk-auth/package/tsconfig.tsbuildinfo new file mode 100644 index 0000000..06a870d --- /dev/null +++ b/zk-auth/package/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./node_modules/tailwindcss-animate/index.d.ts","./node_modules/@risc0/ui/config/tailwind.config.base.ts","../node_modules/deepmerge/index.d.ts","./tailwind.config.ts","./node_modules/@swc/types/index.ts","./node_modules/@swc/core/binding.d.ts","./node_modules/@swc/core/spack.d.ts","./node_modules/@swc/core/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/types.d-agj9qkwt.d.ts","./node_modules/vite/node_modules/esbuild/lib/main.d.ts","./node_modules/vite/dist/node/runtime.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react-swc/index.d.ts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/@microsoft/tsdoc/lib-commonjs/beta/declarationreference.d.ts","./node_modules/@microsoft/tsdoc/lib/details/standardization.d.ts","./node_modules/@microsoft/tsdoc/lib/configuration/tsdoctagdefinition.d.ts","./node_modules/@microsoft/tsdoc/lib/configuration/tsdocvalidationconfiguration.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/tsdocmessageid.d.ts","./node_modules/@microsoft/tsdoc/lib/configuration/tsdocconfiguration.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docnode.d.ts","./node_modules/@microsoft/tsdoc/lib/configuration/docnodemanager.d.ts","./node_modules/@microsoft/tsdoc/lib/details/standardtags.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/textrange.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/token.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docnodecontainer.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docsection.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docblock.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/doccodespan.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docmemberidentifier.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docmembersymbol.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docmemberselector.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docmemberreference.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docdeclarationreference.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docinlinetagbase.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docinheritdoctag.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docparamblock.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docparamcollection.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/doccomment.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docerrortext.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docescapedtext.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docexcerpt.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docfencedcode.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/dochtmlattribute.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/dochtmlendtag.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/dochtmlstarttag.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docinlinetag.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/doclinktag.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docparagraph.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docplaintext.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docsoftbreak.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/index.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/parsermessage.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/parsermessagelog.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/parsercontext.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/tokensequence.d.ts","./node_modules/@microsoft/tsdoc/lib/nodes/docblocktag.d.ts","./node_modules/@microsoft/tsdoc/lib/details/modifiertagset.d.ts","./node_modules/@microsoft/tsdoc/lib/details/standardmodifiertagset.d.ts","./node_modules/@microsoft/tsdoc/lib/emitters/plaintextemitter.d.ts","./node_modules/@microsoft/tsdoc/lib/emitters/stringbuilder.d.ts","./node_modules/@microsoft/tsdoc/lib/emitters/tsdocemitter.d.ts","./node_modules/@microsoft/tsdoc/lib/parser/tsdocparser.d.ts","./node_modules/@microsoft/tsdoc/lib/transforms/docnodetransforms.d.ts","./node_modules/@microsoft/tsdoc/lib/index.d.ts","./node_modules/@rushstack/node-core-library/dist/node-core-library.d.ts","./node_modules/@microsoft/api-extractor-model/dist/rollup.d.ts","./node_modules/@rushstack/rig-package/dist/rig-package.d.ts","./node_modules/@microsoft/tsdoc-config/lib/tsdocconfigfile.d.ts","./node_modules/@microsoft/tsdoc-config/lib/index.d.ts","./node_modules/@microsoft/api-extractor/dist/rollup.d.ts","./node_modules/vite-plugin-dts/dist/index.d.ts","./vite.config.ts","./dist/tailwind.config.d.ts","./dist/vite.config.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./dist/src/zk-auth.d.ts","./dist/src/index.d.ts","./dist/zk-auth.d.ts","./dist/src/do-snark-proving.d.ts","./dist/src/do-stark-proving.d.ts","./dist/src/main.d.ts","./dist/src/prove-button.d.ts","./dist/src/sign-in-button.d.ts","./dist/src/sign-out-button.d.ts","./dist/src/user-infos.d.ts","./node_modules/@risc0/ui/utils/sleep.ts","./src/do-snark-proving.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/@types/lodash-es/isequal.d.ts","./src/do-stark-proving.ts","./node_modules/@react-oauth/google/dist/index.d.ts","./node_modules/radash/dist/index.d.ts","./node_modules/@risc0/ui/utils/parse-json.ts","./node_modules/@risc0/ui/hooks/use-event-listener.ts","./node_modules/@risc0/ui/hooks/use-local-storage.ts","./node_modules/class-variance-authority/node_modules/clsx/clsx.d.mts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./node_modules/@risc0/ui/cn.ts","./node_modules/@risc0/ui/alert.tsx","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/@radix-ui/react-slot/dist/index.d.mts","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/@risc0/ui/button.tsx","./node_modules/@risc0/ui/loader.tsx","./src/user-infos.tsx","./src/prove-button.tsx","../node_modules/jwt-decode/index.d.ts","./src/sign-in-button.tsx","./src/sign-out-button.tsx","./src/zk-auth.tsx","./src/index.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./src/vite-env.d.ts","./node_modules/@types/react-dom/node_modules/@types/react/index.d.ts","./node_modules/@types/react-dom/client.d.ts","./src/main.tsx","./node_modules/@types/react-dom/node_modules/@types/react/global.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"4af6b0c727b7a2896463d512fafd23634229adf69ac7c00e2ae15a09cb084fad","affectsGlobalScope":true},{"version":"9c00a480825408b6a24c63c1b71362232927247595d7c97659bc24dc68ae0757","affectsGlobalScope":true},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","4d979e3c12ffb6497d2b1dc5613130196d986fff764c4526360c0716a162e7e7","e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","80781460eca408fe8d2937d9fdbbb780d6aac35f549621e6200c9bee1da5b8fe","4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","b9261ac3e9944d3d72c5ee4cf888ad35d9743a5563405c6963c4e43ee3708ca4","c84fd54e8400def0d1ef1569cafd02e9f39a622df9fa69b57ccc82128856b916","a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","2ed6489ef46eb61442d067c08e87e3db501c0bfb2837eee4041a27bf3e792bb0","644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","d60fe6d59d4e19ecc65359490b8535e359ca4b760d2cdb56897ca75d09d41ba3","f45a2a8b1777ecb50ed65e1a04bb899d4b676529b7921bd5d69b08573a00c832","774b783046ba3d473948132d28a69f52a295b2f378f2939304118ba571b1355e","b5734e05c787a40e4f9efe71f16683c5f7dc3bdb0de7c04440c855bd000f8fa7","14ba97f0907144771331e1349fdccb5a13526eba0647e6b447e572376d811b6f","2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","7165050eddaed878c2d2cd3cafcaf171072ac39e586a048c0603712b5555f536","26e629be9bbd94ea1d465af83ce5a3306890520695f07be6eb016f8d734d02be","b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","8e59152220eb6d209371f0c6c4347a2350d8a6be6f4821bb2de8263519c89a8f","c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","9688c89e52b4dc1fb91afed9017d78610f3363bef61904c6c17e49afb969fe7a","3aff6a56cd9aa945209d704c34add6caf5778f207a4a55442b9a69611e504a69","146ba4b99c5feb82663e17a671bf9f53bb39c704cd76345d6c5a801c26372f44","248df5a96cf158deb7ee323d8e1a25d45c4647630b3e10b69959df13f210c955","1ced5ce659651b9df8d9713ceea4dd79cf6ded3a6f74c7e0770d90ef29e777c6","8b71e015a992936d5c84bec8a79acd261aea0930bad4a42903342dcd96147cae","136ac2fb228b2c64ad2d039eb4de311212505a20a91b9ba632bd6cfdc3b4126f","be751f201cb4f18ce9984c0a38fcfba66164d6509ee48e4950f6a0285c53be5e","e142fda89ed689ea53d6f2c93693898464c7d29a0ae71c6dc8cdfe5a1d76c775","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107",{"version":"964f307d249df0d7e8eb16d594536c0ac6cc63c8d467edf635d05542821dec8e","affectsGlobalScope":true},"db3ec8993b7596a4ef47f309c7b25ee2505b519c13050424d9c34701e5973315",{"version":"6a1ebd564896d530364f67b3257c62555b61d60494a73dfe8893274878c6589d","affectsGlobalScope":true},"af49b066a76ce26673fe49d1885cc6b44153f1071ed2d952f2a90fccba1095c9","f22fd1dc2df53eaf5ce0ff9e0a3326fc66f880d6a652210d50563ae72625455f",{"version":"3ddbdb519e87a7827c4f0c4007013f3628ca0ebb9e2b018cf31e5b2f61c593f1","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"6d498d4fd8036ea02a4edcae10375854a0eb1df0496cf0b9d692577d3c0fd603","affectsGlobalScope":true},"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","fd09b892597ab93e7f79745ce725a3aaf6dd005e8db20f0c63a5d10984cba328","a3be878ff1e1964ab2dc8e0a3b67087cf838731c7f3d8f603337e7b712fdd558","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","9be74296ee565af0c12d7071541fdd23260f53c3da7731fb6361f61150a791f6",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"f501a53b94ba382d9ba396a5c486969a3abc68309828fa67f916035f5d37fe2b","affectsGlobalScope":true},"aa658b5d765f630c312ac9202d110bbaf2b82d180376457f0a9d57b42629714a","312ac7cbd070107766a9886fd27f9faad997ef57d93fdfb4095df2c618ac8162","2e9b4e7f9942af902eb85bae6066d04ef1afee51d61554a62d144df3da7dec94","672ad3045f329e94002256f8ed460cfd06173a50c92cde41edaadfacffd16808","64da4965d1e0559e134d9c1621ae400279a216f87ed00c4cce4f2c7c78021712","2205527b976f4f1844adc46a3f0528729fb68cac70027a5fb13c49ca23593797",{"version":"0166fce1204d520fdfd6b5febb3cda3deee438bcbf8ce9ffeb2b1bcde7155346","affectsGlobalScope":true},"d8b13eab85b532285031b06a971fa051bf0175d8fff68065a24a6da9c1c986cf","50c382ba1827988c59aa9cc9d046e386d55d70f762e9e352e95ee8cb7337cdb8","bb9627ab9d078c79bb5623de4ac8e5d08f806ec9b970962dfc83b3211373690d",{"version":"21d7e87f271e72d02f8d167edc902f90b04525edc7918f00f01dd0bd00599f7e","affectsGlobalScope":true},{"version":"6f6abdaf8764ef01a552a958f45e795b5e79153b87ddad3af5264b86d2681b72","affectsGlobalScope":true},"a215554477f7629e3dcbc8cde104bec036b78673650272f5ffdc5a2cee399a0a","c3497fc242aabfedcd430b5932412f94f157b5906568e737f6a18cc77b36a954","cdc1de3b672f9ef03ff15c443aa1b631edca35b6ae6970a7da6400647ff74d95","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","bf01fdd3b93cf633b3f7420718457af19c57ab8cbfea49268df60bae2e84d627","15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","5f461d6f5d9ff474f1121cc3fd86aa3cd67476c701f55c306d323c5112201207","65b39cc6b610a4a4aecc321f6efb436f10c0509d686124795b4c36a5e915b89e","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633",{"version":"83fe38aa2243059ea859325c006da3964ead69b773429fe049ebb0426e75424d","affectsGlobalScope":true},"d3edb86744e2c19f2c1503849ac7594a5e06024f2451bacae032390f2e20314a",{"version":"e501cbca25bd54f0bcb89c00f092d3cae227e970b93fd76207287fd8110b123d","affectsGlobalScope":true},{"version":"8a3e61347b8f80aa5af532094498bceb0c0b257b25a6aa8ab4880fd6ed57c95a","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","950f6810f7c80e0cffefcf1bcc6ade3485c94394720e334c3c2be3c16b6922fb","5475df7cfc493a08483c9d7aa61cc04791aecba9d0a2efc213f23c4006d4d3cd","000720870b275764c65e9f28ac97cc9e4d9e4a36942d4750ca8603e416e9c57c",{"version":"54412c70bacb9ed547ed6caae8836f712a83ccf58d94466f3387447ec4e82dc3","affectsGlobalScope":true},{"version":"8701e60428b700ed0206c805d702cfb2a7b4b0b76423439451d1018fa70610e4","affectsGlobalScope":true},"4c48e931a72f6971b5add7fdb1136be1d617f124594e94595f7114af749395e0","478eb5c32250678a906d91e0529c70243fc4d75477a08f3da408e2615396f558","e686a88c9ee004c8ba12ffc9d674ca3192a4c50ed0ca6bd5b2825c289e2b2bfe",{"version":"0d27932df2fbc3728e78b98892540e24084424ce12d3bd32f62a23cf307f411f","affectsGlobalScope":true},"4423fb3d6abe6eefb8d7f79eb2df9510824a216ec1c6feee46718c9b18e6d89f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"01c47d1c006b3a15b51d89d7764fff7e4fabc4e412b3a61ee5357bd74b822879","ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea",{"version":"297357003eaebc557bc00920d14a1296f5191e0ba44e768499b33f59a738e615","affectsGlobalScope":true},"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","8b96046bf5fb0a815cba6b0880d9f97b7f3a93cf187e8dcfe8e2792e97f38f87",{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true},"82e687ebd99518bc63ea04b0c3810fb6e50aa6942decd0ca6f7a56d9b9a212a6","7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","9ae0ca65717af0d3b554a26fd333ad9c78ad3910ad4b22140ff02acb63076927","d294c49571f1b75f75479227e33d6f2fd2326302bce5f9f4dff0c719819dbfdc","8eb142d9d0e29220c562296bdbed6b2c228df84589ce5d0c74ed7c333c1ba6cd","c76ef0e395f9a0f897b8911be953ca3099c59a1e7fd4cdd727389c83de55a99b","9f706fec5e44b5498bd6498c920137abacf6bb59442510e2f36135194adbda50","fc953ba36f518eb973156ae6b6ccc0f9172e6f69c2e24299b2cf4ba184b2f3cd","5bb43fb4160f799f08d8a169a6b74ba04cbdab6dbc9d5889b11df0fd0a1cc37d","0a9b34d41f06ca0707200e74ab563190a0f3bcf57e250b63fd0bd12b035bc68e","5dd4f3e00d2a857f622c4dcbbc2f34e8059db05b58e06e330ff8e4849248d588","842c861cf4ac6c43ad74fb0af9838c14f43f7689cecda454e0a549177e5e6591","110829306422e9ca3c6c28f4778004578afa43f2ec48fd477f4937f77d00ed89","06401c590494ee3b3a52ee3a31d8f63a997a1df9eeb70ac9cdce58b0a166959b","f409abec25c2a03294cf9cd419e73ff67ce0d6706a77a55cf31d0c6aef4b7814","9a2e43326d127b17b8482d7d1aa59500b3121fc063be8c7cceea3d38f7f95494","dcd8f22e8a7c886cc9a0575f70ac9547c9237bb0bb02597b133d5f1342cbdbfd","580697182dd67fd7256586b0cf778d0fdc06bb1868205c4abb04f41f8c2ba826","a54e53e093b66edbfbe7c18d8bab0ae803c7132fe7e5281ea53ef82d84fa7cb5","e1226f2768e23f7b4b004a9a570fac69645176ef958e70f6c7ca912ea5388ce4","18fa43fd42a49f6264f0c2fe2d8dfd067189278b75ae50bf46835fb302b5421d","318513fa5fe8fa2ce59649b71a6755e4fad8e7c9dd0c151677104889c11caeb0","9887acedcc0fe1b908e350d12a9f1248cfb681d00600e0973fbe86590f43adc3","222b2aafb53cff2b60ace67699a9b7925e8af39c9206754ad321fbb640f84dcd","7ade76fbfa63bdcba743911105675db6496a683da0392319881090218ba9c66c","ad34467a3394ad11e126bd6508e6aea62fd7d43162a15fb88c903354b2793814","90fcb227d9a563e31c4b51a2146e127d84142ba62ec211c2fe03c2edfdae23ca","323b8d37f8b0b95685d9147886b2b67e2cbfd792eee0e1ec3ef763050e83f94d","3e196dd2f6b6d6de5a09f1217d036aacbd542962931d8b63fa2251f2f57e07da","04947f9532e77b7feb4280a5668d8c6a0a6b39fb1306f6dd2d9d0ec711788ad8","9288bdd8a4857f2213c0340151fa494ce1cccfa3fcd2ee15c9ba1b2d8ba94c41","117e439217f2fe545e1d5e45e50d3dd8e3bc8d0c22b66b954367200116810a38","7eae7082d7f9b1babe914581101cf827e29449eca5efe7bb2dc5c1e65a49e888","28ea8cb7086d9f8d611610ce8739a00ed0c71842f9df07fd2a3543609cc096a2","ed877333f021c55e04506a25b634dfaf776910553093cb78da757646a0232e60","b4839d071e6f375483aaf83c7885c9981d56c63e755c64444b5bd57837175f3d","8a86d5146216012d0f4f4d670735ecb91c75df7355eb2abf3ed23a95fe167ab0","3fc4d13e9aee784d19ec1a33e45a715b9ac9e83ce84f2cc99f20e2d0f2e88e3d","75b1ae7914a222cea5718541e1b52c6ec711a001e65c37b3299bb8780d9db90e","b537413f0e0d27177b048715ab4b61cd94c693e6a42d50c3bbf27204eb584f0e","8c58ec367a2e04bb34556f2f9bb1578a61123cb9c56c0974a621838eba18d016","0e2bc4a7a02e4cab625e1d091730af1bca8b45049694c73216a53151567f48d6","291cc4d81c80a5800fced2528f2354eb5e2d1696a55f4dbf753b82a816460ce5","fc7b920a12e6b73aab195e9330326c36ba899c526a255288a01da7407f894b83","4cce4fb5a0277cbe619ad168d0d0b21f127cb651cc3b739963944b6df826e115","8773bd46b5246a299d8818f9f2fee7bc5e2146c4042641dba58068f892ce718b","fdd88878ba4444464d262c37e76b3f5d9944fa8ea85614e735400638d90c89b7","7670ad9df2f210379c9949ec17a4320ddc6916e7ade85c5d01d27ad5c2b9ace6","8798d848d9133799f986d8774b69eb8ea95a92f1182fea95adb5b940f355a3a8","0875eaa2a1908045c6d6f44b5d77a4ba9ac7b4a0edf49b8f7dea65149c89e0ce","7fa2766758660a92585c52d84bbe62ecebb8ac431abfbcf4e928634e74bd30be","87ee8911c717a13a0a72d6ff64f100c7b7f11625be74f61ee6b0bf3b52a7d7f2","502cf312135b5cd7b2fa68b024824f2ffd73874f007561d691d5e2f506f5d0a6","eac40c9899be21194a9aa098ccddaa38ae017dd16f5fa0d4e7bb44a5ac66a485","61dc9ce1bfa63d427998bf13d3021e37134d6c4223225ea374e24a756f78cea5","bfc87d0941960e11096998ce31922b3e176b21d2d8466a3118ef85225fc7f847","614a3ff71ed812588ceeb14217ff51979bc04387a5b09dd6f4efcd654bb275b3","a1935ab9d13167b4707c1250cefcfc6f23a40790312b13fb15bd0af3635119fa","56da97aa09737418e2bf14e49b94b54f1f8853fe6edb7a287fcd5830ac99959d","7399fe5c359c5ea0d444c81fa50e7d5f81e223e0502d15a080987fbfdd4b6031","7d8b1339d4b274024d7f77bc7ca26a713726849565d9fc9a52dab7c45f64a5f8","8266d477f33cad7b40868e7025aa79cac270bb043f14522bea3dcf122989fb4a","578954f612fb3f17d32ebafeb88144e6b896803c7557dd533a6b789a7f2d968b","211c448601758e87ebcfc93a6f28374aed512b7b276ba79ab5a8bf65942670a1","999b29b12df218c3130ad94778ed6b7bc43fbaf1a2227dda9d4f04833081fd3c","93c258ef4be1b6621d496c909cbe66c4eaec94c3336cdc5763aaa0c0e018fbc6",{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","ed6b820c54de95b2510bb673490d61c7f2187f532a339d8d04981645a918961f",{"version":"78e9a9dec8fcd712a2a775d8b67bf7d166c2fb06644bba3132f33dbef06db781","affectsGlobalScope":true},"604c1ebb6a1058102229f7525dc223df8eb69204e79708daf128276c476a4db0","e04002c0d3756be02956fa2e6ecebf2f26ae467afd3ffd5105b79d1f751c2206","f0daef1fbc6425eba1104910fadeb40cedfc08863791ea7ef44b88a86d6dd5c4","6ed938c8783fc90c57356456c8c9a816fb69ed3c1ae2343e62fca7861a8b56b9","a8c0b3588015ef06c4c5334caaba4254dfbc80d35f4b9b55b9d3930f2ed443f9","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","4621ab91ef34d1ef52bd7a7d5883da9e3c7a172ac8c25ccf0942aa11247e0465","93d924264874c2bc58cd45ccd1bff7cabc2158ae8d35ec031a883e20a728c5b6","04562bef4e6d967b1570ee08bfe415a8739723b187c23a40df36173784252e7f","9f8cc8031034f03c0f9367dadddc1a261e617d7470aee51f10773883b4365f6b","a43deed52e9ff7194788a92ade5128aed64509ec35351d97d15c900f18274804","80e2b74e8889330b36d15161893395e473a1a24f26a79b0432e0301c657dbb10","ff81bffa4ecfceae2e86b5920c3fcb250b66b1d6ed72944dffdf58123be2481b","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","bdf0ed7d9ebae6175a5d1b4ec4065d07f8099379370a804b1faff05004dc387d","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","da66c1b3e50ef9908e31ce7a281b137b2db41423c2b143c62524f97a536a53d9","b780d2c9ef04118a187a021202ad8626ea8ec21e86edd88a4aee9b86a81fea41","910d31a7ef6f468bd963de066b7b893ca2616253b9817a103fa985e36815bde3","f8a5c1977aeae947b54ddbba133a4f330bdac31b893fb64543117db9e8a92f39","80901482d24ef606b9b435a32f3f88638ef09ecee3cec03ebcdb80971acf68c7","dd6f4ae061d12de7890843aa3f2645b2bbd9dbfc2815a164ad09a32e096e58bf","aab003a4d81f4fc915260872eab0c86abfa49f2a5bdd5425e175be18a1492336","e5885f7b9247fb96fb143a533f3a37fd511f8b96b42d56f76ed0fc7dc36e6dc8","571b2640f0cf541dfed72c433706ad1c70fb55ed60763343aa617e150fbb036e","6a2372186491f911527a890d92ac12b88dec29f1c0cec7fce93745aba3253fde","c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","3718caa9f55886b079acf7350b50f48ea2be4816b2cf7a5760e80d9e22fb33df","4acbc7165a8d54738ff62b51414e772c08fe78434e524e6d8770180d3ba2925f","a6ea6fe9c1c58801fc26491e8a292a8a78af83187e55595bd0705e8b46680f74","42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","a80b7bc4eda856374c26a56f6f25297f4c393309d4c4548002a5238cd57b2b66","3cf3072fbe7dce2f751f3798d6537046d9ca0fb59c632a4a2cc7a25ade263cb2","5aa348b97c1211ba0629a73d573c27bea51a2694d94711aafa465944f6c2ed26","82ca6d9fff20c5fc00e2e9fe7b97c9d24d3a8dfa1ef9d8719a9b169a57949a97","bb3b4bc656362445bfd7fa59ca3e9caa6722513665ceafdb2a831ff8a9b7a053","29fc085fb70310dd5a5a32f85d985e9cbf8bb2f52084b966592b31bf09ade51d","40fe31095a51cef76ed9e3b535933a2cf89963630e38f267047c70e1af30effa","0d0bd5d49c9c1058cf9ebc37558cca7b39d8c623e099f246ff4f08fdda84183a","fc7a4433c40b4b5982789766c52b6ceca9c3ee74450a02df7c70ab4715295af7","2423e3925d7154602fe2ee7aaa0e941fe6391edf3c8a64d99d658364a12f432c","2b8d50ceeb0d3e2b65d9fd0244872e25897cb6770844b0051aedf309a5011fb0",{"version":"4025a454b1ca489b179ee8c684bdd70ff8c1967e382076ade53e7e4653e1daec","affectsGlobalScope":true},{"version":"984c09345059b76fc4221c2c54e53511f4c27a0794dfd6e9f81dc60f0b564e05","affectsGlobalScope":true},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5",{"version":"78e9a9dec8fcd712a2a775d8b67bf7d166c2fb06644bba3132f33dbef06db781","affectsGlobalScope":true},"05321b823dd3781d0b6aac8700bfdc0c9181d56479fe52ba6a40c9196fd661a8","11739a1808d6c8ed492ffa82a00a491849c0ac46dc30c48ae93c37a085ee8cab"],"root":[88,[259,261],[266,275],277,292,310,311,[313,316],319,322],"options":{"allowJs":true,"checkJs":true,"esModuleInterop":true,"jsx":1,"module":99,"noImplicitAny":false,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"skipLibCheck":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"fileIdsList":[[93],[134],[135,140,170],[136,141,147,148,155,167,178],[136,137,147,155],[138,179],[139,140,148,156],[140,167,175],[141,143,147,155],[134,142],[143,144],[147],[145,147],[134,147],[147,148,149,167,178],[147,148,149,162,167,170],[132,183],[132,143,147,150,155,167,178],[147,148,150,151,155,167,175,178],[150,152,167,175,178],[93,94,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185],[147,153],[154,178,183],[143,147,155,167],[156],[157],[134,158],[93,94,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184],[160],[161],[147,162,163],[162,164,179,181],[135,147,167,168,169,170],[135,167,169],[167,168],[170],[171],[93,167],[147,173,174],[173,174],[140,155,167,175],[176],[155,177],[135,150,161,178],[140,179],[167,180],[154,181],[182],[135,140,147,149,158,167,178,181,183],[167,184],[104,108,178],[104,167,178],[99],[101,104,175,178],[155,175],[186],[99,186],[101,104,155,178],[96,97,100,103,135,147,167,178],[104,111],[96,102],[104,125,126],[100,104,135,170,178,186],[135,186],[125,135,186],[98,99,186],[104],[98,99,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131],[104,119],[104,111,112],[102,104,112,113],[103],[96,99,104],[104,108,112,113],[108],[102,104,107,178],[96,101,104,111],[135,167],[99,104,125,135,183,186],[265],[266],[198],[267],[201,251,252],[251,252,253,254,256],[255],[251],[207],[203,204,205,208],[202],[203,243],[244],[203],[238],[238,247],[202,203,204,205,206,208,209,210,211,238,239,240,241,242,244,245,246,247,248,249,250],[207,213,243],[207,242],[207,213,214,222,224,245],[207,219,242],[205,207,242],[207,230,242],[207,220,221],[207,221,242],[207,220,221,242],[207,216,217,218,242],[207,220,242],[206],[207,212],[207,214,242],[207,223],[207,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,243],[206,210,211,238,240],[205,207,210,242],[205,207,210,226,239,242],[210],[210,211,241],[206,210,241],[265,305],[265,300,303],[265,300,303,306,307],[301,302],[84,85],[265,294,295,296],[136,148,186],[89,90,91],[89],[290],[278,280,281,282,283,284,285,286,287,288,289,290],[278,279,281,282,283,284,285,286,287,288,289,290],[279,280,281,282,283,284,285,286,287,288,289,290],[278,279,280,282,283,284,285,286,287,288,289,290],[278,279,280,281,283,284,285,286,287,288,289,290],[278,279,280,281,282,284,285,286,287,288,289,290],[278,279,280,281,282,283,285,286,287,288,289,290],[278,279,280,281,282,283,284,286,287,288,289,290],[278,279,280,281,282,283,284,285,287,288,289,290],[278,279,280,281,282,283,284,285,286,288,289,290],[278,279,280,281,282,283,284,285,286,287,289,290],[278,279,280,281,282,283,284,285,286,287,288,290],[278,279,280,281,282,283,284,285,286,287,288,289],[263,264,323],[262,263,264],[92,198],[298,299],[298],[76],[74,76],[65,73,74,75,77],[63],[66,71,76,79],[62,79],[66,67,70,71,72,79],[66,67,68,70,71,79],[63,64,65,66,67,71,72,73,75,76,77,79],[79],[61,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78],[61,79],[66,68,69,71,72,79],[70,79],[71,72,76,79],[64,74],[188,197],[187,188],[81,82],[80,83],[198,200,257],[317],[80,147,148,150,151,152,155,167,175,178,184,186,188,189,190,191,192,193,194,195,196,197],[190,191,192,193],[190,191,192],[190],[191],[192,196],[188],[265,276],[265,276,291],[315],[265,315,321],[265,277,292,297,303,304,307,308,309,310],[265,293,297,312],[297,307,308],[304],[318],[265,293,297,311,313,314,318],[84,86,87],[157,198,199,258]],"referencedMap":[[93,1],[94,1],[134,2],[135,3],[136,4],[137,5],[138,6],[139,7],[140,8],[141,9],[142,10],[143,11],[144,11],[146,12],[145,13],[147,14],[148,15],[149,16],[133,17],[150,18],[151,19],[152,20],[186,21],[153,22],[154,23],[155,24],[156,25],[157,26],[158,27],[159,28],[160,29],[161,30],[162,31],[163,31],[164,32],[167,33],[169,34],[168,35],[170,36],[171,37],[172,38],[173,39],[174,40],[175,41],[176,42],[177,43],[178,44],[179,45],[180,46],[181,47],[182,48],[183,49],[184,50],[111,51],[121,52],[110,51],[131,53],[102,54],[101,55],[130,56],[124,57],[129,58],[104,59],[118,60],[103,61],[127,62],[99,63],[98,64],[128,65],[100,66],[105,67],[109,67],[132,68],[122,69],[113,70],[114,71],[116,72],[112,73],[115,74],[125,56],[107,75],[108,76],[117,77],[97,78],[120,69],[119,67],[126,79],[269,80],[270,80],[267,81],[272,80],[273,80],[274,80],[275,80],[266,80],[261,82],[268,83],[253,84],[257,85],[256,86],[255,87],[208,88],[206,89],[203,90],[244,91],[245,92],[209,93],[246,94],[248,95],[251,96],[214,97],[243,98],[215,98],[225,99],[220,100],[226,101],[227,98],[228,98],[229,98],[230,98],[231,98],[232,102],[222,103],[233,104],[221,98],[234,105],[216,98],[219,106],[218,98],[217,107],[207,108],[212,88],[235,109],[223,110],[224,111],[236,98],[213,109],[237,98],[238,112],[241,113],[239,114],[240,115],[211,116],[242,117],[249,118],[250,94],[306,119],[293,80],[304,120],[308,121],[303,122],[86,123],[296,80],[297,124],[252,125],[92,126],[91,127],[291,128],[279,129],[280,130],[278,131],[281,132],[282,133],[283,134],[284,135],[285,136],[286,137],[287,138],[288,139],[289,140],[290,141],[321,80],[320,142],[265,143],[305,80],[199,144],[300,145],[299,146],[307,80],[77,147],[75,148],[76,149],[64,150],[65,148],[72,151],[63,152],[68,153],[69,154],[74,155],[80,156],[79,157],[62,158],[70,159],[71,160],[66,161],[73,147],[67,162],[189,163],[188,164],[83,165],[84,166],[258,167],[318,168],[198,169],[195,170],[193,171],[191,172],[192,173],[317,174],[197,175],[277,176],[292,177],[316,178],[322,179],[311,180],[313,181],[314,182],[310,183],[319,184],[315,185],[88,186],[259,187]],"affectedFilesPendingEmit":[277,292,316,322,311,313,314,310,315,88,259]},"version":"5.5.3"} \ No newline at end of file diff --git a/zk-auth/package/vite.config.ts b/zk-auth/package/vite.config.ts index 3905b4b..e26a480 100644 --- a/zk-auth/package/vite.config.ts +++ b/zk-auth/package/vite.config.ts @@ -1,16 +1,24 @@ +import { resolve } from "node:path"; import react from "@vitejs/plugin-react-swc"; import { defineConfig } from "vite"; +import dts from "vite-plugin-dts"; -// https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + react(), + dts({ + include: ["src/zk-auth.tsx"], + }), + ], build: { + lib: { + entry: resolve(__dirname, "src/zk-auth.tsx"), + name: "ZkAuth", + fileName: "zk-auth", + formats: ["es"], + }, rollupOptions: { - output: { - entryFileNames: "[name].js", - chunkFileNames: "[name].js", - assetFileNames: "[name].[ext]", - }, + external: ["react", "react-dom", "react/jsx-runtime"], }, }, }); From a4a05d46fbccec0f7450c63a541ba1cfd17d5e28 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 16:19:21 -0400 Subject: [PATCH 049/110] fix: replace by just react --- zk-auth/package/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 053ac22..798af97 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -18,7 +18,7 @@ "scripts": { "build": "vite build", "dev": "vite --port 3000", - "package": "bun run build && rm dist/index.html && npm pack", + "package": "bun run build && npm pack", "preview": "vite preview" }, "devDependencies": { From 85b090d4b1bcce1a1da71b50b8a258da0e4e01aa Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 16:51:02 -0400 Subject: [PATCH 050/110] fix: zkauth demo --- zk-auth/bun.lockb | Bin 40199 -> 147521 bytes zk-auth/package.json | 1 + zk-auth/package/README.md | 6 +++--- zk-auth/package/index.html | 4 ++-- zk-auth/package/package.json | 4 ++-- zk-auth/package/src/{main.tsx => example.tsx} | 16 ++++++--------- zk-auth/src/app/layout.tsx | 19 ++++++++++++++++++ zk-auth/src/app/page.tsx | 14 +++++++++++++ 8 files changed, 47 insertions(+), 17 deletions(-) rename zk-auth/package/src/{main.tsx => example.tsx} (50%) create mode 100644 zk-auth/src/app/layout.tsx create mode 100644 zk-auth/src/app/page.tsx diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 39e0410db7cb3d03dc0dc3468bcea56c64bbe390..69f62fe1317bccba2f685509ded1152454a9e67f 100755 GIT binary patch literal 147521 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 TUujQQPqC)VUv>N+{NMip+fF6< delta 5437 zcmeHLYjjlA6+Y*Z!CWvkLLiR`Ax}Y~V-iS)WFV6md6+>S0fq=hNJ2=4JR!U$At4DzRHh_fuZ2#z}~<~zz|?fy&40Arv$BzMfLH{1`PT(mFdWR4m@0{8SR}l<< ziw1Ta1&jtZ138eZw+RsoTm;UJ{|X)nECc5O-vy5X=K1*sKhN~rFZ0`%1N*>k6tFMQ z3hX63!W)eW&!D!Xa$d=7D8ajf7gtwQgNoI`Lfj613HS?O4#Ma5FTpvTD}X^j2WHN8 zDSqq+WV=2G99RDj-7dG$1>?&Fl+c3^=c37LXl(2R%C;7D=CW zyDQg%WOE#6pk{X$!P&fKZeDp=)E@pa zw)aSMgR6fkO>`u*U-$*Ij{Vuzg?L4{l{;e8n?>(yI)v6os3Fv5>K|a#mY_CS*PXgq z8*CCHU)Qa?Sv!ZCQ`cp76=H&3YesD>*W_txjj)@pV?U3g-4Qk=SEZeO?E%QbaOUy? zwVLf}A~JwWXjRxj&ZG>ySK_5clyw@IS({&sng+<1miYk#}Rg{_lKyZhVJS5dRW zO?S$Uv8oN&;G@C1PoH0kz>ii^*11;z)b| zOp;8rs$;=8J0{9bwkj(kX{Rew-3#R)C^3L*aG;-br9Byg1MzC6>78M&R)X>DBxR4b zs+++0g+Z@)tI8*BE|`gAtX0hgOS;*%)X&hbztz+NHi#N*Hs$Lm%BaXR-HSul$%~>s zh8hPFKzqzqwFQh_V&5iU9??P!27{AStC|kx4;eYB1miF9F|iljiH@Ynd*8d*==uHJk+Xu5knc(86LbMe1z!bR>bNG*z1K6hk}Un z(f=e4;GZv%?st4EO6V{l!D!=l3aTlUf*R^W(^;3pI+RF#`w|H@{>389y`pTPfb#{aR+80^~wyqkTSaoh8c zFAt|)-#ZkCprY@cv~O(?y$|}3pdLRsX~DW6n)`!886)Uj(Ecw5QNoW7Wt^bdKRW3+ z=rPdof?_W_Y1#T9di=6OnJDNZ(7`VSQEIzGnIx#O-AU&_&w@TID5b+mt2PADGaU|P zilEb=BVP`pVOJbVfuQCqPPz>GJ?KPdYDCk?z{7peL@tQ*^7PS7F zlL9vfk?FcaDG`)+-AOw@w}X}nQf@e@?3ExYxv^Xx*>>s1E=7LU@|q&YOSz;)2FPkj zZM_3pu7=6Qy}K_f^JQmEnb3-+$|2_KH++TF+_ukeP&QL&yNYFk_P1ggKaP{h=h!qz zA*2XW44Doofy{uELb$UFG80k`setf#$S3M}$OH)fYKm@}Yr4#t*ca7k$U+F8Rtq3} z99BbWAhRH|A$(-=;p>D-M~`u0fHR z+FZAc@fhF7i<6Jd2}z{d|`wI$Mmd@Re2{x=x0hGx5{e13ss`9++R^T2c`r zA5BIUld!njpJ33_xPhn-vvs(ZPM8ra%e5=qvm8D9pr>&)k#}Ze`LBw$I2AcmyRTk` z%R=qJdJNP{E3e1uMr&)KO!a-&<6hwMJ(suayRbe0Ycg=4B^4VDANF{Yyg6@O`RvHs zYik1}!mtd&a+Yfs(A8{Q75s7i^$(|fadv~x06oP9EoLDGd{?_;kqnPCt{{%RQMU4( z)n8?HI=XtBRr9It%y!m2P{GpqFesaFqOJ6SjMY8AiB#Af3CG9V4U|hKTQ1xtMNVkn~Fu;;p@Roh4_4Hr{f!YX}l7f2*{296(>((9= zyS-P|x;8~hXo8_JZcEIuUDl3UH^>)ka;hawoY0cJnAB;_;YCPQnul3~_8hZp?J$_x zxLNW1(tAA0y8SsmE|T#w@T(vf!_Eh3#+`X?!GI4c996%P_?hp*^u*&QQW4v~QT-9iastkSR)5gcf{AhD92;HgA-^)lyWM z_^R%E5NCT@gjRDvhNT(zJ!4)wGXKIS;i<4dvN=lQ=I6waiO-ZDuRn|y|4N-PYwsM8 zGa`*Upj{t*QM9@C&851V#H$NX{}p3BsmJ2B#j93x08Zr2mh5^%|jV UJ1mE{bp1eX2yYo-RXPIy0ew6)JOBUy diff --git a/zk-auth/package.json b/zk-auth/package.json index ee5fa3f..7fb0f24 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -9,6 +9,7 @@ "start": "next start" }, "dependencies": { + "@risc0/zkauth": "0.0.12", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 34730b3..29e255d 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -18,8 +18,8 @@ bun install @risc0/zkauth ### 3. Usage ```tsx -import "@risc0/zkauth/index.css"; // load the zkAuth stylesheet -import { ZkAuth } from "@risc0/zkauth/react"; +import "@risc0/zkauth/style.css"; // load the zkAuth stylesheet +import { ZkAuth } from "@risc0/zkauth"; function App() { return ( @@ -27,7 +27,7 @@ function App() {

My App

{ console.info("Stark completed:", starkResults); }} diff --git a/zk-auth/package/index.html b/zk-auth/package/index.html index ff62db4..a69c61d 100644 --- a/zk-auth/package/index.html +++ b/zk-auth/package/index.html @@ -5,7 +5,7 @@ -
- +
+ diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 798af97..70f4ac9 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.11", + "version": "0.0.14", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, @@ -13,7 +13,7 @@ "import": "./dist/zk-auth.js", "require": "./dist/zk-auth.js" }, - "./index.css": "./dist/index.css" + "./style.css": "./dist/style.css" }, "scripts": { "build": "vite build", diff --git a/zk-auth/package/src/main.tsx b/zk-auth/package/src/example.tsx similarity index 50% rename from zk-auth/package/src/main.tsx rename to zk-auth/package/src/example.tsx index 80a8819..de293fb 100644 --- a/zk-auth/package/src/main.tsx +++ b/zk-auth/package/src/example.tsx @@ -2,22 +2,18 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import { ZkAuth } from "./zk-auth"; -const container = document.getElementById("zkauth"); +const container = document.getElementById("root"); if (!container) { throw new Error("No container found, make sure to include an HTML element with id 'zkauth'"); } -const address = container.getAttribute("data-address"); - -if (!address) { - throw new Error( - "No address found, make sure to include a 'data-address' attribute on the HTML element with id 'zkauth'", - ); -} - createRoot(container).render( - + , ); diff --git a/zk-auth/src/app/layout.tsx b/zk-auth/src/app/layout.tsx new file mode 100644 index 0000000..4600759 --- /dev/null +++ b/zk-auth/src/app/layout.tsx @@ -0,0 +1,19 @@ +export default function RootLayout({ children }) { + return ( + + +
+

My App -- this content is rendered by some consumer and is not part of the zkAuth package

+

+ I am passing down the following address to zkAuth: 0xc8915cc592583036e18724b6a7cBE9685f49FC98 +

+
+
+
+ +
{children}
+
+ + + ); +} diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx new file mode 100644 index 0000000..68b5e35 --- /dev/null +++ b/zk-auth/src/app/page.tsx @@ -0,0 +1,14 @@ +"use client"; + +import "@risc0/zkauth/style.css"; // load the zkAuth stylesheet +import { ZkAuth } from "@risc0/zkauth"; + +export default function HomePage() { + return ( +
+ +
+ ); +} From 8872130829bef58e80c76bb19465cbcd136d5e76 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 16:55:33 -0400 Subject: [PATCH 051/110] fix: add react --- zk-auth/bun.lockb | Bin 147521 -> 148699 bytes zk-auth/package.json | 2 ++ 2 files changed, 2 insertions(+) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 69f62fe1317bccba2f685509ded1152454a9e67f..b92fd0dee5c572a068be95394eef229c3ee2be6d 100755 GIT binary patch delta 30791 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 VA$Ppb%FCafWtltMonyZx{tw=i$~XW3 delta 30182 zcmeI5dwkCI|NpP|)h>2n&WB;nrx{!3u#M?*tj6V7n1wOhur=&JNNkCUBK3-QB8NgO zVkBodR?Z|ODLNt}ohka=pYMaMHJv`+-+#StdtA@g0X#cVxL| zhBSPlWz&Wy8ho{}<(Sp2ik$xEHAn1SiPJ!PKO-v&qmkCj2@^N z#QZ4caAZ9^GQl7N_!K@OaqK8jq$kG3OJEkc-RKkVFl8-x6?jogUZ%jx@Z*-;iu8vs zvE&S7CHPom#Y_ST1j-{bhQ+0)Qo&EYCjS&!0sT>A8RXa0S_(NTBPD4t={BO5f*T=g zA{QXV5I3?m@+qX0n_JZ32tba8S419$S4R$nXNn@nQh2Qlv#bnbk=2NgLDoQaM2bPd zNbw*eari@t=~MQ3D5kE2^X~fWX(F?DR*Am}``i+9)#wLx-An_F<#NscJQsFe*lnld@h9?Fm40eo% zOBZyb-6dUI#<&sj4;Wgo6s6A%vG1QrU5(7?U639Q8idg(0 z?JfoEKuW?GI!wj@-j5oWn&@~Ly>!VUY7pr{%Al)FM@yfNKq-Ab1--}wWG$ozSsz&) z$zN7xE(v82okoh~n~;)lab0r|wS&{jS&NWT!8D}weJ`X8wka6GU)CB*m5OIKFw-{( zG}Dzu%9tt9&~)?;OFGfxU}n}&WRN~D6=XK)Qx+eI6w70fv~E@hOKOeHbQc<#h99-$ z7Nk_P6e;OP(HGK!N0H*#cBHgmAmvm=mN3fCbYvxCz9@Pk#lx0JX_5GpjIj=mau)vu zYefG!Qd;1kCD$XR!bO%W($uW@DT|M`q=)v--}L86S2B}~<(ivKRhKzFzwRk#GM*lP9lcpbr1)VZOv*?cn}~e8jXCXN+L{HX#*G>l{9xj^23Go(?aaY7JZVHyYFtJ} zb@Vc;uArCc+OfSkW-3_vGjOT*NPF5}EZp0{%rFlr^L`nm2l`}{h3F*Mkc zf0gg-J!ZuP^F2S z>O#swG%PM-;=z1$N|F3X~XWdB5h<7+Hp%;D%DP5d7i-1@%E^c@VE$uiA zmx6b9H4EBdWk~5}>QkkIIr_q7th`CQw8%0m-Fz$mH{H#02dBryGgKTydzkrGBE^8; zkkp%*WgC#3G%867PRa;2#>wTLW`=221&<=d(BX;cLlc=gwtmZfW?v48%NUhL{`ADr z8Disv`%Mo$z05A0hLo|e!b+cz@(`)%|1p-u@xw+wn3NEgJ|rXYp~MlRGPd_NE$!UL z9KEdF2?~#z!zYHc>t)zl|(PqBJeNBT?Mkd5%Fq#A4lI|i> z#@yAaq?h^s83AdMlSmnC`z>kjZd)HP3toeire@nT(#?TO`WF4o=|l&|rNkv92EwI+ z@<{2Tb(AOh24Jjo?Tc_}$@IkdVX<-PqcZlzng%Q!Xbv{VAhW_};o{LGOCCTkhGtki z3Mo9n;(cu1EZ8^|Xf;rM=&qkRgK=jhYZg3;ebkZAEI2MbJ#JjL1k(-~mtqh4L|JCG zSmwNL$*C*>(r_=s#ozWrOh1gxG&m`vFUP$(<)8Yrr}8$qmoCCiyukaVTmcJ!L-II;>D_^NH=mGQmj!H zCu~?dIZb63ufFzd@u=e3P}Q(f8|`J4RH=>gYllkq_XMtSIvlJOSrqlVV?KHr1pRIt zoHi}?p|4fxO8$Y@QTF(|iKpISCYEAp!COaRCA&_MxW5|iAL(l0V~3t4^njuJ`c~*} z7fXntd+Ao_2SR-eowta?(aQ)eAk;%b&MQS!c2$q7IBnELt*jd9iYC;}2rVIWkA$4p z-6}i4)$+I-F@`*btvQhqT4|MC%j0~bw7Q5WQAP#T_Bi{MQOSroWmI-;kNY@7 zlkE%Nay$`QSrt^r!F>Dn5Wgw_vtCRbEJ4Lr`p6;*NrkLw0;9aV0p|ILUs7Y%d0)q_IB|^zYs81b-Bi0DLL8zM%a@Lg|$!*r!hk%*kZ9;>M$iRA5 zgSt`(^)Pf>2z4<+zV&5P<=)vwH4bgLMa1Pz5#hI4d+% z$xS`(?hQ@HH5ni7sW4eTG?fNB3X`!zE7lKpwFL3q6DsR%- zR|2-F?hj#IOjbYKT|e{|!;N%UXS1D+ko12=Ruzw->qV%uw6SZx5z4I*>Goq7CL5(m zi;jWC+RS;pnY!4@_@XXHRo(}6_$2rfmP|2-5 z?mCRij<=Ewg_#*b>qhuMST?Igy32&yUdr4b2xB}&w)Q1px-0795#j>LoxLMevd80o z1x0(iXxA4;v~m!OZNbhS!gD zx>~F3wjO6>YjqL*G!_nzT1j#56T(s^mrUPcciBVgYNK#>6iiHDwFnJ&PlK7`is9z` z{4SN;-s9@a0PH2Jg?j}d8MDk%vKDJ&7DU$g2w#g7Rnn}hVAg)nI^2Ek7GvtV%duMA zLm|dQb`OC`{n$p_G8nBO3~SE9$jYS1X&CNo-%bVH?Qu_NXC^5sGsV3QChLt`U9A!B zx(TDDYDc>7qfE2YLc2!zLL?ET-W~4DZLhNL@wo5oU@Co88YX^cF-paZ2(rquTSSE> zM)+F9Wi0EPU~SdPT9NL6yUmecTAmJ*iRx<@2G~ij&%1WBzesCd0O;FD)HqAOcn(n zqrB=}?f%J$h|s#Kpza>`ljx+CXu;ay&ZAw`MYiH{aCKaJ?jd@0ZJ*F+GE0_Hh zulThxCerz8UlsI#$N5uVm5gW>qp}gRW7I{&hcPOsA14?OsN{Yg*MSG5ZDj%V?Pt2~ zFy>J=n9Lk{0EeFLr;__~+SN~G_xHHH{aM_M%CB~h@P$~8VBXpODtUm%S!aOC9^i40 z;@g}Q!r5J;@W7)mrcsv5!NpHtAA8W3K;NZR_sQ{7<1^*#-(4lv9$eyeuUM5G>v8@N zt1iZR-0KE9984evWm>gxcd0>UCmE+f?rygjv(7nvkh(a~gb$>-3ih&!65@0rtAye18Y>Z_BR1UisW9XG zx@?k49_DfPN;3PYxG}*RB%7-rJ;Q=B8YYv^XgAkZSX;^Jx>>7W0S{m7VNyr>5BJmn2ziF&3H*5xx*Dx`&L4s};rr8vQM`2PjvgjJ_4nq2X1R#1Qw~?PYYDlK0afp(DF(`2!jj0$2#MtoDFsAY(u0(WI#~Q3q!=27ltZKhJMkd~_CQMfeMl*I5K{6d zBKdO+kq=9X0V(hj(*I)#lt%F+vK(?QQd(dsvJ`S1QVx-ok%y3y?i^A){Q@b5pGWfN zxF8>vEQb6JF6n+kO1kSvF+i;Kk^c7~AbDI!N#Ki=t|*NZ&nj8^DweElAI2v`a+V3?I5$&$&EkfSguhNN2YA|;q^ zagkEqXrvhMkfj$Xd<-%aX#{L3X~tOz^GnI_uw+yf9;%Tk)jkH3;vW|+@(C-KNYPKT zcz!AAp0eU+Aca3;r4uRnp0oI$$Onvsa${HykrLD`o?l9VFIxKiQYxN{UgSJ0UZhj` zjj5C=iiLbgw=T9~^Gi`Jwe%t-T{comd(G1SnUo|et#l$K-|LoKOt%M?_f_E$~ zQuw<_QSGzz`K721@FD$j*ox0DCI1nl{UtyGQ5>}riWL4HQfAO8OaEt5y5{GabKK2}DYt z`e43fbXl^9C5wt%9DgPypRbipq?G4}6jfBhrbo^XHsmeVxy2;T&P4^QVeQp@%&N@3rDZX_=~U-6egwMR#tp|DFsJbdXbXuE~Mx^mR_Xr zHdcH)OP^mF<3GQG^p3y7rQr5ffs*H6o~N4gudbB9@xMsfZ}Oj?N_oPKma^m@&r|D2 zGV_GhXgZS`C#*)(3IFdzRaznc39Iz`eSs%Kc2VR#ChG+cL!I@sI zs;c~Kv=*S!_^hV(@>yNgdM;Y4p~mr9Qyt~AmTIV?wc6@YKI^DceAZQ=&qr(Z)Kos} zt8;udP%URgYk}%nJ{zhFv!YeREI-wCwpVMU=FE;(=V3Qs!K#xUtzMYzr&j7-?M`(K z7NwU|u`hJiLe=sYqSep3pYogI)taf8Inip_3w~-Vtc7yF7_Iuw@l(TJ^lIU1Bh2?j zKUHn6S8J(~=He0TAS_Zb^#=R7+-i4ikwNnk} zN2{?f`Kjsiy;=u#3Klq@{#oGF?p9M5&_A$T*uARd!f5s60zdWALa)|IU4TU_#J@#e z&8y}t!avvzSXb5QW&B%&e=mEr?&=yW>SaGQ;1#ddQ!Rf5|6qQLz1saMW-A7SH0Q*wHN09D*i3=Y6I1{ zW%vg>1B+7)m*d|u{9EqT;?*fw;Bx%S_G*c0YBv7Ca$!SN%h&KP8~EaEl% zTjA9nRC89~AM6HfxazbL|5o7NO0PCjU4uof#J|_QTAEt^I{v}@R(Z7y6|)NeUdKP! zXysmwf2;6swO1RXHo|;Y<6n+f8>f+uhE12$cC+JJxS@o$4ydq!P@MQy;pjb80pwR|J~!TdIPHKk%U;onC5 zgUwRz&G@$o|2BIyU2TNcxYf`41R+DmFL%zrEXZS!gi z)VOW<2Rj2>q#C}3f7|fyEwA>9It2@S3;(uzwIyomcKn0o!d_J^ci`W4{M+Hxma7Y} zh#mO1)2qFv=Iq2j*bUf9)oB<0?Zm%bUTu}S28-H-f4jX}j#|DO|6qQ5yxLk7vj_in z;~#9Da=(p#d+_gVueM%og!#UWfA4s;jVkFK{DU2YZB~`v#lLs(?_IC9RqciOzl(o+ zz1mx9++O^Hoq_F84fo;SUi{nV)pn^Ja`N_G(Af^27KC^E=|zj;WX< z_;(opV8@mFDE=M6zoTC5q}mAcJ&J$td9_n2={@{|9fX}$m5<@yd-!+EtDRAMVgASP z?|rZKi5mAl{=v?`&Z&mS@$Y^7JMPs!Q>S2o$MNrkSNlRuJ%N9)T-aBt0x`Ka~@$ZVU|G}cJ;NLf1+5f)5KbYTDWB;|l>>U16duHoNxWB-FiUB|y)jQ#Hy{Db-ZYV3c%;@>a$2kWieH}LOQ{JUZ7e=y%0 z_;=IT|8C+R>>#Y4s{9-N-Ne7&jQtPh|C`^eV2%B6);RXgcVTB>ae6~di=H)B^V6qm zTBaW5)Jph%%=s9%=d#v^`fAIZs%9mh()K?HUgRd29o1HoD7}9X&DZzY^2U`_BgoEUOXEla1k9!6=i+L*tLUx1VtspxsLBKzNCc6Bl?SQ?q0HZs}& z_|mP5^|ShO6-q-x*NR{)dbBl%$a44D;G- zi~j51tfaX*7h7okBkAgRz3*VHwSIVr=F*=VtW|6%_Z#H6n=@9qsvw9H1;@SUmDKBZh__bXq#On=nDI6;BZpt*CB9iCS*o znipgpj^5}byWA7V0&?`TijZr)kLqbs#3UnvU$R@t<;Lq{mM$Kh7%UgXCtEtXH_D%J zyK{=ZLyCCZiW+7`m4QED>5?p6S@@HdF4@w_ozba!nFNZMW<|-JR%we0pt@AeF~UkN z*M~bxB*#cgCqJU-s>ewYF;-NX6(#py<>reV>6Wev;dYiT!_rkncSO&TB2J)^P8@AT zRU`ZXVL2W`O3v!ww55~V!D3_$@R6=1Qp9E}>Jg*_Yk}>SZi1z&jc$*nn`r6kpnFH} zDMdVmO76vGSyA-}k0&fW^Qfh(Pxu^=V-h;)=mtR77fBJnppqt>Y9((-xR}+P(=1&O zx{s{3kSh6eGy<3Pt5QTG;T+Sgs9?gmKx&?0=|Tukw2F8JodoX$S$ex6TDd-xtf=RR zlFH@&t=w>xY_qH)ni8Ijt_gCsrE5lbilx&n-B}rn9Bq^J>>=8HW#kK@+^?w%>Vf*Y zYpB*JbP!46z+ey$Cmb@RN9*T?YSDL3CpZHP1qq-Jhz9(=(D*G%4`f%+ z4Ri-y&>7SP(&N(34fJutG;ce(EhM*&t=?ZXhF9 zZW_v+&0KI9Tyg5xleD1BZG^Xj9bgyO1LT_BTCfht4e1r&RUmi87lL`Bz#I?@ z27*B#4h#nIAOU;`P6L@OazFSGkY8}rmAjAiAoW25a2ciiSViVeC};-QsN^3W9A$8z zB#^tIG8^syH_0QnTjkcQ+^&_|>vE%7?t*Uw+2BR+98lnSkPIFKDPXwV{T@MJBuE59 z!5JWTsmoG%F;Ey3 zGC>x2R01;19|q|l1B?PQ!Lwj0m;vN>6!KG!(V!-V)BHbgn<^IC6F7)oNyXbvYnhPwT0XRI)e6~ z1CRx%6A+iBnQST3NY?ExK-Oznw`C0%Zm;DcrT^N4cAzb20|G!*Pz6*5i%3^WemzhU z;s;8AB48mAvPmoe^TA7C8kh>60FQ$yU@~|NOafVeq8xHQI0VR6XB&ARVcGUX_5!jU z4hD%JMlvOUcrXYI1hF6*3;_Ls?4hze%MNA_0w2OIAn6L~#Q1``7)vMlB+izZc0i<5 zm_Jf8Jlb8H*s*nz1rPIV}Sqi0Mu`(450|g6~Q9S|-2gx7_NE+#9;Sz6i38w%# zU$J#EF!QGwDV+LmC6LI%tQU*zrY+24iL<*yDw8geu`w2m0r^{39F(*Vfzcpy6d#gF z4m+b=m~cB@!cvi$GB52oboNLePxxUA`Nu=SJa%0;n|aGR=_h;SOLvH;GU~<3f&~<2 z$fKl70ENZnA3t^-X8E*#VHM=hFo;5>3-ShyS&57nDWtGzSulU$gO75g|LuZqH}LWo zCf@y7%REWEq&F59q_l{%tesD~Hh-&T+I=AdMhuVw#9JvuW`P)Id!D~Aso)VH{Vd+u z3zQ77K|m@JLko7D)G-~*1J6tU&n2M1i(n4W!E<0Xcoxh8&w!_ZU6?)Kq@brQz37BX z8VS#^IF%UXNm-J1Cdey?_Lq(1&kB+_F)%MvULGmbu29nDH$cMTh+T1^`KA9~0EI>7 zFF1c#3N4tv0=nBRPGX2%hqR16OQfqZrJwA=d<5xp^1WlpebjH9X&yx$28X~AOCCqQ4~~Ho;3W7EoC4As z(n=qLGr;b`vxG(eIrtPviwXY>Tma|6MesGa1Tw$jL;B(u@B{cBdQk3}Sa&;@h`UeE({2ls(Kpcm+ENhzo=7z~z;;e(_9f%TIf)=F#I0R5fuS~ET5 z5v_TEG^Lv}<=2;e_r!fK=InK9_mQ+XnjlS|_=x5oCA}p)qVvAXP3Kk_>(pYKhcpcd z4K>c+OAxca&+LQmy+3K7Q)?2^LL!W+C8pVP@el8KY2gGX7tQsLAJJ+$6SUbAH2*NU zL|Bmo^ZT|s;oKEp-RD-dGl;1~%*ja=bKJ)o`{cze(e!STcPlCUNpb3zpWZH(``MJd z6!Mk0GBK+%GtZZGUwI)f=CY>GBX2-ar}@~nsK*_h8}qNMc`0f+^&=CsraTYCyzISg z$=W?pE8mDJuf>LjG!G4F>hL=C>Jv5p&;g{VN-fRbTr&G?jne7mwIHK?&FcoznB)B; zuO~gxYe;ELt{ha;%RHi02rz;~+RshA@3W;3K0kO>AE(y&4!tBTU3bJCX2JGz1m~Tp z`9#k(t`$~`H)Eg|)!(0}H4U?$K)8JKpo_0e8uE}2E#ItJNDIEN6*W$0vv&U6_~%vc z=DwU46H`<_`zTFdKh?0iPt|I}i|>r{(LzI-gvflJRa8&Sq=D_{Ax4c@-0|jvK40|+7DkG)ayR~OT9LC%S&NDrm>b!sfC~P%K0=e#_Ow> z$igytAfpV5@s|dFQ{u7Z`D`EUtG6XZnEgn{M-Mw2-2a$!LY{Z_!ym8oJu|Ch=XI6x zVmA8fGbFG57|F9cD%_m>!LZNsQhZ9i6{t6Lsb|Ba@n0{Sr!I)`Ew=x&)r%`TlEn4ie_thL? zLPJ`HG+}cnt%ppaW$fov7A-%p{P+v)SCOI#GrTEFOc`_T|2Sgyr1Hg<)-ht5NvY(0 zWRlj@S)rW1dXg68tXWR~XcF`L*K+zzDbs#LWuxP-q#u27O@E_SN@dHTsby_==)$3y zGgQubBZeW!He5mP@)+a5emvzhzuN06v|ad(Q!B}^C{3Od74QAB z6M-^@RMvY;*8Eu~Uz)5nvqXUX_^j->=8YDFul!h6yHM6aE>Bd^FHxd%mQ$}e1?&De z!=*i&;e6*R`W8~?DO0p6-0Cw(z^N+c5`2Eyv{ENd6iIbzd(nuyW{MSkpJur!3AdkI zcF)A8-->v+_Z6o`FNwv*H{@cZSWqvkaib}TgPqzd zUgIHd)Y5iYNa)nk?08 zMqt$IFV;2l(lw4nR^CH_9o8N?mC;c0noYJoKyUmcy=6bgGUvO~kFEOh{0Osj$@_VL zK8O^V_LDDH<(`kcJmP_sc`58?W1b#9WzURPe|{{_GW#i-{{5UgKDzmRvQukR&Fn<` zIh#dB^?kN$|o)%0I6#rbkIz2a0BBDq5S`<*5> zl(EgRgKA`YRjE*~%%gSgKTw+KZpIv}rcazo89S=!FHnXvrn-JWc)J?<5$T9tHD*sk zjHsb!y@Z@rL;vPE%tgr4HS~$EAaiTz+ZEDPQ{OfRS-qxyMDlxT>NO=_ z0{W%MDK+)#Pazl8)Cawcr24kgk(iVEv=&r%dreN#F!+xy*)etv|2(HP#Qu3kyAjNs zLB(uS{wcQ`<*)MD_1TT~&n^Ca&OD3l-nDD68`HLIab5k9XZ}^U*d_dxZw2FROY8w= zTlB9xtDuW^!S+a9Q(wRIEH2s=*(3CyH?m#R-<&EX8t7-2QE^}ceT7Kdpbic6(!ygJ z=pW0JDmax!l71a}t3~XFeyV|fb2;kS4fJj@VGGz_!ycr!nMwNGHCnYW`+386J>LD@ zoEN(EwYFb2X6uo}S>aoYuHPKc{T(C5*ec2f>X+AW=4(IHc=y~Udw!neTaOe?*-SWh zEV$~F*F1stnQt*8$PBlN(O1mUs#N;39KLoA{pM_~N`U>$EBCSDoFpb@Wjfc!P?Gg(vAHOd#Z=thW;h)zuDp)@|movgY&Ku8Npml9KT(S1y7RxYNfYU zc-ydle~$E52L0QusDOcgu?77PeP#E)-4y@(;4IQqzr2K{$8MUx*t828V6Q*_yCHU? z*#_A=fNhw)pIdERaLm~AW05tjZ9^@8?2`+76|j5Sw%Z<4)vfb$dx+Zp*$rM`4*!j= zwEa5YRNuamZ&LPy^{>|-_Cwmk_izDPzEI0IDLn0xO$z%F{8P?O%p6oX=a_s?Yay4d z9JK@VEK-Eo59>dhRd_!uo`qo|;RIFgUS#nTaTW`M@p+xqPBdvVq4KsF| zP%d;h>=LbZwLOF@ zAKK*K_n&PMGbeTJ|J16tv-x&<+m`~i2mDz->MyL(YX1K?-RC;=pPjtlI^VWC==aT) zH|*_o4d;G$0l{9F3OM^W79_i*f1cA`ifxax3Zu{jToqyh& z;=1xmuhLraR>tqWvWB+O2fwLxagJ%FuYQx$Qv1yhp=}n|d*rb)Ragd^nV0aUwbE}& z%2}=SF6&ve?3Yh`J$(1vzF+m+PfEEg%KEyjm7XOj?AKLHOHbZ9p!0>djk1i>Fzdpt zeqg;;CCq;7MU#<-=R8|!LJN|Ga%YE?$9_LX)#aI=y#CcX)_9`|7Wq@H^neXiVZUM{ z=CwK({iZy$g%n}tHgLU_-eUvij*QgjlhXNkq`qMT7owht)GwhAu-~t8v1k1F9!~{M zBq!TPNK1ZM)LP%NksRr*^${X7TkB75)Pjn=+uFR?WyW(g+M|C%e3<`f@cqls`vPkM7w-UiTGw{-e~zkKW-*QE;c8`?AkfM)Iyh2TZ*OvS0Q;#jNW()#(s&y4<1_V>eoT{l=pFJ z@1ZG=Cb*+Mh!kOknAF_7W?M+bGCXL+Q62TyCGTxgV4D3JnM(-|^gh#idq<4s%bDbL z-L3yBmfij~2$nV3TDWB`D1*`qsaLv}7%ZD8d2gSh5X)N9zjVRbd-Mb34Y1#2bMEHB z*8`jTy{sKw-0VcR z1xv1lTPZP_d0PD~b6H6dxx1^r=`C{h?WSLT3rkbF>Au^wtT6i>H@yd4`tAD6xE~EG zjJrej+ivdqZhOwY(k-{%bL3c*|`g6bX-x?{5uDsk+|8_g} z*)OVjD&hH@Eg$av#3?+ zvOD+DLv}F)3ia9O#zJF^HOE?fo%^Eo*}Et!ps&79WaGa2P0Dm$?5q3l)`DCQ$MAbt z<7RPYzyrqbcC+k%xf=Px;ZhTy?4siWcV<}r3%SL=XZ0np|57HvUzv&?W*io z?0g*=7q_=*H@DHkEo7Yy?63FOgKsVR>&biYmF?xwZm!f7bf~nppg(J)d5e6_0CNZY z<7w%d0s757++Lg&tJi#+E`B*yAMrNbVZS41@s;&ojDId|gW*wgF~EL{&OWWohuvR0 z&ld?g-x!?xV)ZR=Ye4}Y@M9@%mK1X0{z0tnd`EjZpw&QgDXjlh-;n05C-E}|CZaJ& zqXz2R-=Ti{l|R96t*bV)QC2f61q0oFDNsoG%og6|y%MY#PM$Ib>LuSL?<7huMg8X= z`SL_0 znWS)HVfMRhy-D%rLT|risN$3`-$ixr;D%Ia&ET4tSIwM#qixU{%Jm0#W@g>^giSdyN4kcP8g@3cSH z)wf;!x5A9ljlq2_N#Aym`t27(1xH8w^_$h|Eh`1xY`;3H`^uwZa!*#4^F!I8h{;LT zOB|x5ra!3HKco$DzVx6z10HbYL33c#I(=tsgV0=MGmP}65R~%+|E<3=&#Ifw4e(124uFcll9norJ zR_8ogPHps?&Dy7|_LePprd=@Je!btDds2(f?OGwdOr&Y*>E7cPN559HasXWJs6JY$ zcgf$%H~%;gUK+lq<-q&fJk;vsD4ALu+kYv)B>nlBdW|DmttzuoNT$gVEe>d7OWyq8 zplR#!HhPt#+GEA!EtVPa=}D=h^fITks`~z;TL1Nfk7*k;UwO}JaKgypdgbHVJMN75 TVTlQ&QxenHpFOVqGUERM@6YaH diff --git a/zk-auth/package.json b/zk-auth/package.json index 7fb0f24..2f795d9 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -16,6 +16,8 @@ "encoding": "0.1.13", "jwt-decode": "3.1.2", "next": "15.0.0-rc.0", + "react": "^19.0.0-rc-5dcb0097-20240918", + "react-dom": "^19.0.0-rc-5dcb0097-20240918", "typescript": "5.6.2", "zod": "3.23.8" }, From 457fae3cb5f4a6836c703498e5c7b57170f1b7bc Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 17:01:53 -0400 Subject: [PATCH 052/110] fix: add logs --- zk-auth/package/README.md | 2 ++ zk-auth/package/index.html | 11 ----------- zk-auth/package/package.json | 2 +- zk-auth/package/src/example.tsx | 19 ------------------- zk-auth/package/tsconfig.json | 5 ----- zk-auth/src/app/page.tsx | 6 ++++++ 6 files changed, 9 insertions(+), 36 deletions(-) delete mode 100644 zk-auth/package/index.html delete mode 100644 zk-auth/package/src/example.tsx diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 29e255d..1394ac8 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -39,3 +39,5 @@ function App() { ); } ``` + +*Note: if you are using Next.js, you need to mark the page as a client component with `"use client"`.* diff --git a/zk-auth/package/index.html b/zk-auth/package/index.html deleted file mode 100644 index a69c61d..0000000 --- a/zk-auth/package/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - -
- - - diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 70f4ac9..53cb2b5 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.14", + "version": "0.0.15", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, diff --git a/zk-auth/package/src/example.tsx b/zk-auth/package/src/example.tsx deleted file mode 100644 index de293fb..0000000 --- a/zk-auth/package/src/example.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { StrictMode } from "react"; -import { createRoot } from "react-dom/client"; -import { ZkAuth } from "./zk-auth"; - -const container = document.getElementById("root"); - -if (!container) { - throw new Error("No container found, make sure to include an HTML element with id 'zkauth'"); -} - -createRoot(container).render( - - - , -); diff --git a/zk-auth/package/tsconfig.json b/zk-auth/package/tsconfig.json index dbaa9ba..ed32409 100644 --- a/zk-auth/package/tsconfig.json +++ b/zk-auth/package/tsconfig.json @@ -1,11 +1,6 @@ { "extends": "@risc0/ui/config/tsconfig.base.json", "compilerOptions": { - /* Path Aliases */ - "baseUrl": ".", - "paths": { - "~/*": ["./src/*"] - }, "types": ["node", "vite/client"] }, "include": ["src", "vite.config.ts"], diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx index 68b5e35..e4d44ad 100644 --- a/zk-auth/src/app/page.tsx +++ b/zk-auth/src/app/page.tsx @@ -8,6 +8,12 @@ export default function HomePage() {
{ + console.info("Stark completed:", starkResults); + }} + onSnarkComplete={(snarkResults) => { + console.info("Snark completed:", snarkResults); + }} />
); From 2393359b7024f6e4fafde6507620b24ccf14a033 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 17:10:06 -0400 Subject: [PATCH 053/110] fix: hydration --- zk-auth/bun.lockb | Bin 148699 -> 147613 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- zk-auth/package/src/sign-out-button.tsx | 4 +++- zk-auth/package/src/zk-auth.tsx | 10 +++++----- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index b92fd0dee5c572a068be95394eef229c3ee2be6d..178f1b94d5795554fcb993c78f21ec99acb35910 100755 GIT binary patch delta 29627 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 delta 30136 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 diff --git a/zk-auth/package.json b/zk-auth/package.json index 2f795d9..a947340 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -9,7 +9,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.12", + "@risc0/zkauth": "0.0.16", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 53cb2b5..bc7061f 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.15", + "version": "0.0.16", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, diff --git a/zk-auth/package/src/sign-out-button.tsx b/zk-auth/package/src/sign-out-button.tsx index 096bf07..8bc4719 100644 --- a/zk-auth/package/src/sign-out-button.tsx +++ b/zk-auth/package/src/sign-out-button.tsx @@ -2,9 +2,11 @@ import { Button } from "@risc0/ui/button"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { useMounted } from "@risc0/ui/hooks/use-mounted"; import { LogOutIcon } from "lucide-react"; export function SignOutButton({ address }: { address: string }) { + const mounted = useMounted(); const [_googleUserToken, setGoogleUserToken] = useLocalStorage(`google-token-${address}`, undefined); const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); @@ -13,7 +15,7 @@ export function SignOutButton({ address }: { address: string }) { setGoogleUserInfos(undefined); } - if (!address || !googleUserInfos) { + if (!mounted || !address || !googleUserInfos) { return
; } diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 0b68668..8676e76 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -21,16 +21,16 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp useEffect(() => { if (!googleUserToken) { - setCurrentStep(2); + setCurrentStep(1); return; } if (starkResults || snarkResults) { - setCurrentStep(4); + setCurrentStep(3); return; } - setCurrentStep(3); + setCurrentStep(2); }, [googleUserToken, starkResults, snarkResults]); useEffect(() => { @@ -54,9 +54,9 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp
- {currentStep === 2 ? ( + {currentStep === 1 ? ( - ) : currentStep === 3 ? ( + ) : currentStep === 2 ? ( ) : ( <>Proving complete From b8b82698a034fda22bf7f2f02f36a472ebe5c9f0 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 21:08:16 -0400 Subject: [PATCH 054/110] fix: better loading states --- zk-auth/package/index.html | 12 ++ zk-auth/package/src/border-beam.tsx | 50 +++++++ zk-auth/package/src/example.tsx | 11 ++ zk-auth/package/src/prove-button.tsx | 204 +++++++++++++++------------ zk-auth/package/src/style.css | 10 +- zk-auth/package/src/user-infos.tsx | 16 ++- zk-auth/package/src/zk-auth.tsx | 34 +++-- zk-auth/package/tailwind.config.ts | 13 ++ 8 files changed, 236 insertions(+), 114 deletions(-) create mode 100644 zk-auth/package/index.html create mode 100644 zk-auth/package/src/border-beam.tsx create mode 100644 zk-auth/package/src/example.tsx diff --git a/zk-auth/package/index.html b/zk-auth/package/index.html new file mode 100644 index 0000000..70ec008 --- /dev/null +++ b/zk-auth/package/index.html @@ -0,0 +1,12 @@ + + + + + + ZK Auth + + +
+ + + diff --git a/zk-auth/package/src/border-beam.tsx b/zk-auth/package/src/border-beam.tsx new file mode 100644 index 0000000..c53e3de --- /dev/null +++ b/zk-auth/package/src/border-beam.tsx @@ -0,0 +1,50 @@ +import { cn } from "@risc0/ui/cn"; +import type { CSSProperties } from "react"; + +interface BorderBeamProps { + className?: string; + size?: number; + duration?: number; + borderWidth?: number; + anchor?: number; + colorFrom?: string; + colorTo?: string; + delay?: number; +} + +export const BorderBeam = ({ + className, + size = 200, + duration = 15, + anchor = 90, + borderWidth = 1.5, + colorFrom = "#FFC600", + colorTo = "#7A0DFF", + delay = 0, +}: BorderBeamProps) => { + return ( +
+ ); +}; diff --git a/zk-auth/package/src/example.tsx b/zk-auth/package/src/example.tsx new file mode 100644 index 0000000..d401494 --- /dev/null +++ b/zk-auth/package/src/example.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import { ZkAuth } from "./zk-auth"; + +ReactDOM.createRoot(document.getElementById("root")!).render( + +
+ +
+
, +); diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index f3a555f..32825dd 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -5,10 +5,12 @@ import { Button } from "@risc0/ui/button"; import { cn } from "@risc0/ui/cn"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { Loader } from "@risc0/ui/loader"; -import { AlertTriangleIcon, Loader2Icon } from "lucide-react"; +import { AlertTriangleIcon } from "lucide-react"; import { useState } from "react"; +import { BorderBeam } from "./border-beam"; import { doSnarkProving } from "./do-snark-proving"; import { doStarkProving } from "./do-stark-proving"; +import { SignOutButton } from "./sign-out-button"; import { UserInfos } from "./user-infos"; export function ProveButton({ address }: { address: string }) { @@ -55,99 +57,119 @@ export function ProveButton({ address }: { address: string }) { return address ? ( <> - {isLoading ? ( - - ) : ( - <> -

- You are about to prove that address -
- - {address} - -
- owns the following social account: -

- - {googleUserInfos && } - - )} - -
- - - {starkPollingResults && starkPollingResults.length > 0 && ( - - - STARK Results{" "} - + {!isLoading && } +
+ +
+
+ {isLoading ? ( + + ) : ( + <> +

+ You are about to prove that address +
+ + {address} + +
+ owns the following social account: +

+ + {googleUserInfos && } + + )} + +
+ + + {starkPollingResults && starkPollingResults.length > 0 && ( + + {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( + + + STARK{" "} + + ({starkPollingResults.at(-1)?.status}) + + + + + +
+
+ {starkPollingResults.slice(-5).map((result: any) => ( + + {result.state} + + ))} +
+
+
)} - > - ({starkPollingResults.at(-1)?.status}) - - - {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( - -
-
- {starkPollingResults.map((result: any, index: any) => ( - - {result.state} - - ))} + + )} + + {snarkPollingResults && ( + + + + SNARK{" "} + + ({snarkPollingResults.status}) + + + + + +
+ This should take around 2 minutes…
- -
- + + )} - - )} - - {snarkPollingResults && ( - - - SNARK Results{" "} - - ({snarkPollingResults.status}) - - - -
- This will take around 2 minutes -
-
-
- )} - - {error && ( - - - Error {error.status} - {error.message} - - )} + + {error && ( + + + Error {error.status} + {error.message} + + )} +
+
) : null; diff --git a/zk-auth/package/src/style.css b/zk-auth/package/src/style.css index 3e2ae79..49e2f78 100644 --- a/zk-auth/package/src/style.css +++ b/zk-auth/package/src/style.css @@ -27,9 +27,17 @@ font-display: fallback; } +@font-face { + font-family: "JetBrains Mono"; + src: url("https://fonts.googleapis.com/css2?family=JetBrains+Mono&display=swap"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + :root { - /* define custom css var for the Europa font */ --font-europa-sans: "Europa", sans-serif; + --font-mono: "JetBrains Mono", monospace; --removed-body-scroll-bar-size: 0px; /* tailwind/shadcn overrides */ diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/user-infos.tsx index 6cac78d..325c68d 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/user-infos.tsx @@ -3,13 +3,15 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function UserInfos({ userInfos, type }: { userInfos: any; type: "google" }) { return ( - {userInfos.name} +
+ {userInfos.name} +

{userInfos.name} diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 8676e76..7629e0c 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -47,21 +47,25 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp return ( -

-
-

zkAuth

- -
- -
- {currentStep === 1 ? ( - - ) : currentStep === 2 ? ( - - ) : ( - <>Proving complete - )} -
+
+ {currentStep === 1 ? ( + + ) : currentStep === 2 ? ( + + ) : ( + <> + Proving complete (check console for results) + + + )}
); diff --git a/zk-auth/package/tailwind.config.ts b/zk-auth/package/tailwind.config.ts index 7c75b1d..7aeff69 100644 --- a/zk-auth/package/tailwind.config.ts +++ b/zk-auth/package/tailwind.config.ts @@ -6,6 +6,19 @@ const config = deepmerge(tailwindConfig, { theme: { fontFamily: { sans: ["var(--font-europa-sans)", "system-ui"], + mono: ["var(--font-mono)", "monospace"], + }, + extend: { + animation: { + "border-beam": "border-beam calc(var(--duration)*1s) infinite linear", + }, + keyframes: { + "border-beam": { + "100%": { + "offset-distance": "100%", + }, + }, + }, }, }, }) satisfies Config; From 2d4196f43357c9ce4dcde907aff8aa10f538f90c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 21:08:56 -0400 Subject: [PATCH 055/110] fix: better loading states --- zk-auth/bun.lockb | Bin 147613 -> 147613 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 178f1b94d5795554fcb993c78f21ec99acb35910..abd50aaeda19d1371a775172a3f7078e9f3035e4 100755 GIT binary patch delta 151 zcmV;I0BHZ6feD>~36L%z3~otsF1Anu;86ljRZ9gC0S+`#hqiJyGFN9Py1+w&u}=CZ z0TGk27ALcCDYbP#S~Yn!F&g1m(Jkgb>iYO?s#msHPyuv;vc&pyDoR@-@e|soLF{B~ z(j09@3piX1nrqk##)vwfjFoXfspkpXvt^%_*a0`U{C5E+a0NFmbZ2^(VK)L3w>szn FV_3fJK0E*b delta 151 zcmV;I0BHZ6feD>~36L%zeTpc7Y&&ku>dA_L-nZ`>wC?+&szn FV^}H?NBIB% diff --git a/zk-auth/package.json b/zk-auth/package.json index a947340..49d1385 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -9,7 +9,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.16", + "@risc0/zkauth": "0.0.17", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index bc7061f..49da787 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.16", + "version": "0.0.17", "private": false, "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3"], "sideEffects": false, From 562e5b709f67e1746babc1a85306d4348262ecd6 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 21:11:42 -0400 Subject: [PATCH 056/110] fix: remove border --- zk-auth/src/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk-auth/src/app/layout.tsx b/zk-auth/src/app/layout.tsx index 4600759..2b391e6 100644 --- a/zk-auth/src/app/layout.tsx +++ b/zk-auth/src/app/layout.tsx @@ -11,7 +11,7 @@ export default function RootLayout({ children }) {

-
{children}
+
{children}
From f1483c25d211869e9be3721e72275d177fef3730 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Wed, 18 Sep 2024 22:18:59 -0400 Subject: [PATCH 057/110] fix: add twitch --- zk-auth/package/src/do-stark-proving.ts | 7 ++- .../{user-infos.tsx => google-user-infos.tsx} | 10 +--- zk-auth/package/src/prove-button.tsx | 21 +++++-- zk-auth/package/src/sign-in-button.tsx | 40 ++++++++++--- zk-auth/package/src/twitch-user-infos.tsx | 29 +++++++++ zk-auth/package/src/use-twitch-auth.ts | 59 +++++++++++++++++++ zk-auth/package/src/zk-auth.tsx | 5 +- zk-auth/src/app/_lib/bonsai-proving.ts | 7 ++- zk-auth/src/app/_lib/get-google-certs.ts | 5 +- zk-auth/src/app/_lib/get-twitch-certs.ts | 5 ++ 10 files changed, 157 insertions(+), 31 deletions(-) rename zk-auth/package/src/{user-infos.tsx => google-user-infos.tsx} (74%) create mode 100644 zk-auth/package/src/twitch-user-infos.tsx create mode 100644 zk-auth/package/src/use-twitch-auth.ts create mode 100644 zk-auth/src/app/_lib/get-twitch-certs.ts diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/do-stark-proving.ts index 02028a4..06bbe5d 100644 --- a/zk-auth/package/src/do-stark-proving.ts +++ b/zk-auth/package/src/do-stark-proving.ts @@ -7,7 +7,10 @@ type StarkSessionStatusRes = { // Add other properties as needed }; -async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "test"; token: string }): Promise { +async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "Twitch" | "test"; token: string }): Promise { const response = await fetch("https://zkauth.vercel.app/api/bonsai/stark-proving", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -36,7 +39,7 @@ export async function doStarkProving({ token, setStarkPollingResults, }: { - iss: "Google" | "test"; + iss: "Google" | "Twitch" | "test"; token: string; setStarkPollingResults: Dispatch>; }) { diff --git a/zk-auth/package/src/user-infos.tsx b/zk-auth/package/src/google-user-infos.tsx similarity index 74% rename from zk-auth/package/src/user-infos.tsx rename to zk-auth/package/src/google-user-infos.tsx index 325c68d..1dc04a5 100644 --- a/zk-auth/package/src/user-infos.tsx +++ b/zk-auth/package/src/google-user-infos.tsx @@ -1,6 +1,6 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; -export function UserInfos({ userInfos, type }: { userInfos: any; type: "google" }) { +export function GoogleUserInfos({ userInfos }: { userInfos: any }) { return (
@@ -20,12 +20,8 @@ export function UserInfos({ userInfos, type }: { userInfos: any; type: "google" {userInfos.email}

- {type === "google" && ( - <> - Google - Google - - )} + Google + Google

diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/prove-button.tsx index 32825dd..9954c9b 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/prove-button.tsx @@ -10,18 +10,26 @@ import { useState } from "react"; import { BorderBeam } from "./border-beam"; import { doSnarkProving } from "./do-snark-proving"; import { doStarkProving } from "./do-stark-proving"; +import { GoogleUserInfos } from "./google-user-infos"; import { SignOutButton } from "./sign-out-button"; -import { UserInfos } from "./user-infos"; +import { TwitchUserInfos } from "./twitch-user-infos"; export function ProveButton({ address }: { address: string }) { const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); + + // google const [googleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); const [googleUserToken] = useLocalStorage(`google-token-${address}`, undefined); + + // twitch + const [twitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); + const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, undefined); + const [error, setError] = useState(); + const [isLoading, setIsLoading] = useState(false); const [snarkPollingResults, setSnarkPollingResults] = useState(); const [starkPollingResults, setStarkPollingResults] = useState(); - const [isLoading, setIsLoading] = useState(false); // this function takes care of creating the STARK session, which then returns a UUID // we then use this UUID to create a SNARK session @@ -30,7 +38,7 @@ export function ProveButton({ address }: { address: string }) { async function handleClick() { setIsLoading(true); - if (!googleUserToken) { + if (!googleUserToken && !twitchUserToken) { console.error("JWT not found"); setIsLoading(false); @@ -39,9 +47,9 @@ export function ProveButton({ address }: { address: string }) { try { const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : "test", + iss: googleUserInfos ? "Google" : twitchUserInfos ? "Twitch" : "test", setStarkPollingResults, - token: googleUserToken ?? "", + token: googleUserToken ?? twitchUserToken ?? "", }); const { snarkStatus } = await doSnarkProving({ setSnarkPollingResults, starkUuid }); @@ -80,7 +88,8 @@ export function ProveButton({ address }: { address: string }) { owns the following social account:

- {googleUserInfos && } + {googleUserInfos && } + {twitchUserInfos && } )} diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/sign-in-button.tsx index 64896f6..1b32dbc 100644 --- a/zk-auth/package/src/sign-in-button.tsx +++ b/zk-auth/package/src/sign-in-button.tsx @@ -1,7 +1,9 @@ import { GoogleLogin } from "@react-oauth/google"; +import { Button } from "@risc0/ui/button"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import jwtDecode from "jwt-decode"; import { useEffect } from "react"; +import { useTwitchAuth } from "./use-twitch-auth"; export function SignInButton({ address }: { address: string }) { const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); @@ -9,6 +11,9 @@ export function SignInButton({ address }: { address: string }) { `google-token-${address}`, undefined, ); + const [twitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); + const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, undefined); + const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); useEffect(() => { if (!googleUserToken || googleUserInfos) { @@ -18,15 +23,32 @@ export function SignInButton({ address }: { address: string }) { setGoogleUserInfos(jwtDecode(googleUserToken)); }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + useEffect(() => { + if (twitchUserToken && twitchUserInfos) { + return; + } + + // Handle the Twitch auth callback + if (window.location.hash.includes("access_token") && !twitchUserInfos) { + handleTwitchAuthCallback(); + } + }, [handleTwitchAuthCallback, twitchUserInfos, twitchUserToken]); + return ( - { - if (response.credential) { - setGoogleUserToken(response.credential); - } - }} - /> + <> + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + + + ); } diff --git a/zk-auth/package/src/twitch-user-infos.tsx b/zk-auth/package/src/twitch-user-infos.tsx new file mode 100644 index 0000000..6b7e6ff --- /dev/null +++ b/zk-auth/package/src/twitch-user-infos.tsx @@ -0,0 +1,29 @@ +import { Alert, AlertDescription } from "@risc0/ui/alert"; + +export function TwitchUserInfos({ userInfos }: { userInfos: any }) { + return ( + +
+ {userInfos.display_name} +
+ +

+ {userInfos.display_name} +

+

+ {userInfos.email} +

+

+ Google + Twitch +

+
+
+ ); +} diff --git a/zk-auth/package/src/use-twitch-auth.ts b/zk-auth/package/src/use-twitch-auth.ts new file mode 100644 index 0000000..fe45de3 --- /dev/null +++ b/zk-auth/package/src/use-twitch-auth.ts @@ -0,0 +1,59 @@ +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import { useCallback, useState } from "react"; + +const TWITCH_CLIENT_ID = "h7i920jmp37f1gwafkndd8xx1fcud1"; +const REDIRECT_URI = "http://localhost:3000"; +const TWITCH_AUTH_URL = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=token&scope=user:read:email`; + +export function useTwitchAuth({ address }: { address: string }) { + const [_twitchUserInfos, setTwitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); + const [_twitchUserToken, setTwitchUserToken] = useLocalStorage( + `twitch-token-${address}`, + undefined, + ); + const [error, setError] = useState(null); + + const signInWithTwitch = useCallback(() => { + window.location.href = TWITCH_AUTH_URL; + }, []); + + const handleTwitchAuthCallback = useCallback(async () => { + const hash = window.location.hash.substring(1); + const params = new URLSearchParams(hash); + const accessToken = params.get("access_token"); + + if (accessToken) { + setTwitchUserToken(accessToken); + try { + const response = await fetch("https://api.twitch.tv/helix/users", { + headers: { + Authorization: `Bearer ${accessToken}`, + "Client-Id": TWITCH_CLIENT_ID, + }, + }); + + if (!response.ok) { + throw new Error("Failed to fetch user info"); + } + + const data = await response.json(); + setTwitchUserInfos(data.data[0]); + } catch (err) { + setError("Failed to fetch user info"); + console.error(err); + } + } + }, [setTwitchUserToken, setTwitchUserInfos]); + + const signOut = useCallback(() => { + setTwitchUserToken(undefined); + setTwitchUserInfos(undefined); + }, [setTwitchUserToken, setTwitchUserInfos]); + + return { + error, + signInWithTwitch, + handleTwitchAuthCallback, + signOut, + }; +} diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 7629e0c..a0424a3 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -14,13 +14,14 @@ export type ZkAuthProps = { }; export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { + const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, null); const [googleUserToken] = useLocalStorage(`google-token-${address}`, null); const [currentStep, setCurrentStep] = useState(1); const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); useEffect(() => { - if (!googleUserToken) { + if (!googleUserToken && !twitchUserToken) { setCurrentStep(1); return; } @@ -31,7 +32,7 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp } setCurrentStep(2); - }, [googleUserToken, starkResults, snarkResults]); + }, [googleUserToken, twitchUserToken, starkResults, snarkResults]); useEffect(() => { if (starkResults && onStarkComplete) { diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 5593f98..4292ac6 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -2,6 +2,7 @@ import axios, { type AxiosInstance, type AxiosResponse } from "axios"; import env from "~/env"; import { encodeString } from "./encode-string"; import { getGoogleCerts } from "./get-google-certs"; +import { getTwitchCerts } from "./get-twitch-certs"; import type { CreateSnarkSessionRes, CreateStarkSessionRes, @@ -122,7 +123,7 @@ class Client { } // STARK -export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "test"; token: string }) { +export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { // TODO: Add others, if applicable let jwks = ""; @@ -130,6 +131,10 @@ export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "test jwks = await getGoogleCerts(); } + if (iss === "Twitch") { + jwks = await getTwitchCerts(); + } + const inputData = Buffer.from( encodeString( JSON.stringify({ diff --git a/zk-auth/src/app/_lib/get-google-certs.ts b/zk-auth/src/app/_lib/get-google-certs.ts index 28b5e9c..243836c 100644 --- a/zk-auth/src/app/_lib/get-google-certs.ts +++ b/zk-auth/src/app/_lib/get-google-certs.ts @@ -1,8 +1,5 @@ import axios from "axios"; export async function getGoogleCerts(): Promise { - const response = await axios.get("https://www.googleapis.com/oauth2/v3/certs"); - const certs = response.data; - - return JSON.stringify(certs); + return JSON.stringify((await axios.get("https://www.googleapis.com/oauth2/v3/certs")).data); } diff --git a/zk-auth/src/app/_lib/get-twitch-certs.ts b/zk-auth/src/app/_lib/get-twitch-certs.ts new file mode 100644 index 0000000..91a7231 --- /dev/null +++ b/zk-auth/src/app/_lib/get-twitch-certs.ts @@ -0,0 +1,5 @@ +import axios from "axios"; + +export async function getTwitchCerts(): Promise { + return JSON.stringify((await axios.get("https://id.twitch.tv/oauth2/keys")).data); +} From b2f2b93429be6a0ae66c604351b615d9f5ba5e64 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 08:52:57 -0400 Subject: [PATCH 058/110] fix: add twitch --- .../src/{ => components}/border-beam.tsx | 0 .../{ => components}/google-user-infos.tsx | 0 .../src/{ => components}/prove-button.tsx | 26 +++++------ .../src/{ => components}/sign-in-button.tsx | 15 +++---- .../src/components/sign-out-button.tsx | 40 +++++++++++++++++ .../{ => components}/twitch-user-infos.tsx | 10 ++--- zk-auth/package/src/hooks/use-socials.ts | 43 +++++++++++++++++++ .../src/{ => hooks}/use-twitch-auth.ts | 12 +++--- zk-auth/package/src/sign-out-button.tsx | 27 ------------ .../src/{ => utils}/do-snark-proving.ts | 0 .../src/{ => utils}/do-stark-proving.ts | 0 zk-auth/package/src/zk-auth.tsx | 13 +++--- zk-auth/public/twitch.svg | 1 + .../methods/guest/src/main.rs | 7 ++- .../oidc-validator/src/lib.rs | 23 ++++++++++ 15 files changed, 145 insertions(+), 72 deletions(-) rename zk-auth/package/src/{ => components}/border-beam.tsx (100%) rename zk-auth/package/src/{ => components}/google-user-infos.tsx (100%) rename zk-auth/package/src/{ => components}/prove-button.tsx (89%) rename zk-auth/package/src/{ => components}/sign-in-button.tsx (66%) create mode 100644 zk-auth/package/src/components/sign-out-button.tsx rename zk-auth/package/src/{ => components}/twitch-user-infos.tsx (82%) create mode 100644 zk-auth/package/src/hooks/use-socials.ts rename zk-auth/package/src/{ => hooks}/use-twitch-auth.ts (77%) delete mode 100644 zk-auth/package/src/sign-out-button.tsx rename zk-auth/package/src/{ => utils}/do-snark-proving.ts (100%) rename zk-auth/package/src/{ => utils}/do-stark-proving.ts (100%) create mode 100644 zk-auth/public/twitch.svg diff --git a/zk-auth/package/src/border-beam.tsx b/zk-auth/package/src/components/border-beam.tsx similarity index 100% rename from zk-auth/package/src/border-beam.tsx rename to zk-auth/package/src/components/border-beam.tsx diff --git a/zk-auth/package/src/google-user-infos.tsx b/zk-auth/package/src/components/google-user-infos.tsx similarity index 100% rename from zk-auth/package/src/google-user-infos.tsx rename to zk-auth/package/src/components/google-user-infos.tsx diff --git a/zk-auth/package/src/prove-button.tsx b/zk-auth/package/src/components/prove-button.tsx similarity index 89% rename from zk-auth/package/src/prove-button.tsx rename to zk-auth/package/src/components/prove-button.tsx index 9954c9b..824de8d 100644 --- a/zk-auth/package/src/prove-button.tsx +++ b/zk-auth/package/src/components/prove-button.tsx @@ -7,25 +7,18 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { Loader } from "@risc0/ui/loader"; import { AlertTriangleIcon } from "lucide-react"; import { useState } from "react"; +import { useSocialsLocalStorage } from "../hooks/use-socials"; +import { doSnarkProving } from "../utils/do-snark-proving"; +import { doStarkProving } from "../utils/do-stark-proving"; import { BorderBeam } from "./border-beam"; -import { doSnarkProving } from "./do-snark-proving"; -import { doStarkProving } from "./do-stark-proving"; import { GoogleUserInfos } from "./google-user-infos"; import { SignOutButton } from "./sign-out-button"; import { TwitchUserInfos } from "./twitch-user-infos"; -export function ProveButton({ address }: { address: string }) { +export function ProveButton({ address }: { address: `0x${string}` }) { const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); - - // google - const [googleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); - const [googleUserToken] = useLocalStorage(`google-token-${address}`, undefined); - - // twitch - const [twitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); - const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, undefined); - + const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken } = useSocialsLocalStorage({ address }); const [error, setError] = useState(); const [isLoading, setIsLoading] = useState(false); const [snarkPollingResults, setSnarkPollingResults] = useState(); @@ -63,6 +56,8 @@ export function ProveButton({ address }: { address: string }) { } } + console.log("starkPollingResults", starkPollingResults); + return address ? ( <>
@@ -121,7 +116,6 @@ export function ProveButton({ address }: { address: string }) { @@ -129,12 +123,12 @@ export function ProveButton({ address }: { address: string }) { - + {starkPollingResults.at(-1)?.status === "RUNNING" && }
- {starkPollingResults.slice(-5).map((result: any) => ( - + {starkPollingResults.slice(-5).map((result: any, index: number) => ( + {result.state} ))} diff --git a/zk-auth/package/src/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx similarity index 66% rename from zk-auth/package/src/sign-in-button.tsx rename to zk-auth/package/src/components/sign-in-button.tsx index 1b32dbc..20bdb6b 100644 --- a/zk-auth/package/src/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -1,18 +1,13 @@ import { GoogleLogin } from "@react-oauth/google"; import { Button } from "@risc0/ui/button"; -import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import jwtDecode from "jwt-decode"; import { useEffect } from "react"; -import { useTwitchAuth } from "./use-twitch-auth"; +import { useSocialsLocalStorage } from "../hooks/use-socials"; +import { useTwitchAuth } from "../hooks/use-twitch-auth"; -export function SignInButton({ address }: { address: string }) { - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); - const [googleUserToken, setGoogleUserToken] = useLocalStorage( - `google-token-${address}`, - undefined, - ); - const [twitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); - const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, undefined); +export function SignInButton({ address }: { address: `0x${string}` }) { + const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken, setGoogleUserInfos, setGoogleUserToken } = + useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); useEffect(() => { diff --git a/zk-auth/package/src/components/sign-out-button.tsx b/zk-auth/package/src/components/sign-out-button.tsx new file mode 100644 index 0000000..66e3714 --- /dev/null +++ b/zk-auth/package/src/components/sign-out-button.tsx @@ -0,0 +1,40 @@ +"use client"; + +import { Button } from "@risc0/ui/button"; +import { useMounted } from "@risc0/ui/hooks/use-mounted"; +import { LogOutIcon } from "lucide-react"; +import { useSocialsLocalStorage } from "../hooks/use-socials"; + +export function SignOutButton({ address }: { address: `0x${string}` }) { + const mounted = useMounted(); + const { + setGoogleUserInfos, + setGoogleUserToken, + setTwitchUserInfos, + setTwitchUserToken, + googleUserInfos, + twitchUserInfos, + } = useSocialsLocalStorage({ address }); + + function signOut() { + // Strip URL parameters + const currentUrl = new URL(window.location.href); + window.history.replaceState({}, document.title, currentUrl.pathname); + + setGoogleUserToken(undefined); + setGoogleUserInfos(undefined); + + setTwitchUserToken(undefined); + setTwitchUserInfos(undefined); + } + + if (!mounted || !address || (!googleUserInfos && !twitchUserInfos)) { + return
; + } + + return ( + + ); +} diff --git a/zk-auth/package/src/twitch-user-infos.tsx b/zk-auth/package/src/components/twitch-user-infos.tsx similarity index 82% rename from zk-auth/package/src/twitch-user-infos.tsx rename to zk-auth/package/src/components/twitch-user-infos.tsx index 6b7e6ff..13dbfa1 100644 --- a/zk-auth/package/src/twitch-user-infos.tsx +++ b/zk-auth/package/src/components/twitch-user-infos.tsx @@ -2,13 +2,13 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function TwitchUserInfos({ userInfos }: { userInfos: any }) { return ( - -
+ +
{userInfos.display_name}
@@ -20,7 +20,7 @@ export function TwitchUserInfos({ userInfos }: { userInfos: any }) { {userInfos.email}

- Google + Twitch Twitch

diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts new file mode 100644 index 0000000..82b8fa7 --- /dev/null +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -0,0 +1,43 @@ +import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; + +function generateLocalStorageKey(provider: "google" | "twitch", identifier: string, address: `0x${string}`) { + return `${provider}-${identifier}-${address}`; +} + +export function useSocialsLocalStorage({ + address, +}: { + address: `0x${string}`; +}) { + // google + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage( + generateLocalStorageKey("google", "infos", address), + undefined, + ); + const [googleUserToken, setGoogleUserToken] = useLocalStorage( + generateLocalStorageKey("google", "token", address), + undefined, + ); + + // twitch + const [twitchUserInfos, setTwitchUserInfos] = useLocalStorage( + generateLocalStorageKey("twitch", "infos", address), + undefined, + ); + const [twitchUserToken, setTwitchUserToken] = useLocalStorage( + generateLocalStorageKey("twitch", "token", address), + undefined, + ); + + return { + googleUserInfos, + googleUserToken, + twitchUserInfos, + twitchUserToken, + + setGoogleUserInfos, + setGoogleUserToken, + setTwitchUserInfos, + setTwitchUserToken, + }; +} diff --git a/zk-auth/package/src/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts similarity index 77% rename from zk-auth/package/src/use-twitch-auth.ts rename to zk-auth/package/src/hooks/use-twitch-auth.ts index fe45de3..7a16742 100644 --- a/zk-auth/package/src/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -2,10 +2,9 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useCallback, useState } from "react"; const TWITCH_CLIENT_ID = "h7i920jmp37f1gwafkndd8xx1fcud1"; -const REDIRECT_URI = "http://localhost:3000"; -const TWITCH_AUTH_URL = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=token&scope=user:read:email`; +const TWITCH_REDIRECT_URI = window.location.origin; -export function useTwitchAuth({ address }: { address: string }) { +export function useTwitchAuth({ address }: { address: `0x${string}` }) { const [_twitchUserInfos, setTwitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); const [_twitchUserToken, setTwitchUserToken] = useLocalStorage( `twitch-token-${address}`, @@ -14,7 +13,7 @@ export function useTwitchAuth({ address }: { address: string }) { const [error, setError] = useState(null); const signInWithTwitch = useCallback(() => { - window.location.href = TWITCH_AUTH_URL; + window.location.href = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(TWITCH_REDIRECT_URI)}&response_type=token&scope=user:read:email`; }, []); const handleTwitchAuthCallback = useCallback(async () => { @@ -24,6 +23,7 @@ export function useTwitchAuth({ address }: { address: string }) { if (accessToken) { setTwitchUserToken(accessToken); + try { const response = await fetch("https://api.twitch.tv/helix/users", { headers: { @@ -33,13 +33,13 @@ export function useTwitchAuth({ address }: { address: string }) { }); if (!response.ok) { - throw new Error("Failed to fetch user info"); + throw new Error("Failed to fetch twitch user info"); } const data = await response.json(); setTwitchUserInfos(data.data[0]); } catch (err) { - setError("Failed to fetch user info"); + setError("Failed to fetch twitch user info"); console.error(err); } } diff --git a/zk-auth/package/src/sign-out-button.tsx b/zk-auth/package/src/sign-out-button.tsx deleted file mode 100644 index 8bc4719..0000000 --- a/zk-auth/package/src/sign-out-button.tsx +++ /dev/null @@ -1,27 +0,0 @@ -"use client"; - -import { Button } from "@risc0/ui/button"; -import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; -import { useMounted } from "@risc0/ui/hooks/use-mounted"; -import { LogOutIcon } from "lucide-react"; - -export function SignOutButton({ address }: { address: string }) { - const mounted = useMounted(); - const [_googleUserToken, setGoogleUserToken] = useLocalStorage(`google-token-${address}`, undefined); - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage(`google-infos-${address}`, undefined); - - function signOut() { - setGoogleUserToken(undefined); - setGoogleUserInfos(undefined); - } - - if (!mounted || !address || !googleUserInfos) { - return
; - } - - return ( - - ); -} diff --git a/zk-auth/package/src/do-snark-proving.ts b/zk-auth/package/src/utils/do-snark-proving.ts similarity index 100% rename from zk-auth/package/src/do-snark-proving.ts rename to zk-auth/package/src/utils/do-snark-proving.ts diff --git a/zk-auth/package/src/do-stark-proving.ts b/zk-auth/package/src/utils/do-stark-proving.ts similarity index 100% rename from zk-auth/package/src/do-stark-proving.ts rename to zk-auth/package/src/utils/do-stark-proving.ts diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index a0424a3..4796de8 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -3,22 +3,21 @@ import "./style.css"; import { GoogleOAuthProvider } from "@react-oauth/google"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import { useEffect, useState } from "react"; -import { ProveButton } from "./prove-button"; -import { SignInButton } from "./sign-in-button"; -import { SignOutButton } from "./sign-out-button"; +import { ProveButton } from "./components/prove-button"; +import { SignInButton } from "./components/sign-in-button"; +import { useSocialsLocalStorage } from "./hooks/use-socials"; export type ZkAuthProps = { - address: string; + address: `0x${string}`; onStarkComplete?: (starkResults: any) => void; onSnarkComplete?: (snarkResults: any) => void; }; export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { - const [twitchUserToken] = useLocalStorage(`twitch-token-${address}`, null); - const [googleUserToken] = useLocalStorage(`google-token-${address}`, null); - const [currentStep, setCurrentStep] = useState(1); + const { googleUserToken, twitchUserToken } = useSocialsLocalStorage({ address }); const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); + const [currentStep, setCurrentStep] = useState(1); useEffect(() => { if (!googleUserToken && !twitchUserToken) { diff --git a/zk-auth/public/twitch.svg b/zk-auth/public/twitch.svg new file mode 100644 index 0000000..649d5b6 --- /dev/null +++ b/zk-auth/public/twitch.svg @@ -0,0 +1 @@ + diff --git a/zk-socials/social_validator/methods/guest/src/main.rs b/zk-socials/social_validator/methods/guest/src/main.rs index 7dcb322..6ba6319 100644 --- a/zk-socials/social_validator/methods/guest/src/main.rs +++ b/zk-socials/social_validator/methods/guest/src/main.rs @@ -46,8 +46,13 @@ fn main() { .read_to_string(&mut input_str) .expect("could not read input string"); + // Trim the input string + let trimmed_input = input_str.trim(); + // Deserialize user input - let input: Input = serde_json::from_str(&input_str).expect("could not deserialize input"); + let input: Input = serde_json::from_str(trimmed_input).unwrap_or_else(|e| { + panic!("could not deserialize input: {:?}\nInput was: {}", e, trimmed_input); + }); // Validate the JWT let (email, public_key, expiration, issued_at, jwks) = input diff --git a/zk-socials/social_validator/oidc-validator/src/lib.rs b/zk-socials/social_validator/oidc-validator/src/lib.rs index 59c3ab2..9ea10d6 100644 --- a/zk-socials/social_validator/oidc-validator/src/lib.rs +++ b/zk-socials/social_validator/oidc-validator/src/lib.rs @@ -28,6 +28,7 @@ struct Extra { #[derive(Deserialize, Serialize)] pub enum IdentityProvider { Google, + Twitch, Test, } @@ -48,6 +49,14 @@ impl IdentityProvider { let iat = decoded.issued_at.unwrap().timestamp().to_string(); Ok((email, nonce, exp, iat, jwk_str.to_string())) } + Self::Twitch => { + let decoded = decode_token::(token, &jwk).unwrap(); + let email = decoded.custom.email.to_string(); + let nonce = decoded.custom.nonce.to_string(); + let exp = decoded.expiration.unwrap().timestamp().to_string(); + let iat = decoded.issued_at.unwrap().timestamp().to_string(); + Ok((email, nonce, exp, iat, jwk_str.to_string())) + } Self::Test => { let decoded = decode_token::(token, &jwk).unwrap(); let email = decoded.custom.email.to_string(); @@ -64,12 +73,26 @@ impl From for IdentityProvider { fn from(value: String) -> Self { match value.to_lowercase().as_str() { "google" => Self::Google, + "twitch" => Self::Twitch, "test" => Self::Test, _ => panic!("invalid identity provider"), } } } +#[derive(Deserialize, Serialize, Debug, Clone)] +pub struct TwitchClaims { + pub aud: String, + pub exp: i64, + pub iat: i64, + pub iss: String, + pub sub: String, + pub email: String, + pub nonce: String, + pub preferred_username: Option, + pub picture: Option, +} + #[derive(Deserialize, Serialize, Debug, Clone)] pub struct GoogleClaims { pub aud: String, From 3a6da37cbdf95e975504ff56926ac9dcbf8607bf Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 09:22:09 -0400 Subject: [PATCH 059/110] fix: add twitch tokens --- zk-auth/.env.example | 6 +-- .../src/components/google-user-infos.tsx | 10 ++-- .../src/components/twitch-user-infos.tsx | 4 +- zk-auth/package/src/hooks/use-twitch-auth.ts | 52 ++++++++++++------- zk-auth/src/app/api/twitch/get-token/route.ts | 44 ++++++++++++++++ zk-auth/src/env.js | 4 ++ 6 files changed, 92 insertions(+), 28 deletions(-) create mode 100644 zk-auth/src/app/api/twitch/get-token/route.ts diff --git a/zk-auth/.env.example b/zk-auth/.env.example index 3ffaa14..ff2c5ed 100644 --- a/zk-auth/.env.example +++ b/zk-auth/.env.example @@ -1,8 +1,8 @@ -# Public -NEXT_PUBLIC_GOOGLE_CLIENT_ID=381952934096-ahvjn5cj420qiosnjl2g4o2olpbuopf9.apps.googleusercontent.com - # Private BONSAI_VERSION=1.0.5 BONSAI_URL=https://api.staging.bonsai.xyz BONSAI_API_KEY= IMAGE_ID= 32 + +TWITCH_CLIENT_ID= +TWITCH_CLIENT_SECRET= diff --git a/zk-auth/package/src/components/google-user-infos.tsx b/zk-auth/package/src/components/google-user-infos.tsx index 1dc04a5..be26c98 100644 --- a/zk-auth/package/src/components/google-user-infos.tsx +++ b/zk-auth/package/src/components/google-user-infos.tsx @@ -3,13 +3,13 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function GoogleUserInfos({ userInfos }: { userInfos: any }) { return ( -
+
{userInfos.name}
@@ -19,7 +19,7 @@ export function GoogleUserInfos({ userInfos }: { userInfos: any }) {

{userInfos.email}

-

+

Google Google

diff --git a/zk-auth/package/src/components/twitch-user-infos.tsx b/zk-auth/package/src/components/twitch-user-infos.tsx index 13dbfa1..a3670d4 100644 --- a/zk-auth/package/src/components/twitch-user-infos.tsx +++ b/zk-auth/package/src/components/twitch-user-infos.tsx @@ -9,7 +9,7 @@ export function TwitchUserInfos({ userInfos }: { userInfos: any }) { alt={userInfos.display_name} width={64} height={64} - className="rounded-md shadow-xs pointer-events-none" + className="rounded-sm shadow-xs pointer-events-none" />
@@ -19,7 +19,7 @@ export function TwitchUserInfos({ userInfos }: { userInfos: any }) {

{userInfos.email}

-

+

Twitch Twitch

diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 7a16742..25b877d 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -6,54 +6,70 @@ const TWITCH_REDIRECT_URI = window.location.origin; export function useTwitchAuth({ address }: { address: `0x${string}` }) { const [_twitchUserInfos, setTwitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); - const [_twitchUserToken, setTwitchUserToken] = useLocalStorage( - `twitch-token-${address}`, - undefined, - ); + const [_accessToken, setAccessToken] = useLocalStorage(`twitch-token-${address}`, undefined); const [error, setError] = useState(null); + const [idToken, setIdToken] = useLocalStorage(`twitch-id-token-${address}`, undefined); - const signInWithTwitch = useCallback(() => { - window.location.href = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(TWITCH_REDIRECT_URI)}&response_type=token&scope=user:read:email`; - }, []); + function signInWithTwitch() { + window.location.href = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(TWITCH_REDIRECT_URI)}&response_type=token&scope=user:read:email openid`; + } - const handleTwitchAuthCallback = useCallback(async () => { + async function handleTwitchAuthCallback() { const hash = window.location.hash.substring(1); const params = new URLSearchParams(hash); const accessToken = params.get("access_token"); if (accessToken) { - setTwitchUserToken(accessToken); + setAccessToken(accessToken); try { - const response = await fetch("https://api.twitch.tv/helix/users", { + // Fetch user info + const userInfoResponse = await fetch("https://api.twitch.tv/helix/users", { headers: { Authorization: `Bearer ${accessToken}`, "Client-Id": TWITCH_CLIENT_ID, }, }); - if (!response.ok) { + if (!userInfoResponse.ok) { throw new Error("Failed to fetch twitch user info"); } - const data = await response.json(); - setTwitchUserInfos(data.data[0]); + const userData = await userInfoResponse.json(); + setTwitchUserInfos(userData.data[0]); + + // Fetch ID token + const idTokenResponse = await fetch("https://id.twitch.tv/oauth2/userinfo", { + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); + + if (!idTokenResponse.ok) { + throw new Error("Failed to fetch ID token"); + } + + const idTokenData = await idTokenResponse.json(); + setIdToken(idTokenData.sub); // 'sub' is the user's Twitch ID, which serves as the ID token } catch (err) { - setError("Failed to fetch twitch user info"); + setError("Failed to fetch twitch user info or ID token"); console.error(err); } } - }, [setTwitchUserToken, setTwitchUserInfos]); + } - const signOut = useCallback(() => { - setTwitchUserToken(undefined); + function signOut() { + setAccessToken(undefined); setTwitchUserInfos(undefined); - }, [setTwitchUserToken, setTwitchUserInfos]); + setIdToken(undefined); + } return { error, signInWithTwitch, handleTwitchAuthCallback, signOut, + accessToken: _accessToken, + userInfo: _twitchUserInfos, }; } diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts new file mode 100644 index 0000000..bfb0a6a --- /dev/null +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -0,0 +1,44 @@ +import { NextResponse } from "next/server"; +import env from "~/env"; + +async function getTwitchJWT(accessToken: string) { + try { + const params = new URLSearchParams({ + client_id: env.TWITCH_CLIENT_ID, + client_secret: env.TWITCH_CLIENT_SECRET, + grant_type: "client_credentials", + scope: "openid", + }); + + const response = await fetch(`https://id.twitch.tv/oauth2/token?${params}`, { + method: "POST", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/x-www-form-urlencoded", + }, + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + return data.id_token; // This is the JWT + } catch (error) { + console.error("Error getting Twitch JWT:", error); + throw error; + } +} + +export async function POST(request: Request) { + try { + const { accessToken } = await request.json(); + const jwt = await getTwitchJWT(accessToken); + + return NextResponse.json({ jwt }); + } catch (error) { + console.error("Failed to get JWT:", error); + return NextResponse.json({ error: "Failed to get JWT" }, { status: 500 }); + } +} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index e1c73b2..9489a4e 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -9,6 +9,8 @@ const env = createEnv({ * Specify server-side environment variables schema here. */ server: { + TWITCH_CLIENT_ID: z.string(), + TWITCH_CLIENT_SECRET: z.string(), BONSAI_VERSION: z.string(), BONSAI_API_KEY: z.string(), BONSAI_URL: z.string(), @@ -28,6 +30,8 @@ const env = createEnv({ */ runtimeEnv: { // Server-side environment variables + TWITCH_CLIENT_ID: process.env.TWITCH_CLIENT_ID, + TWITCH_CLIENT_SECRET: process.env.TWITCH_CLIENT_SECRET, BONSAI_VERSION: process.env.BONSAI_VERSION, BONSAI_API_KEY: process.env.BONSAI_API_KEY, BONSAI_URL: process.env.BONSAI_URL, From a8f66a23c03fb44b64a6876bd34e158417c10e7c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 09:30:36 -0400 Subject: [PATCH 060/110] fix: add twitch tokens2 --- zk-auth/package/src/hooks/use-twitch-auth.ts | 46 ++++++++----------- zk-auth/src/app/api/twitch/get-token/route.ts | 19 +++++++- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 25b877d..5137ab5 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -1,27 +1,25 @@ -import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; -import { useCallback, useState } from "react"; +import { useState } from "react"; +import { useSocialsLocalStorage } from "./use-socials"; const TWITCH_CLIENT_ID = "h7i920jmp37f1gwafkndd8xx1fcud1"; const TWITCH_REDIRECT_URI = window.location.origin; export function useTwitchAuth({ address }: { address: `0x${string}` }) { - const [_twitchUserInfos, setTwitchUserInfos] = useLocalStorage(`twitch-infos-${address}`, undefined); - const [_accessToken, setAccessToken] = useLocalStorage(`twitch-token-${address}`, undefined); const [error, setError] = useState(null); - const [idToken, setIdToken] = useLocalStorage(`twitch-id-token-${address}`, undefined); + const { setTwitchUserInfos, setTwitchUserToken } = useSocialsLocalStorage({ address }); function signInWithTwitch() { window.location.href = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(TWITCH_REDIRECT_URI)}&response_type=token&scope=user:read:email openid`; } async function handleTwitchAuthCallback() { + console.log("handleTwitchAuthCallback"); const hash = window.location.hash.substring(1); const params = new URLSearchParams(hash); const accessToken = params.get("access_token"); + console.log("accessToken", accessToken); if (accessToken) { - setAccessToken(accessToken); - try { // Fetch user info const userInfoResponse = await fetch("https://api.twitch.tv/helix/users", { @@ -30,46 +28,42 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { "Client-Id": TWITCH_CLIENT_ID, }, }); - + console.log("userInfoResponse", userInfoResponse); if (!userInfoResponse.ok) { throw new Error("Failed to fetch twitch user info"); } const userData = await userInfoResponse.json(); + console.log("userData", userData); + setTwitchUserInfos(userData.data[0]); - // Fetch ID token - const idTokenResponse = await fetch("https://id.twitch.tv/oauth2/userinfo", { + // Fetch JWT from our endpoint + const jwtResponse = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { + method: "POST", headers: { - Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", }, + body: JSON.stringify({ accessToken }), }); - - if (!idTokenResponse.ok) { - throw new Error("Failed to fetch ID token"); + console.log("jwtResponse", jwtResponse); + if (!jwtResponse.ok) { + throw new Error("Failed to fetch JWT"); } - const idTokenData = await idTokenResponse.json(); - setIdToken(idTokenData.sub); // 'sub' is the user's Twitch ID, which serves as the ID token + const { jwt: twitchJwt } = await jwtResponse.json(); + console.log("twitchJwt", twitchJwt); + setTwitchUserToken(twitchJwt); } catch (err) { - setError("Failed to fetch twitch user info or ID token"); + setError("Failed to fetch twitch user info or JWT"); console.error(err); } } } - function signOut() { - setAccessToken(undefined); - setTwitchUserInfos(undefined); - setIdToken(undefined); - } - return { error, signInWithTwitch, handleTwitchAuthCallback, - signOut, - accessToken: _accessToken, - userInfo: _twitchUserInfos, }; } diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index bfb0a6a..e6d581a 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -10,6 +10,8 @@ async function getTwitchJWT(accessToken: string) { scope: "openid", }); + console.log("params", params); + const response = await fetch(`https://id.twitch.tv/oauth2/token?${params}`, { method: "POST", headers: { @@ -18,13 +20,24 @@ async function getTwitchJWT(accessToken: string) { }, }); + console.log("response", response); + if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); - return data.id_token; // This is the JWT + console.log("data", data); + + if (!data.id_token) { + console.error("Twitch response:", data); + throw new Error("No id_token in Twitch response"); + } + + console.log("data.id_token", data.id_token); + + return data.id_token; } catch (error) { console.error("Error getting Twitch JWT:", error); throw error; @@ -36,9 +49,11 @@ export async function POST(request: Request) { const { accessToken } = await request.json(); const jwt = await getTwitchJWT(accessToken); + console.log("jwt", jwt); + return NextResponse.json({ jwt }); } catch (error) { console.error("Failed to get JWT:", error); - return NextResponse.json({ error: "Failed to get JWT" }, { status: 500 }); + return NextResponse.json({ error: String(error) }, { status: 500 }); } } From 9a3f042128325605b42c3821a21c977e81e8dcc7 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:08:03 -0400 Subject: [PATCH 061/110] fix: add twitch tokens3 --- .../package/src/components/sign-in-button.tsx | 11 ++- zk-auth/package/src/hooks/use-twitch-auth.ts | 86 +++++++------------ zk-auth/src/app/api/twitch/get-token/route.ts | 14 ++- 3 files changed, 46 insertions(+), 65 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 20bdb6b..7ac8575 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -5,6 +5,11 @@ import { useEffect } from "react"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; +function getQueryParam(param: string): string | null { + const searchParams = new URLSearchParams(window.location.search); + return searchParams.get(param); +} + export function SignInButton({ address }: { address: `0x${string}` }) { const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken, setGoogleUserInfos, setGoogleUserToken } = useSocialsLocalStorage({ address }); @@ -23,9 +28,11 @@ export function SignInButton({ address }: { address: `0x${string}` }) { return; } + const code = getQueryParam("code"); + // Handle the Twitch auth callback - if (window.location.hash.includes("access_token") && !twitchUserInfos) { - handleTwitchAuthCallback(); + if (code && !twitchUserInfos) { + handleTwitchAuthCallback(code); } }, [handleTwitchAuthCallback, twitchUserInfos, twitchUserToken]); diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 5137ab5..4665356 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -1,65 +1,43 @@ -import { useState } from "react"; -import { useSocialsLocalStorage } from "./use-socials"; +import { useCallback, useState } from "react"; -const TWITCH_CLIENT_ID = "h7i920jmp37f1gwafkndd8xx1fcud1"; +const TWITCH_CLIENT_ID = "sue2yrycv0enft61awlptyw4xfpl7z"; const TWITCH_REDIRECT_URI = window.location.origin; export function useTwitchAuth({ address }: { address: `0x${string}` }) { const [error, setError] = useState(null); - const { setTwitchUserInfos, setTwitchUserToken } = useSocialsLocalStorage({ address }); - function signInWithTwitch() { - window.location.href = `https://id.twitch.tv/oauth2/authorize?client_id=${TWITCH_CLIENT_ID}&redirect_uri=${encodeURIComponent(TWITCH_REDIRECT_URI)}&response_type=token&scope=user:read:email openid`; - } - - async function handleTwitchAuthCallback() { - console.log("handleTwitchAuthCallback"); - const hash = window.location.hash.substring(1); - const params = new URLSearchParams(hash); - const accessToken = params.get("access_token"); - console.log("accessToken", accessToken); - - if (accessToken) { - try { - // Fetch user info - const userInfoResponse = await fetch("https://api.twitch.tv/helix/users", { - headers: { - Authorization: `Bearer ${accessToken}`, - "Client-Id": TWITCH_CLIENT_ID, - }, - }); - console.log("userInfoResponse", userInfoResponse); - if (!userInfoResponse.ok) { - throw new Error("Failed to fetch twitch user info"); - } - - const userData = await userInfoResponse.json(); - console.log("userData", userData); - - setTwitchUserInfos(userData.data[0]); - - // Fetch JWT from our endpoint - const jwtResponse = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ accessToken }), - }); - console.log("jwtResponse", jwtResponse); - if (!jwtResponse.ok) { - throw new Error("Failed to fetch JWT"); - } - - const { jwt: twitchJwt } = await jwtResponse.json(); - console.log("twitchJwt", twitchJwt); - setTwitchUserToken(twitchJwt); - } catch (err) { - setError("Failed to fetch twitch user info or JWT"); - console.error(err); + const signInWithTwitch = useCallback(() => { + const nonce = address; + + const authUrl = new URL("https://id.twitch.tv/oauth2/authorize"); + authUrl.searchParams.append("client_id", TWITCH_CLIENT_ID); + authUrl.searchParams.append("redirect_uri", TWITCH_REDIRECT_URI); + authUrl.searchParams.append("response_type", "code"); + authUrl.searchParams.append("scope", "openid"); + authUrl.searchParams.append("nonce", nonce); + + window.location.href = authUrl.toString(); + }, [address]); + + const handleTwitchAuthCallback = useCallback(async (code: string) => { + console.log("code", code); + try { + const response = await fetch("/api/twitch/token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code }), + }); + + if (!response.ok) { + throw new Error("Failed to fetch tokens"); } + + const { id_token, user_info } = await response.json(); + } catch (err) { + setError("Failed to authenticate with Twitch"); + console.error(err); } - } + }, []); return { error, diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index e6d581a..f05e139 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -1,23 +1,19 @@ import { NextResponse } from "next/server"; import env from "~/env"; -async function getTwitchJWT(accessToken: string) { +async function getTwitchJWT(code: string) { try { const params = new URLSearchParams({ client_id: env.TWITCH_CLIENT_ID, client_secret: env.TWITCH_CLIENT_SECRET, - grant_type: "client_credentials", - scope: "openid", + code, + grant_type: "authorization_code", }); console.log("params", params); const response = await fetch(`https://id.twitch.tv/oauth2/token?${params}`, { method: "POST", - headers: { - Authorization: `Bearer ${accessToken}`, - "Content-Type": "application/x-www-form-urlencoded", - }, }); console.log("response", response); @@ -46,8 +42,8 @@ async function getTwitchJWT(accessToken: string) { export async function POST(request: Request) { try { - const { accessToken } = await request.json(); - const jwt = await getTwitchJWT(accessToken); + const { code } = await request.json(); + const jwt = await getTwitchJWT(code); console.log("jwt", jwt); From 1aa7bfc35bf0a9a73b82393d5a9b770405698c1a Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:13:24 -0400 Subject: [PATCH 062/110] fix: add twitch tokens4 --- zk-auth/package/src/hooks/use-twitch-auth.ts | 2 +- zk-auth/src/app/api/twitch/get-token/route.ts | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 4665356..7822e8c 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -22,7 +22,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { const handleTwitchAuthCallback = useCallback(async (code: string) => { console.log("code", code); try { - const response = await fetch("/api/twitch/token", { + const response = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ code }), diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index f05e139..27172a9 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -3,17 +3,20 @@ import env from "~/env"; async function getTwitchJWT(code: string) { try { - const params = new URLSearchParams({ - client_id: env.TWITCH_CLIENT_ID, - client_secret: env.TWITCH_CLIENT_SECRET, - code, - grant_type: "authorization_code", - }); - console.log("params", params); - const response = await fetch(`https://id.twitch.tv/oauth2/token?${params}`, { + const response = await fetch("https://id.twitch.tv/oauth2/token", { method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: JSON.stringify({ + client_id: env.TWITCH_CLIENT_ID, + client_secret: env.TWITCH_CLIENT_SECRET, + code, + grant_type: "authorization_code", + //redirect_uri: `${redirectUri}/api/twitch/get-token`, + }), }); console.log("response", response); From f0c2b7c05346f10fdc73f8a8416830686014168b Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:16:15 -0400 Subject: [PATCH 063/110] fix: add twitch tokens5 --- zk-auth/src/app/api/twitch/get-token/route.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index 27172a9..cca6632 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -3,8 +3,6 @@ import env from "~/env"; async function getTwitchJWT(code: string) { try { - console.log("params", params); - const response = await fetch("https://id.twitch.tv/oauth2/token", { method: "POST", headers: { From 22a7b68fc464d09e5fd62f6c553ec4cead293464 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:19:26 -0400 Subject: [PATCH 064/110] fix: add twitch tokens6 --- zk-auth/src/app/api/twitch/get-token/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index cca6632..c2a4de1 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -13,7 +13,7 @@ async function getTwitchJWT(code: string) { client_secret: env.TWITCH_CLIENT_SECRET, code, grant_type: "authorization_code", - //redirect_uri: `${redirectUri}/api/twitch/get-token`, + redirect_uri: "http://localhost:3000", }), }); From a66d839f85f64e8026421e865d47dc41cf95fec7 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:26:25 -0400 Subject: [PATCH 065/110] fix: add twitch tokens7 --- zk-auth/src/app/api/twitch/get-token/route.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index c2a4de1..88a16b9 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -3,23 +3,28 @@ import env from "~/env"; async function getTwitchJWT(code: string) { try { + const params = new URLSearchParams(); + params.append("client_id", env.TWITCH_CLIENT_ID); + params.append("client_secret", env.TWITCH_CLIENT_SECRET); + params.append("code", code); + params.append("grant_type", "authorization_code"); + params.append("redirect_uri", "http://localhost:3000"); + + console.log("params", params); + const response = await fetch("https://id.twitch.tv/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, - body: JSON.stringify({ - client_id: env.TWITCH_CLIENT_ID, - client_secret: env.TWITCH_CLIENT_SECRET, - code, - grant_type: "authorization_code", - redirect_uri: "http://localhost:3000", - }), + body: params, }); console.log("response", response); if (!response.ok) { + const errorText = await response.text(); + console.error("Twitch API Error:", response.status, errorText); throw new Error(`HTTP error! status: ${response.status}`); } @@ -46,8 +51,6 @@ export async function POST(request: Request) { const { code } = await request.json(); const jwt = await getTwitchJWT(code); - console.log("jwt", jwt); - return NextResponse.json({ jwt }); } catch (error) { console.error("Failed to get JWT:", error); From acf9222aefff4bfd9cadcf7c7a654bc388e8ba4d Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:35:43 -0400 Subject: [PATCH 066/110] fix: add twitch tokens8 --- zk-auth/package/src/hooks/use-twitch-auth.ts | 45 ++++++++------ zk-auth/src/app/api/twitch/get-token/route.ts | 59 ++++++++++++------- 2 files changed, 63 insertions(+), 41 deletions(-) diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 7822e8c..e4fdabb 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -1,9 +1,11 @@ import { useCallback, useState } from "react"; +import { useSocialsLocalStorage } from "./use-socials"; const TWITCH_CLIENT_ID = "sue2yrycv0enft61awlptyw4xfpl7z"; const TWITCH_REDIRECT_URI = window.location.origin; export function useTwitchAuth({ address }: { address: `0x${string}` }) { + const { setTwitchUserToken } = useSocialsLocalStorage({ address }); const [error, setError] = useState(null); const signInWithTwitch = useCallback(() => { @@ -13,31 +15,36 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { authUrl.searchParams.append("client_id", TWITCH_CLIENT_ID); authUrl.searchParams.append("redirect_uri", TWITCH_REDIRECT_URI); authUrl.searchParams.append("response_type", "code"); - authUrl.searchParams.append("scope", "openid"); + authUrl.searchParams.append("scope", "openid user:read:email"); authUrl.searchParams.append("nonce", nonce); window.location.href = authUrl.toString(); }, [address]); - const handleTwitchAuthCallback = useCallback(async (code: string) => { - console.log("code", code); - try { - const response = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ code }), - }); - - if (!response.ok) { - throw new Error("Failed to fetch tokens"); + const handleTwitchAuthCallback = useCallback( + async (code: string) => { + console.log("code", code); + try { + const response = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code }), + }); + + const { jwt } = await response.json(); + + console.log("jwt", jwt); + + if (jwt) { + setTwitchUserToken(jwt); + } + } catch (err) { + setError("Failed to authenticate with Twitch"); + console.error(err); } - - const { id_token, user_info } = await response.json(); - } catch (err) { - setError("Failed to authenticate with Twitch"); - console.error(err); - } - }, []); + }, + [setTwitchUserToken], + ); return { error, diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index 88a16b9..e487fec 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -1,27 +1,23 @@ import { NextResponse } from "next/server"; import env from "~/env"; -async function getTwitchJWT(code: string) { +async function getTwitchTokensAndEmail(code: string) { try { - const params = new URLSearchParams(); - params.append("client_id", env.TWITCH_CLIENT_ID); - params.append("client_secret", env.TWITCH_CLIENT_SECRET); - params.append("code", code); - params.append("grant_type", "authorization_code"); - params.append("redirect_uri", "http://localhost:3000"); - - console.log("params", params); + const body = new URLSearchParams(); + body.append("client_id", env.TWITCH_CLIENT_ID); + body.append("client_secret", env.TWITCH_CLIENT_SECRET); + body.append("code", code); + body.append("grant_type", "authorization_code"); + body.append("redirect_uri", "http://localhost:3000"); const response = await fetch("https://id.twitch.tv/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, - body: params, + body, }); - console.log("response", response); - if (!response.ok) { const errorText = await response.text(); console.error("Twitch API Error:", response.status, errorText); @@ -30,18 +26,33 @@ async function getTwitchJWT(code: string) { const data = await response.json(); - console.log("data", data); - - if (!data.id_token) { + if (!data.access_token) { console.error("Twitch response:", data); - throw new Error("No id_token in Twitch response"); + throw new Error("No access_token in Twitch response"); + } + + // Now use the access token to get user info + const userInfoResponse = await fetch("https://api.twitch.tv/helix/users", { + headers: { + Authorization: `Bearer ${data.access_token}`, + "Client-Id": env.TWITCH_CLIENT_ID, + }, + }); + + if (!userInfoResponse.ok) { + throw new Error(`HTTP error! status: ${userInfoResponse.status}`); } - console.log("data.id_token", data.id_token); + const userInfo = await userInfoResponse.json(); + const email = userInfo.data[0]?.email; - return data.id_token; + return { + id_token: data.id_token, + access_token: data.access_token, + email: email, + }; } catch (error) { - console.error("Error getting Twitch JWT:", error); + console.error("Error getting Twitch tokens and email:", error); throw error; } } @@ -49,11 +60,15 @@ async function getTwitchJWT(code: string) { export async function POST(request: Request) { try { const { code } = await request.json(); - const jwt = await getTwitchJWT(code); + const { id_token, access_token, email } = await getTwitchTokensAndEmail(code); - return NextResponse.json({ jwt }); + return NextResponse.json({ + jwt: id_token, + access_token: access_token, + email: email, + }); } catch (error) { - console.error("Failed to get JWT:", error); + console.error("Failed to get tokens and email:", error); return NextResponse.json({ error: String(error) }, { status: 500 }); } } From 29c4687628d46dfd5782c48dc12f519895de2a2c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 10:45:54 -0400 Subject: [PATCH 067/110] fix: add twitch tokens9 --- .../package/src/components/sign-in-button.tsx | 8 ++++- zk-auth/package/src/hooks/use-socials.ts | 4 +-- zk-auth/package/src/hooks/use-twitch-auth.ts | 15 +++++--- zk-auth/src/app/api/twitch/get-token/route.ts | 34 +++++++++++-------- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 7ac8575..bd444f7 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -20,7 +20,13 @@ export function SignInButton({ address }: { address: `0x${string}` }) { return; } - setGoogleUserInfos(jwtDecode(googleUserToken)); + const { name, email, picture } = jwtDecode(googleUserToken) as any; + + setGoogleUserInfos({ + name, + email, + picture, + }); }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); useEffect(() => { diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index 82b8fa7..f4cf116 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -10,7 +10,7 @@ export function useSocialsLocalStorage({ address: `0x${string}`; }) { // google - const [googleUserInfos, setGoogleUserInfos] = useLocalStorage( + const [googleUserInfos, setGoogleUserInfos] = useLocalStorage( generateLocalStorageKey("google", "infos", address), undefined, ); @@ -20,7 +20,7 @@ export function useSocialsLocalStorage({ ); // twitch - const [twitchUserInfos, setTwitchUserInfos] = useLocalStorage( + const [twitchUserInfos, setTwitchUserInfos] = useLocalStorage( generateLocalStorageKey("twitch", "infos", address), undefined, ); diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index e4fdabb..8940095 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -5,7 +5,7 @@ const TWITCH_CLIENT_ID = "sue2yrycv0enft61awlptyw4xfpl7z"; const TWITCH_REDIRECT_URI = window.location.origin; export function useTwitchAuth({ address }: { address: `0x${string}` }) { - const { setTwitchUserToken } = useSocialsLocalStorage({ address }); + const { setTwitchUserToken, setTwitchUserInfos } = useSocialsLocalStorage({ address }); const [error, setError] = useState(null); const signInWithTwitch = useCallback(() => { @@ -15,7 +15,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { authUrl.searchParams.append("client_id", TWITCH_CLIENT_ID); authUrl.searchParams.append("redirect_uri", TWITCH_REDIRECT_URI); authUrl.searchParams.append("response_type", "code"); - authUrl.searchParams.append("scope", "openid user:read:email"); + authUrl.searchParams.append("scope", "openid user:read:email "); authUrl.searchParams.append("nonce", nonce); window.location.href = authUrl.toString(); @@ -31,7 +31,14 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { body: JSON.stringify({ code }), }); - const { jwt } = await response.json(); + // wipe the url + window.history.replaceState({}, "", window.location.href); + + console.log("response", response); + const { jwt, email, profile_image_url, display_name } = await response.json(); + console.log("{ email, profile_image_url, display_name }", { email, profile_image_url, display_name }); + + setTwitchUserInfos({ email, profile_image_url, display_name }); console.log("jwt", jwt); @@ -43,7 +50,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { console.error(err); } }, - [setTwitchUserToken], + [setTwitchUserToken, setTwitchUserInfos], ); return { diff --git a/zk-auth/src/app/api/twitch/get-token/route.ts b/zk-auth/src/app/api/twitch/get-token/route.ts index e487fec..e5e0e3f 100644 --- a/zk-auth/src/app/api/twitch/get-token/route.ts +++ b/zk-auth/src/app/api/twitch/get-token/route.ts @@ -1,21 +1,21 @@ import { NextResponse } from "next/server"; import env from "~/env"; -async function getTwitchTokensAndEmail(code: string) { +async function getTwitchTokensAndUserInfo(code: string) { try { - const body = new URLSearchParams(); - body.append("client_id", env.TWITCH_CLIENT_ID); - body.append("client_secret", env.TWITCH_CLIENT_SECRET); - body.append("code", code); - body.append("grant_type", "authorization_code"); - body.append("redirect_uri", "http://localhost:3000"); + const params = new URLSearchParams(); + params.append("client_id", env.TWITCH_CLIENT_ID); + params.append("client_secret", env.TWITCH_CLIENT_SECRET); + params.append("code", code); + params.append("grant_type", "authorization_code"); + params.append("redirect_uri", "http://localhost:3000"); const response = await fetch("https://id.twitch.tv/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, - body, + body: params, }); if (!response.ok) { @@ -44,15 +44,17 @@ async function getTwitchTokensAndEmail(code: string) { } const userInfo = await userInfoResponse.json(); - const email = userInfo.data[0]?.email; + const userData = userInfo.data[0]; return { id_token: data.id_token, access_token: data.access_token, - email: email, + email: userData?.email, + profile_image_url: userData?.profile_image_url, + display_name: userData?.display_name, }; } catch (error) { - console.error("Error getting Twitch tokens and email:", error); + console.error("Error getting Twitch tokens and user info:", error); throw error; } } @@ -60,15 +62,17 @@ async function getTwitchTokensAndEmail(code: string) { export async function POST(request: Request) { try { const { code } = await request.json(); - const { id_token, access_token, email } = await getTwitchTokensAndEmail(code); + const { id_token, access_token, email, profile_image_url, display_name } = await getTwitchTokensAndUserInfo(code); return NextResponse.json({ jwt: id_token, - access_token: access_token, - email: email, + access_token, + display_name, + email, + profile_image_url, }); } catch (error) { - console.error("Failed to get tokens and email:", error); + console.error("Failed to get tokens and user info:", error); return NextResponse.json({ error: String(error) }, { status: 500 }); } } From 59d07cafc0bd6d3ff2feff1daf5ec1fc93b5aa54 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 11:06:35 -0400 Subject: [PATCH 068/110] fix: add twitch tokens10 --- .../package/src/components/sign-in-button.tsx | 31 +++++++++++++------ zk-auth/package/src/hooks/use-twitch-auth.ts | 15 ++++----- zk-auth/src/app/_lib/bonsai-proving.ts | 12 +++++++ 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index bd444f7..b09fdfc 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -5,13 +5,15 @@ import { useEffect } from "react"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; -function getQueryParam(param: string): string | null { - const searchParams = new URLSearchParams(window.location.search); - return searchParams.get(param); +function cleanUrl() { + const url = new URL(window.location.href); + url.search = ""; + url.hash = ""; + window.history.replaceState({}, document.title, url.toString()); } export function SignInButton({ address }: { address: `0x${string}` }) { - const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken, setGoogleUserInfos, setGoogleUserToken } = + const { googleUserInfos, twitchUserToken, googleUserToken, setGoogleUserInfos, setGoogleUserToken } = useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); @@ -30,17 +32,26 @@ export function SignInButton({ address }: { address: `0x${string}` }) { }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); useEffect(() => { - if (twitchUserToken && twitchUserInfos) { + if (twitchUserToken) { return; } - const code = getQueryParam("code"); + async function handleAuth() { + const code = new URLSearchParams(window.location.search).get("code"); - // Handle the Twitch auth callback - if (code && !twitchUserInfos) { - handleTwitchAuthCallback(code); + if (code) { + try { + await handleTwitchAuthCallback(code); + + cleanUrl(); + } catch (error) { + console.error("Auth error:", error); + } + } } - }, [handleTwitchAuthCallback, twitchUserInfos, twitchUserToken]); + + handleAuth(); + }, [handleTwitchAuthCallback, twitchUserToken]); return ( <> diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 8940095..6ee965a 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -15,7 +15,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { authUrl.searchParams.append("client_id", TWITCH_CLIENT_ID); authUrl.searchParams.append("redirect_uri", TWITCH_REDIRECT_URI); authUrl.searchParams.append("response_type", "code"); - authUrl.searchParams.append("scope", "openid user:read:email "); + authUrl.searchParams.append("scope", "openid user:read:email"); authUrl.searchParams.append("nonce", nonce); window.location.href = authUrl.toString(); @@ -23,7 +23,6 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { const handleTwitchAuthCallback = useCallback( async (code: string) => { - console.log("code", code); try { const response = await fetch("https://zkauth.vercel.app/api/twitch/get-token", { method: "POST", @@ -31,17 +30,15 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { body: JSON.stringify({ code }), }); - // wipe the url - window.history.replaceState({}, "", window.location.href); + if (!response.ok) { + setError("Failed to authenticate with Twitch"); + return; + } - console.log("response", response); const { jwt, email, profile_image_url, display_name } = await response.json(); - console.log("{ email, profile_image_url, display_name }", { email, profile_image_url, display_name }); setTwitchUserInfos({ email, profile_image_url, display_name }); - console.log("jwt", jwt); - if (jwt) { setTwitchUserToken(jwt); } @@ -50,7 +47,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { console.error(err); } }, - [setTwitchUserToken, setTwitchUserInfos], + [setTwitchUserInfos, setTwitchUserToken], ); return { diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 4292ac6..731a271 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -124,6 +124,9 @@ class Client { // STARK export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { + console.log("iss", iss); + console.log("token", token); + // TODO: Add others, if applicable let jwks = ""; @@ -135,6 +138,15 @@ export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twit jwks = await getTwitchCerts(); } + console.log("jwks", jwks); + console.log( + JSON.stringify({ + iss, + jwks, + jwt: token, + }), + ); + const inputData = Buffer.from( encodeString( JSON.stringify({ From a4323445593b4aba454b2d5d535f575745e1aa21 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 11:28:18 -0400 Subject: [PATCH 069/110] fix: add twitch tokens11 --- .../social_validator/oidc-validator/src/lib.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/zk-socials/social_validator/oidc-validator/src/lib.rs b/zk-socials/social_validator/oidc-validator/src/lib.rs index 9ea10d6..0ec7325 100644 --- a/zk-socials/social_validator/oidc-validator/src/lib.rs +++ b/zk-socials/social_validator/oidc-validator/src/lib.rs @@ -50,13 +50,13 @@ impl IdentityProvider { Ok((email, nonce, exp, iat, jwk_str.to_string())) } Self::Twitch => { - let decoded = decode_token::(token, &jwk).unwrap(); - let email = decoded.custom.email.to_string(); - let nonce = decoded.custom.nonce.to_string(); - let exp = decoded.expiration.unwrap().timestamp().to_string(); - let iat = decoded.issued_at.unwrap().timestamp().to_string(); - Ok((email, nonce, exp, iat, jwk_str.to_string())) - } + let decoded = decode_token::(token, &jwk).unwrap(); + let nonce = decoded.custom.nonce.to_string(); + let exp = decoded.expiration.unwrap().timestamp().to_string(); + let iat = decoded.issued_at.unwrap().timestamp().to_string(); + let preferred_username = decoded.custom.preferred_username.to_string(); + Ok((preferred_username, nonce, exp, iat, jwk_str.to_string())) // Return preferred_username instead of email + } Self::Test => { let decoded = decode_token::(token, &jwk).unwrap(); let email = decoded.custom.email.to_string(); @@ -87,10 +87,8 @@ pub struct TwitchClaims { pub iat: i64, pub iss: String, pub sub: String, - pub email: String, pub nonce: String, - pub preferred_username: Option, - pub picture: Option, + pub preferred_username: String, } #[derive(Deserialize, Serialize, Debug, Clone)] From e7d2d67d495fd58232d3d709fe8d2dbf8e112671 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 13:24:52 -0400 Subject: [PATCH 070/110] fix: ran biome --- zk-auth/biome.jsonc | 3 +++ zk-auth/package.json | 1 + .../package/src/components/border-beam.tsx | 2 +- .../src/components/google-user-infos.tsx | 8 +++---- .../package/src/components/prove-button.tsx | 24 +++++++++---------- .../package/src/components/sign-in-button.tsx | 2 +- .../src/components/twitch-user-infos.tsx | 8 +++---- zk-auth/package/src/example.tsx | 2 +- zk-auth/package/src/hooks/use-socials.ts | 3 ++- .../package/src/types/supported-providers.ts | 1 + zk-auth/package/src/utils/do-stark-proving.ts | 9 ++++--- zk-auth/package/src/zk-auth.tsx | 2 +- zk-auth/src/app/_lib/bonsai-proving.ts | 12 ---------- zk-auth/tsconfig.json | 20 ++++++++-------- 14 files changed, 44 insertions(+), 53 deletions(-) create mode 100644 zk-auth/biome.jsonc create mode 100644 zk-auth/package/src/types/supported-providers.ts diff --git a/zk-auth/biome.jsonc b/zk-auth/biome.jsonc new file mode 100644 index 0000000..9d6d28f --- /dev/null +++ b/zk-auth/biome.jsonc @@ -0,0 +1,3 @@ +{ + "extends": ["./node_modules/@risc0/ui/config/biome.base.jsonc"] +} diff --git a/zk-auth/package.json b/zk-auth/package.json index 49d1385..6df8a59 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "build": "next build", + "check": "bunx @biomejs/biome check --write --unsafe .", "dev": "next dev --turbo", "start": "next start" }, diff --git a/zk-auth/package/src/components/border-beam.tsx b/zk-auth/package/src/components/border-beam.tsx index c53e3de..036b353 100644 --- a/zk-auth/package/src/components/border-beam.tsx +++ b/zk-auth/package/src/components/border-beam.tsx @@ -36,7 +36,7 @@ export const BorderBeam = ({ } as CSSProperties } className={cn( - "pointer-events-none absolute -inset-[1px] rounded-[inherit] [border:calc(var(--border-width)*1px)_solid_transparent]", + "-inset-[1px] pointer-events-none absolute rounded-[inherit] [border:calc(var(--border-width)*1px)_solid_transparent]", // mask styles "![mask-clip:padding-box,border-box] ![mask-composite:intersect] [mask:linear-gradient(transparent,transparent),linear-gradient(white,white)]", diff --git a/zk-auth/package/src/components/google-user-infos.tsx b/zk-auth/package/src/components/google-user-infos.tsx index be26c98..6d87d65 100644 --- a/zk-auth/package/src/components/google-user-infos.tsx +++ b/zk-auth/package/src/components/google-user-infos.tsx @@ -2,14 +2,14 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function GoogleUserInfos({ userInfos }: { userInfos: any }) { return ( - -
+ +
{userInfos.name}
@@ -19,7 +19,7 @@ export function GoogleUserInfos({ userInfos }: { userInfos: any }) {

{userInfos.email}

-

+

Google Google

diff --git a/zk-auth/package/src/components/prove-button.tsx b/zk-auth/package/src/components/prove-button.tsx index 824de8d..619ba0e 100644 --- a/zk-auth/package/src/components/prove-button.tsx +++ b/zk-auth/package/src/components/prove-button.tsx @@ -56,16 +56,14 @@ export function ProveButton({ address }: { address: `0x${string}` }) { } } - console.log("starkPollingResults", starkPollingResults); - return address ? ( <> -
+
{!isLoading && }
-
-
+
+
{isLoading ? ( ) : ( <> -

+

You are about to prove that address
@@ -94,7 +92,7 @@ export function ProveButton({ address }: { address: `0x${string}` }) { onClick={handleClick} size="lg" autoFocus - className="flex w-full mb-4 flex-row items-center gap-1.5" + className="mb-4 flex w-full flex-row items-center gap-1.5" disabled={!!error || isLoading} > {isLoading ? "Proving" : "Prove"} with{" "} @@ -103,19 +101,19 @@ export function ProveButton({ address }: { address: `0x${string}` }) { height={16} src="https://zkauth.vercel.app/bonsai-logo-dark.svg" alt="bonsai logo" - className="relative -top-[1px]" + className="-top-[1px] relative" /> {starkPollingResults && starkPollingResults.length > 0 && ( - + {starkPollingResults.at(-1)?.status !== "SUCCEEDED" && ( - + STARK{" "} @@ -140,8 +138,8 @@ export function ProveButton({ address }: { address: `0x${string}` }) { )} {snarkPollingResults && ( - - + + SNARK{" "} - diff --git a/zk-auth/package/src/components/twitch-user-infos.tsx b/zk-auth/package/src/components/twitch-user-infos.tsx index a3670d4..caf29ec 100644 --- a/zk-auth/package/src/components/twitch-user-infos.tsx +++ b/zk-auth/package/src/components/twitch-user-infos.tsx @@ -2,14 +2,14 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; export function TwitchUserInfos({ userInfos }: { userInfos: any }) { return ( - -

+ +
{userInfos.display_name}
@@ -19,7 +19,7 @@ export function TwitchUserInfos({ userInfos }: { userInfos: any }) {

{userInfos.email}

-

+

Twitch Twitch

diff --git a/zk-auth/package/src/example.tsx b/zk-auth/package/src/example.tsx index d401494..4caa83f 100644 --- a/zk-auth/package/src/example.tsx +++ b/zk-auth/package/src/example.tsx @@ -4,7 +4,7 @@ import { ZkAuth } from "./zk-auth"; ReactDOM.createRoot(document.getElementById("root")!).render( -
+
, diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index f4cf116..b273943 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -1,6 +1,7 @@ import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; +import type { SupportedProviders } from "../types/supported-providers"; -function generateLocalStorageKey(provider: "google" | "twitch", identifier: string, address: `0x${string}`) { +function generateLocalStorageKey(provider: SupportedProviders, identifier: string, address: `0x${string}`) { return `${provider}-${identifier}-${address}`; } diff --git a/zk-auth/package/src/types/supported-providers.ts b/zk-auth/package/src/types/supported-providers.ts new file mode 100644 index 0000000..a0e4e19 --- /dev/null +++ b/zk-auth/package/src/types/supported-providers.ts @@ -0,0 +1 @@ +export type SupportedProviders = "google" | "twitch" | "test"; diff --git a/zk-auth/package/src/utils/do-stark-proving.ts b/zk-auth/package/src/utils/do-stark-proving.ts index 06bbe5d..0509c9f 100644 --- a/zk-auth/package/src/utils/do-stark-proving.ts +++ b/zk-auth/package/src/utils/do-stark-proving.ts @@ -2,15 +2,14 @@ import { sleep } from "@risc0/ui/utils/sleep"; import isEqual from "lodash-es/isEqual"; import type { Dispatch, SetStateAction } from "react"; +type Iss = "Google" | "Twitch" | "test"; + type StarkSessionStatusRes = { status: string; // Add other properties as needed }; -async function bonsaiStarkProving({ - iss, - token, -}: { iss: "Google" | "Twitch" | "test"; token: string }): Promise { +async function bonsaiStarkProving({ iss, token }: { iss: Iss; token: string }): Promise { const response = await fetch("https://zkauth.vercel.app/api/bonsai/stark-proving", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -39,7 +38,7 @@ export async function doStarkProving({ token, setStarkPollingResults, }: { - iss: "Google" | "Twitch" | "test"; + iss: Iss; token: string; setStarkPollingResults: Dispatch>; }) { diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 4796de8..2e81d4d 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -47,7 +47,7 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp return ( -
+
{currentStep === 1 ? ( ) : currentStep === 2 ? ( diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 731a271..4292ac6 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -124,9 +124,6 @@ class Client { // STARK export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { - console.log("iss", iss); - console.log("token", token); - // TODO: Add others, if applicable let jwks = ""; @@ -138,15 +135,6 @@ export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twit jwks = await getTwitchCerts(); } - console.log("jwks", jwks); - console.log( - JSON.stringify({ - iss, - jwks, - jwt: token, - }), - ); - const inputData = Buffer.from( encodeString( JSON.stringify({ diff --git a/zk-auth/tsconfig.json b/zk-auth/tsconfig.json index 1b81183..b48a3b0 100644 --- a/zk-auth/tsconfig.json +++ b/zk-auth/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@risc0/ui/config/tsconfig.base.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "~/*": ["./src/*"] - }, - "types": ["node"] - }, - "include": [".next/types/**/*.ts", "**/*.ts", "**/*.tsx", "next-env.d.ts"], - "exclude": ["node_modules"] + "extends": "@risc0/ui/config/tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "types": ["node"] + }, + "include": [".next/types/**/*.ts", "**/*.ts", "**/*.tsx", "next-env.d.ts"], + "exclude": ["node_modules"] } From 6c8a83934c18c521c769b52d8b7da9b25234c621 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 13:39:47 -0400 Subject: [PATCH 071/110] fix: simpler state --- .../package/src/components/sign-in-button.tsx | 36 ++++++------ zk-auth/package/src/utils/clean-url.ts | 6 ++ zk-auth/package/src/zk-auth.tsx | 57 ++++++------------- 3 files changed, 43 insertions(+), 56 deletions(-) create mode 100644 zk-auth/package/src/utils/clean-url.ts diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 3f0ab91..2ba39e4 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -1,21 +1,17 @@ -import { GoogleLogin } from "@react-oauth/google"; +import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google"; import { Button } from "@risc0/ui/button"; import jwtDecode from "jwt-decode"; +import { Loader2Icon } from "lucide-react"; import { useEffect } from "react"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; - -function cleanUrl() { - const url = new URL(window.location.href); - url.search = ""; - url.hash = ""; - window.history.replaceState({}, document.title, url.toString()); -} +import { cleanUrl } from "../utils/clean-url"; export function SignInButton({ address }: { address: `0x${string}` }) { const { googleUserInfos, twitchUserToken, googleUserToken, setGoogleUserInfos, setGoogleUserToken } = useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); + const code = new URLSearchParams(window.location.search).get("code"); useEffect(() => { if (!googleUserToken || googleUserInfos) { @@ -53,17 +49,23 @@ export function SignInButton({ address }: { address: `0x${string}` }) { handleAuth(); }, [handleTwitchAuthCallback, twitchUserToken]); + if (code) { + return ; + } + return ( <> - { - if (response.credential) { - setGoogleUserToken(response.credential); - } - }} - /> + + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + - - )} -
- +
+ {snarkResults && starkResults ? ( + + ) : googleUserInfos || twitchUserInfos ? ( + + ) : ( + + )} +
); } From 5d6317a10b1b8fbdff07958843dc2a751d8bc431 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 14:06:37 -0400 Subject: [PATCH 072/110] fix: bump pkg --- zk-auth/bun.lockb | Bin 147613 -> 148699 bytes zk-auth/package.json | 6 ++-- zk-auth/package/package.json | 5 ++-- .../package/src/components/border-beam.tsx | 4 +-- .../src/components/google-user-infos.tsx | 10 ++++++- .../package/src/components/sign-in-button.tsx | 28 +++++++++++++++--- .../src/components/twitch-user-infos.tsx | 10 ++++++- zk-auth/package/src/example.tsx | 1 + 8 files changed, 51 insertions(+), 13 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index abd50aaeda19d1371a775172a3f7078e9f3035e4..cc59294be845605c60767d727855dfd49a00b69f 100755 GIT binary patch delta 30105 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 b_F zME}wSHy_mZQa8ZA#AT+@KF_YKAj<%n-@J56siOI~<`?i|PN{Y}k?eq;>sX4N}et9dFKGk0L z-KJ%R+rLWEt>4ApewiNsqhW<{H)wK4b96QNep~hj#Tv?)O9UPe$~_(RE!zl(^@}B$ zL3Lwp{@kn7cZP(~l?6NN-)+M_`=>>o9`IuJrcd^KW@tC=7#;7dH`|UKEPp+>W7mc# z{W+ntyXZT%WAFQ&^uWy#jyN4{&;76 zJ9Xq1oBhis4{eLn$Ca*~X4DCjAz=UZ$%OhLm3EZOSCtZ3VCi!E*HO}^#@v2qVKx2a zPOXsi_qms8AevdBR5~mM+kM6L4)#QyUYrh`%!iaT- zM-9Y)JHLCP75}8evU7Zqp!1Evc{Wbp^qv+J@IxHe@rc(STl*nSckb3+3wXG%In8Q( z(>43iaw%xRE|42*l*3}gU)y@pFBpB$K)GZ1LiJ0EdyR_>7tAvxM z=lkkK-ly)JAA%Ww_Gnf8%@T%$G0p9tih29vMn6}*emOFy-A#S<-qZ~U=x1s#+^_T} z?jz@!K3tSEj&uF==}0)SFzbD`-YE&@RJ4B=rp%OZ-v!n3aR(~2a&TqLas1JTmlAZ( z9?iet0_w`Pm6f3P+e6fo2k38+A8!AK%ukuOV><5bcOCocbBhqK?O%)O{p`*+^Htt3 zk`ilmjTxxlq^>h=;H(d|QhLw_S{aXhmG_T5V3*iG?dCi-B2#Z(pIeUfqI?5#a4InI z1C|Nnhrh6~%;05UYFZFl@Q!Wk0qhPGQ@BsI}!zF89~U zIk~^M=0mpiKRfL;|Be~IVAORnzCYitcSv>T(kbh5r>AMM+};S(Gi>(^^$)K*J^{
diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 2ba39e4..be5b806 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -54,9 +54,18 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } return ( - <> +
{ @@ -67,9 +76,20 @@ export function SignInButton({ address }: { address: `0x${string}` }) { /> - - +
); } diff --git a/zk-auth/package/src/components/twitch-user-infos.tsx b/zk-auth/package/src/components/twitch-user-infos.tsx index caf29ec..dece478 100644 --- a/zk-auth/package/src/components/twitch-user-infos.tsx +++ b/zk-auth/package/src/components/twitch-user-infos.tsx @@ -1,6 +1,14 @@ import { Alert, AlertDescription } from "@risc0/ui/alert"; -export function TwitchUserInfos({ userInfos }: { userInfos: any }) { +export function TwitchUserInfos({ + userInfos, +}: { + userInfos: { + display_name: string; + profile_image_url?: string; + email: string; + }; +}) { return (
diff --git a/zk-auth/package/src/example.tsx b/zk-auth/package/src/example.tsx index 4caa83f..41fba32 100644 --- a/zk-auth/package/src/example.tsx +++ b/zk-auth/package/src/example.tsx @@ -2,6 +2,7 @@ import React from "react"; import ReactDOM from "react-dom/client"; import { ZkAuth } from "./zk-auth"; +// biome-ignore lint/style/noNonNullAssertion: ignore ReactDOM.createRoot(document.getElementById("root")!).render(
From a102fda8c849bc33d80fae4b7ec8345daad7ca43 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 14:19:18 -0400 Subject: [PATCH 073/110] fix: example --- zk-auth/bun.lockb | Bin 148699 -> 148699 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- .../package/src/components/sign-in-button.tsx | 2 ++ zk-auth/package/src/hooks/use-socials.ts | 2 ++ zk-auth/package/src/hooks/use-twitch-auth.ts | 2 ++ zk-auth/package/src/utils/clean-url.ts | 2 ++ zk-auth/package/src/zk-auth.tsx | 4 +++- zk-auth/src/app/page.tsx | 15 +++------------ zk-auth/src/app/zk-auth.tsx | 18 ++++++++++++++++++ 10 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 zk-auth/src/app/zk-auth.tsx diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index cc59294be845605c60767d727855dfd49a00b69f..a152238345d2dda1d086140be7f2095d6582cc72 100755 GIT binary patch delta 142 zcmV;90CE4@i3!_@36L%zIi+3D9)KqdrVbg*F0d71KWSuX?%i3!_@36L%zeBaigagDylg5Eh|n#WXpk~RnDQUtq*LR8L$_`qG_u}c6|qPX|UiR8Y#8&2o46vc5cP-9xg yHN1>6qM|^T@e#}m>{*W~18nsrO!TyxvyGu;*#a>+xAb}eYjFZGIk#c#0eV>0k3@X{ diff --git a/zk-auth/package.json b/zk-auth/package.json index 65481aa..a6fb49e 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.19", + "@risc0/zkauth": "0.0.20", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 1c9b3c8..80dae0d 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.19", + "version": "0.0.20", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index be5b806..c69791e 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -1,3 +1,5 @@ +"use client"; + import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google"; import { Button } from "@risc0/ui/button"; import jwtDecode from "jwt-decode"; diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index b273943..63ebe28 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -1,3 +1,5 @@ +"use client"; + import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; import type { SupportedProviders } from "../types/supported-providers"; diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 6ee965a..6d4d642 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -1,3 +1,5 @@ +"use client"; + import { useCallback, useState } from "react"; import { useSocialsLocalStorage } from "./use-socials"; diff --git a/zk-auth/package/src/utils/clean-url.ts b/zk-auth/package/src/utils/clean-url.ts index 56ee357..3feed4a 100644 --- a/zk-auth/package/src/utils/clean-url.ts +++ b/zk-auth/package/src/utils/clean-url.ts @@ -1,3 +1,5 @@ +"use client"; + export function cleanUrl() { const url = new URL(window.location.href); url.search = ""; diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 7c83cfc..57ff701 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -1,7 +1,9 @@ +"use client"; + import "./style.css"; import { useLocalStorage } from "@risc0/ui/hooks/use-local-storage"; -import { useEffect, useState } from "react"; +import { useEffect } from "react"; import { ProveButton } from "./components/prove-button"; import { SignInButton } from "./components/sign-in-button"; import { useSocialsLocalStorage } from "./hooks/use-socials"; diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx index e4d44ad..5014e61 100644 --- a/zk-auth/src/app/page.tsx +++ b/zk-auth/src/app/page.tsx @@ -1,20 +1,11 @@ -"use client"; +import dynamic from "next/dynamic"; -import "@risc0/zkauth/style.css"; // load the zkAuth stylesheet -import { ZkAuth } from "@risc0/zkauth"; +const ZkAuthExample = dynamic(() => import("./zk-auth"), { ssr: false }); export default function HomePage() { return (
- { - console.info("Stark completed:", starkResults); - }} - onSnarkComplete={(snarkResults) => { - console.info("Snark completed:", snarkResults); - }} - /> +
); } diff --git a/zk-auth/src/app/zk-auth.tsx b/zk-auth/src/app/zk-auth.tsx new file mode 100644 index 0000000..00962bf --- /dev/null +++ b/zk-auth/src/app/zk-auth.tsx @@ -0,0 +1,18 @@ +"use client"; + +import "@risc0/zkauth/style.css"; // load the zkAuth stylesheet +import { ZkAuth } from "@risc0/zkauth"; + +export default function ZkAuthExample() { + return ( + { + console.info("Stark completed:", starkResults); + }} + onSnarkComplete={(snarkResults) => { + console.info("Snark completed:", snarkResults); + }} + /> + ); +} From 07f136b541c47890c3c5dfe0017e329d8ec490a2 Mon Sep 17 00:00:00 2001 From: hans Date: Thu, 19 Sep 2024 11:51:07 -0700 Subject: [PATCH 074/110] fix: exp and iat (#43) --- .../methods/guest/src/main.rs | 10 +- .../oidc-validator/src/lib.rs | 111 ++++++++++-------- 2 files changed, 66 insertions(+), 55 deletions(-) diff --git a/zk-socials/social_validator/methods/guest/src/main.rs b/zk-socials/social_validator/methods/guest/src/main.rs index 6ba6319..e59af0f 100644 --- a/zk-socials/social_validator/methods/guest/src/main.rs +++ b/zk-socials/social_validator/methods/guest/src/main.rs @@ -40,21 +40,20 @@ struct Output { } fn main() { - // Read user input let mut input_str: String = String::new(); env::stdin() .read_to_string(&mut input_str) .expect("could not read input string"); - // Trim the input string let trimmed_input = input_str.trim(); - // Deserialize user input let input: Input = serde_json::from_str(trimmed_input).unwrap_or_else(|e| { - panic!("could not deserialize input: {:?}\nInput was: {}", e, trimmed_input); + panic!( + "could not deserialize input: {:?}\nInput was: {}", + e, trimmed_input + ); }); - // Validate the JWT let (email, public_key, expiration, issued_at, jwks) = input .iss .validate(&input.jwt, &input.jwks) @@ -64,7 +63,6 @@ fn main() { let email = hex::encode(Sha256::digest(email.as_bytes())); let jwks = hex::encode(Sha256::digest(jwks.as_bytes())); - // Commit the output to the public journal env::commit(&Output { email, public_key, diff --git a/zk-socials/social_validator/oidc-validator/src/lib.rs b/zk-socials/social_validator/oidc-validator/src/lib.rs index 0ec7325..b1a1ddb 100644 --- a/zk-socials/social_validator/oidc-validator/src/lib.rs +++ b/zk-socials/social_validator/oidc-validator/src/lib.rs @@ -42,27 +42,21 @@ impl IdentityProvider { serde_json::from_str(jwk_str).map_err(|_| OidcErr::CertificateParseError)?; match self { Self::Google => { - let decoded = decode_token::(token, &jwk).unwrap(); - let email = decoded.custom.email.to_string(); - let nonce = decoded.custom.nonce.to_string(); - let exp = decoded.expiration.unwrap().timestamp().to_string(); - let iat = decoded.issued_at.unwrap().timestamp().to_string(); + let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); + let email = decoded.email.to_string(); + let nonce = decoded.nonce.to_string(); Ok((email, nonce, exp, iat, jwk_str.to_string())) } Self::Twitch => { - let decoded = decode_token::(token, &jwk).unwrap(); - let nonce = decoded.custom.nonce.to_string(); - let exp = decoded.expiration.unwrap().timestamp().to_string(); - let iat = decoded.issued_at.unwrap().timestamp().to_string(); - let preferred_username = decoded.custom.preferred_username.to_string(); - Ok((preferred_username, nonce, exp, iat, jwk_str.to_string())) // Return preferred_username instead of email + let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); + let nonce = decoded.nonce.to_string(); + let pref_user = decoded.preferred_username.to_string(); + Ok((pref_user, nonce, exp, iat, jwk_str.to_string())) } Self::Test => { - let decoded = decode_token::(token, &jwk).unwrap(); - let email = decoded.custom.email.to_string(); - let nonce = decoded.custom.nonce.to_string(); - let exp = decoded.expiration.unwrap().timestamp().to_string(); - let iat = decoded.issued_at.unwrap().timestamp().to_string(); + let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); + let email = decoded.email.to_string(); + let nonce = decoded.nonce.to_string(); Ok((email, nonce, exp, iat, jwk_str.to_string())) } } @@ -83,8 +77,6 @@ impl From for IdentityProvider { #[derive(Deserialize, Serialize, Debug, Clone)] pub struct TwitchClaims { pub aud: String, - pub exp: i64, - pub iat: i64, pub iss: String, pub sub: String, pub nonce: String, @@ -134,7 +126,7 @@ pub enum OidcErr { KeyIdMissingError, } -fn decode_token(token: &str, keys: &JwkKeys) -> Result, OidcErr> +fn decode_token(token: &str, keys: &JwkKeys) -> Result<(T, String, String), OidcErr> where T: for<'de> Deserialize<'de> + Serialize + Clone, { @@ -163,10 +155,13 @@ where // NOTE: This does not verify the `exp` field. let res = alg .validate_integrity::(&token, &vkey) - .map_err(|_| OidcErr::TokenValidationError); + .map_err(|_| OidcErr::TokenValidationError)?; + let claims = res.claims(); + let custom = claims.custom.clone(); - // Ok(claims) - Ok(res.unwrap().claims().clone()) + let exp = claims.expiration.unwrap().to_string(); + let iat = claims.issued_at.unwrap().to_string(); + Ok((custom, exp, iat)) } #[cfg(test)] @@ -174,42 +169,60 @@ pub mod test_oidc_validator { use super::*; - const TEST_PUB_JWK: &str = r#" - { - "keys" : [ - { - "alg": "RS256", - "e": "AQAB", - "key_ops": [ - "verify" - ], - "kty": "RSA", - "n": "t50xn1bqloo0peLNX9mieuuyBEVIurn1Zzy41F9R5bn66KmhtKOCBWFXQAGD4IWphqlut0qDaWavENcamgl-bpriCSgiatIi61nq2CQ9pZzH4lGGp3sIYsTuSoEz8jSJKZ28ErGe9QPrAooX28X0l83fiRPBD22lqYRktSQPUNja_dB5CsmmSXBcb-jby5ubNLoAG7tCt_3IFvAfVWECcvsNX-_E8zOcB9FjQbusx3nPANXeWS8aN_hgMKqNyYtXrX6SPh0vjukDxLEj8o71C0Zb1WTGaHAt3lFVU-WLgAJlwCc5l_EpUE0oFzCPIry3afblbHdPembY25J4D-jMTQ", - "use": "sig", - "kid": "8725d08a4b35982092e9f8a50797118c" - } - ] - } - "#; + pub static TEST_PUB_JWK: &str = r#" +{ + "keys" : [ + { + "alg": "RS256", + "e": "AQAB", + "key_ops": [ + "verify" + ], + "kty": "RSA", + "n": "nc2VMhxdEcKEoxqgmQNWhw8tiIBvGxg6Cu2uNSVLpK7XfyXUS7tf0nQHrfHdqemAPrKve_pmHk2OqPDpy4sNzs_owXMR5h2hoR7_nVL0FFHQJywryVy9rGYxT47OEkUJvbWSHxrPjSHqI8zoIa5JlaTTr5xmQ673bxGZVX3ehggYbecIMw9ZbnpvYQycJBq6jQEV8x81UH1egqCQf10PgMk5RG7Cl8argVDRisUGgHjN5Qi2e1R8YGKGu5iwaTy-ug1Y9nC4cKcSkObhRUjgyA1W0z-izSRTqijgtL_dInnT-et0p65y8iF8A4qIBUgBkRUBtzREq_fmbAfCUNc4wKAPKHSWmmjFIXB-uNRnnW7kdxOb42LnD_SlpwhxAKIcfqJXq8uoJDLiPpsLIZuBVtpOjfne7g1tk74wCcfM6U3KKvwcBE7uv2oAXKWm5iXMGzK6rr8Xi1z2DPZmFDUtH2ZF0X13VVp9z2V4B8A1WF_1NJ9WBQY64x9J6Tpz3EFz", + "use": "sig", + "kid": "28cd360ff0c96e5a2de77f23fa0856a6" + } + ] +} +"#; + + const VALID_TEST_JWT: &str = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjI4Y2QzNjBmZjBjOTZlNWEyZGU3N2YyM2ZhMDg1NmE2In0.eyJpc3MiOiJodHRwczovL2lkcC5sb2NhbCIsImF1ZCI6Im15X2NsaWVudF9hcHAiLCJzdWIiOiI1YmU4NjM1OTA3M2M0MzRiYWQyZGEzOTMyMjIyZGFiZSIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJub25jZSI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImV4cCI6MTcyNjc2OTY0NywiaWF0IjoxNzI2NzY5MzQ3fQ.SntZXTric908D3-BDUT6ADbkxnskB7zyfp-jJ3sJRxqLlLshTr-MkyVFBv2aYyKmPIJmF2uHKyGvyOgZqKo5K8qbIyColw5wGdDlGmHt2x-6tHibzSjfwlAtzAKU8Hi5qy1GZ1-nvqyuUu_QboK3WKeUPmBoUF6D7lyGpqCkBmPmmD57kkQBiep9u6j46HjwSDuXJpsVKlNGR_CbV5llrs1lfFJ6Fxe86aICW384PkNLX3tbV27nlJPICaFUf9b5QpUoJMrl8kQ9NpoqGQ65NlaBm6jlh8lBPi_ch5Y6P5zS_Vw2d-EtEMX0thhmOh0b1bjVhelOTM1BqLdOEfjWTeT96O0YkaivT-_g6QBO4FXCPcgr2MJmH15YKkHBZV4eSrkm7aqcssD2mdTFQd4MmK1aujO3XWYLdzFF0uoFKakBL3xUmVWN9LwLJQMfI1aV8Iugq_pwvOBdJujYVVHrigfaXq2U_JctRhHJkhbpBSUywgkGpCbqsukMkGFzLeih"; #[test] fn test_validate_test_jwt_valid_token() { let test_keys: JwkKeys = serde_json::from_str(&TEST_PUB_JWK).unwrap(); - let jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ijg3MjVkMDhhNGIzNTk4MjA5MmU5ZjhhNTA3OTcxMThjIn0.eyJlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20iLCJub25jZSI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImlhdCI6MTkxNTEwODU5NywiZXhwIjoxOTE1MTEyMTk3fQ.QmJMTvOCX972kNiwLCe8jxwd1KRG8NwvI-r5YqkUwJvk-EviFJFRw2xWrBwnJh-ggWCmbMhiF6zxauSeuf5DcWdujaM6n3k5fVawo5fDBOhlAeoqwl-mYZIrYUmAjZainnNSmH6_NN7jd7eT3kh0bijGNbLAAvUc1_rZ52XOpUUYgAiNwUDwiafDZpGOQ5zN53kIoqabbR1nDsNJzNMxs84rax473FixyfgnXJPaxBuceSkEFYgDMcicaCZzEjZ1xOIrp_KwuBj6eQWGesGGJXyQpWPB3R_XOgYQpZc1l3Usozz4M4e39GXV03z2izjTrWT4XF_Si1lvO9VAkAEIsw"; - let decoded = decode_token::(&jwt, &test_keys).unwrap(); - - assert_eq!(&decoded.custom.email, "test@example.com"); - assert_eq!( - &decoded.custom.nonce, - "0x0000000000000000000000000000000000000000" - ); + let (decoded, exp, iat) = + decode_token::(&VALID_TEST_JWT, &test_keys).unwrap(); + assert_eq!(&decoded.email, "test@email.com"); + assert_eq!(&decoded.nonce, "0x0000000000000000000000000000000000000000"); + assert!(!exp.is_empty()); + assert!(!iat.is_empty()); } #[test] - #[should_panic] fn test_fail_invalid_test_token() { let test_keys: JwkKeys = serde_json::from_str(&TEST_PUB_JWK).unwrap(); let jwt = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxx"; - decode_token::(&jwt, &test_keys).unwrap(); + let result = decode_token::(&jwt, &test_keys); + assert!(result.is_err()); + } + + #[test] + fn test_identity_provider_validate() { + let test_keys: &str = TEST_PUB_JWK; + + let provider = IdentityProvider::Test; + + let result = provider.validate(&VALID_TEST_JWT, test_keys); + + assert!(result.is_ok()); + let (email, nonce, exp, iat, jwk_str) = result.unwrap(); + + assert_eq!(email, "test@email.com"); + assert_eq!(nonce, "0x0000000000000000000000000000000000000000"); + assert!(!exp.is_empty()); + assert!(!iat.is_empty()); + assert_eq!(jwk_str, test_keys); } } From 424323f0af7e3eac36ac5395aa439671a621495e Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 14:54:36 -0400 Subject: [PATCH 075/110] fix: bump --- zk-auth/bun.lockb | Bin 148699 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/bun.lockb | Bin 162473 -> 163151 bytes zk-auth/package/package.json | 10 +++++----- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index a152238345d2dda1d086140be7f2095d6582cc72..f553ae3543ed09ab27a2d343bccf9b828e772ecf 100755 GIT binary patch delta 24935 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%0A`K2!6_+l-HH)gSrr(CS~mbkDf@i6znFcK;7% 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 delta 24787 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 l5#_L|s((RxXIjIv1`$uZEfpD8F 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 Date: Thu, 19 Sep 2024 15:44:43 -0400 Subject: [PATCH 076/110] fix: linkedin --- .../package/src/components/sign-in-button.tsx | 19 +++- .../package/src/hooks/use-linkedin-auth.ts | 60 +++++++++++++ zk-auth/package/src/hooks/use-socials.ts | 19 +++- .../package/src/types/supported-providers.ts | 2 +- zk-auth/src/app/_lib/bonsai-proving.ts | 17 ++-- zk-auth/src/app/_lib/get-certs.ts | 15 ++++ zk-auth/src/app/_lib/get-google-certs.ts | 5 -- zk-auth/src/app/_lib/get-twitch-certs.ts | 5 -- .../src/app/api/linkedin/get-token/route.ts | 86 +++++++++++++++++++ zk-auth/src/env.js | 9 ++ 10 files changed, 216 insertions(+), 21 deletions(-) create mode 100644 zk-auth/package/src/hooks/use-linkedin-auth.ts create mode 100644 zk-auth/src/app/_lib/get-certs.ts delete mode 100644 zk-auth/src/app/_lib/get-google-certs.ts delete mode 100644 zk-auth/src/app/_lib/get-twitch-certs.ts create mode 100644 zk-auth/src/app/api/linkedin/get-token/route.ts diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index c69791e..fb28e39 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -5,6 +5,7 @@ import { Button } from "@risc0/ui/button"; import jwtDecode from "jwt-decode"; import { Loader2Icon } from "lucide-react"; import { useEffect } from "react"; +import { useLinkedInAuth } from "../hooks/use-linkedin-auth"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; import { cleanUrl } from "../utils/clean-url"; @@ -13,6 +14,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { const { googleUserInfos, twitchUserToken, googleUserToken, setGoogleUserInfos, setGoogleUserToken } = useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); + const { signInWithLinkedIn } = useLinkedInAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); useEffect(() => { @@ -85,13 +87,28 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative mb-4 flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-7 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-7 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" >

Continue with Twitch + +
); } diff --git a/zk-auth/package/src/hooks/use-linkedin-auth.ts b/zk-auth/package/src/hooks/use-linkedin-auth.ts new file mode 100644 index 0000000..f4b6bff --- /dev/null +++ b/zk-auth/package/src/hooks/use-linkedin-auth.ts @@ -0,0 +1,60 @@ +"use client"; + +import { useCallback, useState } from "react"; +import { useSocialsLocalStorage } from "./use-socials"; + +const LINKEDIN_CLIENT_ID = "78mnvddaf35fh5"; +const LINKEDIN_REDIRECT_URI = window.location.origin; + +export function useLinkedInAuth({ address }: { address: `0x${string}` }) { + const { setLinkedInUserToken, setLinkedInUserInfos } = useSocialsLocalStorage({ address }); + const [error, setError] = useState(null); + + const signInWithLinkedIn = useCallback(() => { + const state = address; + + const authUrl = new URL("https://www.linkedin.com/oauth/v2/authorization"); + authUrl.searchParams.append("response_type", "code"); + authUrl.searchParams.append("client_id", LINKEDIN_CLIENT_ID); + authUrl.searchParams.append("redirect_uri", LINKEDIN_REDIRECT_URI); + authUrl.searchParams.append("state", state); + authUrl.searchParams.append("scope", "r_liteprofile r_emailaddress"); + + window.location.href = authUrl.toString(); + }, [address]); + + const handleLinkedInAuthCallback = useCallback( + async (code: string) => { + try { + const response = await fetch("https://zkauth.vercel.app/api/linkedin/get-token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code }), + }); + + if (!response.ok) { + setError("Failed to authenticate with LinkedIn"); + return; + } + + const { jwt, email, profilePictureUrl, firstName, lastName } = await response.json(); + + setLinkedInUserInfos({ email, profilePictureUrl, firstName, lastName }); + + if (jwt) { + setLinkedInUserToken(jwt); + } + } catch (err) { + setError("Failed to authenticate with LinkedIn"); + console.error(err); + } + }, + [setLinkedInUserInfos, setLinkedInUserToken], + ); + + return { + error, + signInWithLinkedIn, + handleLinkedInAuthCallback, + }; +} diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index 63ebe28..3bdc594 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -32,15 +32,28 @@ export function useSocialsLocalStorage({ undefined, ); + // linkedin + const [linkedInUserInfos, setLinkedInUserInfos] = useLocalStorage( + generateLocalStorageKey("twitch", "infos", address), + undefined, + ); + const [linkedInUserToken, setLinkedInUserToken] = useLocalStorage( + generateLocalStorageKey("linkedin", "token", address), + undefined, + ); + return { googleUserInfos, googleUserToken, - twitchUserInfos, - twitchUserToken, - + linkedInUserInfos, + linkedInUserToken, setGoogleUserInfos, setGoogleUserToken, + setLinkedInUserInfos, + setLinkedInUserToken, setTwitchUserInfos, setTwitchUserToken, + twitchUserInfos, + twitchUserToken, }; } diff --git a/zk-auth/package/src/types/supported-providers.ts b/zk-auth/package/src/types/supported-providers.ts index a0e4e19..c1f9b87 100644 --- a/zk-auth/package/src/types/supported-providers.ts +++ b/zk-auth/package/src/types/supported-providers.ts @@ -1 +1 @@ -export type SupportedProviders = "google" | "twitch" | "test"; +export type SupportedProviders = "google" | "twitch" | "linkedin" | "test"; diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 4292ac6..8fca643 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -1,8 +1,7 @@ import axios, { type AxiosInstance, type AxiosResponse } from "axios"; import env from "~/env"; import { encodeString } from "./encode-string"; -import { getGoogleCerts } from "./get-google-certs"; -import { getTwitchCerts } from "./get-twitch-certs"; +import { getCerts } from "./get-certs"; import type { CreateSnarkSessionRes, CreateStarkSessionRes, @@ -123,16 +122,22 @@ class Client { } // STARK -export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { - // TODO: Add others, if applicable +export async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "Twitch" | "LinkedIn" | "test"; token: string }) { let jwks = ""; if (iss === "Google") { - jwks = await getGoogleCerts(); + jwks = await getCerts("google"); } if (iss === "Twitch") { - jwks = await getTwitchCerts(); + jwks = await getCerts("twitch"); + } + + if (iss === "LinkedIn") { + jwks = await getCerts("linkedin"); } const inputData = Buffer.from( diff --git a/zk-auth/src/app/_lib/get-certs.ts b/zk-auth/src/app/_lib/get-certs.ts new file mode 100644 index 0000000..16862b2 --- /dev/null +++ b/zk-auth/src/app/_lib/get-certs.ts @@ -0,0 +1,15 @@ +import axios from "axios"; + +export async function getCerts(provider: "google" | "linkedin" | "twitch"): Promise { + return JSON.stringify( + ( + await axios.get( + provider === "google" + ? "https://www.googleapis.com/oauth2/v3/certs" + : provider === "linkedin" + ? "https://www.linkedin.com/oauth/openid/jwks" + : "https://id.twitch.tv/oauth2/keys", + ) + ).data, + ); +} diff --git a/zk-auth/src/app/_lib/get-google-certs.ts b/zk-auth/src/app/_lib/get-google-certs.ts deleted file mode 100644 index 243836c..0000000 --- a/zk-auth/src/app/_lib/get-google-certs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import axios from "axios"; - -export async function getGoogleCerts(): Promise { - return JSON.stringify((await axios.get("https://www.googleapis.com/oauth2/v3/certs")).data); -} diff --git a/zk-auth/src/app/_lib/get-twitch-certs.ts b/zk-auth/src/app/_lib/get-twitch-certs.ts deleted file mode 100644 index 91a7231..0000000 --- a/zk-auth/src/app/_lib/get-twitch-certs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import axios from "axios"; - -export async function getTwitchCerts(): Promise { - return JSON.stringify((await axios.get("https://id.twitch.tv/oauth2/keys")).data); -} diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts new file mode 100644 index 0000000..12833f6 --- /dev/null +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -0,0 +1,86 @@ +import { NextResponse } from "next/server"; +import env from "~/env"; + +async function getLinkedInTokensAndUserInfo(code: string) { + try { + // Exchange code for access token + const tokenResponse = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams({ + grant_type: "authorization_code", + code, + redirect_uri: "http://localhost:3000", + client_id: env.LINKEDIN_CLIENT_ID, + client_secret: env.LINKEDIN_CLIENT_SECRET, + }), + }); + + if (!tokenResponse.ok) { + throw new Error(`HTTP error! status: ${tokenResponse.status}`); + } + + const tokenData = await tokenResponse.json(); + + // Get user profile information + const profileResponse = await fetch("https://api.linkedin.com/v2/me", { + headers: { + Authorization: `Bearer ${tokenData.access_token}`, + }, + }); + + if (!profileResponse.ok) { + throw new Error(`HTTP error! status: ${profileResponse.status}`); + } + + const profileData = await profileResponse.json(); + + // Get user email address + const emailResponse = await fetch( + "https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))", + { + headers: { + Authorization: `Bearer ${tokenData.access_token}`, + }, + }, + ); + + if (!emailResponse.ok) { + throw new Error(`HTTP error! status: ${emailResponse.status}`); + } + + const emailData = await emailResponse.json(); + + return { + access_token: tokenData.access_token, + email: emailData.elements[0]["handle~"].emailAddress, + firstName: profileData.localizedFirstName, + lastName: profileData.localizedLastName, + profilePictureUrl: profileData.profilePicture?.["displayImage~"]?.elements[0]?.identifiers[0]?.identifier, + }; + } catch (error) { + console.error("Error getting LinkedIn tokens and user info:", error); + throw error; + } +} + +export async function POST(request: Request) { + try { + const { code } = await request.json(); + const { access_token, email, firstName, lastName, profilePictureUrl } = await getLinkedInTokensAndUserInfo(code); + + return NextResponse.json({ + jwt: access_token, // Note: LinkedIn doesn't provide an id_token, so we're using access_token here + access_token, + email, + firstName, + lastName, + profilePictureUrl, + }); + } catch (error) { + console.error("Failed to get tokens and user info:", error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index 9489a4e..e4be499 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -9,8 +9,15 @@ const env = createEnv({ * Specify server-side environment variables schema here. */ server: { + // twitch TWITCH_CLIENT_ID: z.string(), TWITCH_CLIENT_SECRET: z.string(), + + // linkedin + LINKEDIN_CLIENT_ID: z.string(), + LINKEDIN_CLIENT_SECRET: z.string(), + + // bonsai BONSAI_VERSION: z.string(), BONSAI_API_KEY: z.string(), BONSAI_URL: z.string(), @@ -32,6 +39,8 @@ const env = createEnv({ // Server-side environment variables TWITCH_CLIENT_ID: process.env.TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET: process.env.TWITCH_CLIENT_SECRET, + LINKEDIN_CLIENT_ID: process.env.LINKEDIN_CLIENT_ID, + LINKEDIN_CLIENT_SECRET: process.env.LINKEDIN_CLIENT_SECRET, BONSAI_VERSION: process.env.BONSAI_VERSION, BONSAI_API_KEY: process.env.BONSAI_API_KEY, BONSAI_URL: process.env.BONSAI_URL, From 825040397873b76c44783e7db189d87b11e0b712 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 15:46:06 -0400 Subject: [PATCH 077/110] fix: linkedin2 --- zk-auth/src/app/api/linkedin/get-token/route.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index 12833f6..ea1d740 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -25,17 +25,17 @@ async function getLinkedInTokensAndUserInfo(code: string) { const tokenData = await tokenResponse.json(); // Get user profile information - const profileResponse = await fetch("https://api.linkedin.com/v2/me", { + const userInfoResponse = await fetch("https://api.linkedin.com/v2/userinfo", { headers: { Authorization: `Bearer ${tokenData.access_token}`, }, }); - if (!profileResponse.ok) { - throw new Error(`HTTP error! status: ${profileResponse.status}`); + if (!userInfoResponse.ok) { + throw new Error(`HTTP error! status: ${userInfoResponse.status}`); } - const profileData = await profileResponse.json(); + const profileData = await userInfoResponse.json(); // Get user email address const emailResponse = await fetch( From dd71973bc099d3169bf33d57eaf3e07336d991bb Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 15:58:25 -0400 Subject: [PATCH 078/110] fix: linkedin3 --- .../package/src/components/sign-in-button.tsx | 48 ++++++++++++++++--- .../package/src/hooks/use-linkedin-auth.ts | 9 ++-- zk-auth/package/src/hooks/use-twitch-auth.ts | 1 + .../src/app/api/linkedin/get-token/route.ts | 40 ++++++++++------ 4 files changed, 72 insertions(+), 26 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index fb28e39..5810df4 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -11,12 +11,19 @@ import { useTwitchAuth } from "../hooks/use-twitch-auth"; import { cleanUrl } from "../utils/clean-url"; export function SignInButton({ address }: { address: `0x${string}` }) { - const { googleUserInfos, twitchUserToken, googleUserToken, setGoogleUserInfos, setGoogleUserToken } = - useSocialsLocalStorage({ address }); + const { + googleUserInfos, + twitchUserToken, + googleUserToken, + linkedInUserToken, + setGoogleUserInfos, + setGoogleUserToken, + } = useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); - const { signInWithLinkedIn } = useLinkedInAuth({ address }); + const { handleLinkedInAuthCallback, signInWithLinkedIn } = useLinkedInAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); + // google auth callback useEffect(() => { if (!googleUserToken || googleUserInfos) { return; @@ -31,28 +38,55 @@ export function SignInButton({ address }: { address: `0x${string}` }) { }); }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + // linkedin auth callback + useEffect(() => { + if (linkedInUserToken) { + return; + } + + async function handleLinkedInAuth() { + const code = new URLSearchParams(window.location.search).get("code"); + const urlState = new URLSearchParams(window.location.search).get("state"); + + if (urlState === "linkedin" && code) { + try { + await handleLinkedInAuthCallback(code); + + cleanUrl(); + } catch (error) { + console.error("LinkedIn Auth error:", error); + } + } + } + + handleLinkedInAuth(); + }, [handleLinkedInAuthCallback, linkedInUserToken]); + + // twitch auth callback useEffect(() => { if (twitchUserToken) { return; } - async function handleAuth() { + async function handleTwitchAuth() { const code = new URLSearchParams(window.location.search).get("code"); + const urlState = new URLSearchParams(window.location.search).get("state"); - if (code) { + if (urlState === "twitch" && code) { try { await handleTwitchAuthCallback(code); cleanUrl(); } catch (error) { - console.error("Auth error:", error); + console.error("Twitch Auth error:", error); } } } - handleAuth(); + handleTwitchAuth(); }, [handleTwitchAuthCallback, twitchUserToken]); + // loading state if (code) { return ; } diff --git a/zk-auth/package/src/hooks/use-linkedin-auth.ts b/zk-auth/package/src/hooks/use-linkedin-auth.ts index f4b6bff..007acf9 100644 --- a/zk-auth/package/src/hooks/use-linkedin-auth.ts +++ b/zk-auth/package/src/hooks/use-linkedin-auth.ts @@ -11,14 +11,13 @@ export function useLinkedInAuth({ address }: { address: `0x${string}` }) { const [error, setError] = useState(null); const signInWithLinkedIn = useCallback(() => { - const state = address; - const authUrl = new URL("https://www.linkedin.com/oauth/v2/authorization"); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("client_id", LINKEDIN_CLIENT_ID); authUrl.searchParams.append("redirect_uri", LINKEDIN_REDIRECT_URI); - authUrl.searchParams.append("state", state); - authUrl.searchParams.append("scope", "r_liteprofile r_emailaddress"); + authUrl.searchParams.append("nonce", address); + authUrl.searchParams.append("state", "linkedin"); + authUrl.searchParams.append("scope", "openid profile email"); window.location.href = authUrl.toString(); }, [address]); @@ -32,6 +31,8 @@ export function useLinkedInAuth({ address }: { address: `0x${string}` }) { body: JSON.stringify({ code }), }); + console.log("response", response); + if (!response.ok) { setError("Failed to authenticate with LinkedIn"); return; diff --git a/zk-auth/package/src/hooks/use-twitch-auth.ts b/zk-auth/package/src/hooks/use-twitch-auth.ts index 6d4d642..05160c3 100644 --- a/zk-auth/package/src/hooks/use-twitch-auth.ts +++ b/zk-auth/package/src/hooks/use-twitch-auth.ts @@ -18,6 +18,7 @@ export function useTwitchAuth({ address }: { address: `0x${string}` }) { authUrl.searchParams.append("redirect_uri", TWITCH_REDIRECT_URI); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("scope", "openid user:read:email"); + authUrl.searchParams.append("state", "twitch"); authUrl.searchParams.append("nonce", nonce); window.location.href = authUrl.toString(); diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index ea1d740..1f0bfc1 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -3,46 +3,56 @@ import env from "~/env"; async function getLinkedInTokensAndUserInfo(code: string) { try { - // Exchange code for access token - const tokenResponse = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { + const params = new URLSearchParams(); + params.append("client_id", env.TWITCH_CLIENT_ID); + params.append("client_secret", env.TWITCH_CLIENT_SECRET); + params.append("code", code); + params.append("grant_type", "authorization_code"); + params.append("redirect_uri", "http://localhost:3000"); + + const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, - body: new URLSearchParams({ - grant_type: "authorization_code", - code, - redirect_uri: "http://localhost:3000", - client_id: env.LINKEDIN_CLIENT_ID, - client_secret: env.LINKEDIN_CLIENT_SECRET, - }), + body: params, }); - if (!tokenResponse.ok) { - throw new Error(`HTTP error! status: ${tokenResponse.status}`); + console.log("response", response); + + if (!response.ok) { + const errorText = await response.text(); + console.error("LinkedIn API Error:", response.status, errorText); + throw new Error(`HTTP error! status: ${response.status}`); } - const tokenData = await tokenResponse.json(); + const data = await response.json(); + + console.log("data", data); // Get user profile information const userInfoResponse = await fetch("https://api.linkedin.com/v2/userinfo", { headers: { - Authorization: `Bearer ${tokenData.access_token}`, + Authorization: `Bearer ${data.access_token}`, }, }); + console.log("userInfoResponse", userInfoResponse); + if (!userInfoResponse.ok) { throw new Error(`HTTP error! status: ${userInfoResponse.status}`); } const profileData = await userInfoResponse.json(); + console.log("profileData", profileData); + // Get user email address const emailResponse = await fetch( "https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))", { headers: { - Authorization: `Bearer ${tokenData.access_token}`, + Authorization: `Bearer ${data.access_token}`, }, }, ); @@ -54,7 +64,7 @@ async function getLinkedInTokensAndUserInfo(code: string) { const emailData = await emailResponse.json(); return { - access_token: tokenData.access_token, + access_token: data.access_token, email: emailData.elements[0]["handle~"].emailAddress, firstName: profileData.localizedFirstName, lastName: profileData.localizedLastName, From 54e7b6a1a6dfef13d8b5de909ebf2d2446cf0965 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:01:33 -0400 Subject: [PATCH 079/110] fix: linkedin4 --- zk-auth/src/app/api/linkedin/get-token/route.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index 1f0bfc1..f805ee9 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -4,8 +4,8 @@ import env from "~/env"; async function getLinkedInTokensAndUserInfo(code: string) { try { const params = new URLSearchParams(); - params.append("client_id", env.TWITCH_CLIENT_ID); - params.append("client_secret", env.TWITCH_CLIENT_SECRET); + params.append("client_id", env.LINKEDIN_CLIENT_ID); + params.append("client_secret", env.LINKEDIN_CLIENT_SECRET); params.append("code", code); params.append("grant_type", "authorization_code"); params.append("redirect_uri", "http://localhost:3000"); From cf463c560fce234d39a239dcb911587ff1511899 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:09:22 -0400 Subject: [PATCH 080/110] fix: linkedin5 --- .../package/src/hooks/use-linkedin-auth.ts | 10 +++- zk-auth/public/linkedin.svg | 1 + .../src/app/api/linkedin/get-token/route.ts | 52 ++----------------- 3 files changed, 12 insertions(+), 51 deletions(-) create mode 100644 zk-auth/public/linkedin.svg diff --git a/zk-auth/package/src/hooks/use-linkedin-auth.ts b/zk-auth/package/src/hooks/use-linkedin-auth.ts index 007acf9..034e98a 100644 --- a/zk-auth/package/src/hooks/use-linkedin-auth.ts +++ b/zk-auth/package/src/hooks/use-linkedin-auth.ts @@ -1,5 +1,6 @@ "use client"; +import jwtDecode from "jwt-decode"; import { useCallback, useState } from "react"; import { useSocialsLocalStorage } from "./use-socials"; @@ -38,9 +39,14 @@ export function useLinkedInAuth({ address }: { address: `0x${string}` }) { return; } - const { jwt, email, profilePictureUrl, firstName, lastName } = await response.json(); + const { jwt } = await response.json(); + const { name, email, picture } = jwtDecode(jwt) as any; - setLinkedInUserInfos({ email, profilePictureUrl, firstName, lastName }); + setLinkedInUserInfos({ + name, + email, + picture, + }); if (jwt) { setLinkedInUserToken(jwt); diff --git a/zk-auth/public/linkedin.svg b/zk-auth/public/linkedin.svg new file mode 100644 index 0000000..7bc1562 --- /dev/null +++ b/zk-auth/public/linkedin.svg @@ -0,0 +1 @@ + diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index f805ee9..7b8a3fb 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -18,8 +18,6 @@ async function getLinkedInTokensAndUserInfo(code: string) { body: params, }); - console.log("response", response); - if (!response.ok) { const errorText = await response.text(); console.error("LinkedIn API Error:", response.status, errorText); @@ -30,46 +28,7 @@ async function getLinkedInTokensAndUserInfo(code: string) { console.log("data", data); - // Get user profile information - const userInfoResponse = await fetch("https://api.linkedin.com/v2/userinfo", { - headers: { - Authorization: `Bearer ${data.access_token}`, - }, - }); - - console.log("userInfoResponse", userInfoResponse); - - if (!userInfoResponse.ok) { - throw new Error(`HTTP error! status: ${userInfoResponse.status}`); - } - - const profileData = await userInfoResponse.json(); - - console.log("profileData", profileData); - - // Get user email address - const emailResponse = await fetch( - "https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))", - { - headers: { - Authorization: `Bearer ${data.access_token}`, - }, - }, - ); - - if (!emailResponse.ok) { - throw new Error(`HTTP error! status: ${emailResponse.status}`); - } - - const emailData = await emailResponse.json(); - - return { - access_token: data.access_token, - email: emailData.elements[0]["handle~"].emailAddress, - firstName: profileData.localizedFirstName, - lastName: profileData.localizedLastName, - profilePictureUrl: profileData.profilePicture?.["displayImage~"]?.elements[0]?.identifiers[0]?.identifier, - }; + return data; } catch (error) { console.error("Error getting LinkedIn tokens and user info:", error); throw error; @@ -79,15 +38,10 @@ async function getLinkedInTokensAndUserInfo(code: string) { export async function POST(request: Request) { try { const { code } = await request.json(); - const { access_token, email, firstName, lastName, profilePictureUrl } = await getLinkedInTokensAndUserInfo(code); + const { id_token } = await getLinkedInTokensAndUserInfo(code); return NextResponse.json({ - jwt: access_token, // Note: LinkedIn doesn't provide an id_token, so we're using access_token here - access_token, - email, - firstName, - lastName, - profilePictureUrl, + jwt: id_token, }); } catch (error) { console.error("Failed to get tokens and user info:", error); From 6a04c313efcd8bc38e062952689bb67c944f1a06 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:19:28 -0400 Subject: [PATCH 081/110] fix: linkedin6 --- .../src/components/linkedin-user-infos.tsx | 43 +++++++++++++++++++ .../package/src/components/prove-button.tsx | 11 +++-- .../package/src/components/sign-in-button.tsx | 6 +-- zk-auth/package/src/hooks/use-socials.ts | 2 +- zk-auth/package/src/utils/do-stark-proving.ts | 2 +- zk-auth/package/src/zk-auth.tsx | 4 +- .../oidc-validator/src/lib.rs | 24 +++++++++++ 7 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 zk-auth/package/src/components/linkedin-user-infos.tsx diff --git a/zk-auth/package/src/components/linkedin-user-infos.tsx b/zk-auth/package/src/components/linkedin-user-infos.tsx new file mode 100644 index 0000000..4694eef --- /dev/null +++ b/zk-auth/package/src/components/linkedin-user-infos.tsx @@ -0,0 +1,43 @@ +import { Alert, AlertDescription } from "@risc0/ui/alert"; + +export function LinkedInUserInfos({ + userInfos, +}: { + userInfos: { + name: string; + email: string; + picture?: string; + }; +}) { + return ( + +
+ {userInfos.name} +
+ +

+ {userInfos.name} +

+

+ {userInfos.email} +

+

+ LinkedIn + LinkedIn +

+
+
+ ); +} diff --git a/zk-auth/package/src/components/prove-button.tsx b/zk-auth/package/src/components/prove-button.tsx index 619ba0e..27cfd4c 100644 --- a/zk-auth/package/src/components/prove-button.tsx +++ b/zk-auth/package/src/components/prove-button.tsx @@ -12,13 +12,15 @@ import { doSnarkProving } from "../utils/do-snark-proving"; import { doStarkProving } from "../utils/do-stark-proving"; import { BorderBeam } from "./border-beam"; import { GoogleUserInfos } from "./google-user-infos"; +import { LinkedInUserInfos } from "./linkedin-user-infos"; import { SignOutButton } from "./sign-out-button"; import { TwitchUserInfos } from "./twitch-user-infos"; export function ProveButton({ address }: { address: `0x${string}` }) { const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); - const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken } = useSocialsLocalStorage({ address }); + const { googleUserInfos, twitchUserInfos, linkedInUserToken, linkedInUserInfos, googleUserToken, twitchUserToken } = + useSocialsLocalStorage({ address }); const [error, setError] = useState(); const [isLoading, setIsLoading] = useState(false); const [snarkPollingResults, setSnarkPollingResults] = useState(); @@ -31,7 +33,7 @@ export function ProveButton({ address }: { address: `0x${string}` }) { async function handleClick() { setIsLoading(true); - if (!googleUserToken && !twitchUserToken) { + if (!googleUserToken && !twitchUserToken && !linkedInUserToken) { console.error("JWT not found"); setIsLoading(false); @@ -40,9 +42,9 @@ export function ProveButton({ address }: { address: `0x${string}` }) { try { const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : twitchUserInfos ? "Twitch" : "test", + iss: googleUserInfos ? "Google" : twitchUserInfos ? "Twitch" : linkedInUserInfos ? "LinkedIn" : "test", setStarkPollingResults, - token: googleUserToken ?? twitchUserToken ?? "", + token: googleUserToken ?? twitchUserToken ?? linkedInUserToken ?? "", }); const { snarkStatus } = await doSnarkProving({ setSnarkPollingResults, starkUuid }); @@ -83,6 +85,7 @@ export function ProveButton({ address }: { address: `0x${string}` }) { {googleUserInfos && } {twitchUserInfos && } + {linkedInUserInfos && } )} diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 5810df4..61d91b4 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -121,7 +121,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-7 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" >
Twitch @@ -136,10 +136,10 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#0077B5] pl-7 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#0077B5] pl-9 font-normal text-[14px] text-white tracking-wider hover:bg-[#0077B5] hover:text-white" >
- LinkedIn + LinkedIn
Continue with LinkedIn diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index 3bdc594..3d1249a 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -34,7 +34,7 @@ export function useSocialsLocalStorage({ // linkedin const [linkedInUserInfos, setLinkedInUserInfos] = useLocalStorage( - generateLocalStorageKey("twitch", "infos", address), + generateLocalStorageKey("linkedin", "infos", address), undefined, ); const [linkedInUserToken, setLinkedInUserToken] = useLocalStorage( diff --git a/zk-auth/package/src/utils/do-stark-proving.ts b/zk-auth/package/src/utils/do-stark-proving.ts index 0509c9f..1062be6 100644 --- a/zk-auth/package/src/utils/do-stark-proving.ts +++ b/zk-auth/package/src/utils/do-stark-proving.ts @@ -2,7 +2,7 @@ import { sleep } from "@risc0/ui/utils/sleep"; import isEqual from "lodash-es/isEqual"; import type { Dispatch, SetStateAction } from "react"; -type Iss = "Google" | "Twitch" | "test"; +type Iss = "Google" | "Twitch" | "LinkedIn" | "test"; type StarkSessionStatusRes = { status: string; diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 57ff701..783a380 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -15,7 +15,7 @@ export type ZkAuthProps = { }; export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { - const { googleUserInfos, twitchUserInfos } = useSocialsLocalStorage({ address }); + const { googleUserInfos, twitchUserInfos, linkedInUserInfos } = useSocialsLocalStorage({ address }); const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); @@ -43,7 +43,7 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp > wipe local storage - ) : googleUserInfos || twitchUserInfos ? ( + ) : googleUserInfos || twitchUserInfos || linkedInUserInfos ? ( ) : ( diff --git a/zk-socials/social_validator/oidc-validator/src/lib.rs b/zk-socials/social_validator/oidc-validator/src/lib.rs index b1a1ddb..e510fe5 100644 --- a/zk-socials/social_validator/oidc-validator/src/lib.rs +++ b/zk-socials/social_validator/oidc-validator/src/lib.rs @@ -29,6 +29,7 @@ struct Extra { pub enum IdentityProvider { Google, Twitch, + LinkedIn, Test, } @@ -53,6 +54,12 @@ impl IdentityProvider { let pref_user = decoded.preferred_username.to_string(); Ok((pref_user, nonce, exp, iat, jwk_str.to_string())) } + Self::LinkedIn => { + let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); + let email = decoded.email.to_string(); + let nonce = decoded.nonce.to_string(); + Ok((email, nonce, exp, iat, jwk_str.to_string())) + } Self::Test => { let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); let email = decoded.email.to_string(); @@ -68,12 +75,29 @@ impl From for IdentityProvider { match value.to_lowercase().as_str() { "google" => Self::Google, "twitch" => Self::Twitch, + "linkedin" => Self::LinkedIn, "test" => Self::Test, _ => panic!("invalid identity provider"), } } } +#[derive(Deserialize, Serialize, Debug, Clone)] +pub struct LinkedInClaims { + pub aud: String, + pub iss: String, + pub sub: String, + pub nonce: String, // I require this one. + pub email: String, // And this one too. + pub email_verified: Option, + pub name: Option, + pub family_name: Option, + pub given_name: Option, + pub locale: Option, + pub name: Option, + pub picture: Option, +} + #[derive(Deserialize, Serialize, Debug, Clone)] pub struct TwitchClaims { pub aud: String, From a568249c69d549c90ba570ddf10bafb5bab5c0a6 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:29:58 -0400 Subject: [PATCH 082/110] fix: linkedin7 --- zk-auth/package/src/components/sign-in-button.tsx | 13 ++++--------- zk-auth/package/src/components/sign-out-button.tsx | 11 ++++++++++- zk-auth/src/app/api/linkedin/get-token/route.ts | 1 + 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 61d91b4..1bacf4b 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -22,6 +22,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); const { handleLinkedInAuthCallback, signInWithLinkedIn } = useLinkedInAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); + const urlState = new URLSearchParams(window.location.search).get("state"); // google auth callback useEffect(() => { @@ -45,10 +46,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } async function handleLinkedInAuth() { - const code = new URLSearchParams(window.location.search).get("code"); - const urlState = new URLSearchParams(window.location.search).get("state"); - - if (urlState === "linkedin" && code) { + if (urlState?.startsWith("linkedin") && code) { try { await handleLinkedInAuthCallback(code); @@ -60,7 +58,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } handleLinkedInAuth(); - }, [handleLinkedInAuthCallback, linkedInUserToken]); + }, [handleLinkedInAuthCallback, linkedInUserToken, code, urlState]); // twitch auth callback useEffect(() => { @@ -69,9 +67,6 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } async function handleTwitchAuth() { - const code = new URLSearchParams(window.location.search).get("code"); - const urlState = new URLSearchParams(window.location.search).get("state"); - if (urlState === "twitch" && code) { try { await handleTwitchAuthCallback(code); @@ -84,7 +79,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } handleTwitchAuth(); - }, [handleTwitchAuthCallback, twitchUserToken]); + }, [handleTwitchAuthCallback, twitchUserToken, code, urlState]); // loading state if (code) { diff --git a/zk-auth/package/src/components/sign-out-button.tsx b/zk-auth/package/src/components/sign-out-button.tsx index 66e3714..ba8b65c 100644 --- a/zk-auth/package/src/components/sign-out-button.tsx +++ b/zk-auth/package/src/components/sign-out-button.tsx @@ -13,7 +13,10 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { setTwitchUserInfos, setTwitchUserToken, googleUserInfos, + linkedInUserInfos, twitchUserInfos, + setLinkedInUserInfos, + setLinkedInUserToken, } = useSocialsLocalStorage({ address }); function signOut() { @@ -21,14 +24,20 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { const currentUrl = new URL(window.location.href); window.history.replaceState({}, document.title, currentUrl.pathname); + // google setGoogleUserToken(undefined); setGoogleUserInfos(undefined); + // twitch setTwitchUserToken(undefined); setTwitchUserInfos(undefined); + + // linkedin + setLinkedInUserToken(undefined); + setLinkedInUserInfos(undefined); } - if (!mounted || !address || (!googleUserInfos && !twitchUserInfos)) { + if (!mounted || !address || (!googleUserInfos && !twitchUserInfos && !linkedInUserInfos)) { return
; } diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index 7b8a3fb..ff0ccb4 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -8,6 +8,7 @@ async function getLinkedInTokensAndUserInfo(code: string) { params.append("client_secret", env.LINKEDIN_CLIENT_SECRET); params.append("code", code); params.append("grant_type", "authorization_code"); + params.append("nonce", "0x000"); params.append("redirect_uri", "http://localhost:3000"); const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { From a1fd08fd066f5721b28c9b4d3ff06de9f91d31c8 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:49:48 -0400 Subject: [PATCH 083/110] fix: linkedin8 --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- .../package/src/components/sign-in-button.tsx | 18 ++++++------------ 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index f553ae3543ed09ab27a2d343bccf9b828e772ecf..8e0bb609ea4744ea6d0a179b486d0861c17c3868 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%z-N&_{|2!@D{khG(4c>+GuY30Spt|SXK#ANSBI#g7u}=Ca z0Tz?-7AKQ17YMU>Dm8aNu#O18R-{G`4+(@JA1wzooa;!UpMO2A3pWc^?R(?Q`Jg4q zn#H!YXc%)QTDY64%q5^iYAhbR$6v(v+bcC+5s}R4157Za{)59QSSl7SgDm8aNex>)*4@fPkUrZwMEL8-L!t{#zg_}8sD0G#ASRqorT#`YV z0Lzaw58S(@52BSej-an;F~W^?kuP_9f;b!8v+bcC+5s`Q4157Za{)28QSSl7Sp2y` AGynhq diff --git a/zk-auth/package.json b/zk-auth/package.json index 0223c15..3de2fcf 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.21", + "@risc0/zkauth": "0.0.22", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 352ec8d..25e27d7 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.21", + "version": "0.0.22", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 1bacf4b..0109564 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -11,14 +11,8 @@ import { useTwitchAuth } from "../hooks/use-twitch-auth"; import { cleanUrl } from "../utils/clean-url"; export function SignInButton({ address }: { address: `0x${string}` }) { - const { - googleUserInfos, - twitchUserToken, - googleUserToken, - linkedInUserToken, - setGoogleUserInfos, - setGoogleUserToken, - } = useSocialsLocalStorage({ address }); + const { twitchUserToken, googleUserToken, linkedInUserToken, setGoogleUserInfos, setGoogleUserToken } = + useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); const { handleLinkedInAuthCallback, signInWithLinkedIn } = useLinkedInAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); @@ -26,7 +20,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { // google auth callback useEffect(() => { - if (!googleUserToken || googleUserInfos) { + if (!googleUserToken) { return; } @@ -37,7 +31,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { email, picture, }); - }, [googleUserToken, setGoogleUserInfos, googleUserInfos]); + }, [googleUserToken, setGoogleUserInfos]); // linkedin auth callback useEffect(() => { @@ -116,7 +110,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] transition-colors flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" >
Twitch @@ -131,7 +125,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#0077B5] pl-9 font-normal text-[14px] text-white tracking-wider hover:bg-[#0077B5] hover:text-white" + className="relative flex h-8 w-full transition-colors max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#0077B5] pl-9 font-normal text-[14px] text-white tracking-wider hover:bg-[#005d8e] hover:text-white" >
LinkedIn From ee0bf9ce8594866b3791f4e62056244782c95f2c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 16:51:58 -0400 Subject: [PATCH 084/110] fix: linkedin9 --- zk-auth/src/app/api/linkedin/get-token/route.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index ff0ccb4..7b8a3fb 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -8,7 +8,6 @@ async function getLinkedInTokensAndUserInfo(code: string) { params.append("client_secret", env.LINKEDIN_CLIENT_SECRET); params.append("code", code); params.append("grant_type", "authorization_code"); - params.append("nonce", "0x000"); params.append("redirect_uri", "http://localhost:3000"); const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { From c8956027e2da09b197077524bdfebfc95c60fa30 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 19:49:55 -0400 Subject: [PATCH 085/110] fix: linkedin10 --- zk-auth/package/README.md | 2 +- zk-auth/package/src/hooks/use-linkedin-auth.ts | 2 +- zk-auth/src/app/api/linkedin/get-token/route.ts | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 1394ac8..47bf01a 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -2,7 +2,7 @@ ## In order to implement this flow you need to: -1. Ask us to add your domain to the list of allowed domains on Google Cloud Console +1. Ask us to add your domain to the list of allowed redirects (Google, Twitch, LinkedIn, etc) 2. Integrate the following code to your project: ##### React Example: diff --git a/zk-auth/package/src/hooks/use-linkedin-auth.ts b/zk-auth/package/src/hooks/use-linkedin-auth.ts index 034e98a..e3e649a 100644 --- a/zk-auth/package/src/hooks/use-linkedin-auth.ts +++ b/zk-auth/package/src/hooks/use-linkedin-auth.ts @@ -29,7 +29,7 @@ export function useLinkedInAuth({ address }: { address: `0x${string}` }) { const response = await fetch("https://zkauth.vercel.app/api/linkedin/get-token", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ code }), + body: JSON.stringify({ code, origin: window.location.origin }), }); console.log("response", response); diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts index 7b8a3fb..ae22bf9 100644 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ b/zk-auth/src/app/api/linkedin/get-token/route.ts @@ -1,14 +1,14 @@ import { NextResponse } from "next/server"; import env from "~/env"; -async function getLinkedInTokensAndUserInfo(code: string) { +async function getLinkedInTokensAndUserInfo(code: string, origin: string) { try { const params = new URLSearchParams(); params.append("client_id", env.LINKEDIN_CLIENT_ID); params.append("client_secret", env.LINKEDIN_CLIENT_SECRET); params.append("code", code); params.append("grant_type", "authorization_code"); - params.append("redirect_uri", "http://localhost:3000"); + params.append("redirect_uri", origin); const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { method: "POST", @@ -37,8 +37,8 @@ async function getLinkedInTokensAndUserInfo(code: string) { export async function POST(request: Request) { try { - const { code } = await request.json(); - const { id_token } = await getLinkedInTokensAndUserInfo(code); + const { code, origin } = await request.json(); + const { id_token } = await getLinkedInTokensAndUserInfo(code, origin); return NextResponse.json({ jwt: id_token, From 71a17c97216d8d1738a95d6b5c330ee41d4874cc Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Thu, 19 Sep 2024 19:54:09 -0400 Subject: [PATCH 086/110] fix: linkedin11 --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 8e0bb609ea4744ea6d0a179b486d0861c17c3868..99aaccd6cc3753d54ecf763f13d810489c91d170 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%zU_CbpoO~<DO!->%;F59nDm8aNVI~Z5pimtfb*>Z0W1A*C1AXScvVGA^5SrD&n`$I%^!U}- zo@hvLQapbM^-A20<+GuY30Spt|SXK#ANSBI#g7u}=Ca z0Tz?-7AKQ17YMU>Dm8aNu#O18R-{G`4+(@JA1wzooa;!UpMO2A3pWc^?R(?Q`Jg4q zn#H!YXc%)QTDY64%q5^iYAhbR$6v(v+bcC+5s}R4157Za{)59QSSl7Sg Date: Fri, 20 Sep 2024 10:04:05 -0400 Subject: [PATCH 087/110] fix: add paypal --- zk-auth/package/src/hooks/use-paypal-auth.ts | 64 +++++++++++++++++ zk-auth/package/src/hooks/use-socials.ts | 14 ++++ .../package/src/types/supported-providers.ts | 2 +- zk-auth/src/app/api/paypal/get-token/route.ts | 72 +++++++++++++++++++ zk-auth/src/env.js | 6 ++ 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 zk-auth/package/src/hooks/use-paypal-auth.ts create mode 100644 zk-auth/src/app/api/paypal/get-token/route.ts diff --git a/zk-auth/package/src/hooks/use-paypal-auth.ts b/zk-auth/package/src/hooks/use-paypal-auth.ts new file mode 100644 index 0000000..e2cdaae --- /dev/null +++ b/zk-auth/package/src/hooks/use-paypal-auth.ts @@ -0,0 +1,64 @@ +"use client"; + +import jwtDecode from "jwt-decode"; +import { useState } from "react"; +import { useSocialsLocalStorage } from "./use-socials"; + +const PAYPAL_CLIENT_ID = "AZgjTPHfBSZL8INkF_gO08RkC3ae9-RMlc74QpKiVsv5nzizQtahg8UEkngU0X43ZZLUTJO3y6h8qkLf"; +const PAYPAL_REDIRECT_URI = window.location.origin; + +export function usePayPalAuth({ address }: { address: `0x${string}` }) { + const { setPaypalUserToken, setPaypalUserInfos } = useSocialsLocalStorage({ address }); + const [error, setError] = useState(null); + + function signInWithPayPal() { + const authUrl = new URL("https://www.paypal.com/connect"); + authUrl.searchParams.append("response_type", "code"); + authUrl.searchParams.append("client_id", PAYPAL_CLIENT_ID); + authUrl.searchParams.append("redirect_uri", PAYPAL_REDIRECT_URI); + authUrl.searchParams.append("scope", "openid profile email"); + authUrl.searchParams.append("nonce", address); + authUrl.searchParams.append("state", "paypal"); + + window.location.href = authUrl.toString(); + } + + function handlePayPalAuthCallback(code: string) { + return async () => { + try { + const response = await fetch("https://zkauth.vercel.app/api/paypal/get-token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code, origin: window.location.origin }), + }); + + if (!response.ok) { + setError("Failed to authenticate with PayPal"); + return; + } + + const { jwt } = await response.json(); + const { name, email, picture } = jwtDecode(jwt) as any; + + setPaypalUserInfos({ + name, + email, + picture, + }); + + if (jwt) { + setPaypalUserToken(jwt); + } + } catch (err) { + setError("Failed to authenticate with PayPal"); + console.error(err); + } + }; + } + + return { + error, + signInWithPayPal, + handlePayPalAuthCallback, + }; +} diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index 3d1249a..4c8f107 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -42,6 +42,16 @@ export function useSocialsLocalStorage({ undefined, ); + // paypal + const [paypalUserInfos, setPaypalUserInfos] = useLocalStorage( + generateLocalStorageKey("paypal", "infos", address), + undefined, + ); + const [paypalUserToken, setPaypalUserToken] = useLocalStorage( + generateLocalStorageKey("paypal", "token", address), + undefined, + ); + return { googleUserInfos, googleUserToken, @@ -55,5 +65,9 @@ export function useSocialsLocalStorage({ setTwitchUserToken, twitchUserInfos, twitchUserToken, + paypalUserInfos, + paypalUserToken, + setPaypalUserInfos, + setPaypalUserToken, }; } diff --git a/zk-auth/package/src/types/supported-providers.ts b/zk-auth/package/src/types/supported-providers.ts index c1f9b87..e8a5114 100644 --- a/zk-auth/package/src/types/supported-providers.ts +++ b/zk-auth/package/src/types/supported-providers.ts @@ -1 +1 @@ -export type SupportedProviders = "google" | "twitch" | "linkedin" | "test"; +export type SupportedProviders = "google" | "twitch" | "linkedin" | "paypal" | "test"; diff --git a/zk-auth/src/app/api/paypal/get-token/route.ts b/zk-auth/src/app/api/paypal/get-token/route.ts new file mode 100644 index 0000000..b5103aa --- /dev/null +++ b/zk-auth/src/app/api/paypal/get-token/route.ts @@ -0,0 +1,72 @@ +import { NextResponse } from "next/server"; +import env from "~/env"; + +async function getPayPalTokensAndUserInfo(code: string, origin: string) { + try { + const params = new URLSearchParams(); + params.append("grant_type", "authorization_code"); + params.append("code", code); + params.append("redirect_uri", origin); + + const response = await fetch("https://api-m.sandbox.paypal.com/v1/oauth2/token", { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Authorization: `Basic ${Buffer.from(`${env.PAYPAL_CLIENT_ID}:${env.PAYPAL_CLIENT_SECRET}`).toString("base64")}`, + }, + body: params, + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error("PayPal API Error:", response.status, errorText); + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + // Fetch user info using the access token + const userInfoResponse = await fetch( + "https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1", + { + headers: { + Authorization: `Bearer ${data.access_token}`, + }, + }, + ); + + if (!userInfoResponse.ok) { + throw new Error(`Failed to fetch user info: ${userInfoResponse.status}`); + } + + const userInfo = await userInfoResponse.json(); + + return { + ...data, + user_info: userInfo, + }; + } catch (error) { + console.error("Error getting PayPal tokens and user info:", error); + throw error; + } +} + +export async function POST(request: Request) { + try { + const { code, origin } = await request.json(); + const { access_token, user_info } = await getPayPalTokensAndUserInfo(code, origin); + + console.log("access_token", access_token); + console.log("user_info", user_info); + + // Create a simple JWT-like token with user info + const id_token = Buffer.from(JSON.stringify(user_info)).toString("base64"); + + return NextResponse.json({ + jwt: id_token, + }); + } catch (error) { + console.error("Failed to get tokens and user info:", error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index e4be499..9875d0a 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -17,6 +17,10 @@ const env = createEnv({ LINKEDIN_CLIENT_ID: z.string(), LINKEDIN_CLIENT_SECRET: z.string(), + // paypal + PAYPAL_CLIENT_ID: z.string(), + PAYPAL_CLIENT_SECRET: z.string(), + // bonsai BONSAI_VERSION: z.string(), BONSAI_API_KEY: z.string(), @@ -41,6 +45,8 @@ const env = createEnv({ TWITCH_CLIENT_SECRET: process.env.TWITCH_CLIENT_SECRET, LINKEDIN_CLIENT_ID: process.env.LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET: process.env.LINKEDIN_CLIENT_SECRET, + PAYPAL_CLIENT_ID: process.env.PAYPAL_CLIENT_ID, + PAYPAL_CLIENT_SECRET: process.env.PAYPAL_CLIENT_SECRET, BONSAI_VERSION: process.env.BONSAI_VERSION, BONSAI_API_KEY: process.env.BONSAI_API_KEY, BONSAI_URL: process.env.BONSAI_URL, From c1801e554203e5c88c076176f80a2d8122f3aa15 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 10:22:16 -0400 Subject: [PATCH 088/110] fix: add paypal2 --- zk-auth/.env.example | 7 +++ .../package/src/components/sign-in-button.tsx | 48 ++++++++++++++++++- zk-auth/package/src/hooks/use-paypal-auth.ts | 21 ++++---- 3 files changed, 64 insertions(+), 12 deletions(-) diff --git a/zk-auth/.env.example b/zk-auth/.env.example index ff2c5ed..b270ac5 100644 --- a/zk-auth/.env.example +++ b/zk-auth/.env.example @@ -6,3 +6,10 @@ IMAGE_ID= 32 TWITCH_CLIENT_ID= TWITCH_CLIENT_SECRET= + +LINKEDIN_CLIENT_ID= +LINKEDIN_CLIENT_SECRET= + +PAYPAL_CLIENT_ID= +PAYPAL_CLIENT_SECRET= + diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 0109564..b540097 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -6,14 +6,22 @@ import jwtDecode from "jwt-decode"; import { Loader2Icon } from "lucide-react"; import { useEffect } from "react"; import { useLinkedInAuth } from "../hooks/use-linkedin-auth"; +import { usePaypalAuth } from "../hooks/use-paypal-auth"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; import { cleanUrl } from "../utils/clean-url"; export function SignInButton({ address }: { address: `0x${string}` }) { - const { twitchUserToken, googleUserToken, linkedInUserToken, setGoogleUserInfos, setGoogleUserToken } = - useSocialsLocalStorage({ address }); + const { + twitchUserToken, + googleUserToken, + paypalUserToken, + linkedInUserToken, + setGoogleUserInfos, + setGoogleUserToken, + } = useSocialsLocalStorage({ address }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); + const { handlePaypalAuthCallback, signInWithPaypal } = usePaypalAuth({ address }); const { handleLinkedInAuthCallback, signInWithLinkedIn } = useLinkedInAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); const urlState = new URLSearchParams(window.location.search).get("state"); @@ -54,6 +62,27 @@ export function SignInButton({ address }: { address: `0x${string}` }) { handleLinkedInAuth(); }, [handleLinkedInAuthCallback, linkedInUserToken, code, urlState]); + // paypal auth callback + useEffect(() => { + if (paypalUserToken) { + return; + } + + async function handlePaypalAuth() { + if (urlState === "paypal" && code) { + try { + await handlePaypalAuthCallback(code); + + cleanUrl(); + } catch (error) { + console.error("Paypal Auth error:", error); + } + } + } + + handlePaypalAuth(); + }, [handlePaypalAuthCallback, paypalUserToken, code, urlState]); + // twitch auth callback useEffect(() => { if (twitchUserToken) { @@ -132,6 +161,21 @@ export function SignInButton({ address }: { address: `0x${string}` }) {
Continue with LinkedIn + +
); } diff --git a/zk-auth/package/src/hooks/use-paypal-auth.ts b/zk-auth/package/src/hooks/use-paypal-auth.ts index e2cdaae..a274d66 100644 --- a/zk-auth/package/src/hooks/use-paypal-auth.ts +++ b/zk-auth/package/src/hooks/use-paypal-auth.ts @@ -1,18 +1,18 @@ "use client"; import jwtDecode from "jwt-decode"; -import { useState } from "react"; +import { useCallback, useState } from "react"; import { useSocialsLocalStorage } from "./use-socials"; const PAYPAL_CLIENT_ID = "AZgjTPHfBSZL8INkF_gO08RkC3ae9-RMlc74QpKiVsv5nzizQtahg8UEkngU0X43ZZLUTJO3y6h8qkLf"; const PAYPAL_REDIRECT_URI = window.location.origin; -export function usePayPalAuth({ address }: { address: `0x${string}` }) { +export function usePaypalAuth({ address }: { address: `0x${string}` }) { const { setPaypalUserToken, setPaypalUserInfos } = useSocialsLocalStorage({ address }); const [error, setError] = useState(null); - function signInWithPayPal() { - const authUrl = new URL("https://www.paypal.com/connect"); + function signInWithPaypal() { + const authUrl = new URL("https://www.sandbox.paypal.com/connect"); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("client_id", PAYPAL_CLIENT_ID); authUrl.searchParams.append("redirect_uri", PAYPAL_REDIRECT_URI); @@ -23,8 +23,8 @@ export function usePayPalAuth({ address }: { address: `0x${string}` }) { window.location.href = authUrl.toString(); } - function handlePayPalAuthCallback(code: string) { - return async () => { + const handlePaypalAuthCallback = useCallback( + async (code: string) => { try { const response = await fetch("https://zkauth.vercel.app/api/paypal/get-token", { method: "POST", @@ -53,12 +53,13 @@ export function usePayPalAuth({ address }: { address: `0x${string}` }) { setError("Failed to authenticate with PayPal"); console.error(err); } - }; - } + }, + [setPaypalUserInfos, setPaypalUserToken], + ); return { error, - signInWithPayPal, - handlePayPalAuthCallback, + signInWithPaypal, + handlePaypalAuthCallback, }; } From 8c4637952bd85f831202485f6130c3419cbca47f Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 10:32:23 -0400 Subject: [PATCH 089/110] fix: add paypal3 --- zk-auth/package/src/components/sign-in-button.tsx | 1 + zk-auth/package/src/hooks/use-paypal-auth.ts | 3 +++ zk-auth/src/app/api/paypal/get-token/route.ts | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index b540097..b2293be 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -149,6 +149,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) {
Continue with Twitch - - - -
); } diff --git a/zk-auth/package/src/components/sign-out-button.tsx b/zk-auth/package/src/components/sign-out-button.tsx index ba8b65c..d0c13ff 100644 --- a/zk-auth/package/src/components/sign-out-button.tsx +++ b/zk-auth/package/src/components/sign-out-button.tsx @@ -13,10 +13,7 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { setTwitchUserInfos, setTwitchUserToken, googleUserInfos, - linkedInUserInfos, twitchUserInfos, - setLinkedInUserInfos, - setLinkedInUserToken, } = useSocialsLocalStorage({ address }); function signOut() { @@ -31,13 +28,9 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { // twitch setTwitchUserToken(undefined); setTwitchUserInfos(undefined); - - // linkedin - setLinkedInUserToken(undefined); - setLinkedInUserInfos(undefined); } - if (!mounted || !address || (!googleUserInfos && !twitchUserInfos && !linkedInUserInfos)) { + if (!mounted || !address || (!googleUserInfos && !twitchUserInfos)) { return
; } diff --git a/zk-auth/package/src/hooks/use-linkedin-auth.ts b/zk-auth/package/src/hooks/use-linkedin-auth.ts deleted file mode 100644 index e3e649a..0000000 --- a/zk-auth/package/src/hooks/use-linkedin-auth.ts +++ /dev/null @@ -1,67 +0,0 @@ -"use client"; - -import jwtDecode from "jwt-decode"; -import { useCallback, useState } from "react"; -import { useSocialsLocalStorage } from "./use-socials"; - -const LINKEDIN_CLIENT_ID = "78mnvddaf35fh5"; -const LINKEDIN_REDIRECT_URI = window.location.origin; - -export function useLinkedInAuth({ address }: { address: `0x${string}` }) { - const { setLinkedInUserToken, setLinkedInUserInfos } = useSocialsLocalStorage({ address }); - const [error, setError] = useState(null); - - const signInWithLinkedIn = useCallback(() => { - const authUrl = new URL("https://www.linkedin.com/oauth/v2/authorization"); - authUrl.searchParams.append("response_type", "code"); - authUrl.searchParams.append("client_id", LINKEDIN_CLIENT_ID); - authUrl.searchParams.append("redirect_uri", LINKEDIN_REDIRECT_URI); - authUrl.searchParams.append("nonce", address); - authUrl.searchParams.append("state", "linkedin"); - authUrl.searchParams.append("scope", "openid profile email"); - - window.location.href = authUrl.toString(); - }, [address]); - - const handleLinkedInAuthCallback = useCallback( - async (code: string) => { - try { - const response = await fetch("https://zkauth.vercel.app/api/linkedin/get-token", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ code, origin: window.location.origin }), - }); - - console.log("response", response); - - if (!response.ok) { - setError("Failed to authenticate with LinkedIn"); - return; - } - - const { jwt } = await response.json(); - const { name, email, picture } = jwtDecode(jwt) as any; - - setLinkedInUserInfos({ - name, - email, - picture, - }); - - if (jwt) { - setLinkedInUserToken(jwt); - } - } catch (err) { - setError("Failed to authenticate with LinkedIn"); - console.error(err); - } - }, - [setLinkedInUserInfos, setLinkedInUserToken], - ); - - return { - error, - signInWithLinkedIn, - handleLinkedInAuthCallback, - }; -} diff --git a/zk-auth/package/src/hooks/use-paypal-auth.ts b/zk-auth/package/src/hooks/use-paypal-auth.ts deleted file mode 100644 index 13b09d8..0000000 --- a/zk-auth/package/src/hooks/use-paypal-auth.ts +++ /dev/null @@ -1,69 +0,0 @@ -"use client"; - -import jwtDecode from "jwt-decode"; -import { useCallback, useState } from "react"; -import { useSocialsLocalStorage } from "./use-socials"; - -const PAYPAL_CLIENT_ID = "AZgjTPHfBSZL8INkF_gO08RkC3ae9-RMlc74QpKiVsv5nzizQtahg8UEkngU0X43ZZLUTJO3y6h8qkLf"; -const PAYPAL_REDIRECT_URI = window.location.origin; - -export function usePaypalAuth({ address }: { address: `0x${string}` }) { - const { setPaypalUserToken, setPaypalUserInfos } = useSocialsLocalStorage({ address }); - const [error, setError] = useState(null); - - function signInWithPaypal() { - const authUrl = new URL("https://www.sandbox.paypal.com/connect"); - authUrl.searchParams.append("response_type", "code"); - authUrl.searchParams.append("client_id", PAYPAL_CLIENT_ID); - authUrl.searchParams.append("redirect_uri", PAYPAL_REDIRECT_URI); - authUrl.searchParams.append("scope", "openid profile email"); - //authUrl.searchParams.append("nonce", address); - authUrl.searchParams.append("state", "paypal"); - - window.location.href = authUrl.toString(); - } - - const handlePaypalAuthCallback = useCallback( - async (code: string) => { - try { - const response = await fetch("https://zkauth.vercel.app/api/paypal/get-token", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ code, origin: window.location.origin }), - }); - - console.log("response", response); - - if (!response.ok) { - setError("Failed to authenticate with PayPal"); - return; - } - - const { jwt } = await response.json(); - console.log("jwt", jwt); - const decoded = jwtDecode(jwt) as any; - console.log("decoded", decoded); - - /*setPaypalUserInfos({ - name, - email, - picture, - });*/ - - if (jwt) { - setPaypalUserToken(jwt); - } - } catch (err) { - setError("Failed to authenticate with PayPal"); - console.error(err); - } - }, - [setPaypalUserInfos, setPaypalUserToken], - ); - - return { - error, - signInWithPaypal, - handlePaypalAuthCallback, - }; -} diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index 4c8f107..c8374f0 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -32,42 +32,14 @@ export function useSocialsLocalStorage({ undefined, ); - // linkedin - const [linkedInUserInfos, setLinkedInUserInfos] = useLocalStorage( - generateLocalStorageKey("linkedin", "infos", address), - undefined, - ); - const [linkedInUserToken, setLinkedInUserToken] = useLocalStorage( - generateLocalStorageKey("linkedin", "token", address), - undefined, - ); - - // paypal - const [paypalUserInfos, setPaypalUserInfos] = useLocalStorage( - generateLocalStorageKey("paypal", "infos", address), - undefined, - ); - const [paypalUserToken, setPaypalUserToken] = useLocalStorage( - generateLocalStorageKey("paypal", "token", address), - undefined, - ); - return { googleUserInfos, googleUserToken, - linkedInUserInfos, - linkedInUserToken, setGoogleUserInfos, setGoogleUserToken, - setLinkedInUserInfos, - setLinkedInUserToken, setTwitchUserInfos, setTwitchUserToken, twitchUserInfos, twitchUserToken, - paypalUserInfos, - paypalUserToken, - setPaypalUserInfos, - setPaypalUserToken, }; } diff --git a/zk-auth/package/src/types/supported-providers.ts b/zk-auth/package/src/types/supported-providers.ts index e8a5114..a0e4e19 100644 --- a/zk-auth/package/src/types/supported-providers.ts +++ b/zk-auth/package/src/types/supported-providers.ts @@ -1 +1 @@ -export type SupportedProviders = "google" | "twitch" | "linkedin" | "paypal" | "test"; +export type SupportedProviders = "google" | "twitch" | "test"; diff --git a/zk-auth/package/src/utils/do-stark-proving.ts b/zk-auth/package/src/utils/do-stark-proving.ts index 81729dc..0509c9f 100644 --- a/zk-auth/package/src/utils/do-stark-proving.ts +++ b/zk-auth/package/src/utils/do-stark-proving.ts @@ -2,7 +2,7 @@ import { sleep } from "@risc0/ui/utils/sleep"; import isEqual from "lodash-es/isEqual"; import type { Dispatch, SetStateAction } from "react"; -type Iss = "Google" | "Twitch" | "LinkedIn" | "Paypal" | "test"; +type Iss = "Google" | "Twitch" | "test"; type StarkSessionStatusRes = { status: string; diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 783a380..57ff701 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -15,7 +15,7 @@ export type ZkAuthProps = { }; export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { - const { googleUserInfos, twitchUserInfos, linkedInUserInfos } = useSocialsLocalStorage({ address }); + const { googleUserInfos, twitchUserInfos } = useSocialsLocalStorage({ address }); const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); @@ -43,7 +43,7 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp > wipe local storage - ) : googleUserInfos || twitchUserInfos || linkedInUserInfos ? ( + ) : googleUserInfos || twitchUserInfos ? ( ) : ( diff --git a/zk-auth/public/linkedin.svg b/zk-auth/public/linkedin.svg deleted file mode 100644 index 7bc1562..0000000 --- a/zk-auth/public/linkedin.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 6be6182..7ae9cdf 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -122,10 +122,7 @@ class Client { } // STARK -export async function bonsaiStarkProving({ - iss, - token, -}: { iss: "Google" | "Twitch" | "LinkedIn" | "Paypal" | "test"; token: string }) { +export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { let jwks = ""; if (iss === "Google") { @@ -136,14 +133,6 @@ export async function bonsaiStarkProving({ jwks = await getCerts("twitch"); } - if (iss === "LinkedIn") { - jwks = await getCerts("linkedin"); - } - - if (iss === "Paypal") { - jwks = await getCerts("paypal"); - } - const inputData = Buffer.from( encodeString( JSON.stringify({ diff --git a/zk-auth/src/app/_lib/get-certs.ts b/zk-auth/src/app/_lib/get-certs.ts index cd20f70..15d9e95 100644 --- a/zk-auth/src/app/_lib/get-certs.ts +++ b/zk-auth/src/app/_lib/get-certs.ts @@ -1,18 +1,14 @@ import axios from "axios"; -export async function getCerts(provider: "google" | "linkedin" | "twitch" | "paypal"): Promise { +export async function getCerts(provider: "google" | "twitch"): Promise { return JSON.stringify( ( await axios.get( provider === "google" ? "https://www.googleapis.com/oauth2/v3/certs" - : provider === "linkedin" - ? "https://www.linkedin.com/oauth/openid/jwks" - : provider === "twitch" - ? "https://id.twitch.tv/oauth2/keys" - : provider === "paypal" - ? "https://api.paypal.com/v1/oauth2/certs" - : "", + : provider === "twitch" + ? "https://id.twitch.tv/oauth2/keys" + : "", ) ).data, ); diff --git a/zk-auth/src/app/api/linkedin/get-token/route.ts b/zk-auth/src/app/api/linkedin/get-token/route.ts deleted file mode 100644 index ae22bf9..0000000 --- a/zk-auth/src/app/api/linkedin/get-token/route.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NextResponse } from "next/server"; -import env from "~/env"; - -async function getLinkedInTokensAndUserInfo(code: string, origin: string) { - try { - const params = new URLSearchParams(); - params.append("client_id", env.LINKEDIN_CLIENT_ID); - params.append("client_secret", env.LINKEDIN_CLIENT_SECRET); - params.append("code", code); - params.append("grant_type", "authorization_code"); - params.append("redirect_uri", origin); - - const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - body: params, - }); - - if (!response.ok) { - const errorText = await response.text(); - console.error("LinkedIn API Error:", response.status, errorText); - throw new Error(`HTTP error! status: ${response.status}`); - } - - const data = await response.json(); - - console.log("data", data); - - return data; - } catch (error) { - console.error("Error getting LinkedIn tokens and user info:", error); - throw error; - } -} - -export async function POST(request: Request) { - try { - const { code, origin } = await request.json(); - const { id_token } = await getLinkedInTokensAndUserInfo(code, origin); - - return NextResponse.json({ - jwt: id_token, - }); - } catch (error) { - console.error("Failed to get tokens and user info:", error); - return NextResponse.json({ error: String(error) }, { status: 500 }); - } -} diff --git a/zk-auth/src/app/api/paypal/get-token/route.ts b/zk-auth/src/app/api/paypal/get-token/route.ts deleted file mode 100644 index 95180aa..0000000 --- a/zk-auth/src/app/api/paypal/get-token/route.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { NextResponse } from "next/server"; -import env from "~/env"; - -async function getPayPalTokensAndUserInfo(code: string, origin: string) { - try { - console.log("code", code); - console.log("origin", origin); - const params = new URLSearchParams(); - params.append("grant_type", "authorization_code"); - params.append("code", code); - - const response = await fetch("https://api-m.sandbox.paypal.com/v1/oauth2/token", { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from(`${env.PAYPAL_CLIENT_ID}:${env.PAYPAL_CLIENT_SECRET}`).toString("base64")}`, - }, - body: params, - }); - - console.log("***response-----", response); - - if (!response.ok) { - const errorText = await response.text(); - console.error("PayPal API Error:", response.status, errorText); - throw new Error(`HTTP error! status: ${response.status}`); - } - - const data = await response.json(); - const { access_token } = data; - - console.log("***data", data); - console.log("***access_token", access_token); - - // Fetch user info using the access token - const userInfoResponse = await fetch( - "https://api-m.sandbox.paypal.com/v1/identity/openidconnect/userinfo?schema=openid", - { - headers: { - Authorization: `Bearer ${access_token}`, - }, - }, - ); - - console.log("***userInfoResponse", userInfoResponse); - - if (!userInfoResponse.ok) { - throw new Error(`Failed to fetch user info: ${userInfoResponse.status}`); - } - - const userInfo = await userInfoResponse.json(); - - console.log("***userInfo", userInfo); - - return { - ...data, - user_info: userInfo, - }; - } catch (error) { - console.error("Error getting PayPal tokens and user info:", error); - throw error; - } -} - -export async function POST(request: Request) { - try { - const { code, origin } = await request.json(); - const { access_token, user_info } = await getPayPalTokensAndUserInfo(code, origin); - - console.log("access_token", access_token); - console.log("user_info", user_info); - - // Create a simple JWT-like token with user info - const id_token = Buffer.from(JSON.stringify(user_info)).toString("base64"); - - return NextResponse.json({ - jwt: id_token, - }); - } catch (error) { - console.error("Failed to get tokens and user info:", error); - return NextResponse.json({ error: String(error) }, { status: 500 }); - } -} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index 9875d0a..2093bdf 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -13,14 +13,6 @@ const env = createEnv({ TWITCH_CLIENT_ID: z.string(), TWITCH_CLIENT_SECRET: z.string(), - // linkedin - LINKEDIN_CLIENT_ID: z.string(), - LINKEDIN_CLIENT_SECRET: z.string(), - - // paypal - PAYPAL_CLIENT_ID: z.string(), - PAYPAL_CLIENT_SECRET: z.string(), - // bonsai BONSAI_VERSION: z.string(), BONSAI_API_KEY: z.string(), @@ -43,10 +35,6 @@ const env = createEnv({ // Server-side environment variables TWITCH_CLIENT_ID: process.env.TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET: process.env.TWITCH_CLIENT_SECRET, - LINKEDIN_CLIENT_ID: process.env.LINKEDIN_CLIENT_ID, - LINKEDIN_CLIENT_SECRET: process.env.LINKEDIN_CLIENT_SECRET, - PAYPAL_CLIENT_ID: process.env.PAYPAL_CLIENT_ID, - PAYPAL_CLIENT_SECRET: process.env.PAYPAL_CLIENT_SECRET, BONSAI_VERSION: process.env.BONSAI_VERSION, BONSAI_API_KEY: process.env.BONSAI_API_KEY, BONSAI_URL: process.env.BONSAI_URL, From 953eb2199d3260938fc01b9627d3feedc3febd19 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 11:14:18 -0400 Subject: [PATCH 094/110] fix: publish --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 99aaccd6cc3753d54ecf763f13d810489c91d170..4fbaaefc44f7b6af916bc1f2ce661e4d134896ea 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%z_^;Gd^n;_6___klSpo&Sowqc0{uLIr(=tcS6XQ>>u}=Ca z0T`3<7AKQ17YMU>Dm8aNbe=-o!77lP(__H`qG3E?19^NnQargiZi@TuY6VsyJJ&l7 z`e6SlHWJVn5`ju*uU=mNa(+VLRQS|0wAT1cv+bcC+5t4T4157Za{)BBQSSl7SUH$N AQ2+n{ delta 146 zcmV;D0B!%3kO`HL36L%zU_CbpoO~<DO!->%;F59nDm8aNVI~Z5pimtfb*>Z0W1A*C1AXScvVGA^5SrD&n`$I%^!U}- zo@hvLQapbM^-A20< Date: Fri, 20 Sep 2024 13:13:45 -0400 Subject: [PATCH 095/110] fix: facebook --- zk-auth/.env.example | 3 + zk-auth/package/README.md | 11 +++ .../src/components/facebook-user-infos.tsx | 37 +++++++ .../package/src/components/sign-in-button.tsx | 45 ++++++++- .../package/src/hooks/use-facebook-auth.ts | 98 +++++++++++++++++++ zk-auth/package/src/hooks/use-socials.ts | 14 +++ .../package/src/types/supported-providers.ts | 2 +- .../src/app/api/facebook/get-token/route.ts | 69 +++++++++++++ zk-auth/src/env.js | 6 ++ 9 files changed, 281 insertions(+), 4 deletions(-) create mode 100644 zk-auth/package/src/components/facebook-user-infos.tsx create mode 100644 zk-auth/package/src/hooks/use-facebook-auth.ts create mode 100644 zk-auth/src/app/api/facebook/get-token/route.ts diff --git a/zk-auth/.env.example b/zk-auth/.env.example index ff2c5ed..e5f1890 100644 --- a/zk-auth/.env.example +++ b/zk-auth/.env.example @@ -6,3 +6,6 @@ IMAGE_ID= 32 TWITCH_CLIENT_ID= TWITCH_CLIENT_SECRET= + +FACEBOOK_APP_ID= +FACEBOOK_APP_SECRET= diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index e1b1ae0..eb9c61d 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -41,3 +41,14 @@ function App() { ``` *Note: if you are using Next.js, you need to mark the page as a client component with `"use client"`.* + + + +--- + +### Unsupported providers + +* LinkedIm (no way to pass a nonce) +* PayPal (no way to pass a nonce) +* Discord (doesn't support OIDC) +* Twitter/X (doesn't support OIDC) diff --git a/zk-auth/package/src/components/facebook-user-infos.tsx b/zk-auth/package/src/components/facebook-user-infos.tsx new file mode 100644 index 0000000..7afe204 --- /dev/null +++ b/zk-auth/package/src/components/facebook-user-infos.tsx @@ -0,0 +1,37 @@ +import { Alert, AlertDescription } from "@risc0/ui/alert"; + +export function FacebookUserInfos({ + userInfos, +}: { + userInfos: { + display_name: string; + profile_image_url?: string; + email: string; + }; +}) { + return ( + +
+ {userInfos.display_name} +
+ +

+ {userInfos.display_name} +

+

+ {userInfos.email} +

+

+ Facebook + Facebook +

+
+
+ ); +} diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 65a4377..4fcdad9 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -5,15 +5,18 @@ import { Button } from "@risc0/ui/button"; import jwtDecode from "jwt-decode"; import { Loader2Icon } from "lucide-react"; import { useEffect } from "react"; +import { useFacebookAuth } from "../hooks/use-facebook-auth"; import { useSocialsLocalStorage } from "../hooks/use-socials"; import { useTwitchAuth } from "../hooks/use-twitch-auth"; import { cleanUrl } from "../utils/clean-url"; export function SignInButton({ address }: { address: `0x${string}` }) { - const { twitchUserToken, googleUserToken, setGoogleUserInfos, setGoogleUserToken } = useSocialsLocalStorage({ - address, - }); + const { twitchUserToken, googleUserToken, facebookUserToken, setGoogleUserInfos, setGoogleUserToken } = + useSocialsLocalStorage({ + address, + }); const { handleTwitchAuthCallback, signInWithTwitch } = useTwitchAuth({ address }); + const { handleFacebookAuthCallback, signInWithFacebook } = useFacebookAuth({ address }); const code = new URLSearchParams(window.location.search).get("code"); const urlState = new URLSearchParams(window.location.search).get("state"); @@ -32,6 +35,27 @@ export function SignInButton({ address }: { address: `0x${string}` }) { }); }, [googleUserToken, setGoogleUserInfos]); + // facebook auth callback + useEffect(() => { + if (facebookUserToken) { + return; + } + + async function handleFacebookAuth() { + if (urlState === "facebook" && code) { + try { + await handleFacebookAuthCallback(code); + + cleanUrl(); + } catch (error) { + console.error("Facebook Auth error:", error); + } + } + } + + handleFacebookAuth(); + }, [handleFacebookAuthCallback, facebookUserToken, code, urlState]); + // twitch auth callback useEffect(() => { if (twitchUserToken) { @@ -95,6 +119,21 @@ export function SignInButton({ address }: { address: `0x${string}` }) {
Continue with Twitch + +
); } diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts new file mode 100644 index 0000000..51b9a54 --- /dev/null +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -0,0 +1,98 @@ +"use client"; + +import { useCallback, useState } from "react"; +import { useSocialsLocalStorage } from "./use-socials"; + +const FACEBOOK_APP_ID = "YOUR_FACEBOOK_APP_ID"; +const FACEBOOK_REDIRECT_URI = window.location.origin; + +function generateCodeVerifier() { + const array = new Uint8Array(32); + crypto.getRandomValues(array); + + // @ts-expect-error + return btoa(String.fromCharCode.apply(null, array)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); +} + +function generateCodeChallenge(codeVerifier: string) { + const encoder = new TextEncoder(); + const data = encoder.encode(codeVerifier); + + return crypto.subtle.digest("SHA-256", data).then((array) => { + // @ts-expect-error + return btoa(String.fromCharCode.apply(null, new Uint8Array(array))) + .replace(/\+/g, "-") + .replace(/\//g, "_") + .replace(/=/g, ""); + }); +} + +export function useFacebookAuth({ address }: { address: `0x${string}` }) { + const { setFacebookUserToken, setFacebookUserInfos } = useSocialsLocalStorage({ address }); + const [error, setError] = useState(null); + + async function signInWithFacebook() { + const codeVerifier = generateCodeVerifier(); + const codeChallenge = await generateCodeChallenge(codeVerifier); + const nonce = Math.random().toString(36).substring(2, 15); + + localStorage.setItem("codeVerifier", codeVerifier); + localStorage.setItem("nonce", nonce); + + const authUrl = new URL("https://www.facebook.com/v12.0/dialog/oauth"); + authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); + authUrl.searchParams.append("redirect_uri", FACEBOOK_REDIRECT_URI); + authUrl.searchParams.append("response_type", "code"); + authUrl.searchParams.append("scope", "openid email"); + authUrl.searchParams.append("state", "facebook"); + authUrl.searchParams.append("code_challenge", codeChallenge); + authUrl.searchParams.append("code_challenge_method", "S256"); + authUrl.searchParams.append("nonce", nonce); + + window.location.href = authUrl.toString(); + } + + const handleFacebookAuthCallback = useCallback( + async (code: string) => { + try { + const codeVerifier = localStorage.getItem("codeVerifier"); + const nonce = localStorage.getItem("nonce"); + + if (!codeVerifier || !nonce) { + throw new Error("Missing code verifier or nonce"); + } + + const response = await fetch("/api/facebook/get-token", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code, codeVerifier, nonce }), + }); + + if (!response.ok) { + throw new Error("Failed to authenticate with Facebook"); + } + + const { access_token, id_token, email, picture, name } = await response.json(); + + setFacebookUserInfos({ email, profile_image_url: picture, display_name: name }); + + if (id_token) { + setFacebookUserToken(id_token); + } + + localStorage.removeItem("codeVerifier"); + localStorage.removeItem("nonce"); + } catch (err) { + setError("Failed to authenticate with Facebook"); + console.error(err); + } + }, + [setFacebookUserInfos, setFacebookUserToken], + ); + + return { + error, + signInWithFacebook, + handleFacebookAuthCallback, + }; +} diff --git a/zk-auth/package/src/hooks/use-socials.ts b/zk-auth/package/src/hooks/use-socials.ts index c8374f0..9501a4f 100644 --- a/zk-auth/package/src/hooks/use-socials.ts +++ b/zk-auth/package/src/hooks/use-socials.ts @@ -22,6 +22,16 @@ export function useSocialsLocalStorage({ undefined, ); + // facebook + const [facebookUserInfos, setFacebookUserInfos] = useLocalStorage( + generateLocalStorageKey("facebook", "infos", address), + undefined, + ); + const [facebookUserToken, setFacebookUserToken] = useLocalStorage( + generateLocalStorageKey("facebook", "token", address), + undefined, + ); + // twitch const [twitchUserInfos, setTwitchUserInfos] = useLocalStorage( generateLocalStorageKey("twitch", "infos", address), @@ -41,5 +51,9 @@ export function useSocialsLocalStorage({ setTwitchUserToken, twitchUserInfos, twitchUserToken, + facebookUserInfos, + facebookUserToken, + setFacebookUserInfos, + setFacebookUserToken, }; } diff --git a/zk-auth/package/src/types/supported-providers.ts b/zk-auth/package/src/types/supported-providers.ts index a0e4e19..0ec2e08 100644 --- a/zk-auth/package/src/types/supported-providers.ts +++ b/zk-auth/package/src/types/supported-providers.ts @@ -1 +1 @@ -export type SupportedProviders = "google" | "twitch" | "test"; +export type SupportedProviders = "google" | "twitch" | "facebook" | "test"; diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts new file mode 100644 index 0000000..f089c36 --- /dev/null +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -0,0 +1,69 @@ +import { NextResponse } from "next/server"; +import env from "~/env"; + +async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, origin: string) { + try { + // Exchange code for access token and id_token + const tokenResponse = await fetch( + `https://graph.facebook.com/v12.0/oauth/access_token?client_id=${env.FACEBOOK_APP_ID}&redirect_uri=${origin}&code_verifier=${codeVerifier}&code=${code}`, + { method: "GET" }, + ); + + if (!tokenResponse.ok) { + throw new Error(`HTTP error! status: ${tokenResponse.status}`); + } + + const tokenData = await tokenResponse.json(); + + if (!tokenData.access_token || !tokenData.id_token) { + throw new Error("No access_token or id_token in Facebook response"); + } + + // Get user info using the access token + const userInfoResponse = await fetch( + `https://graph.facebook.com/me?fields=id,name,email,picture&access_token=${tokenData.access_token}`, + ); + + if (!userInfoResponse.ok) { + throw new Error(`HTTP error! status: ${userInfoResponse.status}`); + } + + const userData = await userInfoResponse.json(); + + return { + access_token: tokenData.access_token, + id_token: tokenData.id_token, + email: userData.email, + profile_image_url: userData.picture?.data?.url, + display_name: userData.name, + }; + } catch (error) { + console.error("Error getting Facebook tokens and user info:", error); + throw error; + } +} + +export async function POST(request: Request) { + try { + const { code, codeVerifier, nonce, origin } = await request.json(); + const { access_token, id_token, email, profile_image_url, display_name } = await getFacebookTokensAndUserInfo( + code, + codeVerifier, + origin, + ); + + // TODO: Validate the id_token here (verify signature, check nonce, etc.) + + return NextResponse.json({ + jwt: id_token, + access_token, + id_token, + display_name, + email, + profile_image_url, + }); + } catch (error) { + console.error("Failed to get tokens and user info:", error); + return NextResponse.json({ error: String(error) }, { status: 500 }); + } +} diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index 2093bdf..c6013fc 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -13,6 +13,10 @@ const env = createEnv({ TWITCH_CLIENT_ID: z.string(), TWITCH_CLIENT_SECRET: z.string(), + // facebook + FACEBOOK_APP_ID: z.string(), + FACEBOOK_APP_SECRET: z.string(), + // bonsai BONSAI_VERSION: z.string(), BONSAI_API_KEY: z.string(), @@ -35,6 +39,8 @@ const env = createEnv({ // Server-side environment variables TWITCH_CLIENT_ID: process.env.TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET: process.env.TWITCH_CLIENT_SECRET, + FACEBOOK_APP_ID: process.env.FACEBOOK_APP_ID, + FACEBOOK_APP_SECRET: process.env.FACEBOOK_APP_SECRET, BONSAI_VERSION: process.env.BONSAI_VERSION, BONSAI_API_KEY: process.env.BONSAI_API_KEY, BONSAI_URL: process.env.BONSAI_URL, From 585f5b82c370bc82e94ed20b036dd5bf445839be Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 13:14:28 -0400 Subject: [PATCH 096/110] fix: facebook logs --- zk-auth/src/app/api/facebook/get-token/route.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts index f089c36..c05f137 100644 --- a/zk-auth/src/app/api/facebook/get-token/route.ts +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -9,11 +9,14 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, { method: "GET" }, ); + console.log("tokenResponse", tokenResponse); + if (!tokenResponse.ok) { throw new Error(`HTTP error! status: ${tokenResponse.status}`); } const tokenData = await tokenResponse.json(); + console.log("tokenData", tokenData); if (!tokenData.access_token || !tokenData.id_token) { throw new Error("No access_token or id_token in Facebook response"); @@ -24,12 +27,16 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, `https://graph.facebook.com/me?fields=id,name,email,picture&access_token=${tokenData.access_token}`, ); + console.log("userInfoResponse", userInfoResponse); + if (!userInfoResponse.ok) { throw new Error(`HTTP error! status: ${userInfoResponse.status}`); } const userData = await userInfoResponse.json(); + console.log("userData", userData); + return { access_token: tokenData.access_token, id_token: tokenData.id_token, @@ -46,6 +53,10 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, export async function POST(request: Request) { try { const { code, codeVerifier, nonce, origin } = await request.json(); + console.log("code", code); + console.log("codeVerifier", codeVerifier); + console.log("nonce", nonce); + console.log("origin", origin); const { access_token, id_token, email, profile_image_url, display_name } = await getFacebookTokensAndUserInfo( code, codeVerifier, From 1e77bef2efae7358f4cf5cb92977d639c12c57af Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 13:42:53 -0400 Subject: [PATCH 097/110] fix: facebook2 --- zk-auth/package/src/hooks/use-facebook-auth.ts | 18 ++++++++---------- .../src/app/api/facebook/get-token/route.ts | 7 ++----- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index 51b9a54..1a55f95 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -3,8 +3,7 @@ import { useCallback, useState } from "react"; import { useSocialsLocalStorage } from "./use-socials"; -const FACEBOOK_APP_ID = "YOUR_FACEBOOK_APP_ID"; -const FACEBOOK_REDIRECT_URI = window.location.origin; +const FACEBOOK_APP_ID = "909797424299802"; function generateCodeVerifier() { const array = new Uint8Array(32); @@ -34,20 +33,18 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { async function signInWithFacebook() { const codeVerifier = generateCodeVerifier(); const codeChallenge = await generateCodeChallenge(codeVerifier); - const nonce = Math.random().toString(36).substring(2, 15); localStorage.setItem("codeVerifier", codeVerifier); - localStorage.setItem("nonce", nonce); const authUrl = new URL("https://www.facebook.com/v12.0/dialog/oauth"); authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); - authUrl.searchParams.append("redirect_uri", FACEBOOK_REDIRECT_URI); + authUrl.searchParams.append("redirect_uri", window.location.origin); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("scope", "openid email"); authUrl.searchParams.append("state", "facebook"); authUrl.searchParams.append("code_challenge", codeChallenge); authUrl.searchParams.append("code_challenge_method", "S256"); - authUrl.searchParams.append("nonce", nonce); + authUrl.searchParams.append("nonce", address); window.location.href = authUrl.toString(); } @@ -56,18 +53,19 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { async (code: string) => { try { const codeVerifier = localStorage.getItem("codeVerifier"); - const nonce = localStorage.getItem("nonce"); - if (!codeVerifier || !nonce) { + if (!codeVerifier) { throw new Error("Missing code verifier or nonce"); } - const response = await fetch("/api/facebook/get-token", { + const response = await fetch("https://zkauth.vercel.app/api/facebook/get-token", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ code, codeVerifier, nonce }), + body: JSON.stringify({ code, codeVerifier, origin: window.location.origin }), }); + console.log("response", response); + if (!response.ok) { throw new Error("Failed to authenticate with Facebook"); } diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts index c05f137..0949815 100644 --- a/zk-auth/src/app/api/facebook/get-token/route.ts +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -5,7 +5,7 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, try { // Exchange code for access token and id_token const tokenResponse = await fetch( - `https://graph.facebook.com/v12.0/oauth/access_token?client_id=${env.FACEBOOK_APP_ID}&redirect_uri=${origin}&code_verifier=${codeVerifier}&code=${code}`, + `https://graph.facebook.com/v12.0/oauth/access_token?client_id=${env.FACEBOOK_APP_ID}&redirect_uri=${encodeURIComponent(origin)}&code_verifier=${codeVerifier}&code=${code}`, { method: "GET" }, ); @@ -52,10 +52,9 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, export async function POST(request: Request) { try { - const { code, codeVerifier, nonce, origin } = await request.json(); + const { code, codeVerifier, origin } = await request.json(); console.log("code", code); console.log("codeVerifier", codeVerifier); - console.log("nonce", nonce); console.log("origin", origin); const { access_token, id_token, email, profile_image_url, display_name } = await getFacebookTokensAndUserInfo( code, @@ -63,8 +62,6 @@ export async function POST(request: Request) { origin, ); - // TODO: Validate the id_token here (verify signature, check nonce, etc.) - return NextResponse.json({ jwt: id_token, access_token, From f8c23b9ae60043a2c03a467a40666757f3eb4a86 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 14:03:34 -0400 Subject: [PATCH 098/110] fix: facebook3 --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- .../package/src/hooks/use-facebook-auth.ts | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 4fbaaefc44f7b6af916bc1f2ce661e4d134896ea..780bcf1689d70f9b159c743f26694c3932d75a40 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%zy7f(v{;NP?kY9%iP}4*-nTQ`gjEoCMK?KZ+yker*u}=Ca z0U49=7AKQ17YMU>Dm8aNApJ6jhSj2%qPH&X;J>nrwM!84wyEB-D(mb z1T>w-nqgp#x$(@{T{dW-usfY-#D&L=ZA?%Av+bcC+5t7U4157Za{)ECQSSl7SOir< As{jB1 delta 146 zcmV;D0B!%3kO`HL36L%z_^;Gd^n;_6___klSpo&Sowqc0{uLIr(=tcS6XQ>>u}=Ca z0T`3<7AKQ17YMU>Dm8aNbe=-o!77lP(__H`qG3E?19^NnQargiZi@TuY6VsyJJ&l7 z`e6SlHWJVn5`ju*uU=mNa(+VLRQS|0wAT1cv+bcC+5t4T4157Za{)BBQSSl7SUH$N AQ2+n{ diff --git a/zk-auth/package.json b/zk-auth/package.json index 5fa4b91..3ade467 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.24", + "@risc0/zkauth": "0.0.25", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 6376f06..1dfff25 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.24", + "version": "0.0.25", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index 1a55f95..f2b26de 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -36,7 +36,7 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { localStorage.setItem("codeVerifier", codeVerifier); - const authUrl = new URL("https://www.facebook.com/v12.0/dialog/oauth"); + const authUrl = new URL("https://www.facebook.com/v11.0/dialog/oauth"); authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); authUrl.searchParams.append("redirect_uri", window.location.origin); authUrl.searchParams.append("response_type", "code"); From 7ecdd8d0c731b65b9cc2b584716f0cdfdd960fe3 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 14:16:25 -0400 Subject: [PATCH 099/110] fix: facebook4 --- zk-auth/package/src/hooks/use-facebook-auth.ts | 6 ++++-- zk-auth/src/app/api/facebook/get-token/route.ts | 14 +++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index f2b26de..320a08e 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -36,9 +36,11 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { localStorage.setItem("codeVerifier", codeVerifier); - const authUrl = new URL("https://www.facebook.com/v11.0/dialog/oauth"); + console.log("aaa", `${window.location.origin}/facebook/callback/`); + + const authUrl = new URL("https://www.facebook.com/v20.0/dialog/oauth"); authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); - authUrl.searchParams.append("redirect_uri", window.location.origin); + authUrl.searchParams.append("redirect_uri", `${window.location.origin}/facebook/callback/`); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("scope", "openid email"); authUrl.searchParams.append("state", "facebook"); diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts index 0949815..8c28a51 100644 --- a/zk-auth/src/app/api/facebook/get-token/route.ts +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -3,11 +3,15 @@ import env from "~/env"; async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, origin: string) { try { - // Exchange code for access token and id_token - const tokenResponse = await fetch( - `https://graph.facebook.com/v12.0/oauth/access_token?client_id=${env.FACEBOOK_APP_ID}&redirect_uri=${encodeURIComponent(origin)}&code_verifier=${codeVerifier}&code=${code}`, - { method: "GET" }, - ); + const tokenUrl = new URL("https://graph.facebook.com/v15.0/oauth/access_token"); + tokenUrl.searchParams.append("client_id", env.FACEBOOK_APP_ID); + tokenUrl.searchParams.append("redirect_uri", `${origin}/facebook/callback/`); + tokenUrl.searchParams.append("code_verifier", codeVerifier); + tokenUrl.searchParams.append("code", code); + + console.log("URLLL", `${origin}/facebook/callback/`); + + const tokenResponse = await fetch(tokenUrl.toString(), { method: "GET" }); console.log("tokenResponse", tokenResponse); From 46f772b31d1a9f5ad3f0b1b05f56f6381f57cc07 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 14:37:31 -0400 Subject: [PATCH 100/110] fix: facebook5 --- .../package/src/components/sign-in-button.tsx | 4 +- .../package/src/hooks/use-facebook-auth.ts | 19 +++++---- .../src/app/api/facebook/get-token/route.ts | 42 ++----------------- 3 files changed, 16 insertions(+), 49 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 4fcdad9..a39da69 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -112,7 +112,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] transition-colors flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider transition-colors hover:bg-[#BF94FF] hover:text-white" >
Twitch @@ -127,7 +127,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] transition-colors flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider transition-colors hover:bg-[#BF94FF] hover:text-white" >
Facebook diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index 320a08e..5f89aef 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -1,5 +1,6 @@ "use client"; +import jwtDecode from "jwt-decode"; import { useCallback, useState } from "react"; import { useSocialsLocalStorage } from "./use-socials"; @@ -36,8 +37,6 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { localStorage.setItem("codeVerifier", codeVerifier); - console.log("aaa", `${window.location.origin}/facebook/callback/`); - const authUrl = new URL("https://www.facebook.com/v20.0/dialog/oauth"); authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); authUrl.searchParams.append("redirect_uri", `${window.location.origin}/facebook/callback/`); @@ -66,18 +65,22 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { body: JSON.stringify({ code, codeVerifier, origin: window.location.origin }), }); - console.log("response", response); - if (!response.ok) { throw new Error("Failed to authenticate with Facebook"); } - const { access_token, id_token, email, picture, name } = await response.json(); + const { jwt } = await response.json(); - setFacebookUserInfos({ email, profile_image_url: picture, display_name: name }); + const { name, email, picture } = jwtDecode(jwt) as any; + + setFacebookUserInfos({ + name, + email, + picture, + }); - if (id_token) { - setFacebookUserToken(id_token); + if (jwt) { + setFacebookUserToken(jwt); } localStorage.removeItem("codeVerifier"); diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts index 8c28a51..c9417fa 100644 --- a/zk-auth/src/app/api/facebook/get-token/route.ts +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -9,44 +9,20 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, tokenUrl.searchParams.append("code_verifier", codeVerifier); tokenUrl.searchParams.append("code", code); - console.log("URLLL", `${origin}/facebook/callback/`); - const tokenResponse = await fetch(tokenUrl.toString(), { method: "GET" }); - console.log("tokenResponse", tokenResponse); - if (!tokenResponse.ok) { throw new Error(`HTTP error! status: ${tokenResponse.status}`); } const tokenData = await tokenResponse.json(); - console.log("tokenData", tokenData); if (!tokenData.access_token || !tokenData.id_token) { throw new Error("No access_token or id_token in Facebook response"); } - // Get user info using the access token - const userInfoResponse = await fetch( - `https://graph.facebook.com/me?fields=id,name,email,picture&access_token=${tokenData.access_token}`, - ); - - console.log("userInfoResponse", userInfoResponse); - - if (!userInfoResponse.ok) { - throw new Error(`HTTP error! status: ${userInfoResponse.status}`); - } - - const userData = await userInfoResponse.json(); - - console.log("userData", userData); - return { - access_token: tokenData.access_token, - id_token: tokenData.id_token, - email: userData.email, - profile_image_url: userData.picture?.data?.url, - display_name: userData.name, + jwt: tokenData.id_token, }; } catch (error) { console.error("Error getting Facebook tokens and user info:", error); @@ -57,22 +33,10 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, export async function POST(request: Request) { try { const { code, codeVerifier, origin } = await request.json(); - console.log("code", code); - console.log("codeVerifier", codeVerifier); - console.log("origin", origin); - const { access_token, id_token, email, profile_image_url, display_name } = await getFacebookTokensAndUserInfo( - code, - codeVerifier, - origin, - ); + const { jwt } = await getFacebookTokensAndUserInfo(code, codeVerifier, origin); return NextResponse.json({ - jwt: id_token, - access_token, - id_token, - display_name, - email, - profile_image_url, + jwt, }); } catch (error) { console.error("Failed to get tokens and user info:", error); From de55254f061d4faf8ddbb8f464a9ff82a4a0694d Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 14:56:51 -0400 Subject: [PATCH 101/110] fix: remove redirect --- zk-auth/package/src/components/prove-button.tsx | 11 +++++++---- zk-auth/package/src/components/sign-out-button.tsx | 9 ++++++++- zk-auth/package/src/hooks/use-facebook-auth.ts | 2 +- zk-auth/package/src/utils/do-stark-proving.ts | 2 +- zk-auth/package/src/zk-auth.tsx | 4 ++-- zk-auth/src/app/api/facebook/get-token/route.ts | 2 +- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/zk-auth/package/src/components/prove-button.tsx b/zk-auth/package/src/components/prove-button.tsx index 619ba0e..84f46c3 100644 --- a/zk-auth/package/src/components/prove-button.tsx +++ b/zk-auth/package/src/components/prove-button.tsx @@ -11,6 +11,7 @@ import { useSocialsLocalStorage } from "../hooks/use-socials"; import { doSnarkProving } from "../utils/do-snark-proving"; import { doStarkProving } from "../utils/do-stark-proving"; import { BorderBeam } from "./border-beam"; +import { FacebookUserInfos } from "./facebook-user-infos"; import { GoogleUserInfos } from "./google-user-infos"; import { SignOutButton } from "./sign-out-button"; import { TwitchUserInfos } from "./twitch-user-infos"; @@ -18,7 +19,8 @@ import { TwitchUserInfos } from "./twitch-user-infos"; export function ProveButton({ address }: { address: `0x${string}` }) { const [_starkResults, setStarkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [_snarkResults, setSnarkResults] = useLocalStorage(`snark-results-${address}`, undefined); - const { googleUserInfos, twitchUserInfos, googleUserToken, twitchUserToken } = useSocialsLocalStorage({ address }); + const { googleUserInfos, twitchUserInfos, googleUserToken, facebookUserInfos, facebookUserToken, twitchUserToken } = + useSocialsLocalStorage({ address }); const [error, setError] = useState(); const [isLoading, setIsLoading] = useState(false); const [snarkPollingResults, setSnarkPollingResults] = useState(); @@ -31,7 +33,7 @@ export function ProveButton({ address }: { address: `0x${string}` }) { async function handleClick() { setIsLoading(true); - if (!googleUserToken && !twitchUserToken) { + if (!googleUserToken && !twitchUserToken && !facebookUserToken) { console.error("JWT not found"); setIsLoading(false); @@ -40,9 +42,9 @@ export function ProveButton({ address }: { address: `0x${string}` }) { try { const { starkUuid, starkStatus } = await doStarkProving({ - iss: googleUserInfos ? "Google" : twitchUserInfos ? "Twitch" : "test", + iss: googleUserInfos ? "Google" : twitchUserInfos ? "Twitch" : facebookUserInfos ? "Facebook" : "test", setStarkPollingResults, - token: googleUserToken ?? twitchUserToken ?? "", + token: googleUserToken ?? twitchUserToken ?? facebookUserToken ?? "", }); const { snarkStatus } = await doSnarkProving({ setSnarkPollingResults, starkUuid }); @@ -83,6 +85,7 @@ export function ProveButton({ address }: { address: `0x${string}` }) { {googleUserInfos && } {twitchUserInfos && } + {facebookUserInfos && } )} diff --git a/zk-auth/package/src/components/sign-out-button.tsx b/zk-auth/package/src/components/sign-out-button.tsx index d0c13ff..baeb97a 100644 --- a/zk-auth/package/src/components/sign-out-button.tsx +++ b/zk-auth/package/src/components/sign-out-button.tsx @@ -14,6 +14,9 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { setTwitchUserToken, googleUserInfos, twitchUserInfos, + setFacebookUserInfos, + setFacebookUserToken, + facebookUserInfos, } = useSocialsLocalStorage({ address }); function signOut() { @@ -28,9 +31,13 @@ export function SignOutButton({ address }: { address: `0x${string}` }) { // twitch setTwitchUserToken(undefined); setTwitchUserInfos(undefined); + + // facebook + setFacebookUserToken(undefined); + setFacebookUserInfos(undefined); } - if (!mounted || !address || (!googleUserInfos && !twitchUserInfos)) { + if (!mounted || !address || (!googleUserInfos && !twitchUserInfos && !facebookUserInfos)) { return
; } diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index 5f89aef..bfc128c 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -39,7 +39,7 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { const authUrl = new URL("https://www.facebook.com/v20.0/dialog/oauth"); authUrl.searchParams.append("client_id", FACEBOOK_APP_ID); - authUrl.searchParams.append("redirect_uri", `${window.location.origin}/facebook/callback/`); + authUrl.searchParams.append("redirect_uri", `${window.location.origin}/`); authUrl.searchParams.append("response_type", "code"); authUrl.searchParams.append("scope", "openid email"); authUrl.searchParams.append("state", "facebook"); diff --git a/zk-auth/package/src/utils/do-stark-proving.ts b/zk-auth/package/src/utils/do-stark-proving.ts index 0509c9f..262f56f 100644 --- a/zk-auth/package/src/utils/do-stark-proving.ts +++ b/zk-auth/package/src/utils/do-stark-proving.ts @@ -2,7 +2,7 @@ import { sleep } from "@risc0/ui/utils/sleep"; import isEqual from "lodash-es/isEqual"; import type { Dispatch, SetStateAction } from "react"; -type Iss = "Google" | "Twitch" | "test"; +type Iss = "Google" | "Twitch" | "Facebook" | "test"; type StarkSessionStatusRes = { status: string; diff --git a/zk-auth/package/src/zk-auth.tsx b/zk-auth/package/src/zk-auth.tsx index 57ff701..ac68c74 100644 --- a/zk-auth/package/src/zk-auth.tsx +++ b/zk-auth/package/src/zk-auth.tsx @@ -15,7 +15,7 @@ export type ZkAuthProps = { }; export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProps) { - const { googleUserInfos, twitchUserInfos } = useSocialsLocalStorage({ address }); + const { googleUserInfos, twitchUserInfos, facebookUserInfos } = useSocialsLocalStorage({ address }); const [starkResults] = useLocalStorage(`stark-results-${address}`, undefined); const [snarkResults] = useLocalStorage(`snark-results-${address}`, undefined); @@ -43,7 +43,7 @@ export function ZkAuth({ address, onStarkComplete, onSnarkComplete }: ZkAuthProp > wipe local storage - ) : googleUserInfos || twitchUserInfos ? ( + ) : googleUserInfos || twitchUserInfos || facebookUserInfos ? ( ) : ( diff --git a/zk-auth/src/app/api/facebook/get-token/route.ts b/zk-auth/src/app/api/facebook/get-token/route.ts index c9417fa..67a7ac2 100644 --- a/zk-auth/src/app/api/facebook/get-token/route.ts +++ b/zk-auth/src/app/api/facebook/get-token/route.ts @@ -5,7 +5,7 @@ async function getFacebookTokensAndUserInfo(code: string, codeVerifier: string, try { const tokenUrl = new URL("https://graph.facebook.com/v15.0/oauth/access_token"); tokenUrl.searchParams.append("client_id", env.FACEBOOK_APP_ID); - tokenUrl.searchParams.append("redirect_uri", `${origin}/facebook/callback/`); + tokenUrl.searchParams.append("redirect_uri", `${origin}/`); tokenUrl.searchParams.append("code_verifier", codeVerifier); tokenUrl.searchParams.append("code", code); From 0bfae6ce5556037c0087282aa4080b7ca68f6894 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:06:40 -0400 Subject: [PATCH 102/110] fix: bump everything --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- .../src/components/facebook-user-infos.tsx | 12 +++++------ .../package/src/hooks/use-facebook-auth.ts | 7 ++++++- zk-auth/public/facebook.svg | 1 + zk-auth/src/app/_lib/bonsai-proving.ts | 9 ++++++++- zk-auth/src/app/_lib/get-certs.ts | 6 ++++-- .../oidc-validator/src/lib.rs | 19 +++++++++--------- 9 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 zk-auth/public/facebook.svg diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 780bcf1689d70f9b159c743f26694c3932d75a40..55317eb2f9fdd42bfc821b313ac3684713665da2 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%z+na~rWoe!%lCQoLI%C|F55*0vG&P^%#J)y^zY!0Pu}=Ca z0UDF>7AKQ17YMU>Dm8aNgpPT<8Ydrlwl_w_Xvy|oNUTQg+y%82tWiVG6M51fQ3O|D z_CPV@`rZ5I@;?5?SABL1){Oei%Uy>fv+bcC+5tAV4157Za{)HDQSSl7SXE0! AfdBvi delta 146 zcmV;D0B!%3kO`HL36L%zy7f(v{;NP?kY9%iP}4*-nTQ`gjEoCMK?KZ+yker*u}=Ca z0U49=7AKQ17YMU>Dm8aNApJ6jhSj2%qPH&X;J>nrwM!84wyEB-D(mb z1T>w-nqgp#x$(@{T{dW-usfY-#D&L=ZA?%Av+bcC+5t7U4157Za{)ECQSSl7SOir< As{jB1 diff --git a/zk-auth/package.json b/zk-auth/package.json index 3ade467..1737311 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.25", + "@risc0/zkauth": "0.0.26", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 1dfff25..4b3576c 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.25", + "version": "0.0.26", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], diff --git a/zk-auth/package/src/components/facebook-user-infos.tsx b/zk-auth/package/src/components/facebook-user-infos.tsx index 7afe204..b3fa4e3 100644 --- a/zk-auth/package/src/components/facebook-user-infos.tsx +++ b/zk-auth/package/src/components/facebook-user-infos.tsx @@ -4,8 +4,8 @@ export function FacebookUserInfos({ userInfos, }: { userInfos: { - display_name: string; - profile_image_url?: string; + name: string; + picture?: string; email: string; }; }) { @@ -13,16 +13,16 @@ export function FacebookUserInfos({
{userInfos.display_name}
-

- {userInfos.display_name} +

+ {userInfos.name}

{userInfos.email} diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index bfc128c..6472476 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -71,7 +71,12 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { const { jwt } = await response.json(); - const { name, email, picture } = jwtDecode(jwt) as any; + console.log("jwt", jwt); + + const decodedJwt = jwtDecode(jwt) as any; + + console.log("decodedJwt", decodedJwt); + const { name, email, picture } = decodedJwt; setFacebookUserInfos({ name, diff --git a/zk-auth/public/facebook.svg b/zk-auth/public/facebook.svg new file mode 100644 index 0000000..e177da6 --- /dev/null +++ b/zk-auth/public/facebook.svg @@ -0,0 +1 @@ + diff --git a/zk-auth/src/app/_lib/bonsai-proving.ts b/zk-auth/src/app/_lib/bonsai-proving.ts index 7ae9cdf..97a6958 100644 --- a/zk-auth/src/app/_lib/bonsai-proving.ts +++ b/zk-auth/src/app/_lib/bonsai-proving.ts @@ -122,7 +122,10 @@ class Client { } // STARK -export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twitch" | "test"; token: string }) { +export async function bonsaiStarkProving({ + iss, + token, +}: { iss: "Google" | "Twitch" | "Facebook" | "test"; token: string }) { let jwks = ""; if (iss === "Google") { @@ -133,6 +136,10 @@ export async function bonsaiStarkProving({ iss, token }: { iss: "Google" | "Twit jwks = await getCerts("twitch"); } + if (iss === "Facebook") { + jwks = await getCerts("facebook"); + } + const inputData = Buffer.from( encodeString( JSON.stringify({ diff --git a/zk-auth/src/app/_lib/get-certs.ts b/zk-auth/src/app/_lib/get-certs.ts index 15d9e95..4fc42d6 100644 --- a/zk-auth/src/app/_lib/get-certs.ts +++ b/zk-auth/src/app/_lib/get-certs.ts @@ -1,6 +1,6 @@ import axios from "axios"; -export async function getCerts(provider: "google" | "twitch"): Promise { +export async function getCerts(provider: "google" | "twitch" | "facebook"): Promise { return JSON.stringify( ( await axios.get( @@ -8,7 +8,9 @@ export async function getCerts(provider: "google" | "twitch"): Promise { ? "https://www.googleapis.com/oauth2/v3/certs" : provider === "twitch" ? "https://id.twitch.tv/oauth2/keys" - : "", + : provider === "facebook" + ? "https://www.facebook.com/.well-known/oauth/openid/jwks/" + : "", ) ).data, ); diff --git a/zk-socials/social_validator/oidc-validator/src/lib.rs b/zk-socials/social_validator/oidc-validator/src/lib.rs index e510fe5..f117a44 100644 --- a/zk-socials/social_validator/oidc-validator/src/lib.rs +++ b/zk-socials/social_validator/oidc-validator/src/lib.rs @@ -29,7 +29,7 @@ struct Extra { pub enum IdentityProvider { Google, Twitch, - LinkedIn, + Facebook, Test, } @@ -54,12 +54,12 @@ impl IdentityProvider { let pref_user = decoded.preferred_username.to_string(); Ok((pref_user, nonce, exp, iat, jwk_str.to_string())) } - Self::LinkedIn => { - let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); + Self::Facebook => { + let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); let email = decoded.email.to_string(); let nonce = decoded.nonce.to_string(); Ok((email, nonce, exp, iat, jwk_str.to_string())) - } + } Self::Test => { let (decoded, exp, iat) = decode_token::(token, &jwk).unwrap(); let email = decoded.email.to_string(); @@ -75,7 +75,7 @@ impl From for IdentityProvider { match value.to_lowercase().as_str() { "google" => Self::Google, "twitch" => Self::Twitch, - "linkedin" => Self::LinkedIn, + "facebook" => Self::Facebook, "test" => Self::Test, _ => panic!("invalid identity provider"), } @@ -83,17 +83,16 @@ impl From for IdentityProvider { } #[derive(Deserialize, Serialize, Debug, Clone)] -pub struct LinkedInClaims { +pub struct FacebookClaims { pub aud: String, pub iss: String, pub sub: String, pub nonce: String, // I require this one. pub email: String, // And this one too. - pub email_verified: Option, - pub name: Option, - pub family_name: Option, + pub jti: Option, + pub at_hash: Option, pub given_name: Option, - pub locale: Option, + pub family_name: Option, pub name: Option, pub picture: Option, } From 2fa2e327279253f0a9d108b2efa973fc4e00f7a8 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:09:02 -0400 Subject: [PATCH 103/110] fix: facebook.svg --- zk-auth/package/README.md | 4 ++-- zk-auth/package/src/hooks/use-facebook-auth.ts | 4 ---- zk-auth/public/facebook.svg | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index eb9c61d..7a059ee 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -2,7 +2,7 @@ ## In order to implement this flow you need to: -1. Ask us to add your domain to the list of allowed redirects (Google, Twitch, etc) +1. Ask us to add your domain to the list of allowed redirects (Google, Twitch, Facebook,etc) 2. Integrate the following code to your project: ##### React Example: @@ -48,7 +48,7 @@ function App() { ### Unsupported providers -* LinkedIm (no way to pass a nonce) +* LinkedIn (no way to pass a nonce) * PayPal (no way to pass a nonce) * Discord (doesn't support OIDC) * Twitter/X (doesn't support OIDC) diff --git a/zk-auth/package/src/hooks/use-facebook-auth.ts b/zk-auth/package/src/hooks/use-facebook-auth.ts index 6472476..a178b59 100644 --- a/zk-auth/package/src/hooks/use-facebook-auth.ts +++ b/zk-auth/package/src/hooks/use-facebook-auth.ts @@ -71,11 +71,7 @@ export function useFacebookAuth({ address }: { address: `0x${string}` }) { const { jwt } = await response.json(); - console.log("jwt", jwt); - const decodedJwt = jwtDecode(jwt) as any; - - console.log("decodedJwt", decodedJwt); const { name, email, picture } = decodedJwt; setFacebookUserInfos({ diff --git a/zk-auth/public/facebook.svg b/zk-auth/public/facebook.svg index e177da6..87b83aa 100644 --- a/zk-auth/public/facebook.svg +++ b/zk-auth/public/facebook.svg @@ -1 +1 @@ - + \ No newline at end of file From af13955a235e3d25c2e408d02e37e9e1640a7812 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:09:57 -0400 Subject: [PATCH 104/110] fix: colors --- zk-auth/package/src/components/sign-in-button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index a39da69..9e8cb95 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -127,7 +127,7 @@ export function SignInButton({ address }: { address: `0x${string}` }) { fontFamily: "arial, sans-serif", letterSpacing: "0.25px", }} - className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#A970FF] pl-6 font-normal text-[14px] text-white tracking-wider transition-colors hover:bg-[#BF94FF] hover:text-white" + className="relative flex h-8 w-full max-w-[197px] flex-row items-center gap-1.5 rounded-full bg-[#0866FF] pl-6 font-normal text-[14px] text-white tracking-wider transition-colors hover:bg-[#2f7eff] hover:text-white" >

Facebook From f2f29b9020f9fdc7c404cd69790803ba8375c662 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:10:29 -0400 Subject: [PATCH 105/110] =?UTF-8?q?fix:=20colors=C3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index 55317eb2f9fdd42bfc821b313ac3684713665da2..a0789a93c66a02171cd5b2eb3862f9cb80ca2688 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%zs)w*tRUU7Gn%JQ{;4DTRft0#=iAwJ`f4xgw>YDm8aNhpnf(cnl6^6@AUtP*>@IJn!c+SF0;}>6-GIpYN~_=L1c? z_kz~&V;_Ae6+Ly$#Tg^!Uz0?iScSZ54pPHdv+bcC+5tDW4157Za{)KEQSSl7STXlQ A3jhEB delta 146 zcmV;D0B!%3kO`HL36L%z+na~rWoe!%lCQoLI%C|F55*0vG&P^%#J)y^zY!0Pu}=Ca z0UDF>7AKQ17YMU>Dm8aNgpPT<8Ydrlwl_w_Xvy|oNUTQg+y%82tWiVG6M51fQ3O|D z_CPV@`rZ5I@;?5?SABL1){Oei%Uy>fv+bcC+5tAV4157Za{)HDQSSl7SXE0! AfdBvi diff --git a/zk-auth/package.json b/zk-auth/package.json index 1737311..ec51bd0 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.26", + "@risc0/zkauth": "0.0.27", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 4b3576c..ffd700d 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.26", + "version": "0.0.27", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], From 89c099f769b68d872b64820b0d199ef993827ac4 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:52:27 -0400 Subject: [PATCH 106/110] fix: better button --- .../package/src/components/sign-in-button.tsx | 79 ++++++++++++------- zk-auth/public/facebook.svg | 2 +- 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 9e8cb95..225bc6d 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -83,27 +83,46 @@ export function SignInButton({ address }: { address: `0x${string}` }) { } return ( -
- - { - if (response.credential) { - setGoogleUserToken(response.credential); - } +
+
+
+ + { + if (response.credential) { + setGoogleUserToken(response.credential); + } + }} + /> + +
+ + +
); diff --git a/zk-auth/public/facebook.svg b/zk-auth/public/facebook.svg index 87b83aa..88b37fc 100644 --- a/zk-auth/public/facebook.svg +++ b/zk-auth/public/facebook.svg @@ -1 +1 @@ - \ No newline at end of file + From c2edc94afac53b430c798edc915fc819ccd4d9df Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 15:53:01 -0400 Subject: [PATCH 107/110] fix: bump everything --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index a0789a93c66a02171cd5b2eb3862f9cb80ca2688..a18378394d595c15b64c83eb24305e1e1ec05ea0 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%z6qg2+`_%%V(m|E$${wpp8M_(mz?@dib;KCYFe-V{u}=Ca z0UVR@7AKQ17YMU>Dm8aNiuCKHC)`cD6e~3Y9<1fbB!fO0fcJyTlvhwWO1(v+bcC+5tGX4157Za{)NFQSSl7SR|B2 AN&o-= delta 146 zcmV;D0B!%3kO`HL36L%zs)w*tRUU7Gn%JQ{;4DTRft0#=iAwJ`f4xgw>YDm8aNhpnf(cnl6^6@AUtP*>@IJn!c+SF0;}>6-GIpYN~_=L1c? z_kz~&V;_Ae6+Ly$#Tg^!Uz0?iScSZ54pPHdv+bcC+5tDW4157Za{)KEQSSl7STXlQ A3jhEB diff --git a/zk-auth/package.json b/zk-auth/package.json index ec51bd0..1d5b0c7 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.27", + "@risc0/zkauth": "0.0.28", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index ffd700d..6f9515e 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.27", + "version": "0.0.28", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], From 57cfe44c7bd89ff2fec0f8c6c1b9b3602f92f960 Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Fri, 20 Sep 2024 16:04:53 -0400 Subject: [PATCH 108/110] fix: nicer buttons --- zk-auth/bun.lockb | Bin 149525 -> 149525 bytes zk-auth/package.json | 2 +- zk-auth/package/package.json | 2 +- .../package/src/components/sign-in-button.tsx | 40 ++++++------------ 4 files changed, 16 insertions(+), 28 deletions(-) diff --git a/zk-auth/bun.lockb b/zk-auth/bun.lockb index a18378394d595c15b64c83eb24305e1e1ec05ea0..fd513ee3f825992acd4ba5613d9cabae0415b69a 100755 GIT binary patch delta 146 zcmV;D0B!%3kO`HL36L%zoY4)Ms`^k^%Mq$mbqansEt~YZvJ{UPQMgc#IC%91u}=Ca z0UeX^7AKQ17YMU>Dm8aNKd5|n>*Itr>kMdLa6TKI;~Z?r6(uKZYTB_5{VHs=$Ag9+ z7-!C`L~#;C-|@c?OteXk6M$AKbB8D|R&E8_v+bcC+5tJY4157Za{)QGQSSl7SP*DF AI{*Lx delta 146 zcmV;D0B!%3kO`HL36L%z6qg2+`_%%V(m|E$${wpp8M_(mz?@dib;KCYFe-V{u}=Ca z0UVR@7AKQ17YMU>Dm8aNiuCKHC)`cD6e~3Y9<1fbB!fO0fcJyTlvhwWO1(v+bcC+5tGX4157Za{)NFQSSl7SR|B2 AN&o-= diff --git a/zk-auth/package.json b/zk-auth/package.json index 1d5b0c7..0ec0894 100644 --- a/zk-auth/package.json +++ b/zk-auth/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "@risc0/zkauth": "0.0.28", + "@risc0/zkauth": "0.0.29", "@t3-oss/env-nextjs": "0.11.1", "axios": "1.7.7", "deepmerge": "4.3.1", diff --git a/zk-auth/package/package.json b/zk-auth/package/package.json index 6f9515e..d1f2b03 100644 --- a/zk-auth/package/package.json +++ b/zk-auth/package/package.json @@ -1,6 +1,6 @@ { "name": "@risc0/zkauth", - "version": "0.0.28", + "version": "0.0.29", "private": false, "author": "RISC Zero", "keywords": ["zk", "auth", "zero-knowledge", "authentication", "web3", "risczero"], diff --git a/zk-auth/package/src/components/sign-in-button.tsx b/zk-auth/package/src/components/sign-in-button.tsx index 225bc6d..12ede85 100644 --- a/zk-auth/package/src/components/sign-in-button.tsx +++ b/zk-auth/package/src/components/sign-in-button.tsx @@ -84,14 +84,14 @@ export function SignInButton({ address }: { address: `0x${string}` }) { return (
-
+
+ <> +

proving complete -- check console for results

+ + ) : googleUserInfos || twitchUserInfos || facebookUserInfos ? ( ) : ( diff --git a/zk-auth/src/app/page.tsx b/zk-auth/src/app/page.tsx index 5014e61..8a673be 100644 --- a/zk-auth/src/app/page.tsx +++ b/zk-auth/src/app/page.tsx @@ -1,6 +1,6 @@ import dynamic from "next/dynamic"; -const ZkAuthExample = dynamic(() => import("./zk-auth"), { ssr: false }); +const ZkAuthExample = dynamic(() => import("./zk-auth-example"), { ssr: false }); export default function HomePage() { return ( diff --git a/zk-auth/src/app/zk-auth.tsx b/zk-auth/src/app/zk-auth-example.tsx similarity index 100% rename from zk-auth/src/app/zk-auth.tsx rename to zk-auth/src/app/zk-auth-example.tsx

F67WpP|ox>?-^rGa`l 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 literal 0 HcmV?d00001 From 6621c77f60d3aa2215b69db489bc88357a61f51c Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:30:36 -0400 Subject: [PATCH 035/110] fix: wip --- zk-auth/src/env.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/zk-auth/src/env.js b/zk-auth/src/env.js index 144a58a..79790bf 100644 --- a/zk-auth/src/env.js +++ b/zk-auth/src/env.js @@ -18,20 +18,13 @@ const env = createEnv({ * Specify client-side environment variables schema here. * To expose them to the client, prefix them with `NEXT_PUBLIC_`. */ - client: { - NEXT_PUBLIC_GOOGLE_CLIENT_ID: z.string(), - NEXT_PUBLIC_VERCEL_BRANCH_URL: z.string(), - }, + client: {}, /** * You can't destruct `process.env` as a regular object in the Next.js edge runtimes * (e.g. middlewares) or client-side so we need to destruct manually. */ runtimeEnv: { - // Client-side environment variables - NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID, - NEXT_PUBLIC_VERCEL_BRANCH_URL: process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL, - // Server-side environment variables BONSAI_API_KEY: process.env.BONSAI_API_KEY, IMAGE_ID: process.env.IMAGE_ID, From 31114a175f8e651702e1fa4df41beba204ab453d Mon Sep 17 00:00:00 2001 From: Cohan Carpentier Date: Tue, 17 Sep 2024 15:53:27 -0400 Subject: [PATCH 036/110] fix: demo react --- zk-auth/package/README.md | 38 +++++++++++++++++++++++- zk-auth/package/bun.lockb | Bin 136388 -> 155313 bytes zk-auth/package/package.json | 19 ++++++++---- zk-auth/package/risc0-zkauth-0.0.2.tgz | Bin 85320 -> 85656 bytes zk-auth/package/risc0-zkauth-0.0.3.tgz | Bin 0 -> 85656 bytes zk-auth/package/src/App.tsx | 3 ++ zk-auth/package/src/index.ts | 15 ++++++++++ zk-auth/package/src/sign-out-button.tsx | 25 ++++++++++++++++ 8 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 zk-auth/package/risc0-zkauth-0.0.3.tgz create mode 100644 zk-auth/package/src/index.ts create mode 100644 zk-auth/package/src/sign-out-button.tsx diff --git a/zk-auth/package/README.md b/zk-auth/package/README.md index 5ade98a..4c92407 100644 --- a/zk-auth/package/README.md +++ b/zk-auth/package/README.md @@ -3,7 +3,9 @@ ## In order to implement this flow you need to: 1. Ask us to add your domain to the list of allowed domains on Google Cloud Console -2. Add the following code to your project: +2. Integrate the following code to your project: + +#### HTML Example: ```html @@ -21,3 +23,37 @@ +``` + +--- + +#### React Example: + +### Install + +```bash +npm install @risc0/zkauth +``` + +### Usage + +```tsx +import { useZkAuth } from "@risc0/zkauth/react"; + +function ZkAuth({ address }: { address: string }) { + useZkAuth(); + + return ( +

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 ujKN=+A + + + + + + Vite + React + TS + + +