@moonpay/cli 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/auth.ts","../src/generated/client.ts","../src/client.ts","../src/format.ts","../src/version-check.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { createRequire } from \"module\";\nimport { Command, Option } from \"commander\";\nimport {\n clearCredentials,\n getConfig,\n getConfigOrDefault,\n getCredentials,\n getValidToken,\n login,\n refreshCredentials,\n} from \"./auth\";\nimport { callToolWithAuth, TOOL_NAMES } from \"./client\";\nimport {\n TOOL_DEFINITIONS,\n type ToolDefinition,\n type ToolOption,\n} from \"./generated/client\";\nimport { color, formatOutput, type OutputFormat } from \"./format\";\nimport { startVersionCheck } from \"./version-check\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\") as { version: string };\n\nconst getUpdateNotice = startVersionCheck(version);\n\nconst DEFAULT_BASE_URL = \"https://moon-iq.com\";\n\nconst program = new Command();\n\nprogram\n .name(\"mooniq\")\n .description(\"Moon IQ CLI\")\n .version(version)\n .option(\"-f, --format <type>\", \"Output format: json, compact, or table\", \"json\");\n\nfunction getFormat(): OutputFormat {\n const fmt = program.opts().format as string;\n if (fmt === \"json\" || fmt === \"compact\" || fmt === \"table\") return fmt;\n return \"json\";\n}\n\nfunction printResult(result: unknown): void {\n console.log(formatOutput(result, getFormat()));\n}\n\nfunction printUpdateNotice(): void {\n const notice = getUpdateNotice();\n if (notice) process.stderr.write(notice);\n}\n\nfunction resolveBaseUrl(): string {\n const config = getConfig();\n const creds = getCredentials();\n return config?.baseUrl ?? creds?.baseUrl ?? DEFAULT_BASE_URL;\n}\n\nprogram\n .command(\"login\")\n .description(\"Log in to Moon IQ via OAuth\")\n .action(async () => {\n const config = getConfigOrDefault();\n\n try {\n await login(config);\n console.log(\"Logged in successfully.\");\n } catch (error) {\n console.error(\"Login failed:\", (error as Error).message);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"logout\")\n .description(\"Log out and clear stored credentials\")\n .action(() => {\n clearCredentials();\n console.log(\"Logged out.\");\n });\n\nprogram\n .command(\"whoami\")\n .description(\"Show current user info\")\n .action(async () => {\n let token = await getValidToken();\n if (!token) {\n console.error(\"Not logged in. Run `mooniq login` first.\");\n process.exit(1);\n }\n\n const creds = getCredentials();\n const config = getConfig();\n const baseUrl = resolveBaseUrl();\n\n let res = await fetch(`${baseUrl}/api/oauth/userinfo`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (\n res.status === 401 &&\n creds?.refreshToken &&\n config &&\n config.baseUrl === creds.baseUrl\n ) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n res = await fetch(`${baseUrl}/api/oauth/userinfo`, {\n headers: { Authorization: `Bearer ${newCreds.accessToken}` },\n });\n } catch {\n // Refresh failed, fall through\n }\n }\n\n if (!res.ok) {\n console.error(\"Failed to fetch user info:\", res.status);\n process.exit(1);\n }\n\n const userinfo = await res.json();\n const { id, wallets, emails, phoneNumbers, developer, ironId, ...display } = userinfo;\n printResult(display);\n printUpdateNotice();\n });\n\nprogram\n .command(\"run <tool_name>\")\n .description(\"Run a tool by name. Use --input for JSON params.\")\n .option(\n \"-i, --input <json>\",\n \"Input parameters as JSON (omit for empty params)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n mooniq run user_retrieve # no params\n mooniq run token_search --input '{\"query\":\"SOL\",\"chain\":\"solana\"}' # with params\n`,\n )\n .action(async (toolName: string, options) => {\n const toolNames = TOOL_NAMES as readonly string[];\n if (!toolNames.includes(toolName)) {\n console.error(`Unknown tool: ${toolName}`);\n console.error(`Available tools: ${toolNames.slice(0, 10).join(\", \")}...`);\n process.exit(1);\n }\n\n let params: Record<string, unknown> = {};\n if (options.input) {\n try {\n params = JSON.parse(options.input);\n } catch {\n console.error(\"Invalid JSON in --input\");\n process.exit(1);\n }\n }\n\n try {\n const baseUrl = resolveBaseUrl();\n const result = await callToolWithAuth(baseUrl, toolName, params);\n printResult(result);\n printUpdateNotice();\n } catch (error) {\n console.error(\"Tool call failed:\", (error as Error).message);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"tools\")\n .description(\"List available tools\")\n .option(\"-s, --search <query>\", \"Filter tools by name or description\")\n .option(\"-c, --category <category>\", \"Filter tools by category\")\n .action((options) => {\n // Group tools by category (first segment of snake_case name)\n const groups = new Map<string, ToolDefinition[]>();\n for (const tool of TOOL_DEFINITIONS) {\n const category = tool.name.split(\"_\")[0];\n if (!groups.has(category)) groups.set(category, []);\n groups.get(category)!.push(tool);\n }\n\n const categoryFilter = options.category?.toLowerCase();\n const searchQuery = options.search?.toLowerCase();\n\n // Filter by category\n let categories = [...groups.keys()].sort();\n if (categoryFilter) {\n if (!groups.has(categoryFilter)) {\n console.error(\n `Unknown category: ${categoryFilter}\\nAvailable categories: ${[...groups.keys()].sort().join(\", \")}`,\n );\n process.exit(1);\n }\n categories = [categoryFilter];\n }\n\n let totalCount = 0;\n const lines: string[] = [];\n\n for (const cat of categories) {\n const tools = groups.get(cat)!;\n\n // Filter by search query\n const filtered = searchQuery\n ? tools.filter(\n (t) =>\n t.name.toLowerCase().includes(searchQuery) ||\n t.description.toLowerCase().includes(searchQuery),\n )\n : tools;\n\n if (filtered.length === 0) continue;\n\n // Find max name length for alignment within this category\n const maxName = Math.max(...filtered.map((t) => t.name.length));\n\n if (lines.length > 0) lines.push(\"\");\n lines.push(color.bold(color.cyan(cat.toUpperCase())));\n\n for (const tool of filtered) {\n lines.push(\n ` ${color.green(tool.name.padEnd(maxName))} ${color.dim(tool.description)}`,\n );\n totalCount++;\n }\n }\n\n if (totalCount === 0) {\n const msg = searchQuery\n ? `No tools matching \"${options.search}\".`\n : `No tools found.`;\n console.error(msg);\n console.error(\n `Available categories: ${[...groups.keys()].sort().join(\", \")}`,\n );\n process.exit(1);\n }\n\n lines.push(\"\");\n lines.push(color.dim(`${totalCount} tool${totalCount === 1 ? \"\" : \"s\"}`));\n\n console.log(lines.join(\"\\n\"));\n printUpdateNotice();\n });\n\n/**\n * Build hierarchical subcommands from tool definitions.\n * e.g., token_balance_list -> mooniq token balance list --wallet <wallet> --chain <chain>\n */\nfunction buildToolCommands(program: Command): void {\n // Build a tree structure from tool names\n type CommandNode = {\n children: Map<string, CommandNode>;\n tool?: ToolDefinition;\n };\n\n const root: CommandNode = { children: new Map() };\n\n // Build the tree\n for (const tool of TOOL_DEFINITIONS) {\n const parts = tool.name.split(\"_\");\n let current = root;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.children.has(part)) {\n current.children.set(part, { children: new Map() });\n }\n current = current.children.get(part)!;\n\n // If this is the last part, attach the tool\n if (i === parts.length - 1) {\n current.tool = tool;\n }\n }\n }\n\n // Recursively create Commander commands\n function createCommands(node: CommandNode, parent: Command, path: string[]) {\n for (const [name, child] of node.children) {\n const currentPath = [...path, name];\n\n if (child.tool) {\n // This is a leaf node with a tool\n const cmd = parent\n .command(name)\n .description(child.tool.description || `Run ${child.tool.name}`);\n\n // Add options from the tool schema\n for (const opt of child.tool.options) {\n const optionFlag = createOptionFlag(opt);\n const option = new Option(optionFlag, opt.description);\n\n if (opt.choices) {\n option.choices(opt.choices);\n }\n\n if (opt.required) {\n cmd.addOption(option);\n } else {\n cmd.addOption(option);\n }\n }\n\n // Add action handler\n const toolName = child.tool.name;\n cmd.action(async (options) => {\n const params = buildParams(child.tool!.options, options);\n const baseUrl = resolveBaseUrl();\n\n try {\n const result = await callToolWithAuth(baseUrl, toolName, params);\n printResult(result);\n printUpdateNotice();\n } catch (error) {\n console.error(\"Tool call failed:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // If there are more children, recurse\n if (child.children.size > 0) {\n createCommands(child, cmd, currentPath);\n }\n } else if (child.children.size > 0) {\n // This is an intermediate node\n const cmd = parent.command(name).description(`${name} commands`);\n\n createCommands(child, cmd, currentPath);\n }\n }\n }\n\n createCommands(root, program, []);\n}\n\n/**\n * Create an option flag string for Commander\n */\nfunction createOptionFlag(opt: ToolOption): string {\n const kebabName = opt.name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n if (opt.type === \"boolean\") {\n return `--${kebabName}`;\n }\n\n const valuePlaceholder = `<${opt.name}>`;\n return `--${kebabName} ${valuePlaceholder}`;\n}\n\n/**\n * Build params object from options\n */\nfunction buildParams(\n toolOptions: ToolOption[],\n cmdOptions: Record<string, unknown>,\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const opt of toolOptions) {\n // Convert kebab-case back to camelCase for lookup\n const kebabName = opt.name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n const camelName = kebabName.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\n // Commander converts --some-option to someOption\n const value = cmdOptions[camelName] ?? cmdOptions[opt.name];\n\n if (value !== undefined) {\n // Convert types as needed\n if (opt.type === \"number\" && typeof value === \"string\") {\n params[opt.name] = parseFloat(value);\n } else if (opt.type === \"boolean\") {\n params[opt.name] = value === true || value === \"true\";\n } else if (typeof value === \"string\") {\n // Try to parse JSON strings (for object/array params like --body '{\"key\":\"val\"}')\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === \"object\" && parsed !== null) {\n params[opt.name] = parsed;\n } else {\n params[opt.name] = value;\n }\n } catch {\n params[opt.name] = value;\n }\n } else {\n params[opt.name] = value;\n }\n } else {\n // Default missing booleans to false, everything else to null (nullable fields)\n params[opt.name] = opt.type === \"boolean\" ? false : null;\n }\n }\n\n return params;\n}\n\n// Build all tool commands\nbuildToolCommands(program);\n\nprogram.parse();\n","import { spawn } from \"child_process\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return crypto.createHash(\"sha256\").update(verifier).digest(\"base64url\");\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".config\", \"moon-iq\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst CREDENTIALS_PATH = path.join(CONFIG_DIR, \"credentials.json\");\nconst LOCK_PATH = path.join(CONFIG_DIR, \".credentials.lock\");\nconst CALLBACK_PORT = 3847;\nconst CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;\n\n/** Built-in config used when no ~/.config/moon-iq/config.json exists. */\nexport const DEFAULT_CONFIG: Config = {\n baseUrl: \"https://moon-iq.com\",\n clientId: \"mooniq_zin3s5jz3olzkdfxpmbeaogv\",\n};\n\nexport type Config = {\n baseUrl: string;\n clientId: string;\n clientSecret?: string;\n};\n\nexport type Credentials = {\n accessToken: string;\n refreshToken: string | null;\n expiresAt: number;\n baseUrl: string;\n};\n\nfunction ensureConfigDir() {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n/** Write to a temp file then rename — atomic on POSIX, prevents partial/corrupt reads. */\nfunction atomicWriteFileSync(\n filePath: string,\n data: string,\n mode: number,\n) {\n const tmp = filePath + `.tmp.${process.pid}`;\n fs.writeFileSync(tmp, data, { encoding: \"utf-8\", mode });\n fs.renameSync(tmp, filePath);\n}\n\nconst LOCK_STALE_MS = 30_000; // consider lock stale after 30s\n\n/** Advisory file lock. Returns unlock function, or null if lock is held by another process. */\nfunction acquireLock(): (() => void) | null {\n ensureConfigDir();\n try {\n // O_CREAT | O_EXCL — fails if file already exists\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n // Lock file exists — check if stale\n try {\n const lockData = JSON.parse(fs.readFileSync(LOCK_PATH, \"utf-8\"));\n if (Date.now() - lockData.ts < LOCK_STALE_MS) {\n return null; // lock is fresh, another process is refreshing\n }\n } catch {\n // corrupt lock file — treat as stale\n }\n // Stale lock — remove and retry once\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n try {\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch {\n return null;\n }\n }\n return () => {\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n };\n}\n\n/** Returns config from file, or null if missing/invalid. Use getConfigOrDefault() for login flow. */\nexport function getConfig(): Config | null {\n if (!fs.existsSync(CONFIG_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!data.baseUrl || !data.clientId) {\n return null;\n }\n return data as Config;\n } catch {\n return null;\n }\n}\n\n/** Returns config from file, or DEFAULT_CONFIG if none exists. Creates config file on first use. */\nexport function getConfigOrDefault(): Config {\n const fromFile = getConfig();\n if (fromFile) return fromFile;\n\n saveConfig(DEFAULT_CONFIG);\n return DEFAULT_CONFIG;\n}\n\nexport function getCredentials(): Credentials | null {\n if (!fs.existsSync(CREDENTIALS_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, \"utf-8\"));\n if (!data.accessToken || !data.baseUrl) {\n return null;\n }\n return data as Credentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(creds: Credentials) {\n ensureConfigDir();\n atomicWriteFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), 0o600);\n}\n\nexport function saveConfig(config: Config) {\n ensureConfigDir();\n atomicWriteFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 0o600);\n}\n\nexport function clearCredentials() {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n}\n\nfunction openBrowser(url: string) {\n const platform = process.platform;\n const cmd =\n platform === \"darwin\"\n ? \"open\"\n : platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args =\n platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n spawn(cmd, args, { stdio: \"ignore\", detached: true }).unref();\n}\n\nexport async function login(config: Config): Promise<Credentials> {\n const state = crypto.randomUUID();\n const usePkce = !config.clientSecret;\n\n let codeVerifier: string | undefined;\n if (usePkce) {\n codeVerifier = generateCodeVerifier();\n }\n\n let resolveCallback: (code: string) => void;\n const codePromise = new Promise<string>((resolve) => {\n resolveCallback = resolve;\n });\n\n const sockets = new Set<import(\"net\").Socket>();\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost:${CALLBACK_PORT}`);\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n const error = url.searchParams.get(\"error\");\n const errorDesc = url.searchParams.get(\"error_description\");\n\n if (returnedState !== state) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">State mismatch — possible CSRF attack. Please try logging in again.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (error) {\n const safeError = escapeHtml(error);\n const safeDesc = escapeHtml(errorDesc ?? \"Unknown error\");\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">${safeError}: ${safeDesc}</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (code) {\n // Serve success page inline - don't redirect to app (it may not be running)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Success</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#f0fdf4\"><h1 style=\"color:#166534;margin:0 0 1rem;font-size:1.5rem\">✓ Success!</h1><p style=\"color:#15803d;margin:0;font-size:1.1rem\">You can close this page and return to the terminal.</p></body></html>`,\n );\n resolveCallback(code);\n } else {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">Error</h1><p style=\"color:#991b1b;margin:0\">No authorization code received.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n }\n } else {\n // Favicon etc - serve minimal response to avoid \"site can't be reached\"\n res.writeHead(204);\n res.end();\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(\n new Error(\n `Port ${CALLBACK_PORT} is in use. Close the other process or run: lsof -i :${CALLBACK_PORT}`,\n ),\n );\n } else {\n reject(err);\n }\n });\n // Track all connections so we can destroy them and allow the process to exit\n server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.on(\"close\", () => sockets.delete(socket));\n });\n server.listen(CALLBACK_PORT, \"127.0.0.1\", () => resolve());\n });\n\n console.log(\n `Waiting for callback at http://localhost:${CALLBACK_PORT}/callback`,\n );\n\n const authorizeParams = new URLSearchParams({\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n response_type: \"code\",\n scope: \"profile email\",\n state,\n });\n if (usePkce && codeVerifier) {\n authorizeParams.set(\"code_challenge\", generateCodeChallenge(codeVerifier));\n authorizeParams.set(\"code_challenge_method\", \"S256\");\n }\n\n const authorizeUrl = `${config.baseUrl}/api/oauth/authorize?${authorizeParams.toString()}`;\n console.log(\"Opening browser for authorization...\");\n console.log(\"(Make sure you're logged in to Moon IQ in your browser)\\n\");\n openBrowser(authorizeUrl);\n\n const code = await codePromise;\n if (!code) {\n throw new Error(\"No authorization code received\");\n }\n\n const tokenParams: Record<string, string> = {\n grant_type: \"authorization_code\",\n code,\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n };\n if (config.clientSecret) {\n tokenParams.client_secret = config.clientSecret;\n }\n if (usePkce && codeVerifier) {\n tokenParams.code_verifier = codeVerifier;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(tokenParams),\n });\n\n if (!tokenResponse.ok) {\n const err = (await tokenResponse.json().catch(() => ({}))) as {\n error?: string;\n error_description?: string;\n };\n const msg = err.error_description ?? err.error ?? tokenResponse.statusText;\n throw new Error(`Token exchange failed: ${msg}`);\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const creds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? null,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(creds);\n\n // Give the browser time to receive the success page before tearing down\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n server.close();\n for (const socket of sockets) {\n if (\"destroy\" in socket && typeof (socket as { destroy: () => void }).destroy === \"function\") {\n (socket as { destroy: () => void }).destroy();\n }\n }\n sockets.clear();\n\n return creds;\n}\n\nexport async function refreshCredentials(\n creds: Credentials,\n config: Config,\n): Promise<Credentials> {\n if (!creds.refreshToken) {\n throw new Error(\"No refresh token available\");\n }\n\n // Advisory lock — if another process is already refreshing, wait for it\n const unlock = acquireLock();\n if (!unlock) {\n // Another process holds the lock — wait briefly, then re-read from disk\n await new Promise((r) => setTimeout(r, 2000));\n const fresh = getCredentials();\n if (fresh && fresh.expiresAt > Date.now()) {\n return fresh;\n }\n throw new Error(\"Token refresh failed (concurrent refresh in progress)\");\n }\n\n try {\n // Re-read credentials — another process may have refreshed while we waited\n const latest = getCredentials();\n if (latest && latest.expiresAt > Date.now() + 60_000) {\n return latest;\n }\n\n const refreshParams: Record<string, string> = {\n grant_type: \"refresh_token\",\n refresh_token: creds.refreshToken,\n client_id: config.clientId,\n };\n if (config.clientSecret) {\n refreshParams.client_secret = config.clientSecret;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(refreshParams),\n });\n\n if (!tokenResponse.ok) {\n throw new Error(\"Token refresh failed\");\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const newCreds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? creds.refreshToken,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(newCreds);\n return newCreds;\n } finally {\n unlock();\n }\n}\n\nconst TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; // 5 minutes\n\nexport async function getValidToken(): Promise<string | null> {\n const creds = getCredentials();\n if (!creds) return null;\n\n const config = getConfig();\n if (!config || config.baseUrl !== creds.baseUrl) return null;\n\n if (Date.now() >= creds.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {\n if (creds.refreshToken) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n return newCreds.accessToken;\n } catch {\n return null;\n }\n }\n return null;\n }\n\n return creds.accessToken;\n}\n","// Generated by scripts/generate-cli-client.ts - do not edit\nexport const TOOL_NAMES = [\n \"iron_account_create\",\n \"iron_account_retrieve\",\n \"iron_offramp_create\",\n \"iron_offramp_delete\",\n \"iron_offramp_initiate\",\n \"iron_offramp_list\",\n \"iron_offramp_retrieve\",\n \"iron_onramp_create\",\n \"iron_onramp_delete\",\n \"iron_onramp_list\",\n \"iron_onramp_payment_create\",\n \"iron_onramp_payment_retrieve\",\n \"iron_onramp_retrieve\",\n \"lending_account_retrieve\",\n \"lending_deposit\",\n \"lending_rate_retrieve\",\n \"lending_recommend\",\n \"lending_withdraw\",\n \"market_digest_retrieve\",\n \"moonpay_buy\",\n \"solana_buy\",\n \"token_balance_check\",\n \"token_balance_list\",\n \"token_balance_retrieve\",\n \"token_bridge\",\n \"token_buy\",\n \"token_digest_retrieve\",\n \"token_holder_list\",\n \"token_limit_buy\",\n \"token_limit_buy_recommend\",\n \"token_limit_order_list\",\n \"token_limit_recommend\",\n \"token_limit_sell\",\n \"token_limit_sell_recommend\",\n \"token_liquidity_lock_list\",\n \"token_liquidity_retrieve\",\n \"token_pair_list\",\n \"token_recurring_buy\",\n \"token_recurring_order_list\",\n \"token_recurring_recommend\",\n \"token_recurring_sell\",\n \"token_retrieve\",\n \"token_search\",\n \"token_sell\",\n \"token_swap\",\n \"token_swap_recommend\",\n \"token_top_trader_list\",\n \"token_transfer\",\n \"token_trending_list\",\n \"user_retrieve\",\n \"user_update\",\n \"user_wallet_list\",\n \"user_wallet_retrieve\",\n \"wallet_digest_retrieve\",\n \"x402_request\"\n] as const;\n\nexport type ToolOption = {\n name: string;\n type: \"string\" | \"number\" | \"boolean\";\n description: string;\n required: boolean;\n choices?: string[];\n};\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n options: ToolOption[];\n};\n\nexport const TOOL_DEFINITIONS: ToolDefinition[] = [\n {\n \"name\": \"iron_account_create\",\n \"description\": \"Create a new Iron account for the user.\",\n \"options\": []\n },\n {\n \"name\": \"iron_account_retrieve\",\n \"description\": \"Get the user's Iron account information.\",\n \"options\": []\n },\n {\n \"name\": \"iron_offramp_create\",\n \"description\": \"Create a new offramp for the user to convert crypto to fiat\",\n \"options\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"description\": \"The name of the offramp\",\n \"required\": true\n },\n {\n \"name\": \"fiat\",\n \"type\": \"string\",\n \"description\": \"The fiat currency to convert to\",\n \"required\": true,\n \"choices\": [\n \"USD\",\n \"EUR\"\n ]\n },\n {\n \"name\": \"stablecoin\",\n \"type\": \"string\",\n \"description\": \"The stablecoin token to convert from\",\n \"required\": true,\n \"choices\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ]\n }\n ]\n },\n {\n \"name\": \"iron_offramp_delete\",\n \"description\": \"Cancel an offramp\",\n \"options\": [\n {\n \"name\": \"offrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to cancel\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"iron_offramp_initiate\",\n \"description\": \"Initiate an offramp by sending stablecoin to the offramp's deposit account. The stablecoin will be converted to fiat and deposited into your registered bank account. This process is asynchronous and may take some time for funds to appear in your bank account.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"offrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to initiate\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"The amount of stablecoin to send (in human-readable units, e.g., 100.5)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"iron_offramp_list\",\n \"description\": \"Get all offramps for the user\",\n \"options\": []\n },\n {\n \"name\": \"iron_offramp_retrieve\",\n \"description\": \"Get an offramp for the user\",\n \"options\": [\n {\n \"name\": \"offrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to retrieve\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"iron_onramp_create\",\n \"description\": \"Create an onramp to convert fiat currency to a stablecoin\",\n \"options\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"description\": \"The name of the onramp\",\n \"required\": true\n },\n {\n \"name\": \"fiat\",\n \"type\": \"string\",\n \"description\": \"The fiat currency to convert from\",\n \"required\": true,\n \"choices\": [\n \"USD\",\n \"EUR\"\n ]\n },\n {\n \"name\": \"stablecoin\",\n \"type\": \"string\",\n \"description\": \"The stablecoin token to convert to\",\n \"required\": true,\n \"choices\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ]\n }\n ]\n },\n {\n \"name\": \"iron_onramp_delete\",\n \"description\": \"Cancel an onramp\",\n \"options\": [\n {\n \"name\": \"onrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the onramp to cancel\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"iron_onramp_list\",\n \"description\": \"Get all onramps for the user\",\n \"options\": [\n {\n \"name\": \"status\",\n \"type\": \"string\",\n \"description\": \"Status of the onramps to get\",\n \"required\": true,\n \"choices\": [\n \"Created\",\n \"Authorized\",\n \"DepositAccountAdded\",\n \"Approved\",\n \"Rejected\",\n \"Cancelled\"\n ]\n }\n ]\n },\n {\n \"name\": \"iron_onramp_payment_create\",\n \"description\": \"Create an open banking payment link for an onramp\",\n \"options\": [\n {\n \"name\": \"onrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the onramp\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"string\",\n \"description\": \"The amount to pay\",\n \"required\": true\n },\n {\n \"name\": \"fiat\",\n \"type\": \"string\",\n \"description\": \"The fiat currency (USD or EUR)\",\n \"required\": true,\n \"choices\": [\n \"USD\",\n \"EUR\"\n ]\n }\n ]\n },\n {\n \"name\": \"iron_onramp_payment_retrieve\",\n \"description\": \"Get the status of an open banking payment\",\n \"options\": [\n {\n \"name\": \"onrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the onramp this payment belongs to\",\n \"required\": true\n },\n {\n \"name\": \"paymentId\",\n \"type\": \"string\",\n \"description\": \"The ID of the payment to retrieve\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"iron_onramp_retrieve\",\n \"description\": \"Get an onramp for the user\",\n \"options\": [\n {\n \"name\": \"onrampId\",\n \"type\": \"string\",\n \"description\": \"The ID of the onramp to retrieve\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"lending_account_retrieve\",\n \"description\": \"Get account details for a lending account by wallet address, including balances, interest earned, and withdrawal limits\",\n \"options\": []\n },\n {\n \"name\": \"lending_deposit\",\n \"description\": \"Deposit USDC into your lending account to earn interest.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC to deposit\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"lending_rate_retrieve\",\n \"description\": \"Get current and historical interest rates for lending USDC\",\n \"options\": []\n },\n {\n \"name\": \"lending_recommend\",\n \"description\": \"Analyze user's lending account and wallet balances to recommend either a deposit or withdraw action with appropriate parameters. Understands queries like 'should I deposit more?', 'recommend a withdrawal', or 'what should I do with my lending account?'.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language query about lending recommendations. Examples: 'should I deposit more?', 'recommend a withdrawal', 'what should I do with my lending account?'.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"lending_withdraw\",\n \"description\": \"Withdraw USDC from your lending account.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC to withdraw\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"market_digest_retrieve\",\n \"description\": \"Retrieve a market digest by chain.\",\n \"options\": [\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain network\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"moonpay_buy\",\n \"description\": \"Buy a token using Moonpay. Specify either from.amount (USD to spend) or to.amount (tokens to buy), not both.\",\n \"options\": [\n {\n \"name\": \"from\",\n \"type\": \"string\",\n \"description\": \"Payment currency and amount to spend\",\n \"required\": true\n },\n {\n \"name\": \"to\",\n \"type\": \"string\",\n \"description\": \"Destination chain, currency, and token amount\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"solana_buy\",\n \"description\": \"Buy SOL with USDC. Use this when the user needs SOL for gas or wants to convert USDC to SOL.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC to spend to buy SOL\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_balance_check\",\n \"description\": \"Check if a wallet has enough of a specific token. Returns success: true if the wallet has sufficient balance, false otherwise.\",\n \"options\": [\n {\n \"name\": \"wallet\",\n \"type\": \"string\",\n \"description\": \"Wallet address to check the balance for\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to check the balance of\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Required amount of tokens to check against\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token and wallet exist\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_balance_list\",\n \"description\": \"List all token balances held in a wallet, including amount owned, current value in USD, and token details. Shows the complete token portfolio.\",\n \"options\": [\n {\n \"name\": \"wallet\",\n \"type\": \"string\",\n \"description\": \"Wallet address to check token balances for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain to check balances on (e.g. 'solana', 'ethereum', 'base')\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_balance_retrieve\",\n \"description\": \"Get the balance of a specific token in a wallet, including the amount owned, current USD value, and token price. Returns zero balance if token is not held.\",\n \"options\": [\n {\n \"name\": \"wallet\",\n \"type\": \"string\",\n \"description\": \"Wallet address to check the balance for\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to check the balance of\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token and wallet exist\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_bridge\",\n \"description\": \"Bridge tokens from Solana to another chain (or vice versa) via swaps.xyz cross-chain routing.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the source token to bridge\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"The amount of the source token to bridge\",\n \"required\": true\n },\n {\n \"name\": \"to\",\n \"type\": \"string\",\n \"description\": \"Destination wallet, chain, and token\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_buy\",\n \"description\": \"Swap the specified amount of USDC for a token.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to buy\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC to spend to buy the token\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_digest_retrieve\",\n \"description\": \"Retrieve a token digest by token and chain.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain network where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_holder_list\",\n \"description\": \"List holders of a token with their balances and USD values. Shows holder distribution, concentration risk, and whale detection.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to list holders for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"limit\",\n \"type\": \"number\",\n \"description\": \"Maximum number of holders to return (default 25, max 200)\",\n \"required\": true\n },\n {\n \"name\": \"cursor\",\n \"type\": \"string\",\n \"description\": \"Pagination cursor from a previous response\",\n \"required\": true\n },\n {\n \"name\": \"sort\",\n \"type\": \"string\",\n \"description\": \"Sort holders by balance (largest first) or date (newest first)\",\n \"required\": true\n },\n {\n \"name\": \"order\",\n \"type\": \"string\",\n \"description\": \"Sort direction: ascending or descending\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_limit_buy\",\n \"description\": \"Create a limit buy order to swap USDC for a token at a specific price.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to buy\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC to spend to buy the token\",\n \"required\": true\n },\n {\n \"name\": \"price\",\n \"type\": \"number\",\n \"description\": \"Price in dollars (USDC) to buy the token\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_limit_buy_recommend\",\n \"description\": \"Parse natural language queries into structured limit buy parameters. Understands queries like 'buy BONK at $0.00001', 'limit buy 100 USDC worth of SOL when price reaches $150', or 'buy BONK at $0.00001 with 50 USDC'. Returns the recommended limit buy parameters ready to use with token_limit_buy.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language description of the desired limit buy order. Examples: 'buy BONK at $0.00001', 'limit buy 100 USDC worth of SOL when price reaches $150', 'buy BONK at $0.00001 with 50 USDC'. The agent will parse token, amount, and price from this query.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_limit_order_list\",\n \"description\": \"Get limit orders for the authenticated user.\",\n \"options\": []\n },\n {\n \"name\": \"token_limit_recommend\",\n \"description\": \"Parse natural language queries into structured limit order parameters (buy or sell). Understands queries like 'buy BONK at $0.00001', 'sell BONK at $0.00002', 'limit buy 100 USDC worth of SOL when price reaches $150', or 'sell all my BONK at $0.00002'. Automatically determines if the request is a buy or sell order and returns the appropriate parameters ready to use with token_limit_buy or token_limit_sell.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language description of the desired limit order (buy or sell). Examples: 'buy BONK at $0.00001', 'sell BONK at $0.00002', 'limit buy 100 USDC worth of SOL when price reaches $150', 'sell all my BONK at $0.00002'. The agent will parse the order type (buy/sell), token, amount, and price from this query.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_limit_sell\",\n \"description\": \"Create a limit sell order to swap a token for USDC at a specific price.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to sell\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of the token to sell\",\n \"required\": true\n },\n {\n \"name\": \"price\",\n \"type\": \"number\",\n \"description\": \"Price in dollars (USDC) to sell the token\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_limit_sell_recommend\",\n \"description\": \"Parse natural language queries into structured limit sell parameters. Understands queries like 'sell BONK at $0.00002', 'limit sell 100 SOL when price reaches $200', or 'sell all my BONK at $0.00002'. Returns the recommended limit sell parameters ready to use with token_limit_sell.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language description of the desired limit sell order. Examples: 'sell BONK at $0.00002', 'limit sell 100 SOL when price reaches $200', 'sell all my BONK at $0.00002'. The agent will parse token, amount, and price from this query.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_liquidity_lock_list\",\n \"description\": \"List individual liquidity locks for a token. Shows lock details including protocol, unlock schedule, and amounts for detailed lock analysis.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to list liquidity locks for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"cursor\",\n \"type\": \"string\",\n \"description\": \"Pagination cursor from a previous response\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_liquidity_retrieve\",\n \"description\": \"Get liquidity metadata for a token including total and locked liquidity amounts. Critical for assessing rug pull risk and token safety.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to check liquidity for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_pair_list\",\n \"description\": \"List trading pairs for a token with liquidity, volume, and exchange information. Find the best pairs to trade a token.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to list pairs for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"limit\",\n \"type\": \"number\",\n \"description\": \"Maximum number of pairs to return (default 25)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_recurring_buy\",\n \"description\": \"Create a recurring buy order (DCA) to swap USDC for a token at regular intervals.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to buy\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of USDC used to buy the token per order\",\n \"required\": true\n },\n {\n \"name\": \"interval\",\n \"type\": \"string\",\n \"description\": \"Time interval between orders\",\n \"required\": true,\n \"choices\": [\n \"hour\",\n \"day\",\n \"week\",\n \"month\"\n ]\n },\n {\n \"name\": \"numberOfOrders\",\n \"type\": \"number\",\n \"description\": \"Number of buy orders\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_recurring_order_list\",\n \"description\": \"Get recurring orders.\",\n \"options\": []\n },\n {\n \"name\": \"token_recurring_recommend\",\n \"description\": \"Parse natural language queries into structured recurring order (DCA) parameters (buy or sell). Understands queries like 'buy BONK daily with 50 USDC for 10 days', 'sell BONK daily, 100 tokens per order for 10 days', 'DCA 100 USDC into SOL weekly for a month', or 'recurring sell SOL every day, 0.5 SOL, 20 orders'. Automatically determines if the request is a buy or sell order and returns the appropriate parameters ready to use with token_recurring_buy or token_recurring_sell.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language description of the desired recurring order (buy or sell). Examples: 'buy BONK daily with 50 USDC for 10 days', 'sell BONK daily, 100 tokens per order for 10 days', 'DCA 100 USDC into SOL weekly for a month', 'recurring sell SOL every day, 0.5 SOL, 20 orders'. The agent will parse the order type (buy/sell), token, amount, interval, and numberOfOrders from this query.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_recurring_sell\",\n \"description\": \"Create a recurring sell order (DCA) to swap a token for USDC at regular intervals.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to sell\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of the token to sell per order\",\n \"required\": true\n },\n {\n \"name\": \"interval\",\n \"type\": \"string\",\n \"description\": \"Time interval between orders\",\n \"required\": true,\n \"choices\": [\n \"hour\",\n \"day\",\n \"week\",\n \"month\"\n ]\n },\n {\n \"name\": \"numberOfOrders\",\n \"type\": \"number\",\n \"description\": \"Number of recurring orders to create\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_retrieve\",\n \"description\": \"Get detailed token information including market data, price changes, volume, trades, and holder statistics by token address\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Address of the token to retrieve\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain network where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"token_search\",\n \"description\": \"Search for tokens by name, symbol, or address. Returns matching tokens with their market data including price, volume, and liquidity.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Search term - can be token name (e.g. 'Bitcoin'), symbol (e.g. 'BTC'), or partial match\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain to search on (e.g. 'solana', 'ethereum', 'base')\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"limit\",\n \"type\": \"number\",\n \"description\": \"Maximum number of results to return (optional, defaults to 5)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_sell\",\n \"description\": \"Swap the specified amount of tokens for USDC.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to sell\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"Amount of token to sell\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_swap\",\n \"description\": \"Swap the specified amount of input token for output token.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"input\",\n \"type\": \"string\",\n \"description\": \"The address of the input token to swap\",\n \"required\": true\n },\n {\n \"name\": \"output\",\n \"type\": \"string\",\n \"description\": \"The address of the output token to receive\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"The amount of the input token to swap\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_swap_recommend\",\n \"description\": \"Parse natural language queries into structured swap parameters for swapping tokens on Solana. Understands queries like 'swap 100 USDC for SOL', 'swap all my USDC for BONK', or '50 SOL to USDC'. Returns the recommended swap parameters ready to use with token_swap.\",\n \"options\": [\n {\n \"name\": \"query\",\n \"type\": \"string\",\n \"description\": \"Natural language description of the desired swap on Solana. Examples: 'swap 100 USDC for SOL', 'swap all my USDC for BONK', '50 SOL to USDC', 'convert my SOL to USDC'. The agent will parse tokens and amounts from this query.\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_top_trader_list\",\n \"description\": \"Get top traders for a token ranked by volume. Shows buy/sell activity, realized profit, and current balance for smart money analysis.\",\n \"options\": [\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"Token address to get top traders for\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain where the token exists\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"period\",\n \"type\": \"string\",\n \"description\": \"Trading period to analyze\",\n \"required\": true,\n \"choices\": [\n \"day\",\n \"week\",\n \"month\",\n \"year\"\n ]\n },\n {\n \"name\": \"limit\",\n \"type\": \"number\",\n \"description\": \"Maximum number of traders to return (default 25)\",\n \"required\": true\n },\n {\n \"name\": \"page\",\n \"type\": \"number\",\n \"description\": \"Page number for pagination (default 1)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_transfer\",\n \"description\": \"Transfer tokens from your wallet to another address. This tool will build the transaction, sign it using the authenticated user's wallet, and execute it. The recipient's token account will be automatically created if it doesn't exist.\",\n \"options\": [\n {\n \"name\": \"simulation\",\n \"type\": \"boolean\",\n \"description\": \"If true, only simulate the transaction without executing it\",\n \"required\": true\n },\n {\n \"name\": \"token\",\n \"type\": \"string\",\n \"description\": \"The address of the token to transfer\",\n \"required\": true\n },\n {\n \"name\": \"to\",\n \"type\": \"string\",\n \"description\": \"The recipient's wallet address\",\n \"required\": true\n },\n {\n \"name\": \"amount\",\n \"type\": \"number\",\n \"description\": \"The amount of tokens to transfer (in human-readable units, e.g., 1.5)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"token_trending_list\",\n \"description\": \"Get currently trending tokens on a blockchain. Perfect for discovering what's hot right now.\",\n \"options\": [\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain to get trending tokens from (e.g. 'solana', 'ethereum', 'base')\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n },\n {\n \"name\": \"limit\",\n \"type\": \"number\",\n \"description\": \"Number of results per page\",\n \"required\": true\n },\n {\n \"name\": \"page\",\n \"type\": \"number\",\n \"description\": \"The page number of results\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"user_retrieve\",\n \"description\": \"Retrieve the currently authenticated user from the session context.\",\n \"options\": []\n },\n {\n \"name\": \"user_update\",\n \"description\": \"Update user fields in the database. This is a PUT-style update requiring all updatable fields (developer, firstName, lastName, username) to be sent. You must first call user_retrieve to get the current user state, then update with all four fields.\",\n \"options\": [\n {\n \"name\": \"developer\",\n \"type\": \"boolean\",\n \"description\": \"Whether the user is a developer\",\n \"required\": true\n },\n {\n \"name\": \"firstName\",\n \"type\": \"string\",\n \"description\": \"The user's first name, or null to clear it\",\n \"required\": true\n },\n {\n \"name\": \"lastName\",\n \"type\": \"string\",\n \"description\": \"The user's last name, or null to clear it\",\n \"required\": true\n },\n {\n \"name\": \"username\",\n \"type\": \"string\",\n \"description\": \"The user's username (3-20 lowercase letters, numbers, and underscores, must start with a letter), or null to clear it\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"user_wallet_list\",\n \"description\": \"List all wallets for the authenticated user.\",\n \"options\": []\n },\n {\n \"name\": \"user_wallet_retrieve\",\n \"description\": \"Retrieve a wallet by address for the authenticated user. Use user_wallet_list to see your wallets.\",\n \"options\": [\n {\n \"name\": \"address\",\n \"type\": \"string\",\n \"description\": \"Wallet address to retrieve\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"wallet_digest_retrieve\",\n \"description\": \"Retrieve a wallet digest by wallet address and chain.\",\n \"options\": [\n {\n \"name\": \"wallet\",\n \"type\": \"string\",\n \"description\": \"Wallet address\",\n \"required\": true\n },\n {\n \"name\": \"chain\",\n \"type\": \"string\",\n \"description\": \"Blockchain network\",\n \"required\": true,\n \"choices\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ]\n }\n ]\n },\n {\n \"name\": \"x402_request\",\n \"description\": \"Make an HTTP request to an x402-protected endpoint. Automatically handles payment transactions when a 402 Payment Required response is received.\",\n \"options\": [\n {\n \"name\": \"method\",\n \"type\": \"string\",\n \"description\": \"HTTP method\",\n \"required\": true,\n \"choices\": [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\"\n ]\n },\n {\n \"name\": \"url\",\n \"type\": \"string\",\n \"description\": \"Full URL of the x402-protected endpoint (e.g., 'https://moon-iq.com/api/x402/tools/market_digest_retrieve')\",\n \"required\": true\n },\n {\n \"name\": \"body\",\n \"type\": \"string\",\n \"description\": \"Request body (for POST, PUT, PATCH)\",\n \"required\": true\n },\n {\n \"name\": \"params\",\n \"type\": \"string\",\n \"description\": \"Query parameters\",\n \"required\": true\n }\n ]\n }\n];\n\nexport async function callTool(\n baseUrl: string,\n token: string,\n toolName: string,\n params: Record<string, unknown>\n): Promise<unknown> {\n const res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(params),\n });\n\n const data = await res.json();\n\n if (!res.ok) {\n throw new Error(data.error ?? \"Tool call failed\");\n }\n\n return data;\n}\n","import {\n getConfig,\n getCredentials,\n getValidToken,\n refreshCredentials,\n} from \"./auth\";\nimport { TOOL_NAMES } from \"./generated/client\";\n\nexport { TOOL_NAMES } from \"./generated/client\";\n\nasync function callToolWithToken(\n baseUrl: string,\n token: string,\n toolName: string,\n params: Record<string, unknown>\n): Promise<{ data: unknown; status: number }> {\n const res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(params),\n });\n\n const data = await res.json();\n return { data, status: res.status };\n}\n\nexport async function callToolWithAuth(\n baseUrl: string,\n toolName: string,\n params: Record<string, unknown>\n): Promise<unknown> {\n let token = await getValidToken();\n if (!token) {\n throw new Error(\n \"Not logged in. Run `mooniq login` first and ensure ~/.config/moon-iq/config.json has baseUrl and clientId.\"\n );\n }\n\n let result = await callToolWithToken(baseUrl, token, toolName, params);\n\n if (result.status === 401) {\n const creds = getCredentials();\n const config = getConfig();\n if (creds?.refreshToken && config && config.baseUrl === creds.baseUrl) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n result = await callToolWithToken(\n baseUrl,\n newCreds.accessToken,\n toolName,\n params\n );\n } catch {\n // Refresh failed, fall through and throw the original 401\n }\n }\n }\n\n if (result.status < 200 || result.status >= 300) {\n const err = result.data as { error?: string };\n throw new Error(err?.error ?? \"Tool call failed\");\n }\n\n return result.data;\n}\n","const useColor =\n !process.env.NO_COLOR && process.stdout.isTTY === true;\n\nfunction ansi(code: string) {\n return (text: string) => (useColor ? `${code}${text}\\x1b[0m` : text);\n}\n\nexport const color = {\n bold: ansi(\"\\x1b[1m\"),\n dim: ansi(\"\\x1b[2m\"),\n green: ansi(\"\\x1b[32m\"),\n yellow: ansi(\"\\x1b[33m\"),\n cyan: ansi(\"\\x1b[36m\"),\n red: ansi(\"\\x1b[31m\"),\n};\n\nconst MAX_COL_WIDTH = 40;\n\nfunction truncate(str: string, max: number): string {\n return str.length > max ? str.slice(0, max - 1) + \"…\" : str;\n}\n\nfunction renderArrayTable(rows: Record<string, unknown>[]): string {\n if (rows.length === 0) return \"\";\n\n const keys = Object.keys(rows[0]);\n const widths = keys.map((k) => k.length);\n\n const stringRows = rows.map((row) =>\n keys.map((k, i) => {\n const val = truncate(String(row[k] ?? \"\"), MAX_COL_WIDTH);\n widths[i] = Math.max(widths[i], val.length);\n return val;\n }),\n );\n\n // Cap widths\n for (let i = 0; i < widths.length; i++) {\n widths[i] = Math.min(widths[i], MAX_COL_WIDTH);\n }\n\n const header = keys.map((k, i) => color.bold(k.padEnd(widths[i]))).join(\" \");\n const separator = color.dim(widths.map((w) => \"─\".repeat(w)).join(\"──\"));\n const body = stringRows\n .map((row) => row.map((val, i) => val.padEnd(widths[i])).join(\" \"))\n .join(\"\\n\");\n\n return `${header}\\n${separator}\\n${body}`;\n}\n\nfunction renderObjectTable(obj: Record<string, unknown>): string {\n const entries = Object.entries(obj);\n const maxKey = Math.min(\n MAX_COL_WIDTH,\n Math.max(...entries.map(([k]) => k.length)),\n );\n\n return entries\n .map(([k, v]) => `${color.bold(k.padEnd(maxKey))} ${String(v ?? \"\")}`)\n .join(\"\\n\");\n}\n\nexport function renderTable(data: unknown): string {\n if (Array.isArray(data)) {\n if (data.length === 0) return color.dim(\"(empty)\");\n if (typeof data[0] === \"object\" && data[0] !== null) {\n return renderArrayTable(data as Record<string, unknown>[]);\n }\n return data.map(String).join(\"\\n\");\n }\n\n if (typeof data === \"object\" && data !== null) {\n return renderObjectTable(data as Record<string, unknown>);\n }\n\n return String(data);\n}\n\nexport type OutputFormat = \"json\" | \"compact\" | \"table\";\n\nexport function formatOutput(result: unknown, format: OutputFormat): string {\n if (format === \"compact\") {\n return JSON.stringify(result);\n }\n\n if (format === \"table\") {\n const value =\n typeof result === \"object\" &&\n result !== null &&\n \"data\" in result\n ? (result as Record<string, unknown>).data\n : result;\n return renderTable(value);\n }\n\n return JSON.stringify(result, null, 2);\n}\n","import { readFileSync, writeFileSync, mkdirSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nimport { color } from \"./format\";\n\nconst CACHE_DIR = join(homedir(), \".config\", \"moon-iq\");\nconst CACHE_FILE = join(CACHE_DIR, \"update-check.json\");\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst FETCH_TIMEOUT_MS = 3000;\n\ntype CacheData = {\n latest: string;\n checkedAt: number;\n};\n\nfunction readCache(): CacheData | null {\n try {\n const raw = readFileSync(CACHE_FILE, \"utf-8\");\n return JSON.parse(raw) as CacheData;\n } catch {\n return null;\n }\n}\n\nfunction writeCache(data: CacheData): void {\n try {\n mkdirSync(CACHE_DIR, { recursive: true });\n writeFileSync(CACHE_FILE, JSON.stringify(data));\n } catch {\n // Ignore write errors\n }\n}\n\nfunction isNewer(latest: string, current: string): boolean {\n const a = latest.split(\".\").map(Number);\n const b = current.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n if ((a[i] ?? 0) > (b[i] ?? 0)) return true;\n if ((a[i] ?? 0) < (b[i] ?? 0)) return false;\n }\n return false;\n}\n\nfunction formatNotice(current: string, latest: string): string {\n return [\n \"\",\n color.yellow(`Update available: ${current} → ${latest}`),\n color.dim(\"Run `npm i -g @moonpay/cli` to update.\"),\n \"\",\n ].join(\"\\n\");\n}\n\nexport function startVersionCheck(\n currentVersion: string,\n): () => string | null {\n let notice: string | null = null;\n\n const cache = readCache();\n\n if (cache && Date.now() - cache.checkedAt < ONE_DAY_MS) {\n if (isNewer(cache.latest, currentVersion)) {\n notice = formatNotice(currentVersion, cache.latest);\n }\n return () => notice;\n }\n\n // Fire async fetch — non-blocking\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n\n fetch(\"https://registry.npmjs.org/@moonpay%2fcli/latest\", {\n signal: controller.signal,\n })\n .then((res) => res.json())\n .then((data: unknown) => {\n const latest = (data as { version?: string }).version;\n if (latest) {\n writeCache({ latest, checkedAt: Date.now() });\n if (isNewer(latest, currentVersion)) {\n notice = formatNotice(currentVersion, latest);\n }\n }\n })\n .catch(() => {\n // Silently ignore fetch errors\n })\n .finally(() => clearTimeout(timeout));\n\n return () => notice;\n}\n"],"mappings":";;;AACA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,cAAc;;;ACFhC,SAAS,aAAa;AACtB,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEtB,SAAS,WAAW,KAAqB;AACvC,SAAO,IACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAC1B;AAEA,SAAS,uBAA+B;AACtC,SAAc,mBAAY,EAAE,EAAE,SAAS,WAAW;AACpD;AAEA,SAAS,sBAAsB,UAA0B;AACvD,SAAc,kBAAW,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,WAAW;AACxE;AAEA,IAAM,aAAkB,UAAQ,WAAQ,GAAG,WAAW,SAAS;AAC/D,IAAM,cAAmB,UAAK,YAAY,aAAa;AACvD,IAAM,mBAAwB,UAAK,YAAY,kBAAkB;AACjE,IAAM,YAAiB,UAAK,YAAY,mBAAmB;AAC3D,IAAM,gBAAgB;AACtB,IAAM,eAAe,oBAAoB,aAAa;AAG/C,IAAM,iBAAyB;AAAA,EACpC,SAAS;AAAA,EACT,UAAU;AACZ;AAeA,SAAS,kBAAkB;AACzB,MAAI,CAAI,cAAW,UAAU,GAAG;AAC9B,IAAG,aAAU,YAAY,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AAAA,EAC3D;AACF;AAGA,SAAS,oBACP,UACA,MACA,MACA;AACA,QAAM,MAAM,WAAW,QAAQ,QAAQ,GAAG;AAC1C,EAAG,iBAAc,KAAK,MAAM,EAAE,UAAU,SAAS,KAAK,CAAC;AACvD,EAAG,cAAW,KAAK,QAAQ;AAC7B;AAEA,IAAM,gBAAgB;AAGtB,SAAS,cAAmC;AAC1C,kBAAgB;AAChB,MAAI;AAEF,UAAM,KAAQ,YAAS,WAAc,aAAU,UAAa,aAAU,SAAY,aAAU,UAAU,GAAK;AAC3G,IAAG,aAAU,IAAI,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACrE,IAAG,aAAU,EAAE;AAAA,EACjB,SAAS,KAAc;AACrB,QAAK,IAA8B,SAAS,SAAU,OAAM;AAE5D,QAAI;AACF,YAAM,WAAW,KAAK,MAAS,gBAAa,WAAW,OAAO,CAAC;AAC/D,UAAI,KAAK,IAAI,IAAI,SAAS,KAAK,eAAe;AAC5C,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,QAAI;AAAE,MAAG,cAAW,SAAS;AAAA,IAAG,QAAQ;AAAA,IAAwB;AAChE,QAAI;AACF,YAAM,KAAQ,YAAS,WAAc,aAAU,UAAa,aAAU,SAAY,aAAU,UAAU,GAAK;AAC3G,MAAG,aAAU,IAAI,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACrE,MAAG,aAAU,EAAE;AAAA,IACjB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,MAAM;AACX,QAAI;AAAE,MAAG,cAAW,SAAS;AAAA,IAAG,QAAQ;AAAA,IAAwB;AAAA,EAClE;AACF;AAGO,SAAS,YAA2B;AACzC,MAAI,CAAI,cAAW,WAAW,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,OAAO,KAAK,MAAS,gBAAa,aAAa,OAAO,CAAC;AAC7D,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,UAAU;AACnC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,qBAA6B;AAC3C,QAAM,WAAW,UAAU;AAC3B,MAAI,SAAU,QAAO;AAErB,aAAW,cAAc;AACzB,SAAO;AACT;AAEO,SAAS,iBAAqC;AACnD,MAAI,CAAI,cAAW,gBAAgB,GAAG;AACpC,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,OAAO,KAAK,MAAS,gBAAa,kBAAkB,OAAO,CAAC;AAClE,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,SAAS;AACtC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,OAAoB;AAClD,kBAAgB;AAChB,sBAAoB,kBAAkB,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,GAAK;AAC7E;AAEO,SAAS,WAAW,QAAgB;AACzC,kBAAgB;AAChB,sBAAoB,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,GAAK;AACzE;AAEO,SAAS,mBAAmB;AACjC,MAAO,cAAW,gBAAgB,GAAG;AACnC,IAAG,cAAW,gBAAgB;AAAA,EAChC;AACF;AAEA,SAAS,YAAY,KAAa;AAChC,QAAM,WAAW,QAAQ;AACzB,QAAM,MACJ,aAAa,WACT,SACA,aAAa,UACX,QACA;AACR,QAAM,OACJ,aAAa,UAAU,CAAC,MAAM,SAAS,IAAI,GAAG,IAAI,CAAC,GAAG;AACxD,QAAM,KAAK,MAAM,EAAE,OAAO,UAAU,UAAU,KAAK,CAAC,EAAE,MAAM;AAC9D;AAEA,eAAsB,MAAM,QAAsC;AAChE,QAAM,QAAe,kBAAW;AAChC,QAAM,UAAU,CAAC,OAAO;AAExB,MAAI;AACJ,MAAI,SAAS;AACX,mBAAe,qBAAqB;AAAA,EACtC;AAEA,MAAI;AACJ,QAAM,cAAc,IAAI,QAAgB,CAAC,YAAY;AACnD,sBAAkB;AAAA,EACpB,CAAC;AAED,QAAM,UAAU,oBAAI,IAA0B;AAE9C,QAAM,SAAc,kBAAa,CAAC,KAAK,QAAQ;AAC7C,UAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,oBAAoB,aAAa,EAAE;AACvE,QAAI,IAAI,aAAa,aAAa;AAChC,YAAMA,QAAO,IAAI,aAAa,IAAI,MAAM;AACxC,YAAM,gBAAgB,IAAI,aAAa,IAAI,OAAO;AAClD,YAAM,QAAQ,IAAI,aAAa,IAAI,OAAO;AAC1C,YAAM,YAAY,IAAI,aAAa,IAAI,mBAAmB;AAE1D,UAAI,kBAAkB,OAAO;AAC3B,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC,WAAW,OAAO;AAChB,cAAM,YAAY,WAAW,KAAK;AAClC,cAAM,WAAW,WAAW,aAAa,eAAe;AACxD,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF,yXAAyX,SAAS,KAAK,QAAQ;AAAA,QACjZ;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC,WAAWA,OAAM;AAEf,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgBA,KAAI;AAAA,MACtB,OAAO;AACL,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC;AAAA,IACF,OAAO;AAEL,UAAI,UAAU,GAAG;AACjB,UAAI,IAAI;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,WAAO,GAAG,SAAS,CAAC,QAA+B;AACjD,UAAI,IAAI,SAAS,cAAc;AAC7B;AAAA,UACE,IAAI;AAAA,YACF,QAAQ,aAAa,wDAAwD,aAAa;AAAA,UAC5F;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO,GAAG;AAAA,MACZ;AAAA,IACF,CAAC;AAED,WAAO,GAAG,cAAc,CAAC,WAAW;AAClC,cAAQ,IAAI,MAAM;AAClB,aAAO,GAAG,SAAS,MAAM,QAAQ,OAAO,MAAM,CAAC;AAAA,IACjD,CAAC;AACD,WAAO,OAAO,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,EAC3D,CAAC;AAED,UAAQ;AAAA,IACN,4CAA4C,aAAa;AAAA,EAC3D;AAEA,QAAM,kBAAkB,IAAI,gBAAgB;AAAA,IAC1C,WAAW,OAAO;AAAA,IAClB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACD,MAAI,WAAW,cAAc;AAC3B,oBAAgB,IAAI,kBAAkB,sBAAsB,YAAY,CAAC;AACzE,oBAAgB,IAAI,yBAAyB,MAAM;AAAA,EACrD;AAEA,QAAM,eAAe,GAAG,OAAO,OAAO,wBAAwB,gBAAgB,SAAS,CAAC;AACxF,UAAQ,IAAI,sCAAsC;AAClD,UAAQ,IAAI,2DAA2D;AACvE,cAAY,YAAY;AAExB,QAAM,OAAO,MAAM;AACnB,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,QAAM,cAAsC;AAAA,IAC1C,YAAY;AAAA,IACZ;AAAA,IACA,WAAW,OAAO;AAAA,IAClB,cAAc;AAAA,EAChB;AACA,MAAI,OAAO,cAAc;AACvB,gBAAY,gBAAgB,OAAO;AAAA,EACrC;AACA,MAAI,WAAW,cAAc;AAC3B,gBAAY,gBAAgB;AAAA,EAC9B;AAEA,QAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO,OAAO,oBAAoB;AAAA,IACrE,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,oCAAoC;AAAA,IAC/D,MAAM,IAAI,gBAAgB,WAAW;AAAA,EACvC,CAAC;AAED,MAAI,CAAC,cAAc,IAAI;AACrB,UAAM,MAAO,MAAM,cAAc,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAIxD,UAAM,MAAM,IAAI,qBAAqB,IAAI,SAAS,cAAc;AAChE,UAAM,IAAI,MAAM,0BAA0B,GAAG,EAAE;AAAA,EACjD;AAEA,QAAM,SAAS,MAAM,cAAc,KAAK;AACxC,QAAM,YAAY,KAAK,IAAI,KAAK,OAAO,cAAc,QAAQ;AAE7D,QAAM,QAAqB;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,cAAc,OAAO,iBAAiB;AAAA,IACtC;AAAA,IACA,SAAS,OAAO;AAAA,EAClB;AAEA,kBAAgB,KAAK;AAGrB,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AAExD,SAAO,MAAM;AACb,aAAW,UAAU,SAAS;AAC5B,QAAI,aAAa,UAAU,OAAQ,OAAmC,YAAY,YAAY;AAC5F,MAAC,OAAmC,QAAQ;AAAA,IAC9C;AAAA,EACF;AACA,UAAQ,MAAM;AAEd,SAAO;AACT;AAEA,eAAsB,mBACpB,OACA,QACsB;AACtB,MAAI,CAAC,MAAM,cAAc;AACvB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAGA,QAAM,SAAS,YAAY;AAC3B,MAAI,CAAC,QAAQ;AAEX,UAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAI,CAAC;AAC5C,UAAM,QAAQ,eAAe;AAC7B,QAAI,SAAS,MAAM,YAAY,KAAK,IAAI,GAAG;AACzC,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,MAAI;AAEF,UAAM,SAAS,eAAe;AAC9B,QAAI,UAAU,OAAO,YAAY,KAAK,IAAI,IAAI,KAAQ;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,gBAAwC;AAAA,MAC5C,YAAY;AAAA,MACZ,eAAe,MAAM;AAAA,MACrB,WAAW,OAAO;AAAA,IACpB;AACA,QAAI,OAAO,cAAc;AACvB,oBAAc,gBAAgB,OAAO;AAAA,IACvC;AAEA,UAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO,OAAO,oBAAoB;AAAA,MACrE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,oCAAoC;AAAA,MAC/D,MAAM,IAAI,gBAAgB,aAAa;AAAA,IACzC,CAAC;AAED,QAAI,CAAC,cAAc,IAAI;AACrB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,UAAM,SAAS,MAAM,cAAc,KAAK;AACxC,UAAM,YAAY,KAAK,IAAI,KAAK,OAAO,cAAc,QAAQ;AAE7D,UAAM,WAAwB;AAAA,MAC5B,aAAa,OAAO;AAAA,MACpB,cAAc,OAAO,iBAAiB,MAAM;AAAA,MAC5C;AAAA,MACA,SAAS,OAAO;AAAA,IAClB;AAEA,oBAAgB,QAAQ;AACxB,WAAO;AAAA,EACT,UAAE;AACA,WAAO;AAAA,EACT;AACF;AAEA,IAAM,yBAAyB,IAAI,KAAK;AAExC,eAAsB,gBAAwC;AAC5D,QAAM,QAAQ,eAAe;AAC7B,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,SAAS,UAAU;AACzB,MAAI,CAAC,UAAU,OAAO,YAAY,MAAM,QAAS,QAAO;AAExD,MAAI,KAAK,IAAI,KAAK,MAAM,YAAY,wBAAwB;AAC1D,QAAI,MAAM,cAAc;AACtB,UAAI;AACF,cAAM,WAAW,MAAM,mBAAmB,OAAO,MAAM;AACvD,eAAO,SAAS;AAAA,MAClB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,MAAM;AACf;;;AClaO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAgBO,IAAM,mBAAqC;AAAA,EAChD;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW,CAAC;AAAA,EACd;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,MACT;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AClvCA,eAAe,kBACb,SACA,OACA,UACA,QAC4C;AAC5C,QAAM,MAAM,MAAM,MAAM,GAAG,OAAO,cAAc,QAAQ,IAAI;AAAA,IAC1D,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,eAAe,UAAU,KAAK;AAAA,IAChC;AAAA,IACA,MAAM,KAAK,UAAU,MAAM;AAAA,EAC7B,CAAC;AAED,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,SAAO,EAAE,MAAM,QAAQ,IAAI,OAAO;AACpC;AAEA,eAAsB,iBACpB,SACA,UACA,QACkB;AAClB,MAAI,QAAQ,MAAM,cAAc;AAChC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,MAAM,kBAAkB,SAAS,OAAO,UAAU,MAAM;AAErE,MAAI,OAAO,WAAW,KAAK;AACzB,UAAM,QAAQ,eAAe;AAC7B,UAAM,SAAS,UAAU;AACzB,QAAI,OAAO,gBAAgB,UAAU,OAAO,YAAY,MAAM,SAAS;AACrE,UAAI;AACF,cAAM,WAAW,MAAM,mBAAmB,OAAO,MAAM;AACvD,iBAAS,MAAM;AAAA,UACb;AAAA,UACA,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,OAAO,OAAO,UAAU,KAAK;AAC/C,UAAM,MAAM,OAAO;AACnB,UAAM,IAAI,MAAM,KAAK,SAAS,kBAAkB;AAAA,EAClD;AAEA,SAAO,OAAO;AAChB;;;ACnEA,IAAM,WACJ,CAAC,QAAQ,IAAI,YAAY,QAAQ,OAAO,UAAU;AAEpD,SAAS,KAAK,MAAc;AAC1B,SAAO,CAAC,SAAkB,WAAW,GAAG,IAAI,GAAG,IAAI,YAAY;AACjE;AAEO,IAAM,QAAQ;AAAA,EACnB,MAAM,KAAK,SAAS;AAAA,EACpB,KAAK,KAAK,SAAS;AAAA,EACnB,OAAO,KAAK,UAAU;AAAA,EACtB,QAAQ,KAAK,UAAU;AAAA,EACvB,MAAM,KAAK,UAAU;AAAA,EACrB,KAAK,KAAK,UAAU;AACtB;AAEA,IAAM,gBAAgB;AAEtB,SAAS,SAAS,KAAa,KAAqB;AAClD,SAAO,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,WAAM;AAC1D;AAEA,SAAS,iBAAiB,MAAyC;AACjE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC;AAChC,QAAM,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM;AAEvC,QAAM,aAAa,KAAK;AAAA,IAAI,CAAC,QAC3B,KAAK,IAAI,CAAC,GAAG,MAAM;AACjB,YAAM,MAAM,SAAS,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,aAAa;AACxD,aAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM;AAC1C,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,WAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,aAAa;AAAA,EAC/C;AAEA,QAAM,SAAS,KAAK,IAAI,CAAC,GAAG,MAAM,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AAC5E,QAAM,YAAY,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,cAAI,CAAC;AACvE,QAAM,OAAO,WACV,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAClE,KAAK,IAAI;AAEZ,SAAO,GAAG,MAAM;AAAA,EAAK,SAAS;AAAA,EAAK,IAAI;AACzC;AAEA,SAAS,kBAAkB,KAAsC;AAC/D,QAAM,UAAU,OAAO,QAAQ,GAAG;AAClC,QAAM,SAAS,KAAK;AAAA,IAClB;AAAA,IACA,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;AAAA,EAC5C;AAEA,SAAO,QACJ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,CAAC,EAAE,EACrE,KAAK,IAAI;AACd;AAEO,SAAS,YAAY,MAAuB;AACjD,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,QAAI,KAAK,WAAW,EAAG,QAAO,MAAM,IAAI,SAAS;AACjD,QAAI,OAAO,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,MAAM;AACnD,aAAO,iBAAiB,IAAiC;AAAA,IAC3D;AACA,WAAO,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI;AAAA,EACnC;AAEA,MAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,WAAO,kBAAkB,IAA+B;AAAA,EAC1D;AAEA,SAAO,OAAO,IAAI;AACpB;AAIO,SAAS,aAAa,QAAiB,QAA8B;AAC1E,MAAI,WAAW,WAAW;AACxB,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAEA,MAAI,WAAW,SAAS;AACtB,UAAM,QACJ,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,SACL,OAAmC,OACpC;AACN,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;AChGA,SAAS,gBAAAC,eAAc,iBAAAC,gBAAe,aAAAC,kBAAiB;AACvD,SAAS,QAAAC,aAAY;AACrB,SAAS,WAAAC,gBAAe;AAGxB,IAAM,YAAYC,MAAKC,SAAQ,GAAG,WAAW,SAAS;AACtD,IAAM,aAAaD,MAAK,WAAW,mBAAmB;AACtD,IAAM,aAAa,KAAK,KAAK,KAAK;AAClC,IAAM,mBAAmB;AAOzB,SAAS,YAA8B;AACrC,MAAI;AACF,UAAM,MAAME,cAAa,YAAY,OAAO;AAC5C,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,MAAuB;AACzC,MAAI;AACF,IAAAC,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,IAAAC,eAAc,YAAY,KAAK,UAAU,IAAI,CAAC;AAAA,EAChD,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,QAAQ,QAAgB,SAA0B;AACzD,QAAM,IAAI,OAAO,MAAM,GAAG,EAAE,IAAI,MAAM;AACtC,QAAM,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AACtC,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,aAAa,SAAiB,QAAwB;AAC7D,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,qBAAqB,OAAO,WAAM,MAAM,EAAE;AAAA,IACvD,MAAM,IAAI,wCAAwC;AAAA,IAClD;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,kBACd,gBACqB;AACrB,MAAI,SAAwB;AAE5B,QAAM,QAAQ,UAAU;AAExB,MAAI,SAAS,KAAK,IAAI,IAAI,MAAM,YAAY,YAAY;AACtD,QAAI,QAAQ,MAAM,QAAQ,cAAc,GAAG;AACzC,eAAS,aAAa,gBAAgB,MAAM,MAAM;AAAA,IACpD;AACA,WAAO,MAAM;AAAA,EACf;AAGA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,gBAAgB;AAErE,QAAM,oDAAoD;AAAA,IACxD,QAAQ,WAAW;AAAA,EACrB,CAAC,EACE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EACxB,KAAK,CAAC,SAAkB;AACvB,UAAM,SAAU,KAA8B;AAC9C,QAAI,QAAQ;AACV,iBAAW,EAAE,QAAQ,WAAW,KAAK,IAAI,EAAE,CAAC;AAC5C,UAAI,QAAQ,QAAQ,cAAc,GAAG;AACnC,iBAAS,aAAa,gBAAgB,MAAM;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC,EACA,MAAM,MAAM;AAAA,EAEb,CAAC,EACA,QAAQ,MAAM,aAAa,OAAO,CAAC;AAEtC,SAAO,MAAM;AACf;;;ALpEA,IAAMC,WAAU,cAAc,YAAY,GAAG;AAC7C,IAAM,EAAE,QAAQ,IAAIA,SAAQ,iBAAiB;AAE7C,IAAM,kBAAkB,kBAAkB,OAAO;AAEjD,IAAM,mBAAmB;AAEzB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,QAAQ,EACb,YAAY,aAAa,EACzB,QAAQ,OAAO,EACf,OAAO,uBAAuB,0CAA0C,MAAM;AAEjF,SAAS,YAA0B;AACjC,QAAM,MAAM,QAAQ,KAAK,EAAE;AAC3B,MAAI,QAAQ,UAAU,QAAQ,aAAa,QAAQ,QAAS,QAAO;AACnE,SAAO;AACT;AAEA,SAAS,YAAY,QAAuB;AAC1C,UAAQ,IAAI,aAAa,QAAQ,UAAU,CAAC,CAAC;AAC/C;AAEA,SAAS,oBAA0B;AACjC,QAAM,SAAS,gBAAgB;AAC/B,MAAI,OAAQ,SAAQ,OAAO,MAAM,MAAM;AACzC;AAEA,SAAS,iBAAyB;AAChC,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,eAAe;AAC7B,SAAO,QAAQ,WAAW,OAAO,WAAW;AAC9C;AAEA,QACG,QAAQ,OAAO,EACf,YAAY,6BAA6B,EACzC,OAAO,YAAY;AAClB,QAAM,SAAS,mBAAmB;AAElC,MAAI;AACF,UAAM,MAAM,MAAM;AAClB,YAAQ,IAAI,yBAAyB;AAAA,EACvC,SAAS,OAAO;AACd,YAAQ,MAAM,iBAAkB,MAAgB,OAAO;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,OAAO,MAAM;AACZ,mBAAiB;AACjB,UAAQ,IAAI,aAAa;AAC3B,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,wBAAwB,EACpC,OAAO,YAAY;AAClB,MAAI,QAAQ,MAAM,cAAc;AAChC,MAAI,CAAC,OAAO;AACV,YAAQ,MAAM,0CAA0C;AACxD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,QAAQ,eAAe;AAC7B,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,eAAe;AAE/B,MAAI,MAAM,MAAM,MAAM,GAAG,OAAO,uBAAuB;AAAA,IACrD,SAAS,EAAE,eAAe,UAAU,KAAK,GAAG;AAAA,EAC9C,CAAC;AAED,MACE,IAAI,WAAW,OACf,OAAO,gBACP,UACA,OAAO,YAAY,MAAM,SACzB;AACA,QAAI;AACF,YAAM,WAAW,MAAM,mBAAmB,OAAO,MAAM;AACvD,YAAM,MAAM,MAAM,GAAG,OAAO,uBAAuB;AAAA,QACjD,SAAS,EAAE,eAAe,UAAU,SAAS,WAAW,GAAG;AAAA,MAC7D,CAAC;AAAA,IACH,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI,CAAC,IAAI,IAAI;AACX,YAAQ,MAAM,8BAA8B,IAAI,MAAM;AACtD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,WAAW,MAAM,IAAI,KAAK;AAChC,QAAM,EAAE,IAAI,SAAS,QAAQ,cAAc,WAAW,QAAQ,GAAG,QAAQ,IAAI;AAC7E,cAAY,OAAO;AACnB,oBAAkB;AACpB,CAAC;AAEH,QACG,QAAQ,iBAAiB,EACzB,YAAY,kDAAkD,EAC9D;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAKF,EACC,OAAO,OAAO,UAAkB,YAAY;AAC3C,QAAM,YAAY;AAClB,MAAI,CAAC,UAAU,SAAS,QAAQ,GAAG;AACjC,YAAQ,MAAM,iBAAiB,QAAQ,EAAE;AACzC,YAAQ,MAAM,oBAAoB,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,SAAkC,CAAC;AACvC,MAAI,QAAQ,OAAO;AACjB,QAAI;AACF,eAAS,KAAK,MAAM,QAAQ,KAAK;AAAA,IACnC,QAAQ;AACN,cAAQ,MAAM,yBAAyB;AACvC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,MAAI;AACF,UAAM,UAAU,eAAe;AAC/B,UAAM,SAAS,MAAM,iBAAiB,SAAS,UAAU,MAAM;AAC/D,gBAAY,MAAM;AAClB,sBAAkB;AAAA,EACpB,SAAS,OAAO;AACd,YAAQ,MAAM,qBAAsB,MAAgB,OAAO;AAC3D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,sBAAsB,EAClC,OAAO,wBAAwB,qCAAqC,EACpE,OAAO,6BAA6B,0BAA0B,EAC9D,OAAO,CAAC,YAAY;AAEnB,QAAM,SAAS,oBAAI,IAA8B;AACjD,aAAW,QAAQ,kBAAkB;AACnC,UAAM,WAAW,KAAK,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,QAAI,CAAC,OAAO,IAAI,QAAQ,EAAG,QAAO,IAAI,UAAU,CAAC,CAAC;AAClD,WAAO,IAAI,QAAQ,EAAG,KAAK,IAAI;AAAA,EACjC;AAEA,QAAM,iBAAiB,QAAQ,UAAU,YAAY;AACrD,QAAM,cAAc,QAAQ,QAAQ,YAAY;AAGhD,MAAI,aAAa,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK;AACzC,MAAI,gBAAgB;AAClB,QAAI,CAAC,OAAO,IAAI,cAAc,GAAG;AAC/B,cAAQ;AAAA,QACN,qBAAqB,cAAc;AAAA,wBAA2B,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAAA,MACpG;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,iBAAa,CAAC,cAAc;AAAA,EAC9B;AAEA,MAAI,aAAa;AACjB,QAAM,QAAkB,CAAC;AAEzB,aAAW,OAAO,YAAY;AAC5B,UAAM,QAAQ,OAAO,IAAI,GAAG;AAG5B,UAAM,WAAW,cACb,MAAM;AAAA,MACJ,CAAC,MACC,EAAE,KAAK,YAAY,EAAE,SAAS,WAAW,KACzC,EAAE,YAAY,YAAY,EAAE,SAAS,WAAW;AAAA,IACpD,IACA;AAEJ,QAAI,SAAS,WAAW,EAAG;AAG3B,UAAM,UAAU,KAAK,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM,CAAC;AAE9D,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK,EAAE;AACnC,UAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;AAEpD,eAAW,QAAQ,UAAU;AAC3B,YAAM;AAAA,QACJ,KAAK,MAAM,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,WAAW,CAAC;AAAA,MAC7E;AACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,GAAG;AACpB,UAAM,MAAM,cACR,sBAAsB,QAAQ,MAAM,OACpC;AACJ,YAAQ,MAAM,GAAG;AACjB,YAAQ;AAAA,MACN,yBAAyB,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAAA,IAC/D;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,MAAM,IAAI,GAAG,UAAU,QAAQ,eAAe,IAAI,KAAK,GAAG,EAAE,CAAC;AAExE,UAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAC5B,oBAAkB;AACpB,CAAC;AAMH,SAAS,kBAAkBC,UAAwB;AAOjD,QAAM,OAAoB,EAAE,UAAU,oBAAI,IAAI,EAAE;AAGhD,aAAW,QAAQ,kBAAkB;AACnC,UAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AACjC,QAAI,UAAU;AAEd,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,CAAC,QAAQ,SAAS,IAAI,IAAI,GAAG;AAC/B,gBAAQ,SAAS,IAAI,MAAM,EAAE,UAAU,oBAAI,IAAI,EAAE,CAAC;AAAA,MACpD;AACA,gBAAU,QAAQ,SAAS,IAAI,IAAI;AAGnC,UAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,gBAAQ,OAAO;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAGA,WAAS,eAAe,MAAmB,QAAiBC,OAAgB;AAC1E,eAAW,CAAC,MAAM,KAAK,KAAK,KAAK,UAAU;AACzC,YAAM,cAAc,CAAC,GAAGA,OAAM,IAAI;AAElC,UAAI,MAAM,MAAM;AAEd,cAAM,MAAM,OACT,QAAQ,IAAI,EACZ,YAAY,MAAM,KAAK,eAAe,OAAO,MAAM,KAAK,IAAI,EAAE;AAGjE,mBAAW,OAAO,MAAM,KAAK,SAAS;AACpC,gBAAM,aAAa,iBAAiB,GAAG;AACvC,gBAAM,SAAS,IAAI,OAAO,YAAY,IAAI,WAAW;AAErD,cAAI,IAAI,SAAS;AACf,mBAAO,QAAQ,IAAI,OAAO;AAAA,UAC5B;AAEA,cAAI,IAAI,UAAU;AAChB,gBAAI,UAAU,MAAM;AAAA,UACtB,OAAO;AACL,gBAAI,UAAU,MAAM;AAAA,UACtB;AAAA,QACF;AAGA,cAAM,WAAW,MAAM,KAAK;AAC5B,YAAI,OAAO,OAAO,YAAY;AAC5B,gBAAM,SAAS,YAAY,MAAM,KAAM,SAAS,OAAO;AACvD,gBAAM,UAAU,eAAe;AAE/B,cAAI;AACF,kBAAM,SAAS,MAAM,iBAAiB,SAAS,UAAU,MAAM;AAC/D,wBAAY,MAAM;AAClB,8BAAkB;AAAA,UACpB,SAAS,OAAO;AACd,oBAAQ,MAAM,qBAAsB,MAAgB,OAAO;AAC3D,oBAAQ,KAAK,CAAC;AAAA,UAChB;AAAA,QACF,CAAC;AAGD,YAAI,MAAM,SAAS,OAAO,GAAG;AAC3B,yBAAe,OAAO,KAAK,WAAW;AAAA,QACxC;AAAA,MACF,WAAW,MAAM,SAAS,OAAO,GAAG;AAElC,cAAM,MAAM,OAAO,QAAQ,IAAI,EAAE,YAAY,GAAG,IAAI,WAAW;AAE/D,uBAAe,OAAO,KAAK,WAAW;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAEA,iBAAe,MAAMD,UAAS,CAAC,CAAC;AAClC;AAKA,SAAS,iBAAiB,KAAyB;AACjD,QAAM,YAAY,IAAI,KAAK,QAAQ,YAAY,KAAK,EAAE,YAAY;AAElE,MAAI,IAAI,SAAS,WAAW;AAC1B,WAAO,KAAK,SAAS;AAAA,EACvB;AAEA,QAAM,mBAAmB,IAAI,IAAI,IAAI;AACrC,SAAO,KAAK,SAAS,IAAI,gBAAgB;AAC3C;AAKA,SAAS,YACP,aACA,YACyB;AACzB,QAAM,SAAkC,CAAC;AAEzC,aAAW,OAAO,aAAa;AAE7B,UAAM,YAAY,IAAI,KAAK,QAAQ,YAAY,KAAK,EAAE,YAAY;AAClE,UAAM,YAAY,UAAU,QAAQ,aAAa,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC;AAG1E,UAAM,QAAQ,WAAW,SAAS,KAAK,WAAW,IAAI,IAAI;AAE1D,QAAI,UAAU,QAAW;AAEvB,UAAI,IAAI,SAAS,YAAY,OAAO,UAAU,UAAU;AACtD,eAAO,IAAI,IAAI,IAAI,WAAW,KAAK;AAAA,MACrC,WAAW,IAAI,SAAS,WAAW;AACjC,eAAO,IAAI,IAAI,IAAI,UAAU,QAAQ,UAAU;AAAA,MACjD,WAAW,OAAO,UAAU,UAAU;AAEpC,YAAI;AACF,gBAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,cAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,mBAAO,IAAI,IAAI,IAAI;AAAA,UACrB,OAAO;AACL,mBAAO,IAAI,IAAI,IAAI;AAAA,UACrB;AAAA,QACF,QAAQ;AACN,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AAAA,MACF,OAAO;AACL,eAAO,IAAI,IAAI,IAAI;AAAA,MACrB;AAAA,IACF,OAAO;AAEL,aAAO,IAAI,IAAI,IAAI,IAAI,SAAS,YAAY,QAAQ;AAAA,IACtD;AAAA,EACF;AAEA,SAAO;AACT;AAGA,kBAAkB,OAAO;AAEzB,QAAQ,MAAM;","names":["code","readFileSync","writeFileSync","mkdirSync","join","homedir","join","homedir","readFileSync","mkdirSync","writeFileSync","require","program","path"]}
1
+ {"version":3,"sources":["../../../node_modules/tweetnacl/nacl-fast.js","../src/index.ts","../src/auth.ts","../src/client.ts","../src/format.ts","../src/version-check.ts","../src/generated/schemas.json","../src/tools/wallet/create/tool.ts","../src/tools/shared.ts","../src/tools/wallet/server.ts","../src/tools/wallet/create/schema.ts","../src/tools/wallet/import/tool.ts","../src/tools/wallet/import/schema.ts","../src/tools/wallet/list/tool.ts","../src/tools/wallet/list/schema.ts","../src/tools/wallet/models.ts","../src/tools/wallet/retrieve/schema.ts","../src/tools/wallet/retrieve/tool.ts","../src/tools/wallet/delete/tool.ts","../src/tools/wallet/delete/schema.ts","../src/tools/transaction/sign/tool.ts","../src/tools/transaction/sign/schema.ts","../src/tools/message/sign/tool.ts","../src/tools/message/sign/schema.ts"],"sourcesContent":["(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","#!/usr/bin/env node\nimport { createRequire } from \"module\";\nimport { Command } from \"commander\";\nimport {\n clearCredentials,\n getConfigOrDefault,\n getConfig,\n getCredentials,\n login,\n} from \"./auth\";\nimport { callTool } from \"./client\";\nimport { color, formatOutput, type OutputFormat } from \"./format\";\nimport { startVersionCheck } from \"./version-check\";\nimport type { Tool } from \"./tools/shared\";\nimport schemas from \"./generated/schemas.json\";\nimport { walletCreate } from \"./tools/wallet/create/tool\";\nimport { walletImport } from \"./tools/wallet/import/tool\";\nimport { walletList } from \"./tools/wallet/list/tool\";\nimport { walletRetrieve } from \"./tools/wallet/retrieve/tool\";\nimport { walletDelete } from \"./tools/wallet/delete/tool\";\nimport { transactionSign } from \"./tools/transaction/sign/tool\";\nimport { messageSign } from \"./tools/message/sign/tool\";\n\n/** All local tools — CLI commands are derived from their schemas */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst LOCAL_TOOLS: Tool<any>[] = [\n walletCreate,\n walletImport,\n walletList,\n walletRetrieve,\n walletDelete,\n transactionSign,\n messageSign,\n];\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\") as { version: string };\n\nconst getUpdateNotice = startVersionCheck(version);\n\nconst DEFAULT_BASE_URL = \"https://agents.moonpay.com\";\n\nconst program = new Command();\n\nprogram\n .name(\"moonpay\")\n .description(\"MoonPay CLI — non-custodial crypto tools\")\n .version(version)\n .option(\"-f, --format <type>\", \"Output format: json, compact, or table\", \"json\");\n\nfunction getFormat(): OutputFormat {\n const fmt = program.opts().format as string;\n if (fmt === \"json\" || fmt === \"compact\" || fmt === \"table\") return fmt;\n return \"json\";\n}\n\nfunction printResult(result: unknown): void {\n console.log(formatOutput(result, getFormat()));\n}\n\nfunction printUpdateNotice(): void {\n const notice = getUpdateNotice();\n if (notice) process.stderr.write(notice);\n}\n\nfunction resolveBaseUrl(): string {\n const config = getConfig();\n const creds = getCredentials();\n return config?.baseUrl ?? creds?.baseUrl ?? DEFAULT_BASE_URL;\n}\n\n// ── Auth commands ──────────────────────────────────────────────\n\nprogram\n .command(\"login\")\n .description(\"Log in to MoonPay via OAuth (required for authenticated tools)\")\n .action(async () => {\n const config = getConfigOrDefault();\n try {\n await login(config);\n console.log(\"Logged in successfully.\");\n } catch (error) {\n console.error(\"Login failed:\", (error as Error).message);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"logout\")\n .description(\"Log out and clear stored credentials\")\n .action(() => {\n clearCredentials();\n console.log(\"Logged out.\");\n });\n\n// ── Nested command helpers ─────────────────────────────────────\n\n/**\n * Get or create nested command groups from name segments.\n * e.g. [\"token\", \"swap\"] → program > token > swap\n */\nfunction getOrCreateGroup(parent: Command, segments: string[]): Command {\n let current = parent;\n for (const segment of segments) {\n let existing = current.commands.find((c) => c.name() === segment);\n if (!existing) {\n existing = current.command(segment);\n }\n current = existing;\n }\n return current;\n}\n\n// ── Local tool registration ────────────────────────────────────\n\nfunction registerLocalTools(parent: Command, tools: Tool<any>[]): void {\n for (const tool of tools) {\n const segments = tool.schema.name.split(\"_\");\n const leafName = segments.pop()!;\n const group = getOrCreateGroup(parent, segments);\n\n const cmd = group.command(leafName).description(tool.schema.description);\n\n // Derive CLI options from the Zod input schema shape\n const shape = (tool.schema.input as any).shape ?? {};\n const nullableKeys: string[] = [];\n\n for (const [key, field] of Object.entries<any>(shape)) {\n const desc = field.description ?? key;\n const typeName = field._def.typeName;\n\n if (typeName === \"ZodBoolean\") {\n cmd.option(`--${key}`, desc, false);\n } else if (typeName === \"ZodNullable\") {\n cmd.option(`--${key} <${key}>`, desc);\n nullableKeys.push(key);\n } else {\n cmd.requiredOption(`--${key} <${key}>`, desc);\n }\n }\n\n cmd.action(async (options: Record<string, unknown>) => {\n for (const key of nullableKeys) {\n if (options[key] === undefined) options[key] = null;\n }\n try {\n const result = await tool.handler(options);\n printResult(result);\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n }\n}\n\n// ── Remote tool registration ───────────────────────────────────\n\ninterface JsonSchemaProperty {\n type?: string | string[];\n description?: string;\n enum?: string[];\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n anyOf?: { type: string }[];\n}\n\ninterface JsonSchema {\n $ref?: string;\n definitions?: Record<string, JsonSchemaProperty>;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n}\n\nfunction resolveJsonSchema(inputSchema: JsonSchema): JsonSchemaProperty {\n if (inputSchema.$ref && inputSchema.definitions) {\n const defName = inputSchema.$ref.replace(\"#/definitions/\", \"\");\n return inputSchema.definitions[defName];\n }\n return inputSchema;\n}\n\nfunction isNullableProperty(prop: JsonSchemaProperty): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(\"null\");\n if (prop.anyOf) return prop.anyOf.some((t) => t.type === \"null\");\n return false;\n}\n\nfunction isObjectProperty(prop: JsonSchemaProperty): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(\"object\");\n return prop.type === \"object\";\n}\n\nfunction isNumberProperty(prop: JsonSchemaProperty): boolean {\n if (Array.isArray(prop.type)) return prop.type.some((t) => t === \"number\" || t === \"integer\");\n if (prop.anyOf) return prop.anyOf.some((t) => t.type === \"number\" || t.type === \"integer\");\n return prop.type === \"number\" || prop.type === \"integer\";\n}\n\nfunction registerRemoteTools(\n parent: Command,\n remoteSchemas: { name: string; description: string; inputSchema: JsonSchema }[],\n): void {\n for (const schema of remoteSchemas) {\n const segments = schema.name.split(\"_\");\n const leafName = segments.pop()!;\n const group = getOrCreateGroup(parent, segments);\n\n // Skip if a local tool already registered this command\n if (group.commands.find((c) => c.name() === leafName)) continue;\n\n const cmd = group.command(leafName).description(schema.description);\n\n const resolved = resolveJsonSchema(schema.inputSchema);\n const props = resolved.properties ?? {};\n const requiredSet = new Set(resolved.required ?? []);\n const nullableKeys: string[] = [];\n const numberKeys: string[] = [];\n const objectKeys: string[] = [];\n\n for (const [key, prop] of Object.entries(props)) {\n const desc = prop.description ?? key;\n const nullable = isNullableProperty(prop);\n const isObj = isObjectProperty(prop);\n const isNum = isNumberProperty(prop);\n\n if (isNum) numberKeys.push(key);\n\n if (isObj) {\n objectKeys.push(key);\n if (requiredSet.has(key) && !nullable) {\n cmd.requiredOption(`--${key} <json>`, `${desc} (as JSON)`);\n } else {\n cmd.option(`--${key} <json>`, `${desc} (as JSON)`);\n nullableKeys.push(key);\n }\n } else if (nullable || !requiredSet.has(key)) {\n cmd.option(`--${key} <${key}>`, desc);\n nullableKeys.push(key);\n } else {\n cmd.requiredOption(`--${key} <${key}>`, desc);\n }\n }\n\n cmd.action(async (options: Record<string, unknown>) => {\n // Coerce types\n for (const key of nullableKeys) {\n if (options[key] === undefined) options[key] = null;\n }\n for (const key of numberKeys) {\n if (options[key] != null && typeof options[key] === \"string\") {\n options[key] = Number(options[key]);\n }\n }\n for (const key of objectKeys) {\n if (typeof options[key] === \"string\") {\n try {\n options[key] = JSON.parse(options[key] as string);\n } catch {\n console.error(`Invalid JSON for --${key}`);\n process.exit(1);\n }\n }\n }\n\n try {\n const baseUrl = resolveBaseUrl();\n const result = await callTool(baseUrl, schema.name, options as Record<string, unknown>);\n printResult(result);\n printUpdateNotice();\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n }\n}\n\n// ── Custom commands ────────────────────────────────────────────\n\nconst TOKENS = [\"sol\", \"usdc\", \"eth\"] as const;\nconst CHAINS = [\"solana\", \"ethereum\", \"base\", \"polygon\", \"arbitrum\", \"optimism\"] as const;\n\nprogram\n .command(\"buy\")\n .description(\"Buy crypto with fiat via MoonPay\")\n .requiredOption(\"--email <email>\", \"Buyer email address\")\n .requiredOption(\"--token <token>\", `Token to buy (${TOKENS.join(\", \")})`)\n .requiredOption(\"--amount <amount>\", \"Amount of token to buy\")\n .requiredOption(\"--wallet <wallet>\", \"Destination wallet address\")\n .option(\"--chain <chain>\", `Blockchain (${CHAINS.join(\", \")})`, \"solana\")\n .action(async (options) => {\n try {\n const baseUrl = resolveBaseUrl();\n const result = await callTool(baseUrl, \"buy\", {\n email: options.email,\n from: { currency: \"usd\", amount: null },\n to: {\n chain: options.chain,\n currency: options.token,\n amount: Number(options.amount),\n wallet: options.wallet,\n },\n });\n printResult(result);\n printUpdateNotice();\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n// ── Register all tools ─────────────────────────────────────────\n\n/** Tools with custom CLI commands — skip auto-registration */\nconst CUSTOM_TOOLS = new Set([\"buy\"]);\n\nregisterLocalTools(program, LOCAL_TOOLS);\nregisterRemoteTools(\n program,\n (schemas as any).filter((s: any) => !CUSTOM_TOOLS.has(s.name)),\n);\n\n// ── Tools listing ──────────────────────────────────────────────\n\nprogram\n .command(\"tools\")\n .description(\"List available tools\")\n .action(() => {\n const allTools = [\n ...LOCAL_TOOLS.map((t) => ({\n name: t.schema.name,\n description: t.schema.description,\n })),\n ...schemas\n .filter((s) => !LOCAL_TOOLS.some((l) => l.schema.name === s.name))\n .map((s) => ({ name: s.name, description: s.description })),\n ].sort((a, b) => a.name.localeCompare(b.name));\n\n const lines: string[] = [];\n for (const tool of allTools) {\n const cmdName = tool.name.replace(/_/g, \" \");\n lines.push(` ${color.green(cmdName.padEnd(28))} ${color.dim(tool.description)}`);\n }\n lines.push(\"\");\n lines.push(color.dim(`${allTools.length} tools`));\n console.log(lines.join(\"\\n\"));\n printUpdateNotice();\n });\n\nprogram.parse();\n","import { spawn } from \"child_process\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return crypto.createHash(\"sha256\").update(verifier).digest(\"base64url\");\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".config\", \"moonpay\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst CREDENTIALS_PATH = path.join(CONFIG_DIR, \"credentials.json\");\nconst LOCK_PATH = path.join(CONFIG_DIR, \".credentials.lock\");\nconst CALLBACK_PORT = 3847;\nconst CALLBACK_URL = `http://127.0.0.1:${CALLBACK_PORT}/callback`;\n\n/** Built-in config used when no ~/.config/moonpay/config.json exists. */\nexport const DEFAULT_CONFIG: Config = {\n baseUrl: \"https://agents.moonpay.com\",\n clientId: \"mooniq_zin3s5jz3olzkdfxpmbeaogv\",\n};\n\nexport type Config = {\n baseUrl: string;\n clientId: string;\n clientSecret?: string;\n};\n\nexport type Credentials = {\n accessToken: string;\n refreshToken: string | null;\n expiresAt: number;\n baseUrl: string;\n};\n\nfunction ensureConfigDir() {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n/** Write to a temp file then rename — atomic on POSIX, prevents partial/corrupt reads. */\nfunction atomicWriteFileSync(\n filePath: string,\n data: string,\n mode: number,\n) {\n const tmp = filePath + `.tmp.${process.pid}`;\n fs.writeFileSync(tmp, data, { encoding: \"utf-8\", mode });\n fs.renameSync(tmp, filePath);\n}\n\nconst LOCK_STALE_MS = 30_000; // consider lock stale after 30s\n\n/** Advisory file lock. Returns unlock function, or null if lock is held by another process. */\nfunction acquireLock(): (() => void) | null {\n ensureConfigDir();\n try {\n // O_CREAT | O_EXCL — fails if file already exists\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n // Lock file exists — check if stale\n try {\n const lockData = JSON.parse(fs.readFileSync(LOCK_PATH, \"utf-8\"));\n if (Date.now() - lockData.ts < LOCK_STALE_MS) {\n return null; // lock is fresh, another process is refreshing\n }\n } catch {\n // corrupt lock file — treat as stale\n }\n // Stale lock — remove and retry once\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n try {\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch {\n return null;\n }\n }\n return () => {\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n };\n}\n\n/** Returns config from file, or null if missing/invalid. Use getConfigOrDefault() for login flow. */\nexport function getConfig(): Config | null {\n if (!fs.existsSync(CONFIG_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!data.baseUrl || !data.clientId) {\n return null;\n }\n return data as Config;\n } catch {\n return null;\n }\n}\n\n/** Returns config from file, or DEFAULT_CONFIG if none exists. Creates config file on first use. */\nexport function getConfigOrDefault(): Config {\n const fromFile = getConfig();\n if (fromFile) return fromFile;\n\n saveConfig(DEFAULT_CONFIG);\n return DEFAULT_CONFIG;\n}\n\nexport function getCredentials(): Credentials | null {\n if (!fs.existsSync(CREDENTIALS_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, \"utf-8\"));\n if (!data.accessToken || !data.baseUrl) {\n return null;\n }\n return data as Credentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(creds: Credentials) {\n ensureConfigDir();\n atomicWriteFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), 0o600);\n}\n\nexport function saveConfig(config: Config) {\n ensureConfigDir();\n atomicWriteFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 0o600);\n}\n\nexport function clearCredentials() {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n}\n\nfunction openBrowser(url: string) {\n const platform = process.platform;\n const cmd =\n platform === \"darwin\"\n ? \"open\"\n : platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args =\n platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n spawn(cmd, args, { stdio: \"ignore\", detached: true }).unref();\n}\n\nexport async function login(config: Config): Promise<Credentials> {\n const state = crypto.randomUUID();\n const usePkce = !config.clientSecret;\n\n let codeVerifier: string | undefined;\n if (usePkce) {\n codeVerifier = generateCodeVerifier();\n }\n\n let resolveCallback: (code: string) => void;\n const codePromise = new Promise<string>((resolve) => {\n resolveCallback = resolve;\n });\n\n const sockets = new Set<import(\"net\").Socket>();\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost:${CALLBACK_PORT}`);\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n const error = url.searchParams.get(\"error\");\n const errorDesc = url.searchParams.get(\"error_description\");\n\n if (returnedState !== state) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">State mismatch — possible CSRF attack. Please try logging in again.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (error) {\n const safeError = escapeHtml(error);\n const safeDesc = escapeHtml(errorDesc ?? \"Unknown error\");\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">${safeError}: ${safeDesc}</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (code) {\n // Serve success page inline - don't redirect to app (it may not be running)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>MoonPay Agents</title></head><body style=\"font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa\"><img src=\"https://agents.moonpay.com/logo.png\" alt=\"MoonPay\" style=\"width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem\" /><h1 style=\"margin:0 0 0.5rem;font-size:1.5rem;font-weight:600\">Your agent has money now.</h1><p style=\"color:#a1a1aa;margin:0;font-size:1rem\">You can close this tab and return to the terminal.</p></body></html>`,\n );\n resolveCallback(code);\n } else {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">Error</h1><p style=\"color:#991b1b;margin:0\">No authorization code received.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n }\n } else {\n // Favicon etc - serve minimal response to avoid \"site can't be reached\"\n res.writeHead(204);\n res.end();\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(\n new Error(\n `Port ${CALLBACK_PORT} is in use. Close the other process or run: lsof -i :${CALLBACK_PORT}`,\n ),\n );\n } else {\n reject(err);\n }\n });\n // Track all connections so we can destroy them and allow the process to exit\n server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.on(\"close\", () => sockets.delete(socket));\n });\n server.listen(CALLBACK_PORT, \"127.0.0.1\", () => resolve());\n });\n\n console.log(\n `Waiting for callback at http://localhost:${CALLBACK_PORT}/callback`,\n );\n\n const authorizeParams = new URLSearchParams({\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n response_type: \"code\",\n scope: \"profile email\",\n state,\n });\n if (usePkce && codeVerifier) {\n authorizeParams.set(\"code_challenge\", generateCodeChallenge(codeVerifier));\n authorizeParams.set(\"code_challenge_method\", \"S256\");\n }\n\n const authorizeUrl = `${config.baseUrl}/authorize?${authorizeParams.toString()}`;\n console.log(\"Opening browser for authorization...\");\n console.log(\"(Make sure you're logged in to MoonPay in your browser)\\n\");\n openBrowser(authorizeUrl);\n\n const code = await codePromise;\n if (!code) {\n throw new Error(\"No authorization code received\");\n }\n\n const tokenParams: Record<string, string> = {\n grant_type: \"authorization_code\",\n code,\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n };\n if (config.clientSecret) {\n tokenParams.client_secret = config.clientSecret;\n }\n if (usePkce && codeVerifier) {\n tokenParams.code_verifier = codeVerifier;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(tokenParams),\n });\n\n if (!tokenResponse.ok) {\n const err = (await tokenResponse.json().catch(() => ({}))) as {\n error?: string;\n error_description?: string;\n };\n const msg = err.error_description ?? err.error ?? tokenResponse.statusText;\n throw new Error(`Token exchange failed: ${msg}`);\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const creds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? null,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(creds);\n\n // Give the browser time to receive the success page before tearing down\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n server.close();\n for (const socket of sockets) {\n if (\"destroy\" in socket && typeof (socket as { destroy: () => void }).destroy === \"function\") {\n (socket as { destroy: () => void }).destroy();\n }\n }\n sockets.clear();\n\n return creds;\n}\n\nexport async function refreshCredentials(\n creds: Credentials,\n config: Config,\n): Promise<Credentials> {\n if (!creds.refreshToken) {\n throw new Error(\"No refresh token available\");\n }\n\n // Advisory lock — if another process is already refreshing, wait for it\n const unlock = acquireLock();\n if (!unlock) {\n // Another process holds the lock — wait briefly, then re-read from disk\n await new Promise((r) => setTimeout(r, 2000));\n const fresh = getCredentials();\n if (fresh && fresh.expiresAt > Date.now()) {\n return fresh;\n }\n throw new Error(\"Token refresh failed (concurrent refresh in progress)\");\n }\n\n try {\n // Re-read credentials — another process may have refreshed while we waited\n const latest = getCredentials();\n if (latest && latest.expiresAt > Date.now() + 60_000) {\n return latest;\n }\n\n const refreshParams: Record<string, string> = {\n grant_type: \"refresh_token\",\n refresh_token: creds.refreshToken,\n client_id: config.clientId,\n };\n if (config.clientSecret) {\n refreshParams.client_secret = config.clientSecret;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(refreshParams),\n });\n\n if (!tokenResponse.ok) {\n throw new Error(\"Token refresh failed\");\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const newCreds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? creds.refreshToken,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(newCreds);\n return newCreds;\n } finally {\n unlock();\n }\n}\n\nconst TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; // 5 minutes\n\nexport async function getValidToken(): Promise<string | null> {\n const creds = getCredentials();\n if (!creds) return null;\n\n const config = getConfig();\n if (!config || config.baseUrl !== creds.baseUrl) return null;\n\n if (Date.now() >= creds.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {\n if (creds.refreshToken) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n return newCreds.accessToken;\n } catch {\n return null;\n }\n }\n return null;\n }\n\n return creds.accessToken;\n}\n","/**\n * Remote tool client.\n * Attaches auth (Bearer token) if credentials are available, otherwise calls without auth.\n * Handles automatic token refresh on 401.\n */\n\nimport {\n getConfig,\n getCredentials,\n getValidToken,\n refreshCredentials,\n} from \"./auth\";\n\nexport async function callTool(\n baseUrl: string,\n toolName: string,\n params: Record<string, unknown>,\n): Promise<unknown> {\n const token = await getValidToken();\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n let res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(params),\n });\n\n // Auto-refresh on 401 if we have a refresh token\n if (res.status === 401 && token) {\n const creds = getCredentials();\n const config = getConfig();\n if (creds?.refreshToken && config && config.baseUrl === creds.baseUrl) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${newCreds.accessToken}`,\n },\n body: JSON.stringify(params),\n });\n } catch {\n // Refresh failed, fall through\n }\n }\n }\n\n const data = await res.json();\n\n if (res.status === 401) {\n throw new Error(\"This command requires a MoonPay Agents account. Run `moonpay login` first.\");\n }\n\n if (res.status < 200 || res.status >= 300) {\n const err = data as { error?: string };\n throw new Error(err?.error ?? `Tool call failed (${res.status})`);\n }\n\n return data;\n}\n","const useColor =\n !process.env.NO_COLOR && process.stdout.isTTY === true;\n\nfunction ansi(code: string) {\n return (text: string) => (useColor ? `${code}${text}\\x1b[0m` : text);\n}\n\nexport const color = {\n bold: ansi(\"\\x1b[1m\"),\n dim: ansi(\"\\x1b[2m\"),\n green: ansi(\"\\x1b[32m\"),\n yellow: ansi(\"\\x1b[33m\"),\n cyan: ansi(\"\\x1b[36m\"),\n red: ansi(\"\\x1b[31m\"),\n};\n\nconst MAX_COL_WIDTH = 40;\n\nfunction truncate(str: string, max: number): string {\n return str.length > max ? str.slice(0, max - 1) + \"…\" : str;\n}\n\nfunction renderArrayTable(rows: Record<string, unknown>[]): string {\n if (rows.length === 0) return \"\";\n\n const keys = Object.keys(rows[0]);\n const widths = keys.map((k) => k.length);\n\n const stringRows = rows.map((row) =>\n keys.map((k, i) => {\n const val = truncate(String(row[k] ?? \"\"), MAX_COL_WIDTH);\n widths[i] = Math.max(widths[i], val.length);\n return val;\n }),\n );\n\n // Cap widths\n for (let i = 0; i < widths.length; i++) {\n widths[i] = Math.min(widths[i], MAX_COL_WIDTH);\n }\n\n const header = keys.map((k, i) => color.bold(k.padEnd(widths[i]))).join(\" \");\n const separator = color.dim(widths.map((w) => \"─\".repeat(w)).join(\"──\"));\n const body = stringRows\n .map((row) => row.map((val, i) => val.padEnd(widths[i])).join(\" \"))\n .join(\"\\n\");\n\n return `${header}\\n${separator}\\n${body}`;\n}\n\nfunction renderObjectTable(obj: Record<string, unknown>): string {\n const entries = Object.entries(obj);\n const maxKey = Math.min(\n MAX_COL_WIDTH,\n Math.max(...entries.map(([k]) => k.length)),\n );\n\n return entries\n .map(([k, v]) => `${color.bold(k.padEnd(maxKey))} ${String(v ?? \"\")}`)\n .join(\"\\n\");\n}\n\nexport function renderTable(data: unknown): string {\n if (Array.isArray(data)) {\n if (data.length === 0) return color.dim(\"(empty)\");\n if (typeof data[0] === \"object\" && data[0] !== null) {\n return renderArrayTable(data as Record<string, unknown>[]);\n }\n return data.map(String).join(\"\\n\");\n }\n\n if (typeof data === \"object\" && data !== null) {\n return renderObjectTable(data as Record<string, unknown>);\n }\n\n return String(data);\n}\n\nexport type OutputFormat = \"json\" | \"compact\" | \"table\";\n\nexport function formatOutput(result: unknown, format: OutputFormat): string {\n if (format === \"compact\") {\n return JSON.stringify(result);\n }\n\n if (format === \"table\") {\n const value =\n typeof result === \"object\" &&\n result !== null &&\n \"data\" in result\n ? (result as Record<string, unknown>).data\n : result;\n return renderTable(value);\n }\n\n return JSON.stringify(result, null, 2);\n}\n","import { readFileSync, writeFileSync, mkdirSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nimport { color } from \"./format\";\n\nconst CACHE_DIR = join(homedir(), \".config\", \"moonpay\");\nconst CACHE_FILE = join(CACHE_DIR, \"update-check.json\");\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst FETCH_TIMEOUT_MS = 3000;\n\ntype CacheData = {\n latest: string;\n checkedAt: number;\n};\n\nfunction readCache(): CacheData | null {\n try {\n const raw = readFileSync(CACHE_FILE, \"utf-8\");\n return JSON.parse(raw) as CacheData;\n } catch {\n return null;\n }\n}\n\nfunction writeCache(data: CacheData): void {\n try {\n mkdirSync(CACHE_DIR, { recursive: true });\n writeFileSync(CACHE_FILE, JSON.stringify(data));\n } catch {\n // Ignore write errors\n }\n}\n\nfunction isNewer(latest: string, current: string): boolean {\n const a = latest.split(\".\").map(Number);\n const b = current.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n if ((a[i] ?? 0) > (b[i] ?? 0)) return true;\n if ((a[i] ?? 0) < (b[i] ?? 0)) return false;\n }\n return false;\n}\n\nfunction formatNotice(current: string, latest: string): string {\n return [\n \"\",\n color.yellow(`Update available: ${current} → ${latest}`),\n color.dim(\"Run `npm i -g @moonpay/cli` to update.\"),\n \"\",\n ].join(\"\\n\");\n}\n\nexport function startVersionCheck(\n currentVersion: string,\n): () => string | null {\n let notice: string | null = null;\n\n const cache = readCache();\n\n if (cache && Date.now() - cache.checkedAt < ONE_DAY_MS) {\n if (isNewer(cache.latest, currentVersion)) {\n notice = formatNotice(currentVersion, cache.latest);\n }\n return () => notice;\n }\n\n // Fire async fetch — non-blocking\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n\n fetch(\"https://registry.npmjs.org/@moonpay%2fcli/latest\", {\n signal: controller.signal,\n })\n .then((res) => res.json())\n .then((data: unknown) => {\n const latest = (data as { version?: string }).version;\n if (latest) {\n writeCache({ latest, checkedAt: Date.now() });\n if (isNewer(latest, currentVersion)) {\n notice = formatNotice(currentVersion, latest);\n }\n }\n })\n .catch(() => {\n // Silently ignore fetch errors\n })\n .finally(() => clearTimeout(timeout));\n\n return () => notice;\n}\n","[\n {\n \"name\": \"buy\",\n \"description\": \"Generate a buy link for purchasing crypto with fiat. Specify either from.amount (fiat to spend) or to.amount (tokens to buy), not both.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/buy_input\",\n \"definitions\": {\n \"buy_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"email\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"description\": \"Email address for the buyer\"\n },\n \"from\": {\n \"type\": \"object\",\n \"properties\": {\n \"currency\": {\n \"type\": \"string\",\n \"enum\": [\n \"usd\",\n \"eur\",\n \"gbp\"\n ],\n \"description\": \"Payment currency to spend (e.g., usd, eur, gbp)\"\n },\n \"amount\": {\n \"anyOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 20\n },\n {\n \"type\": \"null\"\n }\n ],\n \"description\": \"Amount in payment currency to spend\"\n }\n },\n \"required\": [\n \"currency\",\n \"amount\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Payment currency and amount to spend\"\n },\n \"to\": {\n \"type\": \"object\",\n \"properties\": {\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Destination blockchain network\"\n },\n \"currency\": {\n \"type\": \"string\",\n \"enum\": [\n \"sol\",\n \"usdc\",\n \"eth\"\n ],\n \"description\": \"The crypto currency to buy\"\n },\n \"amount\": {\n \"type\": [\n \"number\",\n \"null\"\n ],\n \"description\": \"Amount of tokens to buy\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Destination wallet address\"\n }\n },\n \"required\": [\n \"chain\",\n \"currency\",\n \"amount\",\n \"wallet\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Destination chain, currency, token amount, and wallet\"\n }\n },\n \"required\": [\n \"email\",\n \"from\",\n \"to\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_balance_list\",\n \"description\": \"List all token balances held in a wallet, including amount owned, current value in USD, and token details. Shows the complete token portfolio.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_balance_list_input\",\n \"definitions\": {\n \"token_balance_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address to check token balances for\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to check balances on (e.g. 'solana', 'ethereum', 'base')\"\n }\n },\n \"required\": [\n \"wallet\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_retrieve\",\n \"description\": \"Get detailed token information including market data, price changes, volume, trades, and holder statistics by token address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_retrieve_input\",\n \"definitions\": {\n \"token_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Address of the token to retrieve\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain network where the token exists\"\n }\n },\n \"required\": [\n \"token\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_search\",\n \"description\": \"Search for tokens by name, symbol, or address. Returns matching tokens with their market data including price, volume, and liquidity.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_search_input\",\n \"definitions\": {\n \"token_search_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Search term - can be token name (e.g. 'Bitcoin'), symbol (e.g. 'BTC'), or partial match\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to search on (e.g. 'solana', 'ethereum', 'base')\"\n },\n \"limit\": {\n \"type\": [\n \"number\",\n \"null\"\n ],\n \"description\": \"Maximum number of results to return (optional, defaults to 5)\"\n }\n },\n \"required\": [\n \"query\",\n \"chain\",\n \"limit\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_build\",\n \"description\": \"Build an unsigned swap transaction. Returns a base64-encoded transaction ready for signing.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_build_input\",\n \"definitions\": {\n \"token_swap_build_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"input\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the input token\"\n },\n \"output\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the output token\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount of the input token to swap\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address that will execute the swap\"\n }\n },\n \"required\": [\n \"input\",\n \"output\",\n \"amount\",\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_execute\",\n \"description\": \"Execute a signed swap transaction. Pass the signed transaction and requestId from token_swap_build.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_execute_input\",\n \"definitions\": {\n \"token_swap_execute_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"requestId\": {\n \"type\": \"string\",\n \"description\": \"Jupiter request ID from token_swap_build\"\n }\n },\n \"required\": [\n \"transaction\",\n \"requestId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"transaction_send\",\n \"description\": \"Broadcast a signed transaction to Solana. Simulates first, then sends and confirms.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/transaction_send_input\",\n \"definitions\": {\n \"transaction_send_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"Human-readable message describing the transaction\"\n }\n },\n \"required\": [\n \"transaction\",\n \"message\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"user_retrieve\",\n \"description\": \"Retrieve the currently authenticated user from the session context.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/user_retrieve_input\",\n \"definitions\": {\n \"user_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_delete\",\n \"description\": \"Delete a bank account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_delete_input\",\n \"definitions\": {\n \"virtual-account_bank-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"bankAccountId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the bank account to delete\"\n }\n },\n \"required\": [\n \"bankAccountId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_eur_register\",\n \"description\": \"Register a EUR bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_eur_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_eur_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"iban\": {\n \"type\": \"string\",\n \"description\": \"IBAN for SEPA bank account\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"iban\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_list\",\n \"description\": \"List registered bank accounts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_list_input\",\n \"definitions\": {\n \"virtual-account_bank-account_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_retrieve\",\n \"description\": \"Get a bank account by currency\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_bank-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"currency\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency code (USD or EUR)\"\n }\n },\n \"required\": [\n \"currency\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_usd_register\",\n \"description\": \"Register a USD bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_usd_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_usd_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"ACH\",\n \"Wire\"\n ],\n \"description\": \"Type of bank account (ACH or Wire)\"\n },\n \"accountNumber\": {\n \"type\": \"string\",\n \"description\": \"Account number\"\n },\n \"routingNumber\": {\n \"type\": \"string\",\n \"description\": \"Routing number\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"type\",\n \"accountNumber\",\n \"routingNumber\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_create\",\n \"description\": \"Create a virtual account and start KYC verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_create_input\",\n \"definitions\": {\n \"virtual-account_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_delete\",\n \"description\": \"Delete your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_delete_input\",\n \"definitions\": {\n \"virtual-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_create\",\n \"description\": \"Create a KYC verification link to complete identity verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_create_input\",\n \"definitions\": {\n \"virtual-account_identification_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_list\",\n \"description\": \"List all KYC identifications\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_list_input\",\n \"definitions\": {\n \"virtual-account_identification_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_retrieve\",\n \"description\": \"Get the status of a KYC identification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_retrieve_input\",\n \"definitions\": {\n \"virtual-account_identification_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_create\",\n \"description\": \"Create an offramp to convert stablecoin to fiat\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_create_input\",\n \"definitions\": {\n \"virtual-account_offramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the offramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert to\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert from\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_delete\",\n \"description\": \"Cancel an offramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_delete_input\",\n \"definitions\": {\n \"virtual-account_offramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to cancel\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_initiate\",\n \"description\": \"Build an unsigned transaction to send stablecoin to an offramp deposit address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_initiate_input\",\n \"definitions\": {\n \"virtual-account_offramp_initiate_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to send from\"\n },\n \"offrampId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to initiate\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"The amount of stablecoin to send (in human-readable units, e.g., 100.5)\"\n }\n },\n \"required\": [\n \"wallet\",\n \"offrampId\",\n \"amount\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_list\",\n \"description\": \"List all offramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_list_input\",\n \"definitions\": {\n \"virtual-account_offramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_retrieve\",\n \"description\": \"Get offramp details\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_offramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to retrieve\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_create\",\n \"description\": \"Create an onramp to convert fiat to stablecoin\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the onramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert from\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert to\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_delete\",\n \"description\": \"Cancel an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_delete_input\",\n \"definitions\": {\n \"virtual-account_onramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to cancel\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_list\",\n \"description\": \"List all onramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_list_input\",\n \"definitions\": {\n \"virtual-account_onramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"Created\",\n \"Authorized\",\n \"DepositAccountAdded\",\n \"Approved\",\n \"Rejected\",\n \"Cancelled\"\n ],\n \"description\": \"Status of the onramps to get\"\n }\n },\n \"required\": [\n \"status\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_create\",\n \"description\": \"Create an open banking payment link for an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp\"\n },\n \"amount\": {\n \"type\": \"string\",\n \"description\": \"The amount to pay\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency (USD or EUR)\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"amount\",\n \"fiat\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_retrieve\",\n \"description\": \"Get the status of an open banking payment\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp this payment belongs to\"\n },\n \"paymentId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the payment to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"paymentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_retrieve\",\n \"description\": \"Get onramp details and banking info\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_retrieve\",\n \"description\": \"Get your virtual account status\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_create\",\n \"description\": \"Sign a required document for your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_create_input\",\n \"definitions\": {\n \"virtual-account_signing_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"contentId\": {\n \"type\": \"string\",\n \"description\": \"The unique ID of the content to sign\"\n }\n },\n \"required\": [\n \"contentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_list\",\n \"description\": \"List all signed documents\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_list_input\",\n \"definitions\": {\n \"virtual-account_signing_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_required_list\",\n \"description\": \"List documents that require your signature\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_required_list_input\",\n \"definitions\": {\n \"virtual-account_signing_required_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_transaction_list\",\n \"description\": \"List virtual account transactions\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_transaction_list_input\",\n \"definitions\": {\n \"virtual-account_transaction_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_list\",\n \"description\": \"List registered wallets\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_list_input\",\n \"definitions\": {\n \"virtual-account_wallet_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_register\",\n \"description\": \"Register a wallet using a signed verification message\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_register_input\",\n \"definitions\": {\n \"virtual-account_wallet_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"The verification message (from virtual-account_wallet_registration-message_create)\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"description\": \"Base58-encoded signature of the message\"\n }\n },\n \"required\": [\n \"wallet\",\n \"message\",\n \"signature\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_registration-message_create\",\n \"description\": \"Create the verification message to register a wallet\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_registration-message_create_input\",\n \"definitions\": {\n \"virtual-account_wallet_registration-message_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n }\n },\n \"required\": [\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n }\n]","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletCreateSchema } from \"./schema\";\n\nexport const walletCreate = createTool(walletCreateSchema, async (params) => {\n const keypair = Keypair.generate();\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: bs58.encode(keypair.secretKey),\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\n\n// ── Schema types ─────────────────────────────────────────────\n\nexport type ToolSchema<\n I extends z.ZodType = z.ZodType,\n O extends z.ZodType = z.ZodType,\n> = {\n name: string;\n description: string;\n input: I;\n output: O;\n};\n\nexport type ToolInput<TSchema extends ToolSchema> = z.infer<TSchema[\"input\"]>;\nexport type ToolOutput<TSchema extends ToolSchema> = z.infer<TSchema[\"output\"]>;\n\nexport const defineToolSchema = <\n TInput extends z.ZodType,\n TOutput extends z.ZodType,\n>(config: {\n name: string;\n description: string;\n input: TInput;\n output: TOutput;\n}): ToolSchema<TInput, TOutput> => config;\n\n// ── Tool wrapper ─────────────────────────────────────────────\n\nexport type Tool<TSchema extends ToolSchema = ToolSchema> = {\n schema: TSchema;\n handler: (params: z.input<TSchema[\"input\"]>) => Promise<z.output<TSchema[\"output\"]>>;\n};\n\n/**\n * Lightweight createTool for CLI local tools.\n * Validates input/output with Zod, no logging or context.\n */\nexport const createTool = <TSchema extends ToolSchema>(\n schema: TSchema,\n handler: (\n params: z.output<TSchema[\"input\"]>,\n ) => Promise<z.output<TSchema[\"output\"]>>,\n): Tool<TSchema> => ({\n schema,\n handler: async (params: z.input<TSchema[\"input\"]>) => {\n const parsedInput = schema.input.parse(params);\n const result = await handler(parsedInput);\n return schema.output.parse(result);\n },\n});\n","import {\n readFileSync,\n readdirSync,\n writeFileSync,\n mkdirSync,\n existsSync,\n renameSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { randomBytes } from \"node:crypto\";\nimport type { Wallet, WalletInfo } from \"./models\";\n\nexport type { Wallet, WalletInfo };\n\nconst CONFIG_DIR = join(homedir(), \".config\", \"moonpay\");\nconst WALLETS_DIR = join(CONFIG_DIR, \"wallets\");\n\nexport function ensureWalletsDir(): void {\n mkdirSync(WALLETS_DIR, { recursive: true, mode: 0o700 });\n}\n\nexport function getWalletPath(name: string): string {\n return join(WALLETS_DIR, `${name}.json`);\n}\n\nexport function getWalletsDir(): string {\n return WALLETS_DIR;\n}\n\nexport function saveWallet(wallet: Wallet): void {\n ensureWalletsDir();\n const filePath = getWalletPath(wallet.name);\n if (existsSync(filePath)) {\n throw new Error(`Wallet \"${wallet.name}\" already exists`);\n }\n const tmpPath = join(\n WALLETS_DIR,\n `.${wallet.name}.${randomBytes(4).toString(\"hex\")}.tmp`,\n );\n writeFileSync(tmpPath, JSON.stringify(wallet, null, 2), { mode: 0o600 });\n renameSync(tmpPath, filePath);\n}\n\n/**\n * Load a wallet by address.\n */\nexport function loadWallet(address: string): Wallet {\n ensureWalletsDir();\n const files = readdirSync(WALLETS_DIR).filter((f) => f.endsWith(\".json\"));\n for (const file of files) {\n const wallet: Wallet = JSON.parse(\n readFileSync(join(WALLETS_DIR, file), \"utf-8\"),\n );\n if (wallet.address === address) return wallet;\n }\n\n throw new Error(`Wallet \"${address}\" not found`);\n}\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletCreateSchema = defineToolSchema({\n name: \"wallet_create\",\n description: \"Generate a new Solana keypair and store it locally\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createInterface } from \"node:readline\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletImportSchema } from \"./schema\";\n\nasync function promptSecret(prompt: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport const walletImport = createTool(walletImportSchema, async (params) => {\n const secretKeyBase58 =\n params.key !== null\n ? params.key\n : await promptSecret(\"Enter private key (base58): \");\n\n let keypair: Keypair;\n try {\n const secretKeyBytes = bs58.decode(secretKeyBase58);\n keypair = Keypair.fromSecretKey(secretKeyBytes);\n } catch {\n throw new Error(\n \"Invalid private key. Expected a base58-encoded Solana secret key.\",\n );\n }\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: secretKeyBase58,\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletImportSchema = defineToolSchema({\n name: \"wallet_import\",\n description: \"Import a Solana wallet from a base58 private key\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n key: z\n .string()\n .nullable()\n .describe(\"Base58-encoded private key (prompted interactively if not provided)\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createTool } from \"../../shared\";\nimport { ensureWalletsDir, getWalletsDir, type Wallet } from \"../server\";\nimport { walletListSchema } from \"./schema\";\n\nexport const walletList = createTool(walletListSchema, async () => {\n ensureWalletsDir();\n const dir = getWalletsDir();\n const files = readdirSync(dir).filter(\n (f) => f.endsWith(\".json\") && !f.startsWith(\".\"),\n );\n return files.map((f) => {\n const wallet: Wallet = JSON.parse(readFileSync(join(dir, f), \"utf-8\"));\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n });\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletListSchema = defineToolSchema({\n name: \"wallet_list\",\n description: \"List all local wallets\",\n input: z.object({}),\n output: z.array(walletInfoSchema),\n});\n","import { z } from \"zod\";\n\nexport const walletSchema = z.object({\n name: z.string(),\n address: z.string(),\n secretKey: z.string(),\n chain: z.literal(\"solana\"),\n createdAt: z.string(),\n});\n\nexport type Wallet = z.infer<typeof walletSchema>;\n\n/** Wallet without the secret key — safe for display/output */\nexport const walletInfoSchema = walletSchema.omit({ secretKey: true });\n\nexport type WalletInfo = z.infer<typeof walletInfoSchema>;\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletRetrieveSchema = defineToolSchema({\n name: \"wallet_retrieve\",\n description: \"Get details of a specific wallet\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n }),\n output: walletInfoSchema,\n});\n","import { createTool } from \"../../shared\";\nimport { loadWallet } from \"../server\";\nimport { walletRetrieveSchema } from \"./schema\";\n\nexport const walletRetrieve = createTool(\n walletRetrieveSchema,\n async (params) => {\n const wallet = loadWallet(params.name);\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n },\n);\n","import { unlinkSync } from \"node:fs\";\nimport { createTool } from \"../../shared\";\nimport { walletRetrieve } from \"../retrieve/tool\";\nimport { getWalletPath } from \"../server\";\nimport { walletDeleteSchema } from \"./schema\";\n\nexport const walletDelete = createTool(walletDeleteSchema, async (params) => {\n if (!params.confirm) {\n throw new Error(\n \"Deletion not confirmed. Pass --confirm to permanently delete this wallet.\",\n );\n }\n\n // Verify wallet exists (throws if not found)\n await walletRetrieve.handler({ name: params.name });\n\n // Remove the wallet file\n unlinkSync(getWalletPath(params.name));\n\n return { name: params.name, deleted: true as const };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletDeleteSchema = defineToolSchema({\n name: \"wallet_delete\",\n description:\n \"Permanently delete a local wallet. This removes the private key file and cannot be undone.\",\n input: z.object({\n name: z.string().describe(\"Name of the wallet to delete\"),\n confirm: z\n .boolean()\n .describe(\"Must be true to confirm deletion\"),\n }),\n output: z.object({\n name: z.string().describe(\"Name of the deleted wallet\"),\n deleted: z.literal(true),\n }),\n});\n","import { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { transactionSignSchema } from \"./schema\";\n\nexport const transactionSign = createTool(\n transactionSignSchema,\n async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const txBytes = Buffer.from(params.transaction.trim(), \"base64\");\n const tx = VersionedTransaction.deserialize(txBytes);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n tx.sign([keypair]);\n\n return {\n transaction: Buffer.from(tx.serialize()).toString(\"base64\"),\n };\n },\n);\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const transactionSignSchema = defineToolSchema({\n name: \"transaction_sign\",\n description: \"Sign a base64-encoded Solana transaction with a local wallet\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address\"),\n transaction: z\n .string()\n .describe(\"Base64-encoded unsigned transaction\"),\n }),\n output: z.object({\n transaction: z\n .string()\n .describe(\"Base64-encoded signed transaction\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { messageSignSchema } from \"./schema\";\n\nexport const messageSign = createTool(messageSignSchema, async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n const messageBytes = Buffer.from(params.message, \"utf8\");\n const signatureBytes = nacl.sign.detached(messageBytes, keypair.secretKey);\n\n return { signature: bs58.encode(signatureBytes) };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const messageSignSchema = defineToolSchema({\n name: \"message_sign\",\n description:\n \"Sign a message with a local wallet. Produces a base58-encoded ed25519 signature compatible with Solana's signMessage.\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address to sign with\"),\n message: z.string().describe(\"Message text to sign\"),\n }),\n output: z.object({\n signature: z\n .string()\n .describe(\"Base58-encoded ed25519 signature\"),\n }),\n});\n"],"mappings":"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AI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,EAAE;AACR,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AA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A,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,MACtC;AAEA,eAAS,qBAAqB,IAAI,IAAI,GAAG,GAAG;AAC1C,YAAI,KAAK,IAAI,WAAW,EAAE,GAAG,KAAK,IAAI,WAAW,EAAE,GAC/C,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KACnC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KACnC,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAEjC,YAAI,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GAEV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC,GACV,MAAM,GAAG,CAAC;AAEd,YAAI,MAAM;AACV,eAAO,KAAK,KAAK;AACf,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,gBAAI,IAAI,IAAI;AACZ,eAAG,CAAC,IAAK,EAAE,IAAE,CAAC,KAAK,KAAO,EAAE,IAAE,CAAC,KAAK,KAAO,EAAE,IAAE,CAAC,KAAK,IAAK,EAAE,IAAE,CAAC;AAC/D,eAAG,CAAC,IAAK,EAAE,IAAE,CAAC,KAAK,KAAO,EAAE,IAAE,CAAC,KAAK,KAAO,EAAE,IAAE,CAAC,KAAK,IAAK,EAAE,IAAE,CAAC;AAAA,UACjE;AACA,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAGN,gBAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAC1B,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAG1B,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AACjH,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAEjH,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAG5B,gBAAK,MAAM,MAAQ,CAAC,MAAM;AAC1B,gBAAK,MAAM,MAAQ,CAAC,MAAM;AAE1B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAG5B,gBAAI,EAAE,IAAE,CAAC;AACT,gBAAI,EAAE,IAAE,IAAE,CAAC;AAEX,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAG5B,gBAAI,GAAG,IAAE,EAAE;AACX,gBAAI,GAAG,IAAE,EAAE;AAEX,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAE5B,iBAAK,MAAM;AACX,iBAAK,MAAM;AACX,iBAAK,MAAM;AAEX,iBAAK,IAAI,QAAS,KAAK;AACvB,iBAAK,IAAI,QAAS,KAAK;AAGvB,gBAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAC1B,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAG1B,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG,QAAW,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAC3H,iBAAM,QAAQ,KAAO,OAAQ,KAAG,OAAU,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG,QAAW,QAAS,KAAG,KAAQ,OAAQ,MAAI,KAAG;AAE3H,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAG5B,gBAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AACvC,gBAAK,MAAM,MAAQ,MAAM,MAAQ,MAAM;AAEvC,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAE5B,iBAAK,MAAM;AACX,iBAAK,MAAM;AACX,iBAAK,MAAM;AAEX,kBAAO,IAAI,QAAW,KAAK;AAC3B,kBAAO,IAAI,QAAW,KAAK;AAG3B,gBAAI;AACJ,gBAAI;AAEJ,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAC1B,gBAAI,IAAI;AAAQ,gBAAI,MAAM;AAE1B,gBAAI;AACJ,gBAAI;AAEJ,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAC5B,iBAAK,IAAI;AAAQ,iBAAK,MAAM;AAE5B,iBAAK,MAAM;AACX,iBAAK,MAAM;AACX,iBAAK,MAAM;AAEX,kBAAO,IAAI,QAAW,KAAK;AAC3B,kBAAO,IAAI,QAAW,KAAK;AAE3B,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AACN,kBAAM;AAEN,gBAAI,IAAE,OAAO,IAAI;AACf,mBAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AAEvB,oBAAI,GAAG,CAAC;AACR,oBAAI,GAAG,CAAC;AAER,oBAAI,IAAI;AAAQ,oBAAI,MAAM;AAC1B,oBAAI,IAAI;AAAQ,oBAAI,MAAM;AAE1B,oBAAI,IAAI,IAAE,KAAG,EAAE;AACf,oBAAI,IAAI,IAAE,KAAG,EAAE;AAEf,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAC5B,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAG5B,qBAAK,IAAI,IAAE,KAAG,EAAE;AAChB,qBAAK,IAAI,IAAE,KAAG,EAAE;AAChB,qBAAM,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG,KAAQ,OAAO;AAC5E,qBAAM,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG,MAAS,OAAO,IAAM,MAAO,KAAG;AAE7F,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAC5B,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAG5B,qBAAK,IAAI,IAAE,MAAI,EAAE;AACjB,qBAAK,IAAI,IAAE,MAAI,EAAE;AACjB,qBAAM,OAAO,KAAO,MAAO,KAAG,OAAU,OAAQ,KAAG,KAAQ,MAAO,MAAI,KAAG,OAAU,OAAO;AAC1F,qBAAM,OAAO,KAAO,MAAO,KAAG,OAAU,OAAQ,KAAG,KAAQ,MAAO,MAAI,KAAG,QAAW,OAAO,IAAM,MAAO,KAAG;AAE3G,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAC5B,qBAAK,IAAI;AAAQ,qBAAK,MAAM;AAE5B,qBAAK,MAAM;AACX,qBAAK,MAAM;AACX,qBAAK,MAAM;AAEX,mBAAG,CAAC,IAAK,IAAI,QAAW,KAAK;AAC7B,mBAAG,CAAC,IAAK,IAAI,QAAW,KAAK;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAGA,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,cAAI;AACJ,cAAI;AAEJ,cAAI,IAAI;AAAQ,cAAI,MAAM;AAC1B,cAAI,IAAI;AAAQ,cAAI,MAAM;AAE1B,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AAER,eAAK,IAAI;AAAQ,eAAK,MAAM;AAC5B,eAAK,IAAI;AAAQ,eAAK,MAAM;AAE5B,eAAK,MAAM;AACX,eAAK,MAAM;AACX,eAAK,MAAM;AAEX,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AACnC,aAAG,CAAC,IAAI,MAAO,IAAI,QAAW,KAAK;AAEnC,iBAAO;AACP,eAAK;AAAA,QACP;AAEA,eAAO;AAAA,MACT;AAEA,eAAS,YAAY,KAAK,GAAG,GAAG;AAC9B,YAAI,KAAK,IAAI,WAAW,CAAC,GACrB,KAAK,IAAI,WAAW,CAAC,GACrB,IAAI,IAAI,WAAW,GAAG,GACtB,GAAG,IAAI;AAEX,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AAER,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AACR,WAAG,CAAC,IAAI;AAER,6BAAqB,IAAI,IAAI,GAAG,CAAC;AACjC,aAAK;AAEL,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI,EAAE,IAAE,IAAE,CAAC;AACtC,UAAE,CAAC,IAAI;AAEP,YAAI,MAAI,OAAK,IAAE,MAAI,IAAE;AACrB,UAAE,IAAE,CAAC,IAAI;AACT,aAAK,GAAG,IAAE,GAAK,IAAI,YAAc,GAAG,KAAK,CAAC;AAC1C,6BAAqB,IAAI,IAAI,GAAG,CAAC;AAEjC,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,MAAK,KAAK,IAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAEnD,eAAO;AAAA,MACT;AAEA,eAAS,IAAI,GAAG,GAAG;AACjB,YAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAC3B,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAC3B,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG;AAE/B,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,GAAG,EAAE;AACV,UAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,GAAG,CAAC;AACT,UAAE,GAAG,GAAG,CAAC;AAET,UAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AACZ,UAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AACZ,UAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AACZ,UAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAAA,MACd;AAEA,eAAS,MAAM,GAAG,GAAG,GAAG;AACtB,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACtB,mBAAS,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AAAA,QACxB;AAAA,MACF;AAEA,eAAS,KAAK,GAAG,GAAG;AAClB,YAAI,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG;AAClC,iBAAS,IAAI,EAAE,CAAC,CAAC;AACjB,UAAE,IAAI,EAAE,CAAC,GAAG,EAAE;AACd,UAAE,IAAI,EAAE,CAAC,GAAG,EAAE;AACd,kBAAU,GAAG,EAAE;AACf,UAAE,EAAE,KAAK,SAAS,EAAE,KAAK;AAAA,MAC3B;AAEA,eAAS,WAAW,GAAG,GAAG,GAAG;AAC3B,YAAI,GAAG;AACP,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,aAAK,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG;AACzB,cAAK,EAAG,IAAE,IAAG,CAAC,MAAM,IAAE,KAAM;AAC5B,gBAAM,GAAG,GAAG,CAAC;AACb,cAAI,GAAG,CAAC;AACR,cAAI,GAAG,CAAC;AACR,gBAAM,GAAG,GAAG,CAAC;AAAA,QACf;AAAA,MACF;AAEA,eAAS,WAAW,GAAG,GAAG;AACxB,YAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,iBAAS,EAAE,CAAC,GAAG,CAAC;AAChB,iBAAS,EAAE,CAAC,GAAG,CAAC;AAChB,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,UAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AACZ,mBAAW,GAAG,GAAG,CAAC;AAAA,MACpB;AAEA,eAAS,oBAAoB,IAAI,IAAI,QAAQ;AAC3C,YAAI,IAAI,IAAI,WAAW,EAAE;AACzB,YAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,YAAI;AAEJ,YAAI,CAAC,OAAQ,aAAY,IAAI,EAAE;AAC/B,oBAAY,GAAG,IAAI,EAAE;AACrB,UAAE,CAAC,KAAK;AACR,UAAE,EAAE,KAAK;AACT,UAAE,EAAE,KAAK;AAET,mBAAW,GAAG,CAAC;AACf,aAAK,IAAI,CAAC;AAEV,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,IAAE,EAAE,IAAI,GAAG,CAAC;AACxC,eAAO;AAAA,MACT;AAEA,UAAI,IAAI,IAAI,aAAa,CAAC,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAI,CAAC;AAE5K,eAAS,KAAK,GAAG,GAAG;AAClB,YAAI,OAAO,GAAG,GAAG;AACjB,aAAK,IAAI,IAAI,KAAK,IAAI,EAAE,GAAG;AACzB,kBAAQ;AACR,eAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG;AACvC,cAAE,CAAC,KAAK,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG;AAC1C,oBAAQ,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,GAAG;AACrC,cAAE,CAAC,KAAK,QAAQ;AAAA,UAClB;AACA,YAAE,CAAC,KAAK;AACR,YAAE,CAAC,IAAI;AAAA,QACT;AACA,gBAAQ;AACR,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,YAAE,CAAC,KAAK,SAAS,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;AAClC,kBAAQ,EAAE,CAAC,KAAK;AAChB,YAAE,CAAC,KAAK;AAAA,QACV;AACA,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;AAC5C,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,YAAE,IAAE,CAAC,KAAK,EAAE,CAAC,KAAK;AAClB,YAAE,CAAC,IAAI,EAAE,CAAC,IAAI;AAAA,QAChB;AAAA,MACF;AAEA,eAAS,OAAO,GAAG;AACjB,YAAI,IAAI,IAAI,aAAa,EAAE,GAAG;AAC9B,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,CAAC,IAAI,EAAE,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,CAAC,IAAI;AAChC,aAAK,GAAG,CAAC;AAAA,MACX;AAGA,eAAS,YAAY,IAAI,GAAG,GAAG,IAAI;AACjC,YAAI,IAAI,IAAI,WAAW,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE;AACzE,YAAI,GAAG,GAAG,IAAI,IAAI,aAAa,EAAE;AACjC,YAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/B,oBAAY,GAAG,IAAI,EAAE;AACrB,UAAE,CAAC,KAAK;AACR,UAAE,EAAE,KAAK;AACT,UAAE,EAAE,KAAK;AAET,YAAI,QAAQ,IAAI;AAChB,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,IAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAE9C,oBAAY,GAAG,GAAG,SAAS,EAAE,GAAG,IAAE,EAAE;AACpC,eAAO,CAAC;AACR,mBAAW,GAAG,CAAC;AACf,aAAK,IAAI,CAAC;AAEV,aAAK,IAAI,IAAI,IAAI,IAAI,IAAK,IAAG,CAAC,IAAI,GAAG,CAAC;AACtC,oBAAY,GAAG,IAAI,IAAI,EAAE;AACzB,eAAO,CAAC;AAER,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,CAAC,IAAI;AAChC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,CAAC,IAAI,EAAE,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,eAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AACvB,cAAE,IAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,UACtB;AAAA,QACF;AAEA,aAAK,GAAG,SAAS,EAAE,GAAG,CAAC;AACvB,eAAO;AAAA,MACT;AAEA,eAAS,UAAU,GAAG,GAAG;AACvB,YAAI,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAC/B,MAAM,GAAG,GAAG,OAAO,GAAG,GAAG,OAAO,GAAG,GACnC,OAAO,GAAG;AAEd,iBAAS,EAAE,CAAC,GAAG,GAAG;AAClB,oBAAY,EAAE,CAAC,GAAG,CAAC;AACnB,UAAE,KAAK,EAAE,CAAC,CAAC;AACX,UAAE,KAAK,KAAK,CAAC;AACb,UAAE,KAAK,KAAK,EAAE,CAAC,CAAC;AAChB,UAAE,KAAK,EAAE,CAAC,GAAG,GAAG;AAEhB,UAAE,MAAM,GAAG;AACX,UAAE,MAAM,IAAI;AACZ,UAAE,MAAM,MAAM,IAAI;AAClB,UAAE,GAAG,MAAM,GAAG;AACd,UAAE,GAAG,GAAG,GAAG;AAEX,gBAAQ,GAAG,CAAC;AACZ,UAAE,GAAG,GAAG,GAAG;AACX,UAAE,GAAG,GAAG,GAAG;AACX,UAAE,GAAG,GAAG,GAAG;AACX,UAAE,EAAE,CAAC,GAAG,GAAG,GAAG;AAEd,UAAE,KAAK,EAAE,CAAC,CAAC;AACX,UAAE,KAAK,KAAK,GAAG;AACf,YAAI,SAAS,KAAK,GAAG,EAAG,GAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AAEvC,UAAE,KAAK,EAAE,CAAC,CAAC;AACX,UAAE,KAAK,KAAK,GAAG;AACf,YAAI,SAAS,KAAK,GAAG,EAAG,QAAO;AAE/B,YAAI,SAAS,EAAE,CAAC,CAAC,MAAO,EAAE,EAAE,KAAG,EAAI,GAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AAEpD,UAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClB,eAAO;AAAA,MACT;AAEA,eAAS,iBAAiB,GAAG,IAAI,GAAG,IAAI;AACtC,YAAI;AACJ,YAAI,IAAI,IAAI,WAAW,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE;AACjD,YAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/B,YAAI,IAAI,GAAI,QAAO;AAEnB,YAAI,UAAU,GAAG,EAAE,EAAG,QAAO;AAE7B,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI,GAAG,CAAC;AACnC,aAAK,IAAI,GAAG,IAAI,IAAI,IAAK,GAAE,IAAE,EAAE,IAAI,GAAG,CAAC;AACvC,oBAAY,GAAG,GAAG,CAAC;AACnB,eAAO,CAAC;AACR,mBAAW,GAAG,GAAG,CAAC;AAElB,mBAAW,GAAG,GAAG,SAAS,EAAE,CAAC;AAC7B,YAAI,GAAG,CAAC;AACR,aAAK,GAAG,CAAC;AAET,aAAK;AACL,YAAI,iBAAiB,IAAI,GAAG,GAAG,CAAC,GAAG;AACjC,eAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI;AAC/B,iBAAO;AAAA,QACT;AAEA,aAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI,GAAG,IAAI,EAAE;AACxC,eAAO;AAAA,MACT;AAEA,UAAI,4BAA4B,IAC5B,8BAA8B,IAC9B,6BAA6B,IAC7B,gCAAgC,IAChC,0BAA0B,IAC1B,gCAAgC,IAChC,4BAA4B,IAC5B,4BAA4B,IAC5B,2BAA2B,IAC3B,wBAAwB,6BACxB,uBAAuB,4BACvB,0BAA0B,+BAC1B,oBAAoB,IACpB,6BAA6B,IAC7B,6BAA6B,IAC7B,wBAAwB,IACxB,oBAAoB;AAExB,MAAAD,MAAK,WAAW;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAIA,eAAS,aAAa,GAAG,GAAG;AAC1B,YAAI,EAAE,WAAW,0BAA2B,OAAM,IAAI,MAAM,cAAc;AAC1E,YAAI,EAAE,WAAW,4BAA6B,OAAM,IAAI,MAAM,gBAAgB;AAAA,MAChF;AAEA,eAAS,gBAAgB,IAAI,IAAI;AAC/B,YAAI,GAAG,WAAW,0BAA2B,OAAM,IAAI,MAAM,qBAAqB;AAClF,YAAI,GAAG,WAAW,0BAA2B,OAAM,IAAI,MAAM,qBAAqB;AAAA,MACpF;AAEA,eAAS,kBAAkB;AACzB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAI,EAAE,UAAU,CAAC,aAAa;AAC5B,kBAAM,IAAI,UAAU,iCAAiC;AAAA,QACzD;AAAA,MACF;AAEA,eAAS,QAAQ,KAAK;AACpB,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,KAAI,CAAC,IAAI;AAAA,MAChD;AAEA,MAAAA,MAAK,cAAc,SAAS,GAAG;AAC7B,YAAI,IAAI,IAAI,WAAW,CAAC;AACxB,oBAAY,GAAG,CAAC;AAChB,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,YAAY,SAAS,KAAK,OAAO,KAAK;AACzC,wBAAgB,KAAK,OAAO,GAAG;AAC/B,qBAAa,KAAK,KAAK;AACvB,YAAI,IAAI,IAAI,WAAW,6BAA6B,IAAI,MAAM;AAC9D,YAAI,IAAI,IAAI,WAAW,EAAE,MAAM;AAC/B,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,GAAE,IAAE,0BAA0B,IAAI,IAAI,CAAC;AAC5E,yBAAiB,GAAG,GAAG,EAAE,QAAQ,OAAO,GAAG;AAC3C,eAAO,EAAE,SAAS,6BAA6B;AAAA,MACjD;AAEA,MAAAA,MAAK,UAAU,OAAO,SAAS,KAAK,OAAO,KAAK;AAC9C,wBAAgB,KAAK,OAAO,GAAG;AAC/B,qBAAa,KAAK,KAAK;AACvB,YAAI,IAAI,IAAI,WAAW,gCAAgC,IAAI,MAAM;AACjE,YAAI,IAAI,IAAI,WAAW,EAAE,MAAM;AAC/B,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,GAAE,IAAE,6BAA6B,IAAI,IAAI,CAAC;AAC/E,YAAI,EAAE,SAAS,GAAI,QAAO;AAC1B,YAAI,sBAAsB,GAAG,GAAG,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAG,QAAO;AACpE,eAAO,EAAE,SAAS,0BAA0B;AAAA,MAC9C;AAEA,MAAAA,MAAK,UAAU,YAAY;AAC3B,MAAAA,MAAK,UAAU,cAAc;AAC7B,MAAAA,MAAK,UAAU,iBAAiB;AAEhC,MAAAA,MAAK,aAAa,SAAS,GAAG,GAAG;AAC/B,wBAAgB,GAAG,CAAC;AACpB,YAAI,EAAE,WAAW,8BAA+B,OAAM,IAAI,MAAM,YAAY;AAC5E,YAAI,EAAE,WAAW,wBAAyB,OAAM,IAAI,MAAM,YAAY;AACtE,YAAI,IAAI,IAAI,WAAW,uBAAuB;AAC9C,0BAAkB,GAAG,GAAG,CAAC;AACzB,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,WAAW,OAAO,SAAS,GAAG;AACjC,wBAAgB,CAAC;AACjB,YAAI,EAAE,WAAW,8BAA+B,OAAM,IAAI,MAAM,YAAY;AAC5E,YAAI,IAAI,IAAI,WAAW,uBAAuB;AAC9C,+BAAuB,GAAG,CAAC;AAC3B,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,WAAW,eAAe;AAC/B,MAAAA,MAAK,WAAW,qBAAqB;AAErC,MAAAA,MAAK,MAAM,SAAS,KAAK,OAAO,WAAW,WAAW;AACpD,YAAI,IAAIA,MAAK,IAAI,OAAO,WAAW,SAAS;AAC5C,eAAOA,MAAK,UAAU,KAAK,OAAO,CAAC;AAAA,MACrC;AAEA,MAAAA,MAAK,IAAI,SAAS,SAAS,WAAW,WAAW;AAC/C,wBAAgB,WAAW,SAAS;AACpC,wBAAgB,WAAW,SAAS;AACpC,YAAI,IAAI,IAAI,WAAW,wBAAwB;AAC/C,4BAAoB,GAAG,WAAW,SAAS;AAC3C,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,IAAI,QAAQA,MAAK;AAEtB,MAAAA,MAAK,IAAI,OAAO,SAAS,KAAK,OAAO,WAAW,WAAW;AACzD,YAAI,IAAIA,MAAK,IAAI,OAAO,WAAW,SAAS;AAC5C,eAAOA,MAAK,UAAU,KAAK,KAAK,OAAO,CAAC;AAAA,MAC1C;AAEA,MAAAA,MAAK,IAAI,KAAK,QAAQA,MAAK,UAAU;AAErC,MAAAA,MAAK,IAAI,UAAU,WAAW;AAC5B,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,2BAAmB,IAAI,EAAE;AACzB,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,MAAAA,MAAK,IAAI,QAAQ,gBAAgB,SAAS,WAAW;AACnD,wBAAgB,SAAS;AACzB,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,yBAAyB;AACjD,+BAAuB,IAAI,SAAS;AACpC,eAAO,EAAC,WAAW,IAAI,WAAW,IAAI,WAAW,SAAS,EAAC;AAAA,MAC7D;AAEA,MAAAA,MAAK,IAAI,kBAAkB;AAC3B,MAAAA,MAAK,IAAI,kBAAkB;AAC3B,MAAAA,MAAK,IAAI,kBAAkB;AAC3B,MAAAA,MAAK,IAAI,cAAc;AACvB,MAAAA,MAAK,IAAI,iBAAiBA,MAAK,UAAU;AAEzC,MAAAA,MAAK,OAAO,SAAS,KAAK,WAAW;AACnC,wBAAgB,KAAK,SAAS;AAC9B,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,YAAY,IAAI,WAAW,oBAAkB,IAAI,MAAM;AAC3D,oBAAY,WAAW,KAAK,IAAI,QAAQ,SAAS;AACjD,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,KAAK,OAAO,SAAS,WAAW,WAAW;AAC9C,wBAAgB,WAAW,SAAS;AACpC,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,MAAM,IAAI,WAAW,UAAU,MAAM;AACzC,YAAI,OAAO,iBAAiB,KAAK,WAAW,UAAU,QAAQ,SAAS;AACvE,YAAI,OAAO,EAAG,QAAO;AACrB,YAAI,IAAI,IAAI,WAAW,IAAI;AAC3B,iBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAK,GAAE,CAAC,IAAI,IAAI,CAAC;AAC/C,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,KAAK,WAAW,SAAS,KAAK,WAAW;AAC5C,YAAI,YAAYA,MAAK,KAAK,KAAK,SAAS;AACxC,YAAI,MAAM,IAAI,WAAW,iBAAiB;AAC1C,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,KAAI,CAAC,IAAI,UAAU,CAAC;AACzD,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,KAAK,SAAS,SAAS,SAAS,KAAK,KAAK,WAAW;AACxD,wBAAgB,KAAK,KAAK,SAAS;AACnC,YAAI,IAAI,WAAW;AACjB,gBAAM,IAAI,MAAM,oBAAoB;AACtC,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACtD,YAAI,IAAI,IAAI,WAAW,oBAAoB,IAAI,MAAM;AACrD,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,mBAAmB,IAAK,IAAG,CAAC,IAAI,IAAI,CAAC;AACrD,aAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAK,IAAG,IAAE,iBAAiB,IAAI,IAAI,CAAC;AAChE,eAAQ,iBAAiB,GAAG,IAAI,GAAG,QAAQ,SAAS,KAAK;AAAA,MAC3D;AAEA,MAAAA,MAAK,KAAK,UAAU,WAAW;AAC7B,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,4BAAoB,IAAI,EAAE;AAC1B,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,MAAAA,MAAK,KAAK,QAAQ,gBAAgB,SAAS,WAAW;AACpD,wBAAgB,SAAS;AACzB,YAAI,UAAU,WAAW;AACvB,gBAAM,IAAI,MAAM,qBAAqB;AACvC,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,iBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAK,IAAG,CAAC,IAAI,UAAU,KAAG,CAAC;AAC1D,eAAO,EAAC,WAAW,IAAI,WAAW,IAAI,WAAW,SAAS,EAAC;AAAA,MAC7D;AAEA,MAAAA,MAAK,KAAK,QAAQ,WAAW,SAAS,MAAM;AAC1C,wBAAgB,IAAI;AACpB,YAAI,KAAK,WAAW;AAClB,gBAAM,IAAI,MAAM,eAAe;AACjC,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,YAAI,KAAK,IAAI,WAAW,0BAA0B;AAClD,iBAAS,IAAI,GAAG,IAAI,IAAI,IAAK,IAAG,CAAC,IAAI,KAAK,CAAC;AAC3C,4BAAoB,IAAI,IAAI,IAAI;AAChC,eAAO,EAAC,WAAW,IAAI,WAAW,GAAE;AAAA,MACtC;AAEA,MAAAA,MAAK,KAAK,kBAAkB;AAC5B,MAAAA,MAAK,KAAK,kBAAkB;AAC5B,MAAAA,MAAK,KAAK,aAAa;AACvB,MAAAA,MAAK,KAAK,kBAAkB;AAE5B,MAAAA,MAAK,OAAO,SAAS,KAAK;AACxB,wBAAgB,GAAG;AACnB,YAAI,IAAI,IAAI,WAAW,iBAAiB;AACxC,oBAAY,GAAG,KAAK,IAAI,MAAM;AAC9B,eAAO;AAAA,MACT;AAEA,MAAAA,MAAK,KAAK,aAAa;AAEvB,MAAAA,MAAK,SAAS,SAAS,GAAG,GAAG;AAC3B,wBAAgB,GAAG,CAAC;AAEpB,YAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,QAAO;AAC7C,YAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,eAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,MAAM,MAAM,IAAK,OAAO;AAAA,MACnD;AAEA,MAAAA,MAAK,UAAU,SAAS,IAAI;AAC1B,sBAAc;AAAA,MAChB;AAEA,OAAC,WAAW;AAGV,YAAIE,UAAS,OAAO,SAAS,cAAe,KAAK,UAAU,KAAK,WAAY;AAC5E,YAAIA,WAAUA,QAAO,iBAAiB;AAEpC,cAAI,QAAQ;AACZ,UAAAF,MAAK,QAAQ,SAAS,GAAG,GAAG;AAC1B,gBAAI,GAAG,IAAI,IAAI,WAAW,CAAC;AAC3B,iBAAK,IAAI,GAAG,IAAI,GAAG,KAAK,OAAO;AAC7B,cAAAE,QAAO,gBAAgB,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,YAClE;AACA,iBAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI,EAAE,CAAC;AAClC,oBAAQ,CAAC;AAAA,UACX,CAAC;AAAA,QACH,WAAW,OAAO,cAAY,aAAa;AAEzC,UAAAA,UAAS,UAAQ,QAAQ;AACzB,cAAIA,WAAUA,QAAO,aAAa;AAChC,YAAAF,MAAK,QAAQ,SAAS,GAAG,GAAG;AAC1B,kBAAI,GAAG,IAAIE,QAAO,YAAY,CAAC;AAC/B,mBAAK,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,CAAC,IAAI,EAAE,CAAC;AAClC,sBAAQ,CAAC;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,GAAG;AAAA,IAEH,GAAG,OAAO,WAAW,eAAe,OAAO,UAAU,OAAO,UAAW,KAAK,OAAO,KAAK,QAAQ,CAAC,CAAE;AAAA;AAAA;;;ACr1EnG,SAAS,qBAAqB;AAC9B,SAAS,eAAe;;;ACFxB,SAAS,aAAa;AACtB,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEtB,SAAS,WAAW,KAAqB;AACvC,SAAO,IACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAC1B;AAEA,SAAS,uBAA+B;AACtC,SAAc,mBAAY,EAAE,EAAE,SAAS,WAAW;AACpD;AAEA,SAAS,sBAAsB,UAA0B;AACvD,SAAc,kBAAW,QAAQ,EAAE,OAAO,QAAQ,EAAE,OAAO,WAAW;AACxE;AAEA,IAAM,aAAkB,UAAQ,WAAQ,GAAG,WAAW,SAAS;AAC/D,IAAM,cAAmB,UAAK,YAAY,aAAa;AACvD,IAAM,mBAAwB,UAAK,YAAY,kBAAkB;AACjE,IAAM,YAAiB,UAAK,YAAY,mBAAmB;AAC3D,IAAM,gBAAgB;AACtB,IAAM,eAAe,oBAAoB,aAAa;AAG/C,IAAM,iBAAyB;AAAA,EACpC,SAAS;AAAA,EACT,UAAU;AACZ;AAeA,SAAS,kBAAkB;AACzB,MAAI,CAAI,cAAW,UAAU,GAAG;AAC9B,IAAG,aAAU,YAAY,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AAAA,EAC3D;AACF;AAGA,SAAS,oBACP,UACA,MACA,MACA;AACA,QAAM,MAAM,WAAW,QAAQ,QAAQ,GAAG;AAC1C,EAAG,iBAAc,KAAK,MAAM,EAAE,UAAU,SAAS,KAAK,CAAC;AACvD,EAAG,cAAW,KAAK,QAAQ;AAC7B;AAEA,IAAM,gBAAgB;AAGtB,SAAS,cAAmC;AAC1C,kBAAgB;AAChB,MAAI;AAEF,UAAM,KAAQ,YAAS,WAAc,aAAU,UAAa,aAAU,SAAY,aAAU,UAAU,GAAK;AAC3G,IAAG,aAAU,IAAI,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACrE,IAAG,aAAU,EAAE;AAAA,EACjB,SAAS,KAAc;AACrB,QAAK,IAA8B,SAAS,SAAU,OAAM;AAE5D,QAAI;AACF,YAAM,WAAW,KAAK,MAAS,gBAAa,WAAW,OAAO,CAAC;AAC/D,UAAI,KAAK,IAAI,IAAI,SAAS,KAAK,eAAe;AAC5C,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,QAAI;AAAE,MAAG,cAAW,SAAS;AAAA,IAAG,QAAQ;AAAA,IAAwB;AAChE,QAAI;AACF,YAAM,KAAQ,YAAS,WAAc,aAAU,UAAa,aAAU,SAAY,aAAU,UAAU,GAAK;AAC3G,MAAG,aAAU,IAAI,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACrE,MAAG,aAAU,EAAE;AAAA,IACjB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,MAAM;AACX,QAAI;AAAE,MAAG,cAAW,SAAS;AAAA,IAAG,QAAQ;AAAA,IAAwB;AAAA,EAClE;AACF;AAGO,SAAS,YAA2B;AACzC,MAAI,CAAI,cAAW,WAAW,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,OAAO,KAAK,MAAS,gBAAa,aAAa,OAAO,CAAC;AAC7D,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,UAAU;AACnC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,qBAA6B;AAC3C,QAAM,WAAW,UAAU;AAC3B,MAAI,SAAU,QAAO;AAErB,aAAW,cAAc;AACzB,SAAO;AACT;AAEO,SAAS,iBAAqC;AACnD,MAAI,CAAI,cAAW,gBAAgB,GAAG;AACpC,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,OAAO,KAAK,MAAS,gBAAa,kBAAkB,OAAO,CAAC;AAClE,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,SAAS;AACtC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,OAAoB;AAClD,kBAAgB;AAChB,sBAAoB,kBAAkB,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,GAAK;AAC7E;AAEO,SAAS,WAAW,QAAgB;AACzC,kBAAgB;AAChB,sBAAoB,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,GAAK;AACzE;AAEO,SAAS,mBAAmB;AACjC,MAAO,cAAW,gBAAgB,GAAG;AACnC,IAAG,cAAW,gBAAgB;AAAA,EAChC;AACF;AAEA,SAAS,YAAY,KAAa;AAChC,QAAM,WAAW,QAAQ;AACzB,QAAM,MACJ,aAAa,WACT,SACA,aAAa,UACX,QACA;AACR,QAAM,OACJ,aAAa,UAAU,CAAC,MAAM,SAAS,IAAI,GAAG,IAAI,CAAC,GAAG;AACxD,QAAM,KAAK,MAAM,EAAE,OAAO,UAAU,UAAU,KAAK,CAAC,EAAE,MAAM;AAC9D;AAEA,eAAsB,MAAM,QAAsC;AAChE,QAAM,QAAe,kBAAW;AAChC,QAAM,UAAU,CAAC,OAAO;AAExB,MAAI;AACJ,MAAI,SAAS;AACX,mBAAe,qBAAqB;AAAA,EACtC;AAEA,MAAI;AACJ,QAAM,cAAc,IAAI,QAAgB,CAAC,YAAY;AACnD,sBAAkB;AAAA,EACpB,CAAC;AAED,QAAM,UAAU,oBAAI,IAA0B;AAE9C,QAAM,SAAc,kBAAa,CAAC,KAAK,QAAQ;AAC7C,UAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,oBAAoB,aAAa,EAAE;AACvE,QAAI,IAAI,aAAa,aAAa;AAChC,YAAMC,QAAO,IAAI,aAAa,IAAI,MAAM;AACxC,YAAM,gBAAgB,IAAI,aAAa,IAAI,OAAO;AAClD,YAAM,QAAQ,IAAI,aAAa,IAAI,OAAO;AAC1C,YAAM,YAAY,IAAI,aAAa,IAAI,mBAAmB;AAE1D,UAAI,kBAAkB,OAAO;AAC3B,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC,WAAW,OAAO;AAChB,cAAM,YAAY,WAAW,KAAK;AAClC,cAAM,WAAW,WAAW,aAAa,eAAe;AACxD,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF,yXAAyX,SAAS,KAAK,QAAQ;AAAA,QACjZ;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC,WAAWA,OAAM;AAEf,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgBA,KAAI;AAAA,MACtB,OAAO;AACL,YAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,YAAI;AAAA,UACF;AAAA,QACF;AACA,wBAAgB,EAAE;AAClB,mBAAW,MAAM,OAAO,MAAM,GAAG,GAAI;AAAA,MACvC;AAAA,IACF,OAAO;AAEL,UAAI,UAAU,GAAG;AACjB,UAAI,IAAI;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,WAAO,GAAG,SAAS,CAAC,QAA+B;AACjD,UAAI,IAAI,SAAS,cAAc;AAC7B;AAAA,UACE,IAAI;AAAA,YACF,QAAQ,aAAa,wDAAwD,aAAa;AAAA,UAC5F;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO,GAAG;AAAA,MACZ;AAAA,IACF,CAAC;AAED,WAAO,GAAG,cAAc,CAAC,WAAW;AAClC,cAAQ,IAAI,MAAM;AAClB,aAAO,GAAG,SAAS,MAAM,QAAQ,OAAO,MAAM,CAAC;AAAA,IACjD,CAAC;AACD,WAAO,OAAO,eAAe,aAAa,MAAM,QAAQ,CAAC;AAAA,EAC3D,CAAC;AAED,UAAQ;AAAA,IACN,4CAA4C,aAAa;AAAA,EAC3D;AAEA,QAAM,kBAAkB,IAAI,gBAAgB;AAAA,IAC1C,WAAW,OAAO;AAAA,IAClB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACD,MAAI,WAAW,cAAc;AAC3B,oBAAgB,IAAI,kBAAkB,sBAAsB,YAAY,CAAC;AACzE,oBAAgB,IAAI,yBAAyB,MAAM;AAAA,EACrD;AAEA,QAAM,eAAe,GAAG,OAAO,OAAO,cAAc,gBAAgB,SAAS,CAAC;AAC9E,UAAQ,IAAI,sCAAsC;AAClD,UAAQ,IAAI,2DAA2D;AACvE,cAAY,YAAY;AAExB,QAAM,OAAO,MAAM;AACnB,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,QAAM,cAAsC;AAAA,IAC1C,YAAY;AAAA,IACZ;AAAA,IACA,WAAW,OAAO;AAAA,IAClB,cAAc;AAAA,EAChB;AACA,MAAI,OAAO,cAAc;AACvB,gBAAY,gBAAgB,OAAO;AAAA,EACrC;AACA,MAAI,WAAW,cAAc;AAC3B,gBAAY,gBAAgB;AAAA,EAC9B;AAEA,QAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO,OAAO,oBAAoB;AAAA,IACrE,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,oCAAoC;AAAA,IAC/D,MAAM,IAAI,gBAAgB,WAAW;AAAA,EACvC,CAAC;AAED,MAAI,CAAC,cAAc,IAAI;AACrB,UAAM,MAAO,MAAM,cAAc,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAIxD,UAAM,MAAM,IAAI,qBAAqB,IAAI,SAAS,cAAc;AAChE,UAAM,IAAI,MAAM,0BAA0B,GAAG,EAAE;AAAA,EACjD;AAEA,QAAM,SAAS,MAAM,cAAc,KAAK;AACxC,QAAM,YAAY,KAAK,IAAI,KAAK,OAAO,cAAc,QAAQ;AAE7D,QAAM,QAAqB;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,cAAc,OAAO,iBAAiB;AAAA,IACtC;AAAA,IACA,SAAS,OAAO;AAAA,EAClB;AAEA,kBAAgB,KAAK;AAGrB,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AAExD,SAAO,MAAM;AACb,aAAW,UAAU,SAAS;AAC5B,QAAI,aAAa,UAAU,OAAQ,OAAmC,YAAY,YAAY;AAC5F,MAAC,OAAmC,QAAQ;AAAA,IAC9C;AAAA,EACF;AACA,UAAQ,MAAM;AAEd,SAAO;AACT;AAEA,eAAsB,mBACpB,OACA,QACsB;AACtB,MAAI,CAAC,MAAM,cAAc;AACvB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAGA,QAAM,SAAS,YAAY;AAC3B,MAAI,CAAC,QAAQ;AAEX,UAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAI,CAAC;AAC5C,UAAM,QAAQ,eAAe;AAC7B,QAAI,SAAS,MAAM,YAAY,KAAK,IAAI,GAAG;AACzC,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,MAAI;AAEF,UAAM,SAAS,eAAe;AAC9B,QAAI,UAAU,OAAO,YAAY,KAAK,IAAI,IAAI,KAAQ;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,gBAAwC;AAAA,MAC5C,YAAY;AAAA,MACZ,eAAe,MAAM;AAAA,MACrB,WAAW,OAAO;AAAA,IACpB;AACA,QAAI,OAAO,cAAc;AACvB,oBAAc,gBAAgB,OAAO;AAAA,IACvC;AAEA,UAAM,gBAAgB,MAAM,MAAM,GAAG,OAAO,OAAO,oBAAoB;AAAA,MACrE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,oCAAoC;AAAA,MAC/D,MAAM,IAAI,gBAAgB,aAAa;AAAA,IACzC,CAAC;AAED,QAAI,CAAC,cAAc,IAAI;AACrB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,UAAM,SAAS,MAAM,cAAc,KAAK;AACxC,UAAM,YAAY,KAAK,IAAI,KAAK,OAAO,cAAc,QAAQ;AAE7D,UAAM,WAAwB;AAAA,MAC5B,aAAa,OAAO;AAAA,MACpB,cAAc,OAAO,iBAAiB,MAAM;AAAA,MAC5C;AAAA,MACA,SAAS,OAAO;AAAA,IAClB;AAEA,oBAAgB,QAAQ;AACxB,WAAO;AAAA,EACT,UAAE;AACA,WAAO;AAAA,EACT;AACF;AAEA,IAAM,yBAAyB,IAAI,KAAK;AAExC,eAAsB,gBAAwC;AAC5D,QAAM,QAAQ,eAAe;AAC7B,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,SAAS,UAAU;AACzB,MAAI,CAAC,UAAU,OAAO,YAAY,MAAM,QAAS,QAAO;AAExD,MAAI,KAAK,IAAI,KAAK,MAAM,YAAY,wBAAwB;AAC1D,QAAI,MAAM,cAAc;AACtB,UAAI;AACF,cAAM,WAAW,MAAM,mBAAmB,OAAO,MAAM;AACvD,eAAO,SAAS;AAAA,MAClB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,MAAM;AACf;;;ACtZA,eAAsB,SACpB,SACA,UACA,QACkB;AAClB,QAAM,QAAQ,MAAM,cAAc;AAElC,QAAM,UAAkC;AAAA,IACtC,gBAAgB;AAAA,EAClB;AACA,MAAI,OAAO;AACT,YAAQ,eAAe,IAAI,UAAU,KAAK;AAAA,EAC5C;AAEA,MAAI,MAAM,MAAM,MAAM,GAAG,OAAO,cAAc,QAAQ,IAAI;AAAA,IACxD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,MAAM;AAAA,EAC7B,CAAC;AAGD,MAAI,IAAI,WAAW,OAAO,OAAO;AAC/B,UAAM,QAAQ,eAAe;AAC7B,UAAM,SAAS,UAAU;AACzB,QAAI,OAAO,gBAAgB,UAAU,OAAO,YAAY,MAAM,SAAS;AACrE,UAAI;AACF,cAAM,WAAW,MAAM,mBAAmB,OAAO,MAAM;AACvD,cAAM,MAAM,MAAM,GAAG,OAAO,cAAc,QAAQ,IAAI;AAAA,UACpD,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,eAAe,UAAU,SAAS,WAAW;AAAA,UAC/C;AAAA,UACA,MAAM,KAAK,UAAU,MAAM;AAAA,QAC7B,CAAC;AAAA,MACH,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,IAAI,KAAK;AAE5B,MAAI,IAAI,WAAW,KAAK;AACtB,UAAM,IAAI,MAAM,4EAA4E;AAAA,EAC9F;AAEA,MAAI,IAAI,SAAS,OAAO,IAAI,UAAU,KAAK;AACzC,UAAM,MAAM;AACZ,UAAM,IAAI,MAAM,KAAK,SAAS,qBAAqB,IAAI,MAAM,GAAG;AAAA,EAClE;AAEA,SAAO;AACT;;;AClEA,IAAM,WACJ,CAAC,QAAQ,IAAI,YAAY,QAAQ,OAAO,UAAU;AAEpD,SAAS,KAAK,MAAc;AAC1B,SAAO,CAAC,SAAkB,WAAW,GAAG,IAAI,GAAG,IAAI,YAAY;AACjE;AAEO,IAAM,QAAQ;AAAA,EACnB,MAAM,KAAK,SAAS;AAAA,EACpB,KAAK,KAAK,SAAS;AAAA,EACnB,OAAO,KAAK,UAAU;AAAA,EACtB,QAAQ,KAAK,UAAU;AAAA,EACvB,MAAM,KAAK,UAAU;AAAA,EACrB,KAAK,KAAK,UAAU;AACtB;AAEA,IAAM,gBAAgB;AAEtB,SAAS,SAAS,KAAa,KAAqB;AAClD,SAAO,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,WAAM;AAC1D;AAEA,SAAS,iBAAiB,MAAyC;AACjE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC;AAChC,QAAM,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM;AAEvC,QAAM,aAAa,KAAK;AAAA,IAAI,CAAC,QAC3B,KAAK,IAAI,CAAC,GAAG,MAAM;AACjB,YAAM,MAAM,SAAS,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,aAAa;AACxD,aAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM;AAC1C,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,WAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,aAAa;AAAA,EAC/C;AAEA,QAAM,SAAS,KAAK,IAAI,CAAC,GAAG,MAAM,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AAC5E,QAAM,YAAY,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,SAAI,OAAO,CAAC,CAAC,EAAE,KAAK,cAAI,CAAC;AACvE,QAAM,OAAO,WACV,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAClE,KAAK,IAAI;AAEZ,SAAO,GAAG,MAAM;AAAA,EAAK,SAAS;AAAA,EAAK,IAAI;AACzC;AAEA,SAAS,kBAAkB,KAAsC;AAC/D,QAAM,UAAU,OAAO,QAAQ,GAAG;AAClC,QAAM,SAAS,KAAK;AAAA,IAClB;AAAA,IACA,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;AAAA,EAC5C;AAEA,SAAO,QACJ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,CAAC,EAAE,EACrE,KAAK,IAAI;AACd;AAEO,SAAS,YAAY,MAAuB;AACjD,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,QAAI,KAAK,WAAW,EAAG,QAAO,MAAM,IAAI,SAAS;AACjD,QAAI,OAAO,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,MAAM;AACnD,aAAO,iBAAiB,IAAiC;AAAA,IAC3D;AACA,WAAO,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI;AAAA,EACnC;AAEA,MAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,WAAO,kBAAkB,IAA+B;AAAA,EAC1D;AAEA,SAAO,OAAO,IAAI;AACpB;AAIO,SAAS,aAAa,QAAiB,QAA8B;AAC1E,MAAI,WAAW,WAAW;AACxB,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAEA,MAAI,WAAW,SAAS;AACtB,UAAM,QACJ,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,SACL,OAAmC,OACpC;AACN,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;AChGA,SAAS,gBAAAC,eAAc,iBAAAC,gBAAe,aAAAC,kBAAiB;AACvD,SAAS,QAAAC,aAAY;AACrB,SAAS,WAAAC,gBAAe;AAGxB,IAAM,YAAYC,MAAKC,SAAQ,GAAG,WAAW,SAAS;AACtD,IAAM,aAAaD,MAAK,WAAW,mBAAmB;AACtD,IAAM,aAAa,KAAK,KAAK,KAAK;AAClC,IAAM,mBAAmB;AAOzB,SAAS,YAA8B;AACrC,MAAI;AACF,UAAM,MAAME,cAAa,YAAY,OAAO;AAC5C,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,MAAuB;AACzC,MAAI;AACF,IAAAC,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,IAAAC,eAAc,YAAY,KAAK,UAAU,IAAI,CAAC;AAAA,EAChD,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,QAAQ,QAAgB,SAA0B;AACzD,QAAM,IAAI,OAAO,MAAM,GAAG,EAAE,IAAI,MAAM;AACtC,QAAM,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AACtC,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,aAAa,SAAiB,QAAwB;AAC7D,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,qBAAqB,OAAO,WAAM,MAAM,EAAE;AAAA,IACvD,MAAM,IAAI,wCAAwC;AAAA,IAClD;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,kBACd,gBACqB;AACrB,MAAI,SAAwB;AAE5B,QAAM,QAAQ,UAAU;AAExB,MAAI,SAAS,KAAK,IAAI,IAAI,MAAM,YAAY,YAAY;AACtD,QAAI,QAAQ,MAAM,QAAQ,cAAc,GAAG;AACzC,eAAS,aAAa,gBAAgB,MAAM,MAAM;AAAA,IACpD;AACA,WAAO,MAAM;AAAA,EACf;AAGA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,gBAAgB;AAErE,QAAM,oDAAoD;AAAA,IACxD,QAAQ,WAAW;AAAA,EACrB,CAAC,EACE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EACxB,KAAK,CAAC,SAAkB;AACvB,UAAM,SAAU,KAA8B;AAC9C,QAAI,QAAQ;AACV,iBAAW,EAAE,QAAQ,WAAW,KAAK,IAAI,EAAE,CAAC;AAC5C,UAAI,QAAQ,QAAQ,cAAc,GAAG;AACnC,iBAAS,aAAa,gBAAgB,MAAM;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC,EACA,MAAM,MAAM;AAAA,EAEb,CAAC,EACA,QAAQ,MAAM,aAAa,OAAO,CAAC;AAEtC,SAAO,MAAM;AACf;;;ACzFA;AAAA,EACE;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,WAAa;AAAA,UACX,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,OAAS;AAAA,cACP,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,YAAc;AAAA,gBACZ,UAAY;AAAA,kBACV,MAAQ;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,QAAU;AAAA,kBACR,OAAS;AAAA,oBACP;AAAA,sBACE,MAAQ;AAAA,sBACR,SAAW;AAAA,oBACb;AAAA,oBACA;AAAA,sBACE,MAAQ;AAAA,oBACV;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV;AAAA,gBACA;AAAA,cACF;AAAA,cACA,sBAAwB;AAAA,cACxB,aAAe;AAAA,YACjB;AAAA,YACA,IAAM;AAAA,cACJ,MAAQ;AAAA,cACR,YAAc;AAAA,gBACZ,OAAS;AAAA,kBACP,MAAQ;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,UAAY;AAAA,kBACV,MAAQ;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,QAAU;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,QAAU;AAAA,kBACR,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,sBAAwB;AAAA,cACxB,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,0BAA4B;AAAA,UAC1B,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,sBAAwB;AAAA,UACtB,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,oBAAsB;AAAA,UACpB,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,wBAA0B;AAAA,UACxB,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,0BAA4B;AAAA,UAC1B,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,aAAe;AAAA,cACb,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,wBAA0B;AAAA,UACxB,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,aAAe;AAAA,cACb,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,SAAW;AAAA,cACT,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,qBAAuB;AAAA,UACrB,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,6CAA6C;AAAA,UAC3C,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,eAAiB;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,mDAAmD;AAAA,UACjD,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,SAAW;AAAA,cACT,MAAQ;AAAA,cACR,YAAc;AAAA,gBACZ,QAAU;AAAA,kBACR,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,MAAQ;AAAA,kBACN,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,OAAS;AAAA,kBACP,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,SAAW;AAAA,kBACT,MAAQ;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,YAAc;AAAA,kBACZ,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,sBAAwB;AAAA,cACxB,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,aAAe;AAAA,cACb,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,iBAAmB;AAAA,cACjB,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,cAAgB;AAAA,cACd,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,YAAc;AAAA,cACZ,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,2CAA2C;AAAA,UACzC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,+CAA+C;AAAA,UAC7C,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,UAAY;AAAA,cACV,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,mDAAmD;AAAA,UACjD,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,eAAiB;AAAA,cACf,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,eAAiB;AAAA,cACf,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,SAAW;AAAA,cACT,MAAQ;AAAA,cACR,YAAc;AAAA,gBACZ,QAAU;AAAA,kBACR,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,MAAQ;AAAA,kBACN,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,OAAS;AAAA,kBACP,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,gBACA,SAAW;AAAA,kBACT,MAAQ;AAAA,kBACR,MAAQ;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA,aAAe;AAAA,gBACjB;AAAA,gBACA,YAAc;AAAA,kBACZ,MAAQ;AAAA,kBACR,aAAe;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,sBAAwB;AAAA,cACxB,aAAe;AAAA,YACjB;AAAA,YACA,OAAS;AAAA,cACP,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,aAAe;AAAA,cACb,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,iBAAmB;AAAA,cACjB,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,cAAgB;AAAA,cACd,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,YAAc;AAAA,cACZ,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,gCAAgC;AAAA,UAC9B,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,gCAAgC;AAAA,UAC9B,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,+CAA+C;AAAA,UAC7C,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,6CAA6C;AAAA,UAC3C,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,iDAAiD;AAAA,UAC/C,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,wCAAwC;AAAA,UACtC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,YAAc;AAAA,cACZ,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,wCAAwC;AAAA,UACtC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,0CAA0C;AAAA,UACxC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,SAAW;AAAA,cACX,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,sCAAsC;AAAA,UACpC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,0CAA0C;AAAA,UACxC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,uCAAuC;AAAA,UACrC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,YACA,YAAc;AAAA,cACZ,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,uCAAuC;AAAA,UACrC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,UAAY;AAAA,cACV,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,qCAAqC;AAAA,UACnC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,+CAA+C;AAAA,UAC7C,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,UAAY;AAAA,cACV,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,YACA,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,MAAQ;AAAA,cACN,MAAQ;AAAA,cACR,MAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,cACF;AAAA,cACA,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,iDAAiD;AAAA,UAC/C,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,UAAY;AAAA,cACV,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,yCAAyC;AAAA,UACvC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,UAAY;AAAA,cACV,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,kCAAkC;AAAA,UAChC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,wCAAwC;AAAA,UACtC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,sCAAsC;AAAA,UACpC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,+CAA+C;AAAA,UAC7C,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,0CAA0C;AAAA,UACxC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,qCAAqC;AAAA,UACnC,MAAQ;AAAA,UACR,YAAc,CAAC;AAAA,UACf,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,yCAAyC;AAAA,UACvC,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,SAAW;AAAA,cACT,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,YACA,WAAa;AAAA,cACX,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAQ;AAAA,IACR,aAAe;AAAA,IACf,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,aAAe;AAAA,QACb,4DAA4D;AAAA,UAC1D,MAAQ;AAAA,UACR,YAAc;AAAA,YACZ,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,aAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,UAAY;AAAA,YACV;AAAA,UACF;AAAA,UACA,sBAAwB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AACF;;;ACpwCA,SAAS,eAAe;AACxB,OAAO,UAAU;;;ACgBV,IAAM,mBAAmB,CAG9B,WAKiC;AAa5B,IAAM,aAAa,CACxB,QACA,aAGmB;AAAA,EACnB;AAAA,EACA,SAAS,OAAO,WAAsC;AACpD,UAAM,cAAc,OAAO,MAAM,MAAM,MAAM;AAC7C,UAAM,SAAS,MAAM,QAAQ,WAAW;AACxC,WAAO,OAAO,OAAO,MAAM,MAAM;AAAA,EACnC;AACF;;;AClDA;AAAA,EACE,gBAAAC;AAAA,EACA;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AACP,SAAS,QAAAC,aAAY;AACrB,SAAS,WAAAC,gBAAe;AACxB,SAAS,eAAAC,oBAAmB;AAK5B,IAAMC,cAAaH,MAAKC,SAAQ,GAAG,WAAW,SAAS;AACvD,IAAM,cAAcD,MAAKG,aAAY,SAAS;AAEvC,SAAS,mBAAyB;AACvC,EAAAN,WAAU,aAAa,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACzD;AAEO,SAAS,cAAc,MAAsB;AAClD,SAAOG,MAAK,aAAa,GAAG,IAAI,OAAO;AACzC;AAEO,SAAS,gBAAwB;AACtC,SAAO;AACT;AAEO,SAAS,WAAW,QAAsB;AAC/C,mBAAiB;AACjB,QAAM,WAAW,cAAc,OAAO,IAAI;AAC1C,MAAIF,YAAW,QAAQ,GAAG;AACxB,UAAM,IAAI,MAAM,WAAW,OAAO,IAAI,kBAAkB;AAAA,EAC1D;AACA,QAAM,UAAUE;AAAA,IACd;AAAA,IACA,IAAI,OAAO,IAAI,IAAIE,aAAY,CAAC,EAAE,SAAS,KAAK,CAAC;AAAA,EACnD;AACA,EAAAN,eAAc,SAAS,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,EAAE,MAAM,IAAM,CAAC;AACvE,EAAAG,YAAW,SAAS,QAAQ;AAC9B;AAKO,SAAS,WAAW,SAAyB;AAClD,mBAAiB;AACjB,QAAM,QAAQ,YAAY,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AACxE,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAiB,KAAK;AAAA,MAC1BJ,cAAaK,MAAK,aAAa,IAAI,GAAG,OAAO;AAAA,IAC/C;AACA,QAAI,OAAO,YAAY,QAAS,QAAO;AAAA,EACzC;AAEA,QAAM,IAAI,MAAM,WAAW,OAAO,aAAa;AACjD;;;AC1DA,SAAS,SAAS;AAGX,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO,EAAE,OAAO;AAAA,IACd,MAAM,EAAE,OAAO,EAAE,SAAS,aAAa;AAAA,EACzC,CAAC;AAAA,EACD,QAAQ,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACvC,SAAS,EAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,EAC/D,CAAC;AACH,CAAC;;;AHPM,IAAM,eAAe,WAAW,oBAAoB,OAAO,WAAW;AAC3E,QAAM,UAAU,QAAQ,SAAS;AAEjC,QAAM,SAAiB;AAAA,IACrB,MAAM,OAAO;AAAA,IACb,SAAS,QAAQ,UAAU,SAAS;AAAA,IACpC,WAAW,KAAK,OAAO,QAAQ,SAAS;AAAA,IACxC,OAAO;AAAA,IACP,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AAEA,aAAW,MAAM;AAEjB,SAAO,EAAE,MAAM,OAAO,MAAM,SAAS,OAAO,QAAQ;AACtD,CAAC;;;AIpBD,SAAS,WAAAI,gBAAe;AACxB,OAAOC,WAAU;AACjB,SAAS,uBAAuB;;;ACFhC,SAAS,KAAAC,UAAS;AAGX,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAOC,GAAE,OAAO;AAAA,IACd,MAAMA,GAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACvC,KAAKA,GACF,OAAO,EACP,SAAS,EACT,SAAS,qEAAqE;AAAA,EACnF,CAAC;AAAA,EACD,QAAQA,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACvC,SAASA,GAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,EAC/D,CAAC;AACH,CAAC;;;ADVD,eAAe,aAAa,QAAiC;AAC3D,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,OAAG,SAAS,QAAQ,CAAC,WAAW;AAC9B,SAAG,MAAM;AACT,cAAQ,OAAO,KAAK,CAAC;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,eAAe,WAAW,oBAAoB,OAAO,WAAW;AAC3E,QAAM,kBACJ,OAAO,QAAQ,OACX,OAAO,MACP,MAAM,aAAa,8BAA8B;AAEvD,MAAI;AACJ,MAAI;AACF,UAAM,iBAAiBC,MAAK,OAAO,eAAe;AAClD,cAAUC,SAAQ,cAAc,cAAc;AAAA,EAChD,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAiB;AAAA,IACrB,MAAM,OAAO;AAAA,IACb,SAAS,QAAQ,UAAU,SAAS;AAAA,IACpC,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AAEA,aAAW,MAAM;AAEjB,SAAO,EAAE,MAAM,OAAO,MAAM,SAAS,OAAO,QAAQ;AACtD,CAAC;;;AE5CD,SAAS,gBAAAC,eAAc,eAAAC,oBAAmB;AAC1C,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAEX,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,MAAMA,GAAE,OAAO;AAAA,EACf,SAASA,GAAE,OAAO;AAAA,EAClB,WAAWA,GAAE,OAAO;AAAA,EACpB,OAAOA,GAAE,QAAQ,QAAQ;AAAA,EACzB,WAAWA,GAAE,OAAO;AACtB,CAAC;AAKM,IAAM,mBAAmB,aAAa,KAAK,EAAE,WAAW,KAAK,CAAC;;;ADT9D,IAAM,mBAAmB,iBAAiB;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAOC,GAAE,OAAO,CAAC,CAAC;AAAA,EAClB,QAAQA,GAAE,MAAM,gBAAgB;AAClC,CAAC;;;ADHM,IAAM,aAAa,WAAW,kBAAkB,YAAY;AACjE,mBAAiB;AACjB,QAAM,MAAM,cAAc;AAC1B,QAAM,QAAQC,aAAY,GAAG,EAAE;AAAA,IAC7B,CAAC,MAAM,EAAE,SAAS,OAAO,KAAK,CAAC,EAAE,WAAW,GAAG;AAAA,EACjD;AACA,SAAO,MAAM,IAAI,CAAC,MAAM;AACtB,UAAM,SAAiB,KAAK,MAAMC,cAAaC,MAAK,KAAK,CAAC,GAAG,OAAO,CAAC;AACrE,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,IACpB;AAAA,EACF,CAAC;AACH,CAAC;;;AGrBD,SAAS,KAAAC,UAAS;AAIX,IAAM,uBAAuB,iBAAiB;AAAA,EACnD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAOC,GAAE,OAAO;AAAA,IACd,MAAMA,GAAE,OAAO,EAAE,SAAS,aAAa;AAAA,EACzC,CAAC;AAAA,EACD,QAAQ;AACV,CAAC;;;ACPM,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,WAAW,OAAO,IAAI;AACrC,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,IACpB;AAAA,EACF;AACF;;;ACfA,SAAS,cAAAC,mBAAkB;;;ACA3B,SAAS,KAAAC,UAAS;AAGX,IAAM,qBAAqB,iBAAiB;AAAA,EACjD,MAAM;AAAA,EACN,aACE;AAAA,EACF,OAAOC,GAAE,OAAO;AAAA,IACd,MAAMA,GAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IACxD,SAASA,GACN,QAAQ,EACR,SAAS,kCAAkC;AAAA,EAChD,CAAC;AAAA,EACD,QAAQA,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IACtD,SAASA,GAAE,QAAQ,IAAI;AAAA,EACzB,CAAC;AACH,CAAC;;;ADXM,IAAM,eAAe,WAAW,oBAAoB,OAAO,WAAW;AAC3E,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,QAAM,eAAe,QAAQ,EAAE,MAAM,OAAO,KAAK,CAAC;AAGlD,EAAAC,YAAW,cAAc,OAAO,IAAI,CAAC;AAErC,SAAO,EAAE,MAAM,OAAO,MAAM,SAAS,KAAc;AACrD,CAAC;;;AEpBD,SAAS,WAAAC,UAAS,4BAA4B;AAC9C,OAAOC,WAAU;;;ACDjB,SAAS,KAAAC,UAAS;AAGX,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAOC,GAAE,OAAO;AAAA,IACd,QAAQA,GAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,IAC5C,aAAaA,GACV,OAAO,EACP,SAAS,qCAAqC;AAAA,EACnD,CAAC;AAAA,EACD,QAAQA,GAAE,OAAO;AAAA,IACf,aAAaA,GACV,OAAO,EACP,SAAS,mCAAmC;AAAA,EACjD,CAAC;AACH,CAAC;;;ADXM,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,eAAe,WAAW,OAAO,MAAM;AAE7C,UAAM,UAAU,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,QAAQ;AAC/D,UAAM,KAAK,qBAAqB,YAAY,OAAO;AAEnD,UAAM,iBAAiBC,MAAK,OAAO,aAAa,SAAS;AACzD,UAAM,UAAUC,SAAQ,cAAc,cAAc;AAEpD,OAAG,KAAK,CAAC,OAAO,CAAC;AAEjB,WAAO;AAAA,MACL,aAAa,OAAO,KAAK,GAAG,UAAU,CAAC,EAAE,SAAS,QAAQ;AAAA,IAC5D;AAAA,EACF;AACF;;;AErBA,uBAAiB;AAFjB,SAAS,WAAAC,gBAAe;AACxB,OAAOC,WAAU;;;ACDjB,SAAS,KAAAC,UAAS;AAGX,IAAM,oBAAoB,iBAAiB;AAAA,EAChD,MAAM;AAAA,EACN,aACE;AAAA,EACF,OAAOC,GAAE,OAAO;AAAA,IACd,QAAQA,GAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,IACzD,SAASA,GAAE,OAAO,EAAE,SAAS,sBAAsB;AAAA,EACrD,CAAC;AAAA,EACD,QAAQA,GAAE,OAAO;AAAA,IACf,WAAWA,GACR,OAAO,EACP,SAAS,kCAAkC;AAAA,EAChD,CAAC;AACH,CAAC;;;ADTM,IAAM,cAAc,WAAW,mBAAmB,OAAO,WAAW;AACzE,QAAM,eAAe,WAAW,OAAO,MAAM;AAE7C,QAAM,iBAAiBC,MAAK,OAAO,aAAa,SAAS;AACzD,QAAM,UAAUC,SAAQ,cAAc,cAAc;AAEpD,QAAM,eAAe,OAAO,KAAK,OAAO,SAAS,MAAM;AACvD,QAAM,iBAAiB,iBAAAC,QAAK,KAAK,SAAS,cAAc,QAAQ,SAAS;AAEzE,SAAO,EAAE,WAAWF,MAAK,OAAO,cAAc,EAAE;AAClD,CAAC;;;ArBQD,IAAM,cAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAMG,WAAU,cAAc,YAAY,GAAG;AAC7C,IAAM,EAAE,QAAQ,IAAIA,SAAQ,iBAAiB;AAE7C,IAAM,kBAAkB,kBAAkB,OAAO;AAEjD,IAAM,mBAAmB;AAEzB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,SAAS,EACd,YAAY,+CAA0C,EACtD,QAAQ,OAAO,EACf,OAAO,uBAAuB,0CAA0C,MAAM;AAEjF,SAAS,YAA0B;AACjC,QAAM,MAAM,QAAQ,KAAK,EAAE;AAC3B,MAAI,QAAQ,UAAU,QAAQ,aAAa,QAAQ,QAAS,QAAO;AACnE,SAAO;AACT;AAEA,SAAS,YAAY,QAAuB;AAC1C,UAAQ,IAAI,aAAa,QAAQ,UAAU,CAAC,CAAC;AAC/C;AAEA,SAAS,oBAA0B;AACjC,QAAM,SAAS,gBAAgB;AAC/B,MAAI,OAAQ,SAAQ,OAAO,MAAM,MAAM;AACzC;AAEA,SAAS,iBAAyB;AAChC,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,eAAe;AAC7B,SAAO,QAAQ,WAAW,OAAO,WAAW;AAC9C;AAIA,QACG,QAAQ,OAAO,EACf,YAAY,gEAAgE,EAC5E,OAAO,YAAY;AAClB,QAAM,SAAS,mBAAmB;AAClC,MAAI;AACF,UAAM,MAAM,MAAM;AAClB,YAAQ,IAAI,yBAAyB;AAAA,EACvC,SAAS,OAAO;AACd,YAAQ,MAAM,iBAAkB,MAAgB,OAAO;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,OAAO,MAAM;AACZ,mBAAiB;AACjB,UAAQ,IAAI,aAAa;AAC3B,CAAC;AAQH,SAAS,iBAAiB,QAAiB,UAA6B;AACtE,MAAI,UAAU;AACd,aAAW,WAAW,UAAU;AAC9B,QAAI,WAAW,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM,OAAO;AAChE,QAAI,CAAC,UAAU;AACb,iBAAW,QAAQ,QAAQ,OAAO;AAAA,IACpC;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAIA,SAAS,mBAAmB,QAAiB,OAA0B;AACrE,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,OAAO,KAAK,MAAM,GAAG;AAC3C,UAAM,WAAW,SAAS,IAAI;AAC9B,UAAM,QAAQ,iBAAiB,QAAQ,QAAQ;AAE/C,UAAM,MAAM,MAAM,QAAQ,QAAQ,EAAE,YAAY,KAAK,OAAO,WAAW;AAGvE,UAAM,QAAS,KAAK,OAAO,MAAc,SAAS,CAAC;AACnD,UAAM,eAAyB,CAAC;AAEhC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAa,KAAK,GAAG;AACrD,YAAM,OAAO,MAAM,eAAe;AAClC,YAAM,WAAW,MAAM,KAAK;AAE5B,UAAI,aAAa,cAAc;AAC7B,YAAI,OAAO,KAAK,GAAG,IAAI,MAAM,KAAK;AAAA,MACpC,WAAW,aAAa,eAAe;AACrC,YAAI,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI;AACpC,qBAAa,KAAK,GAAG;AAAA,MACvB,OAAO;AACL,YAAI,eAAe,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,YAAqC;AACrD,iBAAW,OAAO,cAAc;AAC9B,YAAI,QAAQ,GAAG,MAAM,OAAW,SAAQ,GAAG,IAAI;AAAA,MACjD;AACA,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ,OAAO;AACzC,oBAAY,MAAM;AAAA,MACpB,SAAS,OAAO;AACd,gBAAQ,MAAO,MAAgB,OAAO;AACtC,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAoBA,SAAS,kBAAkB,aAA6C;AACtE,MAAI,YAAY,QAAQ,YAAY,aAAa;AAC/C,UAAM,UAAU,YAAY,KAAK,QAAQ,kBAAkB,EAAE;AAC7D,WAAO,YAAY,YAAY,OAAO;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,MAAmC;AAC7D,MAAI,MAAM,QAAQ,KAAK,IAAI,EAAG,QAAO,KAAK,KAAK,SAAS,MAAM;AAC9D,MAAI,KAAK,MAAO,QAAO,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAC/D,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAmC;AAC3D,MAAI,MAAM,QAAQ,KAAK,IAAI,EAAG,QAAO,KAAK,KAAK,SAAS,QAAQ;AAChE,SAAO,KAAK,SAAS;AACvB;AAEA,SAAS,iBAAiB,MAAmC;AAC3D,MAAI,MAAM,QAAQ,KAAK,IAAI,EAAG,QAAO,KAAK,KAAK,KAAK,CAAC,MAAM,MAAM,YAAY,MAAM,SAAS;AAC5F,MAAI,KAAK,MAAO,QAAO,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,SAAS,SAAS;AACzF,SAAO,KAAK,SAAS,YAAY,KAAK,SAAS;AACjD;AAEA,SAAS,oBACP,QACA,eACM;AACN,aAAW,UAAU,eAAe;AAClC,UAAM,WAAW,OAAO,KAAK,MAAM,GAAG;AACtC,UAAM,WAAW,SAAS,IAAI;AAC9B,UAAM,QAAQ,iBAAiB,QAAQ,QAAQ;AAG/C,QAAI,MAAM,SAAS,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM,QAAQ,EAAG;AAEvD,UAAM,MAAM,MAAM,QAAQ,QAAQ,EAAE,YAAY,OAAO,WAAW;AAElE,UAAM,WAAW,kBAAkB,OAAO,WAAW;AACrD,UAAM,QAAQ,SAAS,cAAc,CAAC;AACtC,UAAM,cAAc,IAAI,IAAI,SAAS,YAAY,CAAC,CAAC;AACnD,UAAM,eAAyB,CAAC;AAChC,UAAM,aAAuB,CAAC;AAC9B,UAAM,aAAuB,CAAC;AAE9B,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,YAAM,OAAO,KAAK,eAAe;AACjC,YAAM,WAAW,mBAAmB,IAAI;AACxC,YAAM,QAAQ,iBAAiB,IAAI;AACnC,YAAM,QAAQ,iBAAiB,IAAI;AAEnC,UAAI,MAAO,YAAW,KAAK,GAAG;AAE9B,UAAI,OAAO;AACT,mBAAW,KAAK,GAAG;AACnB,YAAI,YAAY,IAAI,GAAG,KAAK,CAAC,UAAU;AACrC,cAAI,eAAe,KAAK,GAAG,WAAW,GAAG,IAAI,YAAY;AAAA,QAC3D,OAAO;AACL,cAAI,OAAO,KAAK,GAAG,WAAW,GAAG,IAAI,YAAY;AACjD,uBAAa,KAAK,GAAG;AAAA,QACvB;AAAA,MACF,WAAW,YAAY,CAAC,YAAY,IAAI,GAAG,GAAG;AAC5C,YAAI,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI;AACpC,qBAAa,KAAK,GAAG;AAAA,MACvB,OAAO;AACL,YAAI,eAAe,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,YAAqC;AAErD,iBAAW,OAAO,cAAc;AAC9B,YAAI,QAAQ,GAAG,MAAM,OAAW,SAAQ,GAAG,IAAI;AAAA,MACjD;AACA,iBAAW,OAAO,YAAY;AAC5B,YAAI,QAAQ,GAAG,KAAK,QAAQ,OAAO,QAAQ,GAAG,MAAM,UAAU;AAC5D,kBAAQ,GAAG,IAAI,OAAO,QAAQ,GAAG,CAAC;AAAA,QACpC;AAAA,MACF;AACA,iBAAW,OAAO,YAAY;AAC5B,YAAI,OAAO,QAAQ,GAAG,MAAM,UAAU;AACpC,cAAI;AACF,oBAAQ,GAAG,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAW;AAAA,UAClD,QAAQ;AACN,oBAAQ,MAAM,sBAAsB,GAAG,EAAE;AACzC,oBAAQ,KAAK,CAAC;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACF,cAAM,UAAU,eAAe;AAC/B,cAAM,SAAS,MAAM,SAAS,SAAS,OAAO,MAAM,OAAkC;AACtF,oBAAY,MAAM;AAClB,0BAAkB;AAAA,MACpB,SAAS,OAAO;AACd,gBAAQ,MAAO,MAAgB,OAAO;AACtC,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAIA,IAAM,SAAS,CAAC,OAAO,QAAQ,KAAK;AACpC,IAAM,SAAS,CAAC,UAAU,YAAY,QAAQ,WAAW,YAAY,UAAU;AAE/E,QACG,QAAQ,KAAK,EACb,YAAY,kCAAkC,EAC9C,eAAe,mBAAmB,qBAAqB,EACvD,eAAe,mBAAmB,iBAAiB,OAAO,KAAK,IAAI,CAAC,GAAG,EACvE,eAAe,qBAAqB,wBAAwB,EAC5D,eAAe,qBAAqB,4BAA4B,EAChE,OAAO,mBAAmB,eAAe,OAAO,KAAK,IAAI,CAAC,KAAK,QAAQ,EACvE,OAAO,OAAO,YAAY;AACzB,MAAI;AACF,UAAM,UAAU,eAAe;AAC/B,UAAM,SAAS,MAAM,SAAS,SAAS,OAAO;AAAA,MAC5C,OAAO,QAAQ;AAAA,MACf,MAAM,EAAE,UAAU,OAAO,QAAQ,KAAK;AAAA,MACtC,IAAI;AAAA,QACF,OAAO,QAAQ;AAAA,QACf,UAAU,QAAQ;AAAA,QAClB,QAAQ,OAAO,QAAQ,MAAM;AAAA,QAC7B,QAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AACD,gBAAY,MAAM;AAClB,sBAAkB;AAAA,EACpB,SAAS,OAAO;AACd,YAAQ,MAAO,MAAgB,OAAO;AACtC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAKH,IAAM,eAAe,oBAAI,IAAI,CAAC,KAAK,CAAC;AAEpC,mBAAmB,SAAS,WAAW;AACvC;AAAA,EACE;AAAA,EACC,gBAAgB,OAAO,CAAC,MAAW,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC;AAC/D;AAIA,QACG,QAAQ,OAAO,EACf,YAAY,sBAAsB,EAClC,OAAO,MAAM;AACZ,QAAM,WAAW;AAAA,IACf,GAAG,YAAY,IAAI,CAAC,OAAO;AAAA,MACzB,MAAM,EAAE,OAAO;AAAA,MACf,aAAa,EAAE,OAAO;AAAA,IACxB,EAAE;AAAA,IACF,GAAG,gBACA,OAAO,CAAC,MAAM,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,IAAI,CAAC,EAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,EAAE,YAAY,EAAE;AAAA,EAC9D,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAE7C,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,UAAU;AAC3B,UAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,GAAG;AAC3C,UAAM,KAAK,KAAK,MAAM,MAAM,QAAQ,OAAO,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,WAAW,CAAC,EAAE;AAAA,EACnF;AACA,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,MAAM,IAAI,GAAG,SAAS,MAAM,QAAQ,CAAC;AAChD,UAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAC5B,oBAAkB;AACpB,CAAC;AAEH,QAAQ,MAAM;","names":["nacl","z","crypto","code","readFileSync","writeFileSync","mkdirSync","join","homedir","join","homedir","readFileSync","mkdirSync","writeFileSync","readFileSync","writeFileSync","mkdirSync","existsSync","renameSync","join","homedir","randomBytes","CONFIG_DIR","Keypair","bs58","z","z","bs58","Keypair","readFileSync","readdirSync","join","z","z","z","readdirSync","readFileSync","join","z","z","unlinkSync","z","z","unlinkSync","Keypair","bs58","z","z","bs58","Keypair","Keypair","bs58","z","z","bs58","Keypair","nacl","require"]}